comp/render: Add VkExternalMemoryBufferCreateInfo

Fixes validation error when calling render_buffer_init_exportable

VUID-vkBindBufferMemory-memory-02726(ERROR / SPEC): msgNum: -168767885 - Validation Error: [ VUID-vkBindBufferMemory-memory-02726 ] Object 0: handle = 0xe88693000000000c, type = VK_OBJECT_TYPE_BUFFER; Object 1: handle = 0xcad092000000000d, type = VK_OBJECT_TYPE_DEVICE_MEMORY; | MessageID = 0xf5f0ce73 | vkBindBufferMemory(): The VkDeviceMemory (VkDeviceMemory 0xcad092000000000d[]) has an external handleType of VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT which does not include at least one handle from VkBuffer (VkBuffer 0xe88693000000000c[]) handleType Unhandled VkExternalMemoryHandleTypeFlagBits. The Vulkan spec states: If the value of VkExportMemoryAllocateInfo::handleTypes used to allocate memory is not 0, it must include at least one of the handles set in VkExternalMemoryBufferCreateInfo::handleTypes when buffer was created (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkBindBufferMemory-memory-02726)
    Objects: 2
        [0] 0xe88693000000000c, type: 9, name: NULL
        [1] 0xcad092000000000d, type: 8, name: NULL
This commit is contained in:
Christoph Haag 2022-04-15 01:26:51 +02:00
parent a55a5a54b3
commit 7ebd11e1d4

View file

@ -26,6 +26,7 @@ create_buffer(struct vk_bundle *vk,
VkBufferUsageFlags usage_flags,
VkMemoryPropertyFlags memory_property_flags,
VkDeviceSize size,
const void *pNext_for_create,
const void *pNext_for_allocate,
VkBuffer *out_buffer,
VkDeviceMemory *out_memory,
@ -37,6 +38,7 @@ create_buffer(struct vk_bundle *vk,
// Create the buffer handle.
VkBufferCreateInfo buffer_info = {
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
.pNext = pNext_for_create,
.size = size,
.usage = usage_flags,
};
@ -133,6 +135,7 @@ render_buffer_init(struct vk_bundle *vk,
usage_flags, // usage_flags
memory_property_flags, // memory_property_flags
size, // size
NULL, // pNext for create
NULL, // pNext_for_allocate
&buffer->buffer, // out_buffer
&buffer->memory, // out_memory
@ -154,6 +157,11 @@ render_buffer_init_exportable(struct vk_bundle *vk,
{
VkResult ret;
VkExternalMemoryBufferCreateInfo export_create_info = {
.sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO,
.handleTypes = vk_csci_get_image_external_handle_type(vk),
};
VkExportMemoryAllocateInfo export_alloc_info = {
.sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR,
.pNext = NULL,
@ -164,6 +172,7 @@ render_buffer_init_exportable(struct vk_bundle *vk,
usage_flags, // usage_flags
memory_property_flags, // memory_property_flags
size, // size
&export_create_info, // pNext_for_create
&export_alloc_info, // pNext_for_allocate
&buffer->buffer, // out_buffer
&buffer->memory, // out_memory