ir_to_mesa, glsl_to_tgsi: lower ir_unop_saturate
Needed when vertex programs doesn't allow saturate Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Signed-off-by: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
This commit is contained in:
parent
8935c12937
commit
cfa8c1cb39
|
@ -2990,9 +2990,12 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
|
||||||
|
|
||||||
/* Lowering */
|
/* Lowering */
|
||||||
do_mat_op_to_vec(ir);
|
do_mat_op_to_vec(ir);
|
||||||
|
GLenum target = _mesa_shader_stage_to_program(prog->_LinkedShaders[i]->Stage);
|
||||||
lower_instructions(ir, (MOD_TO_FRACT | DIV_TO_MUL_RCP | EXP_TO_EXP2
|
lower_instructions(ir, (MOD_TO_FRACT | DIV_TO_MUL_RCP | EXP_TO_EXP2
|
||||||
| LOG_TO_LOG2 | INT_DIV_TO_MUL_RCP
|
| LOG_TO_LOG2 | INT_DIV_TO_MUL_RCP
|
||||||
| ((options->EmitNoPow) ? POW_TO_EXP2 : 0)));
|
| ((options->EmitNoPow) ? POW_TO_EXP2 : 0)
|
||||||
|
| ((target == GL_VERTEX_PROGRAM_ARB) ? SAT_TO_CLAMP
|
||||||
|
: 0)));
|
||||||
|
|
||||||
progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, options->EmitNoCont, options->EmitNoLoops) || progress;
|
progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, options->EmitNoCont, options->EmitNoLoops) || progress;
|
||||||
|
|
||||||
|
|
|
@ -5429,6 +5429,9 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
|
||||||
if (!pscreen->get_param(pscreen, PIPE_CAP_TEXTURE_GATHER_OFFSETS))
|
if (!pscreen->get_param(pscreen, PIPE_CAP_TEXTURE_GATHER_OFFSETS))
|
||||||
lower_offset_arrays(ir);
|
lower_offset_arrays(ir);
|
||||||
do_mat_op_to_vec(ir);
|
do_mat_op_to_vec(ir);
|
||||||
|
/* Emit saturates in the vertex shader only if SM 3.0 is supported. */
|
||||||
|
bool vs_sm3 = (_mesa_shader_stage_to_program(prog->_LinkedShaders[i]->Stage) ==
|
||||||
|
GL_VERTEX_PROGRAM_ARB) && st_context(ctx)->has_shader_model3;
|
||||||
lower_instructions(ir,
|
lower_instructions(ir,
|
||||||
MOD_TO_FRACT |
|
MOD_TO_FRACT |
|
||||||
DIV_TO_MUL_RCP |
|
DIV_TO_MUL_RCP |
|
||||||
|
@ -5438,7 +5441,8 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
|
||||||
CARRY_TO_ARITH |
|
CARRY_TO_ARITH |
|
||||||
BORROW_TO_ARITH |
|
BORROW_TO_ARITH |
|
||||||
(options->EmitNoPow ? POW_TO_EXP2 : 0) |
|
(options->EmitNoPow ? POW_TO_EXP2 : 0) |
|
||||||
(!ctx->Const.NativeIntegers ? INT_DIV_TO_MUL_RCP : 0));
|
(!ctx->Const.NativeIntegers ? INT_DIV_TO_MUL_RCP : 0) |
|
||||||
|
(vs_sm3 ? SAT_TO_CLAMP : 0));
|
||||||
|
|
||||||
lower_ubo_reference(prog->_LinkedShaders[i], ir);
|
lower_ubo_reference(prog->_LinkedShaders[i], ir);
|
||||||
do_vec_index_to_cond_assign(ir);
|
do_vec_index_to_cond_assign(ir);
|
||||||
|
|
Loading…
Reference in New Issue