From a7fccbbf8562e77ac316a2a6a049f496342592a2 Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Tue, 11 Feb 2025 23:32:39 -0800 Subject: [PATCH] venus: fix to handle pipeline flags2 from maint5 Fixes: be6fece6e1e ("venus: enable VK_KHR_maintenance5") Signed-off-by: Yiwei Zhang Part-of: --- src/virtio/vulkan/vn_buffer.c | 3 +++ src/virtio/vulkan/vn_pipeline.c | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/virtio/vulkan/vn_buffer.c b/src/virtio/vulkan/vn_buffer.c index d4837c401ea..f7cce16d933 100644 --- a/src/virtio/vulkan/vn_buffer.c +++ b/src/virtio/vulkan/vn_buffer.c @@ -32,6 +32,9 @@ vn_buffer_get_cache_index(const VkBufferCreateInfo *create_info, * * Btw, we assume VkBufferCreateFlagBits won't exhaust all 32bits, at least * no earlier than VkBufferUsageFlagBits. + * + * TODO: extend cache to cover VkBufferUsageFlags2CreateInfo (introduced in + * VK_KHR_maintenance5 and promoted to 1.4). */ assert(!(create_info->flags & 0x80000000)); diff --git a/src/virtio/vulkan/vn_pipeline.c b/src/virtio/vulkan/vn_pipeline.c index cb35c133d9d..a01fd46de87 100644 --- a/src/virtio/vulkan/vn_pipeline.c +++ b/src/virtio/vulkan/vn_pipeline.c @@ -221,10 +221,10 @@ struct vn_graphics_pipeline_fix_tmp { /* Fixing the pNext chain * * TODO: extend when below or more extensions are supported: - * - VK_KHR_maintenance5 * - VK_EXT_pipeline_robustness */ VkGraphicsPipelineLibraryCreateInfoEXT *gpl_infos; + VkPipelineCreateFlags2CreateInfo *flags2_infos; VkPipelineCreationFeedbackCreateInfo *feedback_infos; VkPipelineFragmentShadingRateStateCreateInfoKHR *fsr_infos; VkPipelineLibraryCreateInfoKHR *library_infos; @@ -641,6 +641,7 @@ vn_graphics_pipeline_fix_tmp_alloc(const VkAllocationCallbacks *alloc, /* for pNext */ VkGraphicsPipelineLibraryCreateInfoEXT *gpl_infos; + VkPipelineCreateFlags2CreateInfo *flags2_infos; VkPipelineCreationFeedbackCreateInfo *feedback_infos; VkPipelineFragmentShadingRateStateCreateInfoKHR *fsr_infos; VkPipelineLibraryCreateInfoKHR *library_infos; @@ -656,6 +657,8 @@ vn_graphics_pipeline_fix_tmp_alloc(const VkAllocationCallbacks *alloc, if (alloc_pnext) { vk_multialloc_add(&ma, &gpl_infos, __typeof__(*gpl_infos), info_count); + vk_multialloc_add(&ma, &flags2_infos, __typeof__(*flags2_infos), + info_count); vk_multialloc_add(&ma, &feedback_infos, __typeof__(*feedback_infos), info_count); vk_multialloc_add(&ma, &fsr_infos, __typeof__(*fsr_infos), info_count); @@ -674,6 +677,7 @@ vn_graphics_pipeline_fix_tmp_alloc(const VkAllocationCallbacks *alloc, if (alloc_pnext) { tmp->gpl_infos = gpl_infos; + tmp->flags2_infos = flags2_infos; tmp->feedback_infos = feedback_infos; tmp->fsr_infos = fsr_infos; tmp->library_infos = library_infos; @@ -1393,6 +1397,7 @@ vn_graphics_pipeline_create_info_pnext_init( uint32_t index) { VkGraphicsPipelineLibraryCreateInfoEXT *gpl = &fix_tmp->gpl_infos[index]; + VkPipelineCreateFlags2CreateInfo *flags2 = &fix_tmp->flags2_infos[index]; VkPipelineCreationFeedbackCreateInfo *feedback = &fix_tmp->feedback_infos[index]; VkPipelineFragmentShadingRateStateCreateInfoKHR *fsr = @@ -1410,6 +1415,10 @@ vn_graphics_pipeline_create_info_pnext_init( memcpy(gpl, src, sizeof(*gpl)); next = gpl; break; + case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO: + memcpy(flags2, src, sizeof(*flags2)); + next = flags2; + break; case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO: memcpy(feedback, src, sizeof(*feedback)); next = feedback;