mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
vc4: Respect glSampleMask() even when we're not writing color.
gallium's quad-based blitter for copying MSAA depth textures expects to be able to do 4 passes updating a sample at a time using glSampleMask, and there's no color buffer bound when it's doing that.
This commit is contained in:
parent
30237193f5
commit
5c86f119b9
1 changed files with 13 additions and 3 deletions
|
|
@ -630,9 +630,7 @@ vc4_nir_lower_blend_instr(struct vc4_compile *c, nir_builder *b,
|
|||
{
|
||||
nir_ssa_def *frag_color = intr->src[0].ssa;
|
||||
|
||||
if (c->fs_key->sample_coverage) {
|
||||
vc4_nir_store_sample_mask(c, b, nir_load_sample_mask_in(b));
|
||||
} else if (c->fs_key->sample_alpha_to_coverage) {
|
||||
if (c->fs_key->sample_alpha_to_coverage) {
|
||||
nir_ssa_def *a = nir_channel(b, frag_color, 3);
|
||||
|
||||
/* XXX: We should do a nice dither based on the fragment
|
||||
|
|
@ -721,4 +719,16 @@ vc4_nir_lower_blend(nir_shader *s, struct vc4_compile *c)
|
|||
nir_metadata_dominance);
|
||||
}
|
||||
}
|
||||
|
||||
/* If we didn't do alpha-to-coverage on the output color, we still
|
||||
* need to pass glSampleMask() through.
|
||||
*/
|
||||
if (c->fs_key->sample_coverage && !c->fs_key->sample_alpha_to_coverage) {
|
||||
nir_function_impl *impl = nir_shader_get_entrypoint(s);
|
||||
nir_builder b;
|
||||
nir_builder_init(&b, impl);
|
||||
b.cursor = nir_after_block(nir_impl_last_block(impl));
|
||||
|
||||
vc4_nir_store_sample_mask(c, &b, nir_load_sample_mask_in(&b));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue