diff options
| author | Keith Whitwell <keithw@vmware.com> | 2009-11-04 21:05:34 +0000 | 
|---|---|---|
| committer | Keith Whitwell <keithw@vmware.com> | 2009-11-04 21:05:34 +0000 | 
| commit | b8bb48f4528227e36400cd1599a82bb73415ef60 (patch) | |
| tree | e5bf65589701c16dbfbc0b0edea6f67ea1cdb31f | |
| parent | c5ed7b6e76a71d34e4a42ebfca092bd99cb39438 (diff) | |
i965g: fix up batchbuffer confusion
| -rw-r--r-- | src/gallium/drivers/i965/brw_batchbuffer.c | 35 | ||||
| -rw-r--r-- | src/gallium/drivers/i965/brw_batchbuffer.h | 3 | ||||
| -rw-r--r-- | 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 fd6b34cb8a..bfb7175f75 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 61374ffb00..1828324cc0 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 6ae3c57765..9dff2beeb1 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, | 
