[igt-dev] [PATCH igt 2/3] igt/gem_exec_fence: Exercise merging fences
Chris Wilson
chris at chris-wilson.co.uk
Fri Mar 16 22:14:11 UTC 2018
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 at chris-wilson.co.uk>
> > ---
> > 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.
-Chris
More information about the igt-dev
mailing list