From dcf7fec1c6e2bffc70862836c0dbde4f0ce4f0e5 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 6 Aug 2024 15:24:24 -0400 Subject: [PATCH] vulkan: Allow specifying color state for dmabufs When createing dmabuf textures, allow specifying a color state. --- gsk/gpu/gskgpudownloadop.c | 2 +- gsk/gpu/gskvulkanimage.c | 8 ++++++-- gsk/gpu/gskvulkanimageprivate.h | 3 ++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/gsk/gpu/gskgpudownloadop.c b/gsk/gpu/gskgpudownloadop.c index 182929d9ad..ed1681ca6c 100644 --- a/gsk/gpu/gskgpudownloadop.c +++ b/gsk/gpu/gskgpudownloadop.c @@ -143,7 +143,7 @@ gsk_gpu_download_op_vk_command (GskGpuOp *op, #ifdef HAVE_DMABUF if (self->allow_dmabuf) - self->texture = gsk_vulkan_image_to_dmabuf_texture (GSK_VULKAN_IMAGE (self->image)); + self->texture = gsk_vulkan_image_to_dmabuf_texture (GSK_VULKAN_IMAGE (self->image), NULL); if (self->texture) { GskGpuDevice *device = gsk_gpu_frame_get_device (frame); diff --git a/gsk/gpu/gskvulkanimage.c b/gsk/gpu/gskvulkanimage.c index 38b971d2e4..00f5bb1b6e 100644 --- a/gsk/gpu/gskvulkanimage.c +++ b/gsk/gpu/gskvulkanimage.c @@ -1176,7 +1176,8 @@ gsk_vulkan_image_get_n_planes (GskVulkanImage *self, } GdkTexture * -gsk_vulkan_image_to_dmabuf_texture (GskVulkanImage *self) +gsk_vulkan_image_to_dmabuf_texture (GskVulkanImage *self, + GdkColorState *color_state) { GskGpuImage *image = GSK_GPU_IMAGE (self); GdkDmabufTextureBuilder *builder; @@ -1230,7 +1231,7 @@ gsk_vulkan_image_to_dmabuf_texture (GskVulkanImage *self) gdk_dmabuf_texture_builder_set_modifier (builder, properties.drmFormatModifier); gdk_dmabuf_texture_builder_set_premultiplied (builder, !(gsk_gpu_image_get_flags (image) & GSK_GPU_IMAGE_STRAIGHT_ALPHA)); gdk_dmabuf_texture_builder_set_n_planes (builder, n_planes); - + for (plane = 0; plane < n_planes; plane++) { static const VkImageAspectFlagBits aspect[GDK_DMABUF_MAX_PLANES] = { @@ -1252,6 +1253,9 @@ gsk_vulkan_image_to_dmabuf_texture (GskVulkanImage *self) gdk_dmabuf_texture_builder_set_offset (builder, plane, layout.offset); } + if (color_state) + gdk_dmabuf_texture_builder_set_color_state (builder, color_state); + texture = gdk_dmabuf_texture_builder_build (builder, close_the_fd, GINT_TO_POINTER (fd), &error); g_object_unref (builder); if (texture == NULL) diff --git a/gsk/gpu/gskvulkanimageprivate.h b/gsk/gpu/gskvulkanimageprivate.h index 1db0e9fe2b..ad3d80cd13 100644 --- a/gsk/gpu/gskvulkanimageprivate.h +++ b/gsk/gpu/gskvulkanimageprivate.h @@ -44,7 +44,8 @@ GskGpuImage * gsk_vulkan_image_new_for_dmabuf (GskVulk gsize height, const GdkDmabuf *dmabuf, gboolean premultiplied); -GdkTexture * gsk_vulkan_image_to_dmabuf_texture (GskVulkanImage *self); +GdkTexture * gsk_vulkan_image_to_dmabuf_texture (GskVulkanImage *self, + GdkColorState *color_state); #endif guchar * gsk_vulkan_image_get_data (GskVulkanImage *self,