Mesa (master): ac/radeonsi: pass type to load_tess_varyings()

Timothy Arceri tarceri at kemper.freedesktop.org
Wed Feb 21 22:31:13 UTC 2018


Module: Mesa
Branch: master
Commit: 6d338d757f32ba7f1cd583108c31371f2c4e25c0
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6d338d757f32ba7f1cd583108c31371f2c4e25c0

Author: Timothy Arceri <tarceri at itsqueeze.com>
Date:   Wed Feb 21 10:09:18 2018 +1100

ac/radeonsi: pass type to load_tess_varyings()

We need this to be able to load 64bit varyings.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/amd/common/ac_nir_to_llvm.c                   | 15 +++++++++++++--
 src/amd/common/ac_shader_abi.h                    |  1 +
 src/gallium/drivers/radeonsi/si_shader.c          |  2 ++
 src/gallium/drivers/radeonsi/si_shader_internal.h |  1 +
 4 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 2460e105f7..213306322d 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -2885,6 +2885,7 @@ get_dw_address(struct radv_shader_context *ctx,
 
 static LLVMValueRef
 load_tcs_varyings(struct ac_shader_abi *abi,
+		  LLVMTypeRef type,
 		  LLVMValueRef vertex_index,
 		  LLVMValueRef indir_index,
 		  unsigned const_index,
@@ -3008,6 +3009,7 @@ store_tcs_output(struct ac_shader_abi *abi,
 
 static LLVMValueRef
 load_tes_input(struct ac_shader_abi *abi,
+	       LLVMTypeRef type,
 	       LLVMValueRef vertex_index,
 	       LLVMValueRef param_index,
 	       unsigned const_index,
@@ -3146,12 +3148,21 @@ static LLVMValueRef load_tess_varyings(struct ac_nir_context *ctx,
 			 false, NULL, is_patch ? NULL : &vertex_index,
 			 &const_index, &indir_index);
 
-	result = ctx->abi->load_tess_varyings(ctx->abi, vertex_index, indir_index,
+	LLVMTypeRef dest_type = get_def_type(ctx, &instr->dest.ssa);
+
+	LLVMTypeRef src_component_type;
+	if (LLVMGetTypeKind(dest_type) == LLVMVectorTypeKind)
+		src_component_type = LLVMGetElementType(dest_type);
+	else
+		src_component_type = dest_type;
+
+	result = ctx->abi->load_tess_varyings(ctx->abi, src_component_type,
+					      vertex_index, indir_index,
 					      const_index, location, driver_location,
 					      instr->variables[0]->var->data.location_frac,
 					      instr->num_components,
 					      is_patch, is_compact, load_inputs);
-	return LLVMBuildBitCast(ctx->ac.builder, result, get_def_type(ctx, &instr->dest.ssa), "");
+	return LLVMBuildBitCast(ctx->ac.builder, result, dest_type, "");
 }
 
 static LLVMValueRef visit_load_var(struct ac_nir_context *ctx,
diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h
index 62b8b7a5dc..10d41ef997 100644
--- a/src/amd/common/ac_shader_abi.h
+++ b/src/amd/common/ac_shader_abi.h
@@ -96,6 +96,7 @@ struct ac_shader_abi {
 				    LLVMTypeRef type);
 
 	LLVMValueRef (*load_tess_varyings)(struct ac_shader_abi *abi,
+					   LLVMTypeRef type,
 					   LLVMValueRef vertex_index,
 					   LLVMValueRef param_index,
 					   unsigned const_index,
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 1f2338ad6d..2d98f93e54 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1215,6 +1215,7 @@ static LLVMValueRef fetch_input_tcs(
 }
 
 static LLVMValueRef si_nir_load_tcs_varyings(struct ac_shader_abi *abi,
+					     LLVMTypeRef type,
 					     LLVMValueRef vertex_index,
 					     LLVMValueRef param_index,
 					     unsigned const_index,
@@ -1316,6 +1317,7 @@ static LLVMValueRef fetch_input_tes(
 }
 
 LLVMValueRef si_nir_load_input_tes(struct ac_shader_abi *abi,
+				   LLVMTypeRef type,
 				   LLVMValueRef vertex_index,
 				   LLVMValueRef param_index,
 				   unsigned const_index,
diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h
index 571df55977..42a1b9f107 100644
--- a/src/gallium/drivers/radeonsi/si_shader_internal.h
+++ b/src/gallium/drivers/radeonsi/si_shader_internal.h
@@ -268,6 +268,7 @@ LLVMValueRef si_llvm_emit_fetch(struct lp_build_tgsi_context *bld_base,
 				unsigned swizzle);
 
 LLVMValueRef si_nir_load_input_tes(struct ac_shader_abi *abi,
+				   LLVMTypeRef type,
 				   LLVMValueRef vertex_index,
 				   LLVMValueRef param_index,
 				   unsigned const_index,




More information about the mesa-commit mailing list