[Mesa-dev] [PATCH 1/2] r600g: texture offsets for non-TXF instructions

Grigori Goronzy greg at chown.ath.cx
Wed Oct 2 15:36:43 PDT 2013


On 03.10.2013 00:12, Grigori Goronzy wrote:
> All texture instructions can use offsets, not just TXF. Offsets into
> the literals array were wrong, too.

BTW, I just noticed it now: this fixes the fs-textureOffset-2D piglit 
test, which unfortunately does not appear to be part of any of the test 
suites.

> ---
>   src/gallium/drivers/r600/r600_shader.c | 20 ++++++++++----------
>   1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
> index 80cdcd5..6289d97 100644
> --- a/src/gallium/drivers/r600/r600_shader.c
> +++ b/src/gallium/drivers/r600/r600_shader.c
> @@ -3779,16 +3779,16 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
>   		}
>   	}
>
> -	if (inst->Instruction.Opcode == TGSI_OPCODE_TXF) {
> -		/* get offset values */
> -		if (inst->Texture.NumOffsets) {
> -			assert(inst->Texture.NumOffsets == 1);
> -
> -			offset_x = ctx->literals[inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleX] << 1;
> -			offset_y = ctx->literals[inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleY] << 1;
> -			offset_z = ctx->literals[inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleZ] << 1;
> -		}
> -	} else if (inst->Instruction.Opcode == TGSI_OPCODE_TXD) {
> +	/* get offset values */
> +	if (inst->Texture.NumOffsets) {
> +		assert(inst->Texture.NumOffsets == 1);
> +
> +		offset_x = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleX] << 1;
> +		offset_y = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleY] << 1;
> +		offset_z = ctx->literals[4 * inst->TexOffsets[0].Index + inst->TexOffsets[0].SwizzleZ] << 1;
> +	}
> +
> +	if (inst->Instruction.Opcode == TGSI_OPCODE_TXD) {
>   		/* TGSI moves the sampler to src reg 3 for TXD */
>   		sampler_src_reg = 3;
>
>



More information about the mesa-dev mailing list