From b7bf4e53049942ace9fbbc81baaa5646ce2deb1d Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 5 Mar 2025 14:34:18 +0200 Subject: [PATCH] vulkan/runtime: build (address|copy)_flags for vk_buffer Signed-off-by: Lionel Landwerlin Reviewed-by: Samuel Pitoiset Part-of: --- src/vulkan/runtime/vk_buffer.c | 18 +++++++++++++++++- src/vulkan/runtime/vk_buffer.h | 6 ++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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);