On Tue, Sep 01, 2015 at 11:18:15PM +0200, Marek Olšák wrote: > From: Marek Olšák <marek.ol...@amd.com> >
Reviewed-by: Tom Stellard <thomas.stell...@amd.com> > Just a cleanup I had made a long time ago and forgot about. > --- > src/gallium/drivers/radeonsi/si_shader.c | 468 > +++++++++++++------------------ > 1 file changed, 191 insertions(+), 277 deletions(-) > > diff --git a/src/gallium/drivers/radeonsi/si_shader.c > b/src/gallium/drivers/radeonsi/si_shader.c > index ab5b3ee..7550a42 100644 > --- a/src/gallium/drivers/radeonsi/si_shader.c > +++ b/src/gallium/drivers/radeonsi/si_shader.c > @@ -2256,6 +2256,64 @@ static bool tgsi_is_shadow_sampler(unsigned target) > target == TGSI_TEXTURE_SHADOWRECT; > } > > +static bool tgsi_is_array_sampler(unsigned target) > +{ > + return target == TGSI_TEXTURE_1D_ARRAY || > + target == TGSI_TEXTURE_SHADOW1D_ARRAY || > + target == TGSI_TEXTURE_2D_ARRAY || > + target == TGSI_TEXTURE_SHADOW2D_ARRAY || > + target == TGSI_TEXTURE_CUBE_ARRAY || > + target == TGSI_TEXTURE_SHADOWCUBE_ARRAY || > + target == TGSI_TEXTURE_2D_ARRAY_MSAA; > +} > + > +static void set_tex_fetch_args(struct gallivm_state *gallivm, > + struct lp_build_emit_data *emit_data, > + unsigned opcode, unsigned target, > + LLVMValueRef res_ptr, LLVMValueRef samp_ptr, > + LLVMValueRef *param, unsigned count, > + unsigned dmask) > +{ > + unsigned num_args; > + unsigned is_rect = target == TGSI_TEXTURE_RECT; > + LLVMTypeRef i32 = LLVMInt32TypeInContext(gallivm->context); > + > + /* Pad to power of two vector */ > + while (count < util_next_power_of_two(count)) > + param[count++] = LLVMGetUndef(i32); > + > + /* Texture coordinates. */ > + if (count > 1) > + emit_data->args[0] = lp_build_gather_values(gallivm, param, > count); > + else > + emit_data->args[0] = param[0]; > + > + /* Resource. */ > + emit_data->args[1] = res_ptr; > + num_args = 2; > + > + if (opcode == TGSI_OPCODE_TXF || opcode == TGSI_OPCODE_TXQ) > + emit_data->dst_type = LLVMVectorType(i32, 4); > + else { > + emit_data->dst_type = LLVMVectorType( > + LLVMFloatTypeInContext(gallivm->context), 4); > + > + emit_data->args[num_args++] = samp_ptr; > + } > + > + emit_data->args[num_args++] = lp_build_const_int32(gallivm, dmask); > + emit_data->args[num_args++] = lp_build_const_int32(gallivm, is_rect); > /* unorm */ > + emit_data->args[num_args++] = lp_build_const_int32(gallivm, 0); /* r128 > */ > + emit_data->args[num_args++] = lp_build_const_int32(gallivm, > + tgsi_is_array_sampler(target)); /* da */ > + emit_data->args[num_args++] = lp_build_const_int32(gallivm, 0); /* glc > */ > + emit_data->args[num_args++] = lp_build_const_int32(gallivm, 0); /* slc > */ > + emit_data->args[num_args++] = lp_build_const_int32(gallivm, 0); /* tfe > */ > + emit_data->args[num_args++] = lp_build_const_int32(gallivm, 0); /* lwe > */ > + > + emit_data->arg_count = num_args; > +} > + > static const struct lp_build_tgsi_action tex_action; > > static void tex_fetch_args( > @@ -2264,6 +2322,7 @@ static void tex_fetch_args( > { > struct si_shader_context *si_shader_ctx = si_shader_context(bld_base); > struct gallivm_state *gallivm = bld_base->base.gallivm; > + LLVMBuilderRef builder = gallivm->builder; > const struct tgsi_full_instruction * inst = emit_data->inst; > unsigned opcode = inst->Instruction.Opcode; > unsigned target = inst->Texture.Texture; > @@ -2278,6 +2337,8 @@ static void tex_fetch_args( > unsigned num_deriv_channels = 0; > bool has_offset = HAVE_LLVM >= 0x0305 ? inst->Texture.NumOffsets > 0 : > false; > LLVMValueRef res_ptr, samp_ptr, fmask_ptr = NULL; > + LLVMTypeRef i32 = LLVMInt32TypeInContext(gallivm->context); > + unsigned dmask = 0xf; > > sampler_src = emit_data->inst->Instruction.NumSrcRegs - 1; > sampler_index = emit_data->inst->Src[sampler_src].Register.Index; > @@ -2308,6 +2369,43 @@ static void tex_fetch_args( > fmask_ptr = si_shader_ctx->resources[SI_FMASK_TEX_OFFSET + > sampler_index]; > } > > + if (opcode == TGSI_OPCODE_TXQ) { > + if (target == TGSI_TEXTURE_BUFFER) { > + LLVMTypeRef v8i32 = LLVMVectorType(i32, 8); > + > + /* Read the size from the buffer descriptor directly. */ > + LLVMValueRef res = LLVMBuildBitCast(builder, res_ptr, > v8i32, ""); > + LLVMValueRef size = LLVMBuildExtractElement(builder, > res, > + > lp_build_const_int32(gallivm, 6), ""); > + > + if (si_shader_ctx->screen->b.chip_class >= VI) { > + /* On VI, the descriptor contains the size in > bytes, > + * but TXQ must return the size in elements. > + * The stride is always non-zero for resources > using TXQ. > + */ > + LLVMValueRef stride = > + LLVMBuildExtractElement(builder, res, > + > lp_build_const_int32(gallivm, 5), ""); > + stride = LLVMBuildLShr(builder, stride, > + > lp_build_const_int32(gallivm, 16), ""); > + stride = LLVMBuildAnd(builder, stride, > + > lp_build_const_int32(gallivm, 0x3FFF), ""); > + > + size = LLVMBuildUDiv(builder, size, stride, ""); > + } > + > + emit_data->args[0] = size; > + return; > + } > + > + /* Textures - set the mip level. */ > + address[count++] = lp_build_emit_fetch(bld_base, inst, 0, > TGSI_CHAN_X); > + > + set_tex_fetch_args(gallivm, emit_data, opcode, target, res_ptr, > + NULL, address, count, 0xf); > + return; > + } > + > if (target == TGSI_TEXTURE_BUFFER) { > LLVMTypeRef i128 = LLVMIntTypeInContext(gallivm->context, 128); > LLVMTypeRef v2i128 = LLVMVectorType(i128, 2); > @@ -2457,9 +2555,7 @@ static void tex_fetch_args( > > for (chan = 0; chan < count; chan++ ) { > address[chan] = LLVMBuildBitCast(gallivm->builder, > - address[chan], > - > LLVMInt32TypeInContext(gallivm->context), > - ""); > + address[chan], i32, ""); > } > > /* Adjust the sample index according to FMASK. > @@ -2491,22 +2587,14 @@ static void tex_fetch_args( > } > txf_address[3] = bld_base->uint_bld.zero; > > - /* Pad to a power-of-two size. */ > - while (txf_count < util_next_power_of_two(txf_count)) > - txf_address[txf_count++] = > LLVMGetUndef(LLVMInt32TypeInContext(gallivm->context)); > - > /* Read FMASK using TXF. */ > inst.Instruction.Opcode = TGSI_OPCODE_TXF; > - inst.Texture.Texture = target == TGSI_TEXTURE_2D_MSAA ? > TGSI_TEXTURE_2D : TGSI_TEXTURE_2D_ARRAY; > + inst.Texture.Texture = target; > txf_emit_data.inst = &inst; > txf_emit_data.chan = 0; > - txf_emit_data.dst_type = LLVMVectorType( > - LLVMInt32TypeInContext(gallivm->context), 4); > - txf_emit_data.args[0] = lp_build_gather_values(gallivm, > txf_address, txf_count); > - txf_emit_data.args[1] = fmask_ptr; > - txf_emit_data.args[2] = lp_build_const_int32(gallivm, > inst.Texture.Texture); > - txf_emit_data.arg_count = 3; > - > + set_tex_fetch_args(gallivm, &txf_emit_data, TGSI_OPCODE_TXF, > + target, fmask_ptr, NULL, > + txf_address, txf_count, 0xf); > build_tex_intrinsic(&tex_action, bld_base, &txf_emit_data); > > /* Initialize some constants. */ > @@ -2551,9 +2639,6 @@ static void tex_fetch_args( > final_sample, address[sample_chan], ""); > } > > - /* Resource */ > - emit_data->args[1] = res_ptr; > - > if (opcode == TGSI_OPCODE_TXF) { > /* add tex offsets */ > if (inst->Texture.NumOffsets) { > @@ -2589,89 +2674,37 @@ static void tex_fetch_args( > /* texture offsets do not apply to other > texture targets */ > } > } > + } > > - emit_data->args[2] = lp_build_const_int32(gallivm, target); > - emit_data->arg_count = 3; > - > - emit_data->dst_type = LLVMVectorType( > - LLVMInt32TypeInContext(gallivm->context), > - 4); > - } else if (opcode == TGSI_OPCODE_TG4 || > - opcode == TGSI_OPCODE_LODQ || > - has_offset) { > - unsigned is_array = target == TGSI_TEXTURE_1D_ARRAY || > - target == TGSI_TEXTURE_SHADOW1D_ARRAY || > - target == TGSI_TEXTURE_2D_ARRAY || > - target == TGSI_TEXTURE_SHADOW2D_ARRAY || > - target == TGSI_TEXTURE_CUBE_ARRAY || > - target == TGSI_TEXTURE_SHADOWCUBE_ARRAY; > - unsigned is_rect = target == TGSI_TEXTURE_RECT; > - unsigned dmask = 0xf; > - > - if (opcode == TGSI_OPCODE_TG4) { > - unsigned gather_comp = 0; > - > - /* DMASK was repurposed for GATHER4. 4 components are > always > - * returned and DMASK works like a swizzle - it selects > - * the component to fetch. The only valid DMASK values > are > - * 1=red, 2=green, 4=blue, 8=alpha. (e.g. 1 returns > - * (red,red,red,red) etc.) The ISA document doesn't > mention > - * this. > - */ > + if (opcode == TGSI_OPCODE_TG4) { > + unsigned gather_comp = 0; > > - /* Get the component index from src1.x for Gather4. */ > - if (!tgsi_is_shadow_sampler(target)) { > - LLVMValueRef (*imms)[4] = > lp_soa_context(bld_base)->immediates; > - LLVMValueRef comp_imm; > - struct tgsi_src_register src1 = > inst->Src[1].Register; > + /* DMASK was repurposed for GATHER4. 4 components are always > + * returned and DMASK works like a swizzle - it selects > + * the component to fetch. The only valid DMASK values are > + * 1=red, 2=green, 4=blue, 8=alpha. (e.g. 1 returns > + * (red,red,red,red) etc.) The ISA document doesn't mention > + * this. > + */ > > - assert(src1.File == TGSI_FILE_IMMEDIATE); > + /* Get the component index from src1.x for Gather4. */ > + if (!tgsi_is_shadow_sampler(target)) { > + LLVMValueRef (*imms)[4] = > lp_soa_context(bld_base)->immediates; > + LLVMValueRef comp_imm; > + struct tgsi_src_register src1 = inst->Src[1].Register; > > - comp_imm = imms[src1.Index][src1.SwizzleX]; > - gather_comp = > LLVMConstIntGetZExtValue(comp_imm); > - gather_comp = CLAMP(gather_comp, 0, 3); > - } > + assert(src1.File == TGSI_FILE_IMMEDIATE); > > - dmask = 1 << gather_comp; > + comp_imm = imms[src1.Index][src1.SwizzleX]; > + gather_comp = LLVMConstIntGetZExtValue(comp_imm); > + gather_comp = CLAMP(gather_comp, 0, 3); > } > > - emit_data->args[2] = samp_ptr; > - emit_data->args[3] = lp_build_const_int32(gallivm, dmask); > - emit_data->args[4] = lp_build_const_int32(gallivm, is_rect); /* > unorm */ > - emit_data->args[5] = lp_build_const_int32(gallivm, 0); /* r128 > */ > - emit_data->args[6] = lp_build_const_int32(gallivm, is_array); > /* da */ > - emit_data->args[7] = lp_build_const_int32(gallivm, 0); /* glc */ > - emit_data->args[8] = lp_build_const_int32(gallivm, 0); /* slc */ > - emit_data->args[9] = lp_build_const_int32(gallivm, 0); /* tfe */ > - emit_data->args[10] = lp_build_const_int32(gallivm, 0); /* lwe > */ > - > - emit_data->arg_count = 11; > - > - emit_data->dst_type = LLVMVectorType( > - LLVMFloatTypeInContext(gallivm->context), > - 4); > - } else { > - emit_data->args[2] = samp_ptr; > - emit_data->args[3] = lp_build_const_int32(gallivm, target); > - emit_data->arg_count = 4; > - > - emit_data->dst_type = LLVMVectorType( > - LLVMFloatTypeInContext(gallivm->context), > - 4); > + dmask = 1 << gather_comp; > } > > - /* The fetch opcode has been converted to a 2D array fetch. > - * This simplifies the LLVM backend. */ > - if (target == TGSI_TEXTURE_CUBE_ARRAY) > - target = TGSI_TEXTURE_2D_ARRAY; > - else if (target == TGSI_TEXTURE_SHADOWCUBE_ARRAY) > - target = TGSI_TEXTURE_SHADOW2D_ARRAY; > - > - /* Pad to power of two vector */ > - while (count < util_next_power_of_two(count)) > - address[count++] = > LLVMGetUndef(LLVMInt32TypeInContext(gallivm->context)); > - > - emit_data->args[0] = lp_build_gather_values(gallivm, address, count); > + set_tex_fetch_args(gallivm, emit_data, opcode, target, res_ptr, > + samp_ptr, address, count, dmask); > } > > static void build_tex_intrinsic(const struct lp_build_tgsi_action * action, > @@ -2684,6 +2717,16 @@ static void build_tex_intrinsic(const struct > lp_build_tgsi_action * action, > char intr_name[127]; > bool has_offset = HAVE_LLVM >= 0x0305 ? > emit_data->inst->Texture.NumOffsets > 0 : false; > + bool is_shadow = tgsi_is_shadow_sampler(target); > + char type[64]; > + const char *name = "llvm.SI.image.sample"; > + const char *infix = ""; > + > + if (opcode == TGSI_OPCODE_TXQ && target == TGSI_TEXTURE_BUFFER) { > + /* Just return the buffer size. */ > + emit_data->output[emit_data->chan] = emit_data->args[0]; > + return; > + } > > if (target == TGSI_TEXTURE_BUFFER) { > emit_data->output[emit_data->chan] = lp_build_intrinsic( > @@ -2694,191 +2737,68 @@ static void build_tex_intrinsic(const struct > lp_build_tgsi_action * action, > return; > } > > - if (opcode == TGSI_OPCODE_TG4 || > - opcode == TGSI_OPCODE_LODQ || > - (opcode != TGSI_OPCODE_TXF && has_offset)) { > - bool is_shadow = tgsi_is_shadow_sampler(target); > - const char *name = "llvm.SI.image.sample"; > - const char *infix = ""; > - > - switch (opcode) { > - case TGSI_OPCODE_TEX: > - case TGSI_OPCODE_TEX2: > - case TGSI_OPCODE_TXP: > - break; > - case TGSI_OPCODE_TXB: > - case TGSI_OPCODE_TXB2: > - infix = ".b"; > - break; > - case TGSI_OPCODE_TXL: > - case TGSI_OPCODE_TXL2: > - infix = ".l"; > - break; > - case TGSI_OPCODE_TXD: > - infix = ".d"; > - break; > - case TGSI_OPCODE_TG4: > - name = "llvm.SI.gather4"; > - break; > - case TGSI_OPCODE_LODQ: > - name = "llvm.SI.getlod"; > - is_shadow = false; > - has_offset = false; > - break; > - default: > - assert(0); > - return; > - } > - > - /* Add the type and suffixes .c, .o if needed. */ > - sprintf(intr_name, "%s%s%s%s.v%ui32", name, > - is_shadow ? ".c" : "", infix, has_offset ? ".o" : "", > - LLVMGetVectorSize(LLVMTypeOf(emit_data->args[0]))); > - > - emit_data->output[emit_data->chan] = lp_build_intrinsic( > - base->gallivm->builder, intr_name, emit_data->dst_type, > - emit_data->args, emit_data->arg_count, > - LLVMReadNoneAttribute | LLVMNoUnwindAttribute); > - } else { > - LLVMTypeRef i8, v16i8, v32i8; > - const char *name; > - > - switch (opcode) { > - case TGSI_OPCODE_TEX: > - case TGSI_OPCODE_TEX2: > - case TGSI_OPCODE_TXP: > - name = "llvm.SI.sample"; > - break; > - case TGSI_OPCODE_TXB: > - case TGSI_OPCODE_TXB2: > - name = "llvm.SI.sampleb"; > - break; > - case TGSI_OPCODE_TXD: > - name = "llvm.SI.sampled"; > - break; > - case TGSI_OPCODE_TXF: > - name = "llvm.SI.imageload"; > - break; > - case TGSI_OPCODE_TXL: > - case TGSI_OPCODE_TXL2: > - name = "llvm.SI.samplel"; > - break; > - default: > - assert(0); > - return; > - } > - > - i8 = LLVMInt8TypeInContext(base->gallivm->context); > - v16i8 = LLVMVectorType(i8, 16); > - v32i8 = LLVMVectorType(i8, 32); > - > - emit_data->args[1] = LLVMBuildBitCast(base->gallivm->builder, > - emit_data->args[1], v32i8, ""); > - if (opcode != TGSI_OPCODE_TXF) { > - emit_data->args[2] = > LLVMBuildBitCast(base->gallivm->builder, > - emit_data->args[2], v16i8, ""); > - } > - > - sprintf(intr_name, "%s.v%ui32", name, > - LLVMGetVectorSize(LLVMTypeOf(emit_data->args[0]))); > - > - emit_data->output[emit_data->chan] = lp_build_intrinsic( > - base->gallivm->builder, intr_name, emit_data->dst_type, > - emit_data->args, emit_data->arg_count, > - LLVMReadNoneAttribute | LLVMNoUnwindAttribute); > - } > -} > - > -static void txq_fetch_args( > - struct lp_build_tgsi_context * bld_base, > - struct lp_build_emit_data * emit_data) > -{ > - struct si_shader_context *si_shader_ctx = si_shader_context(bld_base); > - const struct tgsi_full_instruction *inst = emit_data->inst; > - struct gallivm_state *gallivm = bld_base->base.gallivm; > - LLVMBuilderRef builder = gallivm->builder; > - unsigned target = inst->Texture.Texture; > - LLVMValueRef res_ptr; > - > - if (inst->Src[1].Register.Indirect) { > - const struct tgsi_full_src_register *reg = &inst->Src[1]; > - LLVMValueRef ind_index; > - > - ind_index = get_indirect_index(si_shader_ctx, ®->Indirect, > reg->Register.Index); > - > - res_ptr = LLVMGetParam(si_shader_ctx->radeon_bld.main_fn, > SI_PARAM_RESOURCE); > - res_ptr = build_indexed_load_const(si_shader_ctx, res_ptr, > - ind_index); > - } else > - res_ptr = si_shader_ctx->resources[inst->Src[1].Register.Index]; > - > - if (target == TGSI_TEXTURE_BUFFER) { > - LLVMTypeRef i32 = LLVMInt32TypeInContext(gallivm->context); > - LLVMTypeRef v8i32 = LLVMVectorType(i32, 8); > - > - /* Read the size from the buffer descriptor directly. */ > - LLVMValueRef res = LLVMBuildBitCast(builder, res_ptr, v8i32, > ""); > - LLVMValueRef size = LLVMBuildExtractElement(builder, res, > - lp_build_const_int32(gallivm, > 6), ""); > - > - if (si_shader_ctx->screen->b.chip_class >= VI) { > - /* On VI, the descriptor contains the size in bytes, > - * but TXQ must return the size in elements. > - * The stride is always non-zero for resources using > TXQ. > - */ > - LLVMValueRef stride = > - LLVMBuildExtractElement(builder, res, > - > lp_build_const_int32(gallivm, 5), ""); > - stride = LLVMBuildLShr(builder, stride, > - lp_build_const_int32(gallivm, > 16), ""); > - stride = LLVMBuildAnd(builder, stride, > - lp_build_const_int32(gallivm, > 0x3FFF), ""); > - > - size = LLVMBuildUDiv(builder, size, stride, ""); > - } > - > - emit_data->args[0] = size; > + switch (opcode) { > + case TGSI_OPCODE_TXF: > + name = target == TGSI_TEXTURE_2D_MSAA || > + target == TGSI_TEXTURE_2D_ARRAY_MSAA ? > + "llvm.SI.image.load" : > + "llvm.SI.image.load.mip"; > + is_shadow = false; > + has_offset = false; > + break; > + case TGSI_OPCODE_TXQ: > + name = "llvm.SI.getresinfo"; > + is_shadow = false; > + has_offset = false; > + break; > + case TGSI_OPCODE_LODQ: > + name = "llvm.SI.getlod"; > + is_shadow = false; > + has_offset = false; > + break; > + case TGSI_OPCODE_TEX: > + case TGSI_OPCODE_TEX2: > + case TGSI_OPCODE_TXP: > + break; > + case TGSI_OPCODE_TXB: > + case TGSI_OPCODE_TXB2: > + infix = ".b"; > + break; > + case TGSI_OPCODE_TXL: > + case TGSI_OPCODE_TXL2: > + infix = ".l"; > + break; > + case TGSI_OPCODE_TXD: > + infix = ".d"; > + break; > + case TGSI_OPCODE_TG4: > + name = "llvm.SI.gather4"; > + break; > + default: > + assert(0); > return; > } > > - /* Mip level */ > - emit_data->args[0] = lp_build_emit_fetch(bld_base, inst, 0, > TGSI_CHAN_X); > - > - /* Resource */ > - emit_data->args[1] = res_ptr; > - > - /* Texture target */ > - if (target == TGSI_TEXTURE_CUBE_ARRAY || > - target == TGSI_TEXTURE_SHADOWCUBE_ARRAY) > - target = TGSI_TEXTURE_2D_ARRAY; > - > - emit_data->args[2] = lp_build_const_int32(bld_base->base.gallivm, > - target); > - > - emit_data->arg_count = 3; > - > - emit_data->dst_type = LLVMVectorType( > - LLVMInt32TypeInContext(bld_base->base.gallivm->context), > - 4); > -} > - > -static void build_txq_intrinsic(const struct lp_build_tgsi_action * action, > - struct lp_build_tgsi_context * bld_base, > - struct lp_build_emit_data * emit_data) > -{ > - unsigned target = emit_data->inst->Texture.Texture; > + if (LLVMGetTypeKind(LLVMTypeOf(emit_data->args[0])) == > LLVMVectorTypeKind) > + sprintf(type, ".v%ui32", > + LLVMGetVectorSize(LLVMTypeOf(emit_data->args[0]))); > + else > + strcpy(type, ".i32"); > > - if (target == TGSI_TEXTURE_BUFFER) { > - /* Just return the buffer size. */ > - emit_data->output[emit_data->chan] = emit_data->args[0]; > - return; > - } > + /* Add the type and suffixes .c, .o if needed. */ > + sprintf(intr_name, "%s%s%s%s%s", > + name, is_shadow ? ".c" : "", infix, > + has_offset ? ".o" : "", type); > > - build_tgsi_intrinsic_nomem(action, bld_base, emit_data); > + emit_data->output[emit_data->chan] = lp_build_intrinsic( > + base->gallivm->builder, intr_name, emit_data->dst_type, > + emit_data->args, emit_data->arg_count, > + LLVMReadNoneAttribute | LLVMNoUnwindAttribute); > > /* Divide the number of layers by 6 to get the number of cubes. */ > - if (target == TGSI_TEXTURE_CUBE_ARRAY || > - target == TGSI_TEXTURE_SHADOWCUBE_ARRAY) { > + if (opcode == TGSI_OPCODE_TXQ && > + (target == TGSI_TEXTURE_CUBE_ARRAY || > + target == TGSI_TEXTURE_SHADOWCUBE_ARRAY)) { > LLVMBuilderRef builder = bld_base->base.gallivm->builder; > LLVMValueRef two = lp_build_const_int32(bld_base->base.gallivm, > 2); > LLVMValueRef six = lp_build_const_int32(bld_base->base.gallivm, > 6); > @@ -3355,12 +3275,6 @@ static const struct lp_build_tgsi_action tex_action = { > .emit = build_tex_intrinsic, > }; > > -static const struct lp_build_tgsi_action txq_action = { > - .fetch_args = txq_fetch_args, > - .emit = build_txq_intrinsic, > - .intr_name = "llvm.SI.resinfo" > -}; > - > static const struct lp_build_tgsi_action interp_action = { > .fetch_args = interp_fetch_args, > .emit = build_interp_intrinsic, > @@ -4070,7 +3984,7 @@ int si_shader_create(struct si_screen *sscreen, > LLVMTargetMachineRef tm, > bld_base->op_actions[TGSI_OPCODE_TXL] = tex_action; > bld_base->op_actions[TGSI_OPCODE_TXL2] = tex_action; > bld_base->op_actions[TGSI_OPCODE_TXP] = tex_action; > - bld_base->op_actions[TGSI_OPCODE_TXQ] = txq_action; > + bld_base->op_actions[TGSI_OPCODE_TXQ] = tex_action; > bld_base->op_actions[TGSI_OPCODE_TG4] = tex_action; > bld_base->op_actions[TGSI_OPCODE_LODQ] = tex_action; > > -- > 2.1.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev