[Mesa-dev] [PATCH 01/16] st/nine: Handle special LIT case

Ilia Mirkin imirkin at alum.mit.edu
Fri Apr 24 14:04:15 PDT 2015


On Fri, Apr 24, 2015 at 4:09 PM, Axel Davy <axel.davy at ens.fr> wrote:
> Signed-off-by: Axel Davy <axel.davy at ens.fr>
> ---
>  src/gallium/state_trackers/nine/nine_shader.c | 19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/state_trackers/nine/nine_shader.c b/src/gallium/state_trackers/nine/nine_shader.c
> index 2ba625e..0fd3d37 100644
> --- a/src/gallium/state_trackers/nine/nine_shader.c
> +++ b/src/gallium/state_trackers/nine/nine_shader.c
> @@ -2040,6 +2040,23 @@ DECL_SPECIAL(LOG)
>      return D3D_OK;
>  }
>
> +DECL_SPECIAL(LIT)
> +{
> +    struct ureg_program *ureg = tx->ureg;
> +    struct ureg_dst tmp = tx_scratch(tx);
> +    struct ureg_dst dst = tx_dst_param(tx, &tx->insn.dst[0]);
> +    struct ureg_src src = tx_src_param(tx, &tx->insn.src[0]);
> +    ureg_LIT(ureg, tmp, src);
> +    /* d3d9 LIT is the same than gallium LIT. One difference is that d3d9
> +     * states that dst.z is 0 when src.y <= 0. Gallium definition can assign
> +     * it 0^0 if src.w=0, which value is driver dependent. */
> +    ureg_CMP(ureg, ureg_writemask(dst, TGSI_WRITEMASK_Z),
> +             ureg_negate(ureg_scalar(src, TGSI_SWIZZLE_Y)),
> +             ureg_src(tmp), ureg_imm1f(ureg, 0.0f));
> +    ureg_MOV(ureg, ureg_writemask(dst, TGSI_WRITEMASK_XYW), ureg_src(tmp));

Why use a separate temp? Couldn't you just

ureg_LIT(ureg, dst, src);
ureg_CMP(ureg, writemask(dst, Z), -src.y, ureg_src(dst), ureg_imm1f(0.0)) ?

> +    return D3D_OK;
> +}
> +
>  DECL_SPECIAL(NRM)
>  {
>      struct ureg_program *ureg = tx->ureg;
> @@ -2543,7 +2560,7 @@ struct sm1_op_info inst_table[] =
>      _OPI(SGE, SGE, V(0,0), V(3,0), V(0,0), V(3,0), 1, 2, NULL), /* 13 */
>      _OPI(EXP, EX2, V(0,0), V(3,0), V(0,0), V(3,0), 1, 1, NULL), /* 14 */
>      _OPI(LOG, LG2, V(0,0), V(3,0), V(0,0), V(3,0), 1, 1, SPECIAL(LOG)), /* 15 */
> -    _OPI(LIT, LIT, V(0,0), V(3,0), V(0,0), V(0,0), 1, 1, NULL), /* 16 */
> +    _OPI(LIT, LIT, V(0,0), V(3,0), V(0,0), V(0,0), 1, 1, SPECIAL(LIT)), /* 16 */
>      _OPI(DST, DST, V(0,0), V(3,0), V(0,0), V(3,0), 1, 2, NULL), /* 17 */
>      _OPI(LRP, LRP, V(0,0), V(3,0), V(0,0), V(3,0), 1, 3, NULL), /* 18 */
>      _OPI(FRC, FRC, V(0,0), V(3,0), V(0,0), V(3,0), 1, 1, NULL), /* 19 */
> --
> 2.1.0
>
> _______________________________________________
> 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