i965: Use MESA_FORMAT_B8G8R8X8_SRGB for RGB visuals
[mesa.git] / src / mesa / drivers / dri / i965 / intel_resolve_map.c
index 04b5c9424323953fec307e5204b41bfc339c5cf5..3df4b882b05427d4eb1544dbed79cfe06cad4fb2 100644 (file)
@@ -23,7 +23,6 @@
 
 #include "intel_resolve_map.h"
 
-#include <assert.h>
 #include <stdlib.h>
 
 /**
  * changed to the given value of \c need.
  */
 void
-intel_resolve_map_set(struct intel_resolve_map *head,
+intel_resolve_map_set(struct exec_list *resolve_map,
                      uint32_t level,
                      uint32_t layer,
                      enum gen6_hiz_op need)
 {
-   struct intel_resolve_map **tail = &head->next;
-   struct intel_resolve_map *prev = head;
-
-   while (*tail) {
-      if ((*tail)->level == level && (*tail)->layer == layer) {
-         (*tail)->need = need;
+   foreach_list_typed(struct intel_resolve_map, map, link, resolve_map) {
+      if (map->level == level && map->layer == layer) {
+         map->need = need;
         return;
       }
-      prev = *tail;
-      tail = &(*tail)->next;
    }
 
-   *tail = malloc(sizeof(**tail));
-   (*tail)->prev = prev;
-   (*tail)->next = NULL;
-   (*tail)->level = level;
-   (*tail)->layer = layer;
-   (*tail)->need = need;
+   struct intel_resolve_map *m = malloc(sizeof(struct intel_resolve_map));
+   exec_node_init(&m->link);
+   m->level = level;
+   m->layer = layer;
+   m->need = need;
+
+   exec_list_push_tail(resolve_map, &m->link);
 }
 
 /**
  * \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 intel_resolve_map *head,
+struct intel_resolve_map *
+intel_resolve_map_get(struct exec_list *resolve_map,
                      uint32_t level,
                      uint32_t layer)
 {
-   struct intel_resolve_map *item = head->next;
-
-   while (item) {
-      if (item->level == level && item->layer == layer)
-        break;
-      else
-        item = item->next;
+   foreach_list_typed(struct intel_resolve_map, map, link, resolve_map) {
+      if (map->level == level && map->layer == layer)
+         return map;
    }
 
-   return item;
+   return NULL;
 }
 
 /**
@@ -85,10 +76,7 @@ intel_resolve_map_get(struct intel_resolve_map *head,
 void
 intel_resolve_map_remove(struct intel_resolve_map *elem)
 {
-   if (elem->prev)
-      elem->prev->next = elem->next;
-   if (elem->next)
-      elem->next->prev = elem->prev;
+   exec_node_remove(&elem->link);
    free(elem);
 }
 
@@ -96,16 +84,11 @@ intel_resolve_map_remove(struct intel_resolve_map *elem)
  * \brief Remove and free all elements of the map.
  */
 void
-intel_resolve_map_clear(struct intel_resolve_map *head)
+intel_resolve_map_clear(struct exec_list *resolve_map)
 {
-   struct intel_resolve_map *next = head->next;
-   struct intel_resolve_map *trash;
-
-   while (next) {
-      trash = next;
-      next = next->next;
-      free(trash);
+   foreach_in_list_safe(struct exec_node, node, resolve_map) {
+      free(node);
    }
 
-   head->next = NULL;
+   exec_list_make_empty(resolve_map);
 }