i965: Move _mesa_ir_link_shader call before device-specific linking
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 24 Oct 2011 23:37:01 +0000 (16:37 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 7 Nov 2011 21:33:16 +0000 (13:33 -0800)
_mesa_ir_link_shader needs to be called before cloning the IR tree so
that the var->location field for uniforms is set.

WARNING: This change breaks several integer division related piglit
tests.  The tests break because _mesa_ir_link_shader lowers integer
division to an RCP followed by a MUL.  The fix is to factor out more
of the code from ir_to_mesa so that _mesa_ir_link_shader does not need
to be called at all by the i965 driver.  This will be the subject of
several follow-on patches.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Tested-by: Tom Stellard <thomas.stellard@amd.com>
src/mesa/drivers/dri/i965/brw_shader.cpp

index d9d9414..7679b6e 100644 (file)
@@ -81,6 +81,9 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
    struct intel_context *intel = &brw->intel;
    unsigned int stage;
 
+   if (!_mesa_ir_link_shader(ctx, prog))
+      return false;
+
    for (stage = 0; stage < ARRAY_SIZE(prog->_LinkedShaders); stage++) {
       struct brw_shader *shader =
         (struct brw_shader *)prog->_LinkedShaders[stage];
@@ -148,9 +151,6 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
       ralloc_free(mem_ctx);
    }
 
-   if (!_mesa_ir_link_shader(ctx, prog))
-      return false;
-
    if (!brw_shader_precompile(ctx, prog))
       return false;