[igt-dev] [PATCH i-g-t v6 04/65] lib/intel_batchbuffer: Ensure relocation code will be called
Zbigniew Kempczyński
zbigniew.kempczynski at intel.com
Tue Aug 10 05:26:10 UTC 2021
Currently we're not sure relocations code will be called (presumed_offset
== offset == 0) so enforce them. Passing presumed_offset and offset to
auxiliary functions will prepare code to switch to no-reloc mode.
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
Cc: Petri Latvala <petri.latvala at intel.com>
Cc: Ashutosh Dixit <ashutosh.dixit at intel.com>
Cc: Chris Wilson <chris at chris-wilson.co.uk>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
---
lib/intel_batchbuffer.c | 30 +++++++++++++++++-------------
1 file changed, 17 insertions(+), 13 deletions(-)
diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
index 2b8b903e2..3747019a5 100644
--- a/lib/intel_batchbuffer.c
+++ b/lib/intel_batchbuffer.c
@@ -679,24 +679,27 @@ static uint32_t fast_copy_dword1(unsigned int src_tiling,
static void
fill_relocation(struct drm_i915_gem_relocation_entry *reloc,
- uint32_t gem_handle, uint32_t delta, /* in bytes */
+ uint32_t gem_handle, uint64_t presumed_offset,
+ uint32_t delta, /* in bytes */
uint32_t offset, /* in dwords */
uint32_t read_domains, uint32_t write_domains)
{
reloc->target_handle = gem_handle;
reloc->delta = delta;
reloc->offset = offset * sizeof(uint32_t);
- reloc->presumed_offset = 0;
+ reloc->presumed_offset = presumed_offset;
reloc->read_domains = read_domains;
reloc->write_domain = write_domains;
}
static void
-fill_object(struct drm_i915_gem_exec_object2 *obj, uint32_t gem_handle,
+fill_object(struct drm_i915_gem_exec_object2 *obj,
+ uint32_t gem_handle, uint64_t gem_offset,
struct drm_i915_gem_relocation_entry *relocs, uint32_t count)
{
memset(obj, 0, sizeof(*obj));
obj->handle = gem_handle;
+ obj->offset = gem_offset;
obj->relocation_count = count;
obj->relocs_ptr = to_user_pointer(relocs);
}
@@ -881,14 +884,14 @@ void igt_blitter_src_copy(int fd,
batch_handle = gem_create(fd, 4096);
gem_write(fd, batch_handle, 0, batch, sizeof(batch));
- fill_relocation(&relocs[0], dst_handle, dst_delta, dst_reloc_offset,
+ fill_relocation(&relocs[0], dst_handle, -1, dst_delta, dst_reloc_offset,
I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER);
- fill_relocation(&relocs[1], src_handle, src_delta, src_reloc_offset,
+ fill_relocation(&relocs[1], src_handle, -1, src_delta, src_reloc_offset,
I915_GEM_DOMAIN_RENDER, 0);
- fill_object(&objs[0], dst_handle, NULL, 0);
- fill_object(&objs[1], src_handle, NULL, 0);
- fill_object(&objs[2], batch_handle, relocs, 2);
+ fill_object(&objs[0], dst_handle, 0, NULL, 0);
+ fill_object(&objs[1], src_handle, 0, NULL, 0);
+ fill_object(&objs[2], batch_handle, 0, relocs, 2);
objs[0].flags |= EXEC_OBJECT_NEEDS_FENCE;
objs[1].flags |= EXEC_OBJECT_NEEDS_FENCE;
@@ -978,13 +981,14 @@ void igt_blitter_fast_copy__raw(int fd,
batch_handle = gem_create(fd, 4096);
gem_write(fd, batch_handle, 0, batch, sizeof(batch));
- fill_relocation(&relocs[0], dst_handle, dst_delta, 4,
+ fill_relocation(&relocs[0], dst_handle, -1, dst_delta, 4,
I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER);
- fill_relocation(&relocs[1], src_handle, src_delta, 8, I915_GEM_DOMAIN_RENDER, 0);
+ fill_relocation(&relocs[1], src_handle, -1, src_delta, 8,
+ I915_GEM_DOMAIN_RENDER, 0);
- fill_object(&objs[0], dst_handle, NULL, 0);
- fill_object(&objs[1], src_handle, NULL, 0);
- fill_object(&objs[2], batch_handle, relocs, 2);
+ fill_object(&objs[0], dst_handle, 0, NULL, 0);
+ fill_object(&objs[1], src_handle, 0, NULL, 0);
+ fill_object(&objs[2], batch_handle, 0, relocs, 2);
exec_blit(fd, objs, 3, intel_gen(intel_get_drm_devid(fd)));
--
2.26.0
More information about the igt-dev
mailing list