summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/intel_batchbuffer.c9
-rw-r--r--lib/intel_batchbuffer.h1
2 files changed, 8 insertions, 2 deletions
diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
index 9c26fe20..6fc81400 100644
--- a/lib/intel_batchbuffer.c
+++ b/lib/intel_batchbuffer.c
@@ -1335,6 +1335,7 @@ __intel_bb_create(int i915, uint32_t ctx, uint32_t size, bool do_relocs,
igt_assert(ibb);
+ ibb->allows_obj_alignment = gem_allows_obj_alignment(i915);
ibb->uses_full_ppgtt = gem_uses_full_ppgtt(i915);
ibb->devid = intel_get_drm_devid(i915);
ibb->gen = intel_gen(ibb->devid);
@@ -1783,6 +1784,7 @@ __add_to_cache(struct intel_bb *ibb, uint32_t handle)
igt_assert(object);
object->handle = handle;
+ object->alignment = 0;
found = tsearch((void *) object, &ibb->root, __compare_objects);
if (*found == object) {
@@ -1905,7 +1907,7 @@ intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
|| ALIGN(offset, alignment) == offset);
object = __add_to_cache(ibb, handle);
- object->alignment = alignment ?: 4096;
+ alignment = alignment ?: 4096;
__add_to_objects(ibb, object);
/*
@@ -1917,7 +1919,7 @@ intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
if (INVALID_ADDR(object->offset)) {
if (INVALID_ADDR(offset)) {
offset = __intel_bb_get_offset(ibb, handle, size,
- object->alignment);
+ alignment);
} else {
offset = offset & (ibb->gtt_size - 1);
@@ -1962,6 +1964,9 @@ intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
if (ibb->uses_full_ppgtt && !ibb->enforce_relocs)
object->flags |= EXEC_OBJECT_PINNED;
+ if (ibb->allows_obj_alignment)
+ object->alignment = alignment;
+
return object;
}
diff --git a/lib/intel_batchbuffer.h b/lib/intel_batchbuffer.h
index 58bddb1a..e7606307 100644
--- a/lib/intel_batchbuffer.h
+++ b/lib/intel_batchbuffer.h
@@ -476,6 +476,7 @@ struct intel_bb {
uint64_t gtt_size;
bool supports_48b_address;
bool uses_full_ppgtt;
+ bool allows_obj_alignment;
struct igt_pxp pxp;
uint32_t ctx;