From 4f0c89d66c570e82d832e2e49227517302e271a2 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 14 Mar 2018 10:19:45 +1000 Subject: ac/nir: pass the nir variable through tcs loading. I was going to have to add another parameter to this monster, so we should just pass the nir_variable in, I can't find any reason this would be a bad idea. This needed for the next fix. Fixes: 94f9591995 (radv/ac: add support for TCS/TES inputs/outputs.) Reviewed-by: Bas Nieuwenhuizen Signed-off-by: Dave Airlie --- src/amd/common/ac_nir_to_llvm.c | 10 +++------- src/amd/common/ac_shader_abi.h | 8 +++----- src/amd/vulkan/radv_nir_to_llvm.c | 10 +++++----- src/gallium/drivers/radeonsi/si_shader.c | 9 ++++----- 4 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index ade042d3d9..b0c0d76b47 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -1804,19 +1804,15 @@ visit_store_var(struct ac_nir_context *ctx, LLVMValueRef vertex_index = NULL; LLVMValueRef indir_index = NULL; unsigned const_index = 0; - const unsigned location = instr->variables[0]->var->data.location; - const unsigned driver_location = instr->variables[0]->var->data.driver_location; - const unsigned comp = instr->variables[0]->var->data.location_frac; const bool is_patch = instr->variables[0]->var->data.patch; - const bool is_compact = instr->variables[0]->var->data.compact; get_deref_offset(ctx, instr->variables[0], false, NULL, is_patch ? NULL : &vertex_index, &const_index, &indir_index); - ctx->abi->store_tcs_outputs(ctx->abi, vertex_index, indir_index, - const_index, location, driver_location, - src, comp, is_patch, is_compact, writemask); + ctx->abi->store_tcs_outputs(ctx->abi, instr->variables[0]->var, + vertex_index, indir_index, + const_index, src, writemask); return; } diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h index 901e49b1f9..0737d697ff 100644 --- a/src/amd/common/ac_shader_abi.h +++ b/src/amd/common/ac_shader_abi.h @@ -28,6 +28,8 @@ #include "compiler/shader_enums.h" +struct nir_variable; + #define AC_LLVM_MAX_OUTPUTS (VARYING_SLOT_VAR31 + 1) enum ac_descriptor_type { @@ -111,15 +113,11 @@ struct ac_shader_abi { bool load_inputs); void (*store_tcs_outputs)(struct ac_shader_abi *abi, + const struct nir_variable *var, LLVMValueRef vertex_index, LLVMValueRef param_index, unsigned const_index, - unsigned location, - unsigned driver_location, LLVMValueRef src, - unsigned component, - bool is_patch, - bool is_compact, unsigned writemask); LLVMValueRef (*load_tess_coord)(struct ac_shader_abi *abi); diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c index fccd97b6cf..a4c0a41e3e 100644 --- a/src/amd/vulkan/radv_nir_to_llvm.c +++ b/src/amd/vulkan/radv_nir_to_llvm.c @@ -1296,18 +1296,18 @@ load_tcs_varyings(struct ac_shader_abi *abi, static void store_tcs_output(struct ac_shader_abi *abi, + const nir_variable *var, LLVMValueRef vertex_index, LLVMValueRef param_index, unsigned const_index, - unsigned location, - unsigned driver_location, LLVMValueRef src, - unsigned component, - bool is_patch, - bool is_compact, unsigned writemask) { struct radv_shader_context *ctx = radv_shader_context_from_abi(abi); + const unsigned location = var->data.location; + const unsigned component = var->data.location_frac; + const bool is_patch = var->data.patch; + const bool is_compact = var->data.compact; LLVMValueRef dw_addr; LLVMValueRef stride = NULL; LLVMValueRef buf_addr = NULL; diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 95258b74f7..8ae742c93f 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -1487,19 +1487,18 @@ static void store_output_tcs(struct lp_build_tgsi_context *bld_base, } static void si_nir_store_output_tcs(struct ac_shader_abi *abi, + const struct nir_variable *var, LLVMValueRef vertex_index, LLVMValueRef param_index, unsigned const_index, - unsigned location, - unsigned driver_location, LLVMValueRef src, - unsigned component, - bool is_patch, - bool is_compact, unsigned writemask) { struct si_shader_context *ctx = si_shader_context_from_abi(abi); struct tgsi_shader_info *info = &ctx->shader->selector->info; + const unsigned component = var->data.location_frac; + const bool is_patch = var->data.patch; + unsigned driver_location = var->data.driver_location; LLVMValueRef dw_addr, stride; LLVMValueRef buffer, base, addr; LLVMValueRef values[4]; -- cgit v1.2.3