Re: [igt-dev] [PATCH igt 2/3] igt/gem_exec_fence: Exercise merging fences

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 16/03/18 15:14, Chris Wilson wrote:
Quoting Antonio Argenziano (2018-03-16 22:11:11)


On 13/03/18 05:31, Chris Wilson wrote:
Execute the same batch on each engine and check that the composite fence
across all engines completes only after the batch is completed on every
engine.

Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
---
   tests/gem_exec_fence.c | 127 +++++++++++++++++++++++++++++++++++++++++++++++++
   1 file changed, 127 insertions(+)

diff --git a/tests/gem_exec_fence.c b/tests/gem_exec_fence.c
index 26bde788..95fc65e5 100644
--- a/tests/gem_exec_fence.c
+++ b/tests/gem_exec_fence.c
@@ -208,6 +208,113 @@ static void test_fence_busy(int fd, unsigned ring, unsigned flags)
       gem_quiescent_gpu(fd);
   }
+static void test_fence_busy_all(int fd, unsigned flags)
+{
+     const int gen = intel_gen(intel_get_drm_devid(fd));
+     struct drm_i915_gem_exec_object2 obj;
+     struct drm_i915_gem_relocation_entry reloc;
+     struct drm_i915_gem_execbuffer2 execbuf;
+     struct timespec tv;
+     uint32_t *batch;
+     unsigned int engine;
+     int all, i, timeout;
+
+     gem_quiescent_gpu(fd);
+
+     memset(&execbuf, 0, sizeof(execbuf));
+     execbuf.buffers_ptr = to_user_pointer(&obj);
+     execbuf.buffer_count = 1;
+
+     memset(&obj, 0, sizeof(obj));
+     obj.handle = gem_create(fd, 4096);
+
+     obj.relocs_ptr = to_user_pointer(&reloc);
+     obj.relocation_count = 1;
+     memset(&reloc, 0, sizeof(reloc));
+
+     batch = gem_mmap__wc(fd, obj.handle, 0, 4096, PROT_WRITE);
+     gem_set_domain(fd, obj.handle,
+                    I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
+
+     reloc.target_handle = obj.handle; /* recurse */
+     reloc.presumed_offset = 0;
+     reloc.offset = sizeof(uint32_t);
+     reloc.delta = 0;
+     reloc.read_domains = I915_GEM_DOMAIN_COMMAND;
+     reloc.write_domain = 0;
+
+     i = 0;
+     batch[i] = MI_BATCH_BUFFER_START;
+     if (gen >= 8) {
+             batch[i] |= 1 << 8 | 1;
+             batch[++i] = 0;
+             batch[++i] = 0;
+     } else if (gen >= 6) {
+             batch[i] |= 1 << 8;
+             batch[++i] = 0;
+     } else {
+             batch[i] |= 2 << 6;
+             batch[++i] = 0;
+             if (gen < 4) {
+                     batch[i] |= 1;
+                     reloc.delta = 1;
+             }
+     }
+     i++;
+
+     all = -1;
+     for_each_engine(fd, engine) {

for_each_physical_engines to avoid submitting twice to the same engine.

iirc, I thought about that in passing and decided that the ABI exercise
was the intent here and not the HW exercise.

Makes sense, my RB stands then without the change.

Thanks,
Antonio

-Chris

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux