[Mesa-dev] [PATCH v2 06/27] i965/miptree: Add real support for HiZ
Jason Ekstrand
jason at jlekstrand.net
Tue Jul 26 22:11:10 UTC 2016
The previous HiZ support was bogus because all of get_aux_isl_surf looked
at mt->mcs_mt directly. For HiZ buffers, you need to look at either
mt->hiz_buf or mt->hiz_buf->mt.
---
src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 41 ++++++++++++++++++---------
1 file changed, 28 insertions(+), 13 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
index f762106..40a561f 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -3189,17 +3189,32 @@ intel_miptree_get_aux_isl_surf(struct brw_context *brw,
struct isl_surf *surf,
enum isl_aux_usage *usage)
{
- /* Figure out the layout */
- if (_mesa_get_format_base_format(mt->format) == GL_DEPTH_COMPONENT) {
+ uint32_t aux_pitch, aux_qpitch;
+ if (mt->mcs_mt) {
+ aux_pitch = mt->mcs_mt->pitch;
+ aux_qpitch = mt->mcs_mt->qpitch;
+
+ if (mt->num_samples > 1) {
+ assert(mt->msaa_layout == INTEL_MSAA_LAYOUT_CMS);
+ *usage = ISL_AUX_USAGE_MCS;
+ } else if (intel_miptree_is_lossless_compressed(brw, mt)) {
+ assert(brw->gen >= 9);
+ *usage = ISL_AUX_USAGE_CCS_E;
+ } else if (mt->fast_clear_state != INTEL_FAST_CLEAR_STATE_NO_MCS) {
+ *usage = ISL_AUX_USAGE_CCS_D;
+ } else {
+ unreachable("Invalid MCS miptree");
+ }
+ } else if (mt->hiz_buf) {
+ if (mt->hiz_buf->mt) {
+ aux_pitch = mt->hiz_buf->mt->pitch;
+ aux_qpitch = mt->hiz_buf->mt->qpitch;
+ } else {
+ aux_pitch = mt->hiz_buf->pitch;
+ aux_qpitch = mt->hiz_buf->qpitch;
+ }
+
*usage = ISL_AUX_USAGE_HIZ;
- } else if (mt->num_samples > 1) {
- assert(mt->msaa_layout == INTEL_MSAA_LAYOUT_CMS);
- *usage = ISL_AUX_USAGE_MCS;
- } else if (intel_miptree_is_lossless_compressed(brw, mt)) {
- assert(brw->gen >= 9);
- *usage = ISL_AUX_USAGE_CCS_E;
- } else if (mt->fast_clear_state != INTEL_FAST_CLEAR_STATE_NO_MCS) {
- *usage = ISL_AUX_USAGE_CCS_D;
} else {
*usage = ISL_AUX_USAGE_NONE;
return;
@@ -3211,7 +3226,7 @@ intel_miptree_get_aux_isl_surf(struct brw_context *brw,
/* Figure out the format and tiling of the auxiliary surface */
switch (*usage) {
case ISL_AUX_USAGE_NONE:
- unreachable("Invalid MCS miptree");
+ unreachable("Invalid auxiliary usage");
case ISL_AUX_USAGE_HIZ:
isl_surf_get_hiz_surf(&brw->isl_dev, surf, surf);
@@ -3250,7 +3265,7 @@ intel_miptree_get_aux_isl_surf(struct brw_context *brw,
}
/* We want the pitch of the actual aux buffer. */
- surf->row_pitch = mt->mcs_mt->pitch;
+ surf->row_pitch = aux_pitch;
/* Auxiliary surfaces in ISL have compressed formats and array_pitch_el_rows
* is in elements. This doesn't match intel_mipmap_tree::qpitch which is
@@ -3258,7 +3273,7 @@ intel_miptree_get_aux_isl_surf(struct brw_context *brw,
* compression block height.
*/
surf->array_pitch_el_rows =
- mt->mcs_mt->qpitch / isl_format_get_layout(surf->format)->bh;
+ aux_qpitch / isl_format_get_layout(surf->format)->bh;
}
union isl_color_value
--
2.5.0.400.gff86faf
More information about the mesa-dev
mailing list