diff options
author | Luca Barbieri <[email protected]> | 2010-08-03 22:19:30 +0200 |
---|---|---|
committer | Luca Barbieri <[email protected]> | 2010-08-11 11:20:16 +0200 |
commit | 5668526c915a1e31036386d117c536592dae6859 (patch) | |
tree | 0b0fa671ab7498be9d9b8119f4be5b08aa59620b /src/gallium/auxiliary/util | |
parent | e45b2ce2c3a52e9f8e6fb7e933ab2f95eec15be1 (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')
-rw-r--r-- | src/gallium/auxiliary/util/u_surfaces.h | 13 |
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 79ecd31bd79..af978c70579 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 |