This did the wrong thing if we had e.g. an array for which only some
of the attributes use the instance index. Tripped up some new CTS
tests.

CC: <[email protected]>
---
 src/amd/common/ac_nir_to_llvm.c | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 243005a221..7defe0f491 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -5321,21 +5321,20 @@ handle_vs_input_decl(struct nir_to_llvm_context *ctx,
 
        variable->data.driver_location = idx * 4;
 
-       if (ctx->options->key.vs.instance_rate_inputs & (1u << index)) {
-               buffer_index = LLVMBuildAdd(ctx->builder, ctx->abi.instance_id,
-                                           ctx->abi.start_instance, "");
-               if (ctx->options->key.vs.as_ls) {
-                       ctx->shader_info->vs.vgpr_comp_cnt =
-                               MAX2(2, ctx->shader_info->vs.vgpr_comp_cnt);
-               } else {
-                       ctx->shader_info->vs.vgpr_comp_cnt =
-                               MAX2(1, ctx->shader_info->vs.vgpr_comp_cnt);
-               }
-       } else
-               buffer_index = LLVMBuildAdd(ctx->builder, ctx->abi.vertex_id,
-                                           ctx->abi.base_vertex, "");
-
        for (unsigned i = 0; i < attrib_count; ++i, ++idx) {
+               if (ctx->options->key.vs.instance_rate_inputs & (1u << (index + 
i))) {
+                       buffer_index = LLVMBuildAdd(ctx->builder, 
ctx->abi.instance_id,
+                                                   ctx->abi.start_instance, 
"");
+                       if (ctx->options->key.vs.as_ls) {
+                               ctx->shader_info->vs.vgpr_comp_cnt =
+                                       MAX2(2, 
ctx->shader_info->vs.vgpr_comp_cnt);
+                       } else {
+                               ctx->shader_info->vs.vgpr_comp_cnt =
+                                       MAX2(1, 
ctx->shader_info->vs.vgpr_comp_cnt);
+                       }
+               } else
+                       buffer_index = LLVMBuildAdd(ctx->builder, 
ctx->abi.vertex_id,
+                                                   ctx->abi.base_vertex, "");
                t_offset = LLVMConstInt(ctx->ac.i32, index + i, false);
 
                t_list = ac_build_load_to_sgpr(&ctx->ac, t_list_ptr, t_offset);
-- 
2.15.1

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to