st/mesa: emit saturates in the vertex shader if Shader Model 3.0 is supported
authorMarek Olšák <maraeo@gmail.com>
Thu, 31 Jan 2013 21:30:44 +0000 (22:30 +0100)
committerMarek Olšák <maraeo@gmail.com>
Wed, 6 Feb 2013 13:51:31 +0000 (14:51 +0100)
v2: change the requirement from GLSL 1.30 to SM 3.0 (R500 can do this)

src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_context.h
src/mesa/state_tracker/st_glsl_to_tgsi.cpp

index b416319e1cb9977a22700e313bbb495a594f4deb..676fc069d83eb9b44b4e515f833fb181c308790e 100644 (file)
@@ -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);
index 70ee671d0c6e17f2f2027be7ae5b4baf6086931b..726c64d04ae7cc8bcf48a2c2b4cfc730f683e305 100644 (file)
@@ -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.
index b20dfd5dbb5f1239e004f6ee75377e0a32f4c224..63b74285aa3fa8929eec9dd2e47f5b1019fda4cd 100644 (file)
@@ -1287,11 +1287,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)