summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTopi Pohjolainen <[email protected]>2016-06-10 18:18:57 +0300
committerTopi Pohjolainen <[email protected]>2016-11-23 11:06:53 +0200
commita2d029dc5ffdaf249a7ebfe71b814e8c2495d5f1 (patch)
tree358c23e91e7b26acbd72ca9e1e6381b1606164cc
parent7c75fd9a5971d59e215ab2f04b4c06c3399d0211 (diff)
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 <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/intel_resolve_map.c13
-rw-r--r--src/mesa/drivers/dri/i965/intel_resolve_map.h21
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 26eac8bc65e..56fd9547788 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 e998e97e6da..29cad8f4b6d 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);