summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2012-06-15 10:49:58 -0700
committerPaul Berry <[email protected]>2012-06-20 11:28:09 -0700
commit3b0279a69392a8fcc81ad462ca5623ec2a73f890 (patch)
treed32024d19c89563e5a34711f5f2b33c1702a698e /src/mesa/drivers
parent3becf984248b309639737b2f655cec14c47e2238 (diff)
i965/msaa: Disable unsupported formats.
Due to hardware limitations, MSAA is unsupported on Gen6 for formats containing >64 bits of data per pixel. From the Sandy Bridge PRM, vol4 part1, p72 ("Surface Format"): If Number of Multisamples is set to a value other than MULTISAMPLECOUNT_1, this field cannot be set to the following formats: - any format with greater than 64 bits per element - any compressed texture format (BC*) - any YCRCB* format Gen7 has a similar, but less stringent limitation: formats with >64 bits of data per pixel only support 4x MSAA. This patch causes the unsupported formats to report GL_FRAMEBUFFER_UNSUPPORTED. Fixes piglit "multisample-formats" tests on Gen6. Acked-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/brw_wm_surface_state.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index 471833778d2..d09fe6dcb41 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -576,6 +576,19 @@ brw_render_target_supported(struct intel_context *intel,
rb->_BaseFormat != GL_RED) && _mesa_is_format_integer_color(format))
return false;
+ /* Under some conditions, MSAA is not supported for formats whose width is
+ * more than 64 bits.
+ */
+ if (rb->NumSamples > 0 && _mesa_get_format_bytes(format) > 8) {
+ /* Gen6: MSAA on >64 bit formats is unsupported. */
+ if (intel->gen <= 6)
+ return false;
+
+ /* Gen7: 8x MSAA on >64 bit formats is unsupported. */
+ if (rb->NumSamples >= 8)
+ return false;
+ }
+
return brw->format_supported_as_render_target[format];
}