lib: execbuffer2 support
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Sun, 27 Mar 2011 14:17:54 +0000 (16:17 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 29 Mar 2011 20:49:09 +0000 (22:49 +0200)
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
lib/intel_batchbuffer.c
lib/intel_batchbuffer.h

index 14446df..a2f9ae7 100644 (file)
@@ -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);
 }
index a827176..7ed110e 100644 (file)
@@ -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 {                                           \