On Wed, Jul 19, 2017 at 02:01:44PM -0700, Jason Ekstrand wrote: > Now that we have this field, it's much easier to switch on it than to > walk an if ladder that checks different things.
This looks really nice: Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com> (didn't see much amiss in previous patches either, I'll read thru the series first though..). > --- > src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 94 > ++++++++++++++++----------- > 1 file changed, 56 insertions(+), 38 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c > b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c > index e4849ec..097b304 100644 > --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c > +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c > @@ -2522,38 +2522,42 @@ intel_miptree_prepare_access(struct brw_context *brw, > { > num_levels = miptree_level_range_length(mt, start_level, num_levels); > > - if (_mesa_is_format_color_format(mt->format)) { > + switch (mt->aux_usage) { > + case ISL_AUX_USAGE_NONE: > + /* Nothing to do */ > + break; > + > + case ISL_AUX_USAGE_MCS: > + assert(mt->mcs_buf); > + assert(start_level == 0 && num_levels == 1); > + const uint32_t level_layers = > + miptree_layer_range_length(mt, 0, start_layer, num_layers); > + for (uint32_t a = 0; a < level_layers; a++) { > + intel_miptree_prepare_mcs_access(brw, mt, start_layer + a, > + aux_supported, > + fast_clear_supported); > + } > + break; > + > + case ISL_AUX_USAGE_CCS_D: > + case ISL_AUX_USAGE_CCS_E: > if (!mt->mcs_buf) > return; > > - if (mt->num_samples > 1) { > - /* Nothing to do for MSAA */ > - assert(start_level == 0 && num_levels == 1); > + for (uint32_t l = 0; l < num_levels; l++) { > + const uint32_t level = start_level + l; > const uint32_t level_layers = > - miptree_layer_range_length(mt, 0, start_layer, num_layers); > + miptree_layer_range_length(mt, level, start_layer, num_layers); > for (uint32_t a = 0; a < level_layers; a++) { > - intel_miptree_prepare_mcs_access(brw, mt, start_layer + a, > - aux_supported, > + intel_miptree_prepare_ccs_access(brw, mt, level, > + start_layer + a, aux_supported, > fast_clear_supported); > } > - } else { > - for (uint32_t l = 0; l < num_levels; l++) { > - const uint32_t level = start_level + l; > - const uint32_t level_layers = > - miptree_layer_range_length(mt, level, start_layer, > num_layers); > - for (uint32_t a = 0; a < level_layers; a++) { > - intel_miptree_prepare_ccs_access(brw, mt, level, > - start_layer + a, > aux_supported, > - fast_clear_supported); > - } > - } > } > - } else if (mt->format == MESA_FORMAT_S_UINT8) { > - /* Nothing to do for stencil */ > - } else { > - if (!mt->hiz_buf) > - return; > + break; > > + case ISL_AUX_USAGE_HIZ: > + assert(mt->hiz_buf); > for (uint32_t l = 0; l < num_levels; l++) { > const uint32_t level = start_level + l; > if (!intel_miptree_level_has_hiz(mt, level)) > @@ -2567,6 +2571,10 @@ intel_miptree_prepare_access(struct brw_context *brw, > fast_clear_supported); > } > } > + break; > + > + default: > + unreachable("Invalid aux usage"); > } > } > > @@ -2578,25 +2586,31 @@ intel_miptree_finish_write(struct brw_context *brw, > { > num_layers = miptree_layer_range_length(mt, level, start_layer, > num_layers); > > - if (_mesa_is_format_color_format(mt->format)) { > + switch (mt->aux_usage) { > + case ISL_AUX_USAGE_NONE: > + /* Nothing to do */ > + break; > + > + case ISL_AUX_USAGE_MCS: > + assert(mt->mcs_buf); > + for (uint32_t a = 0; a < num_layers; a++) { > + intel_miptree_finish_mcs_write(brw, mt, start_layer + a, > + written_with_aux); > + } > + break; > + > + case ISL_AUX_USAGE_CCS_D: > + case ISL_AUX_USAGE_CCS_E: > if (!mt->mcs_buf) > return; > > - if (mt->num_samples > 1) { > - assert(level == 0); > - for (uint32_t a = 0; a < num_layers; a++) { > - intel_miptree_finish_mcs_write(brw, mt, start_layer + a, > - written_with_aux); > - } > - } else { > - for (uint32_t a = 0; a < num_layers; a++) { > - intel_miptree_finish_ccs_write(brw, mt, level, start_layer + a, > - written_with_aux); > - } > + for (uint32_t a = 0; a < num_layers; a++) { > + intel_miptree_finish_ccs_write(brw, mt, level, start_layer + a, > + written_with_aux); > } > - } else if (mt->format == MESA_FORMAT_S_UINT8) { > - /* Nothing to do for stencil */ > - } else { > + break; > + > + case ISL_AUX_USAGE_HIZ: > if (!intel_miptree_level_has_hiz(mt, level)) > return; > > @@ -2604,6 +2618,10 @@ intel_miptree_finish_write(struct brw_context *brw, > intel_miptree_finish_hiz_write(brw, mt, level, start_layer + a, > written_with_aux); > } > + break; > + > + default: > + unreachable("Invavlid aux usage"); > } > } > > -- > 2.5.0.400.gff86faf > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev