llvmpipe: implement TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS
Fixes http://bugs.freedesktop.org/show_bug.cgi?id=33284
This commit is contained in:
parent
b41d323c90
commit
7e86d9bd8c
|
@ -546,6 +546,7 @@ generate_fragment(struct llvmpipe_context *lp,
|
|||
unsigned i;
|
||||
unsigned chan;
|
||||
unsigned cbuf;
|
||||
boolean cbuf0_write_all;
|
||||
|
||||
/* Adjust color input interpolation according to flatshade state:
|
||||
*/
|
||||
|
@ -559,6 +560,15 @@ generate_fragment(struct llvmpipe_context *lp,
|
|||
}
|
||||
}
|
||||
|
||||
/* check if writes to cbuf[0] are to be copied to all cbufs */
|
||||
cbuf0_write_all = FALSE;
|
||||
for (i = 0;i < shader->info.base.num_properties; i++) {
|
||||
if (shader->info.base.properties[i].name ==
|
||||
TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS) {
|
||||
cbuf0_write_all = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: actually pick these based on the fs and color buffer
|
||||
* characteristics. */
|
||||
|
@ -697,9 +707,10 @@ generate_fragment(struct llvmpipe_context *lp,
|
|||
mask_input,
|
||||
counter);
|
||||
|
||||
for(cbuf = 0; cbuf < key->nr_cbufs; cbuf++)
|
||||
for(chan = 0; chan < NUM_CHANNELS; ++chan)
|
||||
fs_out_color[cbuf][chan][i] = out_color[cbuf][chan];
|
||||
for (cbuf = 0; cbuf < key->nr_cbufs; cbuf++)
|
||||
for (chan = 0; chan < NUM_CHANNELS; ++chan)
|
||||
fs_out_color[cbuf][chan][i] =
|
||||
out_color[cbuf * !cbuf0_write_all][chan];
|
||||
}
|
||||
|
||||
sampler->destroy(sampler);
|
||||
|
|
Loading…
Reference in New Issue