[gtk/ngl-less-shaders: 9/13] ngl: Small shader improvements
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/ngl-less-shaders: 9/13] ngl: Small shader improvements
- Date: Sun, 14 Mar 2021 16:35:59 +0000 (UTC)
commit ae260f4fa06bc88b411840ada9e802ca2b9caf9c
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Mar 13 18:21:45 2021 -0500
ngl: Small shader improvements
Add a variant of gskSetOutputColor that saves a
few multiplications, and use it where possible.
gsk/ngl/resources/blend.glsl | 2 +-
gsk/ngl/resources/blit.glsl | 2 +-
gsk/ngl/resources/border.glsl | 2 +-
gsk/ngl/resources/conic_gradient.glsl | 2 +-
gsk/ngl/resources/inset_shadow.glsl | 2 +-
gsk/ngl/resources/linear_gradient.glsl | 2 +-
gsk/ngl/resources/outset_shadow.glsl | 4 +---
gsk/ngl/resources/preamble.fs.glsl | 28 ++++++++++++++++++++++++--
gsk/ngl/resources/radial_gradient.glsl | 2 +-
gsk/ngl/resources/repeat.glsl | 2 +-
gsk/ngl/resources/unblurred_outset_shadow.glsl | 2 +-
11 files changed, 36 insertions(+), 14 deletions(-)
---
diff --git a/gsk/ngl/resources/blend.glsl b/gsk/ngl/resources/blend.glsl
index 066c20179d..609f9f29a2 100644
--- a/gsk/ngl/resources/blend.glsl
+++ b/gsk/ngl/resources/blend.glsl
@@ -310,5 +310,5 @@ void main() {
else
discard;
- gskSetOutputColor(result * u_alpha);
+ gskSetScaledOutputColor(result, u_alpha);
}
diff --git a/gsk/ngl/resources/blit.glsl b/gsk/ngl/resources/blit.glsl
index c232be2bfd..ced047b9a9 100644
--- a/gsk/ngl/resources/blit.glsl
+++ b/gsk/ngl/resources/blit.glsl
@@ -13,5 +13,5 @@ void main() {
void main() {
vec4 diffuse = GskTexture(u_source, vUv);
- gskSetOutputColor(diffuse * u_alpha);
+ gskSetScaledOutputColor(diffuse, u_alpha);
}
diff --git a/gsk/ngl/resources/border.glsl b/gsk/ngl/resources/border.glsl
index 4f47ab87dc..b8653bad49 100644
--- a/gsk/ngl/resources/border.glsl
+++ b/gsk/ngl/resources/border.glsl
@@ -39,5 +39,5 @@ void main() {
gsk_rounded_rect_coverage(gsk_decode_rect(transformed_inside_outline), frag),
0.0, 1.0);
- gskSetOutputColor(final_color * alpha);
+ gskSetScaledOutputColor(final_color, alpha);
}
diff --git a/gsk/ngl/resources/conic_gradient.glsl b/gsk/ngl/resources/conic_gradient.glsl
index 758efe1e1e..3a26cf9563 100644
--- a/gsk/ngl/resources/conic_gradient.glsl
+++ b/gsk/ngl/resources/conic_gradient.glsl
@@ -75,7 +75,7 @@ void main() {
vec4 curr_color = gsk_premultiply(get_color(i));
vec4 next_color = gsk_premultiply(get_color(i + 1));
vec4 color = mix(curr_color, next_color, f);
- gskSetOutputColor(color * u_alpha);
+ gskSetScaledOutputColor(color, u_alpha);
return;
}
}
diff --git a/gsk/ngl/resources/inset_shadow.glsl b/gsk/ngl/resources/inset_shadow.glsl
index 8cff1edee1..f052a08580 100644
--- a/gsk/ngl/resources/inset_shadow.glsl
+++ b/gsk/ngl/resources/inset_shadow.glsl
@@ -40,5 +40,5 @@ void main() {
gsk_rounded_rect_coverage(gsk_decode_rect(transformed_inside_outline), frag),
0.0, 1.0);
- gskSetOutputColor(final_color * alpha);
+ gskSetScaledOutputColor(final_color, alpha);
}
diff --git a/gsk/ngl/resources/linear_gradient.glsl b/gsk/ngl/resources/linear_gradient.glsl
index d5c1d962f4..c4dfb53722 100644
--- a/gsk/ngl/resources/linear_gradient.glsl
+++ b/gsk/ngl/resources/linear_gradient.glsl
@@ -97,7 +97,7 @@ void main() {
vec4 curr_color = gsk_premultiply(get_color(i));
vec4 next_color = gsk_premultiply(get_color(i + 1));
vec4 color = mix(curr_color, next_color, f);
- gskSetOutputColor(color * u_alpha);
+ gskSetScaledOutputColor(color, u_alpha);
return;
}
}
diff --git a/gsk/ngl/resources/outset_shadow.glsl b/gsk/ngl/resources/outset_shadow.glsl
index 0ab943b070..44b05aa152 100644
--- a/gsk/ngl/resources/outset_shadow.glsl
+++ b/gsk/ngl/resources/outset_shadow.glsl
@@ -30,7 +30,5 @@ void main() {
alpha *= (1.0 - clamp(gsk_rounded_rect_coverage(gsk_decode_rect(transformed_outline), frag), 0.0, 1.0));
- vec4 color = final_color * alpha;
-
- gskSetOutputColor(color);
+ gskSetScaledOutputColor(final_color, alpha);
}
diff --git a/gsk/ngl/resources/preamble.fs.glsl b/gsk/ngl/resources/preamble.fs.glsl
index e715d2526d..c1c5a954ee 100644
--- a/gsk/ngl/resources/preamble.fs.glsl
+++ b/gsk/ngl/resources/preamble.fs.glsl
@@ -123,11 +123,35 @@ void gskSetOutputColor(vec4 color) {
#if defined(NO_CLIP)
result = color;
#elif defined(RECT_CLIP)
- result = color * gsk_rect_coverage(gsk_get_bounds(u_clip_rect),
+ float coverage = gsk_rect_coverage(gsk_get_bounds(u_clip_rect),
gsk_get_frag_coord());
+ result = color * coverage;
#else
- result = color * gsk_rounded_rect_coverage(gsk_create_rect(u_clip_rect),
+ float coverage = gsk_rounded_rect_coverage(gsk_create_rect(u_clip_rect),
gsk_get_frag_coord());
+ result = color * coverage;
+#endif
+
+#if defined(GSK_GLES) || defined(GSK_LEGACY)
+ gl_FragColor = result;
+#else
+ outputColor = result;
+#endif
+}
+
+void gskSetScaledOutputColor(vec4 color, float alpha) {
+ vec4 result;
+
+#if defined(NO_CLIP)
+ result = color * alpha;
+#elif defined(RECT_CLIP)
+ float coverage = gsk_rect_coverage(gsk_get_bounds(u_clip_rect),
+ gsk_get_frag_coord());
+ result = color * (alpha * coverage);
+#else
+ float coverage = gsk_rounded_rect_coverage(gsk_create_rect(u_clip_rect),
+ gsk_get_frag_coord());
+ result = color * (alpha * coverage);
#endif
#if defined(GSK_GLES) || defined(GSK_LEGACY)
diff --git a/gsk/ngl/resources/radial_gradient.glsl b/gsk/ngl/resources/radial_gradient.glsl
index 1a6774dff5..5990b39a84 100644
--- a/gsk/ngl/resources/radial_gradient.glsl
+++ b/gsk/ngl/resources/radial_gradient.glsl
@@ -77,7 +77,7 @@ void main() {
vec4 curr_color = gsk_premultiply(get_color(i));
vec4 next_color = gsk_premultiply(get_color(i + 1));
vec4 color = mix(curr_color, next_color, f);
- gskSetOutputColor(color * u_alpha);
+ gskSetScaledOutputColor(color, u_alpha);
return;
}
}
diff --git a/gsk/ngl/resources/repeat.glsl b/gsk/ngl/resources/repeat.glsl
index 5d39603396..1b811df2da 100644
--- a/gsk/ngl/resources/repeat.glsl
+++ b/gsk/ngl/resources/repeat.glsl
@@ -40,5 +40,5 @@ void main() {
vec4 diffuse = GskTexture(u_source, tp);
- gskSetOutputColor(diffuse * u_alpha);
+ gskSetScaledOutputColor(diffuse, u_alpha);
}
diff --git a/gsk/ngl/resources/unblurred_outset_shadow.glsl b/gsk/ngl/resources/unblurred_outset_shadow.glsl
index 305cc5f1e2..cd44212c93 100644
--- a/gsk/ngl/resources/unblurred_outset_shadow.glsl
+++ b/gsk/ngl/resources/unblurred_outset_shadow.glsl
@@ -39,6 +39,6 @@ void main() {
gsk_rounded_rect_coverage(gsk_decode_rect(transformed_inside_outline), frag),
0.0, 1.0);
- gskSetOutputColor(final_color * alpha);
+ gskSetScaledOutputColor(final_color, alpha);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]