From 390a104ddde05d66a5725d9560cfc231270cc4b4 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 14:55:07 +0200 Subject: [PATCH 01/14] ci: Include glslc for Vulkan builds --- .gitlab-ci.yml | 2 +- .gitlab-ci/fedora.Dockerfile | 1 + .gitlab-ci/test-msys2.sh | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 83d98a45b5..a8b4c32fee 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,7 +26,7 @@ variables: BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true" FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled -Dbuild-testsuite=true -Dintrospection=enabled" MESON_TEST_TIMEOUT_MULTIPLIER: 3 - FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v46" + FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v48" workflow: rules: diff --git a/.gitlab-ci/fedora.Dockerfile b/.gitlab-ci/fedora.Dockerfile index 39c606e856..8523642ed4 100644 --- a/.gitlab-ci/fedora.Dockerfile +++ b/.gitlab-ci/fedora.Dockerfile @@ -32,6 +32,7 @@ RUN dnf -y install \ glib2-static \ glibc-devel \ glibc-headers \ + glslc \ gnupg2 \ gobject-introspection-devel \ graphene-devel \ diff --git a/.gitlab-ci/test-msys2.sh b/.gitlab-ci/test-msys2.sh index ddd66c185f..04894a75b8 100644 --- a/.gitlab-ci/test-msys2.sh +++ b/.gitlab-ci/test-msys2.sh @@ -32,7 +32,8 @@ pacman --noconfirm -S --needed \ mingw-w64-$MSYS2_ARCH-fribidi \ mingw-w64-$MSYS2_ARCH-gst-plugins-bad-libs \ mingw-w64-$MSYS2_ARCH-shared-mime-info \ - mingw-w64-$MSYS2_ARCH-python-gobject + mingw-w64-$MSYS2_ARCH-python-gobject \ + mingw-w64-$MSYS2_ARCH-shaderc mkdir -p _ccache export CCACHE_BASEDIR="$(pwd)" From 6e27579d1fdd87398e76e4308a85b0a797e0f966 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 14:15:57 +0200 Subject: [PATCH 02/14] vulkan: Remove the pre-compiled shaders Instead, build-depnd on glslc to build them. glslc is available in all important distros for a while: Fedora >= 28 Ubuntu >= 23.04 Debian >= 12 Arch Opensuse >= 15.2 msys2 are the ones I checked. So we can depend on it and avoid having to deal with keeping spirv files up-to-date in all commits. It's also 700kB of data, and not updating it helps. --- .../blend-mode-clip-rounded.frag.spv | Bin 40052 -> 0 bytes .../blend-mode-clip-rounded.vert.spv | Bin 7272 -> 0 bytes gsk/vulkan/resources/blend-mode-clip.frag.spv | Bin 29968 -> 0 bytes gsk/vulkan/resources/blend-mode-clip.vert.spv | Bin 7272 -> 0 bytes gsk/vulkan/resources/blend-mode.frag.spv | Bin 29968 -> 0 bytes gsk/vulkan/resources/blend-mode.vert.spv | Bin 6056 -> 0 bytes .../resources/blendmode-rect-rounded.frag.spv | Bin 22744 -> 0 bytes gsk/vulkan/resources/blendmode-rect.frag.spv | Bin 15972 -> 0 bytes .../resources/blur-clip-rounded.frag.spv | Bin 15012 -> 0 bytes .../resources/blur-clip-rounded.vert.spv | Bin 5672 -> 0 bytes gsk/vulkan/resources/blur-clip.frag.spv | Bin 4860 -> 0 bytes gsk/vulkan/resources/blur-clip.vert.spv | Bin 5672 -> 0 bytes gsk/vulkan/resources/blur.frag.spv | Bin 4860 -> 0 bytes gsk/vulkan/resources/blur.vert.spv | Bin 3940 -> 0 bytes .../resources/border-clip-rounded.frag.spv | Bin 13632 -> 0 bytes .../resources/border-clip-rounded.vert.spv | Bin 12780 -> 0 bytes gsk/vulkan/resources/border-clip.frag.spv | Bin 12176 -> 0 bytes gsk/vulkan/resources/border-clip.vert.spv | Bin 12780 -> 0 bytes gsk/vulkan/resources/border.frag.spv | Bin 12176 -> 0 bytes gsk/vulkan/resources/border.vert.spv | Bin 11588 -> 0 bytes .../resources/color-clip-rounded.frag.spv | Bin 14232 -> 0 bytes .../resources/color-clip-rounded.vert.spv | Bin 5052 -> 0 bytes gsk/vulkan/resources/color-clip.frag.spv | Bin 4132 -> 0 bytes gsk/vulkan/resources/color-clip.vert.spv | Bin 5052 -> 0 bytes .../color-matrix-clip-rounded.frag.spv | Bin 13924 -> 0 bytes .../color-matrix-clip-rounded.vert.spv | Bin 5720 -> 0 bytes .../resources/color-matrix-clip.frag.spv | Bin 3756 -> 0 bytes .../resources/color-matrix-clip.vert.spv | Bin 5720 -> 0 bytes gsk/vulkan/resources/color-matrix.frag.spv | Bin 3756 -> 0 bytes gsk/vulkan/resources/color-matrix.vert.spv | Bin 3988 -> 0 bytes gsk/vulkan/resources/color.frag.spv | Bin 4132 -> 0 bytes gsk/vulkan/resources/color.vert.spv | Bin 3836 -> 0 bytes .../cross-fade-clip-rounded.frag.spv | Bin 15356 -> 0 bytes .../cross-fade-clip-rounded.vert.spv | Bin 7296 -> 0 bytes gsk/vulkan/resources/cross-fade-clip.frag.spv | Bin 5224 -> 0 bytes gsk/vulkan/resources/cross-fade-clip.vert.spv | Bin 7296 -> 0 bytes gsk/vulkan/resources/cross-fade-rect.vert.spv | Bin 5840 -> 0 bytes gsk/vulkan/resources/cross-fade.frag.spv | Bin 5224 -> 0 bytes gsk/vulkan/resources/cross-fade.vert.spv | Bin 6080 -> 0 bytes .../resources/glyph-clip-rounded.frag.spv | Bin 14956 -> 0 bytes .../resources/glyph-clip-rounded.vert.spv | Bin 6400 -> 0 bytes gsk/vulkan/resources/glyph-clip.frag.spv | Bin 4856 -> 0 bytes gsk/vulkan/resources/glyph-clip.vert.spv | Bin 6400 -> 0 bytes gsk/vulkan/resources/glyph.frag.spv | Bin 4856 -> 0 bytes gsk/vulkan/resources/glyph.vert.spv | Bin 5184 -> 0 bytes .../inset-shadow-clip-rounded.frag.spv | Bin 14552 -> 0 bytes .../inset-shadow-clip-rounded.vert.spv | Bin 5056 -> 0 bytes .../resources/inset-shadow-clip.frag.spv | Bin 13128 -> 0 bytes .../resources/inset-shadow-clip.vert.spv | Bin 5056 -> 0 bytes gsk/vulkan/resources/inset-shadow.frag.spv | Bin 13128 -> 0 bytes gsk/vulkan/resources/inset-shadow.vert.spv | Bin 3340 -> 0 bytes .../resources/linear-clip-rounded.frag.spv | Bin 22040 -> 0 bytes .../resources/linear-clip-rounded.vert.spv | Bin 6244 -> 0 bytes gsk/vulkan/resources/linear-clip.frag.spv | Bin 12020 -> 0 bytes gsk/vulkan/resources/linear-clip.vert.spv | Bin 6244 -> 0 bytes gsk/vulkan/resources/linear.frag.spv | Bin 12020 -> 0 bytes gsk/vulkan/resources/linear.vert.spv | Bin 5028 -> 0 bytes .../resources/mask-clip-rounded.frag.spv | Bin 16364 -> 0 bytes .../resources/mask-clip-rounded.vert.spv | Bin 8256 -> 0 bytes gsk/vulkan/resources/mask-clip.frag.spv | Bin 6280 -> 0 bytes gsk/vulkan/resources/mask-clip.vert.spv | Bin 8256 -> 0 bytes gsk/vulkan/resources/mask.frag.spv | Bin 6280 -> 0 bytes gsk/vulkan/resources/mask.vert.spv | Bin 7948 -> 0 bytes gsk/vulkan/resources/meson.build | 76 +++++++++--------- .../outset-shadow-clip-rounded.frag.spv | Bin 14640 -> 0 bytes .../outset-shadow-clip-rounded.vert.spv | Bin 5868 -> 0 bytes .../resources/outset-shadow-clip.frag.spv | Bin 13216 -> 0 bytes .../resources/outset-shadow-clip.vert.spv | Bin 5868 -> 0 bytes gsk/vulkan/resources/outset-shadow.frag.spv | Bin 13216 -> 0 bytes gsk/vulkan/resources/outset-shadow.vert.spv | Bin 4152 -> 0 bytes .../resources/texture-clip-rounded.frag.spv | Bin 14572 -> 0 bytes .../resources/texture-clip-rounded.vert.spv | Bin 6252 -> 0 bytes gsk/vulkan/resources/texture-clip.frag.spv | Bin 4440 -> 0 bytes gsk/vulkan/resources/texture-clip.vert.spv | Bin 6252 -> 0 bytes gsk/vulkan/resources/texture.frag.spv | Bin 4440 -> 0 bytes gsk/vulkan/resources/texture.vert.spv | Bin 5036 -> 0 bytes 76 files changed, 36 insertions(+), 40 deletions(-) delete mode 100644 gsk/vulkan/resources/blend-mode-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/blend-mode-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/blend-mode-clip.frag.spv delete mode 100644 gsk/vulkan/resources/blend-mode-clip.vert.spv delete mode 100644 gsk/vulkan/resources/blend-mode.frag.spv delete mode 100644 gsk/vulkan/resources/blend-mode.vert.spv delete mode 100644 gsk/vulkan/resources/blendmode-rect-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/blendmode-rect.frag.spv delete mode 100644 gsk/vulkan/resources/blur-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/blur-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/blur-clip.frag.spv delete mode 100644 gsk/vulkan/resources/blur-clip.vert.spv delete mode 100644 gsk/vulkan/resources/blur.frag.spv delete mode 100644 gsk/vulkan/resources/blur.vert.spv delete mode 100644 gsk/vulkan/resources/border-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/border-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/border-clip.frag.spv delete mode 100644 gsk/vulkan/resources/border-clip.vert.spv delete mode 100644 gsk/vulkan/resources/border.frag.spv delete mode 100644 gsk/vulkan/resources/border.vert.spv delete mode 100644 gsk/vulkan/resources/color-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/color-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/color-clip.frag.spv delete mode 100644 gsk/vulkan/resources/color-clip.vert.spv delete mode 100644 gsk/vulkan/resources/color-matrix-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/color-matrix-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/color-matrix-clip.frag.spv delete mode 100644 gsk/vulkan/resources/color-matrix-clip.vert.spv delete mode 100644 gsk/vulkan/resources/color-matrix.frag.spv delete mode 100644 gsk/vulkan/resources/color-matrix.vert.spv delete mode 100644 gsk/vulkan/resources/color.frag.spv delete mode 100644 gsk/vulkan/resources/color.vert.spv delete mode 100644 gsk/vulkan/resources/cross-fade-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/cross-fade-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/cross-fade-clip.frag.spv delete mode 100644 gsk/vulkan/resources/cross-fade-clip.vert.spv delete mode 100644 gsk/vulkan/resources/cross-fade-rect.vert.spv delete mode 100644 gsk/vulkan/resources/cross-fade.frag.spv delete mode 100644 gsk/vulkan/resources/cross-fade.vert.spv delete mode 100644 gsk/vulkan/resources/glyph-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/glyph-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/glyph-clip.frag.spv delete mode 100644 gsk/vulkan/resources/glyph-clip.vert.spv delete mode 100644 gsk/vulkan/resources/glyph.frag.spv delete mode 100644 gsk/vulkan/resources/glyph.vert.spv delete mode 100644 gsk/vulkan/resources/inset-shadow-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/inset-shadow-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/inset-shadow-clip.frag.spv delete mode 100644 gsk/vulkan/resources/inset-shadow-clip.vert.spv delete mode 100644 gsk/vulkan/resources/inset-shadow.frag.spv delete mode 100644 gsk/vulkan/resources/inset-shadow.vert.spv delete mode 100644 gsk/vulkan/resources/linear-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/linear-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/linear-clip.frag.spv delete mode 100644 gsk/vulkan/resources/linear-clip.vert.spv delete mode 100644 gsk/vulkan/resources/linear.frag.spv delete mode 100644 gsk/vulkan/resources/linear.vert.spv delete mode 100644 gsk/vulkan/resources/mask-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/mask-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/mask-clip.frag.spv delete mode 100644 gsk/vulkan/resources/mask-clip.vert.spv delete mode 100644 gsk/vulkan/resources/mask.frag.spv delete mode 100644 gsk/vulkan/resources/mask.vert.spv delete mode 100644 gsk/vulkan/resources/outset-shadow-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/outset-shadow-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/outset-shadow-clip.frag.spv delete mode 100644 gsk/vulkan/resources/outset-shadow-clip.vert.spv delete mode 100644 gsk/vulkan/resources/outset-shadow.frag.spv delete mode 100644 gsk/vulkan/resources/outset-shadow.vert.spv delete mode 100644 gsk/vulkan/resources/texture-clip-rounded.frag.spv delete mode 100644 gsk/vulkan/resources/texture-clip-rounded.vert.spv delete mode 100644 gsk/vulkan/resources/texture-clip.frag.spv delete mode 100644 gsk/vulkan/resources/texture-clip.vert.spv delete mode 100644 gsk/vulkan/resources/texture.frag.spv delete mode 100644 gsk/vulkan/resources/texture.vert.spv diff --git a/gsk/vulkan/resources/blend-mode-clip-rounded.frag.spv b/gsk/vulkan/resources/blend-mode-clip-rounded.frag.spv deleted file mode 100644 index 27db073e847ba8346b84ca17103c97516b84a13b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40052 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 diff --git a/gsk/vulkan/resources/blend-mode-clip-rounded.vert.spv b/gsk/vulkan/resources/blend-mode-clip-rounded.vert.spv deleted file mode 100644 index e5ceee3bebae4943f847d85d99d14cf41b1c6336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7272 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 R(wzG-@|{4NXQ1vG{2w#y9v1)r diff --git a/gsk/vulkan/resources/blend-mode-clip.frag.spv b/gsk/vulkan/resources/blend-mode-clip.frag.spv deleted file mode 100644 index b8f13d34bc2e27fbd34de38d7889833a87b0e31e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29968 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
J zC1RB4RJCkfz8t~v^#fet8Trz7~?NsKiAY-N_smF&B zwSCGQ7eP~x&!UY_nPUfqN_SYWUxWeZ6`ev_=2RjFSTn~BHql;K4)4a;( z?L@fGp3mD!G}q=7?s?w)dqeZQ>9c&nyWw38&-|8v8?#)?x1p)WXUWE=tkY6x>hW2+ z@hR)H44Qgsu`D=svcLA&mMd(IudjR9`Dn{HD}d{KS42~f&q|F?neWPI>hW2n@hS6N z6-_-ktp?8Cv%mJ(-d@-oUtjaJ-rDl)z5}clzB<@B<#(1f!1}2B8TT&kUhUsy!SAH4 zNpqdWj?u-vo8}p=zczg`x3$1^jn+m}Paf-l%`17V3)V;7JSK8a9@^ebdmqiQ#2M>7 zV8<$J{a!TnjI|!Pob&o{ebgOmL+%+%+Xl4lXpSY$SQ~*It6Z~<(bO~6CSb?PGqx#M zANBZb2KL#>_k+#h`l-if3vjt^Tf)n@Tfy~F&u>#(gN>yvId21Yz0BFQlj|4zwvFBT zX_xzc>DpQsYhW$nzdg9F_YP?4$$dv~nd?s4XzKBq1TJf^Gh9FQ_)G?uHP{7S#@!XJ zk9umb8`xOdlJoB1E?VX&Z~O7NF*h44dwb+L-(;Y zbnnK0FK}JMz0uS&#y()@p6BEJV13lxvs1Zy`J8Iomo`LmEOEx#5A0aw`MN)vdd4~c zY+WK#}a3(gTeLlaR{1v#`++*T*E`*`l!d}L*R0690u1< zJwAtntxx!e!DZZOaDCLXH;w=sOIvd80e8`|_HzAVKeDlBZROb;*2NlFi}?3~>w5R0 zsVCPN;4;^v;QFY?XC}C;K|fqS_4phOE^BZMyo@^wu8(?ZFdJ+vZOM56Yz;C;xqh(^ zHuls=Ue~}{B(FK(^7%Nn>7VCMu8+@$``8)|anE>j!F3IX(bO}>Jg{@ko}CZYN8LSp zJooHbZO75hq&b#2W1RqYtn%~YBWUUw>qKx_*OTD-sK@7IaJgQm$Z6{FITc*4*JRGRkf{mpuIiC)8y;4uPezBj?*t4GUte17M2G%0}XMyW_pN*!T+|L1*xtzpCFf6otwH7}*Dv;q8hdIauWMi} zlGi7}<(~ai(?5G&u1~pV-Mi%(Ke6HO;%<$-8^4SFburj{ea{x>J$nMS1vD>zE840x z@@FMaE%0ez<9(ESe*3{!~Iw>-8lflq5})BbW7*Go$n#tFwcvH}F`oUjySD1( z+MbDzSGl&Q!?Vt3fL+_OxMwY|BSyKl*H`?eg1ff26ucXLTgC4vxc+w*+`Vvj#qTM& z@$PGQYIXzMyt8&+gR9xR7NKP?n7j7ug&V;qU{_DPo581}CEnNJYBsMjo^#jknmBLc zWiQ+c_B*RS+7ka8;4` z?8S4y?#1)CXD>cLjB+nNSn)>-?%w)A!Mov)SN!RM>;Fu_-HXpw{JDY~?}dh^W)H!g zL-x+Ya5bA(xwhu6J!|_2*uAKpc;5qChs66nT+QZH#&ho4T@&YRyzGU?!0ttTv?cx% z;4=P`a5bA(8QXESrUgcVui}tM5FTk#qdg8qb zc3z41OSqcNtBmJdv|D56VZ5yELa=MAk2Za*je5rVHQ3y>Id6GvzXh9zHftc))`j*u Z*jU=EhdgWhd$4P3Jo{;PZPi`d{{;peS{48R diff --git a/gsk/vulkan/resources/blend-mode-clip.vert.spv b/gsk/vulkan/resources/blend-mode-clip.vert.spv deleted file mode 100644 index e5ceee3bebae4943f847d85d99d14cf41b1c6336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7272 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 R(wzG-@|{4NXQ1vG{2w#y9v1)r diff --git a/gsk/vulkan/resources/blend-mode.frag.spv b/gsk/vulkan/resources/blend-mode.frag.spv deleted file mode 100644 index b8f13d34bc2e27fbd34de38d7889833a87b0e31e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29968 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
J zC1RB4RJCkfz8t~v^#fet8Trz7~?NsKiAY-N_smF&B zwSCGQ7eP~x&!UY_nPUfqN_SYWUxWeZ6`ev_=2RjFSTn~BHql;K4)4a;( z?L@fGp3mD!G}q=7?s?w)dqeZQ>9c&nyWw38&-|8v8?#)?x1p)WXUWE=tkY6x>hW2+ z@hR)H44Qgsu`D=svcLA&mMd(IudjR9`Dn{HD}d{KS42~f&q|F?neWPI>hW2n@hS6N z6-_-ktp?8Cv%mJ(-d@-oUtjaJ-rDl)z5}clzB<@B<#(1f!1}2B8TT&kUhUsy!SAH4 zNpqdWj?u-vo8}p=zczg`x3$1^jn+m}Paf-l%`17V3)V;7JSK8a9@^ebdmqiQ#2M>7 zV8<$J{a!TnjI|!Pob&o{ebgOmL+%+%+Xl4lXpSY$SQ~*It6Z~<(bO~6CSb?PGqx#M zANBZb2KL#>_k+#h`l-if3vjt^Tf)n@Tfy~F&u>#(gN>yvId21Yz0BFQlj|4zwvFBT zX_xzc>DpQsYhW$nzdg9F_YP?4$$dv~nd?s4XzKBq1TJf^Gh9FQ_)G?uHP{7S#@!XJ zk9umb8`xOdlJoB1E?VX&Z~O7NF*h44dwb+L-(;Y zbnnK0FK}JMz0uS&#y()@p6BEJV13lxvs1Zy`J8Iomo`LmEOEx#5A0aw`MN)vdd4~c zY+WK#}a3(gTeLlaR{1v#`++*T*E`*`l!d}L*R0690u1< zJwAtntxx!e!DZZOaDCLXH;w=sOIvd80e8`|_HzAVKeDlBZROb;*2NlFi}?3~>w5R0 zsVCPN;4;^v;QFY?XC}C;K|fqS_4phOE^BZMyo@^wu8(?ZFdJ+vZOM56Yz;C;xqh(^ zHuls=Ue~}{B(FK(^7%Nn>7VCMu8+@$``8)|anE>j!F3IX(bO}>Jg{@ko}CZYN8LSp zJooHbZO75hq&b#2W1RqYtn%~YBWUUw>qKx_*OTD-sK@7IaJgQm$Z6{FITc*4*JRGRkf{mpuIiC)8y;4uPezBj?*t4GUte17M2G%0}XMyW_pN*!T+|L1*xtzpCFf6otwH7}*Dv;q8hdIauWMi} zlGi7}<(~ai(?5G&u1~pV-Mi%(Ke6HO;%<$-8^4SFburj{ea{x>J$nMS1vD>zE840x z@@FMaE%0ez<9(ESe*3{!~Iw>-8lflq5})BbW7*Go$n#tFwcvH}F`oUjySD1( z+MbDzSGl&Q!?Vt3fL+_OxMwY|BSyKl*H`?eg1ff26ucXLTgC4vxc+w*+`Vvj#qTM& z@$PGQYIXzMyt8&+gR9xR7NKP?n7j7ug&V;qU{_DPo581}CEnNJYBsMjo^#jknmBLc zWiQ+c_B*RS+7ka8;4` z?8S4y?#1)CXD>cLjB+nNSn)>-?%w)A!Mov)SN!RM>;Fu_-HXpw{JDY~?}dh^W)H!g zL-x+Ya5bA(xwhu6J!|_2*uAKpc;5qChs66nT+QZH#&ho4T@&YRyzGU?!0ttTv?cx% z;4=P`a5bA(8QXESrUgcVui}tM5FTk#qdg8qb zc3z41OSqcNtBmJdv|D56VZ5yELa=MAk2Za*je5rVHQ3y>Id6GvzXh9zHftc))`j*u Z*jU=EhdgWhd$4P3Jo{;PZPi`d{{;peS{48R diff --git a/gsk/vulkan/resources/blend-mode.vert.spv b/gsk/vulkan/resources/blend-mode.vert.spv deleted file mode 100644 index 99cf303f03c094361f1faa91522db35a33433fd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6056 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 GYyA&pDw;w7 diff --git a/gsk/vulkan/resources/blur-clip-rounded.frag.spv b/gsk/vulkan/resources/blur-clip-rounded.frag.spv deleted file mode 100644 index 221c06ffcb78c9fc9e08fba33f24ab88512a32d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15012 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 K?=^MbYyS&Z^rZLz diff --git a/gsk/vulkan/resources/blur-clip-rounded.vert.spv b/gsk/vulkan/resources/blur-clip-rounded.vert.spv deleted file mode 100644 index 150e783e5362ffd8b5f6c450f63fb1feea23e3d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5672 zcmZ9OiI-eO6~SWjW_h6&!NP6Hla10y= z4}cTkBzOdz0*`{nzzF{>W`3AtwPJZOJ~1`EXV3V=byL%Gb5s4nE$!A+yX>^4nq{vw zJtz;gj9Z$;m7VGKd@~QI6Oq?bFGh=%>``_GtzMrj7af|}vRxEKo&A^NYXI#P%=?pF zPbZshmvbpRX*JHv`AES;e63i=+?|=}w+8*hw_LaAKoYOx0f^R1+ySB8u z)2-7!d!ui@-9GK}etnY;&*0na&JWmg$bF~qw2l6c!#P1}L!A}A;j(jM>&UPTDE0KF zS%bK<+wC=z<{KYsyKOsKExq})7RhzKe`0QEG|PE=spj`Uk3%YUvCjA7sDoYn8+>C@ z|6k)nPH#5i?45BtKxp<%Z8FpBmD=kv&G)0`I~b>L?(5odYVs|t2M)R4y5G&kz)642lDpR!|1M=#6C3E? zvdUH$8;Egl{c>}xVK#^P&x5aJ9s`a`Dt<1uF&DzmV|I<2d!Em%PknpE{Vh{-z4POM zV-q#G_VGYXM9c-)MRD}%hxL*;WH^T~UarvDJOzS#dwmCwA!%l)?8&-mM!y%*!-j^B!{-#fmGS-;wP zth<@bucl9!=WWcsP5tg8KUQgRuD8P-#^1y2xf&q+@5HvJ`rpN@KhAMKw)x##|A#BC z-~HsrD=qi~8MjX-z#MFF#dj`u~b;tbK94+;2M8 z{|(#q;g|c{tadryg740=J6!WGlsdDy{6787^z6a?eGl%PAI`Y({+-c(71{g-{SK}q zm)ZdIfIjocx3QbPd9WI&>vvzZSbGFpZ4c4*{uZDn9G)j)Z^h1I-w0O|p4W34+hTq* z@LgU*9lptpzcX4r5~d z7qIhMzX(?ou|8tIgqH91Ww@G%*x2hUXy!5|?(?hI*5C;3YuIX@GqkT`yWSDnH?Y-= zi?{GiY;&5!HO6=!e$V=%?r&kA0CA7s##R#!b4KiUu=CjO!qr5aF=D@m=3bHa``Bv2 zVcvN2KfpGZG4cKV5ZhYxMa~~#=llN{t|rdh|0ihq{tv>{M8wAaKSeW_G11e9u&u!n z+Rw1ntUa`cv0d*7?dRBP#>IX70{bCg4%ZkH_n|M&_)F}(?q9*xgu|Q>`)lkx_BU`f z5oa{E1^+F$4fyTf&ip&D4yYTmhWYnEJ^JzoY;&r|z5Ef|n)F%!NoF;3tY!WSI0f`Q zQgMAtu>TGot9*}E{6C!N3gF+aQM8r7u?%b_$5Q6ynY{wrziDSN$KSB6*sgUS=O+Qz z#M>LIG<8Sb!wv8}_Q`NH;mBh*!t>atz|}jL(DTXWR}~6Aoin^6LD4o?mhA!kos&o>yY$dtQ}%`WJc?u~(zzd+va% ziRf$Wc@3I1_%_VB14NHrfNf2V&~{=+ouOTeW*$dq*I`HQcyBL6Gp9LRV~qXv`_mWo zk7KLFd)tMrCLGoqvAePJ*cZXoM4a_Oej6s>F9zl^<~ZN_^~^5;>i?vUNoL2t@u}|t zYW`km|Cf1h#nq#Reb{*oH^S9~Bd_Rc4YrzbaeuGHHm5mUV~jmf&wqng!yT(Y{05(mZ6D8J zj^Et_*rORQD<0>cg}cr-VyxW1KQ}YK9yGxWi1>D;8*eW8HvV$B$3d_Xm`9&=t6BH| E02})A`Tzg` diff --git a/gsk/vulkan/resources/blur-clip.frag.spv b/gsk/vulkan/resources/blur-clip.frag.spv deleted file mode 100644 index 3169660bf6f5539e5d05f6bfbb732b13d4bb7de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4860 zcmZ9O`*&Pb6~`}~%#=qdt&~zIbTuHQN~wyaP@^_&q|<7ku_+b>nNBh@&Be(~%*>=I zsFar?PZ0&*qWE6R2a0d~MgI~13YWT;EFV_C^xj^-v3K9?@77~uQpz0lxdN{-w6a)FJ5C%yYRF5- zFOXj%zd|+-EpIo3(b@Y1SI)a&x|) zt~B+#xZsy|=G%it(V>h-aUW&;H?qcjJ0<0Oz1?i=UTNJnvC`T%0iBfD!v^$Hw}(AO z2k`B-yUW>JC3%~e*kX_|n+h?TM`E^ttMx&zm)1MGTko0Rf0lbId@nt-SVx=VYV>Mm zSCZ?{bM3)$Z7E%CwzJhTpY8C275yv8jo34T-ojM3)9cqe{T{f&p5+~jD@)*^pXZX* zJl7p`8odj={m%HaX`{a&zdnoiG&6ponVwn5QZrZ1=Im$IIO?_SzDQE#LJ+mz*Opo{x#t-3_|i`@d)gGbiH zjwPR6gUiXI;5=7eQ#pANuHRhk50;x3_T>9WJ13i~#~N8)-^yF}Z!CK^X=jGpIjqY! zl=)9}yUP^hUfzH!*7fEH{@of}N&W~v((cy#hX<`zb2;0KXD#n&IR|U*zkug*x1->= zYi0POcmxhzq2+)Ncu?a@N|$YI|3F<5l*jy#sMA zvG+i1PO)cj1L6ogK7`;>_PvT+o{h1tt*>Vzc8L9^6|rX{9`0)_`2%(ZG2Y%qf461$ zt$tgJ!}axvz1n;C8nuXHuUE2)>x|>AzxGxv*V~C)&3g7J;nSzIcNS8*ygrI=hY_>N8tOhuRykNst=&u zhk3o{=GM>rb4Zf>V>03%0-5_7Dt-p7kN(9Gcsuv#Stj%|-a4K`X8xY=J2jR(kL|pi z`+foKkas^~-i9GEIz-+)V&9zHe(t*3d**QMf5DW|`uaxv4%_3vZx*oc z$M3N7AHZMzYs7tikZi_^50KG1e}i0y$cO)Lv8_{obBndjtN#H`)!5%7{@tRFbNbjX z`Tx?DI}z*AcO&BPt>1y4b!^CO_k1~Go!&Y3VT|86`TxOd7xTHUqnK|K*xcsZjF|6A zbo6NtcJxi3TXP(BkAux|h&}th-+|nO+>C_JJ9GXie9UzVVw}A7yM|oUuov6CIOlre z=-<1r?TazaS*Kjo>D%!e?(q9(ZClV=3$}mTS?4uq*EHrfL_Y9)bL^g---qZU|7ad_ zd(KD99bngqm^-oeBl6*M0K4e(KCpiBPv>h*V4K^y4Xp0^??-$y+Y#rjTQ2JM?7fqY zYmvAw`djPuXwTGM97Kv|dZ>V%pBlk;7w`$}*#g%8!4cdT!L1RzP{8Kv7O?rwj^IZ| zuz%0R{`L3oIkES}+9q?`x(*}W&12{fBS(;GQ9`ui@; zbq4X>>EoO}-V6CyKgD+a$60R|`csJ9LrCnYo%6B&BG~@Lo9bZeBkvmCB{^;HQS^2R z+xpe^b{XA69QL-4c3vI(8(^Cwdb@%x7rhmK8Zno#+7Y{oZEVzW4qGmI`!Kd#vA3TA zM{m93V(ajJ>mR-S9JamH$2om`Bl5BSd2H8@-advcSM2TMVEO3n6WCKo^!7|=`C#QcE{bl4O#P{|x`YXtb zh`c_}qQ8pBi`S!HLAK|(f_@co@3DukVS7(z$f^I=5q;#{m)tiH^Eh`3?h^Dj5!Z4q za(xTi9=wqId>dOo`SAG;wtWeo?_%pGuaCK3L;OCuzW95{Ylyz~#W^|es`u9WrZ(QU z^L@ngK2N;(2RZjT+IZ*WjE}eAy%pbwHlI53{SbQ=iF`l8mWzDO$r*ny+W1rGsOQJn j?pa(x{{-=DXXvi={WRy~L;PMk_cO$Jef(V$`@8mk!MVs% diff --git a/gsk/vulkan/resources/blur-clip.vert.spv b/gsk/vulkan/resources/blur-clip.vert.spv deleted file mode 100644 index 150e783e5362ffd8b5f6c450f63fb1feea23e3d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5672 zcmZ9OiI-eO6~SWjW_h6&!NP6Hla10y= z4}cTkBzOdz0*`{nzzF{>W`3AtwPJZOJ~1`EXV3V=byL%Gb5s4nE$!A+yX>^4nq{vw zJtz;gj9Z$;m7VGKd@~QI6Oq?bFGh=%>``_GtzMrj7af|}vRxEKo&A^NYXI#P%=?pF zPbZshmvbpRX*JHv`AES;e63i=+?|=}w+8*hw_LaAKoYOx0f^R1+ySB8u z)2-7!d!ui@-9GK}etnY;&*0na&JWmg$bF~qw2l6c!#P1}L!A}A;j(jM>&UPTDE0KF zS%bK<+wC=z<{KYsyKOsKExq})7RhzKe`0QEG|PE=spj`Uk3%YUvCjA7sDoYn8+>C@ z|6k)nPH#5i?45BtKxp<%Z8FpBmD=kv&G)0`I~b>L?(5odYVs|t2M)R4y5G&kz)642lDpR!|1M=#6C3E? zvdUH$8;Egl{c>}xVK#^P&x5aJ9s`a`Dt<1uF&DzmV|I<2d!Em%PknpE{Vh{-z4POM zV-q#G_VGYXM9c-)MRD}%hxL*;WH^T~UarvDJOzS#dwmCwA!%l)?8&-mM!y%*!-j^B!{-#fmGS-;wP zth<@bucl9!=WWcsP5tg8KUQgRuD8P-#^1y2xf&q+@5HvJ`rpN@KhAMKw)x##|A#BC z-~HsrD=qi~8MjX-z#MFF#dj`u~b;tbK94+;2M8 z{|(#q;g|c{tadryg740=J6!WGlsdDy{6787^z6a?eGl%PAI`Y({+-c(71{g-{SK}q zm)ZdIfIjocx3QbPd9WI&>vvzZSbGFpZ4c4*{uZDn9G)j)Z^h1I-w0O|p4W34+hTq* z@LgU*9lptpzcX4r5~d z7qIhMzX(?ou|8tIgqH91Ww@G%*x2hUXy!5|?(?hI*5C;3YuIX@GqkT`yWSDnH?Y-= zi?{GiY;&5!HO6=!e$V=%?r&kA0CA7s##R#!b4KiUu=CjO!qr5aF=D@m=3bHa``Bv2 zVcvN2KfpGZG4cKV5ZhYxMa~~#=llN{t|rdh|0ihq{tv>{M8wAaKSeW_G11e9u&u!n z+Rw1ntUa`cv0d*7?dRBP#>IX70{bCg4%ZkH_n|M&_)F}(?q9*xgu|Q>`)lkx_BU`f z5oa{E1^+F$4fyTf&ip&D4yYTmhWYnEJ^JzoY;&r|z5Ef|n)F%!NoF;3tY!WSI0f`Q zQgMAtu>TGot9*}E{6C!N3gF+aQM8r7u?%b_$5Q6ynY{wrziDSN$KSB6*sgUS=O+Qz z#M>LIG<8Sb!wv8}_Q`NH;mBh*!t>atz|}jL(DTXWR}~6Aoin^6LD4o?mhA!kos&o>yY$dtQ}%`WJc?u~(zzd+va% ziRf$Wc@3I1_%_VB14NHrfNf2V&~{=+ouOTeW*$dq*I`HQcyBL6Gp9LRV~qXv`_mWo zk7KLFd)tMrCLGoqvAePJ*cZXoM4a_Oej6s>F9zl^<~ZN_^~^5;>i?vUNoL2t@u}|t zYW`km|Cf1h#nq#Reb{*oH^S9~Bd_Rc4YrzbaeuGHHm5mUV~jmf&wqng!yT(Y{05(mZ6D8J zj^Et_*rORQD<0>cg}cr-VyxW1KQ}YK9yGxWi1>D;8*eW8HvV$B$3d_Xm`9&=t6BH| E02})A`Tzg` diff --git a/gsk/vulkan/resources/blur.frag.spv b/gsk/vulkan/resources/blur.frag.spv deleted file mode 100644 index 3169660bf6f5539e5d05f6bfbb732b13d4bb7de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4860 zcmZ9O`*&Pb6~`}~%#=qdt&~zIbTuHQN~wyaP@^_&q|<7ku_+b>nNBh@&Be(~%*>=I zsFar?PZ0&*qWE6R2a0d~MgI~13YWT;EFV_C^xj^-v3K9?@77~uQpz0lxdN{-w6a)FJ5C%yYRF5- zFOXj%zd|+-EpIo3(b@Y1SI)a&x|) zt~B+#xZsy|=G%it(V>h-aUW&;H?qcjJ0<0Oz1?i=UTNJnvC`T%0iBfD!v^$Hw}(AO z2k`B-yUW>JC3%~e*kX_|n+h?TM`E^ttMx&zm)1MGTko0Rf0lbId@nt-SVx=VYV>Mm zSCZ?{bM3)$Z7E%CwzJhTpY8C275yv8jo34T-ojM3)9cqe{T{f&p5+~jD@)*^pXZX* zJl7p`8odj={m%HaX`{a&zdnoiG&6ponVwn5QZrZ1=Im$IIO?_SzDQE#LJ+mz*Opo{x#t-3_|i`@d)gGbiH zjwPR6gUiXI;5=7eQ#pANuHRhk50;x3_T>9WJ13i~#~N8)-^yF}Z!CK^X=jGpIjqY! zl=)9}yUP^hUfzH!*7fEH{@of}N&W~v((cy#hX<`zb2;0KXD#n&IR|U*zkug*x1->= zYi0POcmxhzq2+)Ncu?a@N|$YI|3F<5l*jy#sMA zvG+i1PO)cj1L6ogK7`;>_PvT+o{h1tt*>Vzc8L9^6|rX{9`0)_`2%(ZG2Y%qf461$ zt$tgJ!}axvz1n;C8nuXHuUE2)>x|>AzxGxv*V~C)&3g7J;nSzIcNS8*ygrI=hY_>N8tOhuRykNst=&u zhk3o{=GM>rb4Zf>V>03%0-5_7Dt-p7kN(9Gcsuv#Stj%|-a4K`X8xY=J2jR(kL|pi z`+foKkas^~-i9GEIz-+)V&9zHe(t*3d**QMf5DW|`uaxv4%_3vZx*oc z$M3N7AHZMzYs7tikZi_^50KG1e}i0y$cO)Lv8_{obBndjtN#H`)!5%7{@tRFbNbjX z`Tx?DI}z*AcO&BPt>1y4b!^CO_k1~Go!&Y3VT|86`TxOd7xTHUqnK|K*xcsZjF|6A zbo6NtcJxi3TXP(BkAux|h&}th-+|nO+>C_JJ9GXie9UzVVw}A7yM|oUuov6CIOlre z=-<1r?TazaS*Kjo>D%!e?(q9(ZClV=3$}mTS?4uq*EHrfL_Y9)bL^g---qZU|7ad_ zd(KD99bngqm^-oeBl6*M0K4e(KCpiBPv>h*V4K^y4Xp0^??-$y+Y#rjTQ2JM?7fqY zYmvAw`djPuXwTGM97Kv|dZ>V%pBlk;7w`$}*#g%8!4cdT!L1RzP{8Kv7O?rwj^IZ| zuz%0R{`L3oIkES}+9q?`x(*}W&12{fBS(;GQ9`ui@; zbq4X>>EoO}-V6CyKgD+a$60R|`csJ9LrCnYo%6B&BG~@Lo9bZeBkvmCB{^;HQS^2R z+xpe^b{XA69QL-4c3vI(8(^Cwdb@%x7rhmK8Zno#+7Y{oZEVzW4qGmI`!Kd#vA3TA zM{m93V(ajJ>mR-S9JamH$2om`Bl5BSd2H8@-advcSM2TMVEO3n6WCKo^!7|=`C#QcE{bl4O#P{|x`YXtb zh`c_}qQ8pBi`S!HLAK|(f_@co@3DukVS7(z$f^I=5q;#{m)tiH^Eh`3?h^Dj5!Z4q za(xTi9=wqId>dOo`SAG;wtWeo?_%pGuaCK3L;OCuzW95{Ylyz~#W^|es`u9WrZ(QU z^L@ngK2N;(2RZjT+IZ*WjE}eAy%pbwHlI53{SbQ=iF`l8mWzDO$r*ny+W1rGsOQJn j?pa(x{{-=DXXvi={WRy~L;PMk_cO$Jef(V$`@8mk!MVs% diff --git a/gsk/vulkan/resources/blur.vert.spv b/gsk/vulkan/resources/blur.vert.spv deleted file mode 100644 index 2d80428e3fb0d07c712f269a90bf22db5c192f3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3940 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 v{R(34wS3~z{?)|E`?$6~w(bLc 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 H?fL%!f`P-S diff --git a/gsk/vulkan/resources/color-clip-rounded.frag.spv b/gsk/vulkan/resources/color-clip-rounded.frag.spv deleted file mode 100644 index f038851aa61240f4adfb037ccf23f4621e492f04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14232 zcma)?2b^D3mB(K)g)~S=BealEl0XV1BtQru8A37;5;8QYI!tB;GBTMNW+tJCkcc2Q zRKxLaVbid#CzbA9^;Ip57b!vB`w-@uy2 zm?z;~8T(3HU+m6!DhpvK=T!Gv-@B=&qnvYeF&W*(zHCARnQ38~$$2K~i-;#N*5(;m z>=ii%x-Q>Q@KAi|zvqtFvBiGj-(^1rm?%~`6qJ@dL=fY=`!cpAJe6^Mi5rUPjHkM; z&JJVB^~!n0dK)J1J-u|A>{?<#nItDk;3jAv}&quOt=);)E>x)CcWjJF4C*aU( z?)Kizo&9YW{y)=~wa(pKeDhdEYYN-%#9{ zbnoLDS6|!**w}U{)#y`SJjzItP2EJP*Ks)Gyf$zu$L!E|+@Yo4uJCM zRM9U+?;2?B-IRKBEBa9H>Wcf(FJMFL(}Uoszjhww8;XZAo@JHmdKfNW*CRXW4aH;V zaV%>wb;T2Kw5^=$x8Rmd0~=QK_V|$Y5kUp@g}m3s&3)*Nr7l(8BWY8EFP}5sJLw7J z^T&8!-Aex*PoLVeTbr*lL-%%l@g!UybwHQvsv~K>u7-*}x}xt|(I=pHtm^RgD)a53 z-J7)38;Tj|WnXGk=`*vEb@y#(OY`~~-qo|Bd|G%8 zeLe5$DIe?QoW8bq^|bJ0snxjxJzw|AithV>p=VEhaeBr6s!Ts2+s6j-pTLZhIIpqI)MQV5y$ju*s5_r_d!p{8 z?wUiNK$LOQ$?3e}$)HBYX~-VQ)*l8ovj^Sp%b-@xX}We&dX*-MD_sACEXG*;c7997Xz zLbp!m>IFNO=g4*Sp}Q{msQYm+*RmV5eXh!B ze=1?)qW0kw9`_a3Tz|N(91m^@5ui7Q|JdDpdW1AU$7ROxU(S5dt?tS31HP?NXhVDJ$ zvsAr_tgdw_;`-gsrOaV1$0lCgbsvxJnvbPQ=Tp~ao>gGitIfI97n8+2%_XkYsO=i& zls^IN9NLX@O>*Y6Piw%|w2r5o{aK61DPHzgcuLB5GKxN4!L3W2zQMI5PS+Nycdk=V zjMrbg_fhoWRCH^*o_X{=4XnR>tp5yftlwU%yC(arzr8T_OtA0A_0gt}=Rp1?R&*5N z{@WivXL|X}J`z9Aub&~s?(wdO=VC0Q=R$4?68o&~`|Vu!{dTVVo;%muEBeKm?sLlb z*t!3e75&dG(=CH;S5a(Hin8Up}5s?p{lfe3{M#5(eSpE+3_*^_0F;4zD z=4oN{dXb#k)**84sW|FA1#C@YnAy2cMLf^0L0i;t8n{~L>2UI{)z~u-S-v}okxqHCI$w%*c!Op2I*4_tpecD{R_owphoz5Npxy z+OADpd%(tQP5Isn)<-^SejnI8+ML5@v|QwPKUgl#PQU2!hrrQeeVyCh%6lF?o1Q60Yw}N!(IK zm&cq4`W=aLEw_Qy?Ya4kHAlpL1#E2is^`AOgzrCr&F5>8 zIDh{$8Qp6F;(MO)j1vc)N@G50#&acRFRaq?d7t(T+cK%cu2^XTh+Cie|Q{$9jhSesnT`%SRiI%aj=Zy|Du zm-)l@+u+>yJLq!CaHI|ylk$8QZ0sz=occPyz0elx{2o{??&!?)@9sysHrBYGk}0kq@6Ag7sOAgwKz_^3H9{14ztmy!Nm?m~00z>Sx_P z^Njm3Vr}|(uGHgP+2_3wuPI2Jt3AP%WukS#=(LBlrJ+tF=7= zCm*?g1C~>&{r@dowYJ~E$w&N?U^yk?qqe8utkpB-Jo?6G$lrsl-7C01fMY$u{SnSQ zUcvnd9J%B3=bz!sX%1ub@t$?Rv_)^92FpeLe*w!WUe+7F&wz8^XVK-9SnFNfGtZ$v zkC;oJo4IG#GQNPw`?~R0MlWACSp6C4;4@`Izqx;}|GZ{V4;~D)OW|yQlGx|GB=-U1LC3JK6`%CB}(f$1;*ZmD9 z*ZmzP*ZnOf^!dd5drau&^S7ALozLH5Lf7tZF`;X3%XIDj7L(ikEhcpB{uUFu@fT&f z-?#Z&Om6qL81=ZP>e20K6B2vW04E>kvk@%k72Ga~lMZe~;yg>ijZ9n}T%7GuaOO0J zG5W-L7!B6$S$8kht;@5r8(2=8`>3wX^^6019<;fq>hXQk?%>JTjM1i#=R!XEFaccc z!$dgwxVI*Oa#4-=4|O?@@EVz0kGAYwzA*W97GU zPrAl^z}BEG^6d+LrFo~qYYV^ql3#V+Y4F-&-sxat<>f{&@BU!t)@JX#N93Y+2ZF1; zJ4g8{#+G5@XU}NQ@mxqI$TbsS~`63s+Tm-K6@(4Kj z=;e`MImKRjZ$)j3;bIL(fuom4gSAC3mw@FW?ig_NGLKsduPx$^1mG+1tF1W&zNZpL4VQtf zA%DhR4ksTqybc^Snfb?*L*x$7eV_zR$c8Y&|o<`scM=gaT)I@yVw>Q9PyOZ8J&(&aK37sNp@}s3Gsid*QW34etXRD{ntyKF8?C`@z;@ zkMz%Lxe2}6kDKA-qm~bVy_cIXvhwj+b~^Uih}SISNb1?2@!*6x|~wI zBImu>%;{&MsO1}Q@=?ouU^(+e+&94yXD#abMJ?X~=e2wrT~6WOP7*o4gTb6r7^9Z& zg5{%@?}6pa7jfSQN1U~&>t~MXGl$CwK-nW3)vb{{?mqe}}fNN5T5ao5vo@h5s+Wa()l1|1ZIhBl7y& zW4ZAE6kHBTpjvefx*R$MgD+=yHmeL&X0Hr5gWd zIQfWw8Z4)HIYj(lP^$6Iz{yAavtT)e^4W!<&rHw3nO~py9_o3pHG2j3LgJ)@dlAKW zui*ZgIO%wO{2Pin&0&l_QU6O|>z{&nCfwJ*gXP2LA7Fj1z!p9(M81VnGaY^yy7L&T z&9mlS%NwIlJy=eg`>yUBjf}e>&M}-(fA@Gq;`R4jsC&PdYb4m$Df4KH`Q)RI}lJ#2@7_1ET}se9gxn+@KN(HL#|xbN~2KMyRY%{^6LoO*I7crW7R zqqm2F?PdHu(|oXg^5*cI$az0D6T1K`w+d_y&-3Bv^5L^E`K-=-7QxB;KE;?Lz{bgY JkEnZ({4Z(tRk#2E diff --git a/gsk/vulkan/resources/color-clip-rounded.vert.spv b/gsk/vulkan/resources/color-clip-rounded.vert.spv deleted file mode 100644 index d202725245bfb45c243fc22addf51895bc15e084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5052 zcmZ{m`*&Pb6~_;qNz+0~D1A`0#1sltX)9=f)(Qv(QXr6M1$yE>8!LS zeVp>OHmv|jU@J2|Hhy4yXSX-AbJvxZ>v49fWRCg_r=d))@_S*b(NcL1dJTF9IsyF! z`VjgEs_?S{{&#|_>C7}XUK^X37#qK-Hodr5>-LT{>$PU1Rj$ZVc-cY3PHwaEIq8oo#$uuMMy z@6@|XO**&lW7?-WQwxRt-adV~Pk-PPy^nCl_QQK0pdD7;+@@=}5e+Q5K`Cc0>FLOS-chSqUJAvL_>d{|r|DezAJI9_S z7$CcE9(`ZC*|r2oHTwoMS~;}8bYBLr@5jS?<+>CJ)RUV%7{ySEs&fr@V-#$J>+BCUjvLg!J}*{a*)D8E<1 z#iS8@{hlgs!FDEGT_1hzL7SNN;X)SQ!u-~ibTR9F5^lY`uWH(iET(+}_EEUxx~$N* zARDt8{X)3@V)o!!Y7^gE=vxcScx@L$uI=<>>?M$x6h4W>$4?CDu_`?Xj1r0&}j)Bgpy=N3JWBEJG@_YV9Fu3c;d$#-QfF>R80UWI$_ zwOdEsZ=jg=*Wvc*?A70fYm2^rk8DkKl|puH8Cf#%li~B&N+8>c%>UKS6$f#I-vQv55UEa>P0d_2}tu$nM`b z=c4{^rm-7x9@ftP>rC0V=xY4j_gRp$Sp$z;+Y5YxDEGSq5|doc*d>pcoyg{zAi}+T z77~*@3(w%o^x-|b9MbLz>xgN~7x)<_&`-bhy zKE4Qv$6l@}FmYFTFAo*DuLU>1zLUkdU570GA9kZ$p6gn4*D&N z1@1Q_=5}L&$J}m07n5A}H^kK3%gu#uF8w0!7_#-sdH17>N8VeI#iTfo$a^c8b-W|` z#hKiOY)w~S&Rk~D?hvZ zJ$$3kx52HWZ{+?aa({2%0uzti-$oXb;`}21J7E32)xg9f{vfiL6!Ak$$a^&f*{g5O zItQUR$3w{W?h0%gIrbCS448Rbfz^>Ccie$lFmsy27=8R^d0yJ$UCbeiMgQ~2Vv@^# z!?%H4_Wdrpm=t^cm^au&Ux3V|&&%AE!|)a){txdB2pspPfP%j~;r+ z_7L}Z30X{kiLA;|?D~_72D2tb6%`5s8h$@y@A@wny0X3KzlU#^eh)&v<7G&j za}kTVcn?P)*Jdc@asje)`4l|n@Gx?DE|2u-kCpVtk)J5^==o7}^V+Ae>aoWkA$vaJ z+RY^v_8%iV199#4A{KA)C&*$qKr!>5B8$geeiB(sa(R~{{wd`C_@}|dBmNm=F=+)< zfvmL~{yg*?WWE>RFG5=(aebWgOOW^wUrP0tA$!;f*_-+GaevNEyZK&+zX5rtVt>1k ze^KC(|Ci{-#dqLMWHDD@Zy}3WH@*$OLe^K?#n7eDQ`8-V{~EH6KKAl9{5Q~RkiFQe Rx_;5eZ;|c8yQb`2`!7Fr*MR^4 diff --git a/gsk/vulkan/resources/color-clip.frag.spv b/gsk/vulkan/resources/color-clip.frag.spv deleted file mode 100644 index dd3637925d50bd41dd001a0014ed045d659512a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4132 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 Rx_;5eZ;|c8yQb`2`!7Fr*MR^4 diff --git a/gsk/vulkan/resources/color-matrix-clip-rounded.frag.spv b/gsk/vulkan/resources/color-matrix-clip-rounded.frag.spv deleted file mode 100644 index 78e0e03fa4f2c561c11140590c3c54421024b8af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13924 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 BNe=)3 diff --git a/gsk/vulkan/resources/color-matrix-clip-rounded.vert.spv b/gsk/vulkan/resources/color-matrix-clip-rounded.vert.spv deleted file mode 100644 index 3b66db714f724f7e1867b04b88c50067beae2ce2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5720 zcmZ9Oi+5aA6~=FyOw$*o4w}kqNJT~Q{ZXhqP!M3-yn^7p%QcXQgq`g->M_ILK#XP4jci`gBQSyppX9+GS88)KULLtz@2TVHK<#uHcX{> z%dCMMZnfIAg7aB-pY+9oIRC$Z^HS`vqnYF;7@9%=&*V({*;@;&P!C8--b8zOAvxeZb<*dQI%@=!nx9Q&ArM@|> zW$qZiulRjhQO3Mawf0G^zgzQuUvZbA^v~@cjByrSJOdvE%Oa-(SYu$9($jk~6*!+gR-X!7^rE z_4*t;k`hO?=$wkujIqOAK%4mVc9>b;nE5^f(mVNV$;mscE3}`(ZiBe%N3rFEL+x$Uw3_+zz+8`lSpNm=bp2!a za$+Iy{tuPwzld!PHL?Cn*lDd_#+MVZKD1wfOZWOJzMKec?DaJ`bE%1Y`8u{WID-2I zww&h-?wi=IcLet>Y&mstr{Bglr#W1s#{2NQG!}J#7u(;h=<)Zk<%GkWq5VE~s(l<^ zPQ)2Q`vjbOMcyA^%L#{hsaOwU(!Iu-E zjs2g7Gnbm^=})n(!4cdu*mCK8{0!gqj?g`eEtlTM&+*M^4%a*j;y#SU8GnJD*8NL- zIpHv8Xn%#BYJZI{C*q81>-fI`Hvzxlo0)$L27$bq)y%&G^3j*yW1CYx?&S~I)@023 z=a}Wpv4;6C;5lH-zi;}+s?2`}&jVveO5fN3_CLUjW$cC0|1YP#0QmPw&2r#a0ydLl zG4s;IUWV=8trM8z@6={&*Tz1lW4k8a3bLE zR2zFcAG443Y?4PQ<~Ut`Zp;H<&7Va{zJdUPqaH93MC#*R9Jy9~}e zj^HlGj@bGSy0{q_4Z7WI!{%f)-!jx8q~)*IR#*s1m{_;Mo7`V7Afqxe?> zbE!GZZ^{+SZw2!IqKqlR7BX$@E5%LzwX@7wWH?bY~l zBI=F2?>J8TPJB7xFmL?7&AYJ8r6%s+8f6Z!NvcqP7L1&H6^6S3{%D(3jz-Ge=l_<8Ba`KR$+=NnP0@872DncoL$UvU^y_4G3%DI?*9YD%md#5 diff --git a/gsk/vulkan/resources/color-matrix-clip.frag.spv b/gsk/vulkan/resources/color-matrix-clip.frag.spv deleted file mode 100644 index f5dfbb474b5808afba9a7faba0d940c1b3e416f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3756 zcmZ9OYjcxD6vr3R1PT>exwV3r7Emq@7EFO!fkLGzT1*fW?=j7VKA0vkmr}f7p@P10 z#!usW{ZL+Jbo~D|d+=#?=FBpi`(g*b3eM?8gW~NIAJNzvx~PD zPq#be)0wGBJa)N+cf@D6yavRfm10!Kup}yrYND@1UD18fu;TDjK}iW!aqc%I8E`vX zcCnDn<+6*{3Z-VV(C$2_RSLDJUMZBLR;AR5Rx9{zkNHLQQmtE#J0#^1?;|PyU8+&4 zMM_yJ)+*)WtJSkJtJTbmV3$-6L*mUwTk?P=Am2u<(ek#Gdmde}@gQP`V=*I}Vg}s{ zrWaOjEk;f-pwUFjH}mXPnZm**PwcBfeH zw56w%7o4@S+LWI1I%nkfztrf~%k5`4v-kM@sN7iw-{$=}S&uJQqPxpJwQNamW43;b z;_PEWys19KynX_`*eb3B{bZlcz4(8=1OARg^}MD}eA3+$?^M=0-Btz2=j0AW_1l%T z>t*l5ee(KTqtVhOV}9JPs6NNZ-S9*Au_=G&0-m!0()XI|@jf5)>EHC}5Bv1>O?t|0 zNT07Yik++7YPHhxy)!d#Ru!92YCn~}6x->qw7n!gx2_J@eyi@tcid zoGVy9h9v^_MGWIC@oS2*y3=WKVzcUrb2=Wbk1o4qZW4baj*4qab~vk&IDA}Ba2#K2`~4~fj#v4 z=;^kHJ?elS#^sGa@_tFwPKyqx9{WMZmX^L<91OxfD2|=}ud?D%7YAC^a2++xWO5l7wepr^%Wg3iA2*(aU(q(xgqr-FV|vh{FG zvgO17HR)*)3xD)U5p$y68F6Z}ckJ+th_zSKni6L|e1NeLXL)8NvrM0pY<*E@Uc|gD zZ%(pv>zAoplteCiWuNFv0mELBOfGuEj$RJfn4{S`?v;OW%&j0S* zA?4#Eh#ic2kvI#Sdg%86w6K3EPHy&v9i6uVhP^J%BB%As+cA45$ecTNbl#8ISA%Tx zK<5o%e^GmRES?e_mb@X3&OUw+N4I@Ek<84&se}GBVCQs?v2j;e3DKWIlH&MsKl#?$ z%(=6CYfZ<_x7Kvt!o!%3eLd(Gm5*8R+rpf#s0uS`h?pxlKFo`68aO(+`8{WLcND`s z_(0U+SF@+4ndRAfG{1pJA7 z$aP#q960-@2AJ*Plw^9rMm=Z_D3o+Q(Cs=%+oDqxfsqKybWXRl6enSi&lgyqE zinE6^;%7zpPm1V?cl5dl{8#x*iJuEtM*I)uy&%r|TmIP2i@?Z@Y`Lc;_vd~?7`W~K z&ES*M3CwuhIWUOD8|Pi-)fx6nB61l0q#nU9i!O?=Tm37NsXr^aDL?jhRfI2#nd1Xy zF>gsGW=>==*CZ1|FT~&jW-(dG#LSBnePI5mj}GyiubgXO~;&r9Y^<7Bp*!gGBzq%)$I_e9Ks zyGl;-;BPgt+iY%0re^$p-Ifk+eZ3!i><)Y&9SmYoi#h%r&iamIe8^*UK9o$IS&^N= zN0RYn(HlNs7W1)WV&Z50iF9J@tnmS}m`^1W6F=+Eq!VLjjSraZ?{mq-@P3hbzyAT_ CV>uZB diff --git a/gsk/vulkan/resources/color-matrix-clip.vert.spv b/gsk/vulkan/resources/color-matrix-clip.vert.spv deleted file mode 100644 index 3b66db714f724f7e1867b04b88c50067beae2ce2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5720 zcmZ9Oi+5aA6~=FyOw$*o4w}kqNJT~Q{ZXhqP!M3-yn^7p%QcXQgq`g->M_ILK#XP4jci`gBQSyppX9+GS88)KULLtz@2TVHK<#uHcX{> z%dCMMZnfIAg7aB-pY+9oIRC$Z^HS`vqnYF;7@9%=&*V({*;@;&P!C8--b8zOAvxeZb<*dQI%@=!nx9Q&ArM@|> zW$qZiulRjhQO3Mawf0G^zgzQuUvZbA^v~@cjByrSJOdvE%Oa-(SYu$9($jk~6*!+gR-X!7^rE z_4*t;k`hO?=$wkujIqOAK%4mVc9>b;nE5^f(mVNV$;mscE3}`(ZiBe%N3rFEL+x$Uw3_+zz+8`lSpNm=bp2!a za$+Iy{tuPwzld!PHL?Cn*lDd_#+MVZKD1wfOZWOJzMKec?DaJ`bE%1Y`8u{WID-2I zww&h-?wi=IcLet>Y&mstr{Bglr#W1s#{2NQG!}J#7u(;h=<)Zk<%GkWq5VE~s(l<^ zPQ)2Q`vjbOMcyA^%L#{hsaOwU(!Iu-E zjs2g7Gnbm^=})n(!4cdu*mCK8{0!gqj?g`eEtlTM&+*M^4%a*j;y#SU8GnJD*8NL- zIpHv8Xn%#BYJZI{C*q81>-fI`Hvzxlo0)$L27$bq)y%&G^3j*yW1CYx?&S~I)@023 z=a}Wpv4;6C;5lH-zi;}+s?2`}&jVveO5fN3_CLUjW$cC0|1YP#0QmPw&2r#a0ydLl zG4s;IUWV=8trM8z@6={&*Tz1lW4k8a3bLE zR2zFcAG443Y?4PQ<~Ut`Zp;H<&7Va{zJdUPqaH93MC#*R9Jy9~}e zj^HlGj@bGSy0{q_4Z7WI!{%f)-!jx8q~)*IR#*s1m{_;Mo7`V7Afqxe?> zbE!GZZ^{+SZw2!IqKqlR7BX$@E5%LzwX@7wWH?bY~l zBI=F2?>J8TPJB7xFmL?7&AYJ8r6%s+8f6Z!NvcqP7L1&H6^6S3{%D(3jz-Ge=l_<8Ba`KR$+=NnP0@872DncoL$UvU^y_4G3%DI?*9YD%md#5 diff --git a/gsk/vulkan/resources/color-matrix.frag.spv b/gsk/vulkan/resources/color-matrix.frag.spv deleted file mode 100644 index f5dfbb474b5808afba9a7faba0d940c1b3e416f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3756 zcmZ9OYjcxD6vr3R1PT>exwV3r7Emq@7EFO!fkLGzT1*fW?=j7VKA0vkmr}f7p@P10 z#!usW{ZL+Jbo~D|d+=#?=FBpi`(g*b3eM?8gW~NIAJNzvx~PD zPq#be)0wGBJa)N+cf@D6yavRfm10!Kup}yrYND@1UD18fu;TDjK}iW!aqc%I8E`vX zcCnDn<+6*{3Z-VV(C$2_RSLDJUMZBLR;AR5Rx9{zkNHLQQmtE#J0#^1?;|PyU8+&4 zMM_yJ)+*)WtJSkJtJTbmV3$-6L*mUwTk?P=Am2u<(ek#Gdmde}@gQP`V=*I}Vg}s{ zrWaOjEk;f-pwUFjH}mXPnZm**PwcBfeH zw56w%7o4@S+LWI1I%nkfztrf~%k5`4v-kM@sN7iw-{$=}S&uJQqPxpJwQNamW43;b z;_PEWys19KynX_`*eb3B{bZlcz4(8=1OARg^}MD}eA3+$?^M=0-Btz2=j0AW_1l%T z>t*l5ee(KTqtVhOV}9JPs6NNZ-S9*Au_=G&0-m!0()XI|@jf5)>EHC}5Bv1>O?t|0 zNT07Yik++7YPHhxy)!d#Ru!92YCn~}6x->qw7n!gx2_J@eyi@tcid zoGVy9h9v^_MGWIC@oS2*y3=WKVzcUrb2=Wbk1o4qZW4baj*4qab~vk&IDA}Ba2#K2`~4~fj#v4 z=;^kHJ?elS#^sGa@_tFwPKyqx9{WMZmX^L<91OxfD2|=}ud?D%7YAC^a2++xWO5l7wepr^%Wg3iA2*(aU(q(xgqr-FV|vh{FG zvgO17HR)*)3xD)U5p$y68F6Z}ckJ+th_zSKni6L|e1NeLXL)8NvrM0pY<*E@Uc|gD zZ%(pv>zAoplteCiWuNFv0mELBOfGuEj$RJfn4{S`?v;OW%&j0S* zA?4#Eh#ic2kvI#Sdg%86w6K3EPHy&v9i6uVhP^J%BB%As+cA45$ecTNbl#8ISA%Tx zK<5o%e^GmRES?e_mb@X3&OUw+N4I@Ek<84&se}GBVCQs?v2j;e3DKWIlH&MsKl#?$ z%(=6CYfZ<_x7Kvt!o!%3eLd(Gm5*8R+rpf#s0uS`h?pxlKFo`68aO(+`8{WLcND`s z_(0U+SF@+4ndRAfG{1pJA7 z$aP#q960-@2AJ*Plw^9rMm=Z_D3o+Q(Cs=%+oDqxfsqKybWXRl6enSi&lgyqE zinE6^;%7zpPm1V?cl5dl{8#x*iJuEtM*I)uy&%r|TmIP2i@?Z@Y`Lc;_vd~?7`W~K z&ES*M3CwuhIWUOD8|Pi-)fx6nB61l0q#nU9i!O?=Tm37NsXr^aDL?jhRfI2#nd1Xy zF>gsGW=>==*CZ1|FT~&jW-(dG#LSBnePI5mj}GyiubgXO~;&r9Y^<7Bp*!gGBzq%)$I_e9Ks zyGl;-;BPgt+iY%0re^$p-Ifk+eZ3!i><)Y&9SmYoi#h%r&iamIe8^*UK9o$IS&^N= zN0RYn(HlNs7W1)WV&Z50iF9J@tnmS}m`^1W6F=+Eq!VLjjSraZ?{mq-@P3hbzyAT_ CV>uZB diff --git a/gsk/vulkan/resources/color-matrix.vert.spv b/gsk/vulkan/resources/color-matrix.vert.spv deleted file mode 100644 index 5c5b37ad79fcd1fa8683b0f71dc7ee539c0e74ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3988 zcmZ9N>swS+6vhvi;hLD5mwJkZu#!-+Ld8tQ&;|+x#q8cN&K%&>aLzPy2GK5xB0+uX zU+S;wOFg~6J$u2?&GWL?de^(xUi)^YqkXtL2-<@FU|;ZO&}s*Qb}@mtF4q@k7iPyA zX=QBu%xM$@L5CBf*&iHmcBlTYmZBKvbzxLEE6fTdAr&498^WfrC2R{jLWlm^)&H%8 zok3qvm@O9O<_fddisf3Z*hueJ!(ugx!(t_>hvhU{3(@stbWvQcHY-^{PKsu9=yacRWQhxJxSuGkijO)P0dX_UlbyPaNJ)8eBzU5FlN z2N=_ev3D9XrKMes8fhsmhr2OOideH+-HlNvXG5c&^XliDjg_e+X0%pL?oP*}SzW8i zZ|SImJuKc$nsKGE%Tt5n??sh#1-{#jXMV@8gwgVfORZSW#W?LPXQyuD@ z&)rFysrI7f-;l4JbjQVcmgGnA?Qp$y9Aa|ro@tE8sU)da9LK$DaWfT};yT?ubYn%a z2b(R;R8mdq*Gp+V@@K_8jpAo$r|0e}rwh!v`$FC>cb~o9=%AqaxHp3W4WIYHeSAll z)=2II4UT3U`wd5L9D5DN-WrDu$DS4xAs@PFF`O?gC!jZf*s;%Y`WOT+W^~MpZZgA> z7j8boF+bd5hNBj^nm|p=%UIUW*=F~Hv&3gU;ylPbzr%ey27HY3Bu1@hH=gl3+*z8I zb46?Oa-MsBhx-PZmNO;RC6JeIllg~~fgD3x2W!PXA`5L^I4V8$;Ir<${`aVd14HtA zy$z3kpL+D@hY z=CJG_cy!q`N94hwG481M;f*^c8^6W%x;kE#&m81n48TT9&Fp8Jz@AVuK5qk#IQNAZ zwX!E8j^B&(UeLlb9)Hwxj6Wrtbu-@f@O>X=4?pm6xIrm-C(OqfVt_nn)N{_nnFpV5 zCLDR0|C~TOCVxUbc{uw)S=@Ew;B8Ih{!l)50S&qF`S!sP|H#{nx4ACMwtF?{xxyUgja6gIVy?0mvy2YQGZex6|Sg`Q|iYA>V`+dT<;3-Po=>>Eszs_!*lP+rY2(4&%VHs zmpgb-;9hdi$;)|Na&}8IDf^0mhWlxAf9!elr{t5{YPl*K4g5{b#oN0kz|)NTL^d4z zG_O5m&kF)tVtk+Y_WY$B#HI!6L&F-lN1qD3Th_oD@zGgr*JV>1G2RG1G4jm`*)y5< z96T+1emCWFPwcF3$%X?ov`8c$#rV*>Kr2U6fBw zaxexB=fS&N6s+#MvP**PaalGTppnzG71>#BC?5{k8cn+-j=3!FvTQg&Bd^`v71`uM zWA7-EO)bPM=MS>8^ZzIx4m>}9Ra|!dRrzqhv^IY%j$CMLPZQbHKr^l;8;;tI`$;zA zX~xxM!=bY`){sq3axeysod+>nV^emv?lt*vfJRQ!-jkixuFHo5wnnrg^6v}T@7n|U z2R)C5H}tarZ~O9#Y;wZex%?`dnut+9zj1Kn7*PLM*bs<4^ggi(*}n^0KDOz7Vtg0= r5O#cQ+x!1&wG#rrPiXoDTCZ?U`Fqs&3H(;Qpx$!5;`#r?W0T{5ed0Y% diff --git a/gsk/vulkan/resources/color.frag.spv b/gsk/vulkan/resources/color.frag.spv deleted file mode 100644 index dd3637925d50bd41dd001a0014ed045d659512a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4132 zcmZve33HQG6ozj}Qd%hcQk2Ekx^$+1fMv6?Ss*CY7DYu|(liOpCutI!1wm(|A{J0_ z-%wG6-{F7o*XTH-B$=Qcc+x`cPcXPN7ENzKSiHY#J7lgvx5ND<$TSF>DG>&W06cPx=fA&B+pJxNU5^C9~x$5<#8-g#?8YP_+Yn&9$ zAI)R-_>|@7Ug{+e6q9I8Sj&HXYax(M^jjdQhiM2E}x`(PdHnu7F%bO z^gR@nNBwT8i++mATuv*V-ipc-I++%}ra4~2$8DHC{O|0N?#DL!&AV`?yCpo)s1-*m zVRj=G^@fbzYbx4hoQNQr_ViqF3Q)7HF+=e@q9g=FBYQdqE9Vb%G>B; z-wK-9_ifEp)uG9yh37PL@8kw^E?{Z^b1q;8n0*^QCT#Vm#2*W5;yb_}jX1~mO5YmC z8u%TIanu1f5#thpn~ZVn3qKkwtsbNfVpr)ebH6y^(AP@q)Z8cORn61^CdVe(__pEt z#B>K84&OzZ@onWy>J4+A!>?caU8WgdFhY*in#o5jcul}?#HDjL;HjfXX(QzL%ld0N8QtV&q-83|lmHp`dVj|aQOo)*?Puts)$ z9)4X2?BE7KgS|C1lb=|1LNjZDZU0|OckbeWb+Z2=jo4PNw7xgv;1Rp$U!`|T zZb_&Gd^>QvbjREec^Itsrx?B)d^tznEUS||*J7BS;0-c6m^a5TeRMP6L&|zd`Ueuu zn)BVKHQ4862|SoH{YWw|*{_ON4~&gHeIns3v9UIIudz5A&*+eFPA5XXZ=~bHFz#FFaQGVcUEqkF&`PZJy@YuDv2(9> z4mYGz+jXsj?++6E;cfpvNw@uT)?oI;Ipfb+5c{))|GW5L!-pP&|65h=k#PT2L^x_?~cnI|62Jtb?!Req4HcZNuW=E%#38a7g?4 z?-JKu+ir327QaV29AfcS+g@?h%6+j8zSiqcNT+s&as0ru{TTP8IPx%z+b7*}+jp{G z968BB3_kQQ_l3>+?|^hTtN);MID|pH=6gtb-1jMAIK=k)n|kfA@Da&D2|hQ}E2El^ zO5p!c9mg~?{*nzoErFxI(CN?P0mEAj&q}9;3B`43eog|1Kf3iZJ<0dWSSz8QS8MJK zI=#D2!g}{>w)`goPd;?Z*C~CIgt1;?-^YfalY66td=F^m`+z$sp%yUj!l^b~Y{O9- zJ{!a2E5|VTDgjeJ@5hT0>i9k2mjc(LcMbc?67Do9!A4I|BfRB!MLIbQzbYLc-c@qE zCV@LGvA5-Q>BM2PxHqK7^JIkMc_xM7$TJsmXQdN2DY5>Zl1_exaXIO5?8UgebmAGt z6{N%AXWzyd>Et8_G5A#e?;Q2C_TJz9IQ#7Ln49Yy>2a>Zz2N%Y?=BffU8fKytlRVA?BeWr z6j#S5F20AyA(!)x_#Ae9Ue4?PMmembEQub79*KSy?TVg?o{4h$>lFV}!FhMk6=zGu zxw+!(?NX)LEJg8lEhyE(dQhr{t)LQzn*n|YGJavbQfpVU4qfud&X3-!ITn;aOsnYf zI`VR(U9Uz?NRO|aNlGiN#ztv1S|8n9nV7_u*V>)i+J3l3OqaBy;@-DKf>N#AS`AvG zQQT@*;xQ%~Q|!4(`R3dae0^N6dr7=f3!5c^pW{EU=il#MksJkaso99aIBe9D+MW~a z=g7N3;?uQK`$_4Il@+ClR8O~K)8^aJ+H|8H#pSwCdXo3JM7Ocol%Dvpr@r2_QHHZ; z9)B2CksvXM?_wK7*b4Z4`Y7(;O0jT zuv`X124ha%Ugv!EZaeGbbRoo25ey152rFXxsQvJJE zus(F&B{2GRLA)U95V02Y2@$!8zbK9``OJPzG6VbP;@SC1(#b_0=0jf+f#JU_PERc# z`?Vs%&i<^5V+R|O#Q7#a7&eGJp?FS&oq5oCi@>n2i&Hm!LDw_mZRA4V7Vi+D6OYdQ z0mJ^2IJu}3J39Bt^8cF3%z+(!H^tDI?`cLS|1%N!FX^LkozO|kg=AYv`ph(o`s?9}?Bh%Xp$?92m3EcVADFl;-iPAq-+ zMa1v*jtD#b0JGR9k}Y;uGP>3Dn`G8c9DPCmTiv)Kq94qid|5gFCR~;u>*lSaH~r$4 z>#Y=@QxxkR6@ftvddz@Z%-fR5HKz#H!g~w`u@~&YUDd%kJ0rr*Fzl>kFmlc-2lI}J z3MmnT&tv7lHZGzrd~OQk9$gY~_qbowMIDz#;I@`4DF)8SuH{LZ`>JsA<2#@3+xwEi z|IuoYvwh`Tj=@_>UpYTVMD+DVaq6Sj*HfJPZGF3u;?}n*>0l6p`ufy0)^an|$u;Hm zB<}~3nJ=4nS~|Gpy(Jk8vi-2Uw}mkeX9PdnlMf{`C&RF!WUIrl8DZpL7sbtmyj-6a!X1^zyvjmQvTEOi5 zd?6VuyU$-r2e*CxN-`M4U|%i%YsvfLzYzv*@!v`YgY2BJwhPkBq9qaemc=WglOk|@ z=yO#B-lr3f9*C%c`$TQz$A|UNJM83J7q5xVi)?-Tw($K9Zu#qyiL-OokPOB!tSK3c vdF||dCmCOC1<@(dAL)H>NoF2=s3j7QMGr*OLapfdSsiW3)WKOp=B)h-s(DI5 diff --git a/gsk/vulkan/resources/cross-fade-clip-rounded.frag.spv b/gsk/vulkan/resources/cross-fade-clip-rounded.frag.spv deleted file mode 100644 index 9b1b94bee347d9ce593164c4a97775b5638acba8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15356 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 diff --git a/gsk/vulkan/resources/cross-fade-clip.frag.spv b/gsk/vulkan/resources/cross-fade-clip.frag.spv deleted file mode 100644 index 1885651b1a77f4d1f66e347aca6d3898bd5ac8cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5224 zcmZvd36q>v6^3up-NS@T5&~JxLWa1cDvN+&i6amQ$pndJkSK`Dq%+-+6i zR>2rRaKU{;5hZHecict6U*NCNvP#S6x&0mUW$;#=zUO`KIp>~p@3~)BmhZeGrDbVl zT9sZ+gRwR(he>clc^*G@|FM0&eq-PMo37Vlb*f}TZPtLQ%*vU1tK-5Vavu2{@@3>3 z$OYsg@)P72$W_G9ht1I{?3mK41gxej)A+H;@#DwGj~$+znw_2O_0P4NlkHZgIoW8< zHK+Qmg{F4HCA(HIaZ4q z)%5UXxRz{`ND(#rbeGsX2JZFibN$JBdv>OdO)d9Ut8>4sx03zrwN__>6B)#L;<7l^ z^wbjk3^>Ql_O^Rf1aXIi8+*ex7g=I^Xxs1;O*y2{Go1lu95TlI()O!C^9uh zE%$w^bGXyUnGSM$9=r0nyl@$=q!$NqvcGR8`xhCQmv1Pz!R~{&zN<@pP|I(OGnwn2 zrl{Q8)$|fJ<-LD<86HZ103T_0>;1dtr>ALVV16g^j%nA5SbqkeD$LC5FW`y!-prwH zhokLi23yTMYC5wp3m(|{-N^l2JiOrj24wz`R--@D!}^NsUkQGu**ZOwL$g-PYrgUP zOqlJ}SD0tXgDH)J7nyw%?kToc#164{e_ckG@aX?=CHKMV!q)GZzO@3|3u5y#mftzC zb&SJ$f8nd{+E8Ar=6e*IzrNm|*dg{CDfas){ynq4+8^aN?!@E@d8J@GG|VHyMi;Ob_YwGXCOCG;><{uw zoPO#X&^&`3$VPHDk2sUoy~Vz@4z&uCEF0=n_tGuF?co3ph)Ug+*KR^Y{g zbNyq5?pe7mK3{N~IgL-C8{2s05qJyt_emDCi~T=^KJmAdwi55t=&sAT-?PjPdG{0h zmL0Btmf6_W>AKkWE9d$bm>tH9e0|TZiyvq9JqOnRLJ3>n#R41e$LJNrGt^(~o0fC^ z=gh|P3|trc#^ttQ74O?V_T7rD`;W}xsQXXo_J_Q2#J**@P2iWA&B1rI9nJR?oV?;4 znbTjH?Ne=xC4L2wyO~}#rg0qB@lP1P58B!E^ZY8Jjl4GQ{WZkBo-J&i zL)T8;JUl}=?XB^fh<)ms=O>Q+zJ(q&dY0m-@!ROusE=#%sEje*?Ol;?RGjIKLYUY;EqNZNz>H`qJF? z!^ubNo6zNyrRRS$+|t}`fs+saThZl|@Q>UMz?rM}L)JKo6caK&vz;BrOors+F>e0{k zr0>_U0kNOgF>fq%dv_D!ey?MW`1cjO@zf)pcjWifu?30uv9-{Ry$vzmwamT`xf6)F zi2W`+xCGBE!L23u;Sx4pr-Y5yEwK6f{dhNG9)B#5=7buGtgjC?7H2 zi*Ag-??czd@3}GFkH|fQ#JA-G==!-9ejh|H$C(6|!tR=Vxy8e#fn&@)c#oL%hH>NT4(I)!oG`j1ai+3fq9((OWi1+Q9_au(BHoEq% zd1qq(OY}Q~_-)n4HEq0i`S71bmvhZK6(1B6RmuARIw>=QY^ reGANwAae7FG3@8Fh>K$nsQvun diff --git a/gsk/vulkan/resources/cross-fade-clip.vert.spv b/gsk/vulkan/resources/cross-fade-clip.vert.spv deleted file mode 100644 index 90df226fada3b69e9dbd715b51195073733d0853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7296 zcmZ{m36NY>6^37?du9mP2!teTamEmc5&}WC7zu=cL#jqIBo^*A!%Qb>ne>d^Jy}p8 z0aH>1sEAla6u~v(hQS>zMO56Y5Zo7t22@Z{f(oJ#zwh-sGjBS@g+KTF|2g;EbGJ8L zXq(@eB$JXU$+V<%Qj)frNgGOn){*u-y=!|H*BgV2Pd)8q1Ewd1G|reA$(+#E8><0IN-+%|egJ3Us2>cm50v-qZz<C*UPh-ub7E$POtmm8&#;d-S}8Ll?> z=Q#$aa}<*<$CI9peAAMJ^!0&$PP0+oQW_W@t_`xgrz|_5_U4u|rkE^XOr`3y<|rn| zHF=u09p!kq*~aH7CX3OA*R7-6IuRYo+3>#6`i7Om)q119it70nQynwexM>95jN=M6 z_a(a&p?g2m{n}g^Y;33#-IEn|N0hwLkqug0xu*t!JFq*Om4Ks*b#2DrB6uG3P7FTUPow2qCs3{f1`q;)=Y*X3%vOT<@5cAme)GrhvYQxt#Rk%H1DfgUrzI$s$HDZeCKK- zpocqa9ggjxCf}BSH(m&w-#2AbvxVmTYWAU-L(Mru(^hj%=Q3Z+^Iln645v#4wb2qQ|C-`CPplj=91+GDRHkNt1 zz#QToCwC29{Cg0+nwUqdzb&-8@f}PrH^x|N(5Ggu8T96A&RI$5i3Am5c~`ftPboT5hW zz^606Xa1SYuQrd!+v&~i7=6M#pQZOb=yx9Z?o88v2ex&&*YZ0vU)1>%xOK`MFTXF- zjQ=&Z`K?pG+;5he{@-P`bLf{pkZFCESTI$rMgD(d|owzY&`?)NL|Gk!ma`St76Z~it6eV&8)Q=V!1i`e`>=9l{&Q#+lv z=w0)k+RXD5ir-OlO{c#X#98=#xIf3|WBVH^{Koq`DY)@_TKK~`?)XP@-0}V%$&Y_5 z$Blm?$Bp;*MLyo&7xLw-W--0rfwNeP+E0OZNuTSGFJ-mfm7jsBKwZDUqdx&c9=O|IO*y$d|IauJa#YAuylg z^c&~<(HC?76FcViJmoR>zp-O(&sH9DKZWhvGN8y;qX7DRb8>yYtqyG8jXr-D$e$tjOyE0m-`sE8!Qc$yy#G^xZ)zHStmE`d zU(Kja>@$Fxu#q}#_A%y6Y;_IfF{n(z%5z=hOdtuF@pZJ{m0Rx@WGIh^+;;G_(W zF=jhC^qmE)%a|2t=h2^^+ReXh*5#SMG}B`(J(;F%%dcfemiq#9^Bdcj-MLlR>d&$o z?bui6I270p0q(2sekO2V52Lp}_xfd--b)|*_VP@ReOnDz6R~eGz7Ng3`SBOR)noh` zY&BtXeOEERb*=^GH^z0yV;$a)*}ygn#5xYgb{%u*qmGNP)$?_{60RO~yb4=Q*sNnJ zr*9pv&bWJGT;zQXc5B|(qNzvT*I}!P*q_MzdNk*8Eyl&&dIPp|+CnQ~M;)PEjAjm7 zX#LocH}2&nXy!D>#lV=jCj;2}-Cyne{vHLl%>}W)N961yvEA#V>HYiW{;UJu_t>NL z*pA8X{RX&t>`?_1t zn9G=*+?C7ew}WlqN$R+Y-u5&;^(%pz_e~3H?1jIYlbB@o)z9r*P^ZVdkz&af(k2Ss@+w)P^Z!Wd)e*oJ(P}grQYVj6t z#a8PDvF9Jez7@n>{t&jBuuTFn{=?X<<3EC?9^*fXttQ$)0XWyW^dASifcb8t{{&bJ z)QxeUKMB;Q@}-o23Rr`2)@FWVT%UWV-+Xt_e=fDh*S8%0`Am=eUw}I!3v5nPt5?BJRXI{_xE5Lb-v6egOzY2B(_u5+J#zh@p!?q6Zns)xKEri>S z1>QC9$%4%GtsR%y2hkr7yn`>Gk2`n|wskp|{WpMdaYlD#n!3$(MqS^;cCI+{yRn@w ze`mf0SC4$(##R$H^TqFz?_itL80YZ4eHWP1eX&-#ci8j(9yk=JU!7^+$2O0?Skn)% j^K1GcTuror0`Rw=Ie!GqVa)bS`!V)iK%ZwI_YD3IdCeI; diff --git a/gsk/vulkan/resources/cross-fade-rect.vert.spv b/gsk/vulkan/resources/cross-fade-rect.vert.spv deleted file mode 100644 index 9ed91e1326b37a447c99105d65413e3e4ff73c42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5840 zcmZ9OiFaL96~=FyyrdJQEtD!^O)V-yt*C`kDo`vnEd-ic#MzkUy(AaY_riNGrO40% zQV<751(^gz1?PDL6ciMkaMmh_K&}1-x?D?^zu(Q>=^>l-arXC}efHUBpL1W@F>`r$ zmd)V5gR*~RleRFM3D2^*SywUk_HFH3*=ko;t~%~mBj#rvMW8VU^PkoUwh!iY{U*2= z>;X4`d%^wSaj+Nc1N%V-|IK8)n?#-2oUFHRpm+1;-o6b3L*wHEt@Z_DwSlp`UK^<9 z&Du~q-%&GeRuY%jhsGwVX+VXDw3bTNoy}v9yxy)gTVy$E$MCAPBFif5KZm(Npg)&! zTj5u-1&l*u`FIgtXr0ALEd)w@XSRf~F+AL=wOa*W4R6+36JtbF=$*OxCt9QH8}(Lu zuufEl+F9th+4ddd@X0uP>3##-8WZ(uYf862g?@fsZI7yV7wf%&LLaT=Bcny?qJ}E^ zID0Y_d_+Fj9Nb>=d>S8zr)To+^7@;KQ+h^gKCr$cJ73=Lyj{f|kBkkRQ){+sJ2%y< zwVjjaem^nj{k7)g6tp;xy5?M?mACUooje`IJ5hH(-%Den&HN<)D4gs?iSBt1oMtxL zAr|YpiZ_oonZD-V9$?jvmRr+y;F}d>!@f(TpZD`9Uhv#X0kj49pINyeG>p*C} z3$^}4^G&F|2lUcc_b{%P{k_+vK$H7@`reNQ=8U^h(_F6>>%EtBz2CIl+RSH9PZ;dL?gfF;D+BY7w2;s3K3)x0p+j0x?ClBpjFU;$8f-n!Ic?M{5P%|tI^ya1>P%^pPT`|#7)3*l4m-f2r$+;zvsijb>wjF8sI+0Sj)AH z*MU92TC7!WT-0$RzI8a~Tb4U#zK?;lw>OoVx@KJwdo#ZG9e4I|d^MpNdpR}P(_4VK zjEVKP;-~9xgR64%;A$e)N9>(w>0Woi)kMU`UY|rWmoafK zpTf5WEwsDw)jVftpT>8+7TRa<)r^Zf{VcvY&EXnjybr%W=c4Y<;rsg%J^nntn$XM{ zv0uPXW4{Pj6LH3f{SumcMcyyts|n4#@jZM6-(1GT_wZGGYjG}eehoj}|LbryF@67U zpr!kN6RsvAHunD(nz@XLo_-tO8nn>9gRhp}$9Lhb*COtF_-g5Wd>?L3bGXJB@5A3e z=i-bH;NK6TZ$H3S6Iyy7KZK{T55m<%oH6n~gqHT>M{qTvnK%0JV|;TN6Zi2jzO^_P zIUm7K_x}l8O-$ear)cT^kHXbN#K!)Qp_$8==;_b!tw9Uz=lE*Y9@;PPU9W}qOMErs z;`{g&zB$d|8e_Z<|Nb}^XZ$t3cNF*W8+c%W${3B40zWfQ_oa%8ef5x{a=dAy6MzyHvFZiA*>i;Xgn$XhvpMa;aPr}v2 z^!opXme&6i-1^m{{=eft1)~0^@y)3o^*@7eP0m^WUPd)@bTR%D><7;6EBXJZ`UK#= zPrA|O0c|!|P24QTIf*|P-+#9p#2EihS&i@7=+jH^T@!uk!B-Pn+NWjkH1?%%HKC=k z%i(G4k#IE;J&j(x49#4|#M^y2eh<(>dj)+sdmeyoDKUW>Tn@YT|O91l0AIb36m{jf&o;*2NYr}wx9t|qkfj3>g=Gp>cJ3C-Af zygtA2*O%P8FsHGx=SleKo+lS`&L8Mi#GZnd?zs-GCZeyg=c#Dc;M*|gIuJd21HLtB zp{>V{Izu}R%{*FY8}K7{ytg-^nbRDuF~HGePkpJUuoa`mWTD}GwT*>E+X zrS-lUp2nU7R})chj6G3Le}fmmwfP`^gAc~Hj|&;&cXtH8JK=fBx diff --git a/gsk/vulkan/resources/cross-fade.frag.spv b/gsk/vulkan/resources/cross-fade.frag.spv deleted file mode 100644 index 1885651b1a77f4d1f66e347aca6d3898bd5ac8cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5224 zcmZvd36q>v6^3up-NS@T5&~JxLWa1cDvN+&i6amQ$pndJkSK`Dq%+-+6i zR>2rRaKU{;5hZHecict6U*NCNvP#S6x&0mUW$;#=zUO`KIp>~p@3~)BmhZeGrDbVl zT9sZ+gRwR(he>clc^*G@|FM0&eq-PMo37Vlb*f}TZPtLQ%*vU1tK-5Vavu2{@@3>3 z$OYsg@)P72$W_G9ht1I{?3mK41gxej)A+H;@#DwGj~$+znw_2O_0P4NlkHZgIoW8< zHK+Qmg{F4HCA(HIaZ4q z)%5UXxRz{`ND(#rbeGsX2JZFibN$JBdv>OdO)d9Ut8>4sx03zrwN__>6B)#L;<7l^ z^wbjk3^>Ql_O^Rf1aXIi8+*ex7g=I^Xxs1;O*y2{Go1lu95TlI()O!C^9uh zE%$w^bGXyUnGSM$9=r0nyl@$=q!$NqvcGR8`xhCQmv1Pz!R~{&zN<@pP|I(OGnwn2 zrl{Q8)$|fJ<-LD<86HZ103T_0>;1dtr>ALVV16g^j%nA5SbqkeD$LC5FW`y!-prwH zhokLi23yTMYC5wp3m(|{-N^l2JiOrj24wz`R--@D!}^NsUkQGu**ZOwL$g-PYrgUP zOqlJ}SD0tXgDH)J7nyw%?kToc#164{e_ckG@aX?=CHKMV!q)GZzO@3|3u5y#mftzC zb&SJ$f8nd{+E8Ar=6e*IzrNm|*dg{CDfas){ynq4+8^aN?!@E@d8J@GG|VHyMi;Ob_YwGXCOCG;><{uw zoPO#X&^&`3$VPHDk2sUoy~Vz@4z&uCEF0=n_tGuF?co3ph)Ug+*KR^Y{g zbNyq5?pe7mK3{N~IgL-C8{2s05qJyt_emDCi~T=^KJmAdwi55t=&sAT-?PjPdG{0h zmL0Btmf6_W>AKkWE9d$bm>tH9e0|TZiyvq9JqOnRLJ3>n#R41e$LJNrGt^(~o0fC^ z=gh|P3|trc#^ttQ74O?V_T7rD`;W}xsQXXo_J_Q2#J**@P2iWA&B1rI9nJR?oV?;4 znbTjH?Ne=xC4L2wyO~}#rg0qB@lP1P58B!E^ZY8Jjl4GQ{WZkBo-J&i zL)T8;JUl}=?XB^fh<)ms=O>Q+zJ(q&dY0m-@!ROusE=#%sEje*?Ol;?RGjIKLYUY;EqNZNz>H`qJF? z!^ubNo6zNyrRRS$+|t}`fs+saThZl|@Q>UMz?rM}L)JKo6caK&vz;BrOors+F>e0{k zr0>_U0kNOgF>fq%dv_D!ey?MW`1cjO@zf)pcjWifu?30uv9-{Ry$vzmwamT`xf6)F zi2W`+xCGBE!L23u;Sx4pr-Y5yEwK6f{dhNG9)B#5=7buGtgjC?7H2 zi*Ag-??czd@3}GFkH|fQ#JA-G==!-9ejh|H$C(6|!tR=Vxy8e#fn&@)c#oL%hH>NT4(I)!oG`j1ai+3fq9((OWi1+Q9_au(BHoEq% zd1qq(OY}Q~_-)n4HEq0i`S71bmvhZK6(1B6RmuARIw>=QY^ reGANwAae7FG3@8Fh>K$nsQvun diff --git a/gsk/vulkan/resources/cross-fade.vert.spv b/gsk/vulkan/resources/cross-fade.vert.spv deleted file mode 100644 index 90dc433993de4fb10580f720494059b8f9fd3abc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6080 zcmZ{n`6co4KJVGj%sbO!yT0t_`97EZ?7g3NpRv@nswc~4 zWplIn*}t;RSeSLeWN_X2+_!7*t_`jB(1wk-+^ENbtdu+Ib9uHjm&^RSf1ut_X@W<< zli(zH7CZ+|fz#kc@C)!Vcmb#MV(1SS6KVm`}4dw1Wid#i)v z>&XYJFeuq^2f#| z8bhrNrYD<+?jqHF&9VK};nqW|5A55xSzDQN%CbX;4~`gP^rG->)gP{{Znc{egYES$ zu%4KkHse#u7V4Ax&&`&Ef71o4qXW(1TJsWdiznkQ%dSQq9IcO6E$kBh%O?HjXUmaW zwRUxUtW|H<#~PizTp}1>_jZl(>1-s> zJylTp5s zzZ><&6zw|CPs>%w-xXr-Z45;%mHeHlHzuikFE31s>&f4tSo8kcq3t#^F8Frm?^9YA zQ{*jYznqq%oc(%+{?atPJAdOkwN0&He&4;kzRB#J^L}+&d^tNaLq9uB@6O-O!X9?I z0rUHwPSu~&@Rj_Hova61&Nnw|(NoSh7{C7J*l@GfvS%y#n_O>9QrQmf!tc^i0Xz6N zbl(X_k>iIZyQ09^xB6`>aQ3TQe}S`4A%846i?xSa2*VsO4vOj&3*8xOzx0P37 zo5QTGkG|HRP0n1GGn=ckW;yReIsJ^kidkQEC<2sA+yPmlhIBrP# zn~_~>Ir>|e%^_#r)y&%DHz$2f;*8g3-#XTDBgWnU(s7( zGI82}oMhL~uKsM|BHwf9t`YWAGwi1ecJupYxMsxrW<K78H{U6BshF#tFMDA9;6TfSF$l)6Q zhN&={YXS2Uz`IeO&3vMu`%OPx(Di?&pzHtq4E=?IZoGdNM1JG_yC8JqUn=POzgp1s zKU2{4Kb!Qe>}CzJ-{=-c-lK zKLE>tymrq-&RFd~0&?0;COvBU3A+8L&9hREntqCGP4e39W4Va^8S?35^IX*<_UFjP z${Tx%SuSe&6>`+%9jI$_ufGAYSMNhT*8DB9{cle1Mtu{f>pp)6Rsr)Fr(Hk4A8oPr z?~!9|?^8Y2{sVHXeFj-Q*8U^1-)r;|CK#j7QF3Uz z9axt>cftAlvJKn;wgT(&&hG--Kb7B0?+kIX6y5;cO<@#InHfo;^W-jfi5SyfaezR??g6lF@6`ie8j&CSxz|I z-(#$Ao$m(b*T;RR$3EM(oP6YcFS4A7^NGCggL57CqF?mZ`;lGK5!?rmqmJM{2xksQa34aB zywR5*hBK!*jL|3h!bkFw<%=Uz}4*+>{C`S&@ZaHuid+i!@ zbG(r`eiw(3{Z2x!&Co{*`U>O+lO8qfLpQJQiLvVOb`K-F7kTaGk_&qs*H<62b`WCvJ d=mNgq{;rtw+rS+998KJJkUa-&-hsMz@IR=%cmV(a diff --git a/gsk/vulkan/resources/glyph-clip-rounded.frag.spv b/gsk/vulkan/resources/glyph-clip-rounded.frag.spv deleted file mode 100644 index ff2212a266ca9036bf4e1d1005f698e0328dd34b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14956 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 diff --git a/gsk/vulkan/resources/glyph-clip-rounded.vert.spv b/gsk/vulkan/resources/glyph-clip-rounded.vert.spv deleted file mode 100644 index d177868088aee7b9ce4b7311b6795023072d4f3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6400 zcmZ{md2roT6~}+gduh6)D{U!TO)P~dZA!5$wNfZ8rk#m46bE--)8w^zlD@?EUb>({ z3wC4%P%GjLRRq_H8y0tT6j5=X!Q#GPi-?L^^e-J}bo_jN?|0f?(&2W#x#xV(a?d^Y z{_bm`WpP`QOiHFFGm?KM%`qowfl1&dr*lv5wY}Z-#$fl#i!an;W>QEU^_i8-PURwh zcl1}PDu=*fa0L7YJOPe^W8fL^H*g$03kv*eVSa>U#bjF2(_8Ae9gIXsO=V zGh8kWSE}XGV5L?bXjFEV^_!COt5gSu#|HBbt$5_?QJ=~hn@PaLu3A%FdF#knb+Dem zv?cB6E>hZ78`)9XUcbI;=eCurwH4__lI-5IYseU*=Z0^+aznYR-l&ZYG?ux*GGbP& z#;1_X(I@qvo-7FenhTbO`)k|FwdaVNexiQA|3FCp{DS zW+YwA^?`m)vr*n%8WP+^uDqB(7KUoz0qHV_56z|kC^P(If~x&;|ezWl3j}6y`O2nc2x!& zLv_5{(s;julpiWrwhyJLv9+c)?_auKW@}%|JW3r*slJW5R<4f?(;@A*Ywxf1@5t;2 zCg^ug(C-?j7m~Zto99(b4vw=GlY7SLh2&m!nreUiR<{qAt}EB*Tmy2p1XQ2pM`#5vxnH$aqZSuJc)tw37dV?Ha0wb!seaz z4RP3?N10Fdr;t2`9{W9lT&ZqOZ=1f4Pw@S@db;0Y@{4h{V){Ofj5XLxa~}XSeMS1r+?<`Df`i@nqP|YRN`ktJS_o)f`)8q8k^c`d!l58Brl;-eVO!Gpyj&CGB z>qdr0+-mCMn^~zgsSWJa`|W528~7Xg;*=fFwZZvXho9%A-<3JebCT=Jah{LdmK^8( zmKy~Dc{Q%0@v~`IpiF{xxSopaORM6&ES;fT+_A87i)R;zGn{C_V?zb zUPym?W@a|eR-5bTdogzz9`+8)3 z-FMh~ksb3m(HogP~f3ne1O^9#%L4f`7E>FgLc>AqDpUAlIKbq6ce+;;$@qfu|?q7fP zXEILvUy=0e)8<*KN8aBfM_$iSJ>vd=9C7YjJ>vd|9C7wQ zU7P#-6F3H3&wi+{!eT9d23^2>#%b5@D6=+mc=mq>p1U^hhkE4y2eN0b?Krdgf4Kpd z0q=nQvX_o&;8OfNo9V#&FoQXAU6S#eh_d!eft+x7uN=-1a~ZO^Hf4KSg)Aq$e+6(2 zb@=VR7-)9{w;EZ_oPFeQ-Isvn8H~|qA33yL4y;R`wQ%d1uTJIWJ7`_@_N5sgd+EtI zc}IRP`?K5|;LWdZA9?KEMj-z`cB349b&a{eF&o%dzkxZxzMjTxefIig8Q;qseS3Mv zN8dJ~%Zcb)#P`9OHy?iux_rcMMwSx}_je2HTj#aF{Q9^L_1K4dTmT&NKP)vM`bFN?AWzKuS~&U0`#NMf5&en0uZMFT z_o83itv4XMrX#o#a?}yr7C3V_g6l_)ym2qL!kN^++h65;f6qd9ECkWt zGjj5o$oBedX5VJ}vkiFPqet73jmh_Z2wgsUR6&*#4to;uZ$x&TeEjw3@)19bEGHbs zw^M~@wTQmJ@M)5&tH*iM7?>k{BP z`o=kqAzQm6xShzcpWt@Ena2^_Zsf=vcVG{kIn7~=KEA!4m$vx6Z$Ord`rnK!Cmhxr zzHdR!`@R)jPQ+fn&bNFM`d(lzeGYP0Ze-pE_JV&=$1Ti`|6r598OV9Rl)az(GhIGv zcssH+#C^UMSx$fD{C!@8?#RCv=b*dB^O)lf-;Ugt=`)!ROwjL~px>40-ites-vQQw z+d$O$&WyL`=2wsZH@pkE9ms2UJ-M*I8+iecH=pmtdw{j;Z$0YD)}sF^-Y)d4t z(Pm%dqA#|CrBweEum=6C&HVbfKYOR$d=D~zE|pL2 zZw>nAGd}Wv0o}NG2fm0b=Lqgg$a1b5Z^M_7_0_fVp27bC DyOf^e diff --git a/gsk/vulkan/resources/glyph-clip.frag.spv b/gsk/vulkan/resources/glyph-clip.frag.spv deleted file mode 100644 index bfd95cdd2e58b9f305364ce8edbf043e65831829..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4856 zcmZvf`IDSg6^8FH-C;sD0$I&shA5^gi-2K?5fT{41c_#lD2U6XGu@ME>2$Z#-9v&_ z$q+Driu;B;VRu7N+^YOR{{sISEvvMAp0DqbFN3%0%suaWmV55K=YE}xUbge{lt$8u zv?~2M4aeGa8BBs(R?L&f?mM=x*RSu}f8%v}tWKkaqdsf!sxT{OYR$HWMdSkV6!Kl< zhsZ_bO5*fmL9|g;N$Ia7siZ5?FRHo6_(-nEP z>Wf&*Hs)@jSJH0zMsLvKq+H_!xPGLrxxf!FcU`2w)ilRkEH|VIpQb*w`P!Mnr;;AJ z1Xq*I5hbD)F`Y|%D(MU0TB|!ZJflj{OU?E~v0Ll1ubOQyXBcmfHQQ61%n(1#T(05E zm*8spHn`t7+aIu5)S?D^wAnt{s5jD^yVfy?Owmu)(y5&@Tlp`LKi&r zD5;k>h);5WUcO-U*y@P8C^cEifA092f8IjAoG1j_`^;;r#e`4>Y zocnd~GQ_%$@;A=gH*=I-1>OmESi4;0_b#k0Y8OXs=JReGRm6OOBVU>GJLh{3&Yb!k zE^+QdZmPsti`>Z)=YHgTkk;(F#$L@|=W#gW)Hk4c20M_A)NCDbCfl+3O_bY#ZF$z^ z^u2;v-(k)QU-wjS`i-;SHO%^o6?3d(HlMNL^%=_^~{h+`cUO)y*Ioy_XisGoW6MjU&n#C1Q2$dzRezSe$EwnyxPV8)^K*!ip!>q=-B z4+ISNw!mzD*9`kP^bth+qgmJIV8)A?3;)N!-j)96v(0?sFJ^3=#)~gxPWzKt_pG&x zpUT{3PV;N%<{ClDBk&eh{yGNzqMmP{PyH>Wt>pVAx^_9&`xdi9-u1-3Ux)VZFq_+R z(k}MR%4z>Tv%{QGuWvZ)&!Kx3abDt!ne(onM|VH^Sg-m^NJ@_$+6Ei%-M;o6i`~a> znZ>b>-=W(t^41}KGjp53zel$Q-`RFF-&b(*O7!<1(U&9om`m)pQtl>t+jY$2u~Brr_2{oxs3wr>`LPkT%yAA0Uf)o2<9>gP=p%n`UiT-N_gsy$mY*W7AGQ4~bNWVYa{8P11;q0@ z&dEH_{9@+h9V3W$7;CT4%ghbuHK)3E^@_v7b zuD^Vo$*-#IXXo8NcPsD-rv2 zHM4hSpIwvrappL?otZz*s^)qZBB!|TQ6%Eujc(p@{Iy{Dh<^{doZ|32&*wUKp_^Zy z|BziA`xryN3URDKVjowQ^tI^j>1t-*ntR%fcwSNC9&}^MHSPt=M~(Z?9aui%uSb_t9LBHA=XXQK?#*@djoj};Us~IKIQhtZBf6Zj^!#svTUy)AaPkp< z3%Z;V@lo3WIBWI3Tu0yN_4lJ&yCXRNvl9CW?gMb47D9ZV7HK!4H+N`PwDycczoE z_51z!C}JId&-i1RTgi7#`~8S_T0ykg6V@mnIX;eVj=-Nl*T?UwIX;QVJ&44&L(_P4~iGl<_-W3=hxy~{^@7hO)9 zcPc)R&*Zb{s}T7(+j(@)^2zMeL)TB<9QKKv-@XOrhY`5}Vh;QHEFvF1kD%*w4hf&n Tq07g=1wM~%oV;&D>>K$nw57gG diff --git a/gsk/vulkan/resources/glyph-clip.vert.spv b/gsk/vulkan/resources/glyph-clip.vert.spv deleted file mode 100644 index d177868088aee7b9ce4b7311b6795023072d4f3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6400 zcmZ{md2roT6~}+gduh6)D{U!TO)P~dZA!5$wNfZ8rk#m46bE--)8w^zlD@?EUb>({ z3wC4%P%GjLRRq_H8y0tT6j5=X!Q#GPi-?L^^e-J}bo_jN?|0f?(&2W#x#xV(a?d^Y z{_bm`WpP`QOiHFFGm?KM%`qowfl1&dr*lv5wY}Z-#$fl#i!an;W>QEU^_i8-PURwh zcl1}PDu=*fa0L7YJOPe^W8fL^H*g$03kv*eVSa>U#bjF2(_8Ae9gIXsO=V zGh8kWSE}XGV5L?bXjFEV^_!COt5gSu#|HBbt$5_?QJ=~hn@PaLu3A%FdF#knb+Dem zv?cB6E>hZ78`)9XUcbI;=eCurwH4__lI-5IYseU*=Z0^+aznYR-l&ZYG?ux*GGbP& z#;1_X(I@qvo-7FenhTbO`)k|FwdaVNexiQA|3FCp{DS zW+YwA^?`m)vr*n%8WP+^uDqB(7KUoz0qHV_56z|kC^P(If~x&;|ezWl3j}6y`O2nc2x!& zLv_5{(s;julpiWrwhyJLv9+c)?_auKW@}%|JW3r*slJW5R<4f?(;@A*Ywxf1@5t;2 zCg^ug(C-?j7m~Zto99(b4vw=GlY7SLh2&m!nreUiR<{qAt}EB*Tmy2p1XQ2pM`#5vxnH$aqZSuJc)tw37dV?Ha0wb!seaz z4RP3?N10Fdr;t2`9{W9lT&ZqOZ=1f4Pw@S@db;0Y@{4h{V){Ofj5XLxa~}XSeMS1r+?<`Df`i@nqP|YRN`ktJS_o)f`)8q8k^c`d!l58Brl;-eVO!Gpyj&CGB z>qdr0+-mCMn^~zgsSWJa`|W528~7Xg;*=fFwZZvXho9%A-<3JebCT=Jah{LdmK^8( zmKy~Dc{Q%0@v~`IpiF{xxSopaORM6&ES;fT+_A87i)R;zGn{C_V?zb zUPym?W@a|eR-5bTdogzz9`+8)3 z-FMh~ksb3m(HogP~f3ne1O^9#%L4f`7E>FgLc>AqDpUAlIKbq6ce+;;$@qfu|?q7fP zXEILvUy=0e)8<*KN8aBfM_$iSJ>vd=9C7YjJ>vd|9C7wQ zU7P#-6F3H3&wi+{!eT9d23^2>#%b5@D6=+mc=mq>p1U^hhkE4y2eN0b?Krdgf4Kpd z0q=nQvX_o&;8OfNo9V#&FoQXAU6S#eh_d!eft+x7uN=-1a~ZO^Hf4KSg)Aq$e+6(2 zb@=VR7-)9{w;EZ_oPFeQ-Isvn8H~|qA33yL4y;R`wQ%d1uTJIWJ7`_@_N5sgd+EtI zc}IRP`?K5|;LWdZA9?KEMj-z`cB349b&a{eF&o%dzkxZxzMjTxefIig8Q;qseS3Mv zN8dJ~%Zcb)#P`9OHy?iux_rcMMwSx}_je2HTj#aF{Q9^L_1K4dTmT&NKP)vM`bFN?AWzKuS~&U0`#NMf5&en0uZMFT z_o83itv4XMrX#o#a?}yr7C3V_g6l_)ym2qL!kN^++h65;f6qd9ECkWt zGjj5o$oBedX5VJ}vkiFPqet73jmh_Z2wgsUR6&*#4to;uZ$x&TeEjw3@)19bEGHbs zw^M~@wTQmJ@M)5&tH*iM7?>k{BP z`o=kqAzQm6xShzcpWt@Ena2^_Zsf=vcVG{kIn7~=KEA!4m$vx6Z$Ord`rnK!Cmhxr zzHdR!`@R)jPQ+fn&bNFM`d(lzeGYP0Ze-pE_JV&=$1Ti`|6r598OV9Rl)az(GhIGv zcssH+#C^UMSx$fD{C!@8?#RCv=b*dB^O)lf-;Ugt=`)!ROwjL~px>40-ites-vQQw z+d$O$&WyL`=2wsZH@pkE9ms2UJ-M*I8+iecH=pmtdw{j;Z$0YD)}sF^-Y)d4t z(Pm%dqA#|CrBweEum=6C&HVbfKYOR$d=D~zE|pL2 zZw>nAGd}Wv0o}NG2fm0b=Lqgg$a1b5Z^M_7_0_fVp27bC DyOf^e diff --git a/gsk/vulkan/resources/glyph.frag.spv b/gsk/vulkan/resources/glyph.frag.spv deleted file mode 100644 index bfd95cdd2e58b9f305364ce8edbf043e65831829..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4856 zcmZvf`IDSg6^8FH-C;sD0$I&shA5^gi-2K?5fT{41c_#lD2U6XGu@ME>2$Z#-9v&_ z$q+Driu;B;VRu7N+^YOR{{sISEvvMAp0DqbFN3%0%suaWmV55K=YE}xUbge{lt$8u zv?~2M4aeGa8BBs(R?L&f?mM=x*RSu}f8%v}tWKkaqdsf!sxT{OYR$HWMdSkV6!Kl< zhsZ_bO5*fmL9|g;N$Ia7siZ5?FRHo6_(-nEP z>Wf&*Hs)@jSJH0zMsLvKq+H_!xPGLrxxf!FcU`2w)ilRkEH|VIpQb*w`P!Mnr;;AJ z1Xq*I5hbD)F`Y|%D(MU0TB|!ZJflj{OU?E~v0Ll1ubOQyXBcmfHQQ61%n(1#T(05E zm*8spHn`t7+aIu5)S?D^wAnt{s5jD^yVfy?Owmu)(y5&@Tlp`LKi&r zD5;k>h);5WUcO-U*y@P8C^cEifA092f8IjAoG1j_`^;;r#e`4>Y zocnd~GQ_%$@;A=gH*=I-1>OmESi4;0_b#k0Y8OXs=JReGRm6OOBVU>GJLh{3&Yb!k zE^+QdZmPsti`>Z)=YHgTkk;(F#$L@|=W#gW)Hk4c20M_A)NCDbCfl+3O_bY#ZF$z^ z^u2;v-(k)QU-wjS`i-;SHO%^o6?3d(HlMNL^%=_^~{h+`cUO)y*Ioy_XisGoW6MjU&n#C1Q2$dzRezSe$EwnyxPV8)^K*!ip!>q=-B z4+ISNw!mzD*9`kP^bth+qgmJIV8)A?3;)N!-j)96v(0?sFJ^3=#)~gxPWzKt_pG&x zpUT{3PV;N%<{ClDBk&eh{yGNzqMmP{PyH>Wt>pVAx^_9&`xdi9-u1-3Ux)VZFq_+R z(k}MR%4z>Tv%{QGuWvZ)&!Kx3abDt!ne(onM|VH^Sg-m^NJ@_$+6Ei%-M;o6i`~a> znZ>b>-=W(t^41}KGjp53zel$Q-`RFF-&b(*O7!<1(U&9om`m)pQtl>t+jY$2u~Brr_2{oxs3wr>`LPkT%yAA0Uf)o2<9>gP=p%n`UiT-N_gsy$mY*W7AGQ4~bNWVYa{8P11;q0@ z&dEH_{9@+h9V3W$7;CT4%ghbuHK)3E^@_v7b zuD^Vo$*-#IXXo8NcPsD-rv2 zHM4hSpIwvrappL?otZz*s^)qZBB!|TQ6%Eujc(p@{Iy{Dh<^{doZ|32&*wUKp_^Zy z|BziA`xryN3URDKVjowQ^tI^j>1t-*ntR%fcwSNC9&}^MHSPt=M~(Z?9aui%uSb_t9LBHA=XXQK?#*@djoj};Us~IKIQhtZBf6Zj^!#svTUy)AaPkp< z3%Z;V@lo3WIBWI3Tu0yN_4lJ&yCXRNvl9CW?gMb47D9ZV7HK!4H+N`PwDycczoE z_51z!C}JId&-i1RTgi7#`~8S_T0ykg6V@mnIX;eVj=-Nl*T?UwIX;QVJ&44&L(_P4~iGl<_-W3=hxy~{^@7hO)9 zcPc)R&*Zb{s}T7(+j(@)^2zMeL)TB<9QKKv-@XOrhY`5}Vh;QHEFvF1kD%*w4hf&n Tq07g=1wM~%oV;&D>>K$nw57gG diff --git a/gsk/vulkan/resources/glyph.vert.spv b/gsk/vulkan/resources/glyph.vert.spv deleted file mode 100644 index e92bf9249a047df5f1762b00fd57636720982c0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5184 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 diff --git a/gsk/vulkan/resources/inset-shadow-clip.frag.spv b/gsk/vulkan/resources/inset-shadow-clip.frag.spv deleted file mode 100644 index d1239f0a09f62dba05c9ee74a50dc7d1a9a06874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13128 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 diff --git a/gsk/vulkan/resources/inset-shadow.frag.spv b/gsk/vulkan/resources/inset-shadow.frag.spv deleted file mode 100644 index d1239f0a09f62dba05c9ee74a50dc7d1a9a06874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13128 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 nSvKZ7=*G$0Gv|-5HPSx}Rr zoLkM+bS~#Qy>xKypu2osKAJg=EULldS2Xs!-BFT{JU;teyynlCW}D-jguyOer?Pp@Ay{u)TO&5^^(L{JYR-G&A)n7RZjDEK&3?vgou0L; zo=3BPFc2_t^toZ#7wyZ++Jcaa(Ugm^|2n z`QHRgoLs@&X*6K;+~YFl?t*Q<@8nY>)9<_x|6Z8Bwm5g#*5jS=Ew}mX&%Gs1evdU0 zv;4qO;D~qRqvaj2J~$2>aelX$Z*g!paOlC@Z8Vp4FUXVH@v!bcV)%Zb<*uHUQ9Hwn zB}~8Ze+%L(n$7*=4&2fTobw%7Lq^Zu(0b_JmBFKDE$}tziM=P|w*a0vd&AjWeskb9 zrKUdTWpEe|XEN;t`DN{g!f+U8=B#KJG+vZ(FUXra@rjJHz@uTWPi63bN&{Y&u_pW< zfx9H1oQRP>wSi+@`gT=DFIzq6;ajp*Kh|7R<82w5HJR;wC-8>95N2)5r6nH?{5|be z*SIc&=P~ZCd^qZ~r5a9a{8EON7~ed;XMbr8VqeL~4-IGFZhS4{ZgU3C2u5eQZOJD$ zV%#e*bLofsvWCpg&mP+{c=X&mu<0MjZ^*cBtdIVo3?4oA5^VY(1Rj>&jR&4)|YH^{R|JMV^OcJhQSZ(s7sOWZbWp PG+GX?2mU|t_^k0i9M2Ks diff --git a/gsk/vulkan/resources/linear-clip-rounded.frag.spv b/gsk/vulkan/resources/linear-clip-rounded.frag.spv deleted file mode 100644 index 14fc8d79c1fa34c3954e0ff9e514eb32c4911dbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22040 zcma)@2bfmXwT6!}gNoRDLl6sgu`4QqK`bcPq9&SgfB{Eg24@DlQL*6W~!>s5~!;hQ_Y;!GjsOrnX_i}%v-XgXL#hiMSVSs z`Um=Y=JyZv%^T@IyHCGW3%~w>d5f0LFCDt^D07jo${aHmE$Uw~+{cQ#YmQXS>l+y9 z8>*ITu4kxse*eT!Usd&W#*xDCNbkVBzDdI)Lrdq4?A*lL`RoO|+a^!p|EA#I z&6>si)aOuGOdd}6W4dE{Kzb14bGws>TSj{QIrPFcW2!D+V>oULi2XdAFeNZSXkyxi#*t zCeR=2y87ljre3d_SJpe4U7)rSZQkI}K;KZ$IsNlTPNx+3cWmyD#&&vN|H9Kp>N>4c zZHqqCiQhByvh`Xqxn)bsjWYMGjX@J{L*J?2+SQKj*u(RB7p*Ad{~6d=+b@sXRqX(- zhtqen19ol4o;P@Q-%#(u|7Z9**PWNgA64xF?&Q5{wHJ6E+q|cqaQ-B>BujT&*5mfj zcW@ZoRqd(o;G)6K`d6>^gV%NZuYCS{-|eF>&9&}J-P1$$1ZUj|NISAsh=7**Y*4^5xj=p7@zpZ=U0cUKS75A^j8^$m~Ivzo)BXr4oK z_;*)dZMf%BN9(Gd04(l3mu&Rus-C7N$kIiOlCRIhmgldVr)-PmeEEq}`;9|i(mT|< zxQR3VC45vh5k5i@%zIBU8$vt-Jh#CoiEE$k>I`tsP>X0TXQGvJEN<~7Ek4xZOI!S$ z7C*nmFKqE;@c!YR!KF=YJ^^1*yHVAT;S0DS*6HWqx9(&S#M}KQ~vLRbAB!XiLZgxn9@$1TELKVT*6x;^SI;Yxw*_ z=X+e#@g`~a(5ZQMwGX_mOGm1G_HD)3|0TS;Ixu56LKF9(m-vjXj)Wh&Xs~x=`qBjp z_<+;T_W*UT1=>*Ele5w0Hg4W`-(~s-jvE~S7ArXJr_T@UV@lbv~QfUl@+cXbzhQSWdL(>ng!T0RfNr8^G#*5EL2emT#(s$CkbbEbD!`@t6s_40zG(zzE0EY~_CJ%^^E`7$b= z1)f*quIeaong8q-Ke@$U-Qqnhep-v4)#5`feo>2G+~UjNy^EHd-rMBsd$V=&A@TnD z4&6VHI(Ajpw8mf8;oiE|t)xGeMzH>*GvQe3m&(9U-On1$@m!CTmb>KRTOmY_a z9=~>>ab#5b9b9N^p<0_$XiQscrxlv#k7GR`W^&)0!?82T=?K7Rus-IPXLsY8uXvV| zqvQ2)9>@D!Zv{5L@CjfqeSOY--`6JgUDmm@`K-q#)@E(=^_iD@$;UIH9JwCrKF?UO zwoXo?>hDCcd7rfB}39NQ?ddKUh&6wWz+>>$4=l2;k$FEE8ST)D5N3XBC<0s(bz0*fc zpUvs@m)pjnO`tbsnz5}zC$G-9iEv}9cVc%}lfaIR=D5jl#~I7{c5kp_v~7ToFU#X; zE7g5hbpX9%)Xn)odgoG?Pop=U+&N~@>#vV<97?ZU-L_*h#~iS8gdY#~GKZ7s$4j`h z%TKP^3VsUQ@#}L(d+7CZPT$w6>XND9m&5+jwb#_0$i=*_psCq1_YGk8O~yP3_6mQj zW|w?wCnC6($7#-E(`Iu&tV%-W;vS3d8feBV+fMkdgSI9%?a5<%uw&(}`S2D$1#X_s zbqUzHd`7MNrEu4$p1hw0b4}eC`}1IP*MA(Io-NVTZH_nAzp=T`^_kLe--Xn)zt~{M zB=_}5Jh^NH&hxYd8RzWs8SzY#XN|MKb3RwG_xWrBYgcogqv`pt*3CoiIi{w44uDkZ zy{TR9*`=1ej)!+Q{wIR@uihu|_dL_zc)eij>$S%{Zwb)XeWqPLzR?oTGftn} zgPHI#Pfa|)@mDl9@4fzV&prLMU)5mmgLb*+pmy*1OfmC^A0~0Y)-j9hk?~*(o)02!H&~r z4UeSvvWD7@pdCxIhT_CN8eFfJF+S(=*ye!E!yJ9)YtByhoIVDAIK5-E>EpSf{v2~S zzjHZf;vENeuJGf*#?QJ=0IQYjdL`U(+FaL3^j@w@+le$a=MpFOtH8&pzKl#HWFMcgbA6aOcuTTk@L= zc2C^M^Wog{!1}7|qc$IGy{()g;x`C3@Axe#{IogOS@ez< z57FzB8V`eyB6oeXB{%glH*=J4Pj9Xx^vPi0l4iVX=;hk{489(G zbz{4ZUT!|t^oAODKHs(FbN5EDb7(i_GI}**x^G_xHmBL#o15rgPgApbSx4Wwj$sYX z^M=L;xLmur(e#bqEsf^bJR@&JbG-iAz2~XJt?)Xx=9#$-uD^QLe+M}0za1=hO?T4k zpL_Eru)lZFN1HyrGpoPAiuR@XF6nywuJ7e{>3#6?JHpro`&qdL%{{*sz3-T6{thDV zNb>#`_xBK`{j3)EcMGNcvV!}a^~!=9-``D?{{DWVkI9M6w5>)&~(JKnvk7Jq+7X3W%sU&Yiu z<$XIBO+7y6H9qBiJ0DFwHM;=pIQ5LX5bXTrxQpQG@p*0IQ_g=entEbi0(P8wYIiBv zIWM7Q?aRQfPn&D^IaL#1Mt?!a>7<=%P|%{}fJq&;Kb40a9ScY(`2c{f}i_4wQa zF6X-!uAh3I;rqbO=QDgS&38ugcni&3w7a(38ZEKk3U`l(zYXkM;co{!=F%qKJHYy= zXD_`IY#eRQaX-CUVmts=%YJ+p_`#+{dkCKA+jkpte>crF?MO3*KJSPBnD?P48t$2_{cAL198WWcwduc3Q^AyTQuY7 z>vN{|ZJPSyG;3jQYMJ**u-a^9b>8pL)NEeHkMC39()YV?HQUOxQM9p5obQ1hJBemY zeVyN0Xv;dk4_3=F{R42G^ThfgT4L$1Pxkr$G`8vV`sH))M_}WgOmi;x&yQ*9@%af@ zpHpb@`6>7(H0O5A&uE$3@!Dhid1Kp#UO)5p%yZl?Xy&Gm`%0dDWt}&rd2LL~zS;!r zUfPU4d*#<)_2X%|55EDc=brr*tY*u7$oSu(wa5P+O+DlP09Lbkx!#;De*_y}AJ-wz zI@SSiN%PvAmUV1V;BjErG@d@s$J1bIkQ|=@JEmOYvvBp~_!qF6&C47!{;y!?DaZc} zuAcFK2dmk<9H0I5kA}Nfok!oq{wKJd+jD5@iTylS&DO5}ztGyb{Tod^<6i))*)l%4 zy@+P6?lI@lH{T)u12%WBXgX&-(N;n;j#spm8_n4H{y7R_Ok+4kAD>z8m$vM`F0fki z?}n?{yzJsT8dCbM0#~zTt)JwX@%M16(Tt_fojkKW#2M4*er}8fd-=JczB*0K{UvsP z`ujP#dU9ABYz}i6=bl{$uBN{@``PDqTbkEIn)`Vx`mGy0hTi*N{O#!7&+F3r_i65D z`3!phJ}q3kf0q_+jPV6u4L-5O{oAzoYxnQdO77pNg-^!r->HS`@876}JD-1}7OvgD zQ481Z->8La_ixm~wfi?};oAKhwQ%kJjasM?z^!Tdyl#l5p8dHI zSj{Wi#*L;NZIecGFGbt5(fmBh-rfw&n8t97KG_eOgSETYy_a(Lj(cTGu$ngSqgwo#+y+1eJYX7jR}#wU#XY&(eK=g>~3 znU{Nb61ukd?a=u7yXw+!N4U0p_U;6Btoo%qldf@RusLW;yj{RAH}9_K+Tyocd zGP<_RyF1vi>T0Vp?;c?1)@JQ|M$}Tfy}<3-?Tx0M+U)~Yv$;R$mglxFBx^VYJ+<2p zU0dEc_Xn$GO;f;*b4}&A1K`@SrUSu_RZlGs0-KYz#G49!xjYU=*A~BNjbD4->H5$z z?;&8vs;8E(06VufYw7u-mRcSPZr5@qntEz^7+B4gb33^mftEEK4o)qP1ZztzXMxo+ z?kI3-S&lmzU0cS@2CHR_bHK(@Pi>C@o1?bGKNkFQc^!wYEq=#0e%7|k;{>?2%==2P zW7SjJ6T!}{&DwfatEILlgWI)z6`Fc#`)aV7&C7Euxt)rZHJk!YZC?Y{7Qddx&oz{O zr@^(Qmc3xLtZ6RTSn8?eJg_-wOZ@rZm&>CMU0eJXG=A+o7NTp*yr+X5tDai+gPmKO zwLFPl%{6-_ECNq#Y-iHTwRuhrfO8fv2Fr664}#ak$1&Ox?<}y-f^#jQmnYsZIPr$S z^28ef8_zM?67OuV_uqI+>E(%cE;#Yd0m~EbJh1T`qb>0+09ym&olh@MyoSydT=(V|LXE5$Eu(8X}ip$Z|bDysOdoTP9Fa54W)0Xf4 zSAiX??mOHy^j^NhX}g-H<~x-*Ia~`ihw_ZQ4oy8dTn|nTrQZ$c+LFVKV8^QaGl0xz z|2KAz@0mA&&1XBX{$(z&gSYGPdNlRq@&>Sbsa=no(X{1v?YDp(t8P7RrT4NP+TKW0 zvmWBq<2G=+9=D^ZCx<)0$)T*ro#@(9k2irGt8P6qpMC1_X0Z8KBmK)AV&-iD^09NrF24rM*wfvzn% zyc6tLb?cG&>{E{iz~*C(^e=OH5ZoPrjpn7LEVvpLH2iU+4b>y|&z=&w_4s_D@hR`m7tz%7bEhwX`LCYO@!I_^tDf(&6R__{^YZ5!`;gC8^xHSs?`1pC z+($dnyKX;6zd{W4{M_-Ya5bA()78B>`~CB4h{knqr+!~YQ_s&KzX4V=UdDYBoN?Am zu3vKb7P!piF}RwoeI@4O*o^6SqU7>zH1*{21X#^@8TTYO^c4yo~z+IOEJkuAea`5buYL-Fq(1J@=W~mF89c{9$L5;NN!^+l^A}*X^4a+%Ts=O&YJAFP=htZJd3JsS=D+%xaJ+WsbIsaP zN=g&wBm{c0Jl$yFBk+e**h6B*$oTjQ8cwVCV4n(DJ9j`l=hp8mqKVTZSk1Qy`qh6H2w1VxCWXrjo}!5Qol99=3kyQYoV#fXYI!424cEzy!Y#% zsn21TO@OZpb{@xSbFX=?)g7bH24FR9-gmik_-_a{rkRKTwm^UH@g|L~zxzV&^J1(` z!G2B|M_cAoPmY^`-GiBb3wY*tU&%AqmSFd;aol6_Je%Xeo{x^vmcNml0Co=TJ|FTt zA3l5g(Y)59`F!{@-F+JDUf!4H^RYjD&Q$;1X!g7Q{=3nV`|n0e?!Or=x&LM~+&K;` zxbgh=qS~|WZQ$mSGj?0JTF%(*z}yz@2n`k147Vr&mKM)(eJee!n!JA&0bhw}TO zo#2ksmT^0S%Q(Bh%Q(Bj)r@l~`^I(b26vpcJOh)##`lW0d!xCQXnUYJ-YeRkjiz6o zpS{qGX$;5clb-?a4c2a5yjOD9zdVV`$;Wf%Utb zd9SOixq^H>aboVMgK09N<& zCwUCQ%RKZ+9!tR5lgC-$GLIqn^dgU8xLTRV2;6bnlE+f8x}R~$<7{}Dhd#;U9I*D} zaW1&b<2?BEB9HUoYGoc5z#XS8d0YrqUyqhNE&`W%=#xBN3)Y^q>SD0>$~u{&cK6X- zdTs7)`*Lp|PM%(e(%joV|1%4G7}$M&1ihbAzS}J$Mm}eJW-lwaDi0K*6;?RB-L@DY*9cw)o>M{$z_k({O9$+SXt{id~n_qd(8M9Bduz{hP!q z>93-BX}`L$+h<=~12#tZwP4SKhdB@Y`Qde7eboI~p8N`$v7Jktu{VN^WnR`(?wRk| zbraaLR9(CESIa(m9at^=^Z?}P*SHyfJGiXh9dPUSV3YTqV13lh`_1%T=B@2bG&S=Qr#614 zan9K6Gw0o4=X`fF$30**_knY~1?=S<+U}#hgXSFK#JL}AoSgk{1*>K4?s2u;!?%OI zhwA2eFTI+1I;ZiSC$-;5pFYB!Bi!?RsEH;k$ei>|?{ag`i*Uvn@(r|mv%dgRYo#v(e8;#xG zc)kmL6YO3J{}%XETF%SI!1}10oBXRZV>`DvW4{f~zI+@k&$IRf*k?`M`gvc~GWI** zjPel*)^j@w<+Ye}Ju19RGvOaa^ zvGzX#XHUz24EJ96-AMiuus-Vf&iYfZy5FIa@6X_6zCVYT`}!Afebf`@mtbRQOFq8> zFQaAtUxU^3wNBd9GVgD|&YS%!Ppsd9U7I%7B)1OkAM0YTuY2ZqVDD8vV}1`-n}f~q z+SJNDX+1Ok4`6-5{|I)^z`U`Pd;5>*N}T8x6Y}Deb(QNE$g>Fqv6&k`+F6*KI(ZcRt2k<&(~`3 zvIb+|Werw`>!Y4HW5LGKmVDL#m(SOla5a5hk2baVuLV}~Y!;XA{711KuS043FxGeS zBMUqW?EW~KK0n`Iml&%QeEo)}w(G%-VJ`a0W7`01Ol^*n`|}R#x*^!_AdbH7yOKXwpU!dcRj-Su(-P8V(j<@s8Ip=%MJ@?#m z@9(~rW-RZ@veU9Nvf0@`vi6vl&49_^I&;~#ZTq%0&DQXmwHIGt#GI^@2O2Xso1g1t z{_YyA)iv$`hrz?(QScP_HTWHP1{?uL!7=bGcn%x~CH~DoK0)GgHY@AfR_W{S@7s1| zWoTle(roP;t5(Kp^=f6f)~F7(YP+k(%`C*#>O*6b!^MCOB8s(XpUxWBkO09BJ91ln z$M|G@xS7FpW!=~=QrX!U-&GlDUcX}Z&b90HmFY{C?cKL$)Hxkk^CGrkg38!nW2D+x z(QGv)hgz#$Xf<;$Tu*E%JJZ;F-rQ_a%&XN~)kc%RQzxC8#WhRW0_G0pc}m$rv=NTbrJ2#*E<(Ue)Mv-5`BE~_z~*_~5-$+iN$v z^%FjOh;Iv5=ZcyqF;qR_vyb{F$Hq?hyn}~Lz_34l>$Up!)?lNR+mB#-AHwfDP^({A zmvHWr$moafL#^(I($4i0?32ANWlw9T`}6ZDzHKF`y<#|!p+cICd7(F502Uxe0)>;Y#H?-^^GyNACsk#b@wvHq5+FT*zr zscnq0)}T*L|Jyzzogq-u0-aAJxH9PlwASWWG7d^}NZ;F`JSaQY$x8{U> zl6z^2Gq#sbS;qyyHO%20p>FJAYFdZ12cF4NG{2SLj6+unEE--qp3z$y8?dTuu$)jhXfDzJv#Ao>)tmss=dN&Z;#CTwf4 z=39`)m_z%+NPX7k9<+TEBK|&f&nas34tzZMJ@fm~^~)_qdjM%}x%(4b=M(6D2l`z{ z`*7m)KZtH!_FDU)xq2YzBh9E zf17k`a=x~2PWbgi2Uoag=bNPKg38ELiA^r}B-Glyg!8YFC;-cT*RPBvqUy1ZP+CXl(p8|WU z&%D~}Sl!ZZQa{63T+qs_0FM;o?ynbtxbFTj106Bf0op$8?J$mHz z+_YofpU`8T`_gtz&+^Y;IgmH6XDa7h&+@OpbJKSu+2Q*ewr8f#v(ygX-_egJpXaFk zA5Ql&;Q84L`{bAfE+vQObO!J&XCuvJzb{ODKeMziN}RmIJL6EsoR^`StDhP6ZY_`# z-W~7E)u{&;qw9ABcL}+0s_xR+Na+g!#)-fifvSIqkwZ28FhT68%v19%>hw;$bg+^2DI zCIjfM=?Ly>^r$1aYv9b`2yQ!i(W5t_JEz#AH(|?1kKT+fCmi-9=D!8qb&B)fiY*`W--a$H9PP7f ze-D*puRywvv61^a^y#$?!pTSO9q4i*&M)Q~u^n?k+~>vUuJL?i+~J$iyOKQzd0?7-aGHHvvb`6#pzjC1hc|(! z^H%izz@D35JAO;wf!+<|^}C*2_}_`{TPJTm--~wvYd79{wAHP}_;tKp#@!D5j*Zc0 zU*w`M-ovH9u>?e4&Ox^?FGR-wHSRz!_T|oL_FVs~vlM54z_g zuisp9;eRi>J&@OLEpqWKz7Jil4@A%3k1ii~`EGPM;qWfU{12c{pZ`HP`I!G9bU6|C z+qE`e-wW;m=DQF15wH@-8)Kh83go+aDYZWatYHnXHuD?f{_LH8^F4_CB=Anf{??&? zD)Ev3)7Z|7ci=PVa*p6Wi!SH7@iu%8-B^9AKrcANx?RZ61J^OeS{_1v0UQQ>z*@D9 zi#ooDZXMn=^|))D=*xj)8St+4AkPKfwHG11YjTeO*N>cELN_k#ub@8+tZ5VStHAzj z1QGMK#QXmX`~7v`Joy8O`v$tX^|=?wXu#xZfwRjk%k;?c?`=G4e6z`{>4m{exu3oF8HvBY%6!^CNU~ L>GQm_J+J=(7wm_H diff --git a/gsk/vulkan/resources/linear-clip.frag.spv b/gsk/vulkan/resources/linear-clip.frag.spv deleted file mode 100644 index 46a4fbbc99ab3563224e9acbca7c1acec9028ac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12020 zcmZvh2Y_5v6^38f*(8Jj(tF$`0ai#NiJ=+k!XgF}K)}jo*qu!VHnYp_Y^Xv)6Qx)| zx+noP6h#mbAtJpPs`MtkTCjmA==Z&Ohun-j=Xn4BKj)r%?tS;Z_cpYwFn&~)jmTEY zR?hx9BFnGUvK3G=w2^t+Ib+`$lZWa(lc#O9r2(sCEqRTFyjb%_!3nOLOP3Wa;Ox8K0t8?be&KbLPbq@@54b_k6t912MYn85^ z>R_e2UY%btZgdh?t#$Ve_oM->M5MLIM>EDgB%onNtvMGT)IVJ78Ol&rWcFF+AYDV% zBP$(4^}*rp`XoC|n%_HZ%5-8{m?<$>E3;lb;;XfKWpIeV|L^qwS?t@w8e~~H&(o5v zMte|>M`!ENcK218dUv_6($g`&cj|OTpN^dOTZeX_e+XR4)-|@jufI{xO4&GgUVnH0 z{K{Z?&IioFba|c)jm4~GBiex+kIW{}&Z*S9`g?naD)o*k)6QeYqgRWVjv^)>yAhJd zZ1#T4O4;NzrmMGquxqefn^Wl;t`!sOoid#t{Yu$HVu$MGL2r)rOrovSdcZ4YQ$ILQ zN6|g+?}kkKPkFz8Dcb=&SQ#4bBe`SEf%oj*<8*U=2_x7?`jB_8Vd-dwe_hBhJ6Mj$; z)=HFTsao5&-ajxizbnSK@;}d4L*JEMT+he#ye-=krEDpD+5B6wd+dX`7LU+2?sJ1b z3STzQ*6dYyUwJ4tL*D1jrkH<3Ofjf=-(D`Jl)VE_Yx;MSe;j9j*|?>wy@_w%#1CxZ zvzz$A@Sa&55-!)z=TEiPIauzgR%-Qz!}ar-RITk(8K{)&)!H1C)@;7H`iFS(#C|Mg zM;2ORPqt=GyK`L1&IYIRJ-3Np+{Ay>#4l~) zmo@Pln)s3?erFTEyNTZeFZT`1Ef@9r+;*KjB;H@2;niBKV<~$Wp3djdCjMd*e|b6H zn*9-8uN+<zmd}9nh>3{w>;(m~ngX|8ahO z7Vkli;65+CI=T01j%k0-_Qses2X6;^8S7bJCC8;4`%HH%eTx#GSYK=IE9LK5xtDp} z^K#d~zV7wNE7sSjsU?3ehtGShk0#IKy-xFbudLt8apdg{ny-iV&C9x6kKnN$spk9N z_h4vtHEyRwvwpQ%iDunuvlGoVQuD#?d>z-mYw-WJ?P&HBuMP4Zwqffq2kVG?Iu4)T z3TkcmRxGfZv14eBZR9NReU#;zaqY}^Ra#@^nmN{_HJ^RuYZYA0K5G};IDKjx&^nGe z8hRRb@`@+UvB*71#iT(W?K|oUE6|~Hri>J*P6_7e_H2# z0Ik@08)uF$VO|rd!aBZ;siiiNSl8pg!XJHomvZg67XGgS+GJe%7hYzJg`hf*s9& z2m?EI)FbyfpceIc_T|z4JCHGtjQ@n(b-x#Gjplm*%rC!x_Luv7P}BeW0*`^~m;1cn zm+zS;0oG!^_1MX;7F>UN1>b%#v8c5PjsaUh=o zp{Z-uYVCi)=h-sGTymfFYFl%My$9y;vi`SGyzj<(R{X{=UvR%0QtmfH%Kc_Yx!(&Z zKPBNl1N>e{{eCl~+;4`I`^}JYzZp_~X%oM!iTllv#{12Xa=#f;es>f1n<4zJq2C0- zeSY~(kaE8Xf;(To3FOKK3nwfz@76x zshPJ8eGu#!xRiLGXG35$pLuT)KMeMIhj@K;>_*J{FOK>S16yD4!@-Vqd{M^{U}My+ z!~LNa@kfEv{zt>@zp&{46|gbt_IE$2MgL>KYOx;2g8AiVRbRv{06TWXEd=w+dpzIIZKWaDMqY(`W7Oef8+`HE>$f*Wvu~KKktA z`B0BOr-IXQPJ{Ey=b)r zIoz>~(HHey0d`NE&iQccpMs55H%9GeVAtEVlV1r|Gd5~ei=00PyN82c1$M8-p1c}t zjCzdm3$SC%Vg$#y25ekvCl}-Y65V)XVth5%{}tHrm|uPl^+nvT z!PXsd*Ms@xarzwV23q@zm(Us$Yy2DVRN{@%7qzLUwOONlnATcvq>UPW3+_w!P2hvE zSi76S#;A|wso=Zd7BD})b+Syqd%%0|_|98@yJ_XIc1yvooqhDh+Nq~&<(loxKJeS*KCpY{UM$AA zAFM7PP0SjenGYH0bh4zO+Qx5IfLbGq2k>}9tZ@hl*d91_paBGWm z{Q}r{^_c%l;F$l5V7YU8nb!EYH?M&G_gZ808M7F!{w_1x7V}%uHC-9=^6$lMi1QoC ze@k|s`?t6E&hMbD3f=FKSi7wYeI_euu5BX#h9b7&7e;ll)c~NeD zj?6tBGruwKkzF41aNn$sdHHv4%)`Io1Fr^lPHWKmZS0(Oz}y2-e2txU^OlJM{P6EtaTI2ag2?U&g*FQux#OJd zjb=`B*vA<6u=h(}?7w|-eOdkc!qqe{>y6mYg6$u3-4Cp$#ax%L*AIYy4l|cA=df4& z9{)V1?svu)X}$c;Q2zp^=Kd19KMyRpdekr*Yz?#M=bkNNvoYhvv7gtSANWA5QK zY1b*Rdv{&T@z$q}{5^$kK5^vpxit>++5n3)v0;JD?SE@A--l^EA8KRT1d49c({+vA>7G=JyJ1K3L7UgmxI% z{$8OS4puWR&c+d7bDG0G#>9R)60F~K@m|TDk9+ManD<+s_embUW5LGj^Pb6lm)LIs zwmN1Xea3j-7huuhUdbI@o^do)LL^Mkc_$HpV<7?X=@D&&4LR=53=r z8#^oE=YWknfqL6$&%@Nt#TFFW`C$9$+nG~!0qys(GqGuf856Z%2-a_%;;3^JxC8Ur z6pK1H16$`uXrs=H!0N#-1~0;nD{A@?SnU$bZ^t&;A7dl1Ntpeu%{cFix%5ZAOTpRb?b<=`58D}8)IT^t_16kI(`mL>$nP@)^RmlEv@4h zaQo?tI(`XOzXppst_7!c7!!5;3amfsxDK4w@oRWm$MtZvw2m9#_R|-2{06MP1dBRu z1gCWv6LtI+tUv0w37pn(Gd!*17Pwkk$E|St>5DpU2dm$PMICp5(>jcaI_?DPk7w0g zVDFXdWR3dWM~i9oxwmc8y*(N3wFTzh-kf$~g58(y^N-TTcid9&sDiiC-ji_qKaz0$ zk0xCIt4;ikgd6{6!q)=-BjNhrPPqPe60ZN>O?=#l#>CFc^XT7K z_tLr!w*SmZyfd@x0nAJPgS7f>V_*CpY>wa$ffr#{@;um|_F>Ezb-!)o_hIHXmpJ-9 z1~!*_8$BFWgSmp#;CtV|7U2utV!R~n3^?- zop02rE_W^T+eXdLf~`6B_j6!1pF6R>YU%o#H~K#hPS@`Rxa+sLsQX2*G3wU+GOd?& z>w5`Pvo3M0%`0HX44-X``5M?UFE7S;9jxX)aEw3EdO3!^KVpBw977y={tPxxJp2Cw zR*Sj6308}H_*d`*Ox-#?6KdA!nC5q!@O`PtXN+Tyr2RW)e`7ss@~G>d;Iyu{;A&Bq zXG_hxM$!HY>%i2_=UG&XeE$KPPoL*b9(~^h+gDw`=Tt4~d=G4W!T$?(UtU|Ry)Q;% z)Lr`(;9jo1z7d$3Ya=#~HMfARGk6K^*fCBk+;M`Bgj+}a8`3DaG3pUB8l0Y?72#>0 zF>qtl{m$|}tOPcfzIaBD1*@m#w}5r8jLt9rcSz@8-Nwhd>yLU?0XqkM)**MV#Cq69 z?5f~N#039P(f9gdomYb!qwYGdLF?r@>suXDbDhQJvEDVouCwnIv3}#MW9@?5`n+71 zc0J5X|N4dB)_iT~8-U$Q!8e3^-s5?>5!@JcYm={oncK0&(f7mP*q1*4<#E>9z@9aA z*U$T^7JWAcM_=C+^4Qbk!R~4G*wbqE^`1`vr~70RxN9HJ+D+lcsJqr3v|i3f-)5Ma z^AWpNF+X+3aqTw;$DWpN0ry_`w~>4z+!*!vH?B!w^?CTC-pTN^-jBl5eZ3{z81=|A z1#B*TQO{KH(q#OP!PSg)o%E^2xYNLn8~axtxwZm3H+{}Y?mD=CTo+qo+wg4-_Flz1 zW*fL#JkRv0rF+u#jQ-n#jS0RT+&vfXn2*DaQTKj*g4WCXrEfZ>W?f=yc3!??BIge1 zv7h|bkjH-75$t}-b^1DQHS3MMw&rqw?F3Hm*UoVFSNyl9UEs#3Tkj`ny{uQ?u9%wj zip}eO*$tdNGk1r_{&L(-xZ^|}d%)9u@+r76>JhUiIIZ>5@U+hixH0PS%-joXE`9OL z{0vw>=2ttA9Iiv~*#(bzcEQbIEyl{jR|cC?pZ(H7yOKXwpU!dcRj-Su(-P8V(j<@s8Ip=%MJ@?#m z@9(~rW-RZ@veU9Nvf0@`vi6vl&49_^I&;~#ZTq%0&DQXmwHIGt#GI^@2O2Xso1g1t z{_YyA)iv$`hrz?(QScP_HTWHP1{?uL!7=bGcn%x~CH~DoK0)GgHY@AfR_W{S@7s1| zWoTle(roP;t5(Kp^=f6f)~F7(YP+k(%`C*#>O*6b!^MCOB8s(XpUxWBkO09BJ91ln z$M|G@xS7FpW!=~=QrX!U-&GlDUcX}Z&b90HmFY{C?cKL$)Hxkk^CGrkg38!nW2D+x z(QGv)hgz#$Xf<;$Tu*E%JJZ;F-rQ_a%&XN~)kc%RQzxC8#WhRW0_G0pc}m$rv=NTbrJ2#*E<(Ue)Mv-5`BE~_z~*_~5-$+iN$v z^%FjOh;Iv5=ZcyqF;qR_vyb{F$Hq?hyn}~Lz_34l>$Up!)?lNR+mB#-AHwfDP^({A zmvHWr$moafL#^(I($4i0?32ANWlw9T`}6ZDzHKF`y<#|!p+cICd7(F502Uxe0)>;Y#H?-^^GyNACsk#b@wvHq5+FT*zr zscnq0)}T*L|Jyzzogq-u0-aAJxH9PlwASWWG7d^}NZ;F`JSaQY$x8{U> zl6z^2Gq#sbS;qyyHO%20p>FJAYFdZ12cF4NG{2SLj6+unEE--qp3z$y8?dTuu$)jhXfDzJv#Ao>)tmss=dN&Z;#CTwf4 z=39`)m_z%+NPX7k9<+TEBK|&f&nas34tzZMJ@fm~^~)_qdjM%}x%(4b=M(6D2l`z{ z`*7m)KZtH!_FDU)xq2YzBh9E zf17k`a=x~2PWbgi2Uoag=bNPKg38ELiA^r}B-Glyg!8YFC;-cT*RPBvqUy1ZP+CXl(p8|WU z&%D~}Sl!ZZQa{63T+qs_0FM;o?ynbtxbFTj106Bf0op$8?J$mHz z+_YofpU`8T`_gtz&+^Y;IgmH6XDa7h&+@OpbJKSu+2Q*ewr8f#v(ygX-_egJpXaFk zA5Ql&;Q84L`{bAfE+vQObO!J&XCuvJzb{ODKeMziN}RmIJL6EsoR^`StDhP6ZY_`# z-W~7E)u{&;qw9ABcL}+0s_xR+Na+g!#)-fifvSIqkwZ28FhT68%v19%>hw;$bg+^2DI zCIjfM=?Ly>^r$1aYv9b`2yQ!i(W5t_JEz#AH(|?1kKT+fCmi-9=D!8qb&B)fiY*`W--a$H9PP7f ze-D*puRywvv61^a^y#$?!pTSO9q4i*&M)Q~u^n?k+~>vUuJL?i+~J$iyOKQzd0?7-aGHHvvb`6#pzjC1hc|(! z^H%izz@D35JAO;wf!+<|^}C*2_}_`{TPJTm--~wvYd79{wAHP}_;tKp#@!D5j*Zc0 zU*w`M-ovH9u>?e4&Ox^?FGR-wHSRz!_T|oL_FVs~vlM54z_g zuisp9;eRi>J&@OLEpqWKz7Jil4@A%3k1ii~`EGPM;qWfU{12c{pZ`HP`I!G9bU6|C z+qE`e-wW;m=DQF15wH@-8)Kh83go+aDYZWatYHnXHuD?f{_LH8^F4_CB=Anf{??&? zD)Ev3)7Z|7ci=PVa*p6Wi!SH7@iu%8-B^9AKrcANx?RZ61J^OeS{_1v0UQQ>z*@D9 zi#ooDZXMn=^|))D=*xj)8St+4AkPKfwHG11YjTeO*N>cELN_k#ub@8+tZ5VStHAzj z1QGMK#QXmX`~7v`Joy8O`v$tX^|=?wXu#xZfwRjk%k;?c?`=G4e6z`{>4m{exu3oF8HvBY%6!^CNU~ L>GQm_J+J=(7wm_H diff --git a/gsk/vulkan/resources/linear.frag.spv b/gsk/vulkan/resources/linear.frag.spv deleted file mode 100644 index 46a4fbbc99ab3563224e9acbca7c1acec9028ac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12020 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 eAEN6M_(vH>%qw7h-U^R79HK$y?S-$@W{FS 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 diff --git a/gsk/vulkan/resources/meson.build b/gsk/vulkan/resources/meson.build index 8881eb1b6b..cc17b6303f 100644 --- a/gsk/vulkan/resources/meson.build +++ b/gsk/vulkan/resources/meson.build @@ -44,7 +44,7 @@ gsk_private_vulkan_vertex_shaders = [ gsk_private_vulkan_shaders += gsk_private_vulkan_fragment_shaders gsk_private_vulkan_shaders += gsk_private_vulkan_vertex_shaders -glslc = find_program('glslc', required: false) +glslc = find_program('glslc', required: true) foreach shader: gsk_private_vulkan_shaders basefn = shader.split('.').get(0) suffix = shader.split('.').get(1) @@ -54,45 +54,41 @@ foreach shader: gsk_private_vulkan_shaders clip_spv_shader = '@0@-clip.@1@.spv'.format(basefn, suffix) clip_rounded_spv_shader = '@0@-clip-rounded.@1@.spv'.format(basefn, suffix) - if glslc.found() - compiled_shader = custom_target(spv_shader, - input: shader, - output: spv_shader, - depend_files: gsk_private_vulkan_include_shaders, - command: [ - glslc, - stage_arg, - '-DCLIP_NONE', - '@INPUT@', - '-o', '@OUTPUT@' - ]) - compiled_clip_shader = custom_target(clip_spv_shader, - input: shader, - output: clip_spv_shader, - depend_files: gsk_private_vulkan_include_shaders, - command: [ - glslc, - stage_arg, - '-DCLIP_RECT', - '@INPUT@', - '-o', '@OUTPUT@' - ]) - compiled_clip_rounded_shader = custom_target(clip_rounded_spv_shader, - input: shader, - output: clip_rounded_spv_shader, - depend_files: gsk_private_vulkan_include_shaders, - command: [ - glslc, - stage_arg, - '-DCLIP_ROUNDED_RECT', - '@INPUT@', - '-o', '@OUTPUT@' - ]) - gsk_private_vulkan_compiled_shaders_deps += [compiled_shader, compiled_clip_shader, compiled_clip_rounded_shader] - gsk_private_vulkan_compiled_shaders += [spv_shader, clip_spv_shader, clip_rounded_spv_shader] - else - gsk_private_vulkan_compiled_shaders += files(spv_shader, clip_spv_shader, clip_rounded_spv_shader) - endif + compiled_shader = custom_target(spv_shader, + input: shader, + output: spv_shader, + depend_files: gsk_private_vulkan_include_shaders, + command: [ + glslc, + stage_arg, + '-DCLIP_NONE', + '@INPUT@', + '-o', '@OUTPUT@' + ]) + compiled_clip_shader = custom_target(clip_spv_shader, + input: shader, + output: clip_spv_shader, + depend_files: gsk_private_vulkan_include_shaders, + command: [ + glslc, + stage_arg, + '-DCLIP_RECT', + '@INPUT@', + '-o', '@OUTPUT@' + ]) + compiled_clip_rounded_shader = custom_target(clip_rounded_spv_shader, + input: shader, + output: clip_rounded_spv_shader, + depend_files: gsk_private_vulkan_include_shaders, + command: [ + glslc, + stage_arg, + '-DCLIP_ROUNDED_RECT', + '@INPUT@', + '-o', '@OUTPUT@' + ]) + gsk_private_vulkan_compiled_shaders_deps += [compiled_shader, compiled_clip_shader, compiled_clip_rounded_shader] + gsk_private_vulkan_compiled_shaders += [spv_shader, clip_spv_shader, clip_rounded_spv_shader] endforeach foreach shader: gsk_private_vulkan_vertex_shaders diff --git a/gsk/vulkan/resources/outset-shadow-clip-rounded.frag.spv b/gsk/vulkan/resources/outset-shadow-clip-rounded.frag.spv deleted file mode 100644 index 48e3538a100f03e3f925d877948f5cd4738c313c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14640 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 diff --git a/gsk/vulkan/resources/outset-shadow-clip.vert.spv b/gsk/vulkan/resources/outset-shadow-clip.vert.spv deleted file mode 100644 index 2f12a13f6489b08b7c5aed834bbe97f139eff7fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5868 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 diff --git a/gsk/vulkan/resources/outset-shadow.vert.spv b/gsk/vulkan/resources/outset-shadow.vert.spv deleted file mode 100644 index 198b1c956e7e3662a1d49f0ba6873148f11a92ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4152 zcmZveS$7mw6ord)Itd_?$RHvH5f=zD873JL2-rcR2}HrU)9J2GN;}nUS9J&o8X$-R zx|V;zU*ht=`0k@Gy4>HbdzvE4Vr|aZ`<#33={rH8XHS0+tP0i!>w;f`?AsLdNC~9% zIa?Z^8b6ezwL?S4kC3rGD7Zv&HU!T(zgK_HSE3klP#6+U2xo;G!i;cJxFy^XmV{;D zq3}rfQFtsA^ruJm4;AkX)&!;Ta%p0sG=8~UZMDitdaDtZ8&MpVYf(F_rqM!3-asxd zimQ!IEuTECJ>PIbi zLpPR<-6r0w*OM?!T&?}YyS0jLO`>?BlhV9m%y&#SX|=;j4PJC>7R6IuLF;pC7{wPG zo%S`?iH5kbCuLiec4gl2qFZOxcO6*H_)|HB;3~XHe|>IGW*g<}VLJ^Muf(-*F`I8% zInpP?b`}yGg_-l?OvyoGr!Oh&+_PlJuS~PJ8>=P>h$3Bn^7&D zL+^LvncwMiVKh7EN-I`$G0sa;tu$<}>f$Z+A)}05cb1!-RBHh*x^pew-Qc3mBCp zWBL8OX;0R#;LgE%ALFef#@vkKJXj2$SXQSHEahVO#OQ@_%d$2OpIEPpW#=KE%XzR| zd}7&N7Tme87-xi7wyye#t>&-e01tP>p6365#KC3DDWNdoPTu~vr~MFEMw59zg3nP`Wer8pV1hP z-7fGQ)ao$yc>xVr&JOuOurzErFNmR$W7LEgNZ@1qVOesi34g06_(1?E|OE2V8 zk2CPOK%6}<%MwT1C2v}m`e?)ebtlvhu_YJ_P3OxEMs{K z_6z)WICuZp3Vt%j$sf;g&J+KiVf=Yj=YDg?E@%dR#}R@1z?na%`s5uI(8*_RI5B?D zae?!0{FM9?0=e`7Kdsv2o)$I===Z$#rhIA;V+_9qje6|oIf46O_0P*EXHw&d4-07E zf!9XlGme;zyC|P=5Bly88ag@5^@)Jap1?m9 zsEN)RpnWFL6ES`hXBUmSv$AtSU9j_7l^=PX9NvzGKn`z;%{}jRe zNNiaaZolJu`P^kztZuo20idL@vRrAu}*e_K#fhZ*3Zjcx3}aKakM>xX|Kvh-zzW| HoVor3H`;Bo diff --git a/gsk/vulkan/resources/texture-clip-rounded.frag.spv b/gsk/vulkan/resources/texture-clip-rounded.frag.spv deleted file mode 100644 index d3f3be951d460fc59f073ca2f9c5a48d66ad0099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14572 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 Cs&?f7 diff --git a/gsk/vulkan/resources/texture-clip-rounded.vert.spv b/gsk/vulkan/resources/texture-clip-rounded.vert.spv deleted file mode 100644 index 512ad8573c9a9143df986c6da02129ab001b72d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6252 zcmZ{md5~OH6^CD@d$LYek`T5yV+f3rObCW0MwXD^Bvqps5({@blbN1O%cN)Q?#Y4* ziI|cqK#ho1L=jvgZW!FrQbfhQ3WNKC2_h;k|7uyK<@ddQCwbE;F7@M_^E=Bu_uSiW zQfON?ElH*%vy$1#Ka=K~pR~awa8py++qbQ+r`{OqS##;dM$AbHX`nH4v0O#4YoJn9 zKLU<|W8k;oNpKvT0MCNIg987xAs?kkF`1e4_LX|KZ0YU0t~5A4UaB|tjh0KJm1?;( zRH>B*8o<1q9$vFfUy&Ik$=-c?M$9pLLB!T8HNBwxnXH^ptiGIdyc$CC-dee=R{tm+9=oRY;bzg>ATxwAvufO0ib?1a!0DqNR}c8 zM=Rqc4|{sKH2yqdn!V3Xy3p(8MrnMkUTIXus?GU4M{>GHG3hj)@(Ak9PP&ox!2xcw zQQlh`92=_*G2Khnoz{DEXYVZflKVazWEh%eKQ@h;6k~`xKKNxUu13+N~2Y zHMttQf1*CJVXRtj3{+vg|6jb?g3Y;Pk0N;AXF9Jvm7&H+o#<(4zOO&! zN6M9*BWY=T?WxcAm!21C@9UA{^npn2VPvgbpBQCA`tQ&`P#f5l`46?&ceU7ePqGWi zJ=o3rDkg^~`HIQClk7rrpEg5vKK@2`j+SmH*O=ty>QH&F{Y*_BZ1Vl(TGNFI+vL^B z>Cc`6?6frA`K3H>bsIkm5bTkK~h+3o4~k9{bzc?efp!|!2Q7itsd@a?+V!6yD6_Og_n z%uR!vmy7c*jJqbsc?WX+InLS3ZO?JOUAb}4%RRWSxxMt{d+}TNLSRq66PKJTIQN%R z24@X9_Y6*5&OP1Bda;-H>bJ_}-u?|aWf#)FC;rvZ=e_B3Kkeh09kotmcGF)-=O4NL zEi%_$%=I3$%{_zvE4%ROS6_@a71;^SB;MI;dxlQ_KOHG2mJ;jV9`!DKGm+ZH7;6vu z_)j5B{B(%7cmo-E1Pa@Jgiw5EAoR69S@<&AOgMZ|fBoxpWbW?zKv z{^w$^Kw3l2x+{_TTO^J9oWO$LCh)S3SzByF!M*v+p+Dzp6^5& zV-4+(BlX#vXV5;9arz%X_nx9h-@s=wzjyxG%rCc;$OnF%Ll`^k)p_~SX-`X_*U zn*Z0#=lPA-em3Lu{|(*P@N4^Bkh_ex?cI6rE_?bnjNfT%%|Sj6;%xrjp2*qD(EXbf ze&hYS6t@1Sa<=}bbGG%K$?U7xy$9Xj!IkW7jh_K$sn312*V3J{`Z?$T^7`#l&RqS! z0&@E7N!wiS;n$!G$m{nEa^~v)9gx%KU1>+%KcGil?@2rI{)irVo?AQe{)8TR&OlqA z=lnA`0o>1dXs^X%FMk2uzC`?aVaC`3Uq62$@*T4E+>3r1#mrm`1^Y?(C-Rv9lD$~ z`>El+F9EAEm}ATVYUsNX*q1Tu;Wi?#OZDcr%)Xr8OEW&s(wlMeuKZaJX0Nva2K>mN6Mm^^09t(hL9&oO{^ZCHJo`JMKXZ^B_??cAiUY_wWw=LLmBIXwP{czUJ z=U{=kSb+foma%b1Xvl9A_e4z_Cvi20tC)6YhC*5@Mq{yLvw z;Cqi5?L;>xKl>4E`Iu1!T~4^1N#wr~-F@=;H)6|2{wTVfaGBph7v9~j%56+s_Fvl3bz229;_^EZHf}W3kE4G}7vwnl$ z@-5i=fwhb|%v-q`c>wGO|Dumuk*@#XlYbkK^L?rNJ`ZNLeDv@RbbE;Rd>gu)@#^{a zycFA&|6ZJj?H%r|H`g~W$J9F!6$G;8U zjoty|^}C;3_}_!R7|2`C@5Ot8y&G>o+UoXV{93+U#=Q^tJ2pn2bCHX=%th}4u6ZDS z=bh-z<@w0?x79u9`MDf!vG2{<%h2!3?CAOZ*qy*W&DD-GegNJ3k=Ji6x$u7w-5JR1 zw->qiE#8kV*9T(eA40z$#9RI_x}0!L0g?X^^w#{3!pTSe$I#_O8z=zxx)%8fa0FQI z0puq^50E#;Ie!Ysckrdu{xq-$VFa2y!Z}$ z30=+=+?Ubi+&8`rUqLrk-zu;g9AaPZ`m4ZwjIo!8kzWHxfwQ((ZR4VkucO=L6rG?__zV`&+vp)2AaZ1irx+Ama@_hHhW(rTiu^F7D`&jFWeH&gkn~=Qr peQ~BAqUX=_BWyX*1`5D``&skHz#7IJ$he=NKLYf52io4j{{f0hh`0a% diff --git a/gsk/vulkan/resources/texture-clip.frag.spv b/gsk/vulkan/resources/texture-clip.frag.spv deleted file mode 100644 index 71703d84e00cb154dacd9f929817d82c21b94a8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4440 zcmZvecaxJ<6o>D+2`o(!5m1UOSeT)xhy@V@Q5F!Cwhjxz)?b$Q5`<{`}W^<&~K2ocU)T;H$NVz&u8Esc5E5;4v;;Qx0TBn>3C=!wH zK|H`54^aTcN{SI{?{9SKda%}x3X5R!I z^A@6;jTUwxEHbuHYjpdW6_$Zx|D%n`%0%hF|E$4svCa}>5qnvRZbrKhR?Amfof(AE0h%HdsQ za53K1h_^Qy6XkBqSH$Gk_RV>CS~vsVQEQaicXh_bxD>#6-{c)*`r>^ngtOrNSy+*% zbKv1lYkYg7-fEZXhQSshj~Nb5Ho@JvK5)Dz*#%C#-%{icRm<)17SYpVzF%qN$1BwX zrvpz*A`NmUD{Td$B|8-sZ7;yFw>Jzj!braesUVF3x=J zxw-adtnY)^b%;-+ry=&ZlfP%s4)6X>x=naxWV`j{Qa$(BUiuL0i3bsf_1tqu5wTvv zsa~G*y_%bgv!-!dbDVw44d*y}k=vK!T#sB6aZjAr+{^f@9)vSbdjXbvupC)P&-Nj< z#xi`qZF0+DW@NUUu`|)ec54=R$3x_d8)Utgpp6wP)|ijBp1I=7Gc0G$f(#p{Pi`^V zd92ap3$fqj;67wEb+iW&$9y{4j<(0U(c1QCoON~~jx}`Ry!Rqv}n{Y&ZPG}?Z>cW2OI`}htmPJMij?Rm;uM|?Kp7J+}jc2Bx@ zxcf#WPF_j(??>zz$T`GX;-50^7Ve(&SjXXB{|Qq>8|(S{TVg%2b&luoeC(4w*f&1K zd%wTQ@MiM82PcpzWDB!dORUd+Uqg-|`m8J7$d0*ZuOq%~=IArV-sH{qOg=gAv++QHh^==mPCAM+$sm|Bfsdx84Y>%$r zc-LY5ZxR1bF-D&;-f8*2xhc0Ho{Rf22XXlB+)AALKO6Ck{0(rO?(vF@A4J=a^Q_GH zJs@jcopJJ>c|Vf!ufeu%KL1*lS7BS@nqEkL^79{2RdXDgQ=nImKcA z>}>zmXV|qlkFlxtP1wD?ZGe+cwQt6jQ+oIR7P#KtZiSOi`L|)qDJehowh_)=Jul}m z_Ce0ZyL&rg?~cUz4{=&g;_iU6jw5lKu~Y3~_QCVmf>_fU<{0B0_Pq3^`*$a{TkQt&qpuJZ13(O#QCm7r}__Oy!EtGJx_W& zb@qYftTUC>E@7Lu4@viXKeqK9i5tb1b1jK0W1H_tTm@Usxb$s|VO!H0<`|Ri(*bP# z?u%z7c0Jy;=Mc|ZpXVe_z8bdi`aCnSza{1!M0{J#(Pxb3E}!z7*mC+jQ}M=ZPhP;D zgUF}7oxpZ4U(aG%*v83Q!+Rp<+c$|mgvfOeYj~dzBl0QcD7G<2kQDPGw)_d|nDY{1 Lp1j|P*l*-toO_X^ diff --git a/gsk/vulkan/resources/texture-clip.vert.spv b/gsk/vulkan/resources/texture-clip.vert.spv deleted file mode 100644 index 512ad8573c9a9143df986c6da02129ab001b72d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6252 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 diff --git a/gsk/vulkan/resources/texture.frag.spv b/gsk/vulkan/resources/texture.frag.spv deleted file mode 100644 index 71703d84e00cb154dacd9f929817d82c21b94a8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4440 zcmZvecaxJ<6o>D+2`o(!5m1UOSeT)xhy@V@Q5F!Cwhjxz)?b$Q5`<{`}W^<&~K2ocU)T;H$NVz&u8Esc5E5;4v;;Qx0TBn>3C=!wH zK|H`54^aTcN{SI{?{9SKda%}x3X5R!I z^A@6;jTUwxEHbuHYjpdW6_$Zx|D%n`%0%hF|E$4svCa}>5qnvRZbrKhR?Amfof(AE0h%HdsQ za53K1h_^Qy6XkBqSH$Gk_RV>CS~vsVQEQaicXh_bxD>#6-{c)*`r>^ngtOrNSy+*% zbKv1lYkYg7-fEZXhQSshj~Nb5Ho@JvK5)Dz*#%C#-%{icRm<)17SYpVzF%qN$1BwX zrvpz*A`NmUD{Td$B|8-sZ7;yFw>Jzj!braesUVF3x=J zxw-adtnY)^b%;-+ry=&ZlfP%s4)6X>x=naxWV`j{Qa$(BUiuL0i3bsf_1tqu5wTvv zsa~G*y_%bgv!-!dbDVw44d*y}k=vK!T#sB6aZjAr+{^f@9)vSbdjXbvupC)P&-Nj< z#xi`qZF0+DW@NUUu`|)ec54=R$3x_d8)Utgpp6wP)|ijBp1I=7Gc0G$f(#p{Pi`^V zd92ap3$fqj;67wEb+iW&$9y{4j<(0U(c1QCoON~~jx}`Ry!Rqv}n{Y&ZPG}?Z>cW2OI`}htmPJMij?Rm;uM|?Kp7J+}jc2Bx@ zxcf#WPF_j(??>zz$T`GX;-50^7Ve(&SjXXB{|Qq>8|(S{TVg%2b&luoeC(4w*f&1K zd%wTQ@MiM82PcpzWDB!dORUd+Uqg-|`m8J7$d0*ZuOq%~=IArV-sH{qOg=gAv++QHh^==mPCAM+$sm|Bfsdx84Y>%$r zc-LY5ZxR1bF-D&;-f8*2xhc0Ho{Rf22XXlB+)AALKO6Ck{0(rO?(vF@A4J=a^Q_GH zJs@jcopJJ>c|Vf!ufeu%KL1*lS7BS@nqEkL^79{2RdXDgQ=nImKcA z>}>zmXV|qlkFlxtP1wD?ZGe+cwQt6jQ+oIR7P#KtZiSOi`L|)qDJehowh_)=Jul}m z_Ce0ZyL&rg?~cUz4{=&g;_iU6jw5lKu~Y3~_QCVmf>_fU<{0B0_Pq3^`*$a{TkQt&qpuJZ13(O#QCm7r}__Oy!EtGJx_W& zb@qYftTUC>E@7Lu4@viXKeqK9i5tb1b1jK0W1H_tTm@Usxb$s|VO!H0<`|Ri(*bP# z?u%z7c0Jy;=Mc|ZpXVe_z8bdi`aCnSza{1!M0{J#(Pxb3E}!z7*mC+jQ}M=ZPhP;D zgUF}7oxpZ4U(aG%*v83Q!+Rp<+c$|mgvfOeYj~dzBl0QcD7G<2kQDPGw)_d|nDY{1 Lp1j|P*l*-toO_X^ diff --git a/gsk/vulkan/resources/texture.vert.spv b/gsk/vulkan/resources/texture.vert.spv deleted file mode 100644 index 367ee3434259dba19591cd3e2bb746e8916f309d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5036 zcmZ{m`*&2;6~`~h3{f5`D2Pg9BDMtu>H{B$Ac|cBnwAJw`*ch*ljQ1TW}KPuus%Rb zb=hi5U%Hl$s#WWwt*w3k+P}(Q?CR%p@7>8YE)MIPv-fvD&OZB`dxqhmEh9;?B3YfR zP5zVQV_h-?lfbRa=Gw&3iJkpHW9P1$uG8a!WH@uw=R!0`1YljclCca*u?sn__!O2#$-b&ledL!*Mrw8e=rhey@ z{L=PxYoSqgsNzwsL;ZZ#I6?v@c2muC%+I7KHl8gAM_Tc2RmF~2Qk<0!Dl#Gr%&d;I@uWhJr}IErh2o@ z-Z|nnEXJLmT!uW|O1pInJBRHR!|*d%m#CyggZtF=EoT%jP-9b3IF2#p5b;vn{PtNw&dtW@ae2 zkH^a7HuTAb{@j61yFZv}!+KVgj7Lo7k9E;=Kkr=Dm*N0}_bz4p@w73R>*GC=#d}jT zey*9$&Sj~wRWqA+CEG8v{kWaEOC3z;!%2fVKgUYK^-H=_y{Y-kR!MYP(ub2r)Mig5OydN*q|N1$-n!PP~ z-a{T;mczFu%L{d|bf>ED2l4RkIlTLhGRMQ1TvXyb3;p(&IL|4`*++ zFS<6*O`Gefe^ls^%lCZAKAiPGVtwbeS&OlrgSxR7^VfMCt9Ip$NGqAgz@_-xdv*6P z#^3Xp<-{nyzU#{4*j6#C>!YtVXp=M7h0Ny4*Q{h`DyN_EmoV$AZoG9Gug^G4ycPq0t`8|cct>BE;<{fZs=N=e)Eszu8vmH4} zPTdhcJJ96x32x`2zQld4@Y8oYJGKsg&|SkE#t3D7H&N4WW_#f|j3Rk&gOeB5>Hhf1 z%=)O0`&0K#wYTOrFPd*_uZ7!{v@+?+6VPB%-YPQ{u=X&LN{Lh z^@7v>F0%gCsa^fOg46zfA-jfl^$!Xz{QVZq5&8WVUDNo#7dH2=UES|7>i;LQzF}AQ z`;@zxd*^rJnK+F36sF2-F7N-Vz`d&bExb|E{YKs@>H5E2(zW}pN4)lrOS<`d*R}6s z^=-`F(Y>rC_d8%OwYjePZmP3aZ-O;IUb}U^35?bLdmyLHn$(T;9Nqz&fxLG2AZM)h zKL9yxo|Ss!{SZ0wdQR#Q_h;mYbKmL__ZQ@dvj^(h+~+62Gj%=tp}rf7wfqfi0p>GK zyMEpYZRYT7{|!7>ZJxjSXPok_z;m`I_RFyf+=8F|UkyC-waih^^#y;JDC@fc$O*@a ze9GpCxe?A>hl{#*AhSx!321i&cQdk_xhKity0-w|Ibn=Gr^%u1R$yKF z+zIDC*Mo@IUO z{3bBJKJG(3_Te5k0>>pF_OSukeO$^Mb=-$6U#{Z_x_s1e6j@FdEN)$Rz2R{S!DMjuiad7VNa30OY+*SMJ~?yQDnLD z{b`}g$2rd<%L#|)8u4x9J|6?}Yxr{2 zj{|Gi39QZh`nW%Pr`>!{GCu`;hhl%bk)JO3$bSmmxVUGhk>wo0J%fA-xNh9NXOZ>Q zb`97L&a&iR_;&mmifcTKr`*S4TLt^~dZ-jlIHzJPhW zko}IY0^Y%^nd8o#MYb;2a()5m7iaX-f|GZ+EX$YUVR{6%EftAWV(60&^c`#G|l zaF{RNzF#1lQy=5~&VC8ZX({|8wk;_d(d From 92038d6b7f80c9ef480773ccebabc4909772ab9b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 15:36:55 +0200 Subject: [PATCH 03/14] build: Move the glslc check into the top meson file Put it with the other Vulkan checks, so it's easy to find. --- gsk/vulkan/resources/meson.build | 1 - meson.build | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/gsk/vulkan/resources/meson.build b/gsk/vulkan/resources/meson.build index cc17b6303f..146120d8fb 100644 --- a/gsk/vulkan/resources/meson.build +++ b/gsk/vulkan/resources/meson.build @@ -44,7 +44,6 @@ gsk_private_vulkan_vertex_shaders = [ gsk_private_vulkan_shaders += gsk_private_vulkan_fragment_shaders gsk_private_vulkan_shaders += gsk_private_vulkan_vertex_shaders -glslc = find_program('glslc', required: true) foreach shader: gsk_private_vulkan_shaders basefn = shader.split('.').get(0) suffix = shader.split('.').get(1) diff --git a/meson.build b/meson.build index 6d5ef1c434..ee75e706c7 100644 --- a/meson.build +++ b/meson.build @@ -599,6 +599,7 @@ endif # to use a custom path for the Vulkan SDK. Bugs that are found with it should # be reported upstream and fixed. vulkan_dep = dependency('vulkan', required: get_option('vulkan')) +glslc = find_program('glslc', required: get_option('vulkan')) if vulkan_dep.found() have_vulkan = true vulkan_pkg_found = vulkan_dep.type_name() == 'pkgconfig' From 0f289fddf7ed8c99c8ceed50795b75539d845d97 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 17 Jul 2023 21:02:33 +0200 Subject: [PATCH 04/14] vulkan: Fix leaks with pipeline cache In particular, we were leaking the actual cache and then created a new one. --- gdk/gdkvulkancontext.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/gdk/gdkvulkancontext.c b/gdk/gdkvulkancontext.c index 50bf9f8c72..0ad81ed70a 100644 --- a/gdk/gdkvulkancontext.c +++ b/gdk/gdkvulkancontext.c @@ -1050,6 +1050,7 @@ gdk_vulkan_save_pipeline_cache (GdkDisplay *display) { g_warning_once ("Failed to create pipeline cache directory"); g_free (path); + g_free (data); return FALSE; } g_free (path); @@ -1085,6 +1086,7 @@ gdk_vulkan_save_pipeline_cache (GdkDisplay *display) } g_clear_error (&error); g_object_unref (file); + g_free (data); /* try again */ return gdk_vulkan_save_pipeline_cache (display); @@ -1093,10 +1095,12 @@ gdk_vulkan_save_pipeline_cache (GdkDisplay *display) g_warning ("Failed to save pipeline cache: %s", error->message); g_clear_error (&error); g_object_unref (file); + g_free (data); return FALSE; } g_object_unref (file); + g_free (data); g_free (display->vk_pipeline_cache_etag); display->vk_pipeline_cache_etag = etag; @@ -1132,12 +1136,15 @@ gdk_display_create_pipeline_cache (GdkDisplay *display) { display->vk_pipeline_cache = gdk_display_load_pipeline_cache (display); - GDK_VK_CHECK (vkCreatePipelineCache, display->vk_device, - &(VkPipelineCacheCreateInfo) { - .sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO, - }, - NULL, - &display->vk_pipeline_cache); + if (display->vk_pipeline_cache == VK_NULL_HANDLE) + { + GDK_VK_CHECK (vkCreatePipelineCache, display->vk_device, + &(VkPipelineCacheCreateInfo) { + .sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO, + }, + NULL, + &display->vk_pipeline_cache); + } } VkPipelineCache @@ -1649,7 +1656,7 @@ gdk_display_unref_vulkan (GdkDisplay *display) g_assert (display->vk_save_pipeline_cache_source == 0); } vkDestroyPipelineCache (display->vk_device, display->vk_pipeline_cache, NULL); - display->vk_device = VK_NULL_HANDLE; + display->vk_pipeline_cache = VK_NULL_HANDLE; g_clear_pointer (&display->vk_pipeline_cache_etag, g_free); display->vk_pipeline_cache_size = 0; From 413d3819cfbb8e6cea7803961dec64d38efa1319 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 17 Jul 2023 21:03:13 +0200 Subject: [PATCH 05/14] vulkan: Free storage buffer when disposing render object This caused a lot of leaked memory on the GPU when rendering textures. (Read: inside node-editor) --- gsk/vulkan/gskvulkanrender.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index 3fb7f46ff2..7bb0781e54 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -1007,6 +1007,7 @@ gsk_vulkan_render_free (GskVulkanRender *self) gsk_vulkan_render_cleanup (self); + g_clear_pointer (&self->storage_buffer, gsk_vulkan_buffer_free); g_clear_pointer (&self->vertex_buffer, gsk_vulkan_buffer_free); device = gdk_vulkan_context_get_device (self->vulkan); From 67a3929583e664c1dfb37e6a825841e492a3d38e Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 18 Jul 2023 23:15:22 +0200 Subject: [PATCH 06/14] vulkan: Remove unused stuff fom renderpass ... and move it to the one place where it is used. --- gsk/vulkan/gskvulkanrenderpass.c | 59 +++++++------------------ gsk/vulkan/gskvulkanrenderpassop.c | 15 +++---- gsk/vulkan/gskvulkanrenderpassprivate.h | 11 ++--- 3 files changed, 26 insertions(+), 59 deletions(-) diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index 59f338568d..a6acd0a1c0 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -43,12 +43,6 @@ typedef struct _GskVulkanParseState GskVulkanParseState; struct _GskVulkanRenderPass { GdkVulkanContext *vulkan; - - GskVulkanImage *target; - graphene_rect_t viewport; - cairo_region_t *clip; - - graphene_vec2_t scale; }; struct _GskVulkanParseState @@ -61,38 +55,14 @@ struct _GskVulkanParseState GskVulkanClip clip; }; -#ifdef G_ENABLE_DEBUG -static GQuark fallback_pixels_quark; -static GQuark texture_pixels_quark; -#endif - GskVulkanRenderPass * -gsk_vulkan_render_pass_new (GdkVulkanContext *context, - GskVulkanRender *render, - GskVulkanImage *target, - const graphene_vec2_t *scale, - const graphene_rect_t *viewport, - cairo_region_t *clip, - GskRenderNode *node) +gsk_vulkan_render_pass_new (GdkVulkanContext *context) { GskVulkanRenderPass *self; self = g_new0 (GskVulkanRenderPass, 1); self->vulkan = g_object_ref (context); - self->target = g_object_ref (target); - self->clip = cairo_region_copy (clip); - self->viewport = *viewport; - graphene_vec2_init_from_vec2 (&self->scale, scale); - -#ifdef G_ENABLE_DEBUG - if (fallback_pixels_quark == 0) - { - fallback_pixels_quark = g_quark_from_static_string ("fallback-pixels"); - texture_pixels_quark = g_quark_from_static_string ("texture-pixels"); - } -#endif - return self; } @@ -100,8 +70,6 @@ void gsk_vulkan_render_pass_free (GskVulkanRenderPass *self) { g_object_unref (self->vulkan); - g_object_unref (self->target); - cairo_region_destroy (self->clip); g_free (self); } @@ -1292,17 +1260,20 @@ gsk_vulkan_render_pass_add_node (GskVulkanRenderPass *self, } void -gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, - GskVulkanRender *render, - GskRenderNode *node) +gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, + GskVulkanRender *render, + const graphene_vec2_t *scale, + const graphene_rect_t *viewport, + cairo_region_t *clip_region, + GskRenderNode *node) { GskVulkanParseState state; graphene_rect_t clip; float scale_x, scale_y; - scale_x = 1 / graphene_vec2_get_x (&self->scale); - scale_y = 1 / graphene_vec2_get_y (&self->scale); - cairo_region_get_extents (self->clip, &state.scissor); + scale_x = 1 / graphene_vec2_get_x (scale); + scale_y = 1 / graphene_vec2_get_y (scale); + cairo_region_get_extents (clip_region, &state.scissor); clip = GRAPHENE_RECT_INIT(state.scissor.x, state.scissor.y, state.scissor.width, state.scissor.height); graphene_rect_scale (&clip, scale_x, scale_y, &clip); @@ -1310,13 +1281,13 @@ gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, state.modelview = NULL; graphene_matrix_init_ortho (&state.projection, - 0, self->viewport.size.width, - 0, self->viewport.size.height, + 0, viewport->size.width, + 0, viewport->size.height, 2 * ORTHO_NEAR_PLANE - ORTHO_FAR_PLANE, ORTHO_FAR_PLANE); - graphene_vec2_init_from_vec2 (&state.scale, &self->scale); - state.offset = GRAPHENE_POINT_INIT (-self->viewport.origin.x * scale_x, - -self->viewport.origin.y * scale_y); + graphene_vec2_init_from_vec2 (&state.scale, scale); + state.offset = GRAPHENE_POINT_INIT (-viewport->origin.x * scale_x, + -viewport->origin.y * scale_y); gsk_vulkan_render_pass_append_scissor (render, node, &state); gsk_vulkan_render_pass_append_push_constants (render, node, &state); diff --git a/gsk/vulkan/gskvulkanrenderpassop.c b/gsk/vulkan/gskvulkanrenderpassop.c index a85469cd8e..db48b5c0dc 100644 --- a/gsk/vulkan/gskvulkanrenderpassop.c +++ b/gsk/vulkan/gskvulkanrenderpassop.c @@ -264,16 +264,15 @@ gsk_vulkan_render_pass_op (GskVulkanRender *render, cairo_region_get_extents (clip, &self->area); self->viewport_size = viewport->size; - self->render_pass = gsk_vulkan_render_pass_new (context, - render, - self->image, - scale, - viewport, - clip, - node); + self->render_pass = gsk_vulkan_render_pass_new (context); /* This invalidates the self pointer */ - gsk_vulkan_render_pass_add (self->render_pass, render, node); + gsk_vulkan_render_pass_add (self->render_pass, + render, + scale, + viewport, + clip, + node); end = (GskVulkanRenderPassEndOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_RENDER_PASS_END_OP_CLASS); diff --git a/gsk/vulkan/gskvulkanrenderpassprivate.h b/gsk/vulkan/gskvulkanrenderpassprivate.h index 08505e8b62..c7486bec05 100644 --- a/gsk/vulkan/gskvulkanrenderpassprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassprivate.h @@ -10,18 +10,15 @@ G_BEGIN_DECLS -GskVulkanRenderPass * gsk_vulkan_render_pass_new (GdkVulkanContext *context, - GskVulkanRender *render, - GskVulkanImage *target, - const graphene_vec2_t *scale, - const graphene_rect_t *viewport, - cairo_region_t *clip, - GskRenderNode *node); +GskVulkanRenderPass * gsk_vulkan_render_pass_new (GdkVulkanContext *context); void gsk_vulkan_render_pass_free (GskVulkanRenderPass *self); void gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, GskVulkanRender *render, + const graphene_vec2_t *scale, + const graphene_rect_t *viewport, + cairo_region_t *clip, GskRenderNode *node); G_END_DECLS From 492507af1193e815ad1dfc1c49175131acb815e0 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 00:00:34 +0200 Subject: [PATCH 07/14] vulkan: Stop keeping the context around These days, we can query it with gsk_vulkan_render_get_context(). Makes quite a few functions require one less argument. And it also makes the GskVulkanRenderPass empty. Gotta figure out what to do with it. --- gsk/vulkan/gskvulkanrender.c | 1 - gsk/vulkan/gskvulkanrenderpass.c | 17 +++++------------ gsk/vulkan/gskvulkanrenderpassop.c | 7 +++---- gsk/vulkan/gskvulkanrenderpassopprivate.h | 2 -- gsk/vulkan/gskvulkanrenderpassprivate.h | 2 +- gsk/vulkan/gskvulkanuploadop.c | 6 ++---- gsk/vulkan/gskvulkanuploadopprivate.h | 2 -- 7 files changed, 11 insertions(+), 26 deletions(-) diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index 7bb0781e54..63e15ecc01 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -496,7 +496,6 @@ gsk_vulkan_render_add_node (GskVulkanRender *self, graphene_vec2_init (&scale, self->scale, self->scale); gsk_vulkan_render_pass_op (self, - self->vulkan, g_object_ref (self->target), self->clip, &scale, diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index a6acd0a1c0..d9d15932f2 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -42,7 +42,7 @@ typedef struct _GskVulkanParseState GskVulkanParseState; struct _GskVulkanRenderPass { - GdkVulkanContext *vulkan; + int empty; }; struct _GskVulkanParseState @@ -56,12 +56,11 @@ struct _GskVulkanParseState }; GskVulkanRenderPass * -gsk_vulkan_render_pass_new (GdkVulkanContext *context) +gsk_vulkan_render_pass_new (void) { GskVulkanRenderPass *self; self = g_new0 (GskVulkanRenderPass, 1); - self->vulkan = g_object_ref (context); return self; } @@ -69,8 +68,6 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context) void gsk_vulkan_render_pass_free (GskVulkanRenderPass *self) { - g_object_unref (self->vulkan); - g_free (self); } @@ -161,7 +158,7 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, result = gsk_vulkan_renderer_get_texture_image (renderer, texture); if (result == NULL) { - result = gsk_vulkan_upload_texture_op (render, self->vulkan, texture); + result = gsk_vulkan_upload_texture_op (render, texture); gsk_vulkan_renderer_add_texture_image (renderer, texture, result); } @@ -180,7 +177,6 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, return NULL; result = gsk_vulkan_upload_cairo_op (render, - self->vulkan, node, &state->scale, &clipped); @@ -205,7 +201,6 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, *tex_bounds = clipped; result = gsk_vulkan_render_pass_op_offscreen (render, - self->vulkan, &state->scale, &clipped, node); @@ -237,7 +232,6 @@ gsk_vulkan_render_pass_add_fallback_node (GskVulkanRenderPass *self, return TRUE; image = gsk_vulkan_upload_cairo_op (render, - self->vulkan, node, &state->scale, &clipped); @@ -439,7 +433,7 @@ gsk_vulkan_render_pass_add_texture_node (GskVulkanRenderPass *self, image = gsk_vulkan_renderer_get_texture_image (renderer, texture); if (image == NULL) { - image = gsk_vulkan_upload_texture_op (render, self->vulkan, texture); + image = gsk_vulkan_upload_texture_op (render, texture); gsk_vulkan_renderer_add_texture_image (renderer, texture, image); } @@ -482,7 +476,7 @@ gsk_vulkan_render_pass_add_texture_scale_node (GskVulkanRenderPass *self, image = gsk_vulkan_renderer_get_texture_image (renderer, texture); if (image == NULL) { - image = gsk_vulkan_upload_texture_op (render, self->vulkan, texture); + image = gsk_vulkan_upload_texture_op (render, texture); gsk_vulkan_renderer_add_texture_image (renderer, texture, image); } @@ -869,7 +863,6 @@ gsk_vulkan_render_pass_add_repeat_node (GskVulkanRenderPass *self, return TRUE; image = gsk_vulkan_render_pass_op_offscreen (render, - self->vulkan, &state->scale, child_bounds, gsk_repeat_node_get_child (node)); diff --git a/gsk/vulkan/gskvulkanrenderpassop.c b/gsk/vulkan/gskvulkanrenderpassop.c index db48b5c0dc..35c20e83e1 100644 --- a/gsk/vulkan/gskvulkanrenderpassop.c +++ b/gsk/vulkan/gskvulkanrenderpassop.c @@ -244,7 +244,6 @@ static const GskVulkanOpClass GSK_VULKAN_RENDER_PASS_END_OP_CLASS = { void gsk_vulkan_render_pass_op (GskVulkanRender *render, - GdkVulkanContext *context, GskVulkanImage *image, cairo_region_t *clip, const graphene_vec2_t *scale, @@ -264,7 +263,7 @@ gsk_vulkan_render_pass_op (GskVulkanRender *render, cairo_region_get_extents (clip, &self->area); self->viewport_size = viewport->size; - self->render_pass = gsk_vulkan_render_pass_new (context); + self->render_pass = gsk_vulkan_render_pass_new (); /* This invalidates the self pointer */ gsk_vulkan_render_pass_add (self->render_pass, @@ -282,11 +281,11 @@ gsk_vulkan_render_pass_op (GskVulkanRender *render, GskVulkanImage * gsk_vulkan_render_pass_op_offscreen (GskVulkanRender *render, - GdkVulkanContext *context, const graphene_vec2_t *scale, const graphene_rect_t *viewport, GskRenderNode *node) { + GdkVulkanContext *context; graphene_rect_t view; GskVulkanImage *image; cairo_region_t *clip; @@ -299,6 +298,7 @@ gsk_vulkan_render_pass_op_offscreen (GskVulkanRender *render, ceil (scale_x * viewport->size.width), ceil (scale_y * viewport->size.height)); + context = gsk_vulkan_render_get_context (render); image = gsk_vulkan_image_new_for_offscreen (context, gdk_vulkan_context_get_offscreen_format (context, gsk_render_node_get_preferred_depth (node)), @@ -311,7 +311,6 @@ gsk_vulkan_render_pass_op_offscreen (GskVulkanRender *render, }); gsk_vulkan_render_pass_op (render, - context, image, clip, scale, diff --git a/gsk/vulkan/gskvulkanrenderpassopprivate.h b/gsk/vulkan/gskvulkanrenderpassopprivate.h index 7765a9f211..85ab5b095b 100644 --- a/gsk/vulkan/gskvulkanrenderpassopprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassopprivate.h @@ -5,7 +5,6 @@ G_BEGIN_DECLS void gsk_vulkan_render_pass_op (GskVulkanRender *render, - GdkVulkanContext *context, GskVulkanImage *image, cairo_region_t *clip, const graphene_vec2_t *scale, @@ -14,7 +13,6 @@ void gsk_vulkan_render_pass_op (GskVulk VkImageLayout initial_layout, VkImageLayout final_layout); GskVulkanImage * gsk_vulkan_render_pass_op_offscreen (GskVulkanRender *render, - GdkVulkanContext *context, const graphene_vec2_t *scale, const graphene_rect_t *viewport, GskRenderNode *node); diff --git a/gsk/vulkan/gskvulkanrenderpassprivate.h b/gsk/vulkan/gskvulkanrenderpassprivate.h index c7486bec05..d554066ca0 100644 --- a/gsk/vulkan/gskvulkanrenderpassprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassprivate.h @@ -10,7 +10,7 @@ G_BEGIN_DECLS -GskVulkanRenderPass * gsk_vulkan_render_pass_new (GdkVulkanContext *context); +GskVulkanRenderPass * gsk_vulkan_render_pass_new (void); void gsk_vulkan_render_pass_free (GskVulkanRenderPass *self); diff --git a/gsk/vulkan/gskvulkanuploadop.c b/gsk/vulkan/gskvulkanuploadop.c index 7c7d6132f0..ea5388a6f0 100644 --- a/gsk/vulkan/gskvulkanuploadop.c +++ b/gsk/vulkan/gskvulkanuploadop.c @@ -214,7 +214,6 @@ static const GskVulkanOpClass GSK_VULKAN_UPLOAD_TEXTURE_OP_CLASS = { GskVulkanImage * gsk_vulkan_upload_texture_op (GskVulkanRender *render, - GdkVulkanContext *context, GdkTexture *texture) { GskVulkanUploadTextureOp *self; @@ -222,7 +221,7 @@ gsk_vulkan_upload_texture_op (GskVulkanRender *render, self = (GskVulkanUploadTextureOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_UPLOAD_TEXTURE_OP_CLASS); self->texture = g_object_ref (texture); - self->image = gsk_vulkan_image_new_for_upload (context, + self->image = gsk_vulkan_image_new_for_upload (gsk_vulkan_render_get_context (render), gdk_texture_get_format (texture), gdk_texture_get_width (texture), gdk_texture_get_height (texture)); @@ -327,7 +326,6 @@ static const GskVulkanOpClass GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS = { GskVulkanImage * gsk_vulkan_upload_cairo_op (GskVulkanRender *render, - GdkVulkanContext *context, GskRenderNode *node, const graphene_vec2_t *scale, const graphene_rect_t *viewport) @@ -337,7 +335,7 @@ gsk_vulkan_upload_cairo_op (GskVulkanRender *render, self = (GskVulkanUploadCairoOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS); self->node = gsk_render_node_ref (node); - self->image = gsk_vulkan_image_new_for_upload (context, + self->image = gsk_vulkan_image_new_for_upload (gsk_vulkan_render_get_context (render), GDK_MEMORY_DEFAULT, ceil (graphene_vec2_get_x (scale) * viewport->size.width), ceil (graphene_vec2_get_y (scale) * viewport->size.height)); diff --git a/gsk/vulkan/gskvulkanuploadopprivate.h b/gsk/vulkan/gskvulkanuploadopprivate.h index 675337e032..cffe2c2443 100644 --- a/gsk/vulkan/gskvulkanuploadopprivate.h +++ b/gsk/vulkan/gskvulkanuploadopprivate.h @@ -5,11 +5,9 @@ G_BEGIN_DECLS GskVulkanImage * gsk_vulkan_upload_texture_op (GskVulkanRender *render, - GdkVulkanContext *context, GdkTexture *texture); GskVulkanImage * gsk_vulkan_upload_cairo_op (GskVulkanRender *render, - GdkVulkanContext *context, GskRenderNode *node, const graphene_vec2_t *scale, const graphene_rect_t *viewport); From 11a06462819fe8b03f1930accd78e9fa436c562b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 00:08:56 +0200 Subject: [PATCH 08/14] vulkan: Pass rectangles where no regions are used The API was using regions because it always had. But all the code ever did was get the extents of the region. So simplify everything by using rectangles everywhere. --- gsk/vulkan/gskvulkanrender.c | 4 +++- gsk/vulkan/gskvulkanrenderpass.c | 13 ++++++------- gsk/vulkan/gskvulkanrenderpassop.c | 21 ++++++++------------- gsk/vulkan/gskvulkanrenderpassopprivate.h | 2 +- gsk/vulkan/gskvulkanrenderpassprivate.h | 2 +- 5 files changed, 19 insertions(+), 23 deletions(-) diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index 63e15ecc01..e0140fa0c9 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -492,12 +492,14 @@ gsk_vulkan_render_add_node (GskVulkanRender *self, gpointer download_data) { graphene_vec2_t scale; + cairo_rectangle_int_t extents; graphene_vec2_init (&scale, self->scale, self->scale); + cairo_region_get_extents (self->clip, &extents); gsk_vulkan_render_pass_op (self, g_object_ref (self->target), - self->clip, + &extents, &scale, &self->viewport, node, diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index d9d15932f2..476d533daf 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -1257,20 +1257,19 @@ gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, GskVulkanRender *render, const graphene_vec2_t *scale, const graphene_rect_t *viewport, - cairo_region_t *clip_region, + cairo_rectangle_int_t *clip, GskRenderNode *node) { GskVulkanParseState state; - graphene_rect_t clip; + graphene_rect_t scaled_clip; float scale_x, scale_y; scale_x = 1 / graphene_vec2_get_x (scale); scale_y = 1 / graphene_vec2_get_y (scale); - cairo_region_get_extents (clip_region, &state.scissor); - clip = GRAPHENE_RECT_INIT(state.scissor.x, state.scissor.y, - state.scissor.width, state.scissor.height); - graphene_rect_scale (&clip, scale_x, scale_y, &clip); - gsk_vulkan_clip_init_empty (&state.clip, &clip); + state.scissor = *clip; + scaled_clip = GRAPHENE_RECT_INIT(clip->x, clip->y, clip->width, clip->height); + graphene_rect_scale (&scaled_clip, scale_x, scale_y, &scaled_clip); + gsk_vulkan_clip_init_empty (&state.clip, &scaled_clip); state.modelview = NULL; graphene_matrix_init_ortho (&state.projection, diff --git a/gsk/vulkan/gskvulkanrenderpassop.c b/gsk/vulkan/gskvulkanrenderpassop.c index 35c20e83e1..ab6d192eb2 100644 --- a/gsk/vulkan/gskvulkanrenderpassop.c +++ b/gsk/vulkan/gskvulkanrenderpassop.c @@ -245,7 +245,7 @@ static const GskVulkanOpClass GSK_VULKAN_RENDER_PASS_END_OP_CLASS = { void gsk_vulkan_render_pass_op (GskVulkanRender *render, GskVulkanImage *image, - cairo_region_t *clip, + cairo_rectangle_int_t *area, const graphene_vec2_t *scale, const graphene_rect_t *viewport, GskRenderNode *node, @@ -260,7 +260,7 @@ gsk_vulkan_render_pass_op (GskVulkanRender *render, self->image = image; self->initial_layout = initial_layout; self->final_layout = final_layout; - cairo_region_get_extents (clip, &self->area); + self->area = *area; self->viewport_size = viewport->size; self->render_pass = gsk_vulkan_render_pass_new (); @@ -270,7 +270,7 @@ gsk_vulkan_render_pass_op (GskVulkanRender *render, render, scale, viewport, - clip, + area, node); end = (GskVulkanRenderPassEndOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_RENDER_PASS_END_OP_CLASS); @@ -288,7 +288,6 @@ gsk_vulkan_render_pass_op_offscreen (GskVulkanRender *render, GdkVulkanContext *context; graphene_rect_t view; GskVulkanImage *image; - cairo_region_t *clip; float scale_x, scale_y; scale_x = graphene_vec2_get_x (scale); @@ -304,22 +303,18 @@ gsk_vulkan_render_pass_op_offscreen (GskVulkanRender *render, gsk_render_node_get_preferred_depth (node)), view.size.width, view.size.height); - clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) { - 0, 0, - gsk_vulkan_image_get_width (image), - gsk_vulkan_image_get_height (image) - }); - gsk_vulkan_render_pass_op (render, image, - clip, + &(cairo_rectangle_int_t) { + 0, 0, + gsk_vulkan_image_get_width (image), + gsk_vulkan_image_get_height (image) + }, scale, &view, node, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); - cairo_region_destroy (clip); - return image; } diff --git a/gsk/vulkan/gskvulkanrenderpassopprivate.h b/gsk/vulkan/gskvulkanrenderpassopprivate.h index 85ab5b095b..09aa34b86e 100644 --- a/gsk/vulkan/gskvulkanrenderpassopprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassopprivate.h @@ -6,7 +6,7 @@ G_BEGIN_DECLS void gsk_vulkan_render_pass_op (GskVulkanRender *render, GskVulkanImage *image, - cairo_region_t *clip, + cairo_rectangle_int_t *area, const graphene_vec2_t *scale, const graphene_rect_t *viewport, GskRenderNode *node, diff --git a/gsk/vulkan/gskvulkanrenderpassprivate.h b/gsk/vulkan/gskvulkanrenderpassprivate.h index d554066ca0..62b31ee143 100644 --- a/gsk/vulkan/gskvulkanrenderpassprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassprivate.h @@ -18,7 +18,7 @@ void gsk_vulkan_render_pass_add (GskVulk GskVulkanRender *render, const graphene_vec2_t *scale, const graphene_rect_t *viewport, - cairo_region_t *clip, + cairo_rectangle_int_t *clip, GskRenderNode *node); G_END_DECLS From 4311d17cb172ec3545474c04ec7ca681fec5d179 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 00:15:29 +0200 Subject: [PATCH 09/14] vulkan: Don't store the renderpass It's only used when parsing. --- gsk/vulkan/gskvulkanrenderpassop.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/gsk/vulkan/gskvulkanrenderpassop.c b/gsk/vulkan/gskvulkanrenderpassop.c index ab6d192eb2..19bc14d10e 100644 --- a/gsk/vulkan/gskvulkanrenderpassop.c +++ b/gsk/vulkan/gskvulkanrenderpassop.c @@ -15,7 +15,6 @@ struct _GskVulkanRenderPassOp GskVulkanOp op; GskVulkanImage *image; - GskVulkanRenderPass *render_pass; cairo_rectangle_int_t area; graphene_size_t viewport_size; @@ -29,7 +28,6 @@ gsk_vulkan_render_pass_op_finish (GskVulkanOp *op) GskVulkanRenderPassOp *self = (GskVulkanRenderPassOp *) op; g_object_unref (self->image); - gsk_vulkan_render_pass_free (self->render_pass); } static void @@ -254,6 +252,7 @@ gsk_vulkan_render_pass_op (GskVulkanRender *render, { GskVulkanRenderPassOp *self; GskVulkanRenderPassEndOp *end; + GskVulkanRenderPass *render_pass; self = (GskVulkanRenderPassOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_RENDER_PASS_OP_CLASS); @@ -263,15 +262,15 @@ gsk_vulkan_render_pass_op (GskVulkanRender *render, self->area = *area; self->viewport_size = viewport->size; - self->render_pass = gsk_vulkan_render_pass_new (); - + render_pass = gsk_vulkan_render_pass_new (); /* This invalidates the self pointer */ - gsk_vulkan_render_pass_add (self->render_pass, + gsk_vulkan_render_pass_add (render_pass, render, scale, viewport, area, node); + gsk_vulkan_render_pass_free (render_pass); end = (GskVulkanRenderPassEndOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_RENDER_PASS_END_OP_CLASS); From cd84f5a56ef60cffb38a8c6c3b7d9267f756d175 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 00:31:48 +0200 Subject: [PATCH 10/14] vulkan: Split renderpass op into 2 Add an explicit begin() and an end() op. For now, this looks like overkill, but it allows doing renderpasses with custom ops that are not meant to render a rendernode. Examples for this are pre/postprocessing passes or 2-pass blur. --- gsk/vulkan/gskvulkanrender.c | 29 +++++--- gsk/vulkan/gskvulkanrenderpassop.c | 82 +++++++++++++---------- gsk/vulkan/gskvulkanrenderpassopprivate.h | 13 ++-- 3 files changed, 75 insertions(+), 49 deletions(-) diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index e0140fa0c9..b84810cab2 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -491,20 +491,33 @@ gsk_vulkan_render_add_node (GskVulkanRender *self, GskVulkanDownloadFunc download_func, gpointer download_data) { + GskVulkanRenderPass *render_pass; graphene_vec2_t scale; cairo_rectangle_int_t extents; graphene_vec2_init (&scale, self->scale, self->scale); cairo_region_get_extents (self->clip, &extents); - gsk_vulkan_render_pass_op (self, - g_object_ref (self->target), - &extents, - &scale, - &self->viewport, - node, - VK_IMAGE_LAYOUT_UNDEFINED, - VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + gsk_vulkan_render_pass_begin_op (self, + g_object_ref (self->target), + &extents, + &self->viewport.size, + VK_IMAGE_LAYOUT_UNDEFINED, + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + + + render_pass = gsk_vulkan_render_pass_new (); + gsk_vulkan_render_pass_add (render_pass, + self, + &scale, + &self->viewport, + &extents, + node); + gsk_vulkan_render_pass_free (render_pass); + + gsk_vulkan_render_pass_end_op (self, + g_object_ref (self->target), + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); if (download_func) gsk_vulkan_download_op (self, self->target, download_func, download_data); diff --git a/gsk/vulkan/gskvulkanrenderpassop.c b/gsk/vulkan/gskvulkanrenderpassop.c index 19bc14d10e..0a785984d2 100644 --- a/gsk/vulkan/gskvulkanrenderpassop.c +++ b/gsk/vulkan/gskvulkanrenderpassop.c @@ -241,41 +241,35 @@ static const GskVulkanOpClass GSK_VULKAN_RENDER_PASS_END_OP_CLASS = { }; void -gsk_vulkan_render_pass_op (GskVulkanRender *render, - GskVulkanImage *image, - cairo_rectangle_int_t *area, - const graphene_vec2_t *scale, - const graphene_rect_t *viewport, - GskRenderNode *node, - VkImageLayout initial_layout, - VkImageLayout final_layout) +gsk_vulkan_render_pass_begin_op (GskVulkanRender *render, + GskVulkanImage *image, + const cairo_rectangle_int_t *area, + const graphene_size_t *viewport_size, + VkImageLayout initial_layout, + VkImageLayout final_layout) { GskVulkanRenderPassOp *self; - GskVulkanRenderPassEndOp *end; - GskVulkanRenderPass *render_pass; self = (GskVulkanRenderPassOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_RENDER_PASS_OP_CLASS); - self->image = image; + self->image = g_object_ref (image); self->initial_layout = initial_layout; self->final_layout = final_layout; self->area = *area; - self->viewport_size = viewport->size; + self->viewport_size = *viewport_size; +} - render_pass = gsk_vulkan_render_pass_new (); - /* This invalidates the self pointer */ - gsk_vulkan_render_pass_add (render_pass, - render, - scale, - viewport, - area, - node); - gsk_vulkan_render_pass_free (render_pass); +void +gsk_vulkan_render_pass_end_op (GskVulkanRender *render, + GskVulkanImage *image, + VkImageLayout final_layout) +{ + GskVulkanRenderPassEndOp *self; - end = (GskVulkanRenderPassEndOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_RENDER_PASS_END_OP_CLASS); + self = (GskVulkanRenderPassEndOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_RENDER_PASS_END_OP_CLASS); - end->image = g_object_ref (image); - end->final_layout = final_layout; + self->image = g_object_ref (image); + self->final_layout = final_layout; } GskVulkanImage * @@ -284,6 +278,7 @@ gsk_vulkan_render_pass_op_offscreen (GskVulkanRender *render, const graphene_rect_t *viewport, GskRenderNode *node) { + GskVulkanRenderPass *render_pass; GdkVulkanContext *context; graphene_rect_t view; GskVulkanImage *image; @@ -302,18 +297,33 @@ gsk_vulkan_render_pass_op_offscreen (GskVulkanRender *render, gsk_render_node_get_preferred_depth (node)), view.size.width, view.size.height); - gsk_vulkan_render_pass_op (render, - image, - &(cairo_rectangle_int_t) { - 0, 0, - gsk_vulkan_image_get_width (image), - gsk_vulkan_image_get_height (image) - }, - scale, - &view, - node, - VK_IMAGE_LAYOUT_UNDEFINED, - VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + gsk_vulkan_render_pass_begin_op (render, + image, + &(cairo_rectangle_int_t) { + 0, 0, + gsk_vulkan_image_get_width (image), + gsk_vulkan_image_get_height (image) + }, + &viewport->size, + VK_IMAGE_LAYOUT_UNDEFINED, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + + render_pass = gsk_vulkan_render_pass_new (); + gsk_vulkan_render_pass_add (render_pass, + render, + scale, + viewport, + &(cairo_rectangle_int_t) { + 0, 0, + gsk_vulkan_image_get_width (image), + gsk_vulkan_image_get_height (image) + }, + node); + gsk_vulkan_render_pass_free (render_pass); + + gsk_vulkan_render_pass_end_op (render, + image, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); return image; } diff --git a/gsk/vulkan/gskvulkanrenderpassopprivate.h b/gsk/vulkan/gskvulkanrenderpassopprivate.h index 09aa34b86e..ad7b90ddc2 100644 --- a/gsk/vulkan/gskvulkanrenderpassopprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassopprivate.h @@ -4,14 +4,17 @@ G_BEGIN_DECLS -void gsk_vulkan_render_pass_op (GskVulkanRender *render, + +void gsk_vulkan_render_pass_begin_op (GskVulkanRender *render, GskVulkanImage *image, - cairo_rectangle_int_t *area, - const graphene_vec2_t *scale, - const graphene_rect_t *viewport, - GskRenderNode *node, + const cairo_rectangle_int_t *area, + const graphene_size_t *viewport_size, VkImageLayout initial_layout, VkImageLayout final_layout); +void gsk_vulkan_render_pass_end_op (GskVulkanRender *render, + GskVulkanImage *image, + VkImageLayout final_layout); + GskVulkanImage * gsk_vulkan_render_pass_op_offscreen (GskVulkanRender *render, const graphene_vec2_t *scale, const graphene_rect_t *viewport, From 65224f4533c90efe37735809f878ed39810841f8 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 06:13:28 +0200 Subject: [PATCH 11/14] vulkan: Change fallback formats Always fall back to a format that isn't swizzled. That way it can be used as a target format for rendering. --- gsk/vulkan/gskvulkanimage.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/gsk/vulkan/gskvulkanimage.c b/gsk/vulkan/gskvulkanimage.c index c9eff3f501..80a0502094 100644 --- a/gsk/vulkan/gskvulkanimage.c +++ b/gsk/vulkan/gskvulkanimage.c @@ -262,53 +262,53 @@ gsk_memory_format_get_fallback (GdkMemoryFormat format) switch (format) { case GDK_MEMORY_B8G8R8A8_PREMULTIPLIED: - return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; case GDK_MEMORY_A8R8G8B8_PREMULTIPLIED: - return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; case GDK_MEMORY_R8G8B8A8_PREMULTIPLIED: - return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; case GDK_MEMORY_B8G8R8A8: - return GDK_MEMORY_B8G8R8A8_PREMULTIPLIED; case GDK_MEMORY_A8R8G8B8: - return GDK_MEMORY_A8R8G8B8_PREMULTIPLIED; case GDK_MEMORY_R8G8B8A8: - return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; case GDK_MEMORY_A8B8G8R8: - return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; case GDK_MEMORY_R8G8B8: return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; + case GDK_MEMORY_B8G8R8: return GDK_MEMORY_R8G8B8; - case GDK_MEMORY_R16G16B16: - return GDK_MEMORY_R16G16B16A16_PREMULTIPLIED; + case GDK_MEMORY_R16G16B16A16_PREMULTIPLIED: return GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED; + + case GDK_MEMORY_R16G16B16: case GDK_MEMORY_R16G16B16A16: return GDK_MEMORY_R16G16B16A16_PREMULTIPLIED; - case GDK_MEMORY_R16G16B16_FLOAT: - return GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED; + case GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED: return GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED; + + case GDK_MEMORY_R16G16B16_FLOAT: case GDK_MEMORY_R16G16B16A16_FLOAT: return GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED; - case GDK_MEMORY_R32G32B32_FLOAT: - return GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED; + case GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED: return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; + + case GDK_MEMORY_R32G32B32_FLOAT: case GDK_MEMORY_R32G32B32A32_FLOAT: return GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED; + case GDK_MEMORY_G8A8_PREMULTIPLIED: - return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; case GDK_MEMORY_G8A8: - return GDK_MEMORY_G8A8_PREMULTIPLIED; + return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; + case GDK_MEMORY_G8: return GDK_MEMORY_R8G8B8; + case GDK_MEMORY_G16A16_PREMULTIPLIED: - return GDK_MEMORY_R16G16B16A16_PREMULTIPLIED; case GDK_MEMORY_G16A16: - return GDK_MEMORY_G16A16_PREMULTIPLIED; + return GDK_MEMORY_R16G16B16A16_PREMULTIPLIED; + case GDK_MEMORY_G16: return GDK_MEMORY_R16G16B16; + case GDK_MEMORY_A8: return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED; case GDK_MEMORY_A16: From 4d9e7d30b00fb0bf33968781276533c178e38ab0 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 06:14:55 +0200 Subject: [PATCH 12/14] vulkan: Add premultiply step to texture upload When a GdkMemoryFormat is not supported natively and there's postprocessing required, add a way to mark a VulkanImage as such via the new postprocess flags. Also allow texting such iamges only with new_for_upload() and detect when that is the case and then run a postprocessing step that converts that image to a suitable format. This is done with a new "convert" shader/op. This now supports all formats natively, no conversions happen on the CPU anymore (unless the GPU is old). --- gsk/meson.build | 1 + gsk/vulkan/gskvulkanconvertop.c | 100 +++++++++++++ gsk/vulkan/gskvulkanconvertopprivate.h | 16 +++ gsk/vulkan/gskvulkanimage.c | 187 ++++++++++++++++--------- gsk/vulkan/gskvulkanimageprivate.h | 8 ++ gsk/vulkan/gskvulkanrenderpass.c | 53 ++++++- gsk/vulkan/gskvulkanuploadop.c | 1 + gsk/vulkan/resources/convert.frag | 29 ++++ gsk/vulkan/resources/convert.vert | 26 ++++ gsk/vulkan/resources/meson.build | 2 + 10 files changed, 354 insertions(+), 69 deletions(-) create mode 100644 gsk/vulkan/gskvulkanconvertop.c create mode 100644 gsk/vulkan/gskvulkanconvertopprivate.h create mode 100644 gsk/vulkan/resources/convert.frag create mode 100644 gsk/vulkan/resources/convert.vert diff --git a/gsk/meson.build b/gsk/meson.build index 5a86498679..489024572a 100644 --- a/gsk/meson.build +++ b/gsk/meson.build @@ -116,6 +116,7 @@ if have_vulkan 'vulkan/gskvulkancolormatrixop.c', 'vulkan/gskvulkancolorop.c', 'vulkan/gskvulkancommandpool.c', + 'vulkan/gskvulkanconvertop.c', 'vulkan/gskvulkancrossfadeop.c', 'vulkan/gskvulkandownloadop.c', 'vulkan/gskvulkanglyphcache.c', diff --git a/gsk/vulkan/gskvulkanconvertop.c b/gsk/vulkan/gskvulkanconvertop.c new file mode 100644 index 0000000000..f1280e4345 --- /dev/null +++ b/gsk/vulkan/gskvulkanconvertop.c @@ -0,0 +1,100 @@ +#include "config.h" + +#include "gskvulkanconvertopprivate.h" + +#include "gskvulkanprivate.h" +#include "gskvulkanshaderopprivate.h" + +#include "vulkan/resources/convert.vert.h" + +typedef struct _GskVulkanConvertOp GskVulkanConvertOp; + +struct _GskVulkanConvertOp +{ + GskVulkanShaderOp op; + + graphene_rect_t rect; + graphene_rect_t tex_rect; + + guint32 image_descriptor; +}; + +static void +gsk_vulkan_convert_op_print (GskVulkanOp *op, + GString *string, + guint indent) +{ + GskVulkanConvertOp *self = (GskVulkanConvertOp *) op; + GskVulkanShaderOp *shader = (GskVulkanShaderOp *) op; + + print_indent (string, indent); + print_rect (string, &self->rect); + g_string_append (string, "convert "); + print_image (string, shader->images[0]); + print_newline (string); +} + +static void +gsk_vulkan_convert_op_collect_vertex_data (GskVulkanOp *op, + guchar *data) +{ + GskVulkanConvertOp *self = (GskVulkanConvertOp *) op; + GskVulkanConvertInstance *instance = (GskVulkanConvertInstance *) (data + ((GskVulkanShaderOp *) op)->vertex_offset); + GskVulkanShaderOp *shader = (GskVulkanShaderOp *) op; + + instance->rect[0] = self->rect.origin.x; + instance->rect[1] = self->rect.origin.y; + instance->rect[2] = self->rect.size.width; + instance->rect[3] = self->rect.size.height; + instance->tex_rect[0] = self->tex_rect.origin.x; + instance->tex_rect[1] = self->tex_rect.origin.y; + instance->tex_rect[2] = self->tex_rect.size.width; + instance->tex_rect[3] = self->tex_rect.size.height; + instance->tex_id = self->image_descriptor; + instance->postprocess = gsk_vulkan_image_get_postprocess (shader->images[0]); +} + +static void +gsk_vulkan_convert_op_reserve_descriptor_sets (GskVulkanOp *op, + GskVulkanRender *render) +{ + GskVulkanConvertOp *self = (GskVulkanConvertOp *) op; + GskVulkanShaderOp *shader = (GskVulkanShaderOp *) op; + + self->image_descriptor = gsk_vulkan_render_get_image_descriptor (render, shader->images[0], GSK_VULKAN_SAMPLER_NEAREST); +} + +static const GskVulkanShaderOpClass GSK_VULKAN_CONVERT_OP_CLASS = { + { + GSK_VULKAN_OP_SIZE (GskVulkanConvertOp), + GSK_VULKAN_STAGE_SHADER, + gsk_vulkan_shader_op_finish, + gsk_vulkan_convert_op_print, + gsk_vulkan_shader_op_count_vertex_data, + gsk_vulkan_convert_op_collect_vertex_data, + gsk_vulkan_convert_op_reserve_descriptor_sets, + gsk_vulkan_shader_op_command + }, + "convert", + 1, + &gsk_vulkan_convert_info, +}; + +void +gsk_vulkan_convert_op (GskVulkanRender *render, + GskVulkanShaderClip clip, + GskVulkanImage *image, + const graphene_rect_t *rect, + const graphene_point_t *offset, + const graphene_rect_t *tex_rect) +{ + GskVulkanConvertOp *self; + + self = (GskVulkanConvertOp *) gsk_vulkan_shader_op_alloc (render, + &GSK_VULKAN_CONVERT_OP_CLASS, + clip, + &image); + + graphene_rect_offset_r (rect, offset->x, offset->y, &self->rect); + gsk_vulkan_normalize_tex_coords (&self->tex_rect, rect, tex_rect); +} diff --git a/gsk/vulkan/gskvulkanconvertopprivate.h b/gsk/vulkan/gskvulkanconvertopprivate.h new file mode 100644 index 0000000000..d52fb4c2dd --- /dev/null +++ b/gsk/vulkan/gskvulkanconvertopprivate.h @@ -0,0 +1,16 @@ +#pragma once + +#include "gskvulkanopprivate.h" + +G_BEGIN_DECLS + +void gsk_vulkan_convert_op (GskVulkanRender *render, + GskVulkanShaderClip clip, + GskVulkanImage *image, + const graphene_rect_t *rect, + const graphene_point_t *offset, + const graphene_rect_t *tex_rect); + + +G_END_DECLS + diff --git a/gsk/vulkan/gskvulkanimage.c b/gsk/vulkan/gskvulkanimage.c index 80a0502094..b9e744538b 100644 --- a/gsk/vulkan/gskvulkanimage.c +++ b/gsk/vulkan/gskvulkanimage.c @@ -24,6 +24,7 @@ struct _GskVulkanImage VkImage vk_image; VkImageView vk_image_view; VkFramebuffer vk_framebuffer; + GskVulkanImagePostprocess postprocess; VkPipelineStageFlags vk_pipeline_stage; VkImageLayout vk_image_layout; @@ -40,6 +41,7 @@ struct _GskMemoryFormatInfo { VkFormat format; VkComponentMapping components; + GskVulkanImagePostprocess postprocess; }; static const GskMemoryFormatInfo * @@ -52,8 +54,8 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_B8G8R8A8_PREMULTIPLIED: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_B8G8R8A8_UNORM, DEFAULT_SWIZZLE }, - { VK_FORMAT_R8G8B8A8_UNORM, SWIZZLE(B, G, R, A) }, + { VK_FORMAT_B8G8R8A8_UNORM, DEFAULT_SWIZZLE, 0 }, + { VK_FORMAT_R8G8B8A8_UNORM, SWIZZLE(B, G, R, A), 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -62,7 +64,7 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_A8R8G8B8_PREMULTIPLIED: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R8G8B8A8_UNORM, SWIZZLE(G, B, A, R) }, + { VK_FORMAT_R8G8B8A8_UNORM, SWIZZLE(G, B, A, R), 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -71,23 +73,53 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_R8G8B8A8_PREMULTIPLIED: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R8G8B8A8_UNORM, DEFAULT_SWIZZLE }, + { VK_FORMAT_R8G8B8A8_UNORM, DEFAULT_SWIZZLE, 0 }, { VK_FORMAT_UNDEFINED } }; return info; } -#if 0 - GDK_MEMORY_B8G8R8A8, - GDK_MEMORY_A8R8G8B8, - GDK_MEMORY_R8G8B8A8, - GDK_MEMORY_A8B8G8R8, -#endif + case GDK_MEMORY_B8G8R8A8: + { + static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_B8G8R8A8_UNORM, DEFAULT_SWIZZLE, GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_R8G8B8A8_UNORM, SWIZZLE(B, G, R, A), GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_UNDEFINED } + }; + return info; + } + + case GDK_MEMORY_A8R8G8B8: + { + static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_R8G8B8A8_UNORM, SWIZZLE(G, B, A, R), GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_UNDEFINED } + }; + return info; + } + + case GDK_MEMORY_R8G8B8A8: + { + static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_R8G8B8A8_UNORM, DEFAULT_SWIZZLE, GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_UNDEFINED } + }; + return info; + } + + case GDK_MEMORY_A8B8G8R8: + { + static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_R8G8B8A8_UNORM, SWIZZLE(A, B, G, R), GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_UNDEFINED } + }; + return info; + } case GDK_MEMORY_R8G8B8: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R8G8B8_UNORM, DEFAULT_SWIZZLE }, + { VK_FORMAT_R8G8B8_UNORM, DEFAULT_SWIZZLE, 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -96,8 +128,8 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_B8G8R8: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_B8G8R8_UNORM, DEFAULT_SWIZZLE }, - { VK_FORMAT_R8G8B8_UNORM, SWIZZLE(B, G, R, A) }, + { VK_FORMAT_B8G8R8_UNORM, DEFAULT_SWIZZLE, 0 }, + { VK_FORMAT_R8G8B8_UNORM, SWIZZLE(B, G, R, A), 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -106,7 +138,7 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_R16G16B16: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R16G16B16_UNORM, DEFAULT_SWIZZLE }, + { VK_FORMAT_R16G16B16_UNORM, DEFAULT_SWIZZLE, 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -115,20 +147,25 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_R16G16B16A16_PREMULTIPLIED: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R16G16B16A16_UNORM, DEFAULT_SWIZZLE }, + { VK_FORMAT_R16G16B16A16_UNORM, DEFAULT_SWIZZLE, 0 }, { VK_FORMAT_UNDEFINED } }; return info; } -#if 0 - GDK_MEMORY_R16G16B16A16, -#endif + case GDK_MEMORY_R16G16B16A16: + { + static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_R16G16B16A16_UNORM, DEFAULT_SWIZZLE, GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_UNDEFINED } + }; + return info; + } case GDK_MEMORY_R16G16B16_FLOAT: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R16G16B16_SFLOAT, DEFAULT_SWIZZLE }, + { VK_FORMAT_R16G16B16_SFLOAT, DEFAULT_SWIZZLE, 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -137,20 +174,25 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R16G16B16A16_SFLOAT, DEFAULT_SWIZZLE }, + { VK_FORMAT_R16G16B16A16_SFLOAT, DEFAULT_SWIZZLE, 0 }, { VK_FORMAT_UNDEFINED } }; return info; } -#if 0 - GDK_MEMORY_R16G16B16A16_FLOAT, -#endif + case GDK_MEMORY_R16G16B16A16_FLOAT: + { + static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_R16G16B16A16_SFLOAT, DEFAULT_SWIZZLE, GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_UNDEFINED } + }; + return info; + } case GDK_MEMORY_R32G32B32_FLOAT: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R32G32B32_SFLOAT, DEFAULT_SWIZZLE }, + { VK_FORMAT_R32G32B32_SFLOAT, DEFAULT_SWIZZLE, 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -159,33 +201,43 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R32G32B32A32_SFLOAT, DEFAULT_SWIZZLE }, + { VK_FORMAT_R32G32B32A32_SFLOAT, DEFAULT_SWIZZLE, 0 }, { VK_FORMAT_UNDEFINED } }; return info; } -#if 0 - GDK_MEMORY_R32G32B32A32_FLOAT, -#endif + case GDK_MEMORY_R32G32B32A32_FLOAT: + { + static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_R32G32B32A32_SFLOAT, DEFAULT_SWIZZLE, GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_UNDEFINED } + }; + return info; + } case GDK_MEMORY_G8A8_PREMULTIPLIED: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R8G8_UNORM, SWIZZLE (R, R, R, G) }, + { VK_FORMAT_R8G8_UNORM, SWIZZLE (R, R, R, G), 0 }, { VK_FORMAT_UNDEFINED } }; return info; } -#if 0 - GDK_MEMORY_G8A8, -#endif + case GDK_MEMORY_G8A8: + { + static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_R8G8_UNORM, SWIZZLE (R, R, R, G), GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_UNDEFINED } + }; + return info; + } case GDK_MEMORY_G8: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R8_UNORM, SWIZZLE (R, R, R, ONE) }, + { VK_FORMAT_R8_UNORM, SWIZZLE (R, R, R, ONE), 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -194,20 +246,25 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_G16A16_PREMULTIPLIED: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R16G16_UNORM, SWIZZLE (R, R, R, G) }, + { VK_FORMAT_R16G16_UNORM, SWIZZLE (R, R, R, G), 0 }, { VK_FORMAT_UNDEFINED } }; return info; } -#if 0 - GDK_MEMORY_G16A16 -#endif + case GDK_MEMORY_G16A16: + { + static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_R16G16_UNORM, SWIZZLE (R, R, R, G), GSK_VULKAN_IMAGE_PREMULTIPLY }, + { VK_FORMAT_UNDEFINED } + }; + return info; + } case GDK_MEMORY_G16: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R16_UNORM, SWIZZLE (R, R, R, ONE) }, + { VK_FORMAT_R16_UNORM, SWIZZLE (R, R, R, ONE), 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -216,7 +273,7 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_A8: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R8_UNORM, SWIZZLE (R, R, R, R) }, + { VK_FORMAT_R8_UNORM, SWIZZLE (R, R, R, R), 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -225,23 +282,7 @@ gsk_memory_format_get_vk_format_infos (GdkMemoryFormat format) case GDK_MEMORY_A16: { static const GskMemoryFormatInfo info[] = { - { VK_FORMAT_R16_UNORM, SWIZZLE (R, R, R, R) }, - { VK_FORMAT_UNDEFINED } - }; - return info; - } - - case GDK_MEMORY_B8G8R8A8: - case GDK_MEMORY_A8R8G8B8: - case GDK_MEMORY_R8G8B8A8: - case GDK_MEMORY_A8B8G8R8: - case GDK_MEMORY_R16G16B16A16: - case GDK_MEMORY_R16G16B16A16_FLOAT: - case GDK_MEMORY_R32G32B32A32_FLOAT: - case GDK_MEMORY_G8A8: - case GDK_MEMORY_G16A16: - { - static const GskMemoryFormatInfo info[] = { + { VK_FORMAT_R16_UNORM, SWIZZLE (R, R, R, R), 0 }, { VK_FORMAT_UNDEFINED } }; return info; @@ -361,16 +402,17 @@ gsk_vulkan_image_create_view (GskVulkanImage *self, } static GskVulkanImage * -gsk_vulkan_image_new (GdkVulkanContext *context, - GdkMemoryFormat format, - gsize width, - gsize height, - VkImageTiling tiling, - VkImageUsageFlags usage, - VkPipelineStageFlags stage, - VkImageLayout layout, - VkAccessFlags access, - VkMemoryPropertyFlags memory) +gsk_vulkan_image_new (GdkVulkanContext *context, + GdkMemoryFormat format, + gsize width, + gsize height, + GskVulkanImagePostprocess allowed_postprocess, + VkImageTiling tiling, + VkImageUsageFlags usage, + VkPipelineStageFlags stage, + VkImageLayout layout, + VkAccessFlags access, + VkMemoryPropertyFlags memory) { VkMemoryRequirements requirements; GskVulkanImage *self; @@ -384,6 +426,9 @@ gsk_vulkan_image_new (GdkVulkanContext *context, vk_format->format != VK_FORMAT_UNDEFINED; vk_format++) { + if (vk_format->postprocess & ~allowed_postprocess) + continue; + if (gsk_vulkan_context_supports_format (context, vk_format->format)) break; } @@ -398,6 +443,7 @@ gsk_vulkan_image_new (GdkVulkanContext *context, self->vulkan = g_object_ref (context); self->format = format; self->vk_format = vk_format->format; + self->postprocess = vk_format->postprocess; self->width = width; self->height = height; self->vk_usage = usage; @@ -454,6 +500,7 @@ gsk_vulkan_image_new_for_upload (GdkVulkanContext *context, format, width, height, + -1, VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, @@ -555,6 +602,7 @@ gsk_vulkan_image_new_for_atlas (GdkVulkanContext *context, GDK_MEMORY_DEFAULT, width, height, + 0, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, @@ -577,6 +625,7 @@ gsk_vulkan_image_new_for_offscreen (GdkVulkanContext *context, preferred_format, width, height, + 0, VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | @@ -663,6 +712,12 @@ gsk_vulkan_image_get_height (GskVulkanImage *self) return self->height; } +GskVulkanImagePostprocess +gsk_vulkan_image_get_postprocess (GskVulkanImage *self) +{ + return self->postprocess; +} + VkImage gsk_vulkan_image_get_vk_image (GskVulkanImage *self) { diff --git a/gsk/vulkan/gskvulkanimageprivate.h b/gsk/vulkan/gskvulkanimageprivate.h index d0c9e6bc45..53055531ba 100644 --- a/gsk/vulkan/gskvulkanimageprivate.h +++ b/gsk/vulkan/gskvulkanimageprivate.h @@ -8,6 +8,12 @@ G_BEGIN_DECLS +/* required postprocessing steps before the image van be used */ +typedef enum +{ + GSK_VULKAN_IMAGE_PREMULTIPLY = (1 << 0), +} GskVulkanImagePostprocess; + #define GSK_TYPE_VULKAN_IMAGE (gsk_vulkan_image_get_type ()) G_DECLARE_FINAL_TYPE (GskVulkanImage, gsk_vulkan_image, GSK, VULKAN_IMAGE, GObject) @@ -48,6 +54,8 @@ void gsk_vulkan_image_unmap (GskVulk gsize gsk_vulkan_image_get_width (GskVulkanImage *self); gsize gsk_vulkan_image_get_height (GskVulkanImage *self); +GskVulkanImagePostprocess + gsk_vulkan_image_get_postprocess (GskVulkanImage *self); VkPipelineStageFlags gsk_vulkan_image_get_vk_pipeline_stage (GskVulkanImage *self); VkImageLayout gsk_vulkan_image_get_vk_image_layout (GskVulkanImage *self); VkAccessFlags gsk_vulkan_image_get_vk_access (GskVulkanImage *self); diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index 476d533daf..b680b8c9b0 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -16,6 +16,7 @@ #include "gskvulkanclipprivate.h" #include "gskvulkancolormatrixopprivate.h" #include "gskvulkancoloropprivate.h" +#include "gskvulkanconvertopprivate.h" #include "gskvulkancrossfadeopprivate.h" #include "gskvulkanglyphopprivate.h" #include "gskvulkaninsetshadowopprivate.h" @@ -140,6 +141,52 @@ gsk_vulkan_parse_rect_is_integer (const GskVulkanParseState *state, && int_rect->height == rect->size.height * scale_y; } +static GskVulkanImage * +gsk_vulkan_render_pass_upload_texture (GskVulkanRender *render, + GdkTexture *texture) +{ + GskVulkanImage *image, *better_image; + int width, height; + GskVulkanImagePostprocess postproc; + graphene_matrix_t projection; + graphene_vec2_t scale; + + image = gsk_vulkan_upload_texture_op (render, texture); + postproc = gsk_vulkan_image_get_postprocess (image); + if (postproc == 0) + return image; + + width = gdk_texture_get_width (texture); + height = gdk_texture_get_height (texture); + better_image = gsk_vulkan_image_new_for_offscreen (gsk_vulkan_render_get_context (render), + gdk_texture_get_format (texture), + width, height); + gsk_vulkan_render_pass_begin_op (render, + g_object_ref (better_image), + &(cairo_rectangle_int_t) { 0, 0, width, height }, + &GRAPHENE_SIZE_INIT(width, height), + VK_IMAGE_LAYOUT_UNDEFINED, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + gsk_vulkan_scissor_op (render, &(cairo_rectangle_int_t) { 0, 0, width, height }); + graphene_matrix_init_ortho (&projection, + 0, width, + 0, height, + 2 * ORTHO_NEAR_PLANE - ORTHO_FAR_PLANE, + ORTHO_FAR_PLANE); + graphene_vec2_init (&scale, 1.0, 1.0); + gsk_vulkan_push_constants_op (render, &scale, &projection, &GSK_ROUNDED_RECT_INIT(0, 0, width, height)); + gsk_vulkan_convert_op (render, + GSK_VULKAN_SHADER_CLIP_NONE, + image, + &GRAPHENE_RECT_INIT (0, 0, width, height), + &GRAPHENE_POINT_INIT (0, 0), + &GRAPHENE_RECT_INIT (0, 0, width, height)); + gsk_vulkan_render_pass_end_op (render, + better_image, + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + return better_image; +} + static GskVulkanImage * gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, GskVulkanRender *render, @@ -158,7 +205,7 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, result = gsk_vulkan_renderer_get_texture_image (renderer, texture); if (result == NULL) { - result = gsk_vulkan_upload_texture_op (render, texture); + result = gsk_vulkan_render_pass_upload_texture (render, texture); gsk_vulkan_renderer_add_texture_image (renderer, texture, result); } @@ -433,7 +480,7 @@ gsk_vulkan_render_pass_add_texture_node (GskVulkanRenderPass *self, image = gsk_vulkan_renderer_get_texture_image (renderer, texture); if (image == NULL) { - image = gsk_vulkan_upload_texture_op (render, texture); + image = gsk_vulkan_render_pass_upload_texture (render, texture); gsk_vulkan_renderer_add_texture_image (renderer, texture, image); } @@ -476,7 +523,7 @@ gsk_vulkan_render_pass_add_texture_scale_node (GskVulkanRenderPass *self, image = gsk_vulkan_renderer_get_texture_image (renderer, texture); if (image == NULL) { - image = gsk_vulkan_upload_texture_op (render, texture); + image = gsk_vulkan_render_pass_upload_texture (render, texture); gsk_vulkan_renderer_add_texture_image (renderer, texture, image); } diff --git a/gsk/vulkan/gskvulkanuploadop.c b/gsk/vulkan/gskvulkanuploadop.c index ea5388a6f0..428590f559 100644 --- a/gsk/vulkan/gskvulkanuploadop.c +++ b/gsk/vulkan/gskvulkanuploadop.c @@ -339,6 +339,7 @@ gsk_vulkan_upload_cairo_op (GskVulkanRender *render, GDK_MEMORY_DEFAULT, ceil (graphene_vec2_get_x (scale) * viewport->size.width), ceil (graphene_vec2_get_y (scale) * viewport->size.height)); + g_assert (gsk_vulkan_image_get_postprocess (self->image) == 0); self->viewport = *viewport; return self->image; diff --git a/gsk/vulkan/resources/convert.frag b/gsk/vulkan/resources/convert.frag new file mode 100644 index 0000000000..862285b1df --- /dev/null +++ b/gsk/vulkan/resources/convert.frag @@ -0,0 +1,29 @@ +#version 450 + +#include "common.frag.glsl" +#include "clip.frag.glsl" +#include "rect.frag.glsl" + +#define GSK_VULKAN_IMAGE_PREMULTIPLY (1 << 0) +# +layout(location = 0) in vec2 in_pos; +layout(location = 1) in Rect in_rect; +layout(location = 2) in vec2 in_tex_coord; +layout(location = 3) flat in uint in_tex_id; +layout(location = 4) in flat uint in_postprocess; + +layout(location = 0) out vec4 color; + +void main() +{ + float alpha = rect_coverage (in_rect, in_pos); + + /* warning: This breaks with filters other than nearest, + as linear filtering needs premultiplied alpha */ + vec4 pixel = texture (get_sampler (in_tex_id), in_tex_coord); + + if ((in_postprocess & GSK_VULKAN_IMAGE_PREMULTIPLY) != 0) + pixel.rgb *= pixel.a; + + color = clip_scaled (in_pos, pixel * alpha); +} diff --git a/gsk/vulkan/resources/convert.vert b/gsk/vulkan/resources/convert.vert new file mode 100644 index 0000000000..d0777b9785 --- /dev/null +++ b/gsk/vulkan/resources/convert.vert @@ -0,0 +1,26 @@ +#version 450 + +#include "common.vert.glsl" +#include "rect.vert.glsl" + +layout(location = 0) in vec4 in_rect; +layout(location = 1) in vec4 in_tex_rect; +layout(location = 2) in uint in_tex_id; +layout(location = 3) in uint in_postprocess; + +layout(location = 0) out vec2 out_pos; +layout(location = 1) out flat Rect out_rect; +layout(location = 2) out vec2 out_tex_coord; +layout(location = 3) out flat uint out_tex_id; +layout(location = 4) out flat uint out_postprocess; + +void main() { + Rect r = rect_from_gsk (in_rect); + vec2 pos = set_position_from_rect (r); + + out_pos = pos; + out_rect = r; + out_tex_coord = scale_tex_coord (pos, r, in_tex_rect); + out_tex_id = in_tex_id; + out_postprocess = in_postprocess; +} diff --git a/gsk/vulkan/resources/meson.build b/gsk/vulkan/resources/meson.build index 146120d8fb..444a1dce38 100644 --- a/gsk/vulkan/resources/meson.build +++ b/gsk/vulkan/resources/meson.build @@ -17,6 +17,7 @@ gsk_private_vulkan_fragment_shaders = [ 'border.frag', 'color.frag', 'color-matrix.frag', + 'convert.frag', 'cross-fade.frag', 'glyph.frag', 'inset-shadow.frag', @@ -32,6 +33,7 @@ gsk_private_vulkan_vertex_shaders = [ 'border.vert', 'color.vert', 'color-matrix.vert', + 'convert.vert', 'cross-fade.vert', 'glyph.vert', 'inset-shadow.vert', From 2cbe89de7d78759c47f9f2cda9b2194a30d7e601 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 06:45:00 +0200 Subject: [PATCH 13/14] memoryformat: fast-path copies of the same format Basically, memcpy() asap if possible. This happens a lot in Vulkan, where we gdk_memory_conert() image data from memory textures straight into the VulkanBuffer. And usually we support the format. --- gdk/gdkmemoryformat.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gdk/gdkmemoryformat.c b/gdk/gdkmemoryformat.c index 893624efcb..c4cb2b7d22 100644 --- a/gdk/gdkmemoryformat.c +++ b/gdk/gdkmemoryformat.c @@ -700,6 +700,26 @@ gdk_memory_convert (guchar *dest_data, g_assert (dest_format < GDK_MEMORY_N_FORMATS); g_assert (src_format < GDK_MEMORY_N_FORMATS); + if (src_format == dest_format) + { + gsize bytes_per_row = src_desc->bytes_per_pixel * width; + + if (bytes_per_row == src_stride && bytes_per_row == dest_stride) + { + memcpy (dest_data, src_data, bytes_per_row * height); + } + else + { + for (y = 0; y < height; y++) + { + memcpy (dest_data, src_data, bytes_per_row); + src_data += src_stride; + dest_data += dest_stride; + } + } + return; + } + if (src_format == GDK_MEMORY_R8G8B8A8 && dest_format == GDK_MEMORY_R8G8B8A8_PREMULTIPLIED) func = r8g8b8a8_to_r8g8b8a8_premultiplied; else if (src_format == GDK_MEMORY_B8G8R8A8 && dest_format == GDK_MEMORY_R8G8B8A8_PREMULTIPLIED) From dd641867a25b17d3e85c04d6b222f154c209042a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 07:38:51 +0200 Subject: [PATCH 14/14] vulkan: Be more careful with supported images Now that we can upload all these fancy formats, we need to make sure that we actually can. --- gsk/vulkan/gskvulkanimage.c | 70 +++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/gsk/vulkan/gskvulkanimage.c b/gsk/vulkan/gskvulkanimage.c index b9e744538b..459551b214 100644 --- a/gsk/vulkan/gskvulkanimage.c +++ b/gsk/vulkan/gskvulkanimage.c @@ -20,6 +20,7 @@ struct _GskVulkanImage VkFormat vk_format; gsize width; gsize height; + VkImageTiling vk_tiling; VkImageUsageFlags vk_usage; VkImage vk_image; VkImageView vk_image_view; @@ -362,20 +363,57 @@ gsk_memory_format_get_fallback (GdkMemoryFormat format) } static gboolean -gsk_vulkan_context_supports_format (GdkVulkanContext *context, - VkFormat format) +gsk_vulkan_context_supports_format (GdkVulkanContext *context, + VkFormat format, + VkImageTiling tiling, + VkImageUsageFlags usage, + gsize width, + gsize height) { VkFormatProperties properties; + VkImageFormatProperties image_properties; + VkFormatFeatureFlags features, required; + VkResult res; vkGetPhysicalDeviceFormatProperties (gdk_vulkan_context_get_physical_device (context), format, &properties); - if ((properties.linearTilingFeatures & (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)) && - (properties.optimalTilingFeatures & (VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT))) - return TRUE; + switch ((int) tiling) + { + case VK_IMAGE_TILING_OPTIMAL: + features = properties.optimalTilingFeatures; + break; + case VK_IMAGE_TILING_LINEAR: + features = properties.optimalTilingFeatures; + break; + default: + return FALSE; + } + required = 0; + if (usage & VK_IMAGE_USAGE_SAMPLED_BIT) + required |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT; + if (usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) + required |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT; - return FALSE; + if ((features & required) != required) + return FALSE; + + res = vkGetPhysicalDeviceImageFormatProperties (gdk_vulkan_context_get_physical_device (context), + format, + VK_IMAGE_TYPE_2D, + tiling, + usage, + 0, + &image_properties); + if (res != VK_SUCCESS) + return FALSE; + + if (image_properties.maxExtent.width < width || + image_properties.maxExtent.height < height) + return FALSE; + + return TRUE; } static void @@ -429,8 +467,21 @@ gsk_vulkan_image_new (GdkVulkanContext *context, if (vk_format->postprocess & ~allowed_postprocess) continue; - if (gsk_vulkan_context_supports_format (context, vk_format->format)) + if (gsk_vulkan_context_supports_format (context, + vk_format->format, + tiling, usage, + width, height)) break; + + if (tiling != VK_IMAGE_TILING_OPTIMAL && + gsk_vulkan_context_supports_format (context, + vk_format->format, + VK_IMAGE_TILING_OPTIMAL, usage, + width, height)) + { + tiling = VK_IMAGE_TILING_OPTIMAL; + break; + } } if (vk_format->format != VK_FORMAT_UNDEFINED) break; @@ -446,6 +497,7 @@ gsk_vulkan_image_new (GdkVulkanContext *context, self->postprocess = vk_format->postprocess; self->width = width; self->height = height; + self->vk_tiling = tiling; self->vk_usage = usage; self->vk_pipeline_stage = stage; self->vk_image_layout = layout; @@ -518,6 +570,9 @@ gsk_vulkan_image_can_map (GskVulkanImage *self) if (GSK_DEBUG_CHECK (STAGING)) return FALSE; + if (self->vk_tiling != VK_IMAGE_TILING_LINEAR) + return FALSE; + if (self->vk_image_layout != VK_IMAGE_LAYOUT_PREINITIALIZED && self->vk_image_layout != VK_IMAGE_LAYOUT_GENERAL) return FALSE; @@ -572,6 +627,7 @@ gsk_vulkan_image_new_for_swapchain (GdkVulkanContext *context, self->vulkan = g_object_ref (context); self->width = width; self->height = height; + self->vk_tiling = VK_IMAGE_TILING_OPTIMAL; self->vk_image = image; self->vk_format = format; self->vk_pipeline_stage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;