diff options
author | Brian Paul <brianp@vmware.com> | 2009-12-10 14:54:57 -0700 |
---|---|---|
committer | Keith Whitwell <keithw@vmware.com> | 2010-01-07 15:57:20 +0000 |
commit | 2ea23a88cffe78cd5ed84e699a00f728010092d2 (patch) | |
tree | e7f7374749096a957f615521145aee7465ccb361 | |
parent | 27fe7a7303d93bc38df1f3c2861d07af3e82546d (diff) |
gallium/util: added framebuffer compare, copy util funcs
-rw-r--r-- | src/gallium/auxiliary/util/u_surface.c | 49 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_surface.h | 9 |
2 files changed, 58 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/util/u_surface.c b/src/gallium/auxiliary/util/u_surface.c index 35c4978204..cb88c4d701 100644 --- a/src/gallium/auxiliary/util/u_surface.c +++ b/src/gallium/auxiliary/util/u_surface.c @@ -37,6 +37,7 @@ #include "pipe/p_defines.h" #include "util/u_format.h" +#include "util/u_memory.h" #include "util/u_surface.h" @@ -111,3 +112,51 @@ util_destroy_rgba_surface(struct pipe_texture *texture, pipe_texture_reference(&texture, NULL); } + + +/** + * Compare pipe_framebuffer_state objects. + * \return TRUE if same, FALSE if different + */ +boolean +util_framebuffer_state_equal(const struct pipe_framebuffer_state *dst, + const struct pipe_framebuffer_state *src) +{ + boolean changed = FALSE; + unsigned i; + + for (i = 0; i < Elements(src->cbufs); i++) { + if (dst->cbufs[i] != src->cbufs[i]) { + changed = TRUE; + } + } + + if (dst->nr_cbufs != src->nr_cbufs) { + changed = TRUE; + } + + if (dst->zsbuf != src->zsbuf) { + changed = TRUE; + } + + return changed; +} + + +/** + * Copy framebuffer state from src to dst, updating refcounts. + */ +void +util_copy_framebuffer_state(struct pipe_framebuffer_state *dst, + const struct pipe_framebuffer_state *src) +{ + unsigned i; + + for (i = 0; i < Elements(src->cbufs); i++) { + pipe_surface_reference(&dst->cbufs[i], src->cbufs[i]); + } + + dst->nr_cbufs = src->nr_cbufs; + + pipe_surface_reference(&dst->zsbuf, src->zsbuf); +} diff --git a/src/gallium/auxiliary/util/u_surface.h b/src/gallium/auxiliary/util/u_surface.h index ce84ed7ad0..a9da9aadcb 100644 --- a/src/gallium/auxiliary/util/u_surface.h +++ b/src/gallium/auxiliary/util/u_surface.h @@ -66,4 +66,13 @@ util_destroy_rgba_surface(struct pipe_texture *texture, struct pipe_surface *surface); +extern boolean +util_framebuffer_state_equal(const struct pipe_framebuffer_state *dst, + const struct pipe_framebuffer_state *src); + +extern void +util_copy_framebuffer_state(struct pipe_framebuffer_state *dst, + const struct pipe_framebuffer_state *src); + + #endif /* U_SURFACE_H */ |