Module: Mesa Branch: main Commit: 2b62d90158821f16a9b223a04b2b5a7641b98f34 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2b62d90158821f16a9b223a04b2b5a7641b98f34
Author: Connor Abbott <cwabbo...@gmail.com> Date: Thu Sep 28 12:41:58 2023 +0200 vk/graphics_state: Support VK_KHR_maintenance5 Switch to using VkPipelineCreateFlags2KHR, and use the new common helper to get the right flags. Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25436> --- src/freedreno/vulkan/tu_pipeline.cc | 16 ++++++++-------- src/intel/vulkan/genX_pipeline.c | 2 +- src/vulkan/runtime/vk_graphics_state.c | 12 ++++++------ src/vulkan/runtime/vk_graphics_state.h | 2 +- src/vulkan/runtime/vk_render_pass.c | 14 ++++++++------ src/vulkan/runtime/vk_render_pass.h | 4 ++-- 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/freedreno/vulkan/tu_pipeline.cc b/src/freedreno/vulkan/tu_pipeline.cc index 5745930e66b..707d35ae585 100644 --- a/src/freedreno/vulkan/tu_pipeline.cc +++ b/src/freedreno/vulkan/tu_pipeline.cc @@ -3775,8 +3775,8 @@ tu_pipeline_builder_parse_rasterization_order( * for advanced_blend in sysmem mode if a feedback loop is detected. */ if (builder->graphics_state.rp->pipeline_flags & - (VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT | - VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT)) { + (VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT | + VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT)) { sysmem_prim_mode = FLUSH_PER_OVERLAP_AND_OVERWRITE; pipeline->prim_order.sysmem_single_prim_mode = true; } @@ -3967,10 +3967,10 @@ tu_pipeline_builder_build(struct tu_pipeline_builder *builder, &builder->graphics_state); gfx_pipeline->feedback_loop_color = (builder->graphics_state.rp->pipeline_flags & - VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT); + VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT); gfx_pipeline->feedback_loop_ds = (builder->graphics_state.rp->pipeline_flags & - VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT); + VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT); gfx_pipeline->feedback_loop_may_involve_textures = (gfx_pipeline->feedback_loop_color || gfx_pipeline->feedback_loop_ds) && @@ -4137,17 +4137,17 @@ tu_pipeline_builder_init_graphics( if (subpass->feedback_loop_color) { rp_state.pipeline_flags |= - VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT; + VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT; } if (subpass->feedback_loop_ds) { rp_state.pipeline_flags |= - VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT; + VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT; } if (pass->fragment_density_map.attachment != VK_ATTACHMENT_UNUSED) { rp_state.pipeline_flags |= - VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT; + VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT; } builder->unscaled_input_fragcoord = 0; @@ -4172,7 +4172,7 @@ tu_pipeline_builder_init_graphics( if (builder->graphics_state.rp) { builder->fragment_density_map = (builder->graphics_state.rp->pipeline_flags & - VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT) || + VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT) || TU_DEBUG(FDM); } } diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c index 0ef1d9cf9fc..ec674d84273 100644 --- a/src/intel/vulkan/genX_pipeline.c +++ b/src/intel/vulkan/genX_pipeline.c @@ -1487,7 +1487,7 @@ static bool rp_has_ds_self_dep(const struct vk_render_pass_state *rp) { return rp->pipeline_flags & - VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT; + VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT; } static void diff --git a/src/vulkan/runtime/vk_graphics_state.c b/src/vulkan/runtime/vk_graphics_state.c index d5c2284876b..aa1c62176e7 100644 --- a/src/vulkan/runtime/vk_graphics_state.c +++ b/src/vulkan/runtime/vk_graphics_state.c @@ -1038,18 +1038,18 @@ vk_render_pass_state_init(struct vk_render_pass_state *rp, const VkGraphicsPipelineCreateInfo *info, VkGraphicsPipelineLibraryFlagsEXT lib) { - VkPipelineCreateFlags valid_pipeline_flags = 0; + VkPipelineCreateFlags2KHR valid_pipeline_flags = 0; if (lib & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT) { valid_pipeline_flags |= - VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR | - VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT; + VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR | + VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT; } if (lib & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT) { valid_pipeline_flags |= - VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT | - VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT; + VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT | + VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT; } - const VkPipelineCreateFlags pipeline_flags = + const VkPipelineCreateFlags2KHR pipeline_flags = (driver_rp ? driver_rp->pipeline_flags : vk_get_pipeline_rendering_flags(info)) & valid_pipeline_flags; diff --git a/src/vulkan/runtime/vk_graphics_state.h b/src/vulkan/runtime/vk_graphics_state.h index 5e6541956de..4efee035827 100644 --- a/src/vulkan/runtime/vk_graphics_state.h +++ b/src/vulkan/runtime/vk_graphics_state.h @@ -680,7 +680,7 @@ struct vk_render_pass_state { * For drivers which use vk_render_pass, this will also include flags * generated based on subpass self-dependencies and fragment density map. */ - VkPipelineCreateFlags pipeline_flags; + VkPipelineCreateFlags2KHR pipeline_flags; /* True if any feedback loops only involve input attachments. */ bool feedback_loop_input_only; diff --git a/src/vulkan/runtime/vk_render_pass.c b/src/vulkan/runtime/vk_render_pass.c index bc1ae993091..16106153c03 100644 --- a/src/vulkan/runtime/vk_render_pass.c +++ b/src/vulkan/runtime/vk_render_pass.c @@ -30,6 +30,7 @@ #include "vk_format.h" #include "vk_framebuffer.h" #include "vk_image.h" +#include "vk_pipeline.h" #include "vk_util.h" #include "util/log.h" @@ -838,14 +839,15 @@ vk_get_pipeline_rendering_create_info(const VkGraphicsPipelineCreateInfo *info) return vk_find_struct_const(info->pNext, PIPELINE_RENDERING_CREATE_INFO); } -VkPipelineCreateFlags +VkPipelineCreateFlags2KHR vk_get_pipeline_rendering_flags(const VkGraphicsPipelineCreateInfo *info) { - VkPipelineCreateFlags rendering_flags = info->flags & - (VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT | - VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT | - VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR | - VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT); + VkPipelineCreateFlags2KHR rendering_flags = + vk_graphics_pipeline_create_flags(info) & + (VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT | + VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT | + VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR | + VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT); VK_FROM_HANDLE(vk_render_pass, render_pass, info->renderPass); if (render_pass != NULL) { diff --git a/src/vulkan/runtime/vk_render_pass.h b/src/vulkan/runtime/vk_render_pass.h index c65ac702e31..71ba81ec059 100644 --- a/src/vulkan/runtime/vk_render_pass.h +++ b/src/vulkan/runtime/vk_render_pass.h @@ -155,7 +155,7 @@ struct vk_subpass { VkExtent2D fragment_shading_rate_attachment_texel_size; /** Extra VkPipelineCreateFlags for this subpass */ - VkPipelineCreateFlagBits pipeline_flags; + VkPipelineCreateFlagBits2KHR pipeline_flags; /** VkAttachmentSampleCountInfoAMD for this subpass * @@ -329,7 +329,7 @@ vk_get_pipeline_rendering_create_info(const VkGraphicsPipelineCreateInfo *info); * * :param info: |in| One of the pCreateInfos from vkCreateGraphicsPipelines */ -VkPipelineCreateFlags +VkPipelineCreateFlags2KHR vk_get_pipeline_rendering_flags(const VkGraphicsPipelineCreateInfo *info); /** Returns the VkAttachmentSampleCountInfoAMD for a graphics pipeline