summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Forbes <[email protected]>2013-11-30 10:01:12 +1300
committerChris Forbes <[email protected]>2013-12-07 16:09:12 +1300
commit27359b807918503763bf22fc280158999776d0cb (patch)
treeab54f235806b2b261307fa91bd6715ae90da0ed6
parentb1604841c2407c336f1069844649e51a3d135115 (diff)
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 <[email protected]> Reviewed-by: Paul Berry <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_program.h5
-rw-r--r--src/mesa/drivers/dri/i965/brw_wm.c13
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 07be4a04569..51182eabd16 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 b8ea6f2df8d..a2ae73f1e14 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;
+ }
}
}
}