Mesa (gallium-0.1): softpipe: Backport is_texture/ buffer_reference implementation.
Jose Fonseca
jrfonseca at kemper.freedesktop.org
Thu Oct 15 12:06:32 UTC 2009
Module: Mesa
Branch: gallium-0.1
Commit: 056aff7a7cf11f17e879b6ae93ccd771e1c59e9f
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=056aff7a7cf11f17e879b6ae93ccd771e1c59e9f
Author: José Fonseca <jfonseca at vmware.com>
Date: Mon Oct 12 19:57:24 2009 +0100
softpipe: Backport is_texture/buffer_reference implementation.
---
src/gallium/drivers/softpipe/sp_context.c | 42 +++++++++++++++++++++++++++++
1 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c
index cd1e666..fdcbbaf 100644
--- a/src/gallium/drivers/softpipe/sp_context.c
+++ b/src/gallium/drivers/softpipe/sp_context.c
@@ -123,6 +123,45 @@ static void softpipe_destroy( struct pipe_context *pipe )
}
+/**
+ * if (the texture is being used as a framebuffer surface)
+ * return PIPE_REFERENCED_FOR_WRITE
+ * else if (the texture is a bound texture source)
+ * return PIPE_REFERENCED_FOR_READ XXX not done yet
+ * else
+ * return PIPE_UNREFERENCED
+ */
+static unsigned int
+softpipe_is_texture_referenced( struct pipe_context *pipe,
+ struct pipe_texture *texture,
+ unsigned face, unsigned level)
+{
+ struct softpipe_context *softpipe = softpipe_context( pipe );
+ unsigned i;
+
+ for (i = 0; i < softpipe->framebuffer.num_cbufs; i++) {
+ if (softpipe->framebuffer.cbufs[i] &&
+ softpipe->framebuffer.cbufs[i]->texture == texture) {
+ return PIPE_REFERENCED_FOR_WRITE;
+ }
+ }
+ if (softpipe->framebuffer.zsbuf &&
+ softpipe->framebuffer.zsbuf->texture == texture) {
+ return PIPE_REFERENCED_FOR_WRITE;
+ }
+
+ return PIPE_UNREFERENCED;
+}
+
+
+static unsigned int
+softpipe_is_buffer_referenced( struct pipe_context *pipe,
+ struct pipe_buffer *buf)
+{
+ return PIPE_UNREFERENCED;
+}
+
+
struct pipe_context *
softpipe_create( struct pipe_screen *screen,
struct pipe_winsys *pipe_winsys,
@@ -191,6 +230,9 @@ softpipe_create( struct pipe_screen *screen,
softpipe->pipe.clear = softpipe_clear;
softpipe->pipe.flush = softpipe_flush;
+ softpipe->pipe.is_texture_referenced = softpipe_is_texture_referenced;
+ softpipe->pipe.is_buffer_referenced = softpipe_is_buffer_referenced;
+
softpipe_init_query_funcs( softpipe );
softpipe_init_texture_funcs( softpipe );
More information about the mesa-commit
mailing list