Mesa (main): radv,aco: do not implicitly export the primitive ID for mesh shaders

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 13 14:39:51 UTC 2022


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Tue May 10 19:22:26 2022 +0200

radv,aco: do not implicitly export the primitive ID for mesh shaders

>From the Vulkan spec:

    "VUID-VkGraphicsPipelineCreateInfo-PrimitiveId-06264
     If the pipeline is being created with pre-rasterization shader
     state, it includes a mesh shader and the fragment shader code
     reads from an input variable that is decorated with PrimitiveId,
     then the mesh shader code must write to a matching output variable,
     decorated with PrimitiveId, in all execution paths"

So, if PS uses PrimitiveID, MS must export it (like GS).

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16438>

---

 src/amd/compiler/aco_instruction_selection.cpp | 2 --
 src/amd/compiler/aco_shader_info.h             | 1 -
 src/amd/vulkan/radv_aco_shader_info.h          | 1 -
 src/amd/vulkan/radv_pipeline.c                 | 6 ++----
 src/amd/vulkan/radv_shader.h                   | 1 -
 src/amd/vulkan/radv_shader_info.c              | 2 --
 6 files changed, 2 insertions(+), 11 deletions(-)

diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp
index 916c73e07c5..5a10c8a0e77 100644
--- a/src/amd/compiler/aco_instruction_selection.cpp
+++ b/src/amd/compiler/aco_instruction_selection.cpp
@@ -10674,8 +10674,6 @@ create_primitive_exports(isel_context *ctx, Temp prim_ch1)
       ctx->outputs.temps[VARYING_SLOT_LAYER * 4u] = bld.copy(bld.def(v1), Operand::c32(0));
    if (outinfo->writes_viewport_index_per_primitive && !ctx->outputs.mask[VARYING_SLOT_VIEWPORT])
       ctx->outputs.temps[VARYING_SLOT_VIEWPORT * 4u] = bld.copy(bld.def(v1), Operand::c32(0));
-   if (outinfo->export_prim_id_per_primitive && !ctx->outputs.mask[VARYING_SLOT_PRIMITIVE_ID])
-      ctx->outputs.temps[VARYING_SLOT_PRIMITIVE_ID * 4u] = bld.copy(bld.def(v1), Operand::c32(0));
 
    /* When layer, viewport etc. are per-primitive, they need to be encoded in
     * the primitive export instruction's second channel. The encoding is:
diff --git a/src/amd/compiler/aco_shader_info.h b/src/amd/compiler/aco_shader_info.h
index 61969ac4dad..7c7bc239978 100644
--- a/src/amd/compiler/aco_shader_info.h
+++ b/src/amd/compiler/aco_shader_info.h
@@ -73,7 +73,6 @@ struct aco_vp_output_info {
    bool writes_primitive_shading_rate;
    bool writes_primitive_shading_rate_per_primitive;
    bool export_prim_id;
-   bool export_prim_id_per_primitive;
    bool export_clip_dists;
 };
 
diff --git a/src/amd/vulkan/radv_aco_shader_info.h b/src/amd/vulkan/radv_aco_shader_info.h
index 87f84f79a3e..5a3337deb8f 100644
--- a/src/amd/vulkan/radv_aco_shader_info.h
+++ b/src/amd/vulkan/radv_aco_shader_info.h
@@ -61,7 +61,6 @@ radv_aco_convert_shader_vp_info(struct aco_vp_output_info *aco_info,
    ASSIGN_FIELD(writes_primitive_shading_rate);
    ASSIGN_FIELD(writes_primitive_shading_rate_per_primitive);
    ASSIGN_FIELD(export_prim_id);
-   ASSIGN_FIELD(export_prim_id_per_primitive);
    ASSIGN_FIELD(export_clip_dists);
    /* don't use export params */
 }
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 47f132370e6..92785901a67 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -3337,10 +3337,8 @@ radv_fill_shader_info(struct radv_pipeline *pipeline,
 
       assert(outinfo);
       outinfo->export_clip_dists |= ps_clip_dists_in;
-      if (pipeline->graphics.last_vgt_api_stage == MESA_SHADER_MESH) {
-         outinfo->export_prim_id_per_primitive |= ps_prim_id_in;
-      } else if (pipeline->graphics.last_vgt_api_stage == MESA_SHADER_VERTEX ||
-                 pipeline->graphics.last_vgt_api_stage == MESA_SHADER_TESS_EVAL) {
+      if (pipeline->graphics.last_vgt_api_stage == MESA_SHADER_VERTEX ||
+          pipeline->graphics.last_vgt_api_stage == MESA_SHADER_TESS_EVAL) {
          outinfo->export_prim_id |= ps_prim_id_in;
       }
 
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index d138323aacf..97f21009285 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -209,7 +209,6 @@ struct radv_vs_output_info {
    bool writes_primitive_shading_rate;
    bool writes_primitive_shading_rate_per_primitive;
    bool export_prim_id;
-   bool export_prim_id_per_primitive;
    bool export_clip_dists;
    unsigned pos_exports;
 };
diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c
index 0331230eea6..e56c300daf9 100644
--- a/src/amd/vulkan/radv_shader_info.c
+++ b/src/amd/vulkan/radv_shader_info.c
@@ -561,8 +561,6 @@ radv_nir_shader_info_pass(struct radv_device *device, const struct nir_shader *n
          assign_outinfo_param(outinfo, VARYING_SLOT_LAYER, &total_param_exports);
       if (outinfo->writes_viewport_index_per_primitive)
          assign_outinfo_param(outinfo, VARYING_SLOT_VIEWPORT, &total_param_exports);
-      if (outinfo->export_prim_id_per_primitive)
-         assign_outinfo_param(outinfo, VARYING_SLOT_PRIMITIVE_ID, &total_param_exports);
 
       outinfo->prim_param_exports = total_param_exports - outinfo->param_exports;
    }



More information about the mesa-commit mailing list