radv: gather primitive ID in the shader info pass
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 3 Sep 2019 16:12:33 +0000 (18:12 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Fri, 6 Sep 2019 13:52:20 +0000 (15:52 +0200)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_nir_to_llvm.c
src/amd/vulkan/radv_shader_info.c

index 334ee1883b48e4381052faba630379f3b32c9d2d..e0503908ee3e43fedc4781d142daf85d6ff8166d 100644 (file)
@@ -2828,8 +2828,6 @@ handle_vs_outputs_post(struct radv_shader_context *ctx,
 
        /* Export PrimitiveID. */
        if (export_prim_id) {
-               outinfo->export_prim_id = true;
-
                outputs[noutput].slot_name = VARYING_SLOT_PRIMITIVE_ID;
                outputs[noutput].slot_index = 0;
                outputs[noutput].usage_mask = 0x1;
@@ -3256,7 +3254,6 @@ handle_ngg_outputs_post(struct radv_shader_context *ctx)
                        radv_export_param(ctx, param_count, values, 0x1);
 
                        outinfo->vs_output_param_offset[VARYING_SLOT_PRIMITIVE_ID] = param_count++;
-                       outinfo->export_prim_id = true;
                        outinfo->param_exports = param_count;
                }
        }
index ce9823f8485965468d0269366954b3ffd2e4504c..7f2d9752948f9b008f5daab49ec7d9305ef3cdce 100644 (file)
@@ -687,6 +687,23 @@ radv_nir_shader_info_pass(const struct nir_shader *nir,
                }
        }
 
+       /* Make sure to export the PrimitiveID if the fragment shader needs it. */
+       if (options->key.vs_common_out.export_prim_id) {
+               switch (nir->info.stage) {
+               case MESA_SHADER_VERTEX:
+                       info->vs.outinfo.export_prim_id = true;
+                       break;
+               case MESA_SHADER_TESS_EVAL:
+                       info->tes.outinfo.export_prim_id = true;
+                       break;
+               case MESA_SHADER_GEOMETRY:
+                       info->vs.outinfo.export_prim_id = true;
+                       break;
+               default:
+                       break;
+               }
+       }
+
        if (nir->info.stage == MESA_SHADER_FRAGMENT)
                info->ps.num_interp = nir->num_inputs;