gpu: Handle flags for images

For now, the flags are just there because, and nobody uses them yet.
The only flag is EXTERNAL, which for now I'm using for YUV buffers,
though it's a bit undefined what that means.
This commit is contained in:
Benjamin Otte
2023-10-21 08:26:24 +02:00
parent 2cb06f212b
commit f21938cae6
6 changed files with 38 additions and 10 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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)

View File

@@ -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);

View File

@@ -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,

View File

@@ -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,