summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2010-09-09 15:25:32 -0700
committerIan Romanick <[email protected]>2010-09-09 15:39:52 -0700
commit2b70dbfe091af5ae7c788e16275e1af2cb1c284c (patch)
treea871cba91b90dfba4399b9ff366b8083b11c9acf
parent547131ac8750acabd030972fc768705c13d19ef7 (diff)
glsl2: Add EmitNoNoise flag, use it to remove noise opcodes
-rw-r--r--src/mesa/drivers/dri/i915/i915_context.c1
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.c1
-rw-r--r--src/mesa/main/mtypes.h1
-rw-r--r--src/mesa/main/shaderapi.c13
-rw-r--r--src/mesa/program/ir_to_mesa.cpp3
5 files changed, 8 insertions, 11 deletions
diff --git a/src/mesa/drivers/dri/i915/i915_context.c b/src/mesa/drivers/dri/i915/i915_context.c
index 845ec2c3c4a..450e66e0d33 100644
--- a/src/mesa/drivers/dri/i915/i915_context.c
+++ b/src/mesa/drivers/dri/i915/i915_context.c
@@ -179,6 +179,7 @@ i915CreateContext(int api,
*/
ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].EmitCondCodes = GL_TRUE;
ctx->ShaderCompilerOptions[MESA_SHADER_FRAGMENT].EmitNoIfs = GL_TRUE;
+ ctx->ShaderCompilerOptions[MESA_SHADER_FRAGMENT].EmitNoNoise = GL_TRUE;
ctx->Const.MaxDrawBuffers = 1;
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index daa281ece46..b8283b4605b 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -114,6 +114,7 @@ GLboolean brwCreateContext( int api,
for (i = 0; i <= MESA_SHADER_FRAGMENT; i++) {
ctx->ShaderCompilerOptions[i].EmitCondCodes = GL_TRUE;
ctx->ShaderCompilerOptions[i].EmitNVTempInitialization = GL_TRUE;
+ ctx->ShaderCompilerOptions[i].EmitNoNoise = GL_TRUE;
}
ctx->Const.VertexProgram.MaxNativeInstructions = (16 * 1024);
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 96fd9141902..bcd324b4432 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2199,6 +2199,7 @@ struct gl_shader_compiler_options
GLboolean EmitNoFunctions;
GLboolean EmitNoCont; /**< Emit CONT opcode? */
GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */
+ GLboolean EmitNoNoise; /**< Emit NOISE opcodes? */
GLuint MaxUnrollIterations;
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index c32c09f8d4b..c25d2a19747 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -96,21 +96,12 @@ _mesa_init_shader_state(GLcontext *ctx)
*/
struct gl_shader_compiler_options options;
GLuint i;
- options.EmitHighLevelInstructions = GL_TRUE;
- options.EmitCondCodes = GL_FALSE;
- options.EmitComments = GL_FALSE;
- options.EmitNoIfs = GL_FALSE;
- options.EmitNoLoops = GL_FALSE;
- options.EmitNoFunctions = GL_FALSE;
- options.EmitNoCont = GL_FALSE;
- options.EmitNoMainReturn = GL_FALSE;
+
+ memset(&options, 0, sizeof(options));
options.MaxUnrollIterations = 32;
/* Default pragma settings */
- options.DefaultPragmas.IgnoreOptimize = GL_FALSE;
- options.DefaultPragmas.IgnoreDebug = GL_FALSE;
options.DefaultPragmas.Optimize = GL_TRUE;
- options.DefaultPragmas.Debug = GL_FALSE;
for(i = 0; i < MESA_SHADER_TYPES; ++i)
memcpy(&ctx->ShaderCompilerOptions[i], &options, sizeof(options));
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 7307c8506c0..6e7deae4331 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2734,6 +2734,9 @@ _mesa_ir_link_shader(GLcontext *ctx, struct gl_shader_program *prog)
if (options->EmitNoIfs)
progress = do_if_to_cond_assign(ir) || progress;
+ if (options->EmitNoNoise)
+ progress = lower_noise(ir) || progress;
+
progress = do_vec_index_to_cond_assign(ir) || progress;
} while (progress);