mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 02:58:05 +02:00
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>
This commit is contained in:
parent
9060c835fd
commit
e5406f7058
1 changed files with 7 additions and 3 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue