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:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user