Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/mesa/drivers/dri/i965/brw_blorp.c | 4 +- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 3 +- src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 47 +++++++++++++++--------- src/mesa/drivers/dri/i965/intel_mipmap_tree.h | 9 ++++- 4 files changed, 41 insertions(+), 22 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c index 72ead04..e6bb120 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp.c +++ b/src/mesa/drivers/dri/i965/brw_blorp.c @@ -170,8 +170,10 @@ blorp_surf_for_miptree(struct brw_context *brw, *level = 0; } + surf->aux_usage = intel_miptree_get_aux_isl_usage(brw, mt); + struct isl_surf *aux_surf = &tmp_surfs[1]; - intel_miptree_get_aux_isl_surf(brw, mt, aux_surf, &surf->aux_usage); + intel_miptree_get_aux_isl_surf(brw, mt, surf->aux_usage, aux_surf); if (surf->aux_usage != ISL_AUX_USAGE_NONE) { if (surf->aux_usage == ISL_AUX_USAGE_HIZ) { 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 4566696..ef7347c 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -139,7 +139,8 @@ brw_emit_surface_state(struct brw_context *brw, enum isl_aux_usage aux_usage = ISL_AUX_USAGE_NONE; if ((mt->mcs_buf || intel_miptree_sample_with_hiz(brw, mt)) && !(flags & INTEL_AUX_BUFFER_DISABLED)) { - intel_miptree_get_aux_isl_surf(brw, mt, &aux_surf_s, &aux_usage); + aux_usage = intel_miptree_get_aux_isl_usage(brw, mt); + intel_miptree_get_aux_isl_surf(brw, mt, aux_usage, &aux_surf_s); aux_surf = &aux_surf_s; if (mt->mcs_buf) { diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c index cdfd49d..8643ef8 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c @@ -3421,6 +3421,32 @@ intel_miptree_get_isl_surf(struct brw_context *brw, surf->usage |= ISL_SURF_USAGE_CUBE_BIT; } +enum isl_aux_usage +intel_miptree_get_aux_isl_usage(const struct brw_context *brw, + const struct intel_mipmap_tree *mt) +{ + if (mt->hiz_buf) + return ISL_AUX_USAGE_HIZ; + + if (!mt->mcs_buf) + return ISL_AUX_USAGE_NONE; + + if (mt->num_samples > 1) { + assert(mt->msaa_layout == INTEL_MSAA_LAYOUT_CMS); + return ISL_AUX_USAGE_MCS; + } + + if (intel_miptree_is_lossless_compressed(brw, mt)) { + assert(brw->gen >= 9); + return ISL_AUX_USAGE_CCS_E; + } + + if ((mt->aux_disable & INTEL_AUX_DISABLE_CCS) == 0) + return ISL_AUX_USAGE_CCS_D; + + unreachable("Invalid MCS miptree"); +} + /* WARNING: THE SURFACE CREATED BY THIS FUNCTION IS NOT COMPLETE AND CANNOT BE * USED FOR ANY REAL CALCULATIONS. THE ONLY VALID USE OF SUCH A SURFACE IS TO * PASS IT INTO isl_surf_fill_state. @@ -3428,32 +3454,17 @@ intel_miptree_get_isl_surf(struct brw_context *brw, void intel_miptree_get_aux_isl_surf(struct brw_context *brw, const struct intel_mipmap_tree *mt, - struct isl_surf *surf, - enum isl_aux_usage *usage) + enum isl_aux_usage usage, + struct isl_surf *surf) { uint32_t aux_pitch, aux_qpitch; if (mt->mcs_buf) { aux_pitch = mt->mcs_buf->pitch; aux_qpitch = mt->mcs_buf->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->aux_disable & INTEL_AUX_DISABLE_CCS) == 0) { - *usage = ISL_AUX_USAGE_CCS_D; - } else { - unreachable("Invalid MCS miptree"); - } } else if (mt->hiz_buf) { aux_pitch = mt->hiz_buf->aux_base.pitch; aux_qpitch = mt->hiz_buf->aux_base.qpitch; - - *usage = ISL_AUX_USAGE_HIZ; } else { - *usage = ISL_AUX_USAGE_NONE; return; } @@ -3461,7 +3472,7 @@ intel_miptree_get_aux_isl_surf(struct brw_context *brw, intel_miptree_get_isl_surf(brw, mt, surf); /* Figure out the format and tiling of the auxiliary surface */ - switch (*usage) { + switch (usage) { case ISL_AUX_USAGE_NONE: unreachable("Invalid auxiliary usage"); diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h index 4c428cb..f3c8268 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h @@ -786,11 +786,16 @@ void intel_miptree_get_isl_surf(struct brw_context *brw, const struct intel_mipmap_tree *mt, struct isl_surf *surf); + +enum isl_aux_usage +intel_miptree_get_aux_isl_usage(const struct brw_context *brw, + const struct intel_mipmap_tree *mt); + void intel_miptree_get_aux_isl_surf(struct brw_context *brw, const struct intel_mipmap_tree *mt, - struct isl_surf *surf, - enum isl_aux_usage *usage); + enum isl_aux_usage usage, + struct isl_surf *surf); union isl_color_value intel_miptree_get_isl_clear_color(struct brw_context *brw, -- 2.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev