diff options
author | Zack Rusin <[email protected]> | 2013-03-07 19:11:28 -0800 |
---|---|---|
committer | Zack Rusin <[email protected]> | 2013-03-07 20:16:00 -0800 |
commit | e5406f70589049b12cbff8b1a5b451001d46e687 (patch) | |
tree | 0fdc4792674e9c9464d4cc2598fb0ef15be2fb00 /src/gallium/auxiliary/tgsi/tgsi_exec.c | |
parent | 9060c835fd3db29c657b62c5ec403e994c0ebce8 (diff) |
tgsi/exec: Correctly reset NumOutputs before parsing the shader
Whenever we're binding the shaders we're incrementing NumOutputs,
assuming the parser spots an output decleration, but we were never
reseting the variable. That means that each subsequent bind of
a geometry shader would add its number of output to the number
of output bound by all previously ran shaders and our indexes
would get completely messed up.
Signed-off-by: Zack Rusin <[email protected]>
Reviewed-by: José Fonseca <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/tgsi/tgsi_exec.c')
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_exec.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index d3bba2c7d98..44883970844 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -681,6 +681,7 @@ tgsi_exec_machine_bind_shader( mach->Processor = parse.FullHeader.Processor.Processor; mach->ImmLimit = 0; + mach->NumOutputs = 0; if (mach->Processor == TGSI_PROCESSOR_GEOMETRY && !mach->UsedGeometryShader) { @@ -1484,12 +1485,15 @@ store_dest(struct tgsi_exec_machine *mach, + reg->Register.Index; dst = &mach->Outputs[offset + index].xyzw[chan_index]; #if 0 + debug_printf("NumOutputs = %d, TEMP_O_C/I = %d, redindex = %d\n", + mach->NumOutputs, mach->Temps[TEMP_OUTPUT_I].xyzw[TEMP_OUTPUT_C].u[0], + reg->Register.Index); if (TGSI_PROCESSOR_GEOMETRY == mach->Processor) { - fprintf(stderr, "STORING OUT[%d] mask(%d), = (", offset + index, execmask); + debug_printf("STORING OUT[%d] mask(%d), = (", offset + index, execmask); for (i = 0; i < TGSI_QUAD_SIZE; i++) if (execmask & (1 << i)) - fprintf(stderr, "%f, ", chan->f[i]); - fprintf(stderr, ")\n"); + debug_printf("%f, ", chan->f[i]); + debug_printf(")\n"); } #endif break; |