From: Benjamin Otte Date: Sat, 24 Jun 2023 22:54:10 +0000 (+0200) Subject: vulkan: Split texture caching code X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~60^2~85 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ba502a50096e56dd9cccf9569491a173101c04a1;p=gtk4.git vulkan: Split texture caching code Instead of having one function that gets the image for the texture and uploads it if it doesn't exist yet, make it 2 functions: One to get the texture if it exists. One to assign an uploaded image to the texture. This way, we can potentially do the upload ourselves. --- diff --git a/gsk/vulkan/gskvulkanrenderer.c b/gsk/vulkan/gskvulkanrenderer.c index 7a42e1acb9..1de96bbfad 100644 --- a/gsk/vulkan/gskvulkanrenderer.c +++ b/gsk/vulkan/gskvulkanrenderer.c @@ -424,18 +424,24 @@ gsk_vulkan_renderer_clear_texture (gpointer p) } GskVulkanImage * -gsk_vulkan_renderer_ref_texture_image (GskVulkanRenderer *self, - GdkTexture *texture, - GskVulkanUploader *uploader) +gsk_vulkan_renderer_get_texture_image (GskVulkanRenderer *self, + GdkTexture *texture) { GskVulkanTextureData *data; - GskVulkanImage *image; data = gdk_texture_get_render_data (texture, self); if (data) - return g_object_ref (data->image); + return data->image; - image = gsk_vulkan_image_new_from_texture (uploader, texture); + return NULL; +} + +void +gsk_vulkan_renderer_add_texture_image (GskVulkanRenderer *self, + GdkTexture *texture, + GskVulkanImage *image) +{ + GskVulkanTextureData *data; data = g_new0 (GskVulkanTextureData, 1); data->image = image; @@ -451,7 +457,23 @@ gsk_vulkan_renderer_ref_texture_image (GskVulkanRenderer *self, { g_free (data); } +} + +GskVulkanImage * +gsk_vulkan_renderer_ref_texture_image (GskVulkanRenderer *self, + GdkTexture *texture, + GskVulkanUploader *uploader) +{ + GskVulkanImage *image; + + image = gsk_vulkan_renderer_get_texture_image (self, texture); + if (image) + return g_object_ref (image); + + image = gsk_vulkan_image_new_from_texture (uploader, texture); + gsk_vulkan_renderer_add_texture_image (self, texture, image); + return image; } diff --git a/gsk/vulkan/gskvulkanrendererprivate.h b/gsk/vulkan/gskvulkanrendererprivate.h index fd7d2c19f0..fdebb49235 100644 --- a/gsk/vulkan/gskvulkanrendererprivate.h +++ b/gsk/vulkan/gskvulkanrendererprivate.h @@ -5,6 +5,11 @@ G_BEGIN_DECLS +GskVulkanImage * gsk_vulkan_renderer_get_texture_image (GskVulkanRenderer *self, + GdkTexture *texture); +void gsk_vulkan_renderer_add_texture_image (GskVulkanRenderer *self, + GdkTexture *texture, + GskVulkanImage *image); GskVulkanImage * gsk_vulkan_renderer_ref_texture_image (GskVulkanRenderer *self, GdkTexture *texture, GskVulkanUploader *uploader);