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;