From: Luca Barbieri Date: Tue, 3 Aug 2010 20:19:30 +0000 (+0200) Subject: u_surfaces: add util_surfaces_peek X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5668526c915a1e31036386d117c536592dae6859;p=mesa.git u_surfaces: add util_surfaces_peek Used to find out if a surface exists without creating one. --- 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