[PATCH i-g-t 3/5] lib/intel_buf: expose mocs_index
Matthew Auld
matthew.auld at intel.com
Fri Mar 1 17:16:16 UTC 2024
Allow the caller the set the intel_buf.mocs_index as part of the usual
_full variants.
Signed-off-by: Matthew Auld <matthew.auld at intel.com>
Cc: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
---
lib/igt_draw.c | 7 ++++---
lib/igt_fb.c | 3 ++-
lib/intel_bufops.c | 28 ++++++++++++++++++----------
lib/intel_bufops.h | 6 ++++--
tests/intel/kms_big_fb.c | 4 +++-
tests/intel/kms_dirtyfb.c | 7 +++++--
tests/intel/kms_psr.c | 4 +++-
tests/intel/xe_intel_bb.c | 4 +++-
tests/intel/xe_pat.c | 8 ++++----
9 files changed, 46 insertions(+), 25 deletions(-)
diff --git a/lib/igt_draw.c b/lib/igt_draw.c
index 1b702e376..a97a99de7 100644
--- a/lib/igt_draw.c
+++ b/lib/igt_draw.c
@@ -663,7 +663,8 @@ static struct intel_buf *create_buf(int fd, struct buf_ops *bops,
tiling, 0,
size, 0,
region,
- from->pat_index);
+ from->pat_index,
+ intel_get_uc_mocs_index(fd));
/* Make sure we close handle on destroy path */
intel_buf_set_ownership(buf, true);
@@ -723,9 +724,9 @@ static void draw_rect_blt(int fd, struct cmd_data *cmd_data,
pitch = tiling ? buf->stride / 4 : buf->stride;
if (ver >= 20)
- mocs = intel_get_uc_mocs_index(fd) << XE2_XY_FAST_COLOR_BLT_MOCS_INDEX_SHIFT;
+ mocs = dst->mocs_index << XE2_XY_FAST_COLOR_BLT_MOCS_INDEX_SHIFT;
else
- mocs = intel_get_uc_mocs_index(fd) << XY_FAST_COLOR_BLT_MOCS_INDEX_SHIFT;
+ mocs = dst->mocs_index << XY_FAST_COLOR_BLT_MOCS_INDEX_SHIFT;
intel_bb_out(ibb, XY_FAST_COLOR_BLT | blt_cmd_depth);
intel_bb_out(ibb, blt_cmd_tiling | mocs | (pitch-1));
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 65e0638c2..c11443e1f 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -2639,7 +2639,8 @@ igt_fb_create_intel_buf(int fd, struct buf_ops *bops,
compression, fb->size,
fb->strides[0],
region,
- intel_get_pat_idx_uc(fd));
+ intel_get_pat_idx_uc(fd),
+ DEFAULT_MOCS_INDEX);
intel_buf_set_name(buf, name);
/* Make sure we close handle on destroy path */
diff --git a/lib/intel_bufops.c b/lib/intel_bufops.c
index 6b769fb9d..b61eb60de 100644
--- a/lib/intel_bufops.c
+++ b/lib/intel_bufops.c
@@ -857,7 +857,8 @@ static void __intel_buf_init(struct buf_ops *bops,
int width, int height, int bpp, int alignment,
uint32_t req_tiling, uint32_t compression,
uint64_t bo_size, int bo_stride,
- uint64_t region, uint8_t pat_index)
+ uint64_t region, uint8_t pat_index,
+ uint8_t mocs_index)
{
uint32_t tiling = req_tiling;
uint64_t size;
@@ -879,7 +880,7 @@ static void __intel_buf_init(struct buf_ops *bops,
buf->compression = compression;
buf->addr.offset = INTEL_BUF_INVALID_ADDRESS;
buf->pat_index = pat_index;
- buf->mocs_index = DEFAULT_MOCS_INDEX;
+ buf->mocs_index = mocs_index;
IGT_INIT_LIST_HEAD(&buf->link);
tile_width = __get_min_stride(width, bpp, tiling);
@@ -973,7 +974,8 @@ void intel_buf_init(struct buf_ops *bops,
region = bops->driver == INTEL_DRIVER_I915 ? I915_SYSTEM_MEMORY :
system_memory(bops->fd);
__intel_buf_init(bops, 0, buf, width, height, bpp, alignment,
- tiling, compression, 0, 0, region, DEFAULT_PAT_INDEX);
+ tiling, compression, 0, 0, region, DEFAULT_PAT_INDEX,
+ DEFAULT_MOCS_INDEX);
intel_buf_set_ownership(buf, true);
}
@@ -990,7 +992,8 @@ void intel_buf_init_in_region(struct buf_ops *bops,
uint64_t region)
{
__intel_buf_init(bops, 0, buf, width, height, bpp, alignment,
- tiling, compression, 0, 0, region, DEFAULT_PAT_INDEX);
+ tiling, compression, 0, 0, region, DEFAULT_PAT_INDEX,
+ DEFAULT_MOCS_INDEX);
intel_buf_set_ownership(buf, true);
}
@@ -1053,7 +1056,8 @@ void intel_buf_init_using_handle_and_size(struct buf_ops *bops,
igt_assert(handle);
igt_assert(size);
__intel_buf_init(bops, handle, buf, width, height, bpp, alignment,
- req_tiling, compression, size, 0, -1, DEFAULT_PAT_INDEX);
+ req_tiling, compression, size, 0, -1, DEFAULT_PAT_INDEX,
+ DEFAULT_MOCS_INDEX);
}
/**
@@ -1071,6 +1075,8 @@ void intel_buf_init_using_handle_and_size(struct buf_ops *bops,
* @stride: bo stride
* @region: region
* @pat_index: pat_index to use for the binding (only used on xe)
+ * @pat_index: mocs_index to use for operations using this intel_buf, like render
+ * copy.
*
* Function configures BO handle within intel_buf structure passed by the caller
* (with all its metadata - width, height, ...). Useful if BO was created
@@ -1089,11 +1095,12 @@ void intel_buf_init_full(struct buf_ops *bops,
uint64_t size,
int stride,
uint64_t region,
- uint8_t pat_index)
+ uint8_t pat_index,
+ uint8_t mocs_index)
{
__intel_buf_init(bops, handle, buf, width, height, bpp, alignment,
req_tiling, compression, size, stride, region,
- pat_index);
+ pat_index, mocs_index);
}
/**
@@ -1155,7 +1162,7 @@ struct intel_buf *intel_buf_create_using_handle_and_size(struct buf_ops *bops,
igt_assert(size);
return intel_buf_create_full(bops, handle, width, height, bpp, alignment,
req_tiling, compression, size, 0, -1,
- DEFAULT_PAT_INDEX);
+ DEFAULT_PAT_INDEX, DEFAULT_MOCS_INDEX);
}
struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
@@ -1167,7 +1174,8 @@ struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
uint64_t size,
int stride,
uint64_t region,
- uint8_t pat_index)
+ uint8_t pat_index,
+ uint8_t mocs_index)
{
struct intel_buf *buf;
@@ -1178,7 +1186,7 @@ struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
__intel_buf_init(bops, handle, buf, width, height, bpp, alignment,
req_tiling, compression, size, stride, region,
- pat_index);
+ pat_index, mocs_index);
return buf;
}
diff --git a/lib/intel_bufops.h b/lib/intel_bufops.h
index 60f7785fe..af2009b3d 100644
--- a/lib/intel_bufops.h
+++ b/lib/intel_bufops.h
@@ -158,7 +158,8 @@ void intel_buf_init_full(struct buf_ops *bops,
uint64_t size,
int stride,
uint64_t region,
- uint8_t pat_index);
+ uint8_t pat_index,
+ uint8_t mocs_index);
struct intel_buf *intel_buf_create(struct buf_ops *bops,
int width, int height,
@@ -191,7 +192,8 @@ struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
uint64_t size,
int stride,
uint64_t region,
- uint8_t pat_index);
+ uint8_t pat_index,
+ uint8_t mocs_index);
void intel_buf_destroy(struct intel_buf *buf);
static inline void intel_buf_set_pxp(struct intel_buf *buf, bool new_pxp_state)
diff --git a/tests/intel/kms_big_fb.c b/tests/intel/kms_big_fb.c
index 0bd79394b..f7f303d41 100644
--- a/tests/intel/kms_big_fb.c
+++ b/tests/intel/kms_big_fb.c
@@ -37,6 +37,7 @@
#include <string.h>
#include "i915/gem_create.h"
+#include "intel_mocs.h"
#include "intel_pat.h"
#include "xe/xe_ioctl.h"
#include "xe/xe_query.h"
@@ -206,7 +207,8 @@ static struct intel_buf *init_buf(data_t *data,
buf = intel_buf_create_full(data->bops, handle, width, height,
bpp, 0, tiling, 0, size, 0,
region,
- intel_get_pat_idx_uc(data->drm_fd));
+ intel_get_pat_idx_uc(data->drm_fd),
+ DEFAULT_MOCS_INDEX);
intel_buf_set_name(buf, buf_name);
intel_buf_set_ownership(buf, true);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index 9aa066004..9e4832929 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -20,6 +20,7 @@
#include "i915/intel_drrs.h"
#include "i915/intel_fbc.h"
+#include "intel_mocs.h"
#include "intel_pat.h"
#include "xe/xe_query.h"
@@ -256,7 +257,8 @@ static void run_test(data_t *data)
igt_fb_mod_to_tiling(data->fbs[1].modifier),
0, data->fbs[1].size, 0, is_xe_device(data->drm_fd) ?
system_memory(data->drm_fd) : 0,
- intel_get_pat_idx_uc(data->drm_fd));
+ intel_get_pat_idx_uc(data->drm_fd),
+ DEFAULT_MOCS_INDEX);
dst = intel_buf_create_full(data->bops, data->fbs[2].gem_handle,
data->fbs[2].width,
data->fbs[2].height,
@@ -264,7 +266,8 @@ static void run_test(data_t *data)
0, igt_fb_mod_to_tiling(data->fbs[2].modifier),
0, data->fbs[2].size, 0, is_xe_device(data->drm_fd) ?
system_memory(data->drm_fd) : 0,
- intel_get_pat_idx_uc(data->drm_fd));
+ intel_get_pat_idx_uc(data->drm_fd),
+ DEFAULT_MOCS_INDEX);
ibb = intel_bb_create(data->drm_fd, PAGE_SIZE);
spin = igt_spin_new(data->drm_fd, .ahnd = ibb->allocator_handle);
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index 3822b3081..c90612426 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -35,6 +35,7 @@
#include "igt.h"
#include "igt_sysfs.h"
#include "igt_psr.h"
+#include "intel_mocs.h"
#include "intel_pat.h"
#include <errno.h>
#include <stdbool.h>
@@ -421,7 +422,8 @@ static struct intel_buf *create_buf_from_fb(data_t *data,
handle = gem_open(data->drm_fd, name);
buf = intel_buf_create_full(data->bops, handle, width, height,
bpp, 0, tiling, 0, size, stride, region,
- intel_get_pat_idx_uc(data->drm_fd));
+ intel_get_pat_idx_uc(data->drm_fd),
+ DEFAULT_MOCS_INDEX);
intel_buf_set_ownership(buf, true);
return buf;
diff --git a/tests/intel/xe_intel_bb.c b/tests/intel/xe_intel_bb.c
index c3a4b5450..09164c41f 100644
--- a/tests/intel/xe_intel_bb.c
+++ b/tests/intel/xe_intel_bb.c
@@ -19,6 +19,7 @@
#include "igt.h"
#include "igt_crc.h"
#include "intel_bufops.h"
+#include "intel_mocs.h"
#include "intel_pat.h"
#include "xe/xe_ioctl.h"
#include "xe/xe_query.h"
@@ -393,7 +394,8 @@ static void create_in_region(struct buf_ops *bops, uint64_t region)
intel_buf_init_full(bops, handle, &buf,
width/4, height, 32, 0,
I915_TILING_NONE, 0,
- size, 0, region, DEFAULT_PAT_INDEX);
+ size, 0, region, DEFAULT_PAT_INDEX,
+ DEFAULT_MOCS_INDEX);
intel_buf_set_ownership(&buf, true);
intel_bb_add_intel_buf(ibb, &buf, false);
diff --git a/tests/intel/xe_pat.c b/tests/intel/xe_pat.c
index 3d7d7400c..6918ebe7e 100644
--- a/tests/intel/xe_pat.c
+++ b/tests/intel/xe_pat.c
@@ -388,11 +388,11 @@ static void pat_index_render(struct xe_pat_param *p)
intel_buf_init_full(bops, p->r1_bo, &src, width, height, bpp, 0,
I915_TILING_NONE, I915_COMPRESSION_NONE, size,
- stride, p->r1, p->r1_pat_index);
+ stride, p->r1, p->r1_pat_index, DEFAULT_MOCS_INDEX);
intel_buf_init_full(bops, p->r2_bo, &dst, width, height, bpp, 0,
I915_TILING_NONE, I915_COMPRESSION_NONE, size,
- stride, p->r2, p->r2_pat_index);
+ stride, p->r2, p->r2_pat_index, DEFAULT_MOCS_INDEX);
/* Ensure we always see zeroes for the initial KMD zeroing */
render_copy(ibb,
@@ -483,12 +483,12 @@ static void pat_index_dw(struct xe_pat_param *p)
intel_buf_init_full(bops, p->r1_bo, &r1_buf, width, height, bpp, 0,
I915_TILING_NONE, I915_COMPRESSION_NONE, size,
- stride, p->r1, p->r1_pat_index);
+ stride, p->r1, p->r1_pat_index, DEFAULT_MOCS_INDEX);
intel_bb_add_intel_buf(ibb, &r1_buf, true);
intel_buf_init_full(bops, p->r2_bo, &r2_buf, width, height, bpp, 0,
I915_TILING_NONE, I915_COMPRESSION_NONE, size,
- stride, p->r2, p->r2_pat_index);
+ stride, p->r2, p->r2_pat_index, DEFAULT_MOCS_INDEX);
intel_bb_add_intel_buf(ibb, &r2_buf, true);
/*
--
2.43.2
More information about the igt-dev
mailing list