Mesa (master): i965: Add multi-slice getter for resolve maps

Topi Pohjolainen tpohjola at kemper.freedesktop.org
Wed Nov 23 09:14:06 UTC 2016


Module: Mesa
Branch: master
Commit: a2d029dc5ffdaf249a7ebfe71b814e8c2495d5f1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a2d029dc5ffdaf249a7ebfe71b814e8c2495d5f1

Author: Topi Pohjolainen <topi.pohjolainen at intel.com>
Date:   Fri Jun 10 18:18:57 2016 +0300

i965: Add multi-slice getter for resolve maps

This is useful when checking if any slice is in unresolved state.

Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/mesa/drivers/dri/i965/intel_resolve_map.c | 13 ++++++++-----
 src/mesa/drivers/dri/i965/intel_resolve_map.h | 21 +++++++++++++++++++--
 2 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_resolve_map.c b/src/mesa/drivers/dri/i965/intel_resolve_map.c
index 26eac8b..56fd954 100644
--- a/src/mesa/drivers/dri/i965/intel_resolve_map.c
+++ b/src/mesa/drivers/dri/i965/intel_resolve_map.c
@@ -57,13 +57,16 @@ intel_resolve_map_set(struct exec_list *resolve_map,
  * \brief Get an element from the map.
  * \return null if element is not contained in map.
  */
-struct intel_resolve_map *
-intel_resolve_map_get(struct exec_list *resolve_map,
-		      uint32_t level,
-		      uint32_t layer)
+const struct intel_resolve_map *
+intel_resolve_map_find_any(const struct exec_list *resolve_map,
+                           uint32_t start_level, uint32_t num_levels,
+                           uint32_t start_layer, uint32_t num_layers)
 {
    foreach_list_typed(struct intel_resolve_map, map, link, resolve_map) {
-      if (map->level == level && map->layer == layer)
+      if (map->level >= start_level &&
+          map->level < (start_level + num_levels) &&
+          map->layer >= start_layer &&
+          map->layer < (start_layer + num_layers))
          return map;
    }
 
diff --git a/src/mesa/drivers/dri/i965/intel_resolve_map.h b/src/mesa/drivers/dri/i965/intel_resolve_map.h
index e998e97..29cad8f 100644
--- a/src/mesa/drivers/dri/i965/intel_resolve_map.h
+++ b/src/mesa/drivers/dri/i965/intel_resolve_map.h
@@ -71,10 +71,27 @@ intel_resolve_map_set(struct exec_list *resolve_map,
 		      uint32_t layer,
 		      enum blorp_hiz_op need);
 
-struct intel_resolve_map *
+const struct intel_resolve_map *
+intel_resolve_map_find_any(const struct exec_list *resolve_map,
+                           uint32_t start_level, uint32_t num_levels,
+                           uint32_t start_layer, uint32_t num_layers);
+
+static inline const struct intel_resolve_map *
+intel_resolve_map_const_get(const struct exec_list *resolve_map,
+                            uint32_t level,
+                            uint32_t layer)
+{
+   return intel_resolve_map_find_any(resolve_map, level, 1, layer, 1);
+}
+
+static inline struct intel_resolve_map *
 intel_resolve_map_get(struct exec_list *resolve_map,
 		      uint32_t level,
-		      uint32_t layer);
+		      uint32_t layer)
+{
+   return (struct intel_resolve_map *)intel_resolve_map_find_any(
+                                         resolve_map, level, 1, layer, 1);
+}
 
 void
 intel_resolve_map_remove(struct intel_resolve_map *resolve_map);




More information about the mesa-commit mailing list