Mesa (i965g-restart): i965g: fix up batchbuffer confusion

Keith Whitwell keithw at kemper.freedesktop.org
Wed Nov 4 21:38:37 UTC 2009


Module: Mesa
Branch: i965g-restart
Commit: b8bb48f4528227e36400cd1599a82bb73415ef60
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8bb48f4528227e36400cd1599a82bb73415ef60

Author: Keith Whitwell <keithw at vmware.com>
Date:   Wed Nov  4 21:05:34 2009 +0000

i965g: fix up batchbuffer confusion

---

 src/gallium/drivers/i965/brw_batchbuffer.c |   35 +++++++++++++++++----------
 src/gallium/drivers/i965/brw_batchbuffer.h |    3 +-
 src/gallium/drivers/i965/brw_pipe_flush.c  |    3 +-
 3 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/i965/brw_batchbuffer.c b/src/gallium/drivers/i965/brw_batchbuffer.c
index fd6b34c..bfb7175 100644
--- a/src/gallium/drivers/i965/brw_batchbuffer.c
+++ b/src/gallium/drivers/i965/brw_batchbuffer.c
@@ -36,25 +36,26 @@
 #include "brw_debug.h"
 #include "brw_structs.h"
 
-#define USE_LOCAL_BUFFER 1
+#define USE_MALLOC_BUFFER 1
 #define ALWAYS_EMIT_MI_FLUSH 1
 
 void
 brw_batchbuffer_reset(struct brw_batchbuffer *batch)
 {
-   if (batch->buf != NULL) {
+   if (batch->buf) {
       batch->sws->bo_unreference(batch->buf);
       batch->buf = NULL;
    }
 
-   if (USE_LOCAL_BUFFER && !batch->buffer)
-      batch->buffer = MALLOC(BRW_BATCH_SIZE);
+   if (batch->use_malloc_buffer && !batch->malloc_buffer)
+      batch->malloc_buffer = MALLOC(BRW_BATCH_SIZE);
 
    batch->buf = batch->sws->bo_alloc(batch->sws,
 				     BRW_BUFFER_TYPE_BATCH,
 				     BRW_BATCH_SIZE, 4096);
-   if (batch->buffer)
-      batch->map = batch->buffer;
+
+   if (batch->malloc_buffer)
+      batch->map = batch->malloc_buffer;
    else 
       batch->map = batch->sws->bo_map(batch->buf, GL_TRUE);
 
@@ -67,6 +68,7 @@ brw_batchbuffer_alloc(struct brw_winsys_screen *sws)
 {
    struct brw_batchbuffer *batch = CALLOC_STRUCT(brw_batchbuffer);
 
+   batch->use_malloc_buffer = USE_MALLOC_BUFFER;
    batch->sws = sws;
    brw_batchbuffer_reset(batch);
 
@@ -76,16 +78,16 @@ brw_batchbuffer_alloc(struct brw_winsys_screen *sws)
 void
 brw_batchbuffer_free(struct brw_batchbuffer *batch)
 {
-   if (batch->map) {
+   if (batch->malloc_buffer) {
+      FREE(batch->malloc_buffer);
+      batch->map = NULL;
+   }
+   else if (batch->map) {
       batch->sws->bo_unmap(batch->buf);
       batch->map = NULL;
    }
 
-
    batch->sws->bo_unreference(batch->buf);
-   batch->buf = NULL;
-
-   FREE(batch->buffer);
    FREE(batch);
 }
 
@@ -127,8 +129,15 @@ _brw_batchbuffer_flush(struct brw_batchbuffer *batch,
    batch->ptr += 4;
    used = batch->ptr - batch->map;
 
-   batch->sws->bo_unmap(batch->buf);
-   batch->map = NULL;
+   if (batch->use_malloc_buffer) {
+      batch->sws->bo_subdata(batch->buf, 0, used, batch->map );
+      batch->map = NULL;
+   }
+   else {
+      batch->sws->bo_unmap(batch->buf);
+      batch->map = NULL;
+   }
+
    batch->ptr = NULL;
       
    batch->sws->bo_exec(batch->buf, used );
diff --git a/src/gallium/drivers/i965/brw_batchbuffer.h b/src/gallium/drivers/i965/brw_batchbuffer.h
index 61374ff..1828324 100644
--- a/src/gallium/drivers/i965/brw_batchbuffer.h
+++ b/src/gallium/drivers/i965/brw_batchbuffer.h
@@ -35,7 +35,8 @@ struct brw_batchbuffer {
     * XXX: is this still necessary?
     * XXX: if so, can this be hidden inside the GEM-specific winsys code?
     */
-   uint8_t *buffer;
+   boolean use_malloc_buffer;
+   uint8_t *malloc_buffer;
 
    /**
     * Values exported to speed up the writing the batchbuffer,
diff --git a/src/gallium/drivers/i965/brw_pipe_flush.c b/src/gallium/drivers/i965/brw_pipe_flush.c
index 6ae3c57..9dff2be 100644
--- a/src/gallium/drivers/i965/brw_pipe_flush.c
+++ b/src/gallium/drivers/i965/brw_pipe_flush.c
@@ -42,7 +42,8 @@ brw_flush( struct pipe_context *pipe,
            struct pipe_fence_handle **fence )
 {
    brw_context_flush( brw_context( pipe ) );
-   *fence = NULL;
+   if (fence)
+      *fence = NULL;
 }
 
 static unsigned brw_is_buffer_referenced(struct pipe_context *pipe,




More information about the mesa-commit mailing list