[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