diff --git a/include/render/drm_format_set.h b/include/render/drm_format_set.h new file mode 100644 index 00000000..ae1fcc47 --- /dev/null +++ b/include/render/drm_format_set.h @@ -0,0 +1,8 @@ +#ifndef RENDER_DRM_FORMAT_SET_H +#define RENDER_DRM_FORMAT_SET_H + +#include + +struct wlr_drm_format *wlr_drm_format_dup(const struct wlr_drm_format *format); + +#endif diff --git a/render/drm_format_set.c b/render/drm_format_set.c index cbcc0875..54fc8ae1 100644 --- a/render/drm_format_set.c +++ b/render/drm_format_set.c @@ -6,6 +6,7 @@ #include #include #include +#include "render/drm_format_set.h" void wlr_drm_format_set_finish(struct wlr_drm_format_set *set) { for (size_t i = 0; i < set->len; ++i) { @@ -125,3 +126,14 @@ bool wlr_drm_format_set_add(struct wlr_drm_format_set *set, uint32_t format, set->formats[set->len++] = fmt; return true; } + +struct wlr_drm_format *wlr_drm_format_dup(const struct wlr_drm_format *format) { + size_t format_size = sizeof(struct wlr_drm_format) + + format->len * sizeof(format->modifiers[0]); + struct wlr_drm_format *duped_format = malloc(format_size); + if (duped_format == NULL) { + return NULL; + } + memcpy(duped_format, format, format_size); + return duped_format; +}