[Mesa-dev] [PATCH v2 5/7] st/mesa: For vertex shaders, don't emit saturate when SM 3.0 is unsupported
Marek Olšák
maraeo at gmail.com
Wed Dec 3 03:52:47 PST 2014
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Marek
On Mon, Dec 1, 2014 at 2:47 PM, Abdiel Janulgue
<abdiel.janulgue at linux.intel.com> wrote:
> There is a bug in the current lowering pass implementation where we lower saturate
> to clamp only for vertex shaders on drivers supporting SM 3.0. The correct behavior
> is to actually lower to clamp only when we don't support saturate which happens
> on drivers that don't support SM 3.0
>
> Signed-off-by: Abdiel Janulgue <abdiel.janulgue at linux.intel.com>
> ---
> src/mesa/state_tracker/st_context.c | 2 ++
> src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 5 +----
> 2 files changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
> index 1723513..9da0c77 100644
> --- a/src/mesa/state_tracker/st_context.c
> +++ b/src/mesa/state_tracker/st_context.c
> @@ -271,6 +271,8 @@ st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe,
> */
> st->ctx->Point.MaxSize = MAX2(ctx->Const.MaxPointSize,
> ctx->Const.MaxPointSizeAA);
> + /* For vertex shaders, make sure not to emit saturate when SM 3.0 is not supported */
> + ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].EmitNoSat = !st->has_shader_model3;
>
> _mesa_compute_version(ctx);
>
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index 8e91c4b..3ef7138 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -5391,9 +5391,6 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
> if (!pscreen->get_param(pscreen, PIPE_CAP_TEXTURE_GATHER_OFFSETS))
> lower_offset_arrays(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,
> MOD_TO_FRACT |
> DIV_TO_MUL_RCP |
> @@ -5404,7 +5401,7 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
> BORROW_TO_ARITH |
> (options->EmitNoPow ? POW_TO_EXP2 : 0) |
> (!ctx->Const.NativeIntegers ? INT_DIV_TO_MUL_RCP : 0) |
> - (vs_sm3 ? SAT_TO_CLAMP : 0));
> + (options->EmitNoSat ? SAT_TO_CLAMP : 0));
>
> lower_ubo_reference(prog->_LinkedShaders[i], ir);
> do_vec_index_to_cond_assign(ir);
> --
> 1.9.1
>
> _______________________________________________
> 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