Mesa (master): i965: re-enable gen6 IF statements in the fragment shader.

Eric Anholt anholt at kemper.freedesktop.org
Wed Nov 10 21:38:32 UTC 2010


Module: Mesa
Branch: master
Commit: 9effc1adf1e7ba57fb3b10909762b76c1ae12f61
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9effc1adf1e7ba57fb3b10909762b76c1ae12f61

Author: Eric Anholt <eric at anholt.net>
Date:   Mon Oct 11 16:02:08 2010 -0700

i965: re-enable gen6 IF statements in the fragment shader.

IF statements were getting flattened while they were broken.  With
Zhenyu's last fix for ENDIF's type, everything appears to have lined
up to actually work.

This regresses two tests:
glsl1-! (not) operator (1, fail)
glsl1-! (not) operator (1, pass)

but fixes tests that couldn't work before because the IFs couldn't be
flattened:
glsl-fs-discard-01
occlusion-query-discard

(and, naturally, this should be a performance improvement for apps
that actually use IF statements to avoid executing a bunch of code).

---

 src/mesa/drivers/dri/i965/brw_context.c |    2 +-
 src/mesa/drivers/dri/i965/brw_fs.cpp    |    5 -----
 2 files changed, 1 insertions(+), 6 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 3c4ae8a..cb0a8b9 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -124,7 +124,7 @@ GLboolean brwCreateContext( int api,
 	 (i == MESA_SHADER_FRAGMENT);
 
       if (intel->gen == 6)
-	 ctx->ShaderCompilerOptions[i].EmitNoIfs = GL_TRUE;
+	 ctx->ShaderCompilerOptions[i].EmitNoIfs = (i == MESA_SHADER_VERTEX);
    }
 
    ctx->Const.VertexProgram.MaxNativeInstructions = (16 * 1024);
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 3caddae..283d5aa 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -89,8 +89,6 @@ brw_compile_shader(struct gl_context *ctx, struct gl_shader *shader)
 GLboolean
 brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
 {
-   struct intel_context *intel = intel_context(ctx);
-
    struct brw_shader *shader =
       (struct brw_shader *)prog->_LinkedShaders[MESA_SHADER_FRAGMENT];
    if (shader != NULL) {
@@ -132,9 +130,6 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
 						GL_TRUE, /* temp */
 						GL_TRUE /* uniform */
 						) || progress;
-	 if (intel->gen == 6) {
-	    progress = do_if_to_cond_assign(shader->ir) || progress;
-	 }
       } while (progress);
 
       validate_ir_tree(shader->ir);




More information about the mesa-commit mailing list