Hi Tvrtko,
On 2025-10-03 at 14:05:17 +0100, Tvrtko Ursulin wrote:
> Using the uncached MOCS for displayable surfaces is not always correct,
> especially when CCS compression is used with which some platforms require
> a special uncached entry, otherwise writes get unexpectedly cached.
>
> Lets copy the knowledge of what is the correct MOCS for displayable
> surfaces from Mesa and add some new helpers to get it.
>
> Signed-off-by: Tvrtko Ursulin <[email protected]>
> Suggested-by: Ville Syrjälä <[email protected]>
> ---
> v2:
> * Renamed external_index to displayable_index. (Ville)
> ---
> lib/igt_fb.c | 2 +-
> lib/intel_bufops.c | 2 ++
> lib/intel_mocs.c | 21 +++++++++++++++++++--
> lib/intel_mocs.h | 2 ++
> 4 files changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index 03ede3a6fa20..b5a16f9cbe90 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -2712,7 +2712,7 @@ igt_fb_create_intel_buf(int fd, struct buf_ops *bops,
> fb->strides[0],
> region,
> intel_get_pat_idx_uc(fd),
> - DEFAULT_MOCS_INDEX);
> + DISPLAYABLE_MOCS_INDEX);
> intel_buf_set_name(buf, name);
>
[cut]
> @@ -63,6 +71,15 @@ uint8_t intel_get_uc_mocs_index(int fd)
> return mocs.uc_index;
> }
>
All new lib functions needs to be documented. As this was
already merged maybe someone could document a bunch of
these similar functions here.
Regards,
Kamil
> +uint8_t intel_get_displayable_mocs_index(int fd)
> +{
> + struct drm_intel_mocs_index mocs;
> +
> + get_mocs_index(fd, &mocs);
> +
> + return mocs.displayable_index;
> +}
> +
> uint8_t intel_get_defer_to_pat_mocs_index(int fd)
> {
> struct drm_intel_mocs_index mocs;
> diff --git a/lib/intel_mocs.h b/lib/intel_mocs.h
> index 8597286d259d..394bb41be042 100644
> --- a/lib/intel_mocs.h
> +++ b/lib/intel_mocs.h
> @@ -9,9 +9,11 @@
> #include <stdint.h>
>
> #define DEFAULT_MOCS_INDEX ((uint8_t)-1)
> +#define DISPLAYABLE_MOCS_INDEX ((uint8_t)-2)
>
> uint8_t intel_get_wb_mocs_index(int fd);
> uint8_t intel_get_uc_mocs_index(int fd);
> +uint8_t intel_get_displayable_mocs_index(int fd);
> uint8_t intel_get_defer_to_pat_mocs_index(int fd);
>
> #endif /* _INTEL_MOCS_H */
> --
> 2.48.0
>