summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2011-03-27 16:17:54 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2011-03-29 22:49:09 +0200
commit8ab88c9af062512dee6dc2c43d400a71b165c284 (patch)
treea62898d83904150ef21e93c87c65979d9e5ce98e /lib
parent2374af20feaaeac849b9a506aeb1e8e9028e5ff7 (diff)
lib: execbuffer2 support
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'lib')
-rw-r--r--lib/intel_batchbuffer.c14
-rw-r--r--lib/intel_batchbuffer.h11
2 files changed, 19 insertions, 6 deletions
diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
index 14446df6..a2f9ae71 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 a8271766..7ed110e3 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 { \