diff --git a/gsk/gpu/gskgpunodeprocessor.c b/gsk/gpu/gskgpunodeprocessor.c index bbfef9d041..dadb6cf9a0 100644 --- a/gsk/gpu/gskgpunodeprocessor.c +++ b/gsk/gpu/gskgpunodeprocessor.c @@ -15,6 +15,7 @@ #include "gskgpucolormatrixopprivate.h" #include "gskgpucoloropprivate.h" #include "gskgpuconicgradientopprivate.h" +#include "gskgpuconvertopprivate.h" #include "gskgpucrossfadeopprivate.h" #include "gskgpudescriptorsprivate.h" #include "gskgpudeviceprivate.h" @@ -28,7 +29,6 @@ #include "gskgpurenderpassopprivate.h" #include "gskgpuroundedcoloropprivate.h" #include "gskgpuscissoropprivate.h" -#include "gskgpustraightalphaopprivate.h" #include "gskgputextureopprivate.h" #include "gskgpuuploadopprivate.h" @@ -42,6 +42,7 @@ #include "gsktransformprivate.h" #include "gskprivate.h" +#include "gdk/gdkcolorstateprivate.h" #include "gdk/gdkrgbaprivate.h" #include "gdk/gdksubsurfaceprivate.h" @@ -557,14 +558,18 @@ gsk_gpu_node_processor_image_op (GskGpuNodeProcessor *self, if (gsk_gpu_image_get_flags (image) & GSK_GPU_IMAGE_STRAIGHT_ALPHA) { - gsk_gpu_straight_alpha_op (self->frame, - gsk_gpu_clip_get_shader_clip (&self->clip, &self->offset, rect), - self->opacity, - self->desc, - descriptor, - rect, - &self->offset, - tex_rect); + gsk_gpu_convert_op (self->frame, + gsk_gpu_clip_get_shader_clip (&self->clip, &self->offset, rect), + GDK_COLOR_STATE_SRGB, + FALSE, + GDK_COLOR_STATE_SRGB, + TRUE, + self->opacity, + self->desc, + descriptor, + rect, + &self->offset, + tex_rect); } else if (self->opacity < 1.0) { diff --git a/gsk/gpu/gskgpustraightalphaop.c b/gsk/gpu/gskgpustraightalphaop.c deleted file mode 100644 index 1e9b784627..0000000000 --- a/gsk/gpu/gskgpustraightalphaop.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "config.h" - -#include "gskgpustraightalphaopprivate.h" - -#include "gskgpuframeprivate.h" -#include "gskgpuprintprivate.h" -#include "gskrectprivate.h" - -#include "gpu/shaders/gskgpustraightalphainstance.h" - -#define VARIATION_OPACITY (1 << 0) -#define VARIATION_STRAIGHT_ALPHA (1 << 1) - -typedef struct _GskGpuStraightAlphaOp GskGpuStraightAlphaOp; - -struct _GskGpuStraightAlphaOp -{ - GskGpuShaderOp op; -}; - -static void -gsk_gpu_straight_alpha_op_print_instance (GskGpuShaderOp *shader, - gpointer instance_, - GString *string) -{ - GskGpuStraightalphaInstance *instance = (GskGpuStraightalphaInstance *) instance_; - - gsk_gpu_print_rect (string, instance->rect); - gsk_gpu_print_image_descriptor (string, shader->desc, instance->tex_id); -} - -static const GskGpuShaderOpClass GSK_GPU_STRAIGHT_ALPHA_OP_CLASS = { - { - GSK_GPU_OP_SIZE (GskGpuStraightAlphaOp), - GSK_GPU_STAGE_SHADER, - gsk_gpu_shader_op_finish, - gsk_gpu_shader_op_print, -#ifdef GDK_RENDERING_VULKAN - gsk_gpu_shader_op_vk_command, -#endif - gsk_gpu_shader_op_gl_command - }, - "gskgpustraightalpha", - sizeof (GskGpuStraightalphaInstance), -#ifdef GDK_RENDERING_VULKAN - &gsk_gpu_straightalpha_info, -#endif - gsk_gpu_straight_alpha_op_print_instance, - gsk_gpu_straightalpha_setup_attrib_locations, - gsk_gpu_straightalpha_setup_vao -}; - -void -gsk_gpu_straight_alpha_op (GskGpuFrame *frame, - GskGpuShaderClip clip, - float opacity, - GskGpuDescriptors *desc, - guint32 descriptor, - const graphene_rect_t *rect, - const graphene_point_t *offset, - const graphene_rect_t *tex_rect) -{ - GskGpuStraightalphaInstance *instance; - - gsk_gpu_shader_op_alloc (frame, - &GSK_GPU_STRAIGHT_ALPHA_OP_CLASS, - (opacity < 1.0 ? VARIATION_OPACITY : 0) | - VARIATION_STRAIGHT_ALPHA, - clip, - desc, - &instance); - - gsk_gpu_rect_to_float (rect, offset, instance->rect); - gsk_gpu_rect_to_float (tex_rect, offset, instance->tex_rect); - instance->tex_id = descriptor; - instance->opacity = opacity; -} diff --git a/gsk/gpu/gskgpustraightalphaopprivate.h b/gsk/gpu/gskgpustraightalphaopprivate.h deleted file mode 100644 index 127fc44bfa..0000000000 --- a/gsk/gpu/gskgpustraightalphaopprivate.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include "gskgpushaderopprivate.h" - -#include - -G_BEGIN_DECLS - -void gsk_gpu_straight_alpha_op (GskGpuFrame *frame, - GskGpuShaderClip clip, - float opacity, - GskGpuDescriptors *desc, - guint32 descriptor, - const graphene_rect_t *rect, - const graphene_point_t *offset, - const graphene_rect_t *tex_rect); - - -G_END_DECLS - diff --git a/gsk/gpu/shaders/gskgpustraightalpha.glsl b/gsk/gpu/shaders/gskgpustraightalpha.glsl deleted file mode 100644 index 22e4b6f020..0000000000 --- a/gsk/gpu/shaders/gskgpustraightalpha.glsl +++ /dev/null @@ -1,58 +0,0 @@ -#include "common.glsl" - -#define VARIATION_OPACITY (1u << 0) -#define VARIATION_STRAIGHT_ALPHA (1u << 1) - -#define HAS_VARIATION(var) ((GSK_VARIATION & var) == var) - -PASS(0) vec2 _pos; -PASS_FLAT(1) Rect _rect; -PASS(2) vec2 _tex_coord; -PASS_FLAT(3) uint _tex_id; -PASS_FLAT(4) float _opacity; - - -#ifdef GSK_VERTEX_SHADER - -IN(0) vec4 in_rect; -IN(1) vec4 in_tex_rect; -IN(2) uint in_tex_id; -IN(3) float in_opacity; - -void -run (out vec2 pos) -{ - Rect r = rect_from_gsk (in_rect); - - pos = rect_get_position (r); - - _pos = pos; - _rect = r; - _tex_coord = rect_get_coord (rect_from_gsk (in_tex_rect), pos); - _tex_id = in_tex_id; - _opacity = in_opacity; -} - -#endif - - - -#ifdef GSK_FRAGMENT_SHADER - -void -run (out vec4 color, - out vec2 position) -{ - float alpha = rect_coverage (_rect, _pos); - if (HAS_VARIATION (VARIATION_OPACITY)) - alpha *= _opacity; - - if (HAS_VARIATION (VARIATION_STRAIGHT_ALPHA)) - color = gsk_texture_straight_alpha (_tex_id, _tex_coord) * alpha; - else - color = gsk_texture (_tex_id, _tex_coord) * alpha; - - position = _pos; -} - -#endif diff --git a/gsk/gpu/shaders/meson.build b/gsk/gpu/shaders/meson.build index 4aedd7dd8e..59d4288a2a 100644 --- a/gsk/gpu/shaders/meson.build +++ b/gsk/gpu/shaders/meson.build @@ -25,7 +25,6 @@ gsk_private_gpu_shaders = files([ 'gskgpumask.glsl', 'gskgpuradialgradient.glsl', 'gskgpuroundedcolor.glsl', - 'gskgpustraightalpha.glsl', 'gskgputexture.glsl', ]) diff --git a/gsk/meson.build b/gsk/meson.build index 8a2ff64c7a..a7768fbd2a 100644 --- a/gsk/meson.build +++ b/gsk/meson.build @@ -108,7 +108,6 @@ gsk_private_sources = files([ 'gpu/gskgpuroundedcolorop.c', 'gpu/gskgpushaderop.c', 'gpu/gskgpuscissorop.c', - 'gpu/gskgpustraightalphaop.c', 'gpu/gskgputextureop.c', 'gpu/gskgpuuploadop.c', ])