mesa: Move the mvp_with_dp4 flag to ShaderCompilerOptions.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 18 Apr 2013 00:30:23 +0000 (17:30 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sun, 12 May 2013 16:36:43 +0000 (09:36 -0700)
This flag essentially tells the compiler whether it prefers
dot products or multiply/adds for matrix operations.  As such,
ShaderCompilerOptions seems like the right place for it.

This also lets us specify it on a per-stage basis.  This patch makes all
existing users set the flag for the Vertex Shader stage only, as it's
currently only used for fixed-function vertex programs.  That will
change soon, and I wanted to preserve the existing behavior.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/r200/r200_context.c
src/mesa/drivers/dri/radeon/radeon_context.c
src/mesa/main/context.c
src/mesa/main/context.h
src/mesa/main/ffvertex_prog.c
src/mesa/main/mtypes.h
src/mesa/program/programopt.c
src/mesa/state_tracker/st_context.c

index 036ff7560adfbcd8a88d68dbdeb4dcb2460042f5..391fa90553c7a8393444de83618ca7ab3b0ac04d 100644 (file)
@@ -351,7 +351,7 @@ GLboolean r200CreateContext( gl_api api,
    ctx->Const.MaxDrawBuffers = 1;
    ctx->Const.MaxColorAttachments = 1;
 
-   _mesa_set_mvp_with_dp4( ctx, GL_TRUE );
+   ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].PreferDP4 = GL_TRUE;
 
    /* Install the customized pipeline:
     */
index 7dd9109cca785e44242d8348a159291f64b809f1..cac4b124296d114b8f9a7037dbe656aee39beea8 100644 (file)
@@ -314,7 +314,7 @@ r100CreateContext( gl_api api,
    ctx->Const.MaxColorAttachments = 1;
    ctx->Const.MaxRenderbufferSize = 2048;
 
-   _mesa_set_mvp_with_dp4( ctx, GL_TRUE );
+   ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].PreferDP4 = true;
 
    /* Install the customized pipeline:
     */
index 2006a44d638cec69217ab58394f4497f7edcc242..0053525e828afd025f0bff6e612bb8754fb61531 100644 (file)
@@ -1720,18 +1720,6 @@ _mesa_Flush(void)
 }
 
 
-/**
- * Set mvp_with_dp4 flag.  If a driver has a preference for DP4 over
- * MUL/MAD, or vice versa, call this function to register that.
- * Otherwise we default to MUL/MAD.
- */
-void
-_mesa_set_mvp_with_dp4( struct gl_context *ctx,
-                        GLboolean flag )
-{
-   ctx->mvp_with_dp4 = flag;
-}
-
 /*
  * ARB_blend_func_extended - ERRORS section
  * "The error INVALID_OPERATION is generated by Begin or any procedure that
index 8e0e88a39202db3074d18dad9146c0fc52d6fc32..0118e5f6ac4db7616518b5f3501849fe203e7b72 100644 (file)
@@ -155,11 +155,6 @@ extern struct _glapi_table *
 _mesa_get_dispatch(struct gl_context *ctx);
 
 
-void
-_mesa_set_mvp_with_dp4( struct gl_context *ctx,
-                        GLboolean flag );
-
-
 extern GLboolean
 _mesa_valid_to_render(struct gl_context *ctx, const char *where);
 
index 9e0b3474d2039be389dfb8f3c02b48a4f8b93f2e..be6ac0f2af5e46e2c35d15429c27cb0b8e5b881c 100644 (file)
@@ -1674,7 +1674,7 @@ _mesa_get_fixed_func_vertex_program(struct gl_context *ctx)
          return NULL;
 
       create_new_program( &key, prog,
-                          ctx->mvp_with_dp4,
+                          ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].PreferDP4,
                           ctx->Const.VertexProgram.MaxTemps );
 
 #if 0
index 9e6ea8aed4bc0edc11d4632190ce78218bab1b41..a68862dfa25168ae267c2c606b9d9b60dc03ccb6 100644 (file)
@@ -2433,6 +2433,12 @@ struct gl_shader_compiler_options
    GLuint MaxIfDepth;               /**< Maximum nested IF blocks */
    GLuint MaxUnrollIterations;
 
+   /**
+    * Prefer DP4 instructions (rather than MUL/MAD) for matrix * vector
+    * operations, such as position transformation.
+    */
+   GLboolean PreferDP4;
+
    struct gl_sl_pragmas DefaultPragmas; /**< Default #pragma settings */
 };
 
@@ -3574,12 +3580,6 @@ struct gl_context
 
    GLboolean TextureFormatSupported[MESA_FORMAT_COUNT];
 
-   /** 
-    * Use dp4 (rather than mul/mad) instructions for position
-    * transformation?
-    */
-   GLboolean mvp_with_dp4;
-
    GLboolean RasterDiscard;  /**< GL_RASTERIZER_DISCARD */
 
    /**
index 14868ab1e7975cf31c57406154a48720a27a6631..6a62e1f5867ee625703157b601440f1c4aee9624 100644 (file)
@@ -219,7 +219,7 @@ _mesa_insert_mvp_mad_code(struct gl_context *ctx, struct gl_vertex_program *vpro
 void
 _mesa_insert_mvp_code(struct gl_context *ctx, struct gl_vertex_program *vprog)
 {
-   if (ctx->mvp_with_dp4) 
+   if (ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].PreferDP4)
       _mesa_insert_mvp_dp4_code( ctx, vprog );
    else
       _mesa_insert_mvp_mad_code( ctx, vprog );
index dccf87bc326281518f85f914164472ccabe4a5b2..7d18c252190aa841f946bc9beac605c493ea2a3a 100644 (file)
@@ -240,7 +240,7 @@ struct st_context *st_create_context(gl_api api, struct pipe_context *pipe,
     * driver prefers DP4 or MUL/MAD for vertex transformation.
     */
    if (debug_get_option_mesa_mvp_dp4())
-      _mesa_set_mvp_with_dp4( ctx, GL_TRUE );
+      ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].PreferDP4 = GL_TRUE;
 
    return st_create_context_priv(ctx, pipe, options);
 }