radeonsi/gfx10: change location of instance ID shader input
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 30 May 2018 20:47:10 +0000 (22:47 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 3 Jul 2019 19:51:12 +0000 (15:51 -0400)
Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/gallium/drivers/radeonsi/si_shader.c

index 6cba8f8f8f1582bc118597653d6a46bb0ef538bf..ecf7f3bf39af4d56a903476e7fd47400dac701e2 100644 (file)
@@ -4534,11 +4534,17 @@ static void declare_vs_input_vgprs(struct si_shader_context *ctx,
        if (shader->key.as_ls) {
                ctx->param_rel_auto_id = add_arg(fninfo, ARG_VGPR, ctx->i32);
                add_arg_assign(fninfo, ARG_VGPR, ctx->i32, &ctx->abi.instance_id);
+               add_arg(fninfo, ARG_VGPR, ctx->i32); /* unused */
+       } else if (ctx->screen->info.chip_class == GFX10 &&
+                  !shader->is_gs_copy_shader) {
+               add_arg(fninfo, ARG_VGPR, ctx->i32); /* user vgpr */
+               add_arg(fninfo, ARG_VGPR, ctx->i32); /* user vgpr */
+               add_arg_assign(fninfo, ARG_VGPR, ctx->i32, &ctx->abi.instance_id);
        } else {
                add_arg_assign(fninfo, ARG_VGPR, ctx->i32, &ctx->abi.instance_id);
                ctx->param_vs_prim_id = add_arg(fninfo, ARG_VGPR, ctx->i32);
+               add_arg(fninfo, ARG_VGPR, ctx->i32); /* unused */
        }
-       add_arg(fninfo, ARG_VGPR, ctx->i32); /* unused */
 
        if (!shader->is_gs_copy_shader) {
                /* Vertex load indices. */
@@ -7292,7 +7298,10 @@ static void si_build_vs_prolog_function(struct si_shader_context *ctx,
        }
 
        unsigned vertex_id_vgpr = first_vs_vgpr;
-       unsigned instance_id_vgpr = first_vs_vgpr + (key->vs_prolog.as_ls ? 2 : 1);
+       unsigned instance_id_vgpr =
+               ctx->screen->info.chip_class >= GFX10 ?
+                       first_vs_vgpr + 3 :
+                       first_vs_vgpr + (key->vs_prolog.as_ls ? 2 : 1);
 
        ctx->abi.vertex_id = input_vgprs[vertex_id_vgpr];
        ctx->abi.instance_id = input_vgprs[instance_id_vgpr];