On Fri, May 26, 2017 at 04:30:09PM -0700, Jason Ekstrand wrote: > --- > src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 70 > ++++++++++++--------------- > 1 file changed, 30 insertions(+), 40 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c > b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c > index 2701201..3a4fd89 100644 > --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c > +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c > @@ -1978,23 +1978,30 @@ > intel_miptree_set_all_slices_need_depth_resolve(struct intel_mipmap_tree *mt, > } > > static bool > -intel_miptree_slice_resolve(struct brw_context *brw, > - struct intel_mipmap_tree *mt, > - uint32_t level, > - uint32_t layer, > - enum blorp_hiz_op need) > +intel_miptree_depth_hiz_resolve(struct brw_context *brw, > + struct intel_mipmap_tree *mt, > + uint32_t start_level, uint32_t num_levels, > + uint32_t start_layer, uint32_t num_layers, > + enum blorp_hiz_op need) > { > - intel_miptree_check_level_layer(mt, level, layer); > + bool did_resolve = false; > > - struct intel_resolve_map *item = > - intel_resolve_map_get(&mt->hiz_map, level, layer); > + foreach_list_typed_safe(struct intel_resolve_map, map, link, > &mt->hiz_map) { > + if (map->level < start_level || > + map->level >= (start_level + num_levels) || > + map->layer < start_layer || > + map->layer >= (start_layer + num_layers)) > + continue; > > - if (!item || item->need != need) > - return false; > + if (map->need != need) > + continue;
Indentation looks a little odd here. > > - intel_hiz_exec(brw, mt, level, layer, need); > - intel_resolve_map_remove(item); > - return true; > + intel_hiz_exec(brw, mt, map->level, map->layer, need); > + intel_resolve_map_remove(map); > + did_resolve = true; > + } > + > + return did_resolve; > } > > bool > @@ -2003,8 +2010,8 @@ intel_miptree_slice_resolve_hiz(struct brw_context *brw, > uint32_t level, > uint32_t layer) > { > - return intel_miptree_slice_resolve(brw, mt, level, layer, > - BLORP_HIZ_OP_HIZ_RESOLVE); > + return intel_miptree_depth_hiz_resolve(brw, mt, level, 1, layer, 1, > + BLORP_HIZ_OP_HIZ_RESOLVE); > } > > bool > @@ -2013,43 +2020,26 @@ intel_miptree_slice_resolve_depth(struct brw_context > *brw, > uint32_t level, > uint32_t layer) > { > - return intel_miptree_slice_resolve(brw, mt, level, layer, > - BLORP_HIZ_OP_DEPTH_RESOLVE); > -} > - > -static bool > -intel_miptree_all_slices_resolve(struct brw_context *brw, > - struct intel_mipmap_tree *mt, > - enum blorp_hiz_op need) > -{ > - bool did_resolve = false; > - > - foreach_list_typed_safe(struct intel_resolve_map, map, link, > &mt->hiz_map) { > - if (map->need != need) > - continue; > - > - intel_hiz_exec(brw, mt, map->level, map->layer, need); > - intel_resolve_map_remove(map); > - did_resolve = true; > - } > - > - return did_resolve; > + return intel_miptree_depth_hiz_resolve(brw, mt, level, 1, layer, 1, > + BLORP_HIZ_OP_DEPTH_RESOLVE); > } > > bool > intel_miptree_all_slices_resolve_hiz(struct brw_context *brw, > struct intel_mipmap_tree *mt) > { > - return intel_miptree_all_slices_resolve(brw, mt, > - BLORP_HIZ_OP_HIZ_RESOLVE); > + return intel_miptree_depth_hiz_resolve(brw, mt, > + 0, UINT32_MAX, 0, UINT32_MAX, > + BLORP_HIZ_OP_HIZ_RESOLVE); > } > > bool > intel_miptree_all_slices_resolve_depth(struct brw_context *brw, > struct intel_mipmap_tree *mt) > { > - return intel_miptree_all_slices_resolve(brw, mt, > - BLORP_HIZ_OP_DEPTH_RESOLVE); > + return intel_miptree_depth_hiz_resolve(brw, mt, > + 0, UINT32_MAX, 0, UINT32_MAX, > + BLORP_HIZ_OP_DEPTH_RESOLVE); > } > > enum intel_fast_clear_state > -- > 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