[Mesa-dev] [PATCH 1/4] gallium/ttn: add support for texture offsets
Eric Anholt
eric at anholt.net
Mon Apr 13 10:34:19 PDT 2015
Rob Clark <robdclark at gmail.com> writes:
> From: Rob Clark <robclark at freedesktop.org>
>
> Signed-off-by: Rob Clark <robclark at 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++;
> + }
> +
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 818 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150413/359d71a2/attachment.sig>
More information about the mesa-dev
mailing list