brw: do not omit RT writes if dual_src_blend is on
Dual source blending when one of the sources is not written to leaves those values undefined, but the other should still be valid. By omitting unwritten outputs, we ended up not writing anything at all for the case that OUT1 is written to but OUT0 is undefined. Fixes new CTS tests: dEQP-VK.pipeline.*.blend.dual_source.undefined_output.first* Cc: mesa-stable Signed-off-by: Iván Briano <ivan.briano@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40357>
This commit is contained in:
parent
2ce8a9e1be
commit
fd556e54f6
1 changed files with 7 additions and 4 deletions
|
|
@ -63,8 +63,12 @@ brw_do_emit_fb_writes(brw_shader &s, int nr_color_regions, bool replicate_alpha)
|
|||
|
||||
brw_fb_write_inst *write = NULL;
|
||||
for (int target = 0; target < nr_color_regions; target++) {
|
||||
/* Skip over outputs that weren't written. */
|
||||
if (s.outputs[target].file == BAD_FILE)
|
||||
/* Skip over outputs that weren't written, unless dual source
|
||||
* blending is at play. The results may be undefined depending
|
||||
* on the blending settings, but that's what the user signed
|
||||
* up for.
|
||||
*/
|
||||
if (s.outputs[target].file == BAD_FILE && s.dual_src_output.file == BAD_FILE)
|
||||
continue;
|
||||
|
||||
const brw_builder abld = bld.annotate(
|
||||
|
|
@ -143,8 +147,7 @@ brw_emit_fb_writes(brw_shader &s)
|
|||
(key->nr_color_regions > 1 && key->alpha_to_coverage &&
|
||||
s.sample_mask.file == BAD_FILE);
|
||||
|
||||
prog_data->dual_src_blend = (s.dual_src_output.file != BAD_FILE &&
|
||||
s.outputs[0].file != BAD_FILE);
|
||||
prog_data->dual_src_blend = s.dual_src_output.file != BAD_FILE;
|
||||
assert(!prog_data->dual_src_blend || key->nr_color_regions == 1);
|
||||
|
||||
/* Following condition implements Wa_14017468336:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue