diff options
author | Chris Forbes <chrisf@ijw.co.nz> | 2013-11-30 10:01:12 +1300 |
---|---|---|
committer | Chris Forbes <chrisf@ijw.co.nz> | 2013-12-07 16:09:12 +1300 |
commit | 27359b807918503763bf22fc280158999776d0cb (patch) | |
tree | ab54f235806b2b261307fa91bd6715ae90da0ed6 | |
parent | b1604841c2407c336f1069844649e51a3d135115 (diff) | |
download | external_mesa3d-27359b807918503763bf22fc280158999776d0cb.zip external_mesa3d-27359b807918503763bf22fc280158999776d0cb.tar.gz external_mesa3d-27359b807918503763bf22fc280158999776d0cb.tar.bz2 |
i965/Gen7: Include bitfield in the sampler key for CMS layout
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.
V3: Use actual MSAA layout from the texture's mt, rather
then computing what would have been used based on the format.
This is simpler and less fragile - there's at least one case where
we might want to have a texture's MSAA layout change based on what
the app does (CMS SINT falling back to UMS if the app ever attempts
to render to it with a channel disabled.)
This also obsoletes V2's 1/10 -- compute_msaa_layout can now remain
an implementation detail of the miptree code.
Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_program.h | 5 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_wm.c | 13 |
2 files changed, 18 insertions, 0 deletions
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 b8ea6f2..a2ae73f 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,18 @@ 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. + */ + struct intel_texture_object *intel_tex = + intel_texture_object((struct gl_texture_object *)t); + + if (brw->gen >= 7 && + intel_tex->mt->msaa_layout == INTEL_MSAA_LAYOUT_CMS) { + key->compressed_multisample_layout_mask |= 1 << s; + } } } } |