summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2009-12-10 14:54:57 -0700
committerKeith Whitwell <keithw@vmware.com>2010-01-07 15:57:20 +0000
commit2ea23a88cffe78cd5ed84e699a00f728010092d2 (patch)
treee7f7374749096a957f615521145aee7465ccb361
parent27fe7a7303d93bc38df1f3c2861d07af3e82546d (diff)
gallium/util: added framebuffer compare, copy util funcs
-rw-r--r--src/gallium/auxiliary/util/u_surface.c49
-rw-r--r--src/gallium/auxiliary/util/u_surface.h9
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 */