drm_format_set: Add wlr_drm_format_set_remove

wlr_drm_format_set_remove lets you remove a modifier from the specified
format, useful for filtering implicit modifiers.
This commit is contained in:
Kenny Levinsen 2024-11-07 15:40:43 +01:00
parent 014023c14f
commit 70d3635985
2 changed files with 20 additions and 0 deletions

View File

@ -69,6 +69,9 @@ void wlr_drm_format_set_finish(struct wlr_drm_format_set *set);
const struct wlr_drm_format *wlr_drm_format_set_get(
const struct wlr_drm_format_set *set, uint32_t format);
bool wlr_drm_format_set_remove(struct wlr_drm_format_set *set, uint32_t format,
uint64_t modifier);
bool wlr_drm_format_set_has(const struct wlr_drm_format_set *set,
uint32_t format, uint64_t modifier);

View File

@ -86,6 +86,23 @@ bool wlr_drm_format_set_add(struct wlr_drm_format_set *set, uint32_t format,
return true;
}
bool wlr_drm_format_set_remove(struct wlr_drm_format_set *set, uint32_t format,
uint64_t modifier) {
struct wlr_drm_format *fmt = format_set_get(set, format);
if (fmt == NULL) {
return false;
}
for (size_t idx = 0; idx < fmt->len; idx++) {
if (fmt->modifiers[idx] == modifier) {
memmove(&fmt->modifiers[idx], &fmt->modifiers[idx+1], fmt->len - idx - 1);
fmt->len--;
return true;
}
}
return false;
}
void wlr_drm_format_init(struct wlr_drm_format *fmt, uint32_t format) {
*fmt = (struct wlr_drm_format){
.format = format,