drm-formats: add weston_drm_format_array_count_pairs()

It simply returns the number of format/modifier pairs in the array. This
will be useful for the next commits, in which we add support for dma-buf
feedback.

Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
Leandro Ribeiro 2021-10-06 12:05:40 -03:00
parent f9787ba482
commit 60c7fee48d
3 changed files with 26 additions and 0 deletions

View File

@ -184,6 +184,24 @@ weston_drm_format_array_find_format(const struct weston_drm_format_array *format
return NULL; return NULL;
} }
/**
* Counts the number of format/modifier pairs in a weston_drm_format_array
*
* @param formats The weston_drm_format_array
* @return The number of format/modifier pairs in the array
*/
WL_EXPORT unsigned int
weston_drm_format_array_count_pairs(const struct weston_drm_format_array *formats)
{
struct weston_drm_format *fmt;
unsigned int num_pairs = 0;
wl_array_for_each(fmt, &formats->arr)
num_pairs += fmt->modifiers.size / sizeof(uint64_t);
return num_pairs;
}
/** /**
* Compare the content of two weston_drm_format_array * Compare the content of two weston_drm_format_array
* *

View File

@ -358,6 +358,9 @@ struct weston_drm_format *
weston_drm_format_array_find_format(const struct weston_drm_format_array *formats, weston_drm_format_array_find_format(const struct weston_drm_format_array *formats,
uint32_t format); uint32_t format);
unsigned int
weston_drm_format_array_count_pairs(const struct weston_drm_format_array *formats);
bool bool
weston_drm_format_array_equal(const struct weston_drm_format_array *formats_A, weston_drm_format_array_equal(const struct weston_drm_format_array *formats_A,
const struct weston_drm_format_array *formats_B); const struct weston_drm_format_array *formats_B);

View File

@ -81,6 +81,8 @@ TEST(basic_operations)
weston_drm_format_array_init(&format_array); weston_drm_format_array_init(&format_array);
assert(weston_drm_format_array_count_pairs(&format_array) == 0);
ADD_FORMATS_AND_MODS(&format_array, formats, modifiers); ADD_FORMATS_AND_MODS(&format_array, formats, modifiers);
for (i = 0; i < ARRAY_LENGTH(formats); i++) { for (i = 0; i < ARRAY_LENGTH(formats); i++) {
@ -90,6 +92,9 @@ TEST(basic_operations)
assert(weston_drm_format_has_modifier(fmt, modifiers[j])); assert(weston_drm_format_has_modifier(fmt, modifiers[j]));
} }
assert(weston_drm_format_array_count_pairs(&format_array) ==
ARRAY_LENGTH(formats) * ARRAY_LENGTH(modifiers));
weston_drm_format_array_fini(&format_array); weston_drm_format_array_fini(&format_array);
} }