We need this to be able to load 64bit varyings.
---
 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 9f55be0d45..50f3a4f69e 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -2888,6 +2888,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,
@@ -3011,6 +3012,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,
@@ -3149,12 +3151,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 de3034e32f..75fd8ed554 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 ec03f537d0..33319b249c 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,
-- 
2.14.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to