[Mesa-dev] Add support for GLSL IR saturate()

Matt Turner mattst88 at gmail.com
Tue Jun 24 12:10:34 PDT 2014

On Mon, Jun 23, 2014 at 10:27 PM, Abdiel Janulgue
<abdiel.janulgue at linux.intel.com> wrote:
> This patch series add the plumbing to support the GLSL IR instruction saturate().
> Previously, saturate is implemented as min/max instructions. Most GPUs, however,
> can probably perform saturate for free. With these changes, we can allow saturate
> to be optimized as a single instruction.
> In addition, the optimization try_emit_saturate was previously used to optimize
> min/max operations to a saturate operation. It didn't work for code such as
> min(max(a, b), c) where (b == 0.0 and c < 1.0) and related cases.
> With this infrastructure in place, we can optimize those operations easily in the
> do_algebraic pass. This is done in the next patch set.

Nice work.

> Abdiel Janulgue (11):
>       glsl: Add ir_unop_saturate
>       glsl: Add constant evaluation of ir_unop_saturate
>       glsl: Add a pass to lower ir_unop_saturate to clamp(x, 0, 1)

With the fixes mentioned in their respective threads, these are

Reviewed-by: Matt Turner <mattst88 at gmail.com>

>       ir_to_mesa, glsl_to_tgsi: lower ir_unop_saturate
>       ir_to_mesa, glsl_to_tgsi: Add support for ir_unop_saturate
>       ir_to_mesa, glsl_to_tgsi: Remove try_emit_saturate

>       i965/fs: Add support for ir_unop_saturate
>       i965/vec4: Add support for ir_unop_saturate
>       i965/fs: Remove try_emit_saturate
>       i965/vec4: Remove try_emit_saturate
>       glsl: Implement saturate as ir_binop_saturate

As well as these.

I'll review the ir_to_mesa and glsl_to_tgsi patches now. I'd like it
it someone more familiar with that code (and whose driver uses it)
would also review them.

More information about the mesa-dev mailing list