[igt-dev] [i-g-t V5 1/5] tests/i915/kms_ccs: Add XE support
Juha-Pekka Heikkila
juhapekka.heikkila at gmail.com
Tue Sep 26 12:13:06 UTC 2023
On 11.9.2023 10.22, Bhanuprakash Modem wrote:
> Add XE driver support for kms tests. This patch will add a support
> to call the corresponding apis based on the driver (i915/xe)
>
> V2: - Update XE blocklist
>
> Cc: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> ---
> tests/intel/kms_ccs.c | 42 ++++++++++++++++++++++++++----------------
> 1 file changed, 26 insertions(+), 16 deletions(-)
>
> diff --git a/tests/intel/kms_ccs.c b/tests/intel/kms_ccs.c
> index 976aedb06..4a0f024dd 100644
> --- a/tests/intel/kms_ccs.c
> +++ b/tests/intel/kms_ccs.c
> @@ -32,6 +32,7 @@
> #include "igt.h"
>
> #include "i915/gem_create.h"
> +#include "xe/xe_ioctl.h"
>
> /**
> * SUBTEST: %s-%s-%s
> @@ -313,17 +314,19 @@ static void check_ccs_plane(int drm_fd, igt_fb_t *fb, int plane)
> ccs_size = fb->strides[plane] * fb->plane_height[plane];
> igt_assert(ccs_size);
>
> - gem_set_domain(drm_fd, fb->gem_handle, I915_GEM_DOMAIN_CPU, 0);
> -
> - map = gem_mmap__cpu(drm_fd, fb->gem_handle, 0, fb->size, PROT_READ);
> -
> + if (is_i915_device(drm_fd)) {
> + gem_set_domain(drm_fd, fb->gem_handle, I915_GEM_DOMAIN_CPU, 0);
> + map = gem_mmap__cpu(drm_fd, fb->gem_handle, 0, fb->size, PROT_READ);
> + } else {
> + map = xe_bo_mmap_ext(drm_fd, fb->gem_handle, fb->size, PROT_READ);
> + }
> ccs_size = fb->strides[plane] * fb->plane_height[plane];
> ccs_p = map + fb->offsets[plane];
> for (i = 0; i < ccs_size; i += sizeof(uint32_t))
> if (*(uint32_t *)(ccs_p + i))
> break;
>
> - munmap(map, fb->size);
> + igt_assert(gem_munmap(map, fb->size) == 0);
>
> igt_assert_f(i < ccs_size,
> "CCS plane %d (for main plane %d) lacks compression meta-data\n",
> @@ -339,9 +342,12 @@ static void check_ccs_cc_plane(int drm_fd, igt_fb_t *fb, int plane, const float
> void *map;
> uint32_t native_color;
>
> - gem_set_domain(drm_fd, fb->gem_handle, I915_GEM_DOMAIN_CPU, 0);
> -
> - map = gem_mmap__cpu(drm_fd, fb->gem_handle, 0, fb->size, PROT_READ);
> + if (is_i915_device(drm_fd)) {
> + gem_set_domain(drm_fd, fb->gem_handle, I915_GEM_DOMAIN_CPU, 0);
> + map = gem_mmap__cpu(drm_fd, fb->gem_handle, 0, fb->size, PROT_READ);
> + } else {
> + map = xe_bo_mmap_ext(drm_fd, fb->gem_handle, fb->size, PROT_READ);
> + }
> cc_p = map + fb->offsets[plane];
>
> igt_assert(cc_color[0] == cc_p[0].f &&
> @@ -356,7 +362,7 @@ static void check_ccs_cc_plane(int drm_fd, igt_fb_t *fb, int plane, const float
>
> igt_assert(native_color == cc_p[4].d);
>
> - munmap(map, fb->size);
> + igt_assert(gem_munmap(map, fb->size) == 0);
> };
>
> static void check_all_ccs_planes(int drm_fd, igt_fb_t *fb, const float *cc_color, bool check_cc_plane)
> @@ -378,14 +384,17 @@ static void fill_fb_random(int drm_fd, igt_fb_t *fb)
> uint8_t *p;
> int i;
>
> - gem_set_domain(drm_fd, fb->gem_handle, I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
> -
> - p = map = gem_mmap__cpu(drm_fd, fb->gem_handle, 0, fb->size, PROT_WRITE);
> + if (is_i915_device(drm_fd)) {
> + gem_set_domain(drm_fd, fb->gem_handle, I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
> + p = map = gem_mmap__cpu(drm_fd, fb->gem_handle, 0, fb->size, PROT_WRITE);
> + } else {
> + p = map = xe_bo_mmap_ext(drm_fd, fb->gem_handle, fb->size, PROT_READ | PROT_WRITE);
I kind of assume here wouldn't need PROT_READ but I don't see it
changing test result. As is this show green results and as discussed
earlier this test maybe not so useful overall on Xe in any case so lets
go with this.
Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
> + }
>
> for (i = 0; i < fb->size; i++)
> p[i] = rand();
>
> - munmap(map, fb->size);
> + igt_assert(gem_munmap(map, fb->size) == 0);
> }
>
> static void test_bad_ccs_plane(data_t *data, int width, int height, int ccs_plane,
> @@ -493,8 +502,9 @@ static void fast_clear_fb(int drm_fd, struct igt_fb *fb, const float *cc_color)
> struct buf_ops *bops = buf_ops_create(drm_fd);
> struct intel_buf *dst = igt_fb_create_intel_buf(drm_fd, bops, fb, "fast clear dst");
>
> - gem_set_domain(drm_fd, fb->gem_handle,
> - I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> + if (is_i915_device(drm_fd))
> + gem_set_domain(drm_fd, fb->gem_handle,
> + I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
>
> fast_clear(ibb, dst, 0, 0, fb->width, fb->height, cc_color);
>
> @@ -814,7 +824,7 @@ igt_main_args("cs:", NULL, help_str, opt_handler, &data)
> enum pipe pipe;
>
> igt_fixture {
> - data.drm_fd = drm_open_driver_master(DRIVER_INTEL);
> + data.drm_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE);
>
> igt_require(intel_display_ver(intel_get_drm_devid(data.drm_fd)) >= 9);
> kmstest_set_vt_graphics_mode();
More information about the igt-dev
mailing list