From 3e620a8fe5d4ba9efcc91aea3a11966e833f38b8 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 15 May 2023 02:24:50 +0200 Subject: [PATCH] vulkan: Split generic code off No need to duplicate code in shaders when it can be shared. --- gsk/vulkan/resources/color.vert | 18 ++++---------- gsk/vulkan/resources/common.vert.glsl | 34 +++++++++++++++++++++++++++ gsk/vulkan/resources/meson.build | 1 + 3 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 gsk/vulkan/resources/common.vert.glsl diff --git a/gsk/vulkan/resources/color.vert b/gsk/vulkan/resources/color.vert index cc2a853b5c..bda02426e9 100644 --- a/gsk/vulkan/resources/color.vert +++ b/gsk/vulkan/resources/color.vert @@ -1,6 +1,6 @@ #version 420 core -#include "clip.vert.glsl" +#include "common.vert.glsl" #include "rect.vert.glsl" layout(location = 0) in vec4 inRect; @@ -10,19 +10,9 @@ layout(location = 0) out vec2 outPos; layout(location = 1) out flat Rect outRect; layout(location = 2) out flat vec4 outColor; -vec2 offsets[6] = { vec2(0.0, 0.0), - vec2(1.0, 0.0), - vec2(0.0, 1.0), - vec2(0.0, 1.0), - vec2(1.0, 0.0), - vec2(1.0, 1.0) }; - void main() { - Rect rect = rect_round_larger (clip_rect (rect_from_gsk (inRect))); - - vec2 pos = mix (rect.bounds.xy, rect.bounds.zw, offsets[gl_VertexIndex]); - gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); - outPos = pos; - outRect = rect_from_gsk (inRect); + Rect r = rect_from_gsk (inRect); + outPos = set_position_from_rect (r); + outRect = r; outColor = inColor; } diff --git a/gsk/vulkan/resources/common.vert.glsl b/gsk/vulkan/resources/common.vert.glsl new file mode 100644 index 0000000000..797a4171a5 --- /dev/null +++ b/gsk/vulkan/resources/common.vert.glsl @@ -0,0 +1,34 @@ +#ifndef _COMMON_VERT_ +#define _COMMON_VERT_ + +#include "clip.vert.glsl" +#include "constants.glsl" +#include "rect.glsl" + +vec2 offsets[6] = { vec2(0.0, 0.0), + vec2(1.0, 0.0), + vec2(0.0, 1.0), + vec2(0.0, 1.0), + vec2(1.0, 0.0), + vec2(1.0, 1.0) }; + +vec2 +set_position_from_rect (Rect rect) +{ + Rect r = rect_round_larger (clip_rect (rect)); + + vec2 pos = mix (r.bounds.xy, r.bounds.zw, offsets[gl_VertexIndex]); + gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); + + return pos; +} + +vec2 +scale_tex_coord (vec2 in_pos, + Rect in_rect, + vec4 tex_rect) +{ + return tex_rect.xy + (in_pos - in_rect.bounds.xy) / rect_size (in_rect) * tex_rect.zw; +} + +#endif diff --git a/gsk/vulkan/resources/meson.build b/gsk/vulkan/resources/meson.build index 2bcbd03ba3..46a065ad09 100644 --- a/gsk/vulkan/resources/meson.build +++ b/gsk/vulkan/resources/meson.build @@ -1,6 +1,7 @@ gsk_private_vulkan_include_shaders = [ 'clip.frag.glsl', 'clip.vert.glsl', + 'common.vert.glsl', 'constants.glsl', 'rect.glsl', 'rect.frag.glsl', -- 2.30.2