diff --git a/src/vulkan/runtime/vk_buffer.c b/src/vulkan/runtime/vk_buffer.c index 499287f6f12..4a7cdf1609f 100644 --- a/src/vulkan/runtime/vk_buffer.c +++ b/src/vulkan/runtime/vk_buffer.c @@ -48,6 +48,22 @@ vk_buffer_init(struct vk_device *device, BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR); if (usage2_info != NULL) buffer->usage = usage2_info->usage; + + buffer->address_flags = + ((buffer->create_flags & VK_BUFFER_CREATE_PROTECTED_BIT) ? + VK_ADDRESS_COMMAND_PROTECTED_BIT_KHR : 0) | + ((buffer->usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) ? + VK_ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR : 0) | + ((buffer->usage & VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT) ? + VK_ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR : 0) | + ((buffer->usage & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) == 0 ? + VK_ADDRESS_COMMAND_FULLY_BOUND_BIT_KHR : 0); + + buffer->copy_flags = + ((buffer->create_flags & VK_BUFFER_CREATE_PROTECTED_BIT) ? + VK_ADDRESS_COPY_PROTECTED_BIT_KHR : 0) | + ((buffer->create_flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) ? + VK_ADDRESS_COPY_SPARSE_BIT_KHR : 0); } void * @@ -128,7 +144,7 @@ vk_common_GetBufferMemoryRequirements2(VkDevice _device, .pNext = NULL, .pCreateInfo = &pCreateInfo, }; - + device->dispatch_table.GetDeviceBufferMemoryRequirements(_device, &info, pMemoryRequirements); } diff --git a/src/vulkan/runtime/vk_buffer.h b/src/vulkan/runtime/vk_buffer.h index 45093f97986..056e2654e60 100644 --- a/src/vulkan/runtime/vk_buffer.h +++ b/src/vulkan/runtime/vk_buffer.h @@ -47,6 +47,12 @@ struct vk_buffer { * delay as far as the bind for non-sparse buffers. */ VkDeviceAddress device_address; + + /** Inferred address flags from create_flags */ + VkAddressCommandFlagsKHR address_flags; + + /** Inferred copy flags from create_flags */ + VkAddressCopyFlagsKHR copy_flags; }; VK_DEFINE_NONDISP_HANDLE_CASTS(vk_buffer, base, VkBuffer, VK_OBJECT_TYPE_BUFFER);