i965: Generate driver-specific IR for non-fragment shaders as well.

This will be used by the new vertex shader backend.  The scalarizing
passes are skipped for non-fragment, since vertex and geometry threads
are based on vec4s.
This commit is contained in:
Eric Anholt 2011-05-03 15:27:38 -07:00
parent 11e4ea0010
commit c1f00731fd
1 changed files with 12 additions and 5 deletions

View File

@ -75,10 +75,15 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
{
struct brw_context *brw = brw_context(ctx);
struct intel_context *intel = &brw->intel;
unsigned int stage;
for (stage = 0; stage < ARRAY_SIZE(prog->_LinkedShaders); stage++) {
struct brw_shader *shader =
(struct brw_shader *)prog->_LinkedShaders[stage];
if (!shader)
continue;
struct brw_shader *shader =
(struct brw_shader *)prog->_LinkedShaders[MESA_SHADER_FRAGMENT];
if (shader != NULL) {
void *mem_ctx = ralloc_context(NULL);
bool progress;
@ -116,8 +121,10 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
do {
progress = false;
brw_do_channel_expressions(shader->ir);
brw_do_vector_splitting(shader->ir);
if (stage == MESA_SHADER_FRAGMENT) {
brw_do_channel_expressions(shader->ir);
brw_do_vector_splitting(shader->ir);
}
progress = do_lower_jumps(shader->ir, true, true,
true, /* main return */