[Mesa-dev] Add support for GLSL IR saturate()
Abdiel Janulgue
abdiel.janulgue at linux.intel.com
Mon Jun 23 22:27:12 PDT 2014
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.
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)
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
src/glsl/ir.cpp | 2 +
src/glsl/ir.h | 1 +
src/glsl/ir_builder.cpp | 6 +--
src/glsl/ir_constant_expression.cpp | 6 +++
src/glsl/ir_optimization.h | 1 +
src/glsl/ir_validate.cpp | 1 +
src/glsl/lower_instructions.cpp | 29 ++++++++++++
src/mesa/drivers/dri/i965/brw_fs.h | 1 -
src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp | 1 +
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 41 ++---------------
src/mesa/drivers/dri/i965/brw_vec4.h | 1 -
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 25 ++--------
src/mesa/program/ir_to_mesa.cpp | 59 ++++--------------------
src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 63 +++++---------------------
14 files changed, 71 insertions(+), 166 deletions(-)
More information about the mesa-dev
mailing list