[Mesa-dev] [PATCH] ac/nir: Use instance_rate_inputs per attribute, not per variable.

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Mon Jan 22 08:01:29 UTC 2018


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: <mesa-stable at lists.freedesktop.org>
---
 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



More information about the mesa-dev mailing list