summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2011-03-14 19:29:36 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2011-03-15 22:11:59 +0100
commite11ae612c13f678a03ac1598ac6781a33843da59 (patch)
treedae8e7e729935aba73eeca36e1a91069e8c346cb
parentd04348aaf69549c14b68e77d4003e4e3499e7cce (diff)
i915g: implement winsys->buffer_busy
Will be needed to stear the staged upload. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--src/gallium/drivers/i915/i915_winsys.h7
-rw-r--r--src/gallium/winsys/i915/drm/i915_drm_buffer.c10
-rw-r--r--src/gallium/winsys/i915/sw/i915_sw_buffer.c8
3 files changed, 25 insertions, 0 deletions
diff --git a/src/gallium/drivers/i915/i915_winsys.h b/src/gallium/drivers/i915/i915_winsys.h
index 21cfdc9613..5c9ca8777c 100644
--- a/src/gallium/drivers/i915/i915_winsys.h
+++ b/src/gallium/drivers/i915/i915_winsys.h
@@ -205,6 +205,13 @@ struct i915_winsys {
size_t size,
const void *data);
+ /**
+ * Check whether a buffer is used by the gpu and a subsequent map/write would
+ * block
+ */
+ boolean (*buffer_busy)(struct i915_winsys *iws,
+ struct i915_winsys_buffer *buffer);
+
void (*buffer_destroy)(struct i915_winsys *iws,
struct i915_winsys_buffer *buffer);
/*@}*/
diff --git a/src/gallium/winsys/i915/drm/i915_drm_buffer.c b/src/gallium/winsys/i915/drm/i915_drm_buffer.c
index 01dd4bf062..7707822c10 100644
--- a/src/gallium/winsys/i915/drm/i915_drm_buffer.c
+++ b/src/gallium/winsys/i915/drm/i915_drm_buffer.c
@@ -199,6 +199,15 @@ i915_drm_buffer_write(struct i915_winsys *iws,
return drm_intel_bo_subdata(buf->bo, offset, size, (void*)data);
}
+static boolean
+i915_drm_buffer_busy(struct i915_winsys *iws,
+ struct i915_winsys_buffer *buffer)
+{
+ struct i915_drm_buffer *buf = i915_drm_buffer(buffer);
+
+ return drm_intel_bo_busy(buf->bo);
+}
+
static void
i915_drm_buffer_destroy(struct i915_winsys *iws,
struct i915_winsys_buffer *buffer)
@@ -223,5 +232,6 @@ i915_drm_winsys_init_buffer_functions(struct i915_drm_winsys *idws)
idws->base.buffer_map = i915_drm_buffer_map;
idws->base.buffer_unmap = i915_drm_buffer_unmap;
idws->base.buffer_write = i915_drm_buffer_write;
+ idws->base.buffer_busy = i915_drm_buffer_busy;
idws->base.buffer_destroy = i915_drm_buffer_destroy;
}
diff --git a/src/gallium/winsys/i915/sw/i915_sw_buffer.c b/src/gallium/winsys/i915/sw/i915_sw_buffer.c
index 9a7e90e217..38bca81280 100644
--- a/src/gallium/winsys/i915/sw/i915_sw_buffer.c
+++ b/src/gallium/winsys/i915/sw/i915_sw_buffer.c
@@ -88,6 +88,13 @@ i915_sw_buffer_write(struct i915_winsys *iws,
return 0;
}
+static boolean
+i915_sw_buffer_busy(struct i915_winsys *iws,
+ struct i915_winsys_buffer *buffer)
+{
+ return FALSE;
+}
+
static void
i915_sw_buffer_destroy(struct i915_winsys *iws,
struct i915_winsys_buffer *buffer)
@@ -110,5 +117,6 @@ i915_sw_winsys_init_buffer_functions(struct i915_sw_winsys *isws)
isws->base.buffer_map = i915_sw_buffer_map;
isws->base.buffer_unmap = i915_sw_buffer_unmap;
isws->base.buffer_write = i915_sw_buffer_write;
+ isws->base.buffer_busy = i915_sw_buffer_busy;
isws->base.buffer_destroy = i915_sw_buffer_destroy;
}