summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-05-15 02:24:50 +0200
committerBenjamin Otte <otte@redhat.com>2023-05-17 02:25:32 +0200
commitb0627a67b0ab94d77320025cf260733632a18975 (patch)
tree159080324e74f923eb9d8a33e1cc4abe32d15bcf
parentfef7529b6c2c9a0f48a8ce2e62d84c22763c4380 (diff)
downloadgtk+-b0627a67b0ab94d77320025cf260733632a18975.tar.gz
vulkan: Split generic code off
No need to duplicate code in shaders when it can be shared.
-rw-r--r--gsk/vulkan/resources/color.vert18
-rw-r--r--gsk/vulkan/resources/common.vert.glsl34
-rw-r--r--gsk/vulkan/resources/meson.build1
3 files changed, 39 insertions, 14 deletions
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..0798b9413f
--- /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_coord (vec2 in_pos,
+ Rect in_rect,
+ Rect out_rect)
+{
+ return out_rect.bounds.xy + (in_pos - in_rect.bounds.xy) / rect_size (in_rect) * rect_size (out_rect);
+}
+
+#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',