瀏覽代碼

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>
tags/mesa-9.2-rc1
Kenneth Graunke 12 年之前
父節點
當前提交
bbf029f7cf

+ 1
- 1
src/mesa/drivers/dri/r200/r200_context.c 查看文件

@@ -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:
*/

+ 1
- 1
src/mesa/drivers/dri/radeon/radeon_context.c 查看文件

@@ -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:
*/

+ 0
- 12
src/mesa/main/context.c 查看文件

@@ -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

+ 0
- 5
src/mesa/main/context.h 查看文件

@@ -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);


+ 1
- 1
src/mesa/main/ffvertex_prog.c 查看文件

@@ -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

+ 6
- 6
src/mesa/main/mtypes.h 查看文件

@@ -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 */

/**

+ 1
- 1
src/mesa/program/programopt.c 查看文件

@@ -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 );

+ 1
- 1
src/mesa/state_tracker/st_context.c 查看文件

@@ -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);
}

Loading…
取消
儲存