summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/tgsi
diff options
context:
space:
mode:
authorZack Rusin <zackr@vmware.com>2013-03-07 19:11:28 -0800
committerZack Rusin <zackr@vmware.com>2013-03-07 20:16:00 -0800
commite5406f70589049b12cbff8b1a5b451001d46e687 (patch)
tree0fdc4792674e9c9464d4cc2598fb0ef15be2fb00 /src/gallium/auxiliary/tgsi
parent9060c835fd3db29c657b62c5ec403e994c0ebce8 (diff)
downloadexternal_mesa3d-e5406f70589049b12cbff8b1a5b451001d46e687.zip
external_mesa3d-e5406f70589049b12cbff8b1a5b451001d46e687.tar.gz
external_mesa3d-e5406f70589049b12cbff8b1a5b451001d46e687.tar.bz2
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 <zackr@vmware.com> Reviewed-by: José Fonseca <jfonseca@vmware.com>
Diffstat (limited to 'src/gallium/auxiliary/tgsi')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_exec.c10
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 d3bba2c..4488397 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;