[Mesa-dev] [PATCH] r600g: Fixed SIN/COS/SCS for the case where the operand is a literal.

Alex Deucher alexdeucher at gmail.com
Thu Jan 6 17:51:18 PST 2011


On Thu, Jan 6, 2011 at 4:30 PM, Tilman Sauerbeck <tilman at code-monkey.de> wrote:
> Signed-off-by: Tilman Sauerbeck <tilman at code-monkey.de>

looks good to me.  should probably be applied to 7.10 as well.

Reviewed-by: Alex Deucher <alexdeucher at gmail.com>

Alex

> ---
>  src/gallium/drivers/r600/r600_shader.c |   17 +++++++++++++++--
>  1 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
> index bb5038c..35a4cea 100644
> --- a/src/gallium/drivers/r600/r600_shader.c
> +++ b/src/gallium/drivers/r600/r600_shader.c
> @@ -948,7 +948,7 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
>                           struct r600_bc_alu_src r600_src[3])
>  {
>        struct tgsi_full_instruction *inst = &ctx->parse.FullToken.FullInstruction;
> -       int r;
> +       int r, src0_chan;
>        uint32_t lit_vals[4];
>        struct r600_bc_alu alu;
>
> @@ -960,6 +960,19 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
>        if (r)
>                return r;
>
> +       src0_chan = tgsi_chan(&inst->Src[0], 0);
> +
> +       /* We are going to feed two literals to the MAD below,
> +        * which means that if the first operand is a literal as well,
> +        * we need to copy its value manually.
> +        */
> +       if (r600_src[0].sel == V_SQ_ALU_SRC_LITERAL) {
> +               unsigned index = inst->Src[0].Register.Index;
> +
> +               lit_vals[2] = ctx->literals[index * 4 + src0_chan];
> +               src0_chan = 2;
> +       }
> +
>        lit_vals[0] = fui(1.0 /(3.1415926535 * 2));
>        lit_vals[1] = fui(0.5f);
>
> @@ -972,7 +985,7 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
>        alu.dst.write = 1;
>
>        alu.src[0] = r600_src[0];
> -       alu.src[0].chan = tgsi_chan(&inst->Src[0], 0);
> +       alu.src[0].chan = src0_chan;
>
>        alu.src[1].sel = V_SQ_ALU_SRC_LITERAL;
>        alu.src[1].chan = 0;
> --
> 1.7.3.1
>
> _______________________________________________
> 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