testdmabuf: Add a --unpremultiplied option

This lets us test handling of straight-alpha dmabufs.
This commit is contained in:
Matthias Clasen
2023-12-14 13:23:19 -05:00
parent 79009d4158
commit bd3afd1006

View File

@@ -433,9 +433,11 @@ texture_builder_set_planes (GdkDmabufTextureBuilder *builder,
static GdkTexture * static GdkTexture *
make_dmabuf_texture (const char *filename, make_dmabuf_texture (const char *filename,
guint32 format, guint32 format,
gboolean disjoint) gboolean disjoint,
gboolean premultiplied)
{ {
GdkTexture *texture; GdkTexture *texture;
GdkTextureDownloader *downloader;
int width, height; int width, height;
gsize rgb_stride, rgb_size; gsize rgb_stride, rgb_size;
guchar *rgb_data; guchar *rgb_data;
@@ -459,7 +461,15 @@ make_dmabuf_texture (const char *filename,
rgb_data = g_new0 (guchar, rgb_size); rgb_data = g_new0 (guchar, rgb_size);
gdk_texture_download (texture, rgb_data, rgb_stride); downloader = gdk_texture_downloader_new (texture);
if (premultiplied)
gdk_texture_downloader_set_format (downloader, GDK_MEMORY_B8G8R8A8_PREMULTIPLIED);
else
gdk_texture_downloader_set_format (downloader, GDK_MEMORY_B8G8R8A8);
gdk_texture_downloader_download_into (downloader, rgb_data, rgb_stride);
gdk_texture_downloader_free (downloader);
g_object_unref (texture); g_object_unref (texture);
@@ -470,6 +480,7 @@ make_dmabuf_texture (const char *filename,
gdk_dmabuf_texture_builder_set_height (builder, height); gdk_dmabuf_texture_builder_set_height (builder, height);
gdk_dmabuf_texture_builder_set_fourcc (builder, format); gdk_dmabuf_texture_builder_set_fourcc (builder, format);
gdk_dmabuf_texture_builder_set_modifier (builder, DRM_FORMAT_MOD_LINEAR); gdk_dmabuf_texture_builder_set_modifier (builder, DRM_FORMAT_MOD_LINEAR);
gdk_dmabuf_texture_builder_set_premultiplied (builder, premultiplied);
if (format == DRM_FORMAT_XRGB8888 || if (format == DRM_FORMAT_XRGB8888 ||
format == DRM_FORMAT_ARGB8888) format == DRM_FORMAT_ARGB8888)
@@ -627,6 +638,7 @@ main (int argc, char *argv[])
char *filename; char *filename;
guint32 format; guint32 format;
gboolean disjoint = FALSE; gboolean disjoint = FALSE;
gboolean premultiplied = TRUE;
gboolean decorated = TRUE; gboolean decorated = TRUE;
unsigned int i; unsigned int i;
const char *save_filename = NULL; const char *save_filename = NULL;
@@ -637,6 +649,8 @@ main (int argc, char *argv[])
disjoint = TRUE; disjoint = TRUE;
else if (g_str_equal (argv[i], "--undecorated")) else if (g_str_equal (argv[i], "--undecorated"))
decorated = FALSE; decorated = FALSE;
else if (g_str_equal (argv[i], "--unpremultiplied"))
premultiplied = FALSE;
else if (g_str_equal (argv[i], "--download-to")) else if (g_str_equal (argv[i], "--download-to"))
{ {
i++; i++;
@@ -663,7 +677,7 @@ main (int argc, char *argv[])
/* Get the list of supported formats with GDK_DEBUG=opengl */ /* Get the list of supported formats with GDK_DEBUG=opengl */
gdk_display_get_dmabuf_formats (gdk_display_get_default ()); gdk_display_get_dmabuf_formats (gdk_display_get_default ());
texture = make_dmabuf_texture (filename, format, disjoint); texture = make_dmabuf_texture (filename, format, disjoint, premultiplied);
if (save_filename) if (save_filename)
gdk_texture_save_to_png (texture, save_filename); gdk_texture_save_to_png (texture, save_filename);