Module: Mesa
Branch: main
Commit: 8bb572b7f89a81866085e8c6d041caec6218bcc5
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bb572b7f89a81866085e8c6d041caec6218bcc5

Author: Samuel Pitoiset <[email protected]>
Date:   Wed Oct 19 14:25:55 2022 +0200

radv: add radv_pipeline_key::dynamic_provoking_vtx_mode

Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Rhys Perry <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19168>

---

 src/amd/vulkan/radv_pipeline.c | 16 ++++++++++++++++
 src/amd/vulkan/radv_shader.h   |  1 +
 2 files changed, 17 insertions(+)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index a7dcb6e9387..67e0d353519 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -2900,6 +2900,22 @@ radv_generate_graphics_pipeline_key(const struct 
radv_graphics_pipeline *pipelin
 
    key.dynamic_color_write_mask = !!(pipeline->dynamic_states & 
RADV_DYNAMIC_COLOR_WRITE_MASK);
 
+   if (device->physical_device->use_ngg) {
+      VkShaderStageFlags ngg_stage;
+
+      if (pipeline->active_stages & VK_SHADER_STAGE_GEOMETRY_BIT) {
+         ngg_stage = VK_SHADER_STAGE_GEOMETRY_BIT;
+      } else if (pipeline->active_stages & 
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) {
+         ngg_stage = VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;
+      } else {
+         ngg_stage = VK_SHADER_STAGE_VERTEX_BIT;
+      }
+
+      key.dynamic_provoking_vtx_mode =
+         !!(pipeline->dynamic_states & RADV_DYNAMIC_PROVOKING_VERTEX_MODE) &&
+         (ngg_stage == VK_SHADER_STAGE_VERTEX_BIT || ngg_stage == 
VK_SHADER_STAGE_GEOMETRY_BIT);
+   }
+
    return key;
 }
 
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index 89f21ceaa1b..b8d966d6412 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -65,6 +65,7 @@ struct radv_pipeline_key {
    uint32_t dynamic_patch_control_points : 1;
    uint32_t dynamic_rasterization_samples : 1;
    uint32_t dynamic_color_write_mask : 1;
+   uint32_t dynamic_provoking_vtx_mode : 1;
 
    struct {
       uint32_t instance_rate_inputs;

Reply via email to