From 5ff01962fcb5c58dad5c87cf28a2389f4672bc0d Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Tue, 28 May 2024 10:46:32 +0200 Subject: [PATCH] v3dv: handle VkBufferUsageFlags2CreateInfoKHR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is added with VK_KHR_maintenance5 to allow 64-bit for buffer usage flags. The flags are backwards compatible so we don't need to change the flag enum values by the new ones. Reviewed-by: Alejandro PiƱeiro Part-of: --- src/broadcom/vulkan/v3dv_device.c | 11 ++++++++++- src/broadcom/vulkan/v3dv_image.c | 14 ++++++++++++-- src/broadcom/vulkan/v3dv_private.h | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index e2adff801aa..bc9ffcdb5a0 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -2497,8 +2497,17 @@ v3dv_buffer_init(struct v3dv_device *device, struct v3dv_buffer *buffer, uint32_t alignment) { + const VkBufferUsageFlags2CreateInfoKHR *flags2 = + vk_find_struct_const(pCreateInfo->pNext, + BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR); + VkBufferUsageFlags2KHR usage; + if (flags2) + usage = flags2->usage; + else + usage = pCreateInfo->usage; + buffer->size = pCreateInfo->size; - buffer->usage = pCreateInfo->usage; + buffer->usage = usage; buffer->alignment = alignment; } diff --git a/src/broadcom/vulkan/v3dv_image.c b/src/broadcom/vulkan/v3dv_image.c index 8a0b71a49d1..ec0a204cabf 100644 --- a/src/broadcom/vulkan/v3dv_image.c +++ b/src/broadcom/vulkan/v3dv_image.c @@ -893,8 +893,18 @@ v3dv_CreateBufferView(VkDevice _device, v3dv_X(device, get_internal_type_bpp_for_output_format) (view->format->planes[0].rt_type, &view->internal_type, &view->internal_bpp); - if (buffer->usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT || - buffer->usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) + const VkBufferUsageFlags2CreateInfoKHR *flags2 = + vk_find_struct_const(pCreateInfo->pNext, + BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR); + + VkBufferUsageFlags2KHR usage; + if (flags2) + usage = flags2->usage; + else + usage = buffer->usage; + + if (usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT || + usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) v3dv_X(device, pack_texture_shader_state_from_buffer_view)(device, view); *pView = v3dv_buffer_view_to_handle(view); diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 912e9f14fc0..baefcb4ca51 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -820,7 +820,7 @@ struct v3dv_buffer { struct vk_object_base base; VkDeviceSize size; - VkBufferUsageFlags usage; + VkBufferUsageFlagBits2KHR usage; uint32_t alignment; struct v3dv_device_memory *mem;