We need to emit extra shader code in this case to sample the MCS surface first; we can't just blindly do this all the time since IVB will sometimes try to access the MCS surface even if disabled.
Signed-off-by: Chris Forbes <chr...@ijw.co.nz> --- src/mesa/drivers/dri/i965/brw_program.h | 5 +++++ src/mesa/drivers/dri/i965/brw_wm.c | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_program.h b/src/mesa/drivers/dri/i965/brw_program.h index 07be4a0..51182ea 100644 --- a/src/mesa/drivers/dri/i965/brw_program.h +++ b/src/mesa/drivers/dri/i965/brw_program.h @@ -45,6 +45,11 @@ struct brw_sampler_prog_key_data { * For RG32F, gather4's channel select is broken. */ uint16_t gather_channel_quirk_mask; + + /** + * Whether this sampler uses the compressed multisample surface layout. + */ + uint16_t compressed_multisample_layout_mask; }; #ifdef __cplusplus diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c index bc1480c..414481b 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.c +++ b/src/mesa/drivers/dri/i965/brw_wm.c @@ -38,6 +38,7 @@ #include "main/samplerobj.h" #include "program/prog_parameter.h" #include "program/program.h" +#include "intel_mipmap_tree.h" #include "glsl/ralloc.h" @@ -356,6 +357,14 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx, if (img->InternalFormat == GL_RG32F) key->gather_channel_quirk_mask |= 1 << s; } + + /* If this is a multisample sampler, and uses the CMS MSAA layout, then + * we need to emit slightly different code to first sample the MCS surface. + */ + if (brw->gen >= 7 && img->NumSamples && + intel_compute_msaa_layout(brw, img->TexFormat, t->Target) == INTEL_MSAA_LAYOUT_CMS) { + key->compressed_multisample_layout_mask |= 1 << s; + } } } } -- 1.8.4.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev