From 41d80ac2770e9f8746c55fb170bed26ddf86bfad Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 20 Dec 2023 00:15:15 +0100 Subject: [PATCH] gpu: Add a boolean flag allow_dmabuf to the downloadop It can be set to force the downloadop to not create dmabuf textures. --- gsk/gpu/gskgpudownloadop.c | 7 ++++++- gsk/gpu/gskgpudownloadopprivate.h | 1 + gsk/gpu/gskgpuframe.c | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gsk/gpu/gskgpudownloadop.c b/gsk/gpu/gskgpudownloadop.c index 4e95c21974..c1c5517de9 100644 --- a/gsk/gpu/gskgpudownloadop.c +++ b/gsk/gpu/gskgpudownloadop.c @@ -28,6 +28,7 @@ struct _GskGpuDownloadOp GskGpuOp op; GskGpuImage *image; + gboolean allow_dmabuf; GdkGpuDownloadOpCreateFunc create_func; GskGpuDownloadFunc func; gpointer user_data; @@ -134,7 +135,8 @@ gsk_gpu_download_op_vk_command (GskGpuOp *op, gsize width, height, stride; #ifdef HAVE_DMABUF - self->texture = gsk_vulkan_image_to_dmabuf_texture (GSK_VULKAN_IMAGE (self->image)); + if (self->allow_dmabuf) + self->texture = gsk_vulkan_image_to_dmabuf_texture (GSK_VULKAN_IMAGE (self->image)); if (self->texture) { GskVulkanDevice *device = GSK_VULKAN_DEVICE (gsk_gpu_frame_get_device (frame)); @@ -301,6 +303,7 @@ static const GskGpuOpClass GSK_GPU_DOWNLOAD_OP_CLASS = { void gsk_gpu_download_op (GskGpuFrame *frame, GskGpuImage *image, + gboolean allow_dmabuf, GskGpuDownloadFunc func, gpointer user_data) { @@ -309,6 +312,7 @@ gsk_gpu_download_op (GskGpuFrame *frame, self = (GskGpuDownloadOp *) gsk_gpu_op_alloc (frame, &GSK_GPU_DOWNLOAD_OP_CLASS); self->image = g_object_ref (image); + self->allow_dmabuf = allow_dmabuf; self->func = func, self->user_data = user_data; } @@ -337,6 +341,7 @@ gsk_gpu_download_png_op (GskGpuFrame *frame, gsk_gpu_download_op (frame, image, + FALSE, gsk_gpu_download_save_png_cb, filename); } diff --git a/gsk/gpu/gskgpudownloadopprivate.h b/gsk/gpu/gskgpudownloadopprivate.h index 74860ab6e4..5d8f4d7df3 100644 --- a/gsk/gpu/gskgpudownloadopprivate.h +++ b/gsk/gpu/gskgpudownloadopprivate.h @@ -9,6 +9,7 @@ typedef void (* GskGpuDownloadFunc) (gpointe void gsk_gpu_download_op (GskGpuFrame *frame, GskGpuImage *image, + gboolean allow_dmabuf, GskGpuDownloadFunc func, gpointer user_data); diff --git a/gsk/gpu/gskgpuframe.c b/gsk/gpu/gskgpuframe.c index 04996069d2..88388af450 100644 --- a/gsk/gpu/gskgpuframe.c +++ b/gsk/gpu/gskgpuframe.c @@ -554,7 +554,7 @@ gsk_gpu_frame_record (GskGpuFrame *self, GSK_RENDER_PASS_PRESENT); if (texture) - gsk_gpu_download_op (self, target, copy_texture, texture); + gsk_gpu_download_op (self, target, TRUE, copy_texture, texture); } static void