summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/util/u_surfaces.h
diff options
context:
space:
mode:
authorLuca Barbieri <luca@luca-barbieri.com>2010-08-03 22:19:30 +0200
committerLuca Barbieri <luca@luca-barbieri.com>2010-08-11 11:20:16 +0200
commit5668526c915a1e31036386d117c536592dae6859 (patch)
tree0b0fa671ab7498be9d9b8119f4be5b08aa59620b /src/gallium/auxiliary/util/u_surfaces.h
parente45b2ce2c3a52e9f8e6fb7e933ab2f95eec15be1 (diff)
u_surfaces: add util_surfaces_peek
Used to find out if a surface exists without creating one.
Diffstat (limited to 'src/gallium/auxiliary/util/u_surfaces.h')
-rw-r--r--src/gallium/auxiliary/util/u_surfaces.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_surfaces.h b/src/gallium/auxiliary/util/u_surfaces.h
index 79ecd31bd7..af978c7057 100644
--- a/src/gallium/auxiliary/util/u_surfaces.h
+++ b/src/gallium/auxiliary/util/u_surfaces.h
@@ -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