From: "Zbigniew Kempczyński" <zbigniew.kempczynski@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: "Zbigniew Kempczyński" <zbigniew.kempczynski@intel.com>
Subject: [PATCH i-g-t v2 10/10] tests/xe_render_copy: Add subtest which exercises compression
Date: Fri, 26 Apr 2024 11:01:17 +0200 [thread overview]
Message-ID: <20240426090117.78060-11-zbigniew.kempczynski@intel.com> (raw)
In-Reply-To: <20240426090117.78060-1-zbigniew.kempczynski@intel.com>
Add subtest which iterates over all supported tilings and does
render-copy to and from compressed surface.
Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
---
tests/intel/xe_render_copy.c | 91 ++++++++++++++++++++++++++++++++++--
1 file changed, 86 insertions(+), 5 deletions(-)
diff --git a/tests/intel/xe_render_copy.c b/tests/intel/xe_render_copy.c
index ef75c4ce6d..6f6c2e39bf 100644
--- a/tests/intel/xe_render_copy.c
+++ b/tests/intel/xe_render_copy.c
@@ -37,6 +37,10 @@
*
* SUBTEST: render-full
* Description: Copy surface using 3d engine (1:1)
+ *
+ * SUBTEST: render-full-compressed
+ * Description: Copy surface using 3d engine (1:1) when intermediate surface
+ * is compressed
*/
#define WIDTH 256
#define HEIGHT 256
@@ -56,9 +60,13 @@ static void scratch_buf_init(struct buf_ops *bops,
{
int fd = buf_ops_get_fd(bops);
int bpp = 32;
+ uint64_t region = system_memory(fd);
+
+ if (compression && xe_has_vram(fd))
+ region = vram_memory(fd, 0);
intel_buf_init_in_region(bops, buf, width, height, bpp, 0,
- req_tiling, compression, system_memory(fd));
+ req_tiling, compression, region);
igt_assert(intel_buf_width(buf) == width);
igt_assert(intel_buf_height(buf) == height);
@@ -120,6 +128,67 @@ static int compare_bufs(struct intel_buf *buf1, struct intel_buf *buf2,
return ret;
}
+static bool buf_is_aux_compressed(struct buf_ops *bops, struct intel_buf *buf)
+{
+ int xe = buf_ops_get_fd(bops);
+ unsigned int gen = intel_gen(buf_ops_get_devid(bops));
+ uint32_t ccs_size;
+ uint8_t *ptr;
+ bool is_compressed = false;
+
+ igt_assert_neq(buf->ccs[0].offset, 0);
+
+ ccs_size = intel_buf_ccs_width(gen, buf) * intel_buf_ccs_height(gen, buf);
+ ptr = xe_bo_map(xe, buf->handle, buf->size);
+ for (int i = 0; i < ccs_size; i++)
+ if (ptr[buf->ccs[0].offset + i] != 0) {
+ is_compressed = true;
+ break;
+ }
+ munmap(ptr, buf->size);
+
+ return is_compressed;
+}
+
+static bool buf_is_compressed(struct buf_ops *bops, struct intel_buf *buf)
+{
+ struct drm_xe_engine_class_instance inst = {
+ .engine_class = DRM_XE_ENGINE_CLASS_COPY,
+ };
+ int xe = buf_ops_get_fd(bops);
+ struct blt_copy_object obj;
+ uint64_t ahnd;
+ uint32_t vm, exec_queue;
+ uint32_t tiling = i915_tile_to_blt_tile(buf->tiling);
+ uint32_t devid = buf_ops_get_devid(bops);
+ intel_ctx_t *ctx;
+ bool is_compressed;
+
+ if (!HAS_FLATCCS(devid))
+ return buf_is_aux_compressed(bops, buf);
+
+ vm = xe_vm_create(xe, 0, 0);
+ exec_queue = xe_exec_queue_create(xe, vm, &inst, 0);
+ ctx = intel_ctx_xe(xe, vm, exec_queue, 0, 0, 0);
+ ahnd = intel_allocator_open(xe, ctx->vm, INTEL_ALLOCATOR_RELOC);
+
+ blt_set_object(&obj, buf->handle,
+ buf->size, buf->region, buf->mocs_index,
+ buf->pat_index, tiling,
+ buf->compression ? COMPRESSION_ENABLED : COMPRESSION_DISABLED,
+ COMPRESSION_TYPE_3D);
+ blt_set_geom(&obj, buf->surface[0].stride, 0, 0, buf->width, buf->height, 0, 0);
+
+ is_compressed = blt_surface_is_compressed(xe, ctx, NULL, ahnd, &obj);
+
+ xe_exec_queue_destroy(xe, exec_queue);
+ xe_vm_destroy(xe, vm);
+ put_ahnd(ahnd);
+ free(ctx);
+
+ return is_compressed;
+}
+
/*
*
* Scenarios implemented are presented below. We copy from linear to and forth
@@ -176,6 +245,7 @@ enum render_copy_testtype {
COPY_HSTRIPES,
COPY_RANDOM,
COPY_FULL,
+ COPY_FULL_COMPRESSED,
};
static const char * const testname[] = {
@@ -184,6 +254,7 @@ static const char * const testname[] = {
[COPY_HSTRIPES] = "hstripes",
[COPY_RANDOM] = "random",
[COPY_FULL] = "full",
+ [COPY_FULL_COMPRESSED] = "full-compressed",
};
static int render(struct buf_ops *bops, uint32_t tiling,
@@ -196,6 +267,9 @@ static int render(struct buf_ops *bops, uint32_t tiling,
uint32_t fails = 0;
uint32_t devid = intel_get_drm_devid(xe);
igt_render_copyfunc_t render_copy = NULL;
+ int compression = testtype == COPY_FULL_COMPRESSED ? I915_COMPRESSION_RENDER :
+ I915_COMPRESSION_NONE;
+ bool is_compressed;
struct posrc {
uint32_t x0, y0;
uint32_t x1, y1;
@@ -241,7 +315,7 @@ static int render(struct buf_ops *bops, uint32_t tiling,
scratch_buf_init(bops, &src, width, height, I915_TILING_NONE,
I915_COMPRESSION_NONE);
scratch_buf_init(bops, &dst, width, height, tiling,
- I915_COMPRESSION_NONE);
+ compression);
scratch_buf_init(bops, &final, width, height, I915_TILING_NONE,
I915_COMPRESSION_NONE);
scratch_buf_init(bops, &grfs, 64, height * 4, I915_TILING_NONE,
@@ -317,6 +391,7 @@ static int render(struct buf_ops *bops, uint32_t tiling,
case COPY_FULL:
+ case COPY_FULL_COMPRESSED:
render_copy(ibb,
&src, 0, 0, width, height,
&dst, 0, 0);
@@ -339,7 +414,9 @@ static int render(struct buf_ops *bops, uint32_t tiling,
tiling, width, height);
}
- fails = compare_bufs(&src, &final, true);
+ fails = compare_bufs(&src, &final, false);
+ if (compression == I915_COMPRESSION_RENDER)
+ is_compressed = buf_is_compressed(bops, &dst);
intel_buf_close(bops, &src);
intel_buf_close(bops, &dst);
@@ -347,6 +424,9 @@ static int render(struct buf_ops *bops, uint32_t tiling,
igt_assert_f(fails == 0, "%s: (tiling: %d) fails: %d\n",
__func__, tiling, fails);
+ if (compression == I915_COMPRESSION_RENDER && blt_platform_has_flat_ccs_enabled(xe))
+ igt_assert_f(is_compressed, "%s: (tiling: %d) buffer is not compressed\n",
+ __func__, tiling);
return fails;
}
@@ -398,12 +478,13 @@ igt_main_args("dpiW:H:", NULL, help_str, opt_handler, NULL)
srand(time(NULL));
}
- for (int id = 0; id <= COPY_FULL; id++) {
+ for (int id = 0; id <= COPY_FULL_COMPRESSED; id++) {
igt_subtest_with_dynamic_f("render-%s", testname[id]) {
igt_require(xe_has_engine_class(xe, DRM_XE_ENGINE_CLASS_RENDER));
for_each_tiling(tiling) {
- if (!blt_block_copy_supports_tiling(xe, tiling))
+ if (!render_supports_tiling(xe, tiling,
+ id == COPY_FULL_COMPRESSED))
continue;
tiling_name = blt_tiling_name(tiling);
--
2.34.1
next prev parent reply other threads:[~2024-04-26 9:02 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-26 9:01 [PATCH i-g-t v2 00/10] Add render-copy compression on Xe+ Zbigniew Kempczyński
2024-04-26 9:01 ` [PATCH i-g-t v2 01/10] lib/intel_bufops: Store devid on buffer ops creation Zbigniew Kempczyński
2024-04-26 9:01 ` [PATCH i-g-t v2 02/10] lib/intel_blt: Rename confusing fb tile to i915 tile Zbigniew Kempczyński
2024-04-26 11:11 ` Karolina Stolarek
2024-04-26 11:27 ` Zbigniew Kempczyński
2024-04-26 11:46 ` Karolina Stolarek
2024-04-26 9:01 ` [PATCH i-g-t v2 03/10] lib/intel_blt: Add i915 -> blt tile helper converter Zbigniew Kempczyński
2024-04-26 11:04 ` Karolina Stolarek
2024-04-26 9:01 ` [PATCH i-g-t v2 04/10] lib/intel_bufops: Drop tilings restrictions Zbigniew Kempczyński
2024-04-26 9:01 ` [PATCH i-g-t v2 05/10] lib/intel_bufops: Start supporting compression on Xe2+ Zbigniew Kempczyński
2024-04-26 9:01 ` [PATCH i-g-t v2 06/10] lib/rendercopy_gen9: Allow to use all tilings on flatccs platforms Zbigniew Kempczyński
2024-04-26 13:23 ` Karolina Stolarek
2024-04-26 9:01 ` [PATCH i-g-t v2 07/10] lib/intel_cmds_info: Define tiling macros Zbigniew Kempczyński
2024-04-26 13:14 ` Karolina Stolarek
2024-05-07 5:46 ` Zbigniew Kempczyński
2024-04-26 9:01 ` [PATCH i-g-t v2 08/10] lib/intel_cmds_info: Introduce render tilings Zbigniew Kempczyński
2024-04-26 13:18 ` Karolina Stolarek
2024-05-07 5:49 ` Zbigniew Kempczyński
2024-04-26 9:01 ` [PATCH i-g-t v2 09/10] lib/intel_blt: Add render tilings and compression support helper Zbigniew Kempczyński
2024-04-26 11:16 ` Karolina Stolarek
2024-04-26 13:19 ` Karolina Stolarek
2024-04-26 9:01 ` Zbigniew Kempczyński [this message]
2024-04-26 10:03 ` ✓ Fi.CI.BAT: success for Add render-copy compression on Xe+ (rev2) Patchwork
2024-04-26 10:20 ` ✓ CI.xeBAT: " Patchwork
2024-04-26 12:12 ` ✗ CI.xeFULL: failure " Patchwork
2024-04-26 14:00 ` ✗ Fi.CI.IGT: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240426090117.78060-11-zbigniew.kempczynski@intel.com \
--to=zbigniew.kempczynski@intel.com \
--cc=igt-dev@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox