diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2011-03-14 19:29:36 +0100 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2011-03-15 22:11:59 +0100 |
commit | e11ae612c13f678a03ac1598ac6781a33843da59 (patch) | |
tree | dae8e7e729935aba73eeca36e1a91069e8c346cb | |
parent | d04348aaf69549c14b68e77d4003e4e3499e7cce (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.h | 7 | ||||
-rw-r--r-- | src/gallium/winsys/i915/drm/i915_drm_buffer.c | 10 | ||||
-rw-r--r-- | src/gallium/winsys/i915/sw/i915_sw_buffer.c | 8 |
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; } |