radeonsi/gfx10: fix InstanceID for legacy VS+GS
authorMarek Olšák <marek.olsak@amd.com>
Wed, 21 Aug 2019 00:56:22 +0000 (20:56 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 27 Aug 2019 20:16:08 +0000 (16:16 -0400)
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
src/gallium/drivers/radeonsi/si_state_shaders.c

index def27b1e6859fb64d68cf5bd976b6beebf68b06f..15070055adaafd2d2cd3abf0c0314ec42ef330c2 100644 (file)
@@ -878,10 +878,15 @@ static void si_shader_gs(struct si_screen *sscreen, struct si_shader *shader)
                unsigned es_type = shader->key.part.gs.es->type;
                unsigned es_vgpr_comp_cnt, gs_vgpr_comp_cnt;
 
-               if (es_type == PIPE_SHADER_VERTEX)
-                       /* VGPR0-3: (VertexID, InstanceID / StepRate0, ...) */
-                       es_vgpr_comp_cnt = shader->info.uses_instanceid ? 1 : 0;
-               else if (es_type == PIPE_SHADER_TESS_EVAL)
+               if (es_type == PIPE_SHADER_VERTEX) {
+                       /* GFX10: (VertexID, UserVGPR0, UserVGPR1, UserVGPR2 or InstanceID)
+                        * GFX9: (VertexID, InstanceID / StepRate0, ...)
+                        */
+                       if (sscreen->info.chip_class >= GFX10)
+                               es_vgpr_comp_cnt = shader->info.uses_instanceid ? 3 : 0;
+                       else
+                               es_vgpr_comp_cnt = shader->info.uses_instanceid ? 1 : 0;
+               } else if (es_type == PIPE_SHADER_TESS_EVAL)
                        es_vgpr_comp_cnt = shader->key.part.gs.es->info.uses_primid ? 3 : 2;
                else
                        unreachable("invalid shader selector type");