From 6835cb7f86223e33aaece0e10be3e87b118f1af5 Mon Sep 17 00:00:00 2001 From: Chad Versace Date: Wed, 5 Aug 2020 09:23:39 -0700 Subject: [PATCH] isl: Make public the list of modifiers This allows Vulkan and GL to iterate over the full list of modifiers instead of hard-coding in various places the "same" list as isl. (Anvil's list has already diverged from isl's list. It omits Gen12 modifiers). Reviewed-by: Lionel Landwerlin Reviewed-by: Jason Ekstrand --- src/intel/isl/isl.h | 7 +++++++ src/intel/isl/isl_drm.c | 13 +++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h index fff52afce2b..5ed615a8b53 100644 --- a/src/intel/isl/isl.h +++ b/src/intel/isl/isl.h @@ -1848,6 +1848,13 @@ isl_aux_state_has_valid_aux(enum isl_aux_state state) return state != ISL_AUX_STATE_AUX_INVALID; } +extern const struct isl_drm_modifier_info isl_drm_modifier_info_list[]; + +#define isl_drm_modifier_info_for_each(__info) \ + for (const struct isl_drm_modifier_info *__info = isl_drm_modifier_info_list; \ + __info->modifier != DRM_FORMAT_MOD_INVALID; \ + ++__info) + const struct isl_drm_modifier_info * ATTRIBUTE_CONST isl_drm_modifier_get_info(uint64_t modifier); diff --git a/src/intel/isl/isl_drm.c b/src/intel/isl/isl_drm.c index 04b50fc7912..79a9a1c88d7 100644 --- a/src/intel/isl/isl_drm.c +++ b/src/intel/isl/isl_drm.c @@ -73,7 +73,9 @@ isl_tiling_from_i915_tiling(uint32_t tiling) unreachable("Invalid i915 tiling"); } -static const struct isl_drm_modifier_info modifier_info[] = { +/** Sentinel is DRM_FORMAT_MOD_INVALID. */ +const struct isl_drm_modifier_info +isl_drm_modifier_info_list[] = { { .modifier = DRM_FORMAT_MOD_NONE, .name = "DRM_FORMAT_MOD_NONE", @@ -110,14 +112,17 @@ static const struct isl_drm_modifier_info modifier_info[] = { .aux_usage = ISL_AUX_USAGE_MC, .supports_clear_color = false, }, + { + .modifier = DRM_FORMAT_MOD_INVALID, + }, }; const struct isl_drm_modifier_info * isl_drm_modifier_get_info(uint64_t modifier) { - for (unsigned i = 0; i < ARRAY_SIZE(modifier_info); i++) { - if (modifier_info[i].modifier == modifier) - return &modifier_info[i]; + isl_drm_modifier_info_for_each(info) { + if (info->modifier == modifier) + return info; } return NULL;