[igt-dev] [PATCH i-g-t] i915/gem_pipe_control_store_loop: Use a simple spinner to preuse the buffer
Zbigniew Kempczyński
zbigniew.kempczynski at intel.com
Mon Aug 1 09:58:06 UTC 2022
From: Chris Wilson <chris.p.wilson at intel.com>
Replace the blit commands that need to be adjusted for different archs,
and use the library routines to make a buffer busy for a controlled
length of time. This has the added advantage of ensuring that the buffer
is busy during the w/a processing inside the execbuf ioctl.
Signed-off-by: Chris Wilson <chris.p.wilson at intel.com>
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
Tested-by: Arjun Melkaveri <arjun.melkaveri at intel.com>
---
tests/i915/gem_pipe_control_store_loop.c | 39 +++++++++---------------
1 file changed, 15 insertions(+), 24 deletions(-)
diff --git a/tests/i915/gem_pipe_control_store_loop.c b/tests/i915/gem_pipe_control_store_loop.c
index 20fdc9c155..df3da9f5b2 100644
--- a/tests/i915/gem_pipe_control_store_loop.c
+++ b/tests/i915/gem_pipe_control_store_loop.c
@@ -71,36 +71,25 @@ store_pipe_control_loop(bool preuse_buffer, int timeout)
ibb = intel_bb_create(buf_ops_get_fd(bops), 4096);
igt_until_timeout(timeout) {
+ igt_spin_t *spin = NULL;
+
/* we want to check tlb consistency of the pipe_control target,
* so get a new buffer every time around */
target_buf = intel_buf_create(bops, 4096, 1, 8, 0,
I915_TILING_NONE,
I915_COMPRESSION_NONE);
- if (preuse_buffer) {
- intel_bb_add_intel_buf(ibb, target_buf, true);
- intel_bb_out(ibb, XY_COLOR_BLT_CMD_NOLEN |
- COLOR_BLT_WRITE_ALPHA |
- XY_COLOR_BLT_WRITE_RGB |
- (4 + (ibb->gen >= 8)));
-
- intel_bb_out(ibb, (3 << 24) | (0xf0 << 16) | 64);
- intel_bb_out(ibb, 0);
- intel_bb_out(ibb, 1 << 16 | 1);
-
- /*
- * IMPORTANT: We need to preuse the buffer in a
- * different domain than what the pipe control write
- * (and kernel wa) uses!
- */
- intel_bb_emit_reloc_fenced(ibb, target_buf->handle,
- I915_GEM_DOMAIN_RENDER,
- I915_GEM_DOMAIN_RENDER,
- 0, target_buf->addr.offset);
- intel_bb_out(ibb, 0xdeadbeef);
-
- intel_bb_flush_blit(ibb);
- }
+ /*
+ * IMPORTANT: We need to preuse the buffer in a
+ * different domain than what the pipe control write
+ * (and kernel wa) uses!
+ *
+ * The dependency sets (RENDER, RENDER).
+ */
+ if (preuse_buffer)
+ spin = igt_spin_new(buf_ops_get_fd(bops),
+ .ahnd = ibb->allocator_handle,
+ .dependency = target_buf->handle);
/* gem_storedw_batches_loop.c is a bit overenthusiastic with
* creating new batchbuffers - with buffer reuse disabled, the
@@ -149,6 +138,8 @@ store_pipe_control_loop(bool preuse_buffer, int timeout)
}
intel_bb_flush(ibb, 0);
+ if (spin)
+ igt_spin_free(buf_ops_get_fd(bops), spin);
intel_buf_cpu_map(target_buf, 1);
--
2.34.1
More information about the igt-dev
mailing list