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

Reply via email to