From 3768c676c6e90daebaf208a0fdbffa78d210fc56 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 17 Jan 2017 05:50:52 +0100 Subject: [PATCH] vulkan: Add clip.vert.glsl Implement clipping the same way as in the last commit for the fragment shaders. --- gsk/Makefile.am | 1 + .../vulkan/blend-clip-rounded.vert.glsl | 15 ++------ .../vulkan/blend-clip-rounded.vert.spv | Bin 4684 -> 4868 bytes gsk/resources/vulkan/blend-clip.vert.glsl | 15 ++------ gsk/resources/vulkan/blend-clip.vert.spv | Bin 4604 -> 4788 bytes .../vulkan/border-clip-rounded.vert.glsl | 15 ++------ .../vulkan/border-clip-rounded.vert.spv | Bin 8952 -> 9136 bytes gsk/resources/vulkan/border-clip.vert.glsl | 15 ++------ gsk/resources/vulkan/border-clip.vert.spv | Bin 8952 -> 9136 bytes gsk/resources/vulkan/clip.vert.glsl | 36 ++++++++++++++++++ .../vulkan/color-clip-rounded.vert.glsl | 7 +++- .../vulkan/color-clip-rounded.vert.spv | Bin 1888 -> 3880 bytes gsk/resources/vulkan/color-clip.vert.glsl | 15 ++------ gsk/resources/vulkan/color-clip.vert.spv | Bin 3588 -> 3772 bytes .../color-matrix-clip-rounded.vert.glsl | 15 ++------ .../vulkan/color-matrix-clip-rounded.vert.spv | Bin 5036 -> 5220 bytes .../vulkan/color-matrix-clip.vert.glsl | 15 ++------ .../vulkan/color-matrix-clip.vert.spv | Bin 4956 -> 5140 bytes .../vulkan/linear-clip-rounded.vert.glsl | 6 ++- .../vulkan/linear-clip-rounded.vert.spv | Bin 5952 -> 7928 bytes gsk/resources/vulkan/linear-clip.vert.glsl | 6 ++- gsk/resources/vulkan/linear-clip.vert.spv | Bin 5856 -> 7832 bytes gsk/resources/vulkan/linear.vert.glsl | 15 ++------ gsk/resources/vulkan/linear.vert.spv | Bin 7648 -> 6116 bytes 24 files changed, 74 insertions(+), 102 deletions(-) create mode 100644 gsk/resources/vulkan/clip.vert.glsl diff --git a/gsk/Makefile.am b/gsk/Makefile.am index dd480bfa4e..06ed18e97e 100644 --- a/gsk/Makefile.am +++ b/gsk/Makefile.am @@ -59,6 +59,7 @@ gsk_private_vulkan_source_c = \ gskvulkanshader.c gsk_private_vulkan_include_shaders = \ resources/vulkan/clip.frag.glsl \ + resources/vulkan/clip.vert.glsl \ resources/vulkan/constants.glsl \ resources/vulkan/rounded-rect.glsl gsk_private_vulkan_shaders = \ diff --git a/gsk/resources/vulkan/blend-clip-rounded.vert.glsl b/gsk/resources/vulkan/blend-clip-rounded.vert.glsl index 0a5f31d79c..fadf4b9247 100644 --- a/gsk/resources/vulkan/blend-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/blend-clip-rounded.vert.glsl @@ -1,6 +1,7 @@ #version 420 core -#include "constants.glsl" +#define CLIP_ROUNDED_RECT +#include "clip.vert.glsl" layout(location = 0) in vec4 inRect; layout(location = 1) in vec4 inTexRect; @@ -19,18 +20,8 @@ vec2 offsets[6] = { vec2(0.0, 0.0), vec2(1.0, 0.0), vec2(1.0, 1.0) }; -vec4 intersect(vec4 a, vec4 b) -{ - a = vec4(a.xy, a.xy + a.zw); - b = vec4(b.xy, b.xy + b.zw); - vec4 result = vec4(max(a.xy, b.xy), min(a.zw, b.zw)); - if (any (greaterThanEqual (result.xy, result.zw))) - return vec4(0.0,0.0,0.0,0.0); - return vec4(result.xy, result.zw - result.xy); -} - void main() { - vec4 rect = intersect(inRect, push.clip_bounds); + vec4 rect = clip (inRect); vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex]; gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); diff --git a/gsk/resources/vulkan/blend-clip-rounded.vert.spv b/gsk/resources/vulkan/blend-clip-rounded.vert.spv index bc82237ef54a94f68d8cd50bd23535ae82208470..cb6a9dadbbc3ffd4df85a5b174b2ad84f3807f08 100644 GIT binary patch literal 4868 zcmZ9Ohj&y(6vm$>YdW z4cp(O$8+@f`@MZvMlR=b?)~PQJ9qBP+t@Z?_M|M^jemP&zh^DmE1N)^WxHn+^Rc^U zbve6JR^|4z%%a0^=JjY|o}<-93HX zD_3^+oYOZjI@;H0-aJz28>!YRedX#{WuRGIUr{$X(N${$Bje>%P(qRJUCJh99qdu9 zH7jEcvdmdOxNwQcvJ(4GWv(CSTlw1DFJ;pi2S%!+xjg6EIU8po1q1r_Y$juUaIjHn zHu88;KHnH0K~bVt=IR}93@@+O8qNM1stmS0=W(-j>qm)OI(z4SeQWFEwQ}P>-u~qL zP1SO9SbkEz-j3(|aHTploTtufD8rAkCqo_&8TXI%uPfr}F7YUFdM59xTDv$urDwF} zo$K4On~dw8cVd30LnD2cR>qo@4d>O$l?|ykhJHQ1bM{sJZN;2<)f@XxLw_f}ccOk4@5%QWwcm^HTa$CG@#cbyTDK5u z?zNTCTKkLmQAXECzQ>E$z07CqH=riYvK`;rV%~4S`IC7o-i!U#h^AErnaLzo&i`mV&aWEaoJMX@7v33K#+)C7* z^=2R^G|v~>Tkuout;BM|^LkFT-rpU-yE~IQytj?Oy5-fl*CwzL+>6HeE?`diO$B#1 zzBM^#{q{x9yx!q`pbWME^Y$~|59DK?2k>3DiZ#BU2Z5Xx+(Y^;TIc+p z{7xSuhjWhr_fcalk1{?6d~?=ft;Xu2jwkW0!#UrQv2*5o8l=5_rr_i?>k93&_}+Ki z*>m`ELQ{J;HQCc`z+7r#{qy+g`WJ}hMBL-nV*QJ7=1>#sU&2poeVJHJ#QM;_0+;Uf zDzTghZS3_LoVnD*y}XWZ4O(z-;LCZ=;NHY{y%yYC_;TvvPT$5ir#W1s#{2O5axUtA z2jA~Idi*ZFoY2e}+V}8N?fb-XBF-4v58&J@@_vXfCp7cM_wW(Exzxn>@G-u%I2SoT z!B6-9lvqyey8mZz>HeP+%Zbp&{$IeEOHK6jOMGk4g8K?zF1?ShiCwRS?i+l$^gg~N zHm5mUqbBadxj5tZ_-Wlg5X%WIy^kM>Q|(X0aw5)X-U{&!a69lD_IK)MFca(mYGyG0 z0_3AFzv7!yKJMi=d~0&f`oCk8`0WX7q9zdOEvEB0WFzYUA< zT^qeP6yG)RhC1=(gqHTAi#XLDMl2_^R6CnE)gDePC!%k0-Xq}5r6%t8Nc>Kq1$PvF zCvczO=HRn$hclO&IMWIE)}jS>BEDSOkA=jp*Ftv^zFgXmlZnk~4%eu$AJ*tx zobeR=^d1)z%Ly$#?M`KVzvepf-*c#W$xpT%*RG$fv)-(}}fdAbx}Q#J7)o zF~;xi5dNejt`>2ef0)>Hz7e&?{vElV@di)^gCO)H1+U&*#*6tsQukN~I)Hhcvu-)- F{ugjFj@1AF literal 4684 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 Qhiy)C7^B9X$om`oADiiE7XSbN diff --git a/gsk/resources/vulkan/border-clip-rounded.vert.glsl b/gsk/resources/vulkan/border-clip-rounded.vert.glsl index 8db91a58a4..ed11255ad5 100644 --- a/gsk/resources/vulkan/border-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/border-clip-rounded.vert.glsl @@ -1,6 +1,7 @@ #version 420 core -#include "constants.glsl" +#define CLIP_ROUNDED_RECT +#include "clip.vert.glsl" layout(location = 0) in vec4 inRect; layout(location = 1) in vec4 inCornerWidths; @@ -45,16 +46,6 @@ vec2 offsets[6] = { vec2(0.0, 0.0), #define SLICE_BOTTOM_LEFT 6 #define SLICE_LEFT 7 -vec4 intersect(vec4 a, vec4 b) -{ - a = vec4(a.xy, a.xy + a.zw); - b = vec4(b.xy, b.xy + b.zw); - vec4 result = vec4(max(a.xy, b.xy), min(a.zw, b.zw)); - if (any (greaterThanEqual (result.xy, result.zw))) - return vec4(0.0,0.0,0.0,0.0); - return vec4(result.xy, result.zw - result.xy); -} - void main() { int slice_index = gl_VertexIndex / 6; int vert_index = gl_VertexIndex % 6; @@ -96,7 +87,7 @@ void main() { break; } - rect = intersect (rect, push.clip_bounds); + rect = clip (rect); vec2 pos; if ((slice_index % 4) != 0 || (vert_index % 3) != 2) pos = rect.xy + rect.zw * offsets[vert_index]; diff --git a/gsk/resources/vulkan/border-clip-rounded.vert.spv b/gsk/resources/vulkan/border-clip-rounded.vert.spv index ce5e85e3dce516d82e033bb5e2dd1f906e25c462..50ce2a23af48ba8b03f5abe42d6ac63609551140 100644 GIT binary patch literal 9136 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 diff --git a/gsk/resources/vulkan/border-clip.vert.glsl b/gsk/resources/vulkan/border-clip.vert.glsl index 8db91a58a4..8e0fc8375e 100644 --- a/gsk/resources/vulkan/border-clip.vert.glsl +++ b/gsk/resources/vulkan/border-clip.vert.glsl @@ -1,6 +1,7 @@ #version 420 core -#include "constants.glsl" +#define CLIP_RECT +#include "clip.vert.glsl" layout(location = 0) in vec4 inRect; layout(location = 1) in vec4 inCornerWidths; @@ -45,16 +46,6 @@ vec2 offsets[6] = { vec2(0.0, 0.0), #define SLICE_BOTTOM_LEFT 6 #define SLICE_LEFT 7 -vec4 intersect(vec4 a, vec4 b) -{ - a = vec4(a.xy, a.xy + a.zw); - b = vec4(b.xy, b.xy + b.zw); - vec4 result = vec4(max(a.xy, b.xy), min(a.zw, b.zw)); - if (any (greaterThanEqual (result.xy, result.zw))) - return vec4(0.0,0.0,0.0,0.0); - return vec4(result.xy, result.zw - result.xy); -} - void main() { int slice_index = gl_VertexIndex / 6; int vert_index = gl_VertexIndex % 6; @@ -96,7 +87,7 @@ void main() { break; } - rect = intersect (rect, push.clip_bounds); + rect = clip (rect); vec2 pos; if ((slice_index % 4) != 0 || (vert_index % 3) != 2) pos = rect.xy + rect.zw * offsets[vert_index]; diff --git a/gsk/resources/vulkan/border-clip.vert.spv b/gsk/resources/vulkan/border-clip.vert.spv index ce5e85e3dce516d82e033bb5e2dd1f906e25c462..50ce2a23af48ba8b03f5abe42d6ac63609551140 100644 GIT binary patch literal 9136 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 diff --git a/gsk/resources/vulkan/clip.vert.glsl b/gsk/resources/vulkan/clip.vert.glsl new file mode 100644 index 0000000000..0dce1a0fb7 --- /dev/null +++ b/gsk/resources/vulkan/clip.vert.glsl @@ -0,0 +1,36 @@ +#include "constants.glsl" + +#ifndef _CLIP_ +#define _CLIP_ + +vec4 intersect(vec4 a, vec4 b) +{ + a = vec4(a.xy, a.xy + a.zw); + b = vec4(b.xy, b.xy + b.zw); + vec4 result = vec4(max(a.xy, b.xy), min(a.zw, b.zw)); + if (any (greaterThanEqual (result.xy, result.zw))) + return vec4(0.0,0.0,0.0,0.0); + return vec4(result.xy, result.zw - result.xy); +} + +#ifdef CLIP_ROUNDED_RECT +vec4 clip(vec4 rect) +{ + /* rounded corner clipping is done in fragment shader */ + return intersect(rect, push.clip_bounds); +} +#elif defined(CLIP_RECT) +vec4 clip(vec4 rect) +{ + return intersect(rect, push.clip_bounds); +} +#elif defined(CLIP_NONE) +vec4 clip(vec4 rect) +{ + return rect; +} +#else +#error "No clipping define given. Need CLIP_NONE, CLIP_RECT or CLIP_ROUNDED_RECT" +#endif + +#endif diff --git a/gsk/resources/vulkan/color-clip-rounded.vert.glsl b/gsk/resources/vulkan/color-clip-rounded.vert.glsl index 985a174f97..7f7a1e9226 100644 --- a/gsk/resources/vulkan/color-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/color-clip-rounded.vert.glsl @@ -1,6 +1,7 @@ #version 420 core -#include "constants.glsl" +#define CLIP_ROUNDED_RECT +#include "clip.vert.glsl" layout(location = 0) in vec4 inRect; layout(location = 1) in vec4 inColor; @@ -20,7 +21,9 @@ vec2 offsets[6] = { vec2(0.0, 0.0), vec2(1.0, 1.0) }; void main() { - vec2 pos = inRect.xy + inRect.zw * offsets[gl_VertexIndex]; + vec4 rect = clip (inRect); + + vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex]; gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); outPos = pos; outColor = inColor; diff --git a/gsk/resources/vulkan/color-clip-rounded.vert.spv b/gsk/resources/vulkan/color-clip-rounded.vert.spv index 941189cf448a40eb49e27cd54a70dea7ac9687e6..daaf33aa22ef03465f0c6117a5af985f64954f68 100644 GIT binary patch literal 3880 zcmZ9O`FB%Q6onr&q0EC!4v4KdARwYLiU^1pkZOx4&eqVR?ZY&wNm{@WM8H{aUjFRg z;lHKJwRHJ?FYnMNm$kWP@4N50=MH($H-A%qlFZ}JvgFsK*H$I-;YqS2S&;RWp;JTK zJKfs$ox67ESf2D{Mm;NV*-Bulnl_Ew;3IGq`~ZFeKZ8F0%%}gIiKS$5QW+Yp3=da^ zj*gB^PmgxG7aH}^M%t{8*3x!;teei(^(`#;(&kuWrdBkRaTM1sC;iD%)<~P(db>lG z&9mb>_lqPcv;Jbns=(OF&t!2qSxGy4gi%`|JBo4V(d>F3f~cT&AS zo9~Hd`eZ$wn9NdVHPq0jS(7f~6Y^@iI+gSE7CsFx?#a7Kn=fX&bdT0NH@`1ACvUmm z1=*cWG)7O?+ui#4C4`Qy6gEqS~Fe7 z<>ll;VElbNhzMZt$la3Y6vy6TWhv#nF)a(AI@wl_Q4WH+(?+^&hGgliaXr8y) zJD@_%uA#5O`WChk*yO%--_jOf&e(VFm(iQA7W3Wn-2A?5&&$!wy*3q;H$}C zjzQ|NKI3&n3+M;Hdi?HJUIGLBy^vl_3{u;oJXRNjcwF0YxjAm5H;4Jx!dKG|0Nd7_ zuOZg60lt>rIcl!Cj@~i#{W9iE|Un8P{3SnnEkdV=1)578UD_idbt=W-H6ZF7Ao`;Iv7S#M-lXXvXy zE#P^K!991!Jr8*;*F0Z7bJ_XMqj&G}aUgg8S^Bs)`Fr`8YnV^&n+*Rfv16XA{txpp z^XixTX2bspv3H_>Bk#$#>U`&3q4%w+Iahu)*P_;IaGU8-Vz^Xv4^k9^sHs}T9?2@a0QS2Q(#W@OSyKL*qR)(e$PS8yx!Rtpa!l1^H%A<1nRNQ zSH#Xc$sFIy*Fen{+Bd{%?stT<@a(uy`HtlOP|aT8`_be74{W~EJ@|Y#iwp4*V&By=`glish@Bhj z+(Yb~xbFdCHDPoA;TCh6IR6KT2Y@ZK2Z;xO z>x8zM*!i~59wJuL7k9UX*qr8Yjvmj}8Xb#0ZYB2I;yktys|lMq!}~CC(Yqb4CTvCT zBk-bk2V70udLECWnM+UX=`mt!v4!?Hv0CvwcEX)+3*Rncwc>f~hMUtI&e7v}SfgXH z$GybGd)xu{GI3J3<_FhV~4ad2FE_C63(j-kwD>r#YOX$Mf~~ z=UCKVAy$j`c8pj}*sM3a$BB#H=iq80_WB3kh9UU#z+8HMnWz`P!7Jgmd?R}0{yTD({#{T5;~@NvT-R?d`9A(NbB!sm6qv^`>sGVw F{{T=}CxHL} literal 1888 zcmYk6YflqF6o#kt!c9O#E-GRX#S2hT0Z{}r#1xYzR89Q4V!O~y%5Kx$B7V~k{s8}j zKhiHIzR&EAcAAqj=RNPa%$eEd2bKnn$>}#{_Ds4a&46rUMor1;YVAX<5+}{d#^ySV zag(=1I1^&A3X-$qAY?x$xh1(Tc`n(Jyp-hi8<75`z=9bu)tXm5I;z&*c#TfSi<7Ty z-)je zBfDh#JZ*a){chr4ybYWFMT##gMtI%trY@Ocmkc-yUla#P5QVk|XJwIdMY`ULTL)1X zC&!_>Ahuv}IA`Y_n+qN@Y_x-p_c`i?&G;YAoGkt&XeKT2K^xEHE#C5j)0Rzb&$TAJ zqnc9IX6{ihQIFU~dk3-)qIT4E9PT6tQ>dEFW&x)bHh0MFK9n3PhdXuT~Gt%_Q_lAE~Iwt|=OxS$;V9e;IbUCx(yLp4d$L5W}$G<2|e(Eh~{>#$j z#&=Jey8$B>n{N(`*^u*rgf%CdH%lzNE+{MS#9`nr@2d9P5q|PwuVol@E7_h{>@8_( zy7=wPrf1@@d53VY;q&&K&5U?^ImwppnfFAGEI7Y~@cj_W{Q2)9_ny4G7w&9VKI&hS zFz+KV;9Soza27Qj_lEZU+Iqdhsn zzh~H8?db_0{c{#D@-o*)5@yZ4k(U{-OTb;7$J!J3PBFZVClWB0!=7pn#(C@Nj@fKT z;Ns)k;NAaJ4t$#u>cF8F?&z6>_e3xBiVe^8@j`q0z{mY!<0Id$ggeE@U1R@IH`|iG DWN(I> diff --git a/gsk/resources/vulkan/color-clip.vert.glsl b/gsk/resources/vulkan/color-clip.vert.glsl index 724cee1cdd..a869b8a625 100644 --- a/gsk/resources/vulkan/color-clip.vert.glsl +++ b/gsk/resources/vulkan/color-clip.vert.glsl @@ -1,6 +1,7 @@ #version 420 core -#include "constants.glsl" +#define CLIP_RECT +#include "clip.vert.glsl" layout(location = 0) in vec4 inRect; layout(location = 1) in vec4 inColor; @@ -18,18 +19,8 @@ vec2 offsets[6] = { vec2(0.0, 0.0), vec2(1.0, 0.0), vec2(1.0, 1.0) }; -vec4 intersect(vec4 a, vec4 b) -{ - a = vec4(a.xy, a.xy + a.zw); - b = vec4(b.xy, b.xy + b.zw); - vec4 result = vec4(max(a.xy, b.xy), min(a.zw, b.zw)); - if (any (greaterThanEqual (result.xy, result.zw))) - return vec4(0.0,0.0,0.0,0.0); - return vec4(result.xy, result.zw - result.xy); -} - void main() { - vec4 rect = intersect(inRect, push.clip_bounds); + vec4 rect = clip (inRect); vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex]; gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); diff --git a/gsk/resources/vulkan/color-clip.vert.spv b/gsk/resources/vulkan/color-clip.vert.spv index c07e45f6e3bca643b4b8c76b542dba670237f653..0b2711b2d1fafb954087b772fa9ea04c163f6a41 100644 GIT binary patch literal 3772 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 ZdG+SfU&H^cy2masADG8A>z1?b_W|dJxk>;4 literal 4956 zcmZ9OhjUa_6viK@`_uhMN zX!M`baYo1A@9jHsXo4N!W$-!p3G4yCf=STEzp2b`lcYVH znRWN{clY*o_gvUNG&a`XXl@@Z_m5Vp<^EEoULI;zCd%rjC%Q^?Xmq@k3OZ1vb#!FY zvf1oWsW!{?23d}u7+$ePWLXFM&tz>7XwPEal-upuT;|&FaHHI8u-2ZPj$bb~#z#4n z{tdZ5t}_)yAu( z#(%uM$@#67QgcLpS{`rbbAF^;**ub`&TANgA7f9Z+#l8-tPgG}d>8imZJ8G}R`YzF z`CV-u?Z3KQZ{M9WBWfYW8w`DA@st&bw2$F5$d4xxR#JE4TsX zZu;b#Q)fLsBH!MLz`dfkat`%!q4#^Te)l%s9>#gp{)F!r>6&(`wTJqxTy6Qc7+U-2 zntd>KvhX{Z=MrJeV)ARo}8NC z4k>*3;10#sZ*ep7Iu65k4|5nJwAIezq}{pS&RyH**4dZQCHu4iL~Sv9&Ku#U05zUd z-*+r`2>t-GYxaH-rygV;0CEBIY{K^*TsM#YP{G;%5_T6buf5UdXE*nauVBYL>igSb ze*3EL@0_v5nP0zIaIQ~adnf7_@qT>Q#=CYqvu{hzSp6LZ7q#4h?@)gyv$YHq{%&UD z%@;lLTd^MXpE0}c-mdHW?Z~Ye-9O$yd&-P!}z{~xR*z;<%C1+F7~x=j{C7_|dlt5Ti}quVzeT5G z8you^j%`f5y@l9v!jbmy2>evL2wzS(QtgrWskRGWPDH<>PmAHq)dk{R9EEKyj^LJH z%ehZ*M`IiB2<{kcId$=-j>R^oIgC+bZ>`a_=*Mx`_AUBxJhq&0m@~8|V5iy>@#Tag z)h@+Pwaf73#J>GF3C>(<;!Ml2t;G@C$=Gu46Wl4-#yf&L60*2?1weF z7H3?6o!;Xa_;SLLp7Bil^o%R<<%C1+Y+j$=&#J<=esijgJy&C=d!B_aC!$xOT?3cy zc{aYB2yN_n4xBZ3_vTa^JvtZLnjFEc#g00ITL)(zM{wt1NA7rU=fj!P9P5A@`|J1T zTGYQDTQ1()1=w=JVZEWf5IfaggfA!JtiSNva54TRz+7rx36IyuZQ!0~S^xk5 diff --git a/gsk/resources/vulkan/linear-clip-rounded.vert.glsl b/gsk/resources/vulkan/linear-clip-rounded.vert.glsl index fd50e26f55..b574defc26 100644 --- a/gsk/resources/vulkan/linear-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/linear-clip-rounded.vert.glsl @@ -1,6 +1,7 @@ #version 420 core -#include "constants.glsl" +#define CLIP_ROUNDED_RECT +#include "clip.vert.glsl" struct ColorStop { float offset; @@ -50,7 +51,8 @@ get_gradient_pos (vec2 pos) } void main() { - vec2 pos = inRect.xy + inRect.zw * offsets[gl_VertexIndex]; + vec4 rect = clip (inRect); + vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex]; gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); outPos = pos; outGradientPos = get_gradient_pos (pos); diff --git a/gsk/resources/vulkan/linear-clip-rounded.vert.spv b/gsk/resources/vulkan/linear-clip-rounded.vert.spv index 421516f7eff953b4344215f791bdd3b0c776ca32..9124ffbe413d8d5eaeb5736fcf248dd9cd7add95 100644 GIT binary patch literal 7928 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 diff --git a/gsk/resources/vulkan/linear-clip.vert.glsl b/gsk/resources/vulkan/linear-clip.vert.glsl index 4ec7f2ead7..117642080e 100644 --- a/gsk/resources/vulkan/linear-clip.vert.glsl +++ b/gsk/resources/vulkan/linear-clip.vert.glsl @@ -1,6 +1,7 @@ #version 420 core -#include "constants.glsl" +#define CLIP_RECT +#include "clip.vert.glsl" struct ColorStop { float offset; @@ -49,7 +50,8 @@ get_gradient_pos (vec2 pos) } void main() { - vec2 pos = inRect.xy + inRect.zw * offsets[gl_VertexIndex]; + vec4 rect = clip (inRect); + vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex]; gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); outGradientPos = get_gradient_pos (pos); outRepeating = inRepeating; diff --git a/gsk/resources/vulkan/linear-clip.vert.spv b/gsk/resources/vulkan/linear-clip.vert.spv index e7d4cf6dac63ab615e347f5b0d5fc4afb2753823..74b823059e3674a319dbcf5685ab61ac6cbe9a5d 100644 GIT binary patch literal 7832 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 rIbb#SGr#*)(F?`J6ry literal 7648 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 Vo(EPVe@&`0KyEF^^iQmR{{tBr%vk^c