From 8ab88c9af062512dee6dc2c43d400a71b165c284 Mon Sep 17 00:00:00 2001 From: Daniel Vetter Date: Sun, 27 Mar 2011 16:17:54 +0200 Subject: [PATCH] lib: execbuffer2 support Signed-off-by: Daniel Vetter --- lib/intel_batchbuffer.c | 14 ++++++++++---- lib/intel_batchbuffer.h | 11 +++++++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c index 14446df..a2f9ae7 100644 --- a/lib/intel_batchbuffer.c +++ b/lib/intel_batchbuffer.c @@ -122,7 +122,8 @@ intel_batchbuffer_flush(struct intel_batchbuffer *batch) void intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch, drm_intel_bo *buffer, uint32_t delta, - uint32_t read_domains, uint32_t write_domain) + uint32_t read_domains, uint32_t write_domain, + int fenced) { int ret; @@ -132,9 +133,14 @@ intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch, (int)(batch->ptr - batch->buffer), BATCH_SZ); - ret = drm_intel_bo_emit_reloc(batch->bo, batch->ptr - batch->buffer, - buffer, delta, - read_domains, write_domain); + if (fenced) + ret = drm_intel_bo_emit_reloc_fence(batch->bo, batch->ptr - batch->buffer, + buffer, delta, + read_domains, write_domain); + else + ret = drm_intel_bo_emit_reloc(batch->bo, batch->ptr - batch->buffer, + buffer, delta, + read_domains, write_domain); intel_batchbuffer_emit_dword(batch, buffer->offset + delta); assert(ret == 0); } diff --git a/lib/intel_batchbuffer.h b/lib/intel_batchbuffer.h index a827176..7ed110e 100644 --- a/lib/intel_batchbuffer.h +++ b/lib/intel_batchbuffer.h @@ -36,7 +36,8 @@ void intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch, drm_intel_bo *buffer, uint32_t delta, uint32_t read_domains, - uint32_t write_domain); + uint32_t write_domain, + int fenced); /* Inline functions - might actually be better off with these * non-inlined. Certainly better off switching all command packets to @@ -77,10 +78,16 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch, #define OUT_BATCH(d) intel_batchbuffer_emit_dword(batch, d) +#define OUT_RELOC_FENCED(buf, read_domains, write_domain, delta) do { \ + assert((delta) >= 0); \ + intel_batchbuffer_emit_reloc(batch, buf, delta, \ + read_domains, write_domain, 1); \ +} while (0) + #define OUT_RELOC(buf, read_domains, write_domain, delta) do { \ assert((delta) >= 0); \ intel_batchbuffer_emit_reloc(batch, buf, delta, \ - read_domains, write_domain); \ + read_domains, write_domain, 0); \ } while (0) #define ADVANCE_BATCH() do { \ -- 2.7.4