[Mesa-dev] [PATCH] tgsi: Add a conditional move inststruction

Christoph Bumiller e0425955 at student.tuwien.ac.at
Thu Apr 4 03:37:15 PDT 2013


On 04.04.2013 03:45, Zack Rusin wrote:
> It's part of SM4 (http://goo.gl/4IpeK). It's also fairly
> painful to emulate without branching. Most hardware
> supports it natively and even llvm has a 'select' opcode
> which can handle it without too much hassle.
>
> diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst
> index 28308cb..6c5a02b 100644
> --- a/src/gallium/docs/source/tgsi.rst
> +++ b/src/gallium/docs/source/tgsi.rst
> @@ -72,6 +72,17 @@ used.
>  
>    dst.w = src.w
>  
> +.. opcode:: MOVC - Conditional move
> +
> +.. math::
> +
> +  dst.x = src0.x ? src1.x : src2.x
> +
> +  dst.y = src0.y ? src1.y : src2.y
> +
> +  dst.z = src0.z ? src1.z : src2.z
> +
> +  dst.w = src0.w ? src1.w : src2.w
>  

I think we already have that:

.. opcode:: UCMP - Integer Conditional Move

.. math::

  dst.x = src0.x ? src1.x : src2.x

  dst.y = src0.y ? src1.y : src2.y

  dst.z = src0.z ? src1.z : src2.z

  dst.w = src0.w ? src1.w : src2.w


No difference apart from the source ordering (the "integer" just implies
that any non-zero value counts as true, i.e. also inf, nan and -0).

And if you want more conditional ops, in theory we also have
predication, albeit support for that depends on the driver
(PIPE_SHADER_CAP_MAX_PREDS).



More information about the mesa-dev mailing list