diff options
author | Zbigniew Kempczyński <zbigniew.kempczynski@intel.com> | 2021-07-20 12:01:11 +0200 |
---|---|---|
committer | Zbigniew Kempczyński <zbigniew.kempczynski@intel.com> | 2021-08-10 21:02:50 +0200 |
commit | ad3ad1ebab84ff5d02b23abdd8ca2025ec5a5e9a (patch) | |
tree | 0da326924577308d9986a32d7d644496aab2772a /lib/huc_copy.c | |
parent | cbdf3b1d3acc14da497259e6e8f6e0fd0632d8fd (diff) |
lib/huc_copy: Extend huc copy prototype to pass allocator handle
For testing gem_huc_copy on no-reloc platforms we need to pass
allocator handle and object sizes to properly acquire offsets from
allocator.
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Diffstat (limited to 'lib/huc_copy.c')
-rw-r--r-- | lib/huc_copy.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/lib/huc_copy.c b/lib/huc_copy.c index bc98b1f9..6ec68864 100644 --- a/lib/huc_copy.c +++ b/lib/huc_copy.c @@ -23,7 +23,9 @@ */ #include <i915_drm.h> +#include "drmtest.h" #include "huc_copy.h" +#include "intel_allocator.h" static void gen9_emit_huc_virtual_addr_state(struct drm_i915_gem_exec_object2 *src, @@ -40,6 +42,7 @@ gen9_emit_huc_virtual_addr_state(struct drm_i915_gem_exec_object2 *src, buf[(*i)++] = src->offset; reloc_src->target_handle = src->handle; + reloc_src->presumed_offset = src->offset; reloc_src->delta = 0; reloc_src->offset = (*i - 1) * sizeof(buf[0]); reloc_src->read_domains = 0; @@ -48,6 +51,7 @@ gen9_emit_huc_virtual_addr_state(struct drm_i915_gem_exec_object2 *src, buf[(*i)++] = dst->offset; reloc_dst->target_handle = dst->handle; + reloc_dst->presumed_offset = dst->offset; reloc_dst->delta = 0; reloc_dst->offset = (*i - 1) * sizeof(buf[0]); reloc_dst->read_domains = 0; @@ -61,8 +65,8 @@ gen9_emit_huc_virtual_addr_state(struct drm_i915_gem_exec_object2 *src, } void -gen9_huc_copyfunc(int fd, - struct drm_i915_gem_exec_object2 *obj) +gen9_huc_copyfunc(int fd, uint64_t ahnd, + struct drm_i915_gem_exec_object2 *obj, uint64_t *objsize) { struct drm_i915_gem_relocation_entry reloc[2]; struct drm_i915_gem_execbuffer2 execbuf; @@ -86,6 +90,21 @@ gen9_huc_copyfunc(int fd, buf[i++] = MFX_WAIT; memset(reloc, 0, sizeof(reloc)); + + if (ahnd) { + obj[0].flags = EXEC_OBJECT_PINNED; + obj[1].flags = EXEC_OBJECT_PINNED | EXEC_OBJECT_WRITE; + obj[2].flags = EXEC_OBJECT_PINNED; + obj[0].offset = get_offset(ahnd, obj[0].handle, objsize[0], 0); + obj[1].offset = get_offset(ahnd, obj[1].handle, objsize[1], 0); + obj[2].offset = get_offset(ahnd, obj[2].handle, objsize[2], 0); + } else { + obj[0].offset = 1 << 20; + obj[1].offset = ALIGN(obj[0].offset + objsize[0], 1 << 20); + obj[2].offset = ALIGN(obj[1].offset + objsize[1], 1 << 20); + obj[1].flags = EXEC_OBJECT_WRITE; + } + gen9_emit_huc_virtual_addr_state(&obj[0], &obj[1], &reloc[0], &reloc[1], buf, &i); buf[i++] = HUC_START; @@ -94,13 +113,13 @@ gen9_huc_copyfunc(int fd, buf[i++] = MI_BATCH_BUFFER_END; gem_write(fd, obj[2].handle, 0, buf, sizeof(buf)); - obj[2].relocation_count = 2; + obj[2].relocation_count = !ahnd ? 2 : 0; obj[2].relocs_ptr = to_user_pointer(reloc); memset(&execbuf, 0, sizeof(execbuf)); execbuf.buffers_ptr = to_user_pointer(obj); execbuf.buffer_count = 3; - execbuf.flags = I915_EXEC_BSD; + execbuf.flags = I915_EXEC_BSD | I915_EXEC_NO_RELOC; gem_execbuf(fd, &execbuf); } |