[igt-dev] [PATCH igt 2/3] igt/gem_exec_fence: Exercise merging fences
Antonio Argenziano
antonio.argenziano at intel.com
Fri Mar 16 22:21:44 UTC 2018
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 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.
Makes sense, my RB stands then without the change.
Thanks,
Antonio
> -Chris
>
More information about the igt-dev
mailing list