Rob Clark <robdcl...@gmail.com> writes: > From: Rob Clark <robcl...@freedesktop.org> > > Signed-off-by: Rob Clark <robcl...@freedesktop.org> > --- > src/gallium/auxiliary/nir/tgsi_to_nir.c | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c > b/src/gallium/auxiliary/nir/tgsi_to_nir.c > index 9d988b06..c9f9e03 100644 > --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c > +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c > @@ -982,7 +982,7 @@ ttn_tex(struct ttn_compile *c, nir_alu_dest dest, > nir_ssa_def **src) > struct tgsi_full_instruction *tgsi_inst = &c->token->FullInstruction; > nir_tex_instr *instr; > nir_texop op; > - unsigned num_srcs, samp = 1; > + unsigned num_srcs, samp = 1, i; > > switch (tgsi_inst->Instruction.Opcode) { > case TGSI_OPCODE_TEX: > @@ -1026,6 +1026,8 @@ ttn_tex(struct ttn_compile *c, nir_alu_dest dest, > nir_ssa_def **src) > num_srcs++; > } > > + num_srcs += tgsi_inst->Texture.NumOffsets; > + > instr = nir_tex_instr_create(b->shader, num_srcs); > instr->op = op; > > @@ -1103,6 +1105,32 @@ ttn_tex(struct ttn_compile *c, nir_alu_dest dest, > nir_ssa_def **src) > src_number++; > } > > + for (i = 0; i < tgsi_inst->Texture.NumOffsets; i++) { > + struct tgsi_texture_offset *tex_offset = &tgsi_inst->TexOffsets[i]; > + /* since TexOffset ins't using tgsi_full_src_register we get to > + * do some extra gymnastics: > + */ > + nir_alu_src src; > + > + memset(&src, 0, sizeof(src)); > + > + src.src = ttn_src_for_file_and_index(c, > + tex_offset->File, > + tex_offset->Index, > + NULL); > + > + src.swizzle[0] = tex_offset->SwizzleX; > + src.swizzle[1] = tex_offset->SwizzleY; > + src.swizzle[2] = tex_offset->SwizzleZ; > + src.swizzle[3] = TGSI_SWIZZLE_W; > + > + nir_ssa_def *off = nir_fmov_alu(b, src, instr->coord_components);
For a cubemap array, won't coord_components be 4, but you only want a 3-component value as the offset? I'm suspicious of this fixed SWIZZLE_W here. If you move the .src_type setting above this, you could use nir_tex_instr_src_size(instr, src_number) to get the right number of components. > + > + instr->src[src_number].src = nir_src_for_ssa(off); > + instr->src[src_number].src_type = nir_tex_src_offset; > + src_number++; > + } > +
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev