glsl2: Add EmitNoNoise flag, use it to remove noise opcodes
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 9 Sep 2010 22:25:32 +0000 (15:25 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 9 Sep 2010 22:39:52 +0000 (15:39 -0700)
src/mesa/drivers/dri/i915/i915_context.c
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/main/mtypes.h
src/mesa/main/shaderapi.c
src/mesa/program/ir_to_mesa.cpp

index 845ec2c3c4af433d6dbd36cd6f8f9c26122db0d2..450e66e0d33c86a416597b5973282d15065a4fdf 100644 (file)
@@ -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;
 
index daa281ece465ffa9a3946bdc3d4c9ef6e77c2a9a..b8283b4605b051c27f4e32722b06729c9c252046 100644 (file)
@@ -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);
index 96fd9141902f3f39972c183b377bc8c41485c8dc..bcd324b44326d1c4c4f119f0e928368fa9ca7b53 100644 (file)
@@ -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;
 
index c32c09f8d4b1de5f5dca5366afe82adc1e5089bc..c25d2a197471885774232bd08c2811acafffa51b 100644 (file)
@@ -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));
index 7307c8506c0e12485666b0e0205cd3eefe4034ad..6e7deae43312f3a72e7b55f0adcfe9cee95b4299 100644 (file)
@@ -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);