--- src/amd/common/ac_nir_to_llvm.c | 70 +++++++++++++++------------- src/amd/vulkan/radv_shader_info.c | 11 ++--- src/gallium/drivers/radeonsi/si_shader_nir.c | 4 +- 3 files changed, 44 insertions(+), 41 deletions(-)
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index b0c0d76b470..8df00fc3c8c 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -1634,10 +1634,11 @@ static LLVMValueRef load_tess_varyings(struct ac_nir_context *ctx, LLVMValueRef vertex_index = NULL; LLVMValueRef indir_index = NULL; unsigned const_index = 0; - unsigned location = instr->variables[0]->var->data.location; - unsigned driver_location = instr->variables[0]->var->data.driver_location; - const bool is_patch = instr->variables[0]->var->data.patch; - const bool is_compact = instr->variables[0]->var->data.compact; + const nir_variable *var = nir_intrinsic_var(instr, 0); + unsigned location = var->data.location; + unsigned driver_location = var->data.driver_location; + const bool is_patch = var->data.patch; + const bool is_compact = var->data.compact; get_deref_offset(ctx, instr->variables[0], false, NULL, is_patch ? NULL : &vertex_index, @@ -1654,7 +1655,7 @@ static LLVMValueRef load_tess_varyings(struct ac_nir_context *ctx, 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, + var->data.location_frac, instr->num_components, is_patch, is_compact, load_inputs); return LLVMBuildBitCast(ctx->ac.builder, result, dest_type, ""); @@ -1664,22 +1665,23 @@ static LLVMValueRef visit_load_var(struct ac_nir_context *ctx, nir_intrinsic_instr *instr) { LLVMValueRef values[8]; - int idx = instr->variables[0]->var->data.driver_location; + nir_variable *var = nir_intrinsic_var(instr, 0); + int idx = var->data.driver_location; int ve = instr->dest.ssa.num_components; - unsigned comp = instr->variables[0]->var->data.location_frac; + unsigned comp = var->data.location_frac; LLVMValueRef indir_index; LLVMValueRef ret; unsigned const_index; - unsigned stride = instr->variables[0]->var->data.compact ? 1 : 4; + unsigned stride = var->data.compact ? 1 : 4; bool vs_in = ctx->stage == MESA_SHADER_VERTEX && - instr->variables[0]->var->data.mode == nir_var_shader_in; + var->data.mode == nir_var_shader_in; get_deref_offset(ctx, instr->variables[0], vs_in, NULL, NULL, &const_index, &indir_index); if (instr->dest.ssa.bit_size == 64) ve *= 2; - switch (instr->variables[0]->var->data.mode) { + switch (var->data.mode) { case nir_var_shader_in: if (ctx->stage == MESA_SHADER_TESS_CTRL || ctx->stage == MESA_SHADER_TESS_EVAL) { @@ -1694,16 +1696,16 @@ static LLVMValueRef visit_load_var(struct ac_nir_context *ctx, false, &vertex_index, NULL, &const_index, &indir_index); - return ctx->abi->load_inputs(ctx->abi, instr->variables[0]->var->data.location, - instr->variables[0]->var->data.driver_location, - instr->variables[0]->var->data.location_frac, + return ctx->abi->load_inputs(ctx->abi, var->data.location, + var->data.driver_location, + var->data.location_frac, instr->num_components, vertex_index, const_index, type); } for (unsigned chan = comp; chan < ve + comp; chan++) { if (indir_index) { unsigned count = glsl_count_attribute_slots( - instr->variables[0]->var->type, + var->type, ctx->stage == MESA_SHADER_VERTEX); count -= chan / 4; LLVMValueRef tmp_vec = ac_build_gather_values_extended( @@ -1721,7 +1723,7 @@ static LLVMValueRef visit_load_var(struct ac_nir_context *ctx, for (unsigned chan = 0; chan < ve; chan++) { if (indir_index) { unsigned count = glsl_count_attribute_slots( - instr->variables[0]->var->type, false); + var->type, false); count -= chan / 4; LLVMValueRef tmp_vec = ac_build_gather_values_extended( &ctx->ac, ctx->locals + idx + chan, count, @@ -1751,7 +1753,7 @@ static LLVMValueRef visit_load_var(struct ac_nir_context *ctx, for (unsigned chan = comp; chan < ve + comp; chan++) { if (indir_index) { unsigned count = glsl_count_attribute_slots( - instr->variables[0]->var->type, false); + var->type, false); count -= chan / 4; LLVMValueRef tmp_vec = ac_build_gather_values_extended( &ctx->ac, ctx->abi->outputs + idx + chan, count, @@ -1779,8 +1781,9 @@ visit_store_var(struct ac_nir_context *ctx, nir_intrinsic_instr *instr) { LLVMValueRef temp_ptr, value; - int idx = instr->variables[0]->var->data.driver_location; - unsigned comp = instr->variables[0]->var->data.location_frac; + const nir_variable *var = nir_intrinsic_var(instr, 0); + int idx = var->data.driver_location; + unsigned comp = var->data.location_frac; LLVMValueRef src = ac_to_float(&ctx->ac, get_src(ctx, instr->src[0])); int writemask = instr->const_index[0] << comp; LLVMValueRef indir_index; @@ -1797,20 +1800,20 @@ visit_store_var(struct ac_nir_context *ctx, writemask = widen_mask(writemask, 2); } - switch (instr->variables[0]->var->data.mode) { + switch (var->data.mode) { case nir_var_shader_out: if (ctx->stage == MESA_SHADER_TESS_CTRL) { LLVMValueRef vertex_index = NULL; LLVMValueRef indir_index = NULL; unsigned const_index = 0; - const bool is_patch = instr->variables[0]->var->data.patch; + const bool is_patch = var->data.patch; 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, instr->variables[0]->var, + ctx->abi->store_tcs_outputs(ctx->abi, var, vertex_index, indir_index, const_index, src, writemask); return; @@ -1823,11 +1826,11 @@ visit_store_var(struct ac_nir_context *ctx, value = ac_llvm_extract_elem(&ctx->ac, src, chan - comp); - if (instr->variables[0]->var->data.compact) + if (var->data.compact) stride = 1; if (indir_index) { unsigned count = glsl_count_attribute_slots( - instr->variables[0]->var->type, false); + var->type, false); count -= chan / 4; LLVMValueRef tmp_vec = ac_build_gather_values_extended( &ctx->ac, ctx->abi->outputs + idx + chan, count, @@ -1853,7 +1856,7 @@ visit_store_var(struct ac_nir_context *ctx, value = ac_llvm_extract_elem(&ctx->ac, src, chan); if (indir_index) { unsigned count = glsl_count_attribute_slots( - instr->variables[0]->var->type, false); + var->type, false); count -= chan / 4; LLVMValueRef tmp_vec = ac_build_gather_values_extended( &ctx->ac, ctx->locals + idx + chan, count, @@ -2025,7 +2028,7 @@ static LLVMValueRef adjust_sample_index_using_fmask(struct ac_llvm_context *ctx, static LLVMValueRef get_image_coords(struct ac_nir_context *ctx, const nir_intrinsic_instr *instr) { - const struct glsl_type *type = glsl_without_array(instr->variables[0]->var->type); + const struct glsl_type *type = glsl_without_array(nir_intrinsic_var(instr, 0)->type); LLVMValueRef src0 = get_src(ctx, instr->src[0]); LLVMValueRef coords[4]; @@ -2120,7 +2123,7 @@ static LLVMValueRef visit_image_load(struct ac_nir_context *ctx, LLVMValueRef params[7]; LLVMValueRef res; char intrinsic_name[64]; - const nir_variable *var = instr->variables[0]->var; + const nir_variable *var = nir_intrinsic_var(instr, 0); const struct glsl_type *type = var->type; if(instr->variables[0]->deref.child) @@ -2176,7 +2179,7 @@ static void visit_image_store(struct ac_nir_context *ctx, { LLVMValueRef params[8]; char intrinsic_name[64]; - const nir_variable *var = instr->variables[0]->var; + const nir_variable *var = nir_intrinsic_var(instr, 0); const struct glsl_type *type = glsl_without_array(var->type); const enum glsl_sampler_dim dim = glsl_get_sampler_dim(type); LLVMValueRef glc = ctx->ac.i1false; @@ -2225,7 +2228,7 @@ static LLVMValueRef visit_image_atomic(struct ac_nir_context *ctx, { LLVMValueRef params[7]; int param_count = 0; - const nir_variable *var = instr->variables[0]->var; + const nir_variable *var = nir_intrinsic_var(instr, 0); const char *atomic_name; char intrinsic_name[41]; @@ -2301,7 +2304,7 @@ static LLVMValueRef visit_image_atomic(struct ac_nir_context *ctx, static LLVMValueRef visit_image_samples(struct ac_nir_context *ctx, const nir_intrinsic_instr *instr) { - const nir_variable *var = instr->variables[0]->var; + const nir_variable *var = nir_intrinsic_var(instr, 0); const struct glsl_type *type = glsl_without_array(var->type); struct ac_image_args args = { 0 }; @@ -2319,7 +2322,7 @@ static LLVMValueRef visit_image_size(struct ac_nir_context *ctx, const nir_intrinsic_instr *instr) { LLVMValueRef res; - const nir_variable *var = instr->variables[0]->var; + const nir_variable *var = nir_intrinsic_var(instr, 0); const struct glsl_type *type = glsl_without_array(var->type); if (glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_BUF) @@ -2607,7 +2610,8 @@ static LLVMValueRef visit_interp(struct ac_nir_context *ctx, LLVMValueRef src_c0 = NULL; LLVMValueRef src_c1 = NULL; LLVMValueRef src0 = NULL; - int input_index = instr->variables[0]->var->data.location - VARYING_SLOT_VAR0; + const nir_variable *var = nir_intrinsic_var(instr, 0); + int input_index = var->data.location - VARYING_SLOT_VAR0; switch (instr->intrinsic) { case nir_intrinsic_interp_var_at_centroid: location = INTERP_CENTROID; @@ -2636,7 +2640,7 @@ static LLVMValueRef visit_interp(struct ac_nir_context *ctx, src_c1 = LLVMBuildExtractElement(ctx->ac.builder, sample_position, ctx->ac.i32_1, ""); src_c1 = LLVMBuildFSub(ctx->ac.builder, src_c1, halfval, ""); } - interp_param = ctx->abi->lookup_interp_param(ctx->abi, instr->variables[0]->var->data.interpolation, location); + interp_param = ctx->abi->lookup_interp_param(ctx->abi, var->data.interpolation, location); attr_number = LLVMConstInt(ctx->ac.i32, input_index, false); if (location == INTERP_CENTER) { @@ -2700,7 +2704,7 @@ static LLVMValueRef visit_interp(struct ac_nir_context *ctx, } } return ac_build_varying_gather_values(&ctx->ac, result, instr->num_components, - instr->variables[0]->var->data.location_frac); + var->data.location_frac); } static void visit_intrinsic(struct ac_nir_context *ctx, diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index 3cce0c2f6e4..dea89fa0a9f 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -97,7 +97,8 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr, case nir_intrinsic_image_atomic_exchange: case nir_intrinsic_image_atomic_comp_swap: case nir_intrinsic_image_size: { - const struct glsl_type *type = instr->variables[0]->var->type; + nir_variable *var = nir_intrinsic_var(instr, 0); + const struct glsl_type *type = var->type; if(instr->variables[0]->deref.child) type = instr->variables[0]->deref.child->type; @@ -105,7 +106,7 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr, if (dim == GLSL_SAMPLER_DIM_SUBPASS || dim == GLSL_SAMPLER_DIM_SUBPASS_MS) info->ps.uses_input_attachments = true; - mark_sampler_desc(instr->variables[0]->var, info); + mark_sampler_desc(var, info); if (nir_intrinsic_image_store || nir_intrinsic_image_atomic_add || @@ -137,8 +138,7 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr, break; case nir_intrinsic_load_var: if (nir->info.stage == MESA_SHADER_VERTEX) { - nir_deref_var *dvar = instr->variables[0]; - nir_variable *var = dvar->var; + nir_variable *var = nir_intrinsic_var(instr, 0); if (var->data.mode == nir_var_shader_in) { unsigned idx = var->data.location; @@ -149,8 +149,7 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr, } break; case nir_intrinsic_store_var: { - nir_deref_var *dvar = instr->variables[0]; - nir_variable *var = dvar->var; + nir_variable *var = nir_intrinsic_var(instr, 0); if (var->data.mode == nir_var_shader_out) { unsigned idx = var->data.location; diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index acb796b331c..6332c198b59 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -149,7 +149,7 @@ static void scan_instruction(struct tgsi_shader_info *info, info->writes_memory = true; break; case nir_intrinsic_load_var: { - nir_variable *var = intr->variables[0]->var; + nir_variable *var = nir_intrinsic_var(intr, 0); nir_variable_mode mode = var->data.mode; enum glsl_base_type base_type = glsl_get_base_type(glsl_without_array(var->type)); @@ -186,7 +186,7 @@ static void scan_instruction(struct tgsi_shader_info *info, case nir_intrinsic_interp_var_at_sample: case nir_intrinsic_interp_var_at_offset: { enum glsl_interp_mode interp = - intr->variables[0]->var->data.interpolation; + nir_intrinsic_var(intr, 0)->data.interpolation; switch (interp) { case INTERP_MODE_SMOOTH: case INTERP_MODE_NONE: -- 2.14.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev