u_surfaces: add util_surfaces_peek
authorLuca Barbieri <luca@luca-barbieri.com>
Tue, 3 Aug 2010 20:19:30 +0000 (22:19 +0200)
committerLuca Barbieri <luca@luca-barbieri.com>
Wed, 11 Aug 2010 09:20:16 +0000 (11:20 +0200)
Used to find out if a surface exists without creating one.

src/gallium/auxiliary/util/u_surfaces.h

index 79ecd31bd79b2d07730af33fa8b478c6eac7fe22..af978c705793453ba0dd0f229267de52385178ce 100644 (file)
@@ -12,6 +12,7 @@ struct util_surfaces
    {
       struct cso_hash *hash;
       struct pipe_surface **array;
+      void* pv;
    } u;
 };
 
@@ -34,6 +35,18 @@ util_surfaces_get(struct util_surfaces *us, unsigned surface_struct_size, struct
    return util_surfaces_do_get(us, surface_struct_size, pscreen, pt, face, level, zslice, flags);
 }
 
+static INLINE struct pipe_surface *
+util_surfaces_peek(struct util_surfaces *us, struct pipe_resource *pt, unsigned face, unsigned level, unsigned zslice)
+{
+   if(!us->u.pv)
+      return 0;
+
+   if(unlikely(pt->target == PIPE_TEXTURE_3D || pt->target == PIPE_TEXTURE_CUBE))
+      return cso_hash_iter_data(cso_hash_find(us->u.hash, ((zslice + face) << 8) | level));
+   else
+      return us->u.array[level];
+}
+
 void util_surfaces_do_detach(struct util_surfaces *us, struct pipe_surface *ps);
 
 static INLINE void