mesa: Actually use the Mesa IR optimizer for ARB programs.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 2 Aug 2014 12:33:14 +0000 (05:33 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 4 Aug 2014 22:43:56 +0000 (15:43 -0700)
On Haswell, this cuts 1-3 instructions from 183 vertex shaders in
"Shadowrun Returns", "Shatter", and "Trine 2."  It adds 2 instructions
to a single fragment shader in "Closure."

total instructions in shared programs: 278803 -> 278546 (-0.09%)
instructions in affected programs:     41930 -> 41673 (-0.61%)

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/program/arbprogparse.c

index 5b9665091b60f98a3986da1efd3abe0ed1e56c40..7dec399a5383ff2c378d6d4cfe4994f8d300e3e7 100644 (file)
@@ -60,6 +60,7 @@ having three separate program parameter arrays.
 #include "prog_parameter.h"
 #include "prog_statevars.h"
 #include "prog_instruction.h"
+#include "prog_optimize.h"
 #include "program_parser.h"
 
 
@@ -84,6 +85,9 @@ _mesa_parse_arb_fragment_program(struct gl_context* ctx, GLenum target,
       return;
    }
 
+   if ((ctx->_Shader->Flags & GLSL_NO_OPT) == 0)
+      _mesa_optimize_program(ctx, &prog);
+
    free(program->Base.String);
 
    /* Copy the relevant contents of the arb_program struct into the
@@ -177,6 +181,9 @@ _mesa_parse_arb_vertex_program(struct gl_context *ctx, GLenum target,
       return;
    }
 
+   if ((ctx->_Shader->Flags & GLSL_NO_OPT) == 0)
+      _mesa_optimize_program(ctx, &prog);
+
    free(program->Base.String);
 
    /* Copy the relevant contents of the arb_program struct into the