[Mesa-dev] [PATCH 2/2] r600g: RSQ: clear NEG for operand

Jose Fonseca jfonseca at vmware.com
Wed Jul 6 04:09:40 PDT 2011


Good find.

On this sort of issues it's a good idea to search the code for similar cases:

- it looks like this is done differently above:

                case TGSI_OPCODE_ABS:
                        alu.src[0].abs = 1;
                        if (alu.src[0].neg)
                          alu.src[0].neg = 0;
                        break;

  so an inline helper to set abs correctly would be cleaner & more consistent.

- looking at src/gallium/docs/source/tgsi.rst there are other opcodes with |..| in their formula which is not observed, in particular src/gallium/drivers/r600/r600_shader.c:tgsi_log() does not set abs where the spec says it should.

Jose


----- Original Message -----
> Need to clear NEG bit because it applies after ABS, e.g. "RSQ ...,
> -1"
> uses -|1| as operand.
> 
> Signed-off-by: Vadim Girlin <vadimgirlin at gmail.com>
> ---
>  src/gallium/drivers/r600/r600_shader.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/src/gallium/drivers/r600/r600_shader.c
> b/src/gallium/drivers/r600/r600_shader.c
> index f3cbf98..5aad3e3 100644
> --- a/src/gallium/drivers/r600/r600_shader.c
> +++ b/src/gallium/drivers/r600/r600_shader.c
> @@ -1506,6 +1506,7 @@ static int tgsi_rsq(struct r600_shader_ctx
> *ctx)
>  	for (i = 0; i < inst->Instruction.NumSrcRegs; i++) {
>  		r600_bc_src(&alu.src[i], &ctx->src[i], 0);
>  		alu.src[i].abs = 1;
> +		alu.src[i].neg = 0;
>  	}
>  	alu.dst.sel = ctx->temp_reg;
>  	alu.dst.write = 1;
> --
> 1.7.6
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list