mesa: Move the mvp_with_dp4 flag to ShaderCompilerOptions.
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>
This commit is contained in:
@@ -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:
|
||||
*/
|
||||
|
@@ -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:
|
||||
*/
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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 */
|
||||
|
||||
/**
|
||||
|
@@ -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 );
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user