diff options
author | Paul Berry <[email protected]> | 2013-05-01 07:16:52 -0700 |
---|---|---|
committer | Paul Berry <[email protected]> | 2013-06-12 10:45:42 -0700 |
commit | 460b7bc7a103d7a7518b4187f0c1dfc452f75137 (patch) | |
tree | 0fbb85260345d9474ff846ba04a010f705188b17 /src/mesa/drivers/dri | |
parent | 7e5cb4bc4c8dfc96019b815e2c9a62af12e1f958 (diff) |
i965/gen7+: Set up MCS in SURFACE_STATE whenever MCS is present.
On Gen7+, MCS buffers are used both for compressed multisampled color
buffers and for "fast clear" of single-sampled color buffers.
Previous to this patch series, we didn't support fast clear, so we
only used MCS with multisampled bolor buffers.
As a first step to implementing fast clears, this patch modifies the
code that sets up SURFACE_STATE so that it configures the MCS buffer
whenever it is present, regardless of whether we are multisampling or
not.
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r-- | src/mesa/drivers/dri/i965/gen7_blorp.cpp | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_mipmap_tree.h | 8 |
3 files changed, 7 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/gen7_blorp.cpp b/src/mesa/drivers/dri/i965/gen7_blorp.cpp index 68c7ca11626..208c66a28f5 100644 --- a/src/mesa/drivers/dri/i965/gen7_blorp.cpp +++ b/src/mesa/drivers/dri/i965/gen7_blorp.cpp @@ -194,7 +194,7 @@ gen7_blorp_emit_surface_state(struct brw_context *brw, surf[3] = pitch_bytes - 1; surf[4] = gen7_surface_msaa_bits(surface->num_samples, surface->msaa_layout); - if (surface->msaa_layout == INTEL_MSAA_LAYOUT_CMS) { + if (surface->mt->mcs_mt) { gen7_set_surface_mcs_info(brw, surf, wm_surf_offset, surface->mt->mcs_mt, is_render_target); } diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c index 6a7c8deff55..3164f994dd4 100644 --- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c @@ -609,7 +609,7 @@ gen7_update_renderbuffer_surface(struct brw_context *brw, min_array_element << GEN7_SURFACE_MIN_ARRAY_ELEMENT_SHIFT | (depth - 1) << GEN7_SURFACE_RENDER_TARGET_VIEW_EXTENT_SHIFT; - if (irb->mt->msaa_layout == INTEL_MSAA_LAYOUT_CMS) { + if (irb->mt->mcs_mt) { gen7_set_surface_mcs_info(brw, surf, brw->wm.surf_offset[unit], irb->mt->mcs_mt, true /* is RT */); } diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h index d66d0b5a424..e2a7fe84f72 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h @@ -443,11 +443,13 @@ struct intel_mipmap_tree #ifndef I915 /** - * \brief MCS miptree for multisampled textures. + * \brief MCS miptree. * * This miptree contains the "multisample control surface", which stores - * the necessary information to implement compressed MSAA on Gen7+ - * (INTEL_MSAA_FORMAT_CMS). + * the necessary information to implement compressed MSAA + * (INTEL_MSAA_FORMAT_CMS) and "fast color clear" behaviour on Gen7+. + * + * NULL if no MCS miptree is in use for this surface. */ struct intel_mipmap_tree *mcs_mt; |