summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/i915simple
diff options
context:
space:
mode:
authorJakob Bornecrantz <[email protected]>2008-06-02 17:22:45 +0200
committerJakob Bornecrantz <[email protected]>2008-06-02 17:24:30 +0200
commit7cc23a9eaebc788ae34f6e06c6227524d08a7693 (patch)
tree2237f882c05d6780a6af5b9c6476626841bdb4ef /src/gallium/drivers/i915simple
parent4ee14279f3a466093869f1f40819e6c6d5af378d (diff)
i915: Implement and use the reworked batchbuffer code
Diffstat (limited to 'src/gallium/drivers/i915simple')
-rw-r--r--src/gallium/drivers/i915simple/i915_batch.h20
-rw-r--r--src/gallium/drivers/i915simple/i915_context.c2
-rw-r--r--src/gallium/drivers/i915simple/i915_debug.c3
-rw-r--r--src/gallium/drivers/i915simple/i915_winsys.h22
4 files changed, 13 insertions, 34 deletions
diff --git a/src/gallium/drivers/i915simple/i915_batch.h b/src/gallium/drivers/i915simple/i915_batch.h
index 6c62e84bc38..9379d1fb5de 100644
--- a/src/gallium/drivers/i915simple/i915_batch.h
+++ b/src/gallium/drivers/i915simple/i915_batch.h
@@ -40,6 +40,7 @@ struct i915_batchbuffer
unsigned char *ptr;
size_t size;
+ size_t actual_size;
size_t relocs;
size_t max_relocs;
@@ -50,39 +51,25 @@ i915_batchbuffer_check( struct i915_batchbuffer *batch,
size_t dwords,
size_t relocs )
{
-#if 0 /* To be used */
/** TODO JB: Check relocs */
return dwords * 4 <= batch->size - (batch->ptr - batch->map);
-#else
- if (batch->winsys->batch_start( batch->winsys, dwords, relocs ))
- return 1;
- return 0;
-#endif
}
static INLINE size_t
i915_batchbuffer_space( struct i915_batchbuffer *batch )
{
-#if 0 /* To be used */
return batch->size - (batch->ptr - batch->map);
-#else
- return 0;
-#endif
}
static INLINE void
i915_batchbuffer_dword( struct i915_batchbuffer *batch,
unsigned dword )
{
-#if 0 /* To be used */
if (i915_batchbuffer_space(batch) < 4)
return;
*(unsigned *)batch->ptr = dword;
batch->ptr += 4;
-#else
- batch->winsys->batch_dword( batch->winsys, dword );
-#endif
}
static INLINE void
@@ -90,14 +77,11 @@ i915_batchbuffer_write( struct i915_batchbuffer *batch,
void *data,
size_t size )
{
-#if 0 /* To be used */
if (i915_batchbuffer_space(batch) < size)
return;
memcpy(data, batch->ptr, size);
batch->ptr += size;
-#else
-#endif
}
static INLINE void
@@ -135,4 +119,4 @@ i915_batchbuffer_flush( struct i915_batchbuffer *batch,
i915->hardware_dirty = ~0; \
} while (0)
-#endif
+#endif
diff --git a/src/gallium/drivers/i915simple/i915_context.c b/src/gallium/drivers/i915simple/i915_context.c
index 378e4a5d4db..243b4a68522 100644
--- a/src/gallium/drivers/i915simple/i915_context.c
+++ b/src/gallium/drivers/i915simple/i915_context.c
@@ -181,7 +181,7 @@ struct pipe_context *i915_create_context( struct pipe_screen *screen,
/* Batch stream debugging is a bit hacked up at the moment:
*/
- i915->batch = CALLOC_STRUCT(i915_batchbuffer);
+ i915->batch = i915_winsys->batch_get(i915_winsys);
i915->batch->winsys = i915_winsys;
return &i915->pipe;
diff --git a/src/gallium/drivers/i915simple/i915_debug.c b/src/gallium/drivers/i915simple/i915_debug.c
index a121dc0af48..5e26d1b9057 100644
--- a/src/gallium/drivers/i915simple/i915_debug.c
+++ b/src/gallium/drivers/i915simple/i915_debug.c
@@ -861,8 +861,9 @@ void
i915_dump_batchbuffer( struct i915_context *i915 )
{
struct debug_stream stream;
+ /* TODO fix me */
unsigned *start = 0;/*i915->batch_start;*/
- unsigned *end = i915->winsys->batch_start( i915->winsys, 0, 0 );
+ unsigned *end = 0;/*i915->winsys->batch_start( i915->winsys, 0, 0 );*/
unsigned long bytes = (unsigned long) (end - start) * 4;
boolean done = FALSE;
diff --git a/src/gallium/drivers/i915simple/i915_winsys.h b/src/gallium/drivers/i915simple/i915_winsys.h
index 5e16543f4ec..9afaa16a62c 100644
--- a/src/gallium/drivers/i915simple/i915_winsys.h
+++ b/src/gallium/drivers/i915simple/i915_winsys.h
@@ -55,6 +55,7 @@ extern "C" {
* etc.
*/
+struct i915_batchbuffer;
struct pipe_buffer;
struct pipe_fence_handle;
struct pipe_winsys;
@@ -75,20 +76,10 @@ struct pipe_screen;
struct i915_winsys {
/**
- * Reserve space on batch buffer.
- *
- * Returns a null pointer if there is insufficient space in the batch buffer
- * to hold the requested number of dwords and relocations.
- *
- * The number of dwords should also include the number of relocations.
+ * Get the current batch buffer from the winsys.
*/
- unsigned *(*batch_start)( struct i915_winsys *sws,
- unsigned dwords,
- unsigned relocs );
-
- void (*batch_dword)( struct i915_winsys *sws,
- unsigned dword );
-
+ struct i915_batchbuffer *(*batch_get)( struct i915_winsys *sws );
+
/**
* Emit a relocation to a buffer.
*
@@ -103,7 +94,10 @@ struct i915_winsys {
struct pipe_buffer *buf,
unsigned access_flags,
unsigned delta );
-
+
+ /**
+ * Flush the batch.
+ */
void (*batch_flush)( struct i915_winsys *sws,
struct pipe_fence_handle **fence );
};