diff --git a/gsk/gpu/gskglimage.c b/gsk/gpu/gskglimage.c index 23a8a64f1d..295bb4523a 100644 --- a/gsk/gpu/gskglimage.c +++ b/gsk/gpu/gskglimage.c @@ -88,7 +88,7 @@ gsk_gl_image_new_backbuffer (GskGLDevice *device, &self->gl_type, swizzle); - gsk_gpu_image_setup (GSK_GPU_IMAGE (self), format, width, height); + gsk_gpu_image_setup (GSK_GPU_IMAGE (self), 0, format, width, height); /* texture_id == 0 means backbuffer */ @@ -119,7 +119,7 @@ gsk_gl_image_new (GskGLDevice *device, &self->gl_type, swizzle); - gsk_gpu_image_setup (GSK_GPU_IMAGE (self), format, width, height); + gsk_gpu_image_setup (GSK_GPU_IMAGE (self), 0, format, width, height); glGenTextures (1, &self->texture_id); self->owns_texture = TRUE; diff --git a/gsk/gpu/gskgpuframe.c b/gsk/gpu/gskgpuframe.c index ac1ce3904e..2626d3e462 100644 --- a/gsk/gpu/gskgpuframe.c +++ b/gsk/gpu/gskgpuframe.c @@ -76,12 +76,12 @@ gsk_gpu_frame_cleanup (GskGpuFrame *self) } static GskGpuImage * -gsk_gpu_frame_default_upload_texture (GskGpuFrame *frame, +gsk_gpu_frame_default_upload_texture (GskGpuFrame *self, GdkTexture *texture) { GskGpuImage *image; - image = gsk_gpu_upload_texture_op_try (frame, texture); + image = gsk_gpu_upload_texture_op_try (self, texture); if (image) g_object_ref (image); diff --git a/gsk/gpu/gskgpuimage.c b/gsk/gpu/gskgpuimage.c index dd8f8625c5..c3dfb8c3a2 100644 --- a/gsk/gpu/gskgpuimage.c +++ b/gsk/gpu/gskgpuimage.c @@ -6,6 +6,7 @@ typedef struct _GskGpuImagePrivate GskGpuImagePrivate; struct _GskGpuImagePrivate { + GskGpuImageFlags flags; GdkMemoryFormat format; gsize width; gsize height; @@ -41,13 +42,15 @@ gsk_gpu_image_init (GskGpuImage *self) } void -gsk_gpu_image_setup (GskGpuImage *self, - GdkMemoryFormat format, - gsize width, - gsize height) +gsk_gpu_image_setup (GskGpuImage *self, + GskGpuImageFlags flags, + GdkMemoryFormat format, + gsize width, + gsize height) { GskGpuImagePrivate *priv = gsk_gpu_image_get_instance_private (self); + priv->flags = flags; priv->format = format; priv->width = width; priv->height = height; @@ -77,6 +80,23 @@ gsk_gpu_image_get_height (GskGpuImage *self) return priv->height; } +GskGpuImageFlags +gsk_gpu_image_get_flags (GskGpuImage *self) +{ + GskGpuImagePrivate *priv = gsk_gpu_image_get_instance_private (self); + + return priv->flags; +} + +void +gsk_gpu_image_set_flags (GskGpuImage *self, + GskGpuImageFlags flags) +{ + GskGpuImagePrivate *priv = gsk_gpu_image_get_instance_private (self); + + priv->flags |= flags; +} + void gsk_gpu_image_get_projection_matrix (GskGpuImage *self, graphene_matrix_t *out_projection) diff --git a/gsk/gpu/gskgpuimageprivate.h b/gsk/gpu/gskgpuimageprivate.h index eaca0ef4a3..a4b1405c77 100644 --- a/gsk/gpu/gskgpuimageprivate.h +++ b/gsk/gpu/gskgpuimageprivate.h @@ -31,6 +31,7 @@ struct _GskGpuImageClass GType gsk_gpu_image_get_type (void) G_GNUC_CONST; void gsk_gpu_image_setup (GskGpuImage *self, + GskGpuImageFlags flags, GdkMemoryFormat format, gsize width, gsize height); @@ -38,6 +39,9 @@ void gsk_gpu_image_setup (GskGpuI GdkMemoryFormat gsk_gpu_image_get_format (GskGpuImage *self); gsize gsk_gpu_image_get_width (GskGpuImage *self); gsize gsk_gpu_image_get_height (GskGpuImage *self); +GskGpuImageFlags gsk_gpu_image_get_flags (GskGpuImage *self); +void gsk_gpu_image_set_flags (GskGpuImage *self, + GskGpuImageFlags flags); void gsk_gpu_image_get_projection_matrix (GskGpuImage *self, graphene_matrix_t *out_projection); diff --git a/gsk/gpu/gskgputypesprivate.h b/gsk/gpu/gskgputypesprivate.h index 5c01d117cb..d1135d11fd 100644 --- a/gsk/gpu/gskgputypesprivate.h +++ b/gsk/gpu/gskgputypesprivate.h @@ -16,6 +16,10 @@ typedef struct _GskGpuOpClass GskGpuOpClass; typedef struct _GskGpuShaderOp GskGpuShaderOp; typedef struct _GskGpuShaderOpClass GskGpuShaderOpClass; +typedef enum { + GSK_GPU_IMAGE_EXTERNAL = (1 << 0), +} GskGpuImageFlags; + typedef enum { GSK_GPU_SAMPLER_DEFAULT, GSK_GPU_SAMPLER_TRANSPARENT, diff --git a/gsk/gpu/gskvulkanimage.c b/gsk/gpu/gskvulkanimage.c index 39f313e094..5b3a2fcfd5 100644 --- a/gsk/gpu/gskvulkanimage.c +++ b/gsk/gpu/gskvulkanimage.c @@ -617,7 +617,7 @@ gsk_vulkan_image_new (GskVulkanDevice *device, self->vk_image_layout = layout; self->vk_access = access; - gsk_gpu_image_setup (GSK_GPU_IMAGE (self), format, width, height); + gsk_gpu_image_setup (GSK_GPU_IMAGE (self), 0, format, width, height); GSK_VK_CHECK (vkCreateImage, vk_device, &(VkImageCreateInfo) { @@ -743,7 +743,7 @@ gsk_vulkan_image_new_for_swapchain (GskVulkanDevice *device, self->vk_image_layout = VK_IMAGE_LAYOUT_UNDEFINED; self->vk_access = 0; - gsk_gpu_image_setup (GSK_GPU_IMAGE (self), GDK_MEMORY_DEFAULT, width, height); + gsk_gpu_image_setup (GSK_GPU_IMAGE (self), 0, GDK_MEMORY_DEFAULT, width, height); gsk_vulkan_image_create_view (self, VK_NULL_HANDLE,