i965: When using the new FS backend, don't validate the Mesa IR version.
authorEric Anholt <eric@anholt.net>
Thu, 2 Sep 2010 16:37:17 +0000 (09:37 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 7 Sep 2010 17:34:09 +0000 (10:34 -0700)
src/mesa/drivers/dri/i965/brw_program.c

index bc152204a42f5a5a31759ff24998eeea9de9afff..3e52be5d4b74cb9cbeba12fac06fe5609dafe681 100644 (file)
@@ -132,6 +132,7 @@ static GLboolean brwProgramStringNotify( GLcontext *ctx,
       struct brw_fragment_program *newFP = brw_fragment_program(fprog);
       const struct brw_fragment_program *curFP =
          brw_fragment_program_const(brw->fragment_program);
+      struct gl_shader_program *shader_program;
 
       if (fprog->FogOption) {
          _mesa_append_fog_code(ctx, fprog);
@@ -142,6 +143,21 @@ static GLboolean brwProgramStringNotify( GLcontext *ctx,
         brw->state.dirty.brw |= BRW_NEW_FRAGMENT_PROGRAM;
       newFP->id = brw->program_id++;      
       newFP->isGLSL = brw_wm_is_glsl(fprog);
+
+      /* Don't reject fragment shaders for their Mesa IR state when we're
+       * using the new FS backend.
+       */
+      shader_program = _mesa_lookup_shader_program(ctx, prog->Id);
+      if (shader_program) {
+        for (i = 0; i < shader_program->_NumLinkedShaders; i++) {
+           struct brw_shader *shader;
+
+           shader = (struct brw_shader *)shader_program->_LinkedShaders[i];
+           if (shader->base.Type == GL_FRAGMENT_SHADER && shader->ir) {
+              return GL_TRUE;
+           }
+        }
+      }
    }
    else if (target == GL_VERTEX_PROGRAM_ARB) {
       struct gl_vertex_program *vprog = (struct gl_vertex_program *) prog;