[Mesa-dev] [PATCH] st/mesa: emit saturates in the vertex shader if Shader Model 3.0 is supported

Jose Fonseca jfonseca at vmware.com
Mon Feb 4 02:33:49 PST 2013


Sounds good to me. It matches the SM3 semantics

  http://msdn.microsoft.com/en-us/library/windows/desktop/bb172934(v=vs.85).aspx

It may expose driver bugs on handling saturate, but such bugs should be fixed regardless.

Jose

----- Original Message -----
> v2: change the requirement from GLSL 1.30 to SM 3.0 (R500 can do
> this)
> ---
> I'd like to know if people are okay with this.
> 
> 
>  src/mesa/state_tracker/st_context.c        |    1 +
>  src/mesa/state_tracker/st_context.h        |    1 +
>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp |    7 ++++---
>  3 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/src/mesa/state_tracker/st_context.c
> b/src/mesa/state_tracker/st_context.c
> index b416319..676fc06 100644
> --- a/src/mesa/state_tracker/st_context.c
> +++ b/src/mesa/state_tracker/st_context.c
> @@ -182,6 +182,7 @@ st_create_context_priv( struct gl_context *ctx,
> struct pipe_context *pipe,
>  
>     st->has_stencil_export =
>        screen->get_param(screen, PIPE_CAP_SHADER_STENCIL_EXPORT);
> +   st->has_shader_model3 = screen->get_param(screen, PIPE_CAP_SM3);
>  
>     /* GL limits and extensions */
>     st_init_limits(st);
> diff --git a/src/mesa/state_tracker/st_context.h
> b/src/mesa/state_tracker/st_context.h
> index 70ee671..726c64d 100644
> --- a/src/mesa/state_tracker/st_context.h
> +++ b/src/mesa/state_tracker/st_context.h
> @@ -84,6 +84,7 @@ struct st_context
>     GLboolean clamp_vert_color_in_shader;
>     boolean has_stencil_export; /**< can do shader stencil export? */
>     boolean has_time_elapsed;
> +   boolean has_shader_model3;
>  
>     /* On old libGL's for linux we need to invalidate the drawables
>      * on glViewpport calls, this is set via a option.
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index 69061a8..f833321 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -1286,11 +1286,12 @@
> glsl_to_tgsi_visitor::try_emit_mad_for_and_not(ir_expression *ir,
> int try_operan
>  bool
>  glsl_to_tgsi_visitor::try_emit_sat(ir_expression *ir)
>  {
> -   /* Saturates were only introduced to vertex programs in
> -    * NV_vertex_program3, so don't give them to drivers in the VP.
> +   /* Emit saturates in the vertex shader only if SM 3.0 is
> supported.
>      */
> -   if (this->prog->Target == GL_VERTEX_PROGRAM_ARB)
> +   if (this->prog->Target == GL_VERTEX_PROGRAM_ARB &&
> +       !st_context(this->ctx)->has_shader_model3) {
>        return false;
> +   }
>  
>     ir_rvalue *sat_src = ir->as_rvalue_to_saturate();
>     if (!sat_src)
> --
> 1.7.10.4
> 
> _______________________________________________
> 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