From 30afa6cc99347b6a00cf998d034be4168557fe3e Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 14 Apr 2025 16:10:01 +0200 Subject: [PATCH 01/37] base for wgsl writer --- .../index/Archive.cpp.5CC47325CF0C08AB.idx | Bin 0 -> 5954 bytes .../index/Archive.hpp.F8E233A27B18B6AF.idx | Bin 0 -> 3452 bytes .../index/Archive.inl.6367083BB3B5A2B7.idx | Bin 0 -> 340 bytes .../index/Archiver.cpp.408A70FC963F8738.idx | Bin 0 -> 7852 bytes .../index/Archiver.hpp.FA5E94CE3BA8D9AF.idx | Bin 0 -> 2250 bytes .../index/Archiver.inl.A38A8F6F4396450A.idx | Bin 0 -> 180 bytes .../AstSerializer.cpp.0DFC061FAE11AEC9.idx | Bin 0 -> 37964 bytes .../AstSerializer.hpp.9AB9DB4353D98136.idx | Bin 0 -> 15830 bytes .../AstSerializer.inl.FD8333351D5F3306.idx | Bin 0 -> 4550 bytes .../index/Cloner.cpp.DD6719B4181B4210.idx | Bin 0 -> 25004 bytes .../index/Cloner.hpp.7A53E17449C7C1F4.idx | Bin 0 -> 9078 bytes .../index/Cloner.inl.246C453E8B117AE6.idx | Bin 0 -> 2594 bytes .../index/Compare.hpp.F0DEFD4D9EF65904.idx | Bin 0 -> 9760 bytes .../index/Compare.inl.3E7E9C1B6953A89D.idx | Bin 0 -> 29110 bytes .../index/Compiler.cpp.0DDC7674EE65C12B.idx | Bin 0 -> 22792 bytes .../index/Compiler.hpp.D7B17CB22CAB9348.idx | Bin 0 -> 4624 bytes .../index/Compiler.inl.3CFD39B18F8A33F4.idx | Bin 0 -> 178 bytes .../index/Config.h.A2B329D5283B56BD.idx | Bin 0 -> 466 bytes .../index/Config.hpp.B92F75B7385347CF.idx | Bin 0 -> 398 bytes ...ropagationVisitor.cpp.B15E68958969C6F2.idx | Bin 0 -> 46458 bytes ...ropagationVisitor.hpp.A8A9416E29B616EB.idx | Bin 0 -> 4860 bytes ...ropagationVisitor.inl.CF03B7DE262BDE99.idx | Bin 0 -> 1928 bytes ...BinaryArithmetics.cpp.88AEE26FCFB2C9C6.idx | Bin 0 -> 13940 bytes ..._BinaryComparison.cpp.3A06BF4C9B9E5160.idx | Bin 0 -> 7546 bytes .../ConstantValue.cpp.3282F9BCE766111D.idx | Bin 0 -> 9774 bytes .../ConstantValue.hpp.39DD4E19347AB46D.idx | Bin 0 -> 3340 bytes .../ConstantValue.inl.28732739665ED713.idx | Bin 0 -> 2114 bytes .../index/DebugLevel.h.EEF1238084A8C169.idx | Bin 0 -> 588 bytes ...ncyCheckerVisitor.cpp.89010A4027EB9A6A.idx | Bin 0 -> 8150 bytes ...ncyCheckerVisitor.hpp.22BBF2B5697F255E.idx | Bin 0 -> 5378 bytes ...ncyCheckerVisitor.inl.F6EF1FB956298A21.idx | Bin 0 -> 1042 bytes ...UnusedPassVisitor.cpp.F41EC631E4D8C65D.idx | Bin 0 -> 4626 bytes ...UnusedPassVisitor.hpp.91540B274712C8C3.idx | Bin 0 -> 4314 bytes ...UnusedPassVisitor.inl.261505C45B8750CF.idx | Bin 0 -> 1616 bytes .../index/Enums.hpp.563FEBCD9499CC4B.idx | Bin 0 -> 15628 bytes .../index/Enums.hpp.FB30416E54DE92D2.idx | Bin 0 -> 7070 bytes .../index/ErrorList.hpp.D860B6CD397F7DEA.idx | Bin 0 -> 75516 bytes .../index/Errors.cpp.53872D8B941817E7.idx | Bin 0 -> 11556 bytes .../index/Errors.hpp.5291946494B6A65D.idx | Bin 0 -> 19662 bytes .../index/Errors.inl.05CC2FB573E4D8E0.idx | Bin 0 -> 1586 bytes .../ExportVisitor.cpp.5FF2E0C23B31D487.idx | Bin 0 -> 1702 bytes .../ExportVisitor.hpp.33D190D7A875F587.idx | Bin 0 -> 2748 bytes .../ExportVisitor.inl.3940CC349081D1D2.idx | Bin 0 -> 174 bytes .../ExpressionType.cpp.01AEA155CEABD227.idx | Bin 0 -> 21606 bytes .../ExpressionType.hpp.5B1B722F2FDC0A6C.idx | Bin 0 -> 21966 bytes .../ExpressionType.inl.EB82FA5221E24A15.idx | Bin 0 -> 12632 bytes .../ExpressionValue.hpp.2AE6A8183CF57628.idx | Bin 0 -> 1714 bytes .../ExpressionValue.inl.2EA48C02B505E8B8.idx | Bin 0 -> 3744 bytes ...ExpressionVisitor.cpp.3077F256229413CD.idx | Bin 0 -> 816 bytes ...ExpressionVisitor.hpp.90F6309974E912C9.idx | Bin 0 -> 1998 bytes ...sionVisitorExcept.cpp.2E0BE9827C216D6D.idx | Bin 0 -> 1462 bytes ...sionVisitorExcept.hpp.00E68E287FF1A860.idx | Bin 0 -> 1876 bytes .../FieldOffsets.hpp.291159D8401AE223.idx | Bin 0 -> 2312 bytes .../FieldOffsets.inl.BD4AECEB917E1B85.idx | Bin 0 -> 5768 bytes ...temModuleResolver.cpp.368D1B6BA5471AAB.idx | Bin 0 -> 2754 bytes ...temModuleResolver.cpp.AF9ECF7077CFE767.idx | Bin 0 -> 7828 bytes ...ystemModuleResolver.h.D815F057EFBA2404.idx | Bin 0 -> 1254 bytes ...temModuleResolver.hpp.1253354BC2EFE659.idx | Bin 0 -> 2648 bytes ...temModuleResolver.hpp.3592EC8F444D6908.idx | Bin 0 -> 538 bytes ...temModuleResolver.inl.FE9654978E01FD02.idx | Bin 0 -> 180 bytes .../index/GlslOutput.hpp.F4B2DA50D5F7A96A.idx | Bin 0 -> 358 bytes .../index/GlslWriter.cpp.0C022627AA6639D2.idx | Bin 0 -> 5130 bytes .../index/GlslWriter.cpp.EA19CDFEEB3C33B1.idx | Bin 0 -> 81954 bytes .../index/GlslWriter.h.F52557D537D619A1.idx | Bin 0 -> 3382 bytes .../index/GlslWriter.hpp.7EDF9E885DC2F3AE.idx | Bin 0 -> 11196 bytes .../index/GlslWriter.hpp.AA1AA90F1F5BC592.idx | Bin 0 -> 510 bytes .../index/GlslWriter.inl.E50041BDF108763C.idx | Bin 0 -> 540 bytes ...lWriterParameters.hpp.884FFF92C43C2573.idx | Bin 0 -> 402 bytes ...exRemapperVisitor.cpp.3FDA3F0181419558.idx | Bin 0 -> 15904 bytes ...exRemapperVisitor.hpp.5A1F3D267CF83316.idx | Bin 0 -> 4748 bytes ...exRemapperVisitor.inl.33CDFAE2C8487BB2.idx | Bin 0 -> 522 bytes .../index/LangData.hpp.AC8ACDF1204F2BD1.idx | Bin 0 -> 21138 bytes .../index/LangOutput.hpp.0EC4C5E10F5E3E53.idx | Bin 0 -> 378 bytes .../index/LangWriter.cpp.2A5F975395A1A129.idx | Bin 0 -> 2242 bytes .../index/LangWriter.cpp.D4B16EFE3DB381CE.idx | Bin 0 -> 49516 bytes .../index/LangWriter.h.C3CB06844E607448.idx | Bin 0 -> 1362 bytes .../index/LangWriter.hpp.581750B186F7B47C.idx | Bin 0 -> 11960 bytes .../index/LangWriter.hpp.5CAA92D4F544B759.idx | Bin 0 -> 508 bytes .../index/LangWriter.inl.EF43BAFD9DD11C89.idx | Bin 0 -> 302 bytes .../index/Lexer.cpp.D91296467F304958.idx | Bin 0 -> 10156 bytes .../index/Lexer.hpp.DAF366F8B15496D8.idx | Bin 0 -> 1478 bytes .../index/Lexer.inl.D7047EEE0A359694.idx | Bin 0 -> 162 bytes .../index/Module.cpp.E3358329D8511CD9.idx | Bin 0 -> 1208 bytes .../index/Module.h.D1A2ED2858B94A88.idx | Bin 0 -> 768 bytes .../index/Module.hpp.411E2D524ABAAD60.idx | Bin 0 -> 2438 bytes .../index/Module.hpp.564F7E14559C4586.idx | Bin 0 -> 486 bytes .../index/Module.inl.C69C9779A67C2D0A.idx | Bin 0 -> 1220 bytes .../ModuleResolver.cpp.EA91DAACA2896EF6.idx | Bin 0 -> 808 bytes .../ModuleResolver.hpp.9290CB3A27FCDCAC.idx | Bin 0 -> 1380 bytes .../ModuleResolver.inl.DAA39B156E800304.idx | Bin 0 -> 172 bytes .../index/NodeList.hpp.AD6E957801D54B72.idx | Bin 0 -> 10368 bytes .../index/Nodes.cpp.1C5DD9F7FE6C5283.idx | Bin 0 -> 4818 bytes .../index/Nodes.hpp.204926A98A922049.idx | Bin 0 -> 28364 bytes .../index/Nodes.inl.BC11D985D6F3104F.idx | Bin 0 -> 1002 bytes .../index/Option.hpp.4BBA65DC50E43052.idx | Bin 0 -> 688 bytes .../index/Option.inl.CFF0523FAF2DCDA2.idx | Bin 0 -> 656 bytes .../index/Parser.cpp.0F0BDD9A80646B86.idx | Bin 0 -> 1918 bytes .../index/Parser.cpp.20700236829D64A3.idx | Bin 0 -> 59152 bytes .../index/Parser.h.C94B85EFC98D9087.idx | Bin 0 -> 974 bytes .../index/Parser.hpp.1AB61F136D8C4EC0.idx | Bin 0 -> 7696 bytes .../index/Parser.inl.2063DF4F08AB2BC9.idx | Bin 0 -> 776 bytes .../RecursiveVisitor.cpp.C40406451A44869E.idx | Bin 0 -> 7604 bytes .../RecursiveVisitor.hpp.D2AB053DA85E56B6.idx | Bin 0 -> 5154 bytes .../RecursiveVisitor.inl.756E0CA4A20970A1.idx | Bin 0 -> 176 bytes .../ReflectVisitor.cpp.2B838843DEF9EE5B.idx | Bin 0 -> 5572 bytes .../ReflectVisitor.hpp.816E9B5AA88700E6.idx | Bin 0 -> 3612 bytes .../ReflectVisitor.inl.4BE1EC0AD13B3912.idx | Bin 0 -> 176 bytes .../SanitizeVisitor.cpp.5F08E384DE28382B.idx | Bin 0 -> 189522 bytes .../SanitizeVisitor.hpp.BB6D3EFD2E10ED14.idx | Bin 0 -> 16996 bytes .../SanitizeVisitor.inl.31394EF9FA011B85.idx | Bin 0 -> 888 bytes .../index/Serializer.cpp.34E642360DEA6063.idx | Bin 0 -> 7370 bytes .../index/Serializer.cpp.5664F71FD8E0AFB1.idx | Bin 0 -> 2670 bytes .../index/Serializer.h.528D2AD4F4C3C135.idx | Bin 0 -> 1554 bytes .../index/Serializer.hpp.3D421AA4DD3434C4.idx | Bin 0 -> 7216 bytes .../index/Serializer.hpp.98DCD717F755FED6.idx | Bin 0 -> 844 bytes .../index/Serializer.inl.9FD220F8465E83D0.idx | Bin 0 -> 704 bytes .../ShaderBuilder.hpp.F15E929B249EABBD.idx | Bin 0 -> 14300 bytes .../ShaderBuilder.inl.0DB1878757CF231C.idx | Bin 0 -> 20954 bytes .../ShaderStageType.h.B028CE6C7CE6F853.idx | Bin 0 -> 534 bytes .../ShaderWriter.cpp.4CAAD00F9D40ACCB.idx | Bin 0 -> 826 bytes .../ShaderWriter.hpp.B1D3980A9644C95A.idx | Bin 0 -> 1304 bytes .../SourceLocation.hpp.9C538E2C155C6D1F.idx | Bin 0 -> 1520 bytes .../SourceLocation.inl.41355A2DF1DAD462.idx | Bin 0 -> 2688 bytes .../SpirvAstVisitor.cpp.55169384415821CA.idx | Bin 0 -> 38368 bytes .../SpirvAstVisitor.hpp.E4993EB2688BB46D.idx | Bin 0 -> 10416 bytes .../SpirvAstVisitor.inl.C62F864FD6F2E4BF.idx | Bin 0 -> 968 bytes .../index/SpirvBlock.hpp.F783122CCD3052BA.idx | Bin 0 -> 1664 bytes .../index/SpirvBlock.inl.E0470A64B4207A2A.idx | Bin 0 -> 1724 bytes ...pirvConstantCache.cpp.880A65F97A09E3F2.idx | Bin 0 -> 49008 bytes ...pirvConstantCache.hpp.6FB8F6B4E99CE834.idx | Bin 0 -> 13398 bytes ...pirvConstantCache.inl.AE90C3FD8FADBB9C.idx | Bin 0 -> 1638 bytes .../index/SpirvData.cpp.78213380C8ADB0B9.idx | Bin 0 -> 209014 bytes .../index/SpirvData.hpp.1456A956D1AA9CFA.idx | Bin 0 -> 161852 bytes .../SpirvDecoder.cpp.4B45AFE335798C8F.idx | Bin 0 -> 1956 bytes .../SpirvDecoder.hpp.D4F9509EBA646B98.idx | Bin 0 -> 1894 bytes .../SpirvDecoder.inl.A3F9A1A37F2DA249.idx | Bin 0 -> 388 bytes ...irvExpressionLoad.cpp.5338F642B09E36D9.idx | Bin 0 -> 5482 bytes ...irvExpressionLoad.hpp.AE3C6B8402B69E0D.idx | Bin 0 -> 3672 bytes ...irvExpressionLoad.inl.3B94CF604BFE395A.idx | Bin 0 -> 430 bytes ...rvExpressionStore.cpp.97AE7ABCD5AE4BD4.idx | Bin 0 -> 5014 bytes ...rvExpressionStore.hpp.0F2EE8CBFA895008.idx | Bin 0 -> 2982 bytes ...rvExpressionStore.inl.738980EFB64FAC59.idx | Bin 0 -> 432 bytes .../SpirvGenData.hpp.CCFC3D839C70A4D9.idx | Bin 0 -> 8998 bytes .../SpirvOutput.hpp.B3254A75A9F8E0D9.idx | Bin 0 -> 402 bytes .../SpirvPrinter.cpp.45873E9ED9C78885.idx | Bin 0 -> 13768 bytes .../SpirvPrinter.hpp.60E14A2C43310425.idx | Bin 0 -> 2136 bytes .../SpirvPrinter.inl.850288AF12FBC0CA.idx | Bin 0 -> 788 bytes .../SpirvSection.hpp.27E77EC86B689532.idx | Bin 0 -> 1416 bytes .../SpirvSection.inl.D1C878B5174E2796.idx | Bin 0 -> 172 bytes .../SpirvSectionBase.cpp.3C270AFB7368C673.idx | Bin 0 -> 1066 bytes .../SpirvSectionBase.hpp.611E247491AFDA0E.idx | Bin 0 -> 3084 bytes .../SpirvSectionBase.inl.F9384090290A4B35.idx | Bin 0 -> 3732 bytes .../SpirvVariable.hpp.8F16AEF8924A5974.idx | Bin 0 -> 648 bytes .../SpirvWriter.cpp.5E8F581994752358.idx | Bin 0 -> 36704 bytes .../SpirvWriter.cpp.E8EBE094AD40B410.idx | Bin 0 -> 2584 bytes .../index/SpirvWriter.h.DC91983551E9455A.idx | Bin 0 -> 1768 bytes .../SpirvWriter.hpp.A5736D944F09C5D6.idx | Bin 0 -> 4250 bytes .../SpirvWriter.hpp.CC720F81FB21E462.idx | Bin 0 -> 508 bytes .../SpirvWriter.inl.50EA1795D7EA1EA3.idx | Bin 0 -> 168 bytes .../StatementVisitor.cpp.24A7EDAE9CA5503B.idx | Bin 0 -> 814 bytes .../StatementVisitor.hpp.1C6A06909DF5FBD2.idx | Bin 0 -> 1900 bytes ...mentVisitorExcept.cpp.C019D206FA85118C.idx | Bin 0 -> 1400 bytes ...mentVisitorExcept.hpp.15CAE34A9761EE53.idx | Bin 0 -> 1830 bytes .../index/TokenList.hpp.3E1793B302B953D1.idx | Bin 0 -> 5406 bytes .../index/Types.hpp.CF309E480C254E5C.idx | Bin 0 -> 1222 bytes .../index/Utils.cpp.60D1E0CC138B8929.idx | Bin 0 -> 4762 bytes .../index/Utils.hpp.0ABAD7026BEC17EA.idx | Bin 0 -> 3488 bytes .../index/Utils.inl.77869E1BD643905B.idx | Bin 0 -> 416 bytes .../index/Vector.hpp.AB1C1967D698D3FF.idx | Bin 0 -> 6420 bytes .../index/Vector.inl.F0571DA066B41DAE.idx | Bin 0 -> 8208 bytes .../WriterStates.cpp.E66D395EB560B690.idx | Bin 0 -> 5172 bytes .../index/WriterStates.h.3EB1FA8425607F4F.idx | Bin 0 -> 3334 bytes .../WriterStates.hpp.B3E751CD161DD2EC.idx | Bin 0 -> 354 bytes .../index/main.cpp.41A508184138A40E.idx | Bin 0 -> 1630 bytes .../index/main.cpp.C4CF7810A05D703D.idx | Bin 0 -> 1690 bytes .../index/main.cpp.C52301DA43FEA1F7.idx | Bin 0 -> 3722 bytes .gitignore | 3 + examples/wgsl/main.cpp | 15 + examples/wgsl/shader.nzsl | 15 + examples/wgsl/xmake.lua | 8 + include/NZSL/WgslWriter.hpp | 185 ++ include/NZSL/WgslWriter.inl | 13 + src/NZSL/WgslWriter.cpp | 1716 +++++++++++++++++ 183 files changed, 1955 insertions(+) create mode 100644 .cache/clangd/index/Archive.cpp.5CC47325CF0C08AB.idx create mode 100644 .cache/clangd/index/Archive.hpp.F8E233A27B18B6AF.idx create mode 100644 .cache/clangd/index/Archive.inl.6367083BB3B5A2B7.idx create mode 100644 .cache/clangd/index/Archiver.cpp.408A70FC963F8738.idx create mode 100644 .cache/clangd/index/Archiver.hpp.FA5E94CE3BA8D9AF.idx create mode 100644 .cache/clangd/index/Archiver.inl.A38A8F6F4396450A.idx create mode 100644 .cache/clangd/index/AstSerializer.cpp.0DFC061FAE11AEC9.idx create mode 100644 .cache/clangd/index/AstSerializer.hpp.9AB9DB4353D98136.idx create mode 100644 .cache/clangd/index/AstSerializer.inl.FD8333351D5F3306.idx create mode 100644 .cache/clangd/index/Cloner.cpp.DD6719B4181B4210.idx create mode 100644 .cache/clangd/index/Cloner.hpp.7A53E17449C7C1F4.idx create mode 100644 .cache/clangd/index/Cloner.inl.246C453E8B117AE6.idx create mode 100644 .cache/clangd/index/Compare.hpp.F0DEFD4D9EF65904.idx create mode 100644 .cache/clangd/index/Compare.inl.3E7E9C1B6953A89D.idx create mode 100644 .cache/clangd/index/Compiler.cpp.0DDC7674EE65C12B.idx create mode 100644 .cache/clangd/index/Compiler.hpp.D7B17CB22CAB9348.idx create mode 100644 .cache/clangd/index/Compiler.inl.3CFD39B18F8A33F4.idx create mode 100644 .cache/clangd/index/Config.h.A2B329D5283B56BD.idx create mode 100644 .cache/clangd/index/Config.hpp.B92F75B7385347CF.idx create mode 100644 .cache/clangd/index/ConstantPropagationVisitor.cpp.B15E68958969C6F2.idx create mode 100644 .cache/clangd/index/ConstantPropagationVisitor.hpp.A8A9416E29B616EB.idx create mode 100644 .cache/clangd/index/ConstantPropagationVisitor.inl.CF03B7DE262BDE99.idx create mode 100644 .cache/clangd/index/ConstantPropagationVisitor_BinaryArithmetics.cpp.88AEE26FCFB2C9C6.idx create mode 100644 .cache/clangd/index/ConstantPropagationVisitor_BinaryComparison.cpp.3A06BF4C9B9E5160.idx create mode 100644 .cache/clangd/index/ConstantValue.cpp.3282F9BCE766111D.idx create mode 100644 .cache/clangd/index/ConstantValue.hpp.39DD4E19347AB46D.idx create mode 100644 .cache/clangd/index/ConstantValue.inl.28732739665ED713.idx create mode 100644 .cache/clangd/index/DebugLevel.h.EEF1238084A8C169.idx create mode 100644 .cache/clangd/index/DependencyCheckerVisitor.cpp.89010A4027EB9A6A.idx create mode 100644 .cache/clangd/index/DependencyCheckerVisitor.hpp.22BBF2B5697F255E.idx create mode 100644 .cache/clangd/index/DependencyCheckerVisitor.inl.F6EF1FB956298A21.idx create mode 100644 .cache/clangd/index/EliminateUnusedPassVisitor.cpp.F41EC631E4D8C65D.idx create mode 100644 .cache/clangd/index/EliminateUnusedPassVisitor.hpp.91540B274712C8C3.idx create mode 100644 .cache/clangd/index/EliminateUnusedPassVisitor.inl.261505C45B8750CF.idx create mode 100644 .cache/clangd/index/Enums.hpp.563FEBCD9499CC4B.idx create mode 100644 .cache/clangd/index/Enums.hpp.FB30416E54DE92D2.idx create mode 100644 .cache/clangd/index/ErrorList.hpp.D860B6CD397F7DEA.idx create mode 100644 .cache/clangd/index/Errors.cpp.53872D8B941817E7.idx create mode 100644 .cache/clangd/index/Errors.hpp.5291946494B6A65D.idx create mode 100644 .cache/clangd/index/Errors.inl.05CC2FB573E4D8E0.idx create mode 100644 .cache/clangd/index/ExportVisitor.cpp.5FF2E0C23B31D487.idx create mode 100644 .cache/clangd/index/ExportVisitor.hpp.33D190D7A875F587.idx create mode 100644 .cache/clangd/index/ExportVisitor.inl.3940CC349081D1D2.idx create mode 100644 .cache/clangd/index/ExpressionType.cpp.01AEA155CEABD227.idx create mode 100644 .cache/clangd/index/ExpressionType.hpp.5B1B722F2FDC0A6C.idx create mode 100644 .cache/clangd/index/ExpressionType.inl.EB82FA5221E24A15.idx create mode 100644 .cache/clangd/index/ExpressionValue.hpp.2AE6A8183CF57628.idx create mode 100644 .cache/clangd/index/ExpressionValue.inl.2EA48C02B505E8B8.idx create mode 100644 .cache/clangd/index/ExpressionVisitor.cpp.3077F256229413CD.idx create mode 100644 .cache/clangd/index/ExpressionVisitor.hpp.90F6309974E912C9.idx create mode 100644 .cache/clangd/index/ExpressionVisitorExcept.cpp.2E0BE9827C216D6D.idx create mode 100644 .cache/clangd/index/ExpressionVisitorExcept.hpp.00E68E287FF1A860.idx create mode 100644 .cache/clangd/index/FieldOffsets.hpp.291159D8401AE223.idx create mode 100644 .cache/clangd/index/FieldOffsets.inl.BD4AECEB917E1B85.idx create mode 100644 .cache/clangd/index/FilesystemModuleResolver.cpp.368D1B6BA5471AAB.idx create mode 100644 .cache/clangd/index/FilesystemModuleResolver.cpp.AF9ECF7077CFE767.idx create mode 100644 .cache/clangd/index/FilesystemModuleResolver.h.D815F057EFBA2404.idx create mode 100644 .cache/clangd/index/FilesystemModuleResolver.hpp.1253354BC2EFE659.idx create mode 100644 .cache/clangd/index/FilesystemModuleResolver.hpp.3592EC8F444D6908.idx create mode 100644 .cache/clangd/index/FilesystemModuleResolver.inl.FE9654978E01FD02.idx create mode 100644 .cache/clangd/index/GlslOutput.hpp.F4B2DA50D5F7A96A.idx create mode 100644 .cache/clangd/index/GlslWriter.cpp.0C022627AA6639D2.idx create mode 100644 .cache/clangd/index/GlslWriter.cpp.EA19CDFEEB3C33B1.idx create mode 100644 .cache/clangd/index/GlslWriter.h.F52557D537D619A1.idx create mode 100644 .cache/clangd/index/GlslWriter.hpp.7EDF9E885DC2F3AE.idx create mode 100644 .cache/clangd/index/GlslWriter.hpp.AA1AA90F1F5BC592.idx create mode 100644 .cache/clangd/index/GlslWriter.inl.E50041BDF108763C.idx create mode 100644 .cache/clangd/index/GlslWriterParameters.hpp.884FFF92C43C2573.idx create mode 100644 .cache/clangd/index/IndexRemapperVisitor.cpp.3FDA3F0181419558.idx create mode 100644 .cache/clangd/index/IndexRemapperVisitor.hpp.5A1F3D267CF83316.idx create mode 100644 .cache/clangd/index/IndexRemapperVisitor.inl.33CDFAE2C8487BB2.idx create mode 100644 .cache/clangd/index/LangData.hpp.AC8ACDF1204F2BD1.idx create mode 100644 .cache/clangd/index/LangOutput.hpp.0EC4C5E10F5E3E53.idx create mode 100644 .cache/clangd/index/LangWriter.cpp.2A5F975395A1A129.idx create mode 100644 .cache/clangd/index/LangWriter.cpp.D4B16EFE3DB381CE.idx create mode 100644 .cache/clangd/index/LangWriter.h.C3CB06844E607448.idx create mode 100644 .cache/clangd/index/LangWriter.hpp.581750B186F7B47C.idx create mode 100644 .cache/clangd/index/LangWriter.hpp.5CAA92D4F544B759.idx create mode 100644 .cache/clangd/index/LangWriter.inl.EF43BAFD9DD11C89.idx create mode 100644 .cache/clangd/index/Lexer.cpp.D91296467F304958.idx create mode 100644 .cache/clangd/index/Lexer.hpp.DAF366F8B15496D8.idx create mode 100644 .cache/clangd/index/Lexer.inl.D7047EEE0A359694.idx create mode 100644 .cache/clangd/index/Module.cpp.E3358329D8511CD9.idx create mode 100644 .cache/clangd/index/Module.h.D1A2ED2858B94A88.idx create mode 100644 .cache/clangd/index/Module.hpp.411E2D524ABAAD60.idx create mode 100644 .cache/clangd/index/Module.hpp.564F7E14559C4586.idx create mode 100644 .cache/clangd/index/Module.inl.C69C9779A67C2D0A.idx create mode 100644 .cache/clangd/index/ModuleResolver.cpp.EA91DAACA2896EF6.idx create mode 100644 .cache/clangd/index/ModuleResolver.hpp.9290CB3A27FCDCAC.idx create mode 100644 .cache/clangd/index/ModuleResolver.inl.DAA39B156E800304.idx create mode 100644 .cache/clangd/index/NodeList.hpp.AD6E957801D54B72.idx create mode 100644 .cache/clangd/index/Nodes.cpp.1C5DD9F7FE6C5283.idx create mode 100644 .cache/clangd/index/Nodes.hpp.204926A98A922049.idx create mode 100644 .cache/clangd/index/Nodes.inl.BC11D985D6F3104F.idx create mode 100644 .cache/clangd/index/Option.hpp.4BBA65DC50E43052.idx create mode 100644 .cache/clangd/index/Option.inl.CFF0523FAF2DCDA2.idx create mode 100644 .cache/clangd/index/Parser.cpp.0F0BDD9A80646B86.idx create mode 100644 .cache/clangd/index/Parser.cpp.20700236829D64A3.idx create mode 100644 .cache/clangd/index/Parser.h.C94B85EFC98D9087.idx create mode 100644 .cache/clangd/index/Parser.hpp.1AB61F136D8C4EC0.idx create mode 100644 .cache/clangd/index/Parser.inl.2063DF4F08AB2BC9.idx create mode 100644 .cache/clangd/index/RecursiveVisitor.cpp.C40406451A44869E.idx create mode 100644 .cache/clangd/index/RecursiveVisitor.hpp.D2AB053DA85E56B6.idx create mode 100644 .cache/clangd/index/RecursiveVisitor.inl.756E0CA4A20970A1.idx create mode 100644 .cache/clangd/index/ReflectVisitor.cpp.2B838843DEF9EE5B.idx create mode 100644 .cache/clangd/index/ReflectVisitor.hpp.816E9B5AA88700E6.idx create mode 100644 .cache/clangd/index/ReflectVisitor.inl.4BE1EC0AD13B3912.idx create mode 100644 .cache/clangd/index/SanitizeVisitor.cpp.5F08E384DE28382B.idx create mode 100644 .cache/clangd/index/SanitizeVisitor.hpp.BB6D3EFD2E10ED14.idx create mode 100644 .cache/clangd/index/SanitizeVisitor.inl.31394EF9FA011B85.idx create mode 100644 .cache/clangd/index/Serializer.cpp.34E642360DEA6063.idx create mode 100644 .cache/clangd/index/Serializer.cpp.5664F71FD8E0AFB1.idx create mode 100644 .cache/clangd/index/Serializer.h.528D2AD4F4C3C135.idx create mode 100644 .cache/clangd/index/Serializer.hpp.3D421AA4DD3434C4.idx create mode 100644 .cache/clangd/index/Serializer.hpp.98DCD717F755FED6.idx create mode 100644 .cache/clangd/index/Serializer.inl.9FD220F8465E83D0.idx create mode 100644 .cache/clangd/index/ShaderBuilder.hpp.F15E929B249EABBD.idx create mode 100644 .cache/clangd/index/ShaderBuilder.inl.0DB1878757CF231C.idx create mode 100644 .cache/clangd/index/ShaderStageType.h.B028CE6C7CE6F853.idx create mode 100644 .cache/clangd/index/ShaderWriter.cpp.4CAAD00F9D40ACCB.idx create mode 100644 .cache/clangd/index/ShaderWriter.hpp.B1D3980A9644C95A.idx create mode 100644 .cache/clangd/index/SourceLocation.hpp.9C538E2C155C6D1F.idx create mode 100644 .cache/clangd/index/SourceLocation.inl.41355A2DF1DAD462.idx create mode 100644 .cache/clangd/index/SpirvAstVisitor.cpp.55169384415821CA.idx create mode 100644 .cache/clangd/index/SpirvAstVisitor.hpp.E4993EB2688BB46D.idx create mode 100644 .cache/clangd/index/SpirvAstVisitor.inl.C62F864FD6F2E4BF.idx create mode 100644 .cache/clangd/index/SpirvBlock.hpp.F783122CCD3052BA.idx create mode 100644 .cache/clangd/index/SpirvBlock.inl.E0470A64B4207A2A.idx create mode 100644 .cache/clangd/index/SpirvConstantCache.cpp.880A65F97A09E3F2.idx create mode 100644 .cache/clangd/index/SpirvConstantCache.hpp.6FB8F6B4E99CE834.idx create mode 100644 .cache/clangd/index/SpirvConstantCache.inl.AE90C3FD8FADBB9C.idx create mode 100644 .cache/clangd/index/SpirvData.cpp.78213380C8ADB0B9.idx create mode 100644 .cache/clangd/index/SpirvData.hpp.1456A956D1AA9CFA.idx create mode 100644 .cache/clangd/index/SpirvDecoder.cpp.4B45AFE335798C8F.idx create mode 100644 .cache/clangd/index/SpirvDecoder.hpp.D4F9509EBA646B98.idx create mode 100644 .cache/clangd/index/SpirvDecoder.inl.A3F9A1A37F2DA249.idx create mode 100644 .cache/clangd/index/SpirvExpressionLoad.cpp.5338F642B09E36D9.idx create mode 100644 .cache/clangd/index/SpirvExpressionLoad.hpp.AE3C6B8402B69E0D.idx create mode 100644 .cache/clangd/index/SpirvExpressionLoad.inl.3B94CF604BFE395A.idx create mode 100644 .cache/clangd/index/SpirvExpressionStore.cpp.97AE7ABCD5AE4BD4.idx create mode 100644 .cache/clangd/index/SpirvExpressionStore.hpp.0F2EE8CBFA895008.idx create mode 100644 .cache/clangd/index/SpirvExpressionStore.inl.738980EFB64FAC59.idx create mode 100644 .cache/clangd/index/SpirvGenData.hpp.CCFC3D839C70A4D9.idx create mode 100644 .cache/clangd/index/SpirvOutput.hpp.B3254A75A9F8E0D9.idx create mode 100644 .cache/clangd/index/SpirvPrinter.cpp.45873E9ED9C78885.idx create mode 100644 .cache/clangd/index/SpirvPrinter.hpp.60E14A2C43310425.idx create mode 100644 .cache/clangd/index/SpirvPrinter.inl.850288AF12FBC0CA.idx create mode 100644 .cache/clangd/index/SpirvSection.hpp.27E77EC86B689532.idx create mode 100644 .cache/clangd/index/SpirvSection.inl.D1C878B5174E2796.idx create mode 100644 .cache/clangd/index/SpirvSectionBase.cpp.3C270AFB7368C673.idx create mode 100644 .cache/clangd/index/SpirvSectionBase.hpp.611E247491AFDA0E.idx create mode 100644 .cache/clangd/index/SpirvSectionBase.inl.F9384090290A4B35.idx create mode 100644 .cache/clangd/index/SpirvVariable.hpp.8F16AEF8924A5974.idx create mode 100644 .cache/clangd/index/SpirvWriter.cpp.5E8F581994752358.idx create mode 100644 .cache/clangd/index/SpirvWriter.cpp.E8EBE094AD40B410.idx create mode 100644 .cache/clangd/index/SpirvWriter.h.DC91983551E9455A.idx create mode 100644 .cache/clangd/index/SpirvWriter.hpp.A5736D944F09C5D6.idx create mode 100644 .cache/clangd/index/SpirvWriter.hpp.CC720F81FB21E462.idx create mode 100644 .cache/clangd/index/SpirvWriter.inl.50EA1795D7EA1EA3.idx create mode 100644 .cache/clangd/index/StatementVisitor.cpp.24A7EDAE9CA5503B.idx create mode 100644 .cache/clangd/index/StatementVisitor.hpp.1C6A06909DF5FBD2.idx create mode 100644 .cache/clangd/index/StatementVisitorExcept.cpp.C019D206FA85118C.idx create mode 100644 .cache/clangd/index/StatementVisitorExcept.hpp.15CAE34A9761EE53.idx create mode 100644 .cache/clangd/index/TokenList.hpp.3E1793B302B953D1.idx create mode 100644 .cache/clangd/index/Types.hpp.CF309E480C254E5C.idx create mode 100644 .cache/clangd/index/Utils.cpp.60D1E0CC138B8929.idx create mode 100644 .cache/clangd/index/Utils.hpp.0ABAD7026BEC17EA.idx create mode 100644 .cache/clangd/index/Utils.inl.77869E1BD643905B.idx create mode 100644 .cache/clangd/index/Vector.hpp.AB1C1967D698D3FF.idx create mode 100644 .cache/clangd/index/Vector.inl.F0571DA066B41DAE.idx create mode 100644 .cache/clangd/index/WriterStates.cpp.E66D395EB560B690.idx create mode 100644 .cache/clangd/index/WriterStates.h.3EB1FA8425607F4F.idx create mode 100644 .cache/clangd/index/WriterStates.hpp.B3E751CD161DD2EC.idx create mode 100644 .cache/clangd/index/main.cpp.41A508184138A40E.idx create mode 100644 .cache/clangd/index/main.cpp.C4CF7810A05D703D.idx create mode 100644 .cache/clangd/index/main.cpp.C52301DA43FEA1F7.idx create mode 100644 examples/wgsl/main.cpp create mode 100644 examples/wgsl/shader.nzsl create mode 100644 examples/wgsl/xmake.lua create mode 100644 include/NZSL/WgslWriter.hpp create mode 100644 include/NZSL/WgslWriter.inl create mode 100644 src/NZSL/WgslWriter.cpp diff --git a/.cache/clangd/index/Archive.cpp.5CC47325CF0C08AB.idx b/.cache/clangd/index/Archive.cpp.5CC47325CF0C08AB.idx new file mode 100644 index 0000000000000000000000000000000000000000..2774827b5eed93ed0df1bcb966ee222d22b742a0 GIT binary patch literal 5954 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Archive.inl.6367083BB3B5A2B7.idx b/.cache/clangd/index/Archive.inl.6367083BB3B5A2B7.idx new file mode 100644 index 0000000000000000000000000000000000000000..66ac673542d05c3a2ec4c15a71e61e77781fc074 GIT binary patch literal 340 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Archiver.hpp.FA5E94CE3BA8D9AF.idx b/.cache/clangd/index/Archiver.hpp.FA5E94CE3BA8D9AF.idx new file mode 100644 index 0000000000000000000000000000000000000000..ab58abec6eb9d62cb5a61d59abac057fd2d72dc9 GIT binary patch literal 2250 zcmY+E4NwzT5XUbsNjb>n?nrXxgO4VBCx!?ZwN@MpC`AisMS-c>78UV>w3Sc?;YJT-b^<4_P@LL_U-*{ z=G4T*(=d zvHz~DIpLa~r)Tf}Tq{3RTNPUPZAIjrk=MiHYjfUlw49%|vdYuG5A|FNK0lDEjhf;< zRe1F5_}O)THFN~F6nCitotK=}k_TJdcgs0;{|(9E+Upk>|BSf-Y-Z6pPg{vj7F&+^ znvl{Nle?QXt4`ae9;?YRPA)VDeY4SWPvcs>w)xjI-jroItrh#5yiZ?UK33)Fi`~}x?t{3Z z#zQw2r**U(pVrB*=sTEFFh8aI&E)Q+%aW|z{=~W`jk}I)^(@?2KixaVnZGXfuzR_u zZ%w%+v!u%2rhL}xe(oI*^K759$T2@cN>Me|z2~;LDtR9H_~V1e7Z(u_VWsd;$fe!; z`JMHxWxgy@`%|1X%o-yakn4VXG^^m$MFWdQU^$wOR*ME?rR|5&bKZY3nn!Xd?oa#c zK>qATdfqvzbUcf6I6G1w87dl(w;BQ}JO^qf@Q8tI3vKy7yX+Ew@m9jlI03zev(-Ur zn`j_=)AMbaem%Q0cocwTlhP!J2IS-os~ZlaN#?RhgXK~5C_ywJA4jHT6E0XkWsw%k zHoYxKG$8w)&vA8l<*plnB(OEDRI31aef`dm%U9CMStQ`>C^||l8jzjSW!HZH*s+I4 z-jE$g2XY`6$CRcX89R80MS7eaL&xYu1G2sC%VinyPwT~Jb9$*>AsUdMbVgZM39DQP z8HPqkajXx^QQkwVxqtlA`eOP`mlu-wQ5^5ZbE5fAmT>Zd%5g2wDsF3l0Za>0*+`sNDB>Bn3H)4)X}W0*92*7q5+w&fB4m;U9BW8PuXcEE}W-nP@;xSkw7Zdu8wik7Q6hoDOF}&dXlpJc)Ukm8uHwt&Ei; zhKryhSipzjthAK{TEHvOi!i~NgDmk8Ap$o*gx!Q7a05KJ2!RIN01b{N#DE)M!O;W~ za04Vbnh*l+!BgGaJK`QqkuY4aI@kbH17;*DkrjvrR&Wsl3b>=IZYN2rdmS=-6q6&8 zplOD)L|N>xAAB%IYY24CaFLow9kc+D;ktw{s0(o6RtQw!2B>f}Aqw1S-c!DJWb+lc z6*FyS;T-|Sa1p{5L?&v~rs2Y#YJjy%_20)2g5U3{FZu*^SRgD`<@{4u-QaHZ9ByUKxD81aQbT zEGes=ry6+=ADtKN1z#WvxX00icZdewaWsJ)+%Od!P51^k@QtGh+~5YTadQM}a0Ab{ z2;msqdD*#Hj literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Archiver.inl.A38A8F6F4396450A.idx b/.cache/clangd/index/Archiver.inl.A38A8F6F4396450A.idx new file mode 100644 index 0000000000000000000000000000000000000000..d64b4acda5f3bb30a08bd2afd6b52e189923606d GIT binary patch literal 180 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 RP{QPEE>_%L+aZ?n`hP9-0Z0G< literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/AstSerializer.hpp.9AB9DB4353D98136.idx b/.cache/clangd/index/AstSerializer.hpp.9AB9DB4353D98136.idx new file mode 100644 index 0000000000000000000000000000000000000000..3fba23c3f9d51d24ae83d1f96636bbe30ac5fba1 GIT binary patch literal 15830 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/AstSerializer.inl.FD8333351D5F3306.idx b/.cache/clangd/index/AstSerializer.inl.FD8333351D5F3306.idx new file mode 100644 index 0000000000000000000000000000000000000000..e318cea130a481452d83997859e5263921e3ec78 GIT binary patch literal 4550 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 Mi`5YuPQ2y*ALZEqCjbBd literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Cloner.hpp.7A53E17449C7C1F4.idx b/.cache/clangd/index/Cloner.hpp.7A53E17449C7C1F4.idx new file mode 100644 index 0000000000000000000000000000000000000000..1ea0369306ce476a8bb658662f0c703f586a44db GIT binary patch literal 9078 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 IipPKc51TfoH~;_u literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Cloner.inl.246C453E8B117AE6.idx b/.cache/clangd/index/Cloner.inl.246C453E8B117AE6.idx new file mode 100644 index 0000000000000000000000000000000000000000..7719458961ed369fe99b726626b13bc7c91002ab GIT binary patch literal 2594 zcmZuy3s4hh5WWO3mynPHE&-ANAt50`F`0&-;Z?y=M8H-n5;Xw$QNMueAd^kQ*p{2ewYpZVM!oz&bq-(;N=bj$7Asp*F5(L4vI+^9Q)Bk7DJ zuk@E`-=$uw?L2r`^~U;WdtduUx%vXT_!F6<^A*c&E}qJ}6j0$|mNmpXGL$H&8g*cjC?9B0kl+V_$|DidpipA*7>X7o|%9AVVZaq%2av@~{qPxegeIHO727B)a=lC(O%eDIa0B^{v{BAAk;xL`sDCcIJ#KHt44)sq0HMy)LG%$KI}#Hf zp&6qfNcqtlg*%(ykx4vEhRIlf*mvbi-Xax=0>Smex=|gjLojUnuxQ7t7Ec2b9W&H1 zq|Paz)sV#bAfV-#U_;iarD5m0vU~iSvuvQ)2dh@0QsyID2$nd9xG4n39U(ZQRLD8O z$DN3ja-LiaAI*6i8nnq}e(!E2+-${uyz4Itx~ z1S`xX<|dr>`H${zoc?yAjI`~$S}fdgJAgNy^5M0VWJ>19b=oa#bDkD%ZD8R ztlTcX_;;uL5GZ7>-?%#8>B0sG=7)4n_=*ZbAvm+>{h!jw*qD4xs z(i&`3&mMOMHthEW6nXee`%?drYg0J>OmmtWuW^gV#qG z`=C;udgS>oTI+w5fEjFt0Av9X$(#=t8PE#4Qc9d^>)ISnLm?$k{apEZGlc{!p-N0Z z+dya{Z|Pe3D!(VVG!vR7;IszHKA-&LO(m4cw>+%uoXDmMf+u6RAu}0a zbx_-R7@x{F1v3%;lMcITeBI9w7gS5MX7&ySRc`fDJM`yuH$mRU?Yj2DxS_Z0 zP{3hQ8w8V1PqDg#b70sjCY9nBJ$@DP{wrtu*sH{zYdXX(pj;NHo3I?X?pjNZ%2{BZ z9zT_-CT_TNK#`8z(+d?`0b2>AX$>k{hE^&LAQ_S^2 zIvf*GL>Qp-$pTsQ>F!?%o&Wu%;bAVA3kyU#)E{xJxTW|WRFid3&hAFx!#*Mb-;B@E zCXkp)%s_(s1uGVcJX#(=Trko^k7hrFV10^nW@>tLn)@MdF~1d6C{_+Y@YzrHcZ5d2 z`3-_A8egaf#z#i}b0$a3@gJSf+{8^@s@^`)!7(XS$^`Y`n1ZTcf@a{DGu4?1WLOi+ z@kti18-vna4AZ?dZFS`>0h>}yjlkNK*@-gWxeZT2-e`45b5#Xv8iHfOw}#Gsp*1lZ THTtuEuwrwu(Uv7?Q3&!krlGG1 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Compare.hpp.F0DEFD4D9EF65904.idx b/.cache/clangd/index/Compare.hpp.F0DEFD4D9EF65904.idx new file mode 100644 index 0000000000000000000000000000000000000000..0cbe24c217fd26b52868a309d3bad4adfd19c029 GIT binary patch literal 9760 zcmYkA2UHYS7sq#CSwI;S1r-MAopoVZSb9fTdRwX#ktRwJ5U~R`z=karti;{|YHX-z z)EFD6Q4Bu&ylnLJHL0|n|U*L{&%7R{ryLn@p!%&fm8D`C#Ugw zJf0@`Up%=er%Z{*n`p!1P2I46UFyV#QqA8xw_ZIrCCBi*Nl)F{Ji~PvX@>2iHa;2l z;h@FA72?;jUxY{BpPT(|de*oZ`(~7wPE#{fy?x{5#UsKioh`FxzMHelmdNY2H&=KlMUf(@`~04@7QdqBKNAwT2a4df%btMk=fY>B@e$^(WUwL4Brnx$vQ9&*_-a6+;5)x^xE zNM9|5y=qIekNA3(9hIqzwoW>Kirrwe=y`!z^ZeV-+CN_XbAq`WUzlwsCWYhb-zC=f6eQZg_sF&g>1NiXZ&4x%Q8Fn?(7Uw)UZSd{ec%b(Nm_2cEukFK>Rd%J7oo6dWzmF=>1tQTW& zYipQC$1GzpPwuy6%A(7atp%F9|KeQ_*j}%FyrO)7nvdee7N)*?%U@I5b~sKt@i8ab zDl|01;FV!lo}J}_@i~)4dpE4iURZs1*RqdZ3z-kGnI(n>+udJuUElEW#ki`)078S_a8qNxk0<9w(a>~uVc|oCraCY+I6fYxYA)&pE#${ zbF#Ixv~9(M=l2`p-Pb(Ky%00FH}y-mkLU0z{@B=tI|Eiu6FeXJVsleXo&m3FO67x& zSFZDU@BeZ!e+kH6lU zBS_HE?Ww=-ud!@yuj84f8!Ia|Uj1y>ab?(qXz9B{QAJ1VetG=z%IABjo%M#B?w@-3 zPPyP~WV-hX$rT;dW}}Tsb&1&zFW)qp)o^nEn=?Njaq`gl{jiGt{6!CqEt4w)6dJd7 z`IUFRGC6pnZFzZa{Zamb6y5bzpIw%@zFvR!$`|#WdCv#E>eJYg_MpzPcIbr<<+=w- zc^czP?r4j9b>kYH{#M;QYiRS!-+LXkLiGA>tb6E`T64!l&v2*1C2hmN&Wb@piY_=G z^S!?MzZTB`=jS5zCmGfkTprxmow;D=j+=eI$y>A46&aJ>{wg|G+#&N6zI#5i;iBWxm+_*SM8o79@w{+J zxA!u&P=R*Q2IX4uQ5E}?rH@_P0}7vXJT`F+eHr&Zzk565H+3W!MD|8b?liBrd9-wL z$+r6&*BkTnpZvQ{y(!nN<*mVod{@0~chlp?@AJsmTK&PP-uvJD6KZFB#WVjHhqtLdyH@WS>io#SfTn}rqE%* z{iXo{n>}L%IjZqWCQHL&WQjv!bgPSf7n+aa?OuQWz>UVBMP9*H#(fPB?IxACuGY|N z(2=|r=Hq4DCS_qI@vJK4XIMkOGV9gbp>l@%8D*6YRviY>0P(k@m(R^ z(p5K062d~RW{Nd#e2}f5wD03nSB*(^4`+R`)yOT)=-Z^X>}gQx$Ug4rv(B4uZXU|; zG|hfLSDu(#>Lqy}rIqvdhDo)0Ukbuc?|55gul8v-uXtMCINm@WFUBG=;n~tnj2f?k zsbP3k%wYk0SfE+S#IbRjJk&@IjOuvbL>!*qkO^O4cxf8kpXQGa}QMc~bIb(@K+|)I)ldyewcZ!}UpI z6G_gQZj|g;l<&Q2c7T<-!qV?&t);A`QOUqxJnMV;CW3=K`BpU9S%KiJfJ~dfCXi%> zVw!Bl+s|bSc1lN4@*-bwkx$3~Hh_?Us+2S>9NFvO{0vXDN5;A@SB~z--p6uQ$bf#p3BHI9$T*^ub8KzFj$@#6O52pO` zgFL9f9#kNtkQEZL#DS8tESS8bE)P7_73P1xJVTX-j;LhdFJ7KfQQ_LFj{kYlX}>72 zUm%$sYe$m#3uv-y-5-1YDQ@?pWEY?9f}IX#g9#aQaCzfYj?)9hSX1-uETu2|* zhmg~pDVcOn)uO4|CxDVtfs}9@%Mos(HRV2SU0SEIMfVl=Tpdoy z*NW_G*cx}%osi=#DEaq@{rT~#Npeb_QDV=)c1N%ggiO+<KsmMfNu2 zbYWcxnQlzU$wN;?-S{vriIQs+*)>4gv-X4xQKRIsBd?})Dk!H>(pq3mu8|I_L%0c6 zlv95_?a7R;&EqI{Q;EF^tBhi!2$`x+$^Rx+)XexAmPN^WK3fmh$dC0S11v_PLDj>Q=KT6qM*F6ByM0n<={c6WOP|wlCM}oxv#a}yrHM~rIf4S zvlTG2C+kVbd=Vw16yom;m)OprEpE-!*4CDr(}l$+W}9x4QoS4UqwoadS*wozG*l}$reSn z1WXbgGz9%Ptkbf$$f5JLNtcZ}_3?(y$)#R0B`y8RO=LmAh-1=7fVxH6ft-;oYfDH!J|#Dd{8Ch9QhJS&9ehCtRLvkZ zh>&tkN($#IO+Oib?=~fS`D`ydZ6Rz3A!CP8@>+_Q)`j!BcPP0;fn5S;WW`z$vdE5- z?OGlMn)93r2QPu9VDbpHi8y z+oPM3wTz$^JcKc4OzO;714;&Vu;w1#b#ExC!m5yrBiIonV~QT-j=0oYp1Jkt2Uj8} zA^8kA1CnpH2jvuJWoTs_IMX9gm;)}flF?AnAg@yR%TxVkufTy?YRNCX4J`dYXML~8 zzK31(U_HpZxk8$6htn~kQNijjl>A4L{Rc=_)|HSMCX_77%qsp$K1`qwX0*RsU;S>Q zu}ij$9=E2U*wDUvyP|>`@d}*OmKq5n-K9||(Hz5Y@WVJ<9yY|hYq^^e3^x=R+EbTE zWT0U8m+K5n;G|4A69?Q9kYOg{`$-Wea-b!a6jdKl5=!&da!{*ff6p{7awq(A3xg*Ov9>hI|9j}q-TTp94-cxBLo!^**S6SxE`oF1fOf z_1Ql~&prLs6|(tpepb}b5$WjXj}jXN*f{78aO1E$fJH(>fQ!Ul0ODZ(F^OW(*6fZ1}kHuOzQq?>I7O2lCn z@clT;?cC4xCRVrQFg%fjdK%W^#SSX7KReL3K$NJ1P;d=2jb8;U>th}h(nuzalC^d4ov~Z zPmDg?xh6=E4a<;mG8-&*Al+mUD6wsT;m|AKaHB9s!@g^4#=~%3PS=FC4Md7{T~J1? zoN)b0N>dJCaa^1Qz9T_8#QC5s_P+S?TvyTrz`Qsw8@!D`x_L#Q6mEVi`nz*}E?|LN zpb+m)kj{ZYC~&K{|T}p~OB0hC}m$ z!-rd{7Sz5fnF;0Hj58C{{(#6pv($c4!b!x`M-u1gA(5lRy9Sa&zk|t*BiyF9jM1G7 zYZHouE?AX7CJM7q{_=O++k_*#<^d+=#Mac;66qwCp=|ECG%v~NzyiPmxByEm+#sa^ zekf;6Q%pC$dZ-exU@q7es|iT=;3$+2uiH!FZU6d)8Cx1VQS(Rap3FE7E6;pzJCC94hxzUIthc7bU{S1EgzI7|PV!$MO^l-Bto-!`axBY%V zn!Hau)e?Jf17Ja1kS%Q+h;$E%Liuldt^O9f$r}N4eU25W}i7T4^5 za{i0lXIYyW!s~PThSWYkcK^bh4A7#M>OwLL-c6>xRwVI-vda zHW+T=XyV<^?U+n3nT+yc$|j9{5038u%z<;TL^}&o>fncRM$-`aCDEU|0rTKItf`+T z(#b=H5?v}R26}B=%%1v%m3HsS_Y25yZBE+|A8C*xZTo&whtn~{QcI5NcU8uuLH(5hn`yL5;{V~%m`$srDHIL6TrLL8cIjN^7e9GYy5 zV}A{CXsI!dRvO~aKw~_gJ-fI$f50iY!jW90HF`LZPLVQ{OTz|M=Z}v54KRDo-UeS+ zAl>XEP|n=ld3E)P)n~!CD61&zerv?YAMDU!c4*3Rc8lgmHo8r==OL{XXJtvdSt6xY zekjMUZmr@oy?+2^CNXovn-64~*#wkW_Fxuh=y4V-x)6u<9ph8aJ$N{sf1?@F>bvXv z;57xAsGo`weFO}Lo*sweg9vfx;4!Z9HPvQA)Uex-)`#=4L=y&5>f?tJdwduUZ9NX( z^Ty_}>&(_R81BS5IpU6j^m7`E^6P@itUY%3+5wB@VlA=t0x6C4L;3MPog!oT=)d7@ zWx-iUa3??pTcr1spJ=J~688a?3f~oQsYa%s-|MYxybEivaIo;`m(3#6 zA|EC84KN%&HsElq@eqek3mD%LH`dC{eqAS|H5HnA^=o!aQ%s9cPCIdD>4H!eRl^*D|V~jNxLe@cAT1V;p1rQR2%DmI~iC zaH-sNmvhqw2fTqbByx$C*b{=3Cil8?|YNy2tH|GoTMEQ zI3fYl5vlF19ofH*rRfy*FI+KPCRQo}>jvn?p<5zSZ?s+v8a^WRi}dF(c+(SYkZn+k z3nbDo)vy3tY9fuYjY{!dPNZ?RaVcITB26k7ljRIndlE1$Gp%88=ZH2dH6vvfKdqA2 zY?*ltgYR8(++v2sA_i|DqAe#{&gi#QR*_a|cvq66)^XO^SmB5i77OPx=#_{T<%p(X zAtll#)usUJHj%c;wt4uB6Df`nXJREG(k{j>6JL5nO41~SSWk$wPqxp);zy)Iq(d6M zyNHygN(->xB+@a#F$Z7EL^|a;&BCXdNau9tVti{5>5|}*gFOY2uF0->^cxjv9mcp# z#MXfvb)V=y1FaB|9x)!7_--W9GtYAtnqeZnlD+cKViV~d=beq7mq?#TpEN8{MEa)t z7UOeDq+hgOI<^=@`bYbx+0qjfiij1n}1hqS=K)0uUXv&vu;sDS2Bw$A`;RK z-Ao}BE{S|3g_|UEerxUXeecfs{qcJ|zK`GU@%5Fcrs&PU|@>>S+scJ%;Btofk`_9gQZD-CXS!~$g5S<_n|BAwp1Di^gXfB zztYGd$jG#B;pBSnJ)PM>Co_yk7qyvnga1*M@P4>s5pfBrW2jPshLn`OSqD`pJ(^ZT?4cFXg( z_l>u%_Pg#exG3W9-p!^NZ$Gg2Tif*hCp!*fCoj4DF^NTN*tmn|JYuXE7uzfA#?4C@ zF)HIvCvkE!wq1ag`{LdE&(w>Femkn7A2=_#z3}TBgA>N1>r<}3DA=&8TmP3$Ha+)? zY%zA)$>DGAvKi-w|FTcKe>lY`JU-#?x<__<&W~-&Z(q=*;>q%Mu~*-w<-dvYEWi8t zX6-DKw-I&JvgUVY&+)qDdUf!#V9H};|IpmS-$V2E7+OR(3s042<6nnV$Uic&vqi%aq`+gI<(YbqlQOXi(?BYxZB(wtJ|E z8iO;Z{yzG+y3^ZVD?j+YUH#bXpP!pr7>+Y+*l}}%o%h++w{8qeAGu-ujBU49O}c8Z z>gZONp}!Y?3tD_QZIz#e%QF-lNLADEeIr|TOdV=$Ja5b%s%PrWgEtpio}qKbU)=6= zYrw1a_iA@5Tckz*{QbxzuJa78^vAF>?H?cH7=x4BvVtGyHDioZT-C*!6LR-1YCmVK zLEazlOE29xKFoR07~_)Q^1LhWZVWy<>wMmsX4CoHDIZ3iIBGG{|G}D9_rxFLY)!&O z|25BbU`4Cbi!#@o>wYHOz;>q?{XS=~5vu)n(DmJOqu&?=|KqUb>f0MHORIj$4%mW% z!+TvHv}#@dY_pO*hnftGh)DJQekjCu#-6|Yf4I!-M0cIBhP}|yyZwo+=f;M5KkPYw z}0)%q>Pyz@M30o_fbzu zmQNZoww2B1a!Y1sE?XPB?f6wSDjl-8b&lFM@pZe!4z`b~+xj0f&kLP$$t=KW_0Xll zrOV46J>!>tGQ4x5=8oyDCcRem*z%xjn4#zIgZgYzt?h3f==1F8{JkG8KKTCPw`;Ut z_pMehtAE~gy_vaP7B_UgKGU!3v3tRuB~4<2_|T=Zyf@nn z96r9nBUshR#P?^_j_0GRJFYJB$>|)e>SWaRpsLl>CU4rfxBW}Cbn-L&KfaGuna|G6 z+hddP^-T9s|54^Sow>2^m%c7;(KR#sJZT!2($Bq@;(d<}6Nwt>5gjuy3)nIeb4=U z;?AgxxBG}67EHK!WmRQi(?@^TtREXzQ4_v$$Gx+QTisoI@{bm)BNiR}7@logI)8JI z6E=PFe)|y}Hmzau;$yAv7@t_!!&a5hbWE3HrcC-fPn!;7PUqi=J^3X!R?+u+cwMjl z&8I$&-F9jI`YYeUyU!@z+sVJF*<{60>jj;nd)&^wdp{=L-;x@En(SNDGA{Z`%fQ^n zznAx;dsMZaJm>WBLfboW*A2V3Jy&NnDPvkBe=M)gcamLbWZOmHmX2&Xzp${L8y$ae`1O(b57Q34JT!es zw`*1YsksHUhuUv^zO%*Or+%P2rI8a17A>1QWr2}_!SFUiM!(*&8#OZsN9&M56w2U) z49+wXjTAjZtxq5KqwNiDQV9Vs&Y+OS((KMSqxV85&B?dATKMOW8&KHwe85u z$^*1;fX2#BLMN;oB*@COUH0DirAe`&tUQIdQ%HzJ4uS(#_M~KGw{d@a))_b%$;xab zWFs7>qu_{@eGO%0V5^Lb1zS=SvNDzvVo8oh2qUm^uA8hhtXo5u+O9K^m5*5N5sTkG zR2YhtQ|x7BR#x1Lb)FY3WMvrQ!bm#ply>$8O~OzQSvq>ae?B>VzH2EzF0Z9xvVtV@gU6Xw`?m}8H2bO@_KuvJ%0Tf zKUsM%d#gkLiKnb(<#kTDPBK467=z!f32q;3+HP zK73yjeaOpAR^~HYK7*BkLLgT5Ya%Nh7pO{KsouAfl?AL&z~Z+L5r$ypc$KWY5aMTe z;@fF2S-F7~HW1|?VGvf1Y9%WttjoPnd$es=S$TpMPLT5S61=c7NFgg1&ntF(_RH}` zWjZCKQ&`znXp5CgI?2jk+b!5}v-9&Fa-0p6&_I;!h4xt4hm)1JYrob#S@bYKR#q}X zC8?tU!T_us-cnXtC7q8AyT%HD{ImwdwtJ9S?R@jVVzP? zV%=<4S@&(J z3`pBBa6$a6L2{hy8DTw9_7HktKj3EPF}ulVznV=Zee7Qn19jSuV0p@ow3x6_v?TWZgYh zxJObMB7|V&L>pQ8e0F%uiXTCtvNDYk(nuKv2mx5R+*?+%le!LZ$cdgIE2nZ(@w=^+ z*0@(L?IPGRkle~SfFc>SxDrKeRrzfw1x0a{K%4{DamQq3~>E-T%J686hWo5g%)xpK@Po&Gr0$L~_IqE8O z#mW#9S^0NMuh#P?7@v}r5gZpmM$O^EaIBo>C@VL4DeRQ48QzkW zn`mJZDfbRS2dwOGBr9hxFdRq?pHmlvY*^tOS*K&%{LCM$1G=+QFoiq#`oxtS6+lN`AS zE?Bv+y{vrLvip3~$SxJKvXqmz7*NfkP&g}wv*vPz5TFWY z?Eo|#ynKjzu|^t6iIJ3pJPJgiNXjLW@&N$$tdUg|nrk?>IdmBuT-ju$G2|Qv*CNBU zs5w}67$l%33CI|1Eew(npM(@p{1_x7K3NCsMf_eJa0nS5Ld~@vIfe|6H3CbpuWf4W zCvD!-d&(U3XTP{$7m5@@1T99;=CW-NuvEocJd%gfKxr{ z1OS#)dRqvZB_0$4tn2hPxtet*Bo`K!dYfF$Vi%IzEao2P>`OHz?IxKPlWCP~E)$?m zrriLXuIo7e_d`u3={MB&8}fpI5B0LbV1zI7k?Mv^YESfYlZ5(}4fS<(}N zsaXk6n&F_a0@Vmv3Rg@u)S7rxMFxqtzaVO zk;rw1fd$Kxxb{h0R{-gYj&Jtdeo`PMu!9nJP*(C3O@RFl$`t@S(iBJH$U7>)a>hZu zoF6p16;Rdf{<;;~@5OavlF=GQtYK90ij)9#4dVvjdGWY0<&|F~X%S^wM75F)%P3St z*%VP~0I>0)x9wfC5d(!#W!ToYV5O5t3gI#mFC#1HuoAGpj9dX+4tnYNIA)D0gMX4j zDO0GnvV}`P*A%M17D%U*=~P>J-yjO5Q-SH!C;+?H&YqXCJ*XvluOJ92Xv{c>7mX@t zu8QXux}+x;m=jqQBUUlyP$d#jRWWt|VB~LwTc15|uiY5C^W7D&Gw^?Io7jlZY(GKy zVEO+KV+OzW7{wo>6i}iV+^6{almglr2IUlAPAOn1hCwXN$I=S0{4q$T`D9uF0~Q9U zG@nW zr-1d`wRs18U2E1@k~(ZaVgpjauqXj_19AfZ>CoHGquFqT#sRyGdYfF$t|uh7YRjFG zfr^bvQW0NR@e8YxmsA9(zp!oq#;08|Z0fn*ib$W*;!|2BuR;h=Kc(FOfKl&?Tf%>5 z)W=;-v(*a8!_WT@EEDisauA<`6fmq|a2fHJbwB~)3y=afPO#zw#ecwk@4r^x7<{7m zPdXri<|AkYEGV!dn&zW*z!sX{qSHH*Xg*1&cc#;PI;{XZ9>8t{Fz%a;X`FvIZ+m#p;vwShDfSo}Mp0oUORsqu^1{Ew{p#xsA{3{*sn&n^X zfG;fng;hW!#c_OR`R_X5C}((-YYv79R$Sot3!DOWj4-&u@mDwnY|&$Io8xbD3fSGp zppfGW8^M%6{oUVP$d)*gp|6xTT)w7Tq z2jHLhn8Yv5`Z<%s7pyCT5l01K9#IKAsSR4{?_{z8g*uVD1Z)TB0+Y)IlYg)@X zK>13*vzGM-@aw-^H!m((l9o}XWmGG$maw#pvMHm~0N^A}Z_7(_G6?0hC+(+R>$OoBH4ju6c1@&2vKeP#zD zD?*)$P!HIElfd*Mv=G3g3B#TCz5J^akLRIy&N`m6gAOf$Zt+|XEs)6BCUR;mki^*~ zaSmEw4`;QfaVHYTv6r*ns}t#APIb6(Yx3aU``e}j)^#FDjbOwG#$G-+BcM$L(-{Da zrh400H0R#XSPFWLDEeFZ#*5@Ej}r4Jb6AT?K$S_VhpY4IzqlsEPXu=`3o1AzXhx8 zMLuJXLau(UgCKY`SQ&8i+K{`IgRN9U{xD5_pJ9bKO)8FmDVso;b0UeL~+(&nZY_nZ);TJRRT4-bN9o&Df6E7 zB>CFUiu+kx7@Q=~dOzC%!054wGfxNH?M0*sjF`ZvzXAfxc0c|1sgb-l!fOZ5BSsxX-i>vERq>iSJRz-X>S$%mv9^{$R&C$6qY_k@lWLi#fDP_QxSWokP0;m_2%6MUx?a zNYag*xUq5Q#LsTz95!<9FqV!FHM3R(=L{sV`iMRb(Edo!#m5JNyIz^SSjvrJZ* z$$HApaRhYFWQPGLbMM*kq{(MVx{ng~Q5JB(f}h<-+3cen0le&gcwNu|egug%l~ty) zo?viEpnEDi3;?uVy)7?|FDR7PtX(4_dnUFYO>*`IiEoe+Tp=W2_Xarw*!#sVdCS<; zF+^HHD=X-Ba6}^kp9(q%!0(Ti-#8ncHdZPxT1=&_;g|_aQ)!1(+8qEKNa<~PX*^<~ zyt-$6vtAYdWr9=)tXRQXz%Di^1lFd4bp!zByAd`fh_ft2p_j%4Y|iU#HE7(3p$v1j z4W5z~(fub<4Hqf#B4rEfP6@QWNOb@J>m9w#na1rIa;9uz_Tj{~v7sbqZlaqCS`i7V z-P|Df@4nJ1uD0M7T$c)7hl zH=Vri7NfkyxWnF;1blBX!2ljVE&07ouT)8z&Wh=*4Gel%n$9|=Hx7#zESpB%ns8N; z9%IF0I!o4LtnIPJB`Y|0`{91!#=9vXhd9_p-Ngk=A{_MLeYB76{ds@wU;rPW9Sr0H zd;L44`9h$#GE8tWGg9kMKfL6f7j=@u!e@ZLh&>MqFny=LH zoOn<3?`Z{Cuvqbx=D%WRi~n-;#UO&=BNzp29b&MN;Wsi0Fy}GY%J5rtj&oBOK7~=h z3L7hqF#Hil0Upj6oMiZuItRWN82*CJfo~bZm+2hmRxx~)&T(!7!#6P6J|5vLAFku{ zv4iDz==gXXWBFq`C&0NZpR02MT*~sLI;XdFEMKQ{SR2Kuqc|5>C*i!TKD9!DkVds=)?TSLua>3iDYJ?#$QS?dA((didv zA)_cX+HkZjzF;l=X`B3^-9Im*=8(5NU`!t{j<9@}fY$>i5I~~p_k>4xHc8S-TCAk4 zz^ua3O4`1Xb_D?0CME{C>!Q~q+{X!1r;Oj#Y(6Q105L#&!!f`iz#RtqQujrR?BCf) zvQL!w3H#T z@~5o$RL5?6%Gx|_wA;qa@eEtkfB8ZpwHNK}VF!!^+t_!8;PAF{F84jYS(0T@Visiq zV;L4^Q8rnWBY+)o!&euNAGw&u%{m#0$w&>G#S(B$Mm|~~6*W&qHUMCR&|C9Gb9V|_ zp39Tb{ufU~{7MQhjuqo{PTu2KbzI}gd-#`;p|us6ONlg=QN}WDVT(utU1OR40HDm9 z;&x7MV8PpP@pqB)#Nn~k@yg)z><-G`XO=y0EVUBwtCI|K4^#PVBh5hW33`c z&eExN>6ABgeF=<7r$PaA&RgBi;G3r;eZ`8eSS73%vGf&d_lk7}@Zi)R%kH+?CrNWz zF_*Q3y2a95);5=Q0&x7Fksn5%IUGq6P(vweC|7xmB%n(T)fa$W*1{RD!+fL3=99UJ zx$HWQgX2ub$@dpXz9ij=Om{X8npnCM zb=Zk|!Wj9&gRSG6n{Ons#vqFrq=wav1iHkao&flogv;xXUE4@{qlux3F&yyW;7G%f z#xSAcU?SHok?Rfna2O`lWck~1Rbz$EJ4fErF zC$ZjRmG{_ou!fg_&pkE>fJ>VV*;MPySR(Z>^{|8`775yUI6-iHX+?p(k4+qr<HQYBLK{?v{0*R{u57PEkR-lvVj&L0ml;L37{80^udI>EeS;GW#y%PaN^a~%O8x# zH6Qoe`GgwoAm+EJp{X61-wvP0Tr3!ooun3vTttT!*ylpj z+c~d8lSz5aZZ_KlE{)<~6!BU#0ZYM%y|aYN{v-*@kXVMyp&ejV8B&!s-ecUZcos3& z)MgKf^9UmzVN@{eNgDyK(mOygXrvNpy-NZJ?A5lq(#a;Ab1CE)7&)0AT0oZFOnB1_0Hy z_K0K37~7P6q!0=@v5+$d_hSjD3OPFf^)7Dve`|4Fl6Dun+e3fE!tQOlcZT5GVe>2& znpR1&GDa+8%%Rs|VHu+;W9$H=n62Jt^zhw&^72#2;}r6SjWG#KJ%#21$e*yg#j$7S z4if1BT6qAwS;3ca2=F>U2LRZY82Isczh4g%=}k(!NtuCNCIPFPjh;=t`Yv+}?EOiS z#;{@x>j-WmSQ^8+#<1N0tjIPQcCB6E5fbZXTKSoFg^eBwboos81yG!|y`(r|a4M1R zV8tD*IYc4>)ehDU0GQl*+gdbVgn-tvt=PV}%%}ICBxiwQpe58f3EBoaK`=FK!`k*A z!~WzjSDC6TVQEK#PAWI8psT5?wx#0Q*|i&3Dp>4g>ZSb(FHbMIm08XxVC)8UJx-jp zl8~5$lrW7+K%InK0aP{r>Gt#iuaA>NXCN^Hsi09wK%Ify0E9Tisi(UPNh8ukE-;ZB z2BsheNnF1qZUg|ZXY{t_G+*d|nro8w=g<3M_MRX)yTFMTI2BxxkbwFE=LX>XZ?+vi zS3i=ZiL{ugb0s#BRwp)IiG@jCZwo>5@ewElmn289->t+fk;4oh;{=2HVoOCBAp8ux7tI%SpioN=tZn}2dEOaPFSV3dOSObu4GAb~DHVX5HjjkM1y{}zX(kdg zksS==5^%~yod8T+F}zt#h)*Vw?xMt9lsTB<5>V};>;Qm62=N!xzv{(JQ1e|OC@-AK zESAq=6|hj4C**FrHP7fG$!YeMykh+ zHu!yIH#cF*_Z$*yBr8U;Hn8}YfMX=<31CZ5)AjRu5B-Zsx6{h)v^zL}NWgbH9Sq=n z_@s9Oic=+N4ia;8uA}E5`<%w>=tI1>54G7kI+w&6MvGx|OE9@5pbVo`0N`j;Z(F?P zdrweupZF%~`?PL<07=IadHP5{lO`sQzyv zy@onmL%y&ulfdL_XcmAQ9rL<$du^Xjq)D`xL|Z`Xlz>eV?Fhj6@{>TXPmA-3)wz{Z zZf(3rgTXe=YFpz?8yKVXwhd~&BnE9T+URiCtg0s0Ng;$&VmM_BOA`sS4yQT*_+&jO z{J?t$NqUVEuQlFvz|w1!(>1CSR9O6|UhKqm&u)@fx6tAi+71pmB;d4#?gRk-tGDH) z`JNh-*V4<+{$06SI!-SX(s0DeTT4NYxd z_K-+pIb|&842yILc*Sx70KPuAT&Nz_`yX;NRE?C?sDswLRE-8yqp4b81FPK7c#{Y} zvVrZffgJ^#H&6*Cc<>kO1!tIHaWKR_#2IE-9MnHE5+^DX@tHcVXyu46*KstfM|{1G zUs*WChwHeJt)=+2jR4!Gny)!RCE~YSqxfr$4qgu9w?|~FpFQI6Nu*Z7>aNvZs?oG+ zG!MYf8{f@c-ZJDFNk9z}YjkX&8lb&d(>4V)?<`- zjIxBENWk_O}vZ z0_LFvdVND7S|EZmjnFxXiQqgUI6v5rOZ_X}HDyHcYm&s%jCi_n)|7zyG~))-=T22zz`Ls1-)1U@ z)ez|iO8h{XgZVB2)d$KBz}kD$t!H-|AxW>Y;#D1ojjOEf)kcR6uWnw6iz~d}kyzg_ z;v1chnZ03DZy5PwW_2elQfB-AAxRS%F;VB1Y9gafY`mok+uG{?+j#|#)|#*1Li@uJ z{=ffBD~_}T@g+L*%0t9I)B$CPFVg|<5&vFi=GjN_`*d83PgDHq#(4$5n1ov;2M?kjC<9I_|hvS^lbyJML4Kf2!k-`;p~8>bT?H!3fNG$_H z7=u!3VktEr>|P8isS%Y_DC|98P(ux`p{BtUhCu^0yn&hq`=uCcq9<>n7r-VA2HWZJ z+v&Nm@rA(wddLBKG8~CuaDtwAf}RhvEe6^2=xll>_^n`&M~CLozrZpLg93VL0lf%L z4KXO8N0-nu;o1cTPw4Sa=(%w10)q;AYy~|VCTa}c(X-#tE5JhzgU|Hv&-64ne8(W1 znH$cm0;g&W)-&VRGjqXt34>T>WGpisJdZI*X8I>HV_>O_!69bqA!ZR6kQk&fL(`b4 zV1{6j#SG12rowJ32Kh`#J~IWpAThYbjK9Uqg_~6vJYYsWU}nG_01Qf*QKifb*mc36 zl9^b^%m?>K4C;iD6#UPWNoXIYLu@i$Fc3KX* z1l&k5C}77Iuyf%M0E2t%*n8}3@MFT@5!>exI|9sp3~Je+T6O~1{}@DY10%R`V8LM! z%MFR;Cc{D-gA8tD1~(n9VqlQP4b9@Ff(3~|E;lfj8wVd(!r(eL+q3Btkv?Kg zAF;Mth4+Ycd&G7HV36hd=j7*cpU6a8gp@_7gVvZ)ga#F%XHG?)1#gl z1>mR;KfUG8dp?u*ZeqnvI!o70ta?-9(iM7$-mZo;zYziEG^j7VO|ItGGC*?i?_!vP re-i`#U5g8+E^;CNvlfwmYyRL##q8sE?~3Jz>9r^t|7C#xhClxc4g1lv literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Compiler.cpp.0DDC7674EE65C12B.idx b/.cache/clangd/index/Compiler.cpp.0DDC7674EE65C12B.idx new file mode 100644 index 0000000000000000000000000000000000000000..4715abacad69868936435df680046362e682ab93 GIT binary patch literal 22792 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 NBgxXPg*|dL`9I;SB9j0B literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Compiler.hpp.D7B17CB22CAB9348.idx b/.cache/clangd/index/Compiler.hpp.D7B17CB22CAB9348.idx new file mode 100644 index 0000000000000000000000000000000000000000..bf35717ffffd10ad22c868e169e2680b84f0d192 GIT binary patch literal 4624 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ConstantPropagationVisitor.cpp.B15E68958969C6F2.idx b/.cache/clangd/index/ConstantPropagationVisitor.cpp.B15E68958969C6F2.idx new file mode 100644 index 0000000000000000000000000000000000000000..b9a739b1333fc94f78330f8070cea70a9b9d48fc GIT binary patch literal 46458 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 (u0b+HKTN^4L%EznV?bNM%r@ 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ConstantPropagationVisitor.inl.CF03B7DE262BDE99.idx b/.cache/clangd/index/ConstantPropagationVisitor.inl.CF03B7DE262BDE99.idx new file mode 100644 index 0000000000000000000000000000000000000000..c09137c1a6954b1cf037e76bde1e788983a22409 GIT binary patch literal 1928 zcmYk6dsGx<7{+IZ%g(Sfu*}YUFw4NQ$hZqD>afVNoHjhVf`IGs7#`6)a#6gbh=Lc8 z@^bP@g%T>Ec&n^qp_GXgX@D0rjwx1JSg2|6M`j)@PF}Nb++Nl_XV2{S?K{u+d!F~5 znVgxPzD7$BV`pcU7Z)up@Fxg@$KSH0rSshyf~dqB1#bJ9`=1(`ThKFDk{5sSCky^ySsf< z(pr6M-qxP-jmPR-Gjng%1mBEjs&^-x$;r=m#W!`OUNCijF_84>vQN14lcLYJM|;+t z4g5Q&w&mWn&MZIA;|b#z5By1V#PwZ2+wAvyS8KMm{to?wsLm;lI(6;0C5v`tzImx; zdR+Sc7Aj@h!M3a`wFBlMO*if=-L`Vu{2dz>N#~Bce=HgI!?5GQtqZo8r)8J)+uoaL zn|GtcxS%*bc7pqWQnydD|9WT3gI}v|f4w@i!OAu$$)Ae{S-T{?Zq`1u~MYLI%pP5;R2;tN|Ca35_`&C(cdv7PthLMaUMi zEd(9pPlWQg;M9>rk2FRx-%DUn3@JiXSkxfFsztpm|GF3c|2Lb+I)#Yv2onH4a-7*Z zFekUtEAJ2-79mT>!t%7ASAOV%qpz(^oYdeguyM9nVLUe;JJ1Dq9W2>U{pw%q*miG$ z37M=yI!eb5v>LAiSI6C+<@GBsdjYkHTBl$PHx3e%7R@PZ#uEuilE!B-4zU#1cbNC~ zNoX`TT7(oJPmS?en5KI%`ETtTSEwn}UH*C7sz8l|lDH%hs!lE({&r2PG9hP=%#l0i1g7CM+QQYa-9=)p6-S8Y4o3#2$Fwb{O$Qn^$S+6ip9 zNNu^V$jVtofQp&uFyFseHxIirI1OV!m_edb90L(B$YFITpvxea)ujL#>|#Q7a)5AZ z-%a9C@ERhx&4(CxqWP%LNd1Q~Y%ix?x&Pb;W>O4w|Oq1bE&o$+P z!#BR$j9WdN8!mzXTrr9|qkv-lV~Q)f;pzLNgbOb<#U@}90QJcgBm=%8>I1qtbCeK^DoRxyS8AOJ;Mg(fAT>Eg)%2C=zp z9#rF?r-(CvfdUE<-8s zWoIYtl5gcCoziozUUcPxD+Z;JX%eiWemap|zqfjTj9rfLWrOTV4}2WVS)Oh XFDso@rc-~Q9TOTK?%G(gl_35DA<3ji literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ConstantPropagationVisitor_BinaryArithmetics.cpp.88AEE26FCFB2C9C6.idx b/.cache/clangd/index/ConstantPropagationVisitor_BinaryArithmetics.cpp.88AEE26FCFB2C9C6.idx new file mode 100644 index 0000000000000000000000000000000000000000..1273a292f047923a8ceddf08a0203fcf820411e8 GIT binary patch literal 13940 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ConstantValue.cpp.3282F9BCE766111D.idx b/.cache/clangd/index/ConstantValue.cpp.3282F9BCE766111D.idx new file mode 100644 index 0000000000000000000000000000000000000000..eb932b5962c26d788169ad05d0d380fddb51923f GIT binary patch literal 9774 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ConstantValue.inl.28732739665ED713.idx b/.cache/clangd/index/ConstantValue.inl.28732739665ED713.idx new file mode 100644 index 0000000000000000000000000000000000000000..adfa3962b0840a74fc1c3778d54b1076be8bf39c GIT binary patch literal 2114 zcmaKsYfuwc6vsCZFl;uPguK{133L-6fHA}>Sg?vv@c{zb7g7iqMKC@BDu_5rN_|o+ zjwonH#M&Y+Q9(rvpe$KO)U^04%0maMgH?O2v*ETM`eA4GcjumS@A;qqxiJyp z;Xw=p30)A8X))F!Iz$4UOe3aLGoM>By(?lQFL05mY?@B7X70%r#QOs_-5kF z;u2P<2)*>AR^%CH_Vt+=USzp?<#kA)@9bDxDCF8-Q~I99XWN1j8V{c=Bbz^NzF0HAKf`uY-pJ0m zb+j5goVLH~*XUd9r3E8uV|9n**l)V|dG$tvbfBCYxtryq>#yiLSTvCKS)95ik8F#xlfJ3qRtUQ%AKKR$?dQ89F2#9f$@oIcl?(kramR}! zVRx;a-2vN;-*Ts$E>a@JT)nyr#o@nL_bnf9#OUb?6vz2I|saew)E%HI+A`|f)(d0)A*YT z-d{`a-Qf}9-MeGm4UK3xo4Ao%7j;it{H%?kIuPQW7&F|Kxx1x`hphShvgamw@~~Uk zGVO?S*|KpX!m>f_2wtXk3#O$wAH#-7dcZ35hXcQJw6ffDp)G3}Vh)Yxkur_mzNu8n z)sngArnT&4i1`}|x3ux^ez$oSv(3@=j2Ul!9heiLdS$s(QmBc0!Mu2~`MK`&YQh}x zSoBgXZ@y?fh9NE>1B1ixW(AQ!A&85!6T)DE42apdFnxv-g49;lloao2b8y0NH-VeN z9*BztVu+*yDMWIC93pptyPc@3)5QPWTk*srF~2k{X?}5(rKYZyLBntnA+qm2s?AED z&@;x>0mFF&Pd<9MLazv<$fCS|BxIhK&_Rm(uzh$`?NVIF*72zGa<2skcx1SSVtky5 zGC5Q%A7`N~(I~M|Hbh*M3lR_HK_oy05Q$I`Lt>i1HCtXzU?PlDkRy<`#ljW7BEpxX4!@)X&%RxF~ zIIJUv!#ZL(tYfT8nAK$Dd3$QumF_7CfHCJGQG@R#+(x?x6Tq} z7lK%SmH$M_OGbWurhMhdw-{)R0EJwMi7`*=01U^)I7A#V2O?LoD@1%TA0nYx2$7q{ zO+T7btPw*b)kq2`EJ^&PcJZmnV>lY zJ%Q#Bm=u~r@Df0Ch~e-Yg2w}zL*O5hus0m|hm=4hBV`aNNCiYnQfVh5_C(<0-I4A8 z`?@?lGp}inzM&hqNk9nf&lhl_UKvD*XErV|fX5q2Hz%hv-~8Y&yS}a+yK=Y&LH-7$ C&L)5W literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/DebugLevel.h.EEF1238084A8C169.idx b/.cache/clangd/index/DebugLevel.h.EEF1238084A8C169.idx new file mode 100644 index 0000000000000000000000000000000000000000..1b32552b56afbf66bc67ce03423ff6a6b15518f4 GIT binary patch literal 588 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 Lo!a06I;;NzX>LYU literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/DependencyCheckerVisitor.hpp.22BBF2B5697F255E.idx b/.cache/clangd/index/DependencyCheckerVisitor.hpp.22BBF2B5697F255E.idx new file mode 100644 index 0000000000000000000000000000000000000000..dbd6cf1a3f594bbc4fc6da389055b260a57f35a2 GIT binary patch literal 5378 zcmZ8jcU)7~7k_zSJi_DVfgun=0!f4jF>IBMAYt!SwN6AF)uK=wSpA7Vg|=#O)QX6r z)Qzi@+Lk)2Lao|XswhsVbyrbvpg4Z_J%1<0mp{%Y@2q?7z31HTHzPhK=7oeHhUCT1 znmYcIv1SB8;7_9Hlfp@j0)kkL6|<@jWQ7%6@?mb&-0>W~ebG=dIB?)_NnA*DahaEe zVO?I7#N%Py(MNw?8&%bir`=XcM+$6aR&<8<%+l7k?6B1jJ4)=ZI6gWjq+L-tq4bx@ zLk^Zckyu;)9N8LW_0-IK?aMJ+y2~f7sZYG@dRFk_uH=WPI^DL0rbo-W&2|m8&i9*l zfNocuEfnW@_6c@fx-2a%VP>P{#q8$$3*5`s7Z0{<3Q0BW*p?fcU-?~>`pVW5{nwl^ zgzw2u8`2~_9lEQ^^JK(?Pa}t#t^K#GV|4NPs-Kl# z85&!{r#-pz;K+X(E`RHEN|Slt?N(>ka<4NjAJ)IFu!}k&_IzY^Stgm&bK$}D+XoVE z{+Z-F52fBZF>*!5)`mxuHe7u=#r4(K@ke}U>ynCQUldc>eDZVure_VIXU-qKG1I%X zV?jlCuZ40#kIljlNp!z7~~ z*Z#P#AgpW7u=Kmn>YME!e;PJ_tny`4_2?_EwVhpg6~7n?&gx1Y9Z!_+mdu}aXJUnu z`gu|Jo^FTf;?1I>*;8{LnG?jOwhtd4_Waf!ksfLS1=t2CIYChPmhtc5x%#zCLAwJ( z(yp9>K#^3W4VYIiX#VMTDY3nFDWIz^ch$O$mlY+9+flGLg(S=&GvjB6+C>fHLwDbo#+QXHMAOdP-o zh%RiZ|H^9|@-T^xqN0q^a|Zo3Az)kaAQN*q6>c=IFPODFuxD)uBJFYVG<{kaCm?wW zed_Od%7qCg(J@qvG1~1;>(!j|uTl}I#L=1h%rH(sw11r;{NTxjnG7j{Lk*^a#b7>P z>)@GP@bZJVhbk3H<%ktvc1Wpgo|s=g7LkrPd9pG&fD>TuFZnZWfs-PaAvM_Su5fqb z1ekj^dOYiiu*hdf3SWs_EB8h!vC09=_QC1*Ev#y%yj|Nt=paX|0Q2_v+udUQis=k# zfun7;wn0cKR;s}KrBz$alGQ1Ni0p@($=}xBnG;~v`JeuIZgj_|3~2@X4x)l2V6NyA zX{P^LGZ&HWINHzFPss@|GXqn*Z9MEt5$S|Cmab0^;{=$0pI>*UpP~A5L~2z8(#dol zoB(sdaYc{1H(@0r-EeYWTVEw7z&uct7xeVA9bY-U>+?`~s4JKqoUO;t9F@4*;u@wMe^u-Q1F(Nwgtw8sMu z?Y+`CVh4BM+yo;vrDh=dLRpDV_ZKa7h;+cEB`K2vI05GNBl}~Cw14(Eke=8q6Uxju z0p`RRDo@Sf2?r4AjLkW8j+_%r{t^Nm5zF4RSB{)-_k@xe&7(m}{Y?BW9PsT<3l9Nf8~)nwl_qU8+crlj*M@QjTlSrn6<7faHr8{hs&Jrm1&LqT{GIWAyMZ z<{cdxe&`+|B{(`ulx4>Wh%PT{e^~Cb=K(_sq0<9x0*#gTN4;Wl{q83w$s?!;V{$=T zzYANBb@W(}0-W4K)<()M-r+*ULZJ{(1T?p*f9GsZ@JtQW~XEY4-5`(I}ltw};WAQ3jP^4-3#J zlghM*w{F?((dUM^1lS0i5j#0>xuTLAiJ>zuiFxXvsk774@^6a;G}4*r9AS8Gyqc6S zr{6?|=beVoeJa2$9fsBJNC=eh_;KV@}sE?+U z?7cM1O~Fe7h=!A}NCw`3WVjL*#z0-(k$Qfg^%fN`$$%NRj#WyM)jW0CBd;iF!}okO zz#v|dg+Is*@Q0UVu@BVkr%yJzOUylZxd9Dv5*7u)yEl8N`#Y?g{3*H%ZU&jwz zH7Sc%VC$4ud-{5|X5l1pD6TI&1c1u8PgpdDBsFb&8)oFXjl|wT-a%mian8#_95WQt zMw-zmkxFFXvS^e z`s9x0)eJfCd9Z{4iUTenu;VxYs2leO$u38`jw5kyKPC#)Gzzr}mBAMf1$<~MK>)Qn zWss`pkJS@#tjbZP0xue=ZPiWyHbs%Yb{@SwVlpm15=E+E^3u({ww$S)F_~99a1MO3 zEZ2aQy!CsO-D74H@VtS7;JR4q0p378@CmTI1KxuEW^tp;4;9YjC0SY3ySc~-m0)j6 z%2E%f3%7@Jv%~~)12MtgEGvQB_FZ(#mw#=X&&v&uCH7`X3M3g?Z*kLcbmc;x_uSdS zahg-#mE)r_AcF>m9UerSgrzco2l!C=}%eQ~g?W_HeRI{xV+fiqpaK zR)vr&d1|0SI5*3KU^_s81Xk}o;9DEJw$q3Etl}ks0mVnfG9lO{Fd?jF84#%ZJ|BMI z_ni7_Tz52z)&OTY`0>@TzEe(AV+iu0d=T&j8u?Pb2+E|9ALWPO4rt_0`6IY(8U;`R z2yg%(3~!7jS+MxuZB;HC{61NS7mq*@t^mF{3q}YHrM>HT8;jY$=)shK^J{1tDYObb zkTV)7wMsoSAB|kxTy(%s@Qh0nolRz3n&fOUfmfcU zf;SceuRL7^y@Y{Ro}n@UUU{Yp-ax1jA2~}KVb?$#@$9p75!7(>*qfz^px)gk8n>VP z;~U;#z(8YfmNkMmYz`kZOBq28Y!NTXQbkZNZa6SbQBt*!mmA0SDwr-o$KB92nJbg9QI-C)S2-+Q|0_nsU4rFIC0w}^g^ z4B#(k#{ggoG?JOgoM8zXxeMLp@Y3Qhy}RMvmsY5i!%fggtJOxpS4Xq|5tqp?PVp*- zp28>2a$Q&jxGq++92e9VH||QAYLVB*OVWGYsZf(;xQIJG7R9;4Zw%JS>_9BV7}O!rM;joI~OtT4I21>R|ybdoP;I7;0-f~)hzJ^wW#0pUiUMa zr@SOYqi)yO>nnQjc4APByOBZspC+4Gp+2HM#^%IOq*wbx=ZZM$3=7aGOPFN^TL^cp z=tml&pYxW3mb0-!5|PBXLmJ5$xg!uj5y!dT^ZqGg zuVAFRpRn|Vwf77&0bq@|Dcsj4uepx^`lCH}!t;68Yh?l;P#2G!tNY&jnzI0UBEM=x z_sY^A6#{rpvd%RXmM^`p6u`~?_mmYAY5z*w?s+k#0s zTV2IVH(WXBnpCuH;mf5@^qT&D6>}^o6uI}|$31rcw*gXSx~rN!Yb866P7t|cu*>{b z+NMX!wF{$yw#h$lS(|>)M7-}|z%~)ur{>75Np#VbUu-Uwr1*om42m#0-=cR2Q^lm*baHgh{vjzOT*}wsyJz6B|%k zQC(4wU4>so3?@CH@uA4xz{Lv$n3#alJnB4_?6Ul_aNP?nzu#ExwDht76AMsUOkK>J zU7lZF9;Uk}HLW<73E=}qDX{aqEk4Y$UibBQztKq}n^WZ`%rYE&a(r4ayJR?o<%G3h z?v~+@kde@US!BH0)o$PEmS9F14rL}~PMGUqVF0uM6aX*_l>E#Uf1ID5!N|iQZ6Iw4 zQw1{`s2UU=Fx7pWH|O_E_bURbmJpDThFRJFiA%Zg#Qa*Iu&{uzEKGC$QQ03#zr7{{ zh4}>dWMPhnxd>=BC@^7WyX|Rxm-8lVJ~Iyok3EkoOf?UOpuM0g%t#&%F4m0VC>HZCOcg3s%hJYNWoFL3k-ernf$_LW-0-eLj$teL#Gca9jJRI!2?5Z$f zpeuNJRADv%UBN4;isTAjF;$o=fFZ{#tqQY+heMH9Q5EJ#m>Qr9K~WF0OYe4npogUH zT^3--F!AvtY!PM>=115f!6d;CGl7RgnM+w5W-jARjT_64Jp2Lli!75Y2h8$CE0^82 pj%)e{6lQm1_k{U{p(r&c5tI>%i;|1EK@1K*?ufTBOwHRF7yv$-Yjywt literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/EliminateUnusedPassVisitor.cpp.F41EC631E4D8C65D.idx b/.cache/clangd/index/EliminateUnusedPassVisitor.cpp.F41EC631E4D8C65D.idx new file mode 100644 index 0000000000000000000000000000000000000000..edbcf917c1e15a02300aa079066ee09992283f07 GIT binary patch literal 4626 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 a&Pr-E)=FaKWF;1ip=`K32el*N%=kZMIdE72 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/EliminateUnusedPassVisitor.hpp.91540B274712C8C3.idx b/.cache/clangd/index/EliminateUnusedPassVisitor.hpp.91540B274712C8C3.idx new file mode 100644 index 0000000000000000000000000000000000000000..8db105a0e8596cc1f23b54f186fe2e30e7903b30 GIT binary patch literal 4314 zcmZ8j30M=?7M@91k}#M_B*BDavXEdP5iki5MZp!t1zd4KWpS^Bd+vYF|DTMDjEJZv zF>LUx$mNS>rzSXI80LZgQ&N*ZYr!$>r3;2F-(EUl(So`_vMsu|#?9*+UF&?QS4{P3 zFXFT?u;t72-o>d=LuOsRb>+#pIi%+F?w(P!P+ zyyj5Rj-~uNF<<2Tn*2x4w6(qmtnW8$On+D7b-Zl<{>oQ|B~72U)lS0t-FY-%{h9Qn zSEA&0{8{eKCBElU%r1+w+H*>_aF;3d2|-m_>*)ZiDlPx7K657@o>p@=a&&e^OMP?< zS-$5<{ja)_t?i4CBwCuQP8N3T9osN2lC|mO!>Fgq%*qYVGJ;cc{HK-i=EX>s2LJq1 z;{H>y*N-J_>vcVMrM@P_js2Ey_^Fb`b3R@_%fr&c;&zAFI%TGq!U)!><@8DNYH2HW2d1FJaGT>!knnHZ@GjizI9@XP7 zI6eH1b$apqNuyslo1|A$$4^W@o42KAYEeXHYR2Vljc)C`j!M?*4c6?fakunM?}l7+ zKE!5qyLJcnT|cb#)8@cm_(Q6%H?5vs5s&LqoSgBk(-Q9h)P2;wpRZAI#MlHtWIbmW6PB}kaZs1pzJ$38GQfn|OfCv!T9uWWGR>M8_%xIxK zULjKGs9;gB4&%DwSPvIZ1kN5B9uc9m> z3ySBm?eTS{(#KqJdhagvYe{Wq{Z6f+o?!*2O!oA0g}f(4KOns|J)`Z?h(&{4S)?~c z2}psT?SXM^r$^-t|Fh(SP<|vv>VQWnP>Lab%gUX)P?!8zdwCK!2}PNOW&{u6Vuz=? zCGlUIp7xnWvOED^DJk`Yc%@(8g}HpeGLqFDmi;(>o#`c51+O(|`8qL+MBsR^J><3r zL>GxB8={@+0>((0%XQ3yhh!?L4yUX-_U zP{*Y#7pxoX@6YoWzy=FCavRgEceA^It06U=;D)9rl(>u6ZT4jOpz=J~o=&z0M3c!! zGQ+v`IV4K}$#ooEcUV3t&C_JNK0n+gxtdgWCU^CqLVxoabhgW~H|gEE9G}>IR>`f$ zXYJ64*O6qVQ6e(p03XvovGUUC1FblfRdn$9HRivN>C<_Nzh3S z%FHnffT$~R>)fZcx-drG^IL1bKD3A!$S{9?`|{+IBOWl#*unGlo5R$D8QxI48_y;p zfCpjYEG!bXM(gsW5rsiF61En0tcfYH1^S$zJe@o#$C`{Slf%6blq^6N>G+bf<#NE4 zpya;t!SFTV!p6w#W8;P~D)&3OZf5^1&(REX^@()}hSz1$I6?V{ef**GtP4LJ*7#W` zAhTAiHNeG!RN~x!^lQyCaUV<@XcYl6Lex6VEU!<8HQ(*6vDRnAh)p|1RL| z%0z})9TlQ_b0cpa>Og4^sR{}ss9@hC{Y8#f3d5Yd zt!R%|_x7a>GmIhxF+GAHcjKqsp z_y<>--7^_UfTCzidTzmG18&GnPb)CPtYUE~dPYHk1Qoyz;DMmQ#6q$3qyi_HR7hp$ zF$HFrP{^B}OkmC+MwX5m5%?{mT+Q35rPpJMx1+~Vr&Pq8hO(*8oXzpW{Zp4rkrJXgQTI}p+`1&FPxZUZrFaijNuI^ zq1^NY2k-8ct2Y#A+sYZzCCgiHyE1H20K+VyY3nmQOMp}|nO^iMu0ms1i~UVKFKk>S1j;J&)h8EZb$ zBpxf70>P*gqNFj7PB15$=R5k*GR2Yr_mn()VZv8PKu$I}EvV|>=!(M`HWiQM1n__J z!=V!@7Cd@#W$u$fIJ6YZ9Smyx;mWFG+?#z0aFEi`g^2|Rv^|S)=)2O|i`i4R;1_YY zVSIOo==O}fi#T*xO7hH<@wA}HK-DnJ%kipmyi%E1i)YZcSfz`XN+wq-Fok1H?s!!? GUjGK6wZ3Hl literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/EliminateUnusedPassVisitor.inl.261505C45B8750CF.idx b/.cache/clangd/index/EliminateUnusedPassVisitor.inl.261505C45B8750CF.idx new file mode 100644 index 0000000000000000000000000000000000000000..99562f146a9dbb330c7ba64f9ced83a91fec7e4c GIT binary patch literal 1616 zcmYjRc~BEq7~gCluwi4^eH&zxg^)lX7@8*G2Bj#XhzCb)F>+(0G6*QK7AzqH;&iZq}h-vL}4@Oj+~WBZ{pa=8J;g_BR-350njC z`J*GX>d@hc)$h`+SpWD*d`@WHliL_5X{@@_p7u-Bc=xvLE;s5vT=&D={O{GxYopi+ z$-}OfPM2DHkLvHlZrn3`Xlu`mg%QjZ4rWB}Ka%1VeqpBPk>le-ioD4Aq~5lH%f~8a z+^$)S)zYr^uWnzqL`<}w_JVE1hqCHuUg=N1b(rot*b;}dZ6ulH-rhx2o;!)YG1j7>*S=|U0{ zF&J>7om8}eHmEQ{=zy(o<%w}{L39w5AO&`buajT+W`0c8*a0G1q@n}q zKnQSgv;$r(O&XyaPW=y1NmOb&R1yj$oN>EEk!iPifxnc7C;cyq{10VT&Dq!-lmV7) z0Z^F^D)1-n*UNDZxUF%EMK(B~3DT@ankXIwX$TF6%2HrUikOD#THD{ttXjh-fs?Zn zwK!BDau!jDmjo=26{2a}f2U&R$N2mhoCGpl#-TC^bhwT~qUAFc<(~?sV%76q&pjB!$sAcCqeW^MAND+?&u6oyKB*$Xi z!pY#`a%ffNA@f0|7@+ge`Ji3|hE|1ykVC_i0^4RFt4J1tl!TH)o}|FG9SF2aeY^|z z{pKU+g3?k!h`9XkaX-Q9P4%#sVHg=IbHJbRmm%Wm;O{Svb);GO9H1nW#}WuIU~zmL zP&4Yqov>awUTK&uZL)1afRh0kCxIwHWIzOP3skHIC9e*9{z+u>pFPebAaFvutR+sA zwbUZU#nPn{yOuQ~0um^2g%rhySMrJ~1w|l%AMPhzI%&hSiD<|tha6LV>2Gh_?$lY% zEF*AMG0R$bS`ljTNv|*K@}3xhmq&S0a^!~rzyo-q6K_cU^Z9ENa}F>NM<|yC$`S2F zAZVIXD3@s(RhdZBGd-%?>wL*P+(C}w+)>VRUw$zXnQ`m|{1Vtyb{8tctxMMKL=Lec c)4pu@Q^U+fyUZ@O7m#P_+Y)a|evD!N0{*iz8UO$Q literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Enums.hpp.563FEBCD9499CC4B.idx b/.cache/clangd/index/Enums.hpp.563FEBCD9499CC4B.idx new file mode 100644 index 0000000000000000000000000000000000000000..d147dcd98f611adcdedb23eafc9fe356b19ecd86 GIT binary patch literal 15628 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 cmA56~|EvG{e>nS=ZP5^7FKCTNa&1_ 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ErrorList.hpp.D860B6CD397F7DEA.idx b/.cache/clangd/index/ErrorList.hpp.D860B6CD397F7DEA.idx new file mode 100644 index 0000000000000000000000000000000000000000..8be638a110f98717b6922077714648d5ee738354 GIT binary patch literal 75516 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

pxz@Ub$;{NVu;OBFLd=YA7 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Errors.cpp.53872D8B941817E7.idx b/.cache/clangd/index/Errors.cpp.53872D8B941817E7.idx new file mode 100644 index 0000000000000000000000000000000000000000..ddd3be0d4b6de0f3be3f6ebb8afe0cb1822f8c3c GIT binary patch literal 11556 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ExportVisitor.cpp.5FF2E0C23B31D487.idx b/.cache/clangd/index/ExportVisitor.cpp.5FF2E0C23B31D487.idx new file mode 100644 index 0000000000000000000000000000000000000000..0071b33dee76cabed20707d41b2facddc694857a GIT binary patch literal 1702 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 RpD|;{ji0t;`j9V7{vQv;+a>@2 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ExpressionType.hpp.5B1B722F2FDC0A6C.idx b/.cache/clangd/index/ExpressionType.hpp.5B1B722F2FDC0A6C.idx new file mode 100644 index 0000000000000000000000000000000000000000..63bc6002bd25ac8cef70b677a864e48b208b0d58 GIT binary patch literal 21966 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%0ADYa1=sReuiRTg5JYvM+5WysPUqg~kIz9=#Jul}r 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/FieldOffsets.hpp.291159D8401AE223.idx b/.cache/clangd/index/FieldOffsets.hpp.291159D8401AE223.idx new file mode 100644 index 0000000000000000000000000000000000000000..338169ed2c6db82c55f54f081a491706f96f2a5d GIT binary patch literal 2312 zcmY+E4NMbf7{~99YHPi=FIQ^s+CodO*Ot+iFF^t4rYIjXFot9!egv4>jR|IaD`KMP zL{OrWY2xNKgVD*R&d&_L=11^j!$dZnad9#o$d+x)=@vE4=$dAG6#n!9)0yk5CgJhFYVYsM!(My}rz+1|Q8tEKh*;{4PsL(sqtU-`4nWQ}z1O?H+d1#xstEw^vzzc>B!7cdX{#d{1xl?ZKp+3`0ur z1AkXx5p${}`OL59uiQ9wVyJ)j{ruUh^NWY>eBV^Jjh&m(MwK;~X8v*eM8(Dn@5Z#2 z+Tu#?mvr1W-+QG$@@7rr)4|xbS=-GQ3H27Ok2 zO8Uti6Ss_anjYIWZ#n)#Pk-H`rouyFnq~Jf>F2kK2i1KEx6-NVB^7V}4PE%@?&Z|4 z7EKiOjFG2EtRdE|1WE(lf-BeeZ9!7+*B-)*=Be-^sVIrq1e*tKwra+`xbwfoaf}Y^ ztF&~L_7ShcJ3OFa`qsRu2a;3Fj0GNV3Nxvcfb}&Udvjl}??@p`7}Up0@c|+Tf)nlJ zDMQ`Y#(Jf)ddFd`-`k_3KVfeP&1K zA_O7_v~P`HF>BY+!YslFQ0=n1L?xj8pk(EwO8RULVN~$$Nz$YwVi7FE3rk&iq3qG_ zuvZDgfbEbRiG&w;H&&;2J&v*+)XpZ12JAYiE{Q}5QNz`2?WLC2KD$%FF(9!|g zPdpBf7weC%yP2RVdR#>q8U}C@=O<>t9F4ZR`Q8&%PgyO;i~)N&EiI=LiQD1!PZU%G@aqhLU`lpP>e!8+X7LwVC)EGU@SK$Lx3DlPSqXd&8x)y3h9f}2nL1Gd~6 z(JG2cKs&I(**@)D#z%x<;o+6;$~fY%I7GBNul&AYihu6MO5ek^f>t7&jvMa#j^Gmh zRC@A$J!680`wTw260rLE^f?`C_gy-uX4Gbi7}N%%66Dhi7fnVT?Emgsuk}%%o*4)A zeuLkn1g!T5cMgqyW9$Px69IOB1b8K&U9})s{ULk~kb7FI@Q!aq-f2PM9A)GjWSMT1 zk#3q(s74v7hS4(3C?m}v%M_!G6w?-kUX+nukY#F7Mrz@eGO{Qmt?+D_Qk0QWkYzei zMmj;3sYDs61X*SgWuK}iqvdJlB50LbqjoC$009w&(K4Di8qow<1`=fi5@Z=flo3Rb zWdKn|0AZCfeJCS%Fj@uSFpqyV@)2hDFItrXd6VG zC?Hxa5o5&(q0FUo33#|z;*wkmn3?|DcjRGXW0wjhY~kEU8%rEIhk!`J&IR0Qp(X{w z0tWmP;Z8tXX5^&lJj43(8C7Gge(SuR2}6(aYi4WxyMX;zGBCK0EO6a$Ct> MmEORGQ{f@!f73C^KL7v# literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/FieldOffsets.inl.BD4AECEB917E1B85.idx b/.cache/clangd/index/FieldOffsets.inl.BD4AECEB917E1B85.idx new file mode 100644 index 0000000000000000000000000000000000000000..03e41ca30d5bf76bbe5af00921937c0f4558dc69 GIT binary patch literal 5768 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 Z!o@;i!CELS+=8r literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/FilesystemModuleResolver.h.D815F057EFBA2404.idx b/.cache/clangd/index/FilesystemModuleResolver.h.D815F057EFBA2404.idx new file mode 100644 index 0000000000000000000000000000000000000000..d2c320dca2eddebdfd52045153540479353447ba GIT binary patch literal 1254 zcmWIYbaT7M!oc91;#rZKT9OE4GKc_iaY<2T4kH7@HC6_OiaA>+-_Jf|Akgr8`ImzS zMP6opH~OWrx>*0NK<(}BBVTfwGmR!~S+MDU?Mwcf0pZU=G<`K)vc>nF2KhNS!RLxeWuG8@A z^j!VKdBIIF@ne7c+%?u+e-SddTY5^U>FaNsUg^|+vn*!Z_DC(~zO9_gecL$)mmVt$ zXTO$K``=Lh{Fc`j7F?G+>z=!Al4RSrSPT377i)Cn8632XTfP?Uu3+i+_Oi&}R_JI- zogk>oS|hMajWcV(oDP+|zE=AWZTA=~qOS>lU_Zd}w6bS`ugv39-u_!9y=SFs^t1&; zne6#I{|)o!DMwZ;3fi*0CI9{B6G2HwC%xWLH~UiQo2{33MTuY9_w!oGiU|@quE$pN zPMRI|jMdj=OJ$hXw)pfm&dq_QXO; zP+Xat!~qO*(;SUgN;9oBco?LBF#!TXGW;^;44hod46=NTLadG14wteS9_w?1qDn|q zN7MsMFmQqu0~NTtWOtNz=4SFRh=GNGs>C(Ky%;#z*ce24fC~KI>WCLkNGjuD5Qiy{ z;FmCB;N)O}SaGXrxzGE?`~y4;(l73wCZLL3ARa){h@(79Yi)zDsZ(@6d>qcdi2s4k6bOWPw8zbC6A(?8KMn-rr z3duDy%5^fr90U_*l!OE;)N+`y99)pVgbMQriF1jo!2?uC!dSu|9(qEOu9AuHkPwo# zm5xMmgoR89%q|`wSu5Evc%TZ&xyU8J+>?^^C|JRLX&fV$5GMzx7Svt_n3X_hg5wS< z4zn954306Vu+qg9ffj#%PGSeTmq8qo5P(uVLJ|xTNIXdfNhF>$gESIPhCv32C(9s< z#FJx?gY#g%0J;F2B%m&U1p`nRoDiVGFkb?N!O;&D)@i)BRwdN;Auvv5vt>(RX2L=b ws2ZFWpsI^fa}q(!;-chYeGo$cL_mNbi~&sKf-Fh)SquA2m<5Fe7=#fL0I?}+R{#J2 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/FilesystemModuleResolver.hpp.1253354BC2EFE659.idx b/.cache/clangd/index/FilesystemModuleResolver.hpp.1253354BC2EFE659.idx new file mode 100644 index 0000000000000000000000000000000000000000..baca8661698269c92421d221252dc010f9fff2a1 GIT binary patch literal 2648 zcmYjT2~ZSA6rGt}*a1cudR=yxVcA(>b~*L}cNc>Z5d(rT5#m8qJW%n1RRmOsp%kcS zM9LF$VDNxwX-QBc1~p|oLex~^SrsFRH^d_%YNAPu(Mr$YXWT0O^nb7WclYoAe(_F5 zT3V(*K@6RqQR>Yr$yE{r(HH*}mlVw|BMD+821-BMKWbwBacAGto7?lJ)u+aG9b0`r zqjl@4DGuSSxxbz>M`w(03VL>b<@jAS-@jkTrk}b0n&q}9$93M-;oh=v$<^^|mc_2v zo`bGfHM^=;{%%#&ZN3rUIO;l4IRIr(8J$&?Hh96jqLKAZ-=;y1F<0uddHcET)7uhT zDr*Pkmsgh_FK(_Fzinglm)Q%hm%8UPZfPs$rq%Qph})0sp}F&7(*qAgx-8K;>)yzL z4HiW$m zABnY_0li_`joCA0|dHk1J0-?s|4`(tvd%O5d~W%isOv+Fv;# zi}oDJp3!*MSa$b=1$iafs;_3eIC^h!(%Xs8Z3S85E?rG=jV=E4>hY$}FEqzaS<4IP z{G>mISWjOjs?)>j>O9XpZ%*CU+>+^fuyjb#%<4x6t~5Va56cv0-8|9lS3c43Y@YYw zk_Mu<%sVwvK@b~#+9QgTLzOHQU?emg&pD8RHfRYNzY_kfiR)_0+EDAOrA(MsbLud} zDL5t2A&Z}@$_`)Au#^hZ$4LGd8H;SRO$`$Uc3zw3Io+UDQDk^eM5I=!0|`ILA(2l( z?B4!W``;5-DiBAgBl$Ygj(D06fe7Z}8Q*22f@qfNgD1@5XIYVvHueQNYgM0(Uw5sy zvXnojpOXAj(uSP0Qv(xDI@wAhts+rFQAPqq@lj660R3Ogz#O!Y$4Lh0 zcgGAr(p_Sj#!?IpZ{@9VD4Y)01Kp-QS(22oe5Q)>2`7+-)kH}~zTR3CHKM4heKt$+ zIK0_l79<1fTWmJn_by{Dt#-4i~Bj<&bEARu0w%Cgs-D z2T}&S+SA|jx@3SJAqxopJWMKWM*&)|6yOIyFlpkJyf#fgX%-d;uZ|1+5j=QbU%mWZ zPvtd|d?T(r6K(3PJV#;DkJkp&{@Ig#y+Y3+(ZKqmycxx9xPNsl&)>Ns>k9?NAUEyS zz^NJJp*qWmNgb-vg+!Dwtd#vntuL4X}V zPggB+0V>3&6x9c_ z;TzyDsZP#^C}SWQ>Cs;C`sowlWf@6MG8Y;a>H^I%h*NT5GAAem4hoh*f=x)3J+s2h zfzladwwMQl2VW9Nx`%L}dz?s7^Z>_gxS6ile8-DRDLgLR4cBIn(Q0(U3&H_$>cnOM zYe)H|9`@$3tCTqHLPV^bb~ooX$wldoa@%Fk!+A{bB=E&&5?cwxZT$JrNb{x-w*@eW z592LRUJSD7ZIMu@*mK*GWzWvp&CnkhWKXcC$eu&*h=kU_AcxzL{EC<9m>_#j&S{1M zWsoz$nIe1f5%G4A_z3UTJwKiB?!Z;!qFq|u%fuNVpCTBDOr34QI!&*ysR;O2JhiHaLLc9dK;1yY<2^&yQiT zs{stR#j(XU1~8}%!(#ISxK-JDscoaN3+E(3l@JWMfXc_kBla?wU6fal+aKQzbWZ@W zqm%rtJZk1#5;|46$>Db^wfh7KX(Wn^rWNOldC^012m%#Gs}~hk2$eJ&+&4t4)2j(q ZW`pIS_|M?WpBe@Pp_PXr@=zxa{|EIw1u6gl literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/FilesystemModuleResolver.hpp.3592EC8F444D6908.idx b/.cache/clangd/index/FilesystemModuleResolver.hpp.3592EC8F444D6908.idx new file mode 100644 index 0000000000000000000000000000000000000000..887826b1014b2cfe08159e53d2d4533a347cebe3 GIT binary patch literal 538 zcmWIYbaNA8VqkDi@vO*AElFfyU||KTFTeBCI-)f1F^$X?PoiQQM=9aDL!3Tn^XJjp3wmJS?Dt;}%=I+$z z3zRLhl{xC?y_{|us}?z_$<^EDoZ`{q_fe@?AEVQfo~jw%e^x)Oa@~)!whYtv)!bz$ zuFOq}2fCNp*7~DWr6oTb6B`2q6E8cjGMHfC1j;cmFfy@De7id(^rUPn9}_D(1Cs!+ zfEbuy-~cONm^oA8@QjudZ~2%wfYSVi{FYz>Ce2WknpV6JsPqJz$2)zWx7>_8O#E#8 z0x)eb>lwKq)EUmvFWXu&G4;@PR0K-KIV>?Tmf3@|4Gg+cCv znHkLKx;Hmfpbuz>0Gj|0Ocl&9plXnFVXA>H%}E5ASX`7`tPf%UV-g0KT5fX2eEp^+ S!pz9R%m9jWC}4&$7#IKrKb^b) literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/FilesystemModuleResolver.inl.FE9654978E01FD02.idx b/.cache/clangd/index/FilesystemModuleResolver.inl.FE9654978E01FD02.idx new file mode 100644 index 0000000000000000000000000000000000000000..01b22556358b7f534451ad17f340eef9746161c2 GIT binary patch literal 180 zcmWIYbaPw7z`)>~;#rZKT9U{DWQzcCaY<2T29Qnw;)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582Sa zPx?a3qf?J2U5UB>XUe5HR~B4(^k>edD@uFM?2%z(5DQU^F0RZ?0$RmTl$uryp>q;J Xba7E~F*k_8XwaFnP(1Paas~zfXmw0G literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/GlslOutput.hpp.F4B2DA50D5F7A96A.idx b/.cache/clangd/index/GlslOutput.hpp.F4B2DA50D5F7A96A.idx new file mode 100644 index 0000000000000000000000000000000000000000..edc3bcd0961fa0f20711d9487f3617ceba470b80 GIT binary patch literal 358 zcmWIYbaRViWMFVk@vO*AElFfyU|QMrd&~)e`HU|-!prj%n4dBB|cx_*@fyW$ZB z21#MN_YB3Axk-vZ7f8IDIaA=pJO(xIrp1f8evW8Wfk%x&}i`xKZO_@%~>b)s( sZVi}lQEE=2AW$nz7u;D4#YM@*;vhqrCT3mR{`Ewn8Y3eEFjQdx0RHD|)&Kwi literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/GlslWriter.cpp.0C022627AA6639D2.idx b/.cache/clangd/index/GlslWriter.cpp.0C022627AA6639D2.idx new file mode 100644 index 0000000000000000000000000000000000000000..c2a6df6d7fb36fb6a5806ea597f146aa124761a6 GIT binary patch literal 5130 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/GlslWriter.cpp.EA19CDFEEB3C33B1.idx b/.cache/clangd/index/GlslWriter.cpp.EA19CDFEEB3C33B1.idx new file mode 100644 index 0000000000000000000000000000000000000000..3a99da3314d45e02a81a5bdb1f38a7310222c382 GIT binary patch literal 81954 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 RCCJUg%f~MsBEhJ@007Lu`z8PY literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/GlslWriter.h.F52557D537D619A1.idx b/.cache/clangd/index/GlslWriter.h.F52557D537D619A1.idx new file mode 100644 index 0000000000000000000000000000000000000000..2b4d3026d9a7426e365a063d07be389178e14268 GIT binary patch literal 3382 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 G{rG>~^C3|H literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/GlslWriter.hpp.AA1AA90F1F5BC592.idx b/.cache/clangd/index/GlslWriter.hpp.AA1AA90F1F5BC592.idx new file mode 100644 index 0000000000000000000000000000000000000000..52e1ae37078b2192f996107c304840b8dbdcfc52 GIT binary patch literal 510 zcmWIYbaVU0$iU#7;#rZKT9U}Zz`!5^#Kk2=nTvsR2vDwK&eF3Rxeht-usx`jyxu0p zzSDR0j*#hmP2E?rbNZK+tL}7uaXC6fghjkn=l}cmLPYQwpJIbpw(BM$^Iy{VDqoLnYx<^O|eEqpo5pWZLn(D-NF z)W*d#_4cm_{PFd!&D@fCDV|(HH+H!NswN(O6S*_+#n~E{wO7AhywAXOwm62NxH2~> z9_Ut^7ydg1nd4`$F|jc)F!QqWih>CSPM{nE10yqQ^YeE+HMwnv`IuPQ8JPKb`NhBl z0|!_E1J5;qXXPQi=lPg8fYJg&0uo>XCe2WknpWHeRQe%HdcumYlO-9snAthlRUn!f z7|L`?R_{%TD`(_k7GM_;gqar1>AE*JRiF07V}ZFqbo5WLE!VznGbkiG_g)CJYP+1QP&lahQ|< literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/GlslWriter.inl.E50041BDF108763C.idx b/.cache/clangd/index/GlslWriter.inl.E50041BDF108763C.idx new file mode 100644 index 0000000000000000000000000000000000000000..24a6edb1c26fb2efa231963cf9c21ca1a2de2b3d GIT binary patch literal 540 zcmWIYbaNA7VqkDi@vO*AElFfyU|@^h#>R%;|?Ggon;aPHh#~vMCAZmRGJ~ z#g(~9c0jw|+I0HN->s14CC~5u*$XFDI`cOt|4Cm)fHf-_3!l*%{gSVOGPW8KuC^E7K`iy*DMUJientN31ca z0H~T*oL3H}3MS3W!@|bFCImAC$OF0^CJA&7FSj^MOYNnlg?FD?&jqlOZ8kVUPUh+WurC-GDW$M!qaN zZ_55!ux4I|yKH>H#UIx${#@oZr{-gL+0=^cVzGKwZs`+CmuZ<_KD)K*;u_|!!PDyI zbpL0oZ%P!X+-k?aA+)i$GB?Qq=#th?AC;^2eVon4#LU3J#Ldnv4<;BmfpQECj7+R% zIkWX*|F2%g$HdCQz{D%Zs{tk$IKT=Ric-^xi-AlX2O-nV(elEKJWRa8ys|J|yPT?& z0_XiRXXIjH=U~@^=wVQ)My6c`y9fH43A0O9p~djJ3c literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/IndexRemapperVisitor.cpp.3FDA3F0181419558.idx b/.cache/clangd/index/IndexRemapperVisitor.cpp.3FDA3F0181419558.idx new file mode 100644 index 0000000000000000000000000000000000000000..86835f7390417a3f0372e5595c8d35ce0126135e GIT binary patch literal 15904 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 QY&D`*XYJ_c1nw692j?!mcmMzZ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/IndexRemapperVisitor.hpp.5A1F3D267CF83316.idx b/.cache/clangd/index/IndexRemapperVisitor.hpp.5A1F3D267CF83316.idx new file mode 100644 index 0000000000000000000000000000000000000000..b3d7550816eb8f6a85df9a1b0ac225153f69758c GIT binary patch literal 4748 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 Laoh9qN(Kf1`zO%v literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/LangData.hpp.AC8ACDF1204F2BD1.idx b/.cache/clangd/index/LangData.hpp.AC8ACDF1204F2BD1.idx new file mode 100644 index 0000000000000000000000000000000000000000..a1648278ded248181957026a26550e0a8902b94e GIT binary patch literal 21138 zcmZ9U2YeJo7r^iBk#ff+fsl|~3P}hg1VW?)NV&92gbyi~fV3P66Ql`-gs;Gw<*W2=}sjkgLU(xzwg|=`z-h+%YgRh4Zlvaefr&$ zh}f~a-v061kKf-Lykpz*DHor=`_=Ts2Um{Agq;{-@kQ5jWxuJnFJCC1du775;0UwS z{feBm#l>@;gm3=pwXsXTx-_P7|KEzxixX}`z@YfAedfwO@tVK!L$B>&Heq+S4$J!j z0`4j*$D%~&qqxSg1*&xa;1zc8=IGK+g&eN>lh z-&MAMiMj8OL)(t-?4KHudwSi9!G%9RiQUn)Y09k@>8Zxxr`gV5w-uWm{{GJm57t*5 ziAuPri`sSmkn^wGWzjRwD@@%!brDCp-dk#uk#gm*$=OwB?gaRM^YNlVX=94o&Rk5N z{?Kn?lOwnBXi1z^X~?%ugO61#k`J`$so#63Wx|3--XX90-S@sQ?|A5kcP|FlT8}&@ zs(s_%+om6`?f+x(q*ZVFx=nRxdRV)6nCGsGM>{jZt=}u~`pDN?5@}oF-tO>d*bj$` z#yZa0Q9Qb8#M!CWF3;>YYWCgl&X^AjOMKitG2oVb{?#v|M0n3+uSTz zH`PC5!}}AbO<5Xa`R1Uy%I>#6))ZF!RZx21(%bX=J72dMwrOU1A;4_bFWF} z#jf@k@#6!lvf|8}s^b=(#fSGuMy~Xm@xOrfCdJcX-+%YR`s85+ACE{LSw9Z9Qo_Jhe=2E8=@uk%y2vlk7~t@&kN z$$jqO`cx;^jCT*}4#qE^pjk9OrLiLD{={FDbO)jzadYW+?8;l^{3`L|50Zhq3=$NxX`4{BWgZT3G95_0ropDU>~kIo)j<1(Nm zfA2>NJEAZAr0&=;-QrzDLyr1+uQ{xriedOec`9HK*ouB`b+-7iR zkl*7p?Q7Xv2kv$qI`pAsNJ937?_^hP=WpsynwTW-!PZ=J7mocwNR>V)QZUfm%o|9W=a&X+r<|9*Py z>Id_NCUv}f#`^A>V`pl=P6*rR5YRDvkFxFZ`4#VfGRdTH`!DY`UGF@4$20BsQ}3Nz zY14XW)RsrP_O|R^duijq#V-%OwA12M8;yU=kB48`Jt=Z~_H&W@J;$O=Z>)`(Diw)N zMwU)=U3(C$ME*LFX1jR1RR0jkMWT0LiwZO*Uq6rk+5FL*epaGT)QAId97uZ|UhA+y z>*DRdJ7$cDGPe-zgIJN~77VxrF1?OOf(`GyX=rP5?*BfMe80rnO5}&Oc8GV_=pVeD z<@(588=%eE)%^h~L~Ijjj)V9(nDsh(D_bMcO3BmY-yZ$8c912v@(q#Z9~krxIQKdt zbBqfA`TlGB%i-)E2P=^;Mzjya`=EcX!$&65N9I!c*?R@am5x@T5va6HyiKNm@Cr_P zg}ht8rreBK;cg+?%fHmp0ZU!=4}DVRzJf`a@0(KDbpPWKrkn>V`~>Ddfqk!|R}zU( zsjKw^4}aIgW35Cs7|#~*7IXcBkH*$sA#rSkz_QVM>R$*46 z(WrD3#7ALJuOle!fBGcgdYZe^lpC^9r1=OWAHm>WN3W#MV8z3k4y|qz!)>{pn?;&0 z!R1RB-RrOlQC#)s+7GV+9>Me=z?C{al`&v)KO%)~U53&EP?Uo%Ijq zUFR=$7kf9nVkNS|oLetmZ>oRrIX76Ja~GQKx^GW@cczsn9AD-bh>wA3uOqz7$dj*| ztXp0&+e$PEt-KB5x3Q264sXd&D_b_N{`0tN`Kwl+nje^wC{u_|Ee6 zfBhC(ad-YojtPv2X|ac*l2?T5yCfVF*Zeu(zX*}R~6@cPZBTz{9!rS<&J4Bj0Fz61xs=;9@U)`u)dA4@-F;vltG*bsnb=E(ax2(DDxYzc!W2T%1 zCUc7U6bJo7NWuPNYx`eb`O0xqZYV1J1?GR@w`6bxrKI(bm)b3Oe$te4Mx{mOi{$!; zpzz+Zm48}%>-w3MXdq_zM)5|e{=sLsoj$|c-Hy!l+_DH2CZfUt5FfzGV{mvSLoGLX z=Dss=Yo0q1xUUCr(Q=S=_kfw!gglP zn3KN$$wz-<%6Vd9Z-e=5koP)5f`6!-XSMl6RDvaU2(T922dn$w*z2&od%pJi?|$7` z309&2OwLa6PKo}(Cr6@B&cVWy;m!81Cz^7m7?X{;jjjG6#8PUyy~NqSAjwLkL<{jC zjt9$Lhqv;sp_{yIzbk!T#g=R=LaYRH2F-ESKUgvx8?7%}y>FgpCGy5^<_L(7;J0sZ z^f4LQ%_ReO?AjAwV9D*m3VjBw&R|V3ILwach1)UlZo|qs&Na5TLa*+>+MzeKq7Bn) zH-5iZSz*b&i55e6`(5WQ`^^i8op5AG`^By$MalJjs@{^*vUi zL8!1HPn;QOw2#JEly1jZd-{aU`qCb zct2S8I(%vjRrdK5>4dm<8t+($-sa6bhXKzq;|-49)comaYHwCx%niR!e>COBVTwKj z$!B2I>j?FBdWY5Nr9a>P*-B)B@vRfD>#u+CalNd6^Vgy)i`+K4-?I{p!iw-Nh~LHc zGC2CE^c5l8*8YO*>G)r*L@%Mz`yhTFl?;xc)a2FAPBY!?Pb*O{MzveK+gAVJqdI7) zla^atbN-c`{!1p3Vu~+=!)5H1430>`foMn+zSfkhKDnnlFfwWtLLRM^zgR#?u+`T$VvCd zZQEjjdA&4z=>j%hm1&kqmbnPDT(X?d3dxE-@?ZN#WaRQ6tSK zX4WP$jb9x2?F05D$~69Q;7>Uq4gx3#$3ZaVus8@4m`wmM|M}6sko#Tm36|+qqcZ&j z%T$oCsR1YLoe;2ImoF%F4=iGN#ij?CyN0;|>-XZh_Taw*JZ#6pg1C}$6^N@SSA)2kat(-UDA$6xmU114>nPWQxSnzYh#M$3g1C`# z6NsBAH-osDatnxCD7S*Rm2w-1+bFk#xSetbh&w2Eg1D1%7l^wkcZ0Z_au0}mDBl3_ z4T1ky6=UN5Nt?Z;OfxBT(sbeD_LKP83gj>GClnwFAQUJGB&3ii2n9)k2n9=m357^P z2!%>Q357|*2q`5>LgA8dLJ^XPKKfO)P`6=mvja9^Pr?2vjAT<(wgw=R_Rjo;)+QBl zAr(qUYm*5zkO?hBk^@PQgEH1g$TWG70C|v3B>5=GHG8o`VG z?EKuBm~}On7JiY0b!T_H&&%RheBv&a;ZlV10nB8}6f(_2kURuifgge7k-!c&X5VS? zbN9q(ia}lsLs%g!x8B?F#H`+PxsArb$3el~&PLch z@o@QxH&v4@B;p0Kb)5nu&j_?`bC)o7z z@gi?D(r4s&!Ecn$C_>&o-o)l;pV9t;rk}50I4c)i_w)4+6DYtpAXK10-#|hNUj?Bc z-yoHs8SEPzAy9~KNMD;_qY3p5ohkT*`GzS4Qu-=`1q$~Ke_5ai--sy!&G4A<5}Q)k zXl8oM^cG0vp(1{f9+6`Ozi78;Pd2`{(L{Sij}u7krY3%BFZFoAZ=u^l;P6lN%^-lq13iZDR z%4^g=6_lyeKMj;=l+!_(4iSR=3{Ym!@R^{@r21K)%%bVd24yzY&jDo))z1ZGE=&{b z=YcX0rVE@8%6w|C0F(uk3qe^(?H7Tvh}tg(WijRJpuA4G1e7K4iV$BZC`+lmGEkP$ z_{u?9PW>xDSwYiZ3Cc>CA=s+|Wfcuy4a#cDHK44a`n8~}rT%rGtfThpL0M0^0hA5& zeHua8NbNO&vWdQ5Gbo#B`ddKRLgQ-%Wh?b>17#cKc2Krc{SHueQ2$O)cGCLN1JOZ~zl%Igl6PUz0WE&|(}X_S0MB=x9M zZ=_R?I`u?{?Hphh@Y@DL1}vDqAeyyk&&9egza9O~L`+;Y$g71}CEHfO(EOf)khms{ zxQWbsS+-#RZrD>`5wRTw^x(G>m<5(CDCYMNnD(JJIx=Q%P7TC_xY@gnWLh83%}#G$ z@iYj<%^+_Uil?*l?Ve#a9|WUE5y*>#VF0T!Xy32{!D3(=5BNrgT?b*3*aYe(SjNg_ z)12JF*28CqqUlPISHcM9;bm^0es*C#@9_xi9tl-~ZC9Xa!(N48x)Ritu!dP+TNXIS zHSAZg)i@chs>m*byl=q;SE{C5g;!a?_|~BDLpNK8Ti9s)V*Rv2=jb2nPbeTZfKXs; zAR$Gpf>2Ow5TW4MU_v3WA%sF>LkWe&h7nT6DhY+hh7*d2jp!q`3xn@%*n(k8xH8QZ z2)F|O6W;p@tiJ+pGG==-SepF43|nr$vvv5zQ(Z6xM~{IqfvZ_|$TW%=1tGPq+L_gK zwu^(7_$?f^Xv=nQu;}=$8&*sCb)$S-V<_tTuJinU@=PrJa*&q`HIZ%apasL; zj!^jNpiYO^SsC8?{?Y6+FJI&>INLk-4ZmCSr)+Qj^gq>j9Jg`~Vpj8U+{!r;a^jo_ zIdjg0hHyg&xo|FoTsc=lZk!vTq1;eH?wmWJVcal6!@1#vJU91rZA7f(eCiA%sG? zP(oo`7$GI6Boxkt6N=y>2+iPTh=tMUOl~G26{jK;$wd;1=Ay-{*4k*)oSM)=ZXuy% z+%mB+;#|%xC$xfFLFgfH4?)b@YQ8t-9#MV*+!GM9wv+FTxu=w$0r!k@9LL3RV%FR8 zy)n0kay-Yy3oQNawXgbbzBmhOegVh}gkFa2dg4cE*z089AKU4~2E(w;$vkA5PFxP` zgoM5ilkbKkhciY-Ie0*>E}ZiqDLFZ+k|hJEpB2u_zhFm z%&@&u6!ROUZ2zmUb;9JM^6Et#KQ!=v2q7$A`F_Fwk-)PfPvo3b{kjO_O9pwe(Dk#o znIqNjt_r=tX^@ZB2+S&CKq(MMuGA`m-m9;5UvV+OswSL04)!`A(DL1h0u_R;&`3}Ox*{V%G3bho1lK`#-AGUZx)LKnDd$b%>IK0ujD(Jes~{02xg=|=L04@Q zs2Yyp>KYAHje)9-0@Z-7#wbuN=xSdOe1I!*w6fP?Wv?}=>~)~4GYV7>y80IchjF-0 zYgj$juzI5!)&RN&qd<+IYcvuxfv)KV!4Vvu(;{lZ#5EZut_jLfLKiff;1)_Aki2UK zU9*wl7SOdA30gtdY9wd_U7L}h9dzwRf)3Di7zsK-*ZG3r2sZ9C`CXvvGE(V+Be)$z zRk}gfZKTqTD%~%rB%*{?jvmnU7zOIVKs`o*dLRiUc_deEfbIqf)RObw`4HRmCD^`S z2l;gv#)f+AkPLPlhNCfT;Lnc6;9!wI7sL7iex|VxD)Gx_7T6IPPpQUmFh&?vCV)CY zn62=$N_8UTBv2<&P6l-{wJ>>aH&AW_btC0wP&ZR<0d))IR#3N6ZUc22 z<#tfFQ|(l*NNAZ@4I0n!f2ognR`+y&Au%H1ICrrZP49?CaBdPCsN+wN&s zM-?x}Pe~?Hk2vepTfJ1fC&BI}~xCI6zo=0+fQk&u6kx z1z(k}L3=~&hd8ll*zrni0St#KSuePt>-?GtL0i|NzL&k1JJV0`Jnv!s;GK;qE(Cd@ z(3B{~=Di+u+kL&@?^+aBzPS|>lMC`(aAUd5I^ywCjo~<_Fnc=%;!|M3I)8pmZ_;H5qq8$r z0xV#L_?}ypNI3~qNtBa8l}tGWR4J6Nf$AFNR8XZ-P6JgM<#bS`Q_cWY2IWjpWm3)p zRTkxJP-Roj0aXs=Tu|jw&I45*<$O@(Q!W5i0p&ta6;dt&RT1T4P!&_Y4yx;vOF&gZ zxfE2Tl*>R>M!6hR<&-NxRYAEDRF#ygKvhM#8dTMkYd}>)xfWEllC=v$e~^9&NLgY2-?|ihcDmjf2Etut1IyM?y{#Cqm8=XF@|HLkPJ@ zTnM>JTnV{J+z1Vo3?<|)aVIoPGK|o0$#6m*5)VS25>G-SBqIoUNxTS+l#C=aN-~O& zx5S&!Xvye4a%}yd-Oz1s>@>sk6fu4)S-XVC>|*>01;hjp3XTaT6c!UkNExFfw9s~; zBU@!WFz>wA$t5OlVq13&ZH&KC_4yd)RyQ9Z+P4-m!P!PrS43s+_cGUPayy_oCR$ z+-!*9h_Xn;&cLJCaPpm<@9sZh!jQlfRtM4gO!-V_)*Ix$<+$Uk6Lq|}9pvr88sLeu zYYRSnMSBQ6T)lns^jei>#wXm`08OS1m6+9|RjkL&4C{)7Ue z0tf|01rkz3DF_8c1rZ943MLd16+$R9DwI%IR2U&;l#)<*R5+oCsE9sdHyp46@YfsI zjRxjoU(R1^5c=}zuTEdiD#Jscqg$T;AU}>-8^_tkagJ=^njQbd(1yznLipz}{W(N4 z#m@qgpJctigSX&s=kLZc@9npim?%y*^WtE;;9*QGTjhCj+e_z8pg71b$cKpo2UM(c zQ8s;u;slT<2z8PzEMqeGTNOegma3P=vIYKN)hs&~Nb4p_4`SB4XKvwL98X7n=6KVbF`ShLgA`PI*x?pb_u0V|Y?y~|M6c3w<< zr>@S)?GlQWcFN)GD`1-!IGr(E-4VvmSHSTK_z20k0#R3BDdXnpmRZ`7lX0V5(+KiL z7|Jqqj9+rbz4-XA(IW}uNy14*)<@uXWw-z&d|8iS)?>W8(0gT(-2=j6HrxSXYZdJB z4|?!7e^@cI-D5P&-}e#B%A@43v-fA$eo)D9=ZA&ncdQC%M6>TUFYW+& zhcHtcw8CM3>pGk<$u!v@&lWs>`e*!RQGGe@kqPol;k*XB*MzxbxXr}oSNu+&x)av2 zQeJhy&HCHu-}2FdqrGEa|M?lWE77WCJ73m1EWhWgWo`oeHA-+B72yxa-IznvYNk@ns0qF>38rl)!d0EmC z;*g4Tg!qk+jt~otbc8Yu?FeO>1%V4*VM8~WCc0nrAc55V)PxrHTi8de`NyI++z4Z{ zanaLS(b4b;g_u#LATJfl?DN{Q|4od;V|sj1$UBAQZKqiik7sxuDMybykmm_=W43XL zaTul=y<3gR2IAA+cF@P=UG8?qsU zQ0RULrMh7o!icYOKPahh_bfFgUKQr^Gq8UKZmhjxSMczo;qTuG z4NC>~EES|@*;f4B?d|;QH}%d`90A zRI-J(RXil99>q66ena?ro!6Rd%(wlv2|d#A4^Ie9ufv)P@Woqen$e>RMo4Rz9tbh1#AWhBW)Nw$$B7bUqy zk^+wC zl60V?gGlZb&dEFNo7sWOb3rE{=rs9`LgFA~KjF|55K8^SPe3^3h!YSY@ZWWRCN!)W z*ojr51mq<`U6~*FG{WV?Tf9d;$n(LSRf58$l1csp_h-;sGI&7={N0$5Yv zq?ztLJ(zs~PMQTH76h=i#7VPs)Y2d}=61pz3fHSJj+uATJb;l8K*4%lC!CXwdJIAA zyL8e#hY`;qfK3}9WR~Tfm49_%I!D=$>YG*0+GHPF_tnvE6z}0|_i%EiA06zw=f{Z` zd5;jgkWnnb>^7{KRDTOr_y+Q@B=X=LQZMu16iPlNl6=(3H`2*RoqQvm64WU%(y2j7 z4UxQa`9R(@ue&{%vIdYh2ra;8mJXjhoYU_ndenowUT6VW;<1I{Z|AZWhGiu-U53lJ z!tn1FjK2kwSpUsR1jF;!a#?tG9~Z+LF5?Qh(S+xKnn;bGIyE9_;>jaFVA58&t?*=p zx^Z`~^60&UJ1BOtcj{ZFU}b>u87}U!7}@EYanjz)xMgZka7`dizpX^wwUsD&|arp0@@PFrJyaP zTn5@Q%H^Ofr(6Nr3d)tBt)yH9+A7M`psl7{1KJwOwVe<%I%O^XMsFR zm@~ZXo*y;E^UJ5`(GBu$2w>m%7}c?tr|q8q2YN)ACk6o?DH{|ct3t5qXS%HVh z`m%yQ*S-&$iG;N#V;y>L+Oy`y37Z#10)(-sov?XPBvMWSMH1y?P$W}M0YwVsYoNGB zITaMCl+!?wMmZf6>69}-kwG~V6q%H>K#@f`8x+};b3l!u9`IHMl zQ9!v66or(FKv6`w7!<{nuY=+`Lt)?gm9SO4*VNGwK|a33A4^W zY8DOuI4%EQ^jPM$Y&iRv+25tW4xRs_6zm)PVON#!s??qTp?0J^awr=HZd?|-gx_q~ zv{AE3|CfH2v8@M@Nbg}l&ETbel8V$zApTH HP5AkL;(}BM literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/LangOutput.hpp.0EC4C5E10F5E3E53.idx b/.cache/clangd/index/LangOutput.hpp.0EC4C5E10F5E3E53.idx new file mode 100644 index 0000000000000000000000000000000000000000..3b470ace24f38d88185c492be93fff32fc65ac53 GIT binary patch literal 378 zcmWIYbaN|WWMFVk@vO*AElFfyU|YvXND3G`F@oxWsIlUDY`6>+3;myx$cgq%Z9a+t})xnf0 z%UmXU!CRBrHhzhYCs|7Oy%OA&w#;qcbMEU$wr8-`>XP#9ztOt>gDClSOhE=n#I2Qip7l{C17_VB4NGBYrP H1RwwaJuhy7 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/LangWriter.cpp.2A5F975395A1A129.idx b/.cache/clangd/index/LangWriter.cpp.2A5F975395A1A129.idx new file mode 100644 index 0000000000000000000000000000000000000000..e931765b54e6f325e0260c8ef4e623105b9cd6f5 GIT binary patch literal 2242 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 J+PTM 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 sIf)G84|N_JWPW)T(@6JiiX$cQ4C04KwlcK`qY literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/LangWriter.hpp.581750B186F7B47C.idx b/.cache/clangd/index/LangWriter.hpp.581750B186F7B47C.idx new file mode 100644 index 0000000000000000000000000000000000000000..8285004741a78256cdf0870f2655f6e2e64dbc2f GIT binary patch literal 11960 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/LangWriter.hpp.5CAA92D4F544B759.idx b/.cache/clangd/index/LangWriter.hpp.5CAA92D4F544B759.idx new file mode 100644 index 0000000000000000000000000000000000000000..b6a43a5bea5e17d84334def2781c87430482eb43 GIT binary patch literal 508 zcmWIYbaVT{$iU#7;#rZKT9U}Zz`!5^#Kk2=nG1n*2vDwK&eF5?+=mPVSU=QAUboZY zyX3n%y7Z;O4iDe+W;4{D>N&nxzWtx0V?p4Kr}wPumirwGVq5T4_F;_-U-6nfeX=_h zPSpCIP`~`tLgV%-H9f8C2P|?QN92A_ZER)9sgc!H&Aq?+|H0@@$-*7=?5(Dsc89U` zRqgq+$nD|v^1mgQB8_~5JQ5yDrD}6#r=35=n{@xo@mZ;_KAl+q)vj2Ep|~qzkrZ{1ek#7XDCWdEA9d+uD>@UWx9Kg1S1c#0K0%7OdHI4MlP_m zFzaA6P#9z<*fJmi(*+a;*#uJ+%;~x}H&vhyXf{6^KM%~z((hk1s*O`80adeeu&clf sDN4;r1hI>Yl8g003})Ar(tD50VXkLpWMW}p0trC?C|02W7@sfz02uL{$N&HU literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/LangWriter.inl.EF43BAFD9DD11C89.idx b/.cache/clangd/index/LangWriter.inl.EF43BAFD9DD11C89.idx new file mode 100644 index 0000000000000000000000000000000000000000..30000ee14544f7c731d6f88c5dc126555e123009 GIT binary patch literal 302 zcmWIYbaPWOS5Qr=0B!BQca1H z&#jlPUq651yzkZXeyh5+UnoE6uXon>thVO0@^k*4SIfgpiJcN2R}>|(CnNnrrBnZ|&O5=t F000xYZcYFI literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Lexer.cpp.D91296467F304958.idx b/.cache/clangd/index/Lexer.cpp.D91296467F304958.idx new file mode 100644 index 0000000000000000000000000000000000000000..fa291da021129d1cb1576041196b732f5555061e GIT binary patch literal 10156 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 XXdBv=R@2sfr6!Eb)Y8>T*Fp4u;&?Cc literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Lexer.hpp.DAF366F8B15496D8.idx b/.cache/clangd/index/Lexer.hpp.DAF366F8B15496D8.idx new file mode 100644 index 0000000000000000000000000000000000000000..750aca7ab33c65dd8f34cd5a4e8a6988962680d5 GIT binary patch literal 1478 zcmWIYbaUIs%D~{9;#rZKT9U}Zz`!5^#Kk2=nNt}V7#0BqD(0-6azFc!fxz+4%UPbK zOip}p!UGe?X{oXfyUt4#% zm+_@-(QABs?$^###U*P#p0M?MRKdx$wwkM;e>?N5@)!jhtK77kL5Ibc?yxFznYCwm z$on5RZZ%Ek6S)3o=Hk__wj{f5dy$?h=r@r)b+$yle<|a8p<*xF5A~O?+}|@vbxGnG zx3c^Te{R%;_AWI)5OT+>jWhFt_30~FqOP8^dX`?-%66#^|GQdtvYOU(J!f^(U;7y& zMZ!F92^Yz)SmwDocyGh3Ui}lItK`r7F7DZ6EtuI7di`rfyRV8@n7);m(~~mBB)fYl z{g1A$%3@^O`{Fid$G@+CxowrsK4rP%Fl*)oH&M~nHu;wg3dUDA=fzDE7vP?ECCu;O zf_eM4J)3kYaWdPj$4gxjS>G*+x+PM*_SA0MMcZy(bpF0ix|3CBP4s-{AoBxWj-AgB zF5G-xVfv-a%yUAyv!;sP{+v>J_}Is9!hS7o?B;!c|4SOI(Z8Xuo8NPsp|~?511Oks8wYAM(6GdAS%Tn#S11FIKirc3XGrfq-?9vY2#twfSI5url`cg$;J#Z zA>&WU`4wlG!?OZ3b8Pm}G#`GJ-OaU;-|ko2>7f#r6uxiz;F& zKrgZ|G6?Vk?Pn-TO)CyzVqggI6H`@q3FZo*0b$H{4U`D}G6EFxsNeN~okEkq@EH^AA@rbI(t7wElQ-;Rbr}{Gc z42}S;lVOq(fTbsxVqheJ(;PIWVbVZha9V>2Lk$CZ1(dvC_7 zolqbRV=yoXA(#>fCOo|`FbE?=MH`auEac+f!^SBjEG{7_B`qSxAcc^YL@>n>OaPax B&~;#rZKT9U{DWQzcCaY<2T7?Ab_;)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582Sa z&p*pGYhqkl93L~o^*xex#g(~9K!X{IQqzhdbWS3OE-p$g<_0ks4LWlciYH!Q&cFZw DRRul= literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Module.cpp.E3358329D8511CD9.idx b/.cache/clangd/index/Module.cpp.E3358329D8511CD9.idx new file mode 100644 index 0000000000000000000000000000000000000000..49bb40d3504b462d0aaf9d89a0226871f83ad0bf GIT binary patch literal 1208 zcmWIYbaUIl!oc91;#rZKT9OE4GKc_iaY<3;9wr8cC#(z%6?2w`Bxc_>5V-pMA6M;* z1n&u==6+G)Tz4`|zLGgpQkuiM{QZ|NpGxeC zt}Ond%;JBTDMPVl!Gk%aTUg#7m08j5u(@6RO4tLJ3)e0r7_PR}UAv0g;+5j%RMj~e z<&sq|6|S7C$a=LXfiY%fFUNvy=|3K9nJKI@$Kt@A<%a?^R)26fdrN%&JjFb-ngWK9 zl2ZZQ9ADxpZq4g#UyzgCaI0pqoTQC~|L0pL-1gf${Q31GyhcxuJN8*z_rJQ!kJ<%e z&gZ(k2$*DeXr0>p`ZLS6zuy<@zrO6^n`dv&eq}kl_l4ASvrQ{RALzeVNsMP}sa@;) z*3t0cvr@oM9rcGP;J2nPY_xBm^b_ppu#3a@Jt{$V!lZu5@h(+ZoI0z^)oeVTPNL3QD+AN`$q2I^~M z)LSAC$y7vJbNXbK9~9rlQa62V{`rcK2u-ec;)fW`y<UA^Xc4;*A0*U|M7jQOm#=TRp0itk|$Rw?fKT1errqL z#5LDiA5A=4w`ixY_~O~i;yzxz`J-%30c&LK42?}L^S<}#r%(6adq3q7r`_}=f5TMb zRNhXE5idCR)B9BX+&zb{hVCy-`~TqR{zBQ3NA@$*4qg?~mY-TGA>A$i^t7(~92fP# zGfO{MEMDs+Wpwte~Pew{rzmWiuY>KpUg82fAJPq<|ZWr({iGt z$+n%fKR9?83>g@7xx~5DbtJ_k)fgn%*q9777u8xM7 zh7N-yI}4+>CQ!je!7YsqI-HMr7>s}l_yzbCbrkp&6c{8qSeZ?Pq*v8r%ps={0xD?DCN*7lITKxSviJ3>2 zi;;^9rkY2WpOGJlC&DNK=fSiB?FG3XrbVam;#!qZ--j$fleoD=;US^R!^%je}D`FyI2Qv>Q3N#nwZJ4=x|JxY7F`V_0QASr>T3i99x+pa#5u~KJD7jc4NHgkQ zsSCL6U@rfFSw~Nw0VD(kdN2k9gARh3oSTvZvO`5)O-fKsR!BlXk&mB?n@2{PSBY0y QQdmS(Ok7@Ffm4+M0PEz*nE(I) literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Module.h.D1A2ED2858B94A88.idx b/.cache/clangd/index/Module.h.D1A2ED2858B94A88.idx new file mode 100644 index 0000000000000000000000000000000000000000..da2387ae01df61bbe52b5a26cbab43918fc554d2 GIT binary patch literal 768 zcmWIYbaVT`#K7R3;#rZKT9U}Zz`!5^#Kk2=nbwR943mL!6?4{3viCo1AaK<9d+?nA zl@6A$nE}f?L?XDn&BdOmO+Rv|ev$R^6|ObqdMttbZ`)ELKUF`!Z+m+B*`fyZ9-fWP z8)hjh1S%AqSQE{1jN|s-i@dgz`qU~q977I2aI%e<^VCVJ%JaR8jW*5lYxeee zoU4%C`0wq(i9PwonmU}W=@;ZKd@bbvci`Jko{BvmJUSLkHafXTxhA7+<#LmWHx4Sd zJX7B*Akn!{vc~k;bKwW4e?Cu&>=X|!vfCLSKDqwZ#L{<*B9hEtK%9e*Ml#=;%Vik|+s!xx;#Z9|avdb+h`@Ys=ZR?(E zr(dV(hVC-$}PjpmvSlb*c%J?Ze5wVfNBetzEIFEVrQ)-zWRTL|3Ln_=~vEx`Zb zZieE@+@uy@SSC7}Y};A;gM)`b5Xb`oK1nf2H3msGHYNd1Mm|=}cE!^Nwl2QH!ypWi zXW-Ki)6ij%WM^UI;Q}hqX}q{rCDivJHv>OVvyhaK3YcKv1S#s5sC%E=duXTY=UoDrm#K$fsefVGFYcCJM9;>|vO}MX5Q7Aa-$4ap%+9^+^Rk=t*L%L-J>UIa zzthetDkxZwDQfECqQ?4~Rh24=qKxDdUDdFRQ&7|hqNv99quVY{R|dI_f7G0NaJ_#r zKjH2n=gALCAKi)kw754eWp~Xs&ETERJ!fzAPtn;0pz`bYvXXnn*4*XVe{zb=g&)%y;^UCI)$eoeA_hZAwiV~OppLkck^VQ}# zYc{NS|Jbo>m){u)J8ZsBONP%Kv3!Tm6PXts+X-MtJwUcB2eAjZ>GDqOtCEYg`MoW`XkN&s}*#(kSdqWqH4vO1Mcj70!?Xkm5Lf<4S~ z7R3_he$H=|0O+}O!KUc+wGAxdNN8b4*e3zdOQ#jDXn7;BnnM;syR~kE1VFFN>^+s- zy>IPkSu~u6$2QvbvMlLoo6n<^)2%ErkjTBP*C+w(o~kbEUO2F|Efyi-JcG{AO91p> zdgg%*@mD)oq$ZJPIkJ2b0KMZz(v91>k)te%Cv<=dm?QxD&{vx`g@&4rs*#ekG(nvZ zCxP73M_Zna@0;?=52LAhv>pQ%0rr;%PM5x(-1TBKH4|szv7NTROs%1&HabWS2AFw8 zqBQI9*4Z=lsdrl^#Hbi7OcDxUd>Cw>Z?6K^49>z?I!KejVNIBYeq4^7_P}5KmzFp% zm<>rVpu`<7ILEl-?M~TUwkBH-vj%D-fr%=Ez(8dRT2dFZ0MtdyqO`yas*1tbOq8waBWK`1PeAYm^ElDtV&BbcE$#4M^1%pgEw7S#vYgYbx1R2>up z1V<_>3Jsiq(8$xG%D@TaPRydZ;As#R$yrntm_bk^9Z^VN-f7yzPhM|auP|cU4BJe2 zstiZIt*_y>su^qx+w#CnR;9K%@+u9d=^z&d`>;<3?Pjna`*jdGg9A9A16?sVh=V$q zm-fOZZ`Ebgw<^fca#;clEwq7TC(0X21j&=RvCtMhq(SB;Rq#X0h!|4setB-h13-Q< z+mh{qc9qwjt45brb|A7P*Io=;7@VWbF+!^$Boc~vRzL`l4l#>o1eoDP9LDkL_&9mE z3~qxLCXbem44D&u(qJPg@|XsZ%*fAy%!x;Zyc#P&20J(h59(z8H$r4ZJ2{vy2D?-) zTK3{rx-pCmgWXoQOI~@D9t;N>gFOizE3Dv~44Qbnfx9gS+HNghcdri_v9Lr~3OzAm z`+Ev|vjR#C-(()grqobVS1GDD+E5)W6K}L4j9zhYLs5);OUt*ceEZ)&1JQu{ynk;v PGV*g*EThrJu{8BB3hBu! literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Module.hpp.564F7E14559C4586.idx b/.cache/clangd/index/Module.hpp.564F7E14559C4586.idx new file mode 100644 index 0000000000000000000000000000000000000000..fe15eb17846bc201132b1b9654bb0b686e4a3b02 GIT binary patch literal 486 zcmWIYbaT7M$iU#7;#rZKT9U}Zz`!5^#Kk2=nbU#vcOb5qGq=~4zsW$N<#&3_P6rvD z*^8t%Y}h#?N-Osbd*%JIhu6J33Jv_!%wvkm&v&+$?qW+=biLx<^xKTjS8TejXgJFv z%VhVfEnLkL7cUEI<22KletpG$KHa`K7mgZQ$Ihq}t7n`kGOO22-2Lj z9}_E3noo>R228-D8H!TVio1YHZ%*5?vn{^UmXU{vkB3hbrVVC2BNxP4h@lKHOM${5 z8)2$~IbHYWrV8`{4dG|w=Ygq$83t4hasW)VdCvj;nQEMOfx_$@>Y fl8co=3}z4k0Zc8I_>Z;Kt!-jrWM%-yDhvPsf#8%0 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Module.inl.C69C9779A67C2D0A.idx b/.cache/clangd/index/Module.inl.C69C9779A67C2D0A.idx new file mode 100644 index 0000000000000000000000000000000000000000..193457f4b09bf10110bbe39636e0ef96e8d3a200 GIT binary patch literal 1220 zcmWIYbaUIo!oc91;#rZKT9OE4GKc_iaY<2T9gr4cWMHV6llpEQexdxNzusBjv)Y>1%Fp?GUM&wZEn-so`=IB@lq*W}kL)S=duGp* zIYA4i#D{F?-&=Nhs~*W{YcFsO3lo^V zW{m`cz5lSfDFb8|}!MX5?-!#>B|Vz$_#nB*rAmB`d(d0h9xRD&1S#RBz0y zf=F`+aELLLk)HW_^a;z2ay&R5Eo;Tq%DT0YIN`V7u)%vb>qwfuCTfVin%x3%I3e?Nb#Loq@mj}ghVqE8p zzF$pn11jQU;zLp-!6*UuK}yToX%Q?XUW_u#TvA-BFq6a{@*J3Hk>w5aFF!Xw4@@{V zO-zn2;D8U%zdZar3NT?_M!m4t9AAAw{^bznhB;b<8QCUPgT3>^lvaiVjpUZ%mWJt# z$}wyx_NpoZ8i^b_fisos9$ffQ0`j2@zZOh253{h2uocV#m?$uGKxqUPI$6q^MoX?N zX$3lmUyENGrV8jdD`9Jx-e6AGy}79ZeL#CTY&o1^ik#VlZ^V7+o5sw;%%#Sq2NMRy zk*<&_OfN8wbj3|!aTJ=iCz=K>;(bbN%1&Z~wd*Sr`CeXpwIK literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ModuleResolver.cpp.EA91DAACA2896EF6.idx b/.cache/clangd/index/ModuleResolver.cpp.EA91DAACA2896EF6.idx new file mode 100644 index 0000000000000000000000000000000000000000..9bcf6786eb2fd54c981b10964c8d53e163208993 GIT binary patch literal 808 zcmWIYbaPW+W?*nm@vO*AElFfyU|6V|GnQAv~l@{66t1H{Omoxq4oQ#cY6>esp=&t>C^7UaU4Mm=oCA%lr{dr%KG{?B^ z@6+dx%6>jPe)jFx%^yEre)O+$|BmYV^5UaEd}X#>f19E4uIYMDy|3hdvv0`?hcB)_ z*7r-%psqhxI{nkVpQkI1em&Txc&sAbdBfkX-LX8kIKPx+c^h81d06C4(ihbSCwulD zeEDwU?Mml=NBQ{6F1$W@hhOgTE$e>{J09+4d_8T^3XSa-f7>qKyX?>Qih{N_9>(5-? zbmo$aisqJWbzdCBxW(9tSL*Azoa{UCo6r0Uzl(!!1;fM>E)71e%PvK_MWh?)cC8ZW z3V0GZae8K>(7gLkMK(4rlXmFP@N5c*Ix*8IbJlYq(QBJyL{vJKXnpmW=lkWILv6^+ zqb4h-R8IB^%+^`rwyNjSvI{d$_8i%BDc!L8#m5G@;|I4fmTjz=7^4}vJVoR9s?I;l z&Rx~X4_VU`RGD{b^9jCx+jwTCw%_iwvF)7@veY7bmdMnQsYfoE1f?knyRJHARX@4r z?U&@$ho>5|go}%Bh)7Pkf6UzOzseDNmdoPJ=g;-%*7nC)&QNVaKm}8!nVTdJOj9eKFg~r-NY4{zQd4D6;Sl5yQkLPC z;bGta%7H*pYFe=kkiI6BEiW4OT9=7Og@ciUAEph+6XH;SNy0=Kg}^4kgo{#h5qgBZ#n0t^^cu8Vw`b^KRbDWft&a&AhFI#5_%RZ)mjOq5H2Lz0c1iJ3)2m{pcl XnpK8Xj#WyKn}?T=UtCFoQGo#f{pDc~ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ModuleResolver.hpp.9290CB3A27FCDCAC.idx b/.cache/clangd/index/ModuleResolver.hpp.9290CB3A27FCDCAC.idx new file mode 100644 index 0000000000000000000000000000000000000000..c73991de7f97a4863cf39b0cb7264e70c3c14cad GIT binary patch literal 1380 zcmWIYbaRVgWngel@vO*AElFfyU|9;>PV&ufHsERdoL+YH zLZjD&vKu!x{=N{QzuTu#qJx9eiz&+T&31m#BUiH8<*YO($-b_YKVEcV^0U21!qZR8 z*}L#+k%M#Gm6#jlb1a`c|Nh;%JwbRO3s{Ajta0Mz5|N&n zxL5enA%Tj0&z*e^-*N8~>^^O9;N;xk$um9fPi?chu3}0T2 z{T_bbJ@$*PR=VQV$%cDx+W4?z5lNMP7p`DOF$4bMwXZYCB122N#WWqvThzyl0FAei!f*&!2C zTV63HCZM!5v$PK5%sEyz$D=O>5{0{RE6BjrQ$bV8w=w0BN#KS2kASVfn zL|9S)dKQ!fU@j1Nm#6FA!x|3^8ZmY;en=`{U^sUC&l2&rH<^rFoa`Lz@-Sgof?*T{ zClr_=|J98)>zLX#0}TPCahU30PS?G;sRDgWK$qys8N*xxROF=`0CW7R^> literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ModuleResolver.inl.DAA39B156E800304.idx b/.cache/clangd/index/ModuleResolver.inl.DAA39B156E800304.idx new file mode 100644 index 0000000000000000000000000000000000000000..4396dd846370910a467050e14ceabd65064185e3 GIT binary patch literal 172 zcmWIYbaPw6z`)>~;#rZKT9U{DWQzcCaY<2TJdh3p;)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582Sa zFTc(!(=RI^tFX>5GHYU7S{xrU!uZxk*4P7>ZKUiXn7PB8V<7N-pLGF&GUx Na~6sxUSH0@001NvLBRk3 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/NodeList.hpp.AD6E957801D54B72.idx b/.cache/clangd/index/NodeList.hpp.AD6E957801D54B72.idx new file mode 100644 index 0000000000000000000000000000000000000000..140cf7d602987305591a98c636cce275c7edfd4e GIT binary patch literal 10368 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 F_a90+Z`uF= literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Nodes.cpp.1C5DD9F7FE6C5283.idx b/.cache/clangd/index/Nodes.cpp.1C5DD9F7FE6C5283.idx new file mode 100644 index 0000000000000000000000000000000000000000..64ec5f8afa847e2e6541d4ecd2d275e353e1594e GIT binary patch literal 4818 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Nodes.hpp.204926A98A922049.idx b/.cache/clangd/index/Nodes.hpp.204926A98A922049.idx new file mode 100644 index 0000000000000000000000000000000000000000..5f1a0bcd9d8933a673314348b3a025f55b8476e5 GIT binary patch literal 28364 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༗sC?a-N* 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 A#{d8T literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Nodes.inl.BC11D985D6F3104F.idx b/.cache/clangd/index/Nodes.inl.BC11D985D6F3104F.idx new file mode 100644 index 0000000000000000000000000000000000000000..6b9efde2b4ffa26a2e091ffdaeb162ff9f8a8d12 GIT binary patch literal 1002 zcmWIYbaQ*e%)sEB;#rZKT9U}Zz`!5^#Kk2=nH7u-4Ebyf3>9K&v&k}c(Uu~ zz0S7Tmm0P@tv)9D<9WZ>&Cf3B2DhhO2xxEDKe%<%4GvxFRJp4`Hr(u6PE33gzU8Fw zgYqzS;r5i2{xkcRoDkp&@OT#GeQ0r+v0qYm3u8BdN?Eus^6 z%{kl*Z%&@Io+T@4TR~5S@;`p8E&ikbMnfr3Bp6|2#e)j(FG(SJ~JBf32TUt7TX1!*5k+rXS_hRO= zv8JnZ-v0jS@q7Aq+xm+p>5?-HgT1vxrk`8=#8fu;ziE{3m5m!JCQpBA?{=&Hys+1# zS5p?9*sP&6zjBXLe{p4QQV%d5wz1~Ez4iOA9S;Mi2!k+>1doo;QWlA&EIJIFEQ}27 zyo^Gu_1=lxlP}~a@i1@zm9WdP>kBPmkz2x|&%nvX%pkxARML9i=c?WN%H=!^TtFp) zyn>QK%UF1qu}Cs-vNAF7@B@_`;JP^dui4YrJPh1GC9=G-5<<&ac$c$CAe0oPrWN;s z(uB6etH%FdbQrmW6*&|YfUX3C^$$8)U)(h_V-gYO{Lko`Q%K6OS;v8M^~Q3y&_3 zIZP3ZW|RU4nfxcEgx&?NN$2^slJ`8}^#wXyltWYz=J5G9H*6_OQjG-}$;U2(WF!ZV z7|bY`D9}hy5W|dQ|1j-v=bDq^OtsJHPkB!b=luq%=5*q8hq;HLC^aV$*0ldmud3Ni?SM8E(5nt*en literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Option.hpp.4BBA65DC50E43052.idx b/.cache/clangd/index/Option.hpp.4BBA65DC50E43052.idx new file mode 100644 index 0000000000000000000000000000000000000000..efb215e55f03ee7ec5c22f45852b4712ffc81386 GIT binary patch literal 688 zcmWIYbaPw5#K7R3;#rZKT9U}Zz`!5^#Kk2=nYxS&45C1}iaBd1_~sun;A#6DtaaqV zi~t`=Q4{lHe6vGx*|(h5)9}4)rlb=3$S+v%e=Vcgx5_ypC%;MCuTPzP`k!7Jclgf? zg9nNMUf-RILRwAblmm;!V=GI32VS}FJL7nh;d-l`$2`1)6Kh}me<#o)|3Tx|S>BVf z-@hg|pOTuSIi)Y#-|y?gc8)TCucfNY4Y%@Cb3WzSvj5ukRGO1lTsqE^pN;4Jj>o!M zZy%~IOSWpOv^sly(*(}>(=S`-e^%M+cdA5edFCvYqdZdtcj>Cw$lP46Ts_0<^|GJY zuhxpb4U_t^VGCn)oKN1N=Fqd;FOBk6`5%8C%EsMa5cTvw@6?Owhp+7}o?o%OV|j^F zvcSV9rxXn5UhiR@w{iW?<42pbW=~jHy7%5KGmm===KbsC7>X-%lbV2`Cq6Z=U7>4# z9TO89FOUlaTteJJ!VH`cj`yYG?_W(}Xy##HLh&%%)3lqeI zqSUnFexPkIs~9E0R>*%+O6XnSn&h^p^$Q85m&FjDlc?!2*P#C^aV$q^7tixmX{> g-~ka301X`whwDqxJiRGgs;8MbdAJ$4p$dQ$0Iyc&fB*mh literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Option.inl.CFF0523FAF2DCDA2.idx b/.cache/clangd/index/Option.inl.CFF0523FAF2DCDA2.idx new file mode 100644 index 0000000000000000000000000000000000000000..a9cd3a0c5235600d8b9609c0f9c9254b68aa2545 GIT binary patch literal 656 zcmWIYbaU%qVqkDi@vO*AElFfyU|UoQwPtjI`_n_RW9a2UHqcA z*Vi?Q8pgO~&%X4ZZ`T7?iId7=9Tjh-kE?0>w;l_TIc_s^i{VBK#+4H*Sc)rilbnD) z^S*Ta{i`Vq%{&aOTnwD-V(bbW0)_(C44ll23~cO-9ISagD@@;t9{9q;z{AbJ$tTVy z&mkf%BG16d!UR!Jl$us-01ThYZIU0)-8GSBl;Py$R$;PDPj@Fq%mU>_qubN(sFST$5xt1-Jx6V0!xw z-_}^N`TcA(o80!azRP)&HlLA)lh20F38s4S^!GiBHXISLoVbS0m0`JCpg}H#9#L drRF38BY>f}D7ly$#NaIXWP8s}z|on30RWW8`~Ls{ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Parser.cpp.0F0BDD9A80646B86.idx b/.cache/clangd/index/Parser.cpp.0F0BDD9A80646B86.idx new file mode 100644 index 0000000000000000000000000000000000000000..7539f527019a1c3c792eef9090b35e46117b6206 GIT binary patch literal 1918 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

LjcOO0{hkbAuV>rhct`f>Q@C=Iq%f!mK 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 SNN$I2m|os~Z~F7?p8J2xfCVW4 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Parser.h.C94B85EFC98D9087.idx b/.cache/clangd/index/Parser.h.C94B85EFC98D9087.idx new file mode 100644 index 0000000000000000000000000000000000000000..cbb58307ad150f2d98e87500941eb14267ef7261 GIT binary patch literal 974 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 bKQnAU$-ez1zXaBGjdM;*&q&S6&XoKIgNm>W literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Parser.inl.2063DF4F08AB2BC9.idx b/.cache/clangd/index/Parser.inl.2063DF4F08AB2BC9.idx new file mode 100644 index 0000000000000000000000000000000000000000..887b09e44c10c5d6b3517fa20a06d3b19da18224 GIT binary patch literal 776 zcmWIYbaP{1W?*nm@vO*AElFfyU|Bf6U` zUU)W5yIQqo>4tfGbPOeDU&!5*lBT`o$9-QZ{=FUIi8I{q9pBT@ee$8(Oo1dEuS`hDb?)Tx47Bj=Z1G>a`vi64JCCx#j9_6I{nL3o0DOYe)cu}+GqXj z=6q_u^TlJ$74I#{W(7jpb2(o79a`bJIj3krrgV|j!nbUGn>Qb7v;8VrWYcY`@72x3 zAikYr_V?Oy_VX8eqIrA_`o$9K>V8jQk6Ny~td%eO!@)1f)28LWWy<=vRl4oJ^)qMv zQ~6VWHJ*C@+&t~`MthRurl&+32F%H!A!n6ZOhKK_)c3U9xfhU9x=FiT!OrU zVlYK8S29U~otQ79?wofmVTTBpFsCp-Op)j==^2x|kEMbv&=)j;3Bzb687@9fK0cTQ zQefXa`L{A!UjE3zU{2S)xv2tuK)pPUJnk?>8GlO7uQ-!FkrAkupHCbntlD~4?Oy7d z#Xw;Z0TEG{4U4bu@>iSJu@q#85|1uS^}8-5?=NaqTYuTtzz>MY#AR_~c*~z-UG(E>Hx(`~(d798eT96c;5I TbAuRMn{0&nIF9RmW?%pS>5&mZ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/RecursiveVisitor.cpp.C40406451A44869E.idx b/.cache/clangd/index/RecursiveVisitor.cpp.C40406451A44869E.idx new file mode 100644 index 0000000000000000000000000000000000000000..2c6ab4ec38f33dd54fb1ee3aa7eb1246760019fc GIT binary patch literal 7604 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/RecursiveVisitor.hpp.D2AB053DA85E56B6.idx b/.cache/clangd/index/RecursiveVisitor.hpp.D2AB053DA85E56B6.idx new file mode 100644 index 0000000000000000000000000000000000000000..d9a2ec7dde34e84124081c046eb22c1032920be1 GIT binary patch literal 5154 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/RecursiveVisitor.inl.756E0CA4A20970A1.idx b/.cache/clangd/index/RecursiveVisitor.inl.756E0CA4A20970A1.idx new file mode 100644 index 0000000000000000000000000000000000000000..09c1ebda1171cc18e40238ebaae04b085070397b GIT binary patch literal 176 zcmWIYbaPw5z`)>~;#rZKT9U{DWQzcCaY<2T3XqNg;)*%EC-?F>7>KY1=qGZKUiXn7PB8V<7N-pLG RF&GUxa~6sxUSH0@001NnKx_a2 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ReflectVisitor.cpp.2B838843DEF9EE5B.idx b/.cache/clangd/index/ReflectVisitor.cpp.2B838843DEF9EE5B.idx new file mode 100644 index 0000000000000000000000000000000000000000..85a1bcd329ace2e883c0a8b3f2dc8cb4d54009c7 GIT binary patch literal 5572 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ReflectVisitor.inl.4BE1EC0AD13B3912.idx b/.cache/clangd/index/ReflectVisitor.inl.4BE1EC0AD13B3912.idx new file mode 100644 index 0000000000000000000000000000000000000000..3a9cdac10beb69aac216ec5d219a01900f29a214 GIT binary patch literal 176 zcmWIYbaPw5z`)>~;#rZKT9U{DWQzcCaY<2TGLVh};)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582Sa zFS)R@E+8w)FRREiBCRmZvuxeSt{Sg7ZU{3l002UTLSp~` literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SanitizeVisitor.cpp.5F08E384DE28382B.idx b/.cache/clangd/index/SanitizeVisitor.cpp.5F08E384DE28382B.idx new file mode 100644 index 0000000000000000000000000000000000000000..db9882e0cf3fd2ab9f324cf0938d08f05e2053b5 GIT binary patch literal 189522 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%0D>n}7pM)x{Kzk-3QGzSS1F^fzS%{38V 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 IFSIi~JfU)Lmdw-mz)~3X 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SanitizeVisitor.inl.31394EF9FA011B85.idx b/.cache/clangd/index/SanitizeVisitor.inl.31394EF9FA011B85.idx new file mode 100644 index 0000000000000000000000000000000000000000..e5616714c8a3554fc4a7e6ce90de469d07d0a19b GIT binary patch literal 888 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 a5i=VAi+}K!HI=acoxakJ&)Kv@4F3bRPrWAq literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Serializer.hpp.3D421AA4DD3434C4.idx b/.cache/clangd/index/Serializer.hpp.3D421AA4DD3434C4.idx new file mode 100644 index 0000000000000000000000000000000000000000..d7692409e7418ee95cc3716c5c2255d472feaff9 GIT binary patch literal 7216 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Serializer.inl.9FD220F8465E83D0.idx b/.cache/clangd/index/Serializer.inl.9FD220F8465E83D0.idx new file mode 100644 index 0000000000000000000000000000000000000000..1d5a20add29d4f1ee8d567f8fea6ea041286497d GIT binary patch literal 704 zcmWIYbaUIm#K7R3;#rZKT9U}Zz`!5^#Kk2=nVmq|gpq-vVoq{_r>>vwDW5YZ*LdkB z75M8Gdg^$lc$_}tx%JZZ>*r6L_q}@FZ&la!3*{&M_0Ia9)z-XLe$L6%8?vh~!`hD#={KP+Xat6bp3GEH#IY8UOh>1(=xF8CW<>Ic%7Nw1bQo zIDm3MP{!)S8Sb(~7$VK9$7{+QtP-pZljhI!-MQgP<`Xd{Mm7c(Au%B(<~*)EF_<(% zQEFOoJCqWq#F2%Z?Pm=KKT zwx{)7&YQIPj65ttRzeOi;qQXtq3)tKD}cgcOk!LxVVM0OuV``@!yFCtiW095%oR=t zb}1D}wr^vUVd3ZF7lH}@QQvm1ar&AaK)qa?T>J>V{KEW_FhzHaHWqvfUV9#>NQgrS z$<3hPg-KdJ`8hG_sL*Yo<3yQ6d0>u%(ZH}mRt=1YoJ3G`78fNKi-Q;}*XrXpFz>DZ M%*e{X3KD<-04;doSO5S3 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ShaderBuilder.hpp.F15E929B249EABBD.idx b/.cache/clangd/index/ShaderBuilder.hpp.F15E929B249EABBD.idx new file mode 100644 index 0000000000000000000000000000000000000000..5d1a58e8cc038f0b0bfd387c2561273f6a1910d2 GIT binary patch literal 14300 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ShaderBuilder.inl.0DB1878757CF231C.idx b/.cache/clangd/index/ShaderBuilder.inl.0DB1878757CF231C.idx new file mode 100644 index 0000000000000000000000000000000000000000..c9a730a9562caecd141828625031a8a0f3d3a498 GIT binary patch literal 20954 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ShaderStageType.h.B028CE6C7CE6F853.idx b/.cache/clangd/index/ShaderStageType.h.B028CE6C7CE6F853.idx new file mode 100644 index 0000000000000000000000000000000000000000..9513a57edf0e10a0d106812c5a0c625b997c0597 GIT binary patch literal 534 zcmWIYbaUflVqkDi@vO*AElFfyU|*qh+7EvT@dwB*EUt#h2`JbXNL zx%51J{CQXEc%*uqKI6Id()H`-Pn`F?dfsnU*Y*qLC;j!#`kvL+yjFhB-}7pDm}wD{ zQf-Id{3Clx{+`+MWKPfokrP_ACdyxpBsN5{F#HK|Sqp$0f7kdKn1Koe83jea z1i}P{qSUnFE+p47azR`P6aoR58-cPKDQzfdK&B7l;i2 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/ShaderWriter.cpp.4CAAD00F9D40ACCB.idx b/.cache/clangd/index/ShaderWriter.cpp.4CAAD00F9D40ACCB.idx new file mode 100644 index 0000000000000000000000000000000000000000..c506053c595e95ddb4e4c59b499ec1822fe131d0 GIT binary patch literal 826 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 J-anDR{Rdkxbj|<( literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvAstVisitor.cpp.55169384415821CA.idx b/.cache/clangd/index/SpirvAstVisitor.cpp.55169384415821CA.idx new file mode 100644 index 0000000000000000000000000000000000000000..8c8f12e7979ae5db8bcec633e238d41da6ecb234 GIT binary patch literal 38368 zcmZ6U2Ut``*MQwy=GI*nSXfvtEL9K?umkF~ml%!R7&S5Wn3%**6O$NCR1^>t6cDUn zK>-^!uq*bCU`Mf{pkP78f};L&LuP04=iz(4=k?5OQ_h@o=FDur&$@QKwx~gaPNP5j z{l_uCj9?lxXkdc>oBYe9@tx@g4Ympm8vMTe*nrzV-w2mqXC$Tl8K{&bJU*&>w_x4= zuV+lCIyY1*{oM2OUslHlyCy9kTU(V_m^`DgJ!&`R(J4h1JPRHw9GJh2j!gf)fj+PF*W;E=igoCe8o_%)vJG>d+u3_`IWm;^T)8k!d&PbUb zcr^EPb8F_ngn=htHg`G_zd&D-D93g=x74uvhh9BLn6`Ep*d;itHg?;p?0{bPd<$1k z8@%pzmjf;8!YW69&n$R!*{RVWd27YBvNOFM?i(KkbdBqJJ?6unCE=euSJWJT{l`Tn z^Vigre%5mT#o0eKXgiI%8raV9P_LjxiwB=M;5>Ew=Y zHVs|TDqzOn?8NTh_uI3k`M`}oCA?4`e>UxW{<8;m@n-ww0dwme01xq1&j9FOnMS9baVoaPC&<2&_KA5TB{c)I`h<2Tl9nEH3}aLd%V+_&AP?_Bip>WSmE_o_Y& z{?vP`bz7zQtnWh~7$XzXm)Uaqz#CMGZz}ExOMbsb;W1H858LC890gR*wpN+w;=iGj-GL z>kC{0=1Z_ZBp+!jF!X5KQ5Q}PcQ8`E@D9sG^KvmL;tT!@1>J$~m1l7rk!GsDLrZf@ zC89Ck*miyHXZ#0snV;E6HH6oDdwPdPG_-H%iLM^`!lmh|g|~d`uYO6JU(!lMQ@*L~ z`l!-j%N<%#0Y<73ygo@bC&_^k89F{g=Z5YvZcua9Zpr@U_4k;^o9FRLL}$LU?H>+R-YL~c z1;DrXAelc%K@sUXK3!+4htyNIUSv)!>sWt}r>yxYd`Jtvh3y{2%jl`ME1!N=U*ID! ze}q-tj&ElxuzW9D*5iwS9`yxEfVl(~XwA2_6__^RuZfqxYyU-kfm^_Q3l?a@x3LvC zp=;z88~LtxeSulPJPQ^G=fiCU4j%Fu+~YS?w zcy3RtFHp*vOW_^b^X+W~c9sLXW)4xyjFb<2hZ@0LBZNfs;(J*exHM?c6ppKa&8?nJ zI5%ol{T*o@5(g?2iWf<~i{SNrmAQJ%Wix( z+bjB|3K?gHH@{O~;3{vv3ddC!zKgAZ6r~=o+P(FmkqUy3SRtEN$UYIPbo?rv3B6?F zr)$Ehq-mA)_lV)mG4LLp_)fNa?CEnqdGORsQ~;P`U`+Tfdmk_K4vD!3qDFo<@a4bX!I`hZ z=I+3Eus!07Z-lB`;TEXBdeKoqfELL63FUyy3ux$w~BsS z#b#)lkkx%+qkUp4#5-%36i#pOD-EA;i*vih`Ju6grY@c3-+Al#loP)t?Q;Fhh3ate zp1A`9uQ(^TofAA!9Zuc#%5d<*DowD7GH;^%&^w_?4&JJMhC{a+@P&i_!-Z{Fctw)j zGD&WOCX?bDZG*aGq-%myCNPx=N7GR2-F24p|0~i2iS(F6`ginnW0NQ`XxgzoM+KNPfy#pE7=E(v;OW)*8nWyoR-|A$cEb-AD3a*8MQ+gRid? zl}gbY^$1x_kdy?;8%+eVx>-^-<7$%C%aU?g@ftr5%^}ibjJ$fuDirUZE&k;4eq7E<)AZUd@NzyBeXF7#;sXxxL6{%%_78az z()o(|kRSSx{|0jnZ(l>oX9?z6f(6TG3+CA*CyAYt#BOLNRn#qF;1;nls!K(^E}E{3 zX4L44S}K}KNq#Sy-iv0`2^95%X!<~Mx@1b1%xLT=>PpG9lH|jZ>9Ax*odl{&$#j(D z2a@T5WJaAvQ7a@<1?Kg8Qt#O5ob^!eeh{2L2=4epW{NH|MJwhQ(IZCmL##8-80wT9 zrPrC%;mwD)K<&A0^5*$X(zfcMLY*Ubnj`l_7Ny3+=g8k-j+Z;e%b#POFL#(P_dvXL z^6#Nxrz`ZZ(-lzW0xA$a;b_pT?v-&*G{GR(K{jm@cz5lT=SRC4d}Y;x^7z*+XwX1b z1F1lQZs_hWI&WJ15_C)KgxlloQ&Tmk*5-Q;`$VxN+EeE zPcP+(`{nXXE>C<<0Z$i@@}oR`l;lF5E+qLpPoF2bh^LE4F6QZClCSgBb@F{~^3+X| zD|ohom+<#I1k&eQO5oG=ug;oi6*^3Ht^w&9+lzHL^`)59ABVYPXi%IwPw|Rx@ZOgLXg{ zL4{5;n@K)EQwL}xmKV`f5p6_vysTcJsS6}urm4#$m(W}Z?S#u;r|IjoJ?5J$`~IAM8;z@?D9L1?}~=!l$MS=}p8dj%shM4^oO=&P7|p#(TJuLS=}kpJ4JgmcS3C}Qpd0z0u3-3 z#K|T!MaXKrOvlUim>0|3V%Z5JlTw#b6L%oseIXp7{!R7eO(_Q zLiY8xusqbO?>MU+patf?e#q^uiB zK1^8;lYEV`UL*NAWqnR^BHbjBZi(NooUxWOzIgo2Vy&}Sf)}vv3s`R~U(Q;Wlkz;) znn&_OzSl#(AMQ^{f;CC-#au2b<)Rm|b!0V0Qeq@8WZTHyAEl;@HcvQ=)r{Ay2!Pc0pwHa;%}oR@-8LDWHDL)8cBP(w{Dic3E$K6Zf4U>W0D z#t^o59phSud8Sv){lBv7v|G=jEwgA_n^f|_Z3?IPJ3_%#+IW?AMap$X(#5g?>xwl& zqTrt>grToSa{+uAEhvaysD04PO@KcAx14Z#2m=$sIM; z&@MBUW#k4s>l8Ii4eNk{9w@9xS^kMBqPr_<9OE3v_#st0Ca?FPlJp=KN2mj6*IH~( z%j!qk?jx8=pb3_z z0BZ^e#=HcCF9BUJr-NqcpgqZ7rGv4UHvq>Cz!UR!0Jf7lI}f<9Vqo>SI}ZPZ@QVOPb&~Wj;>% zqlTLFo$um_4oh62V1?kiLU2bNp-aE-8@asv+yVt>1nU{W54HH4TfcRlxK*dXrj6&q z;5@*>`@ z2(!1{oZELhO78Gg3c%0FC2UyO`9I3V9tkBgUm;^ju@t7Ub*>^)x&K>V>V@a3)nqrIWVxWHI0FrG*+ z`(K{X&MRYwFTC{;+WQFI1nH#at~+*R`0n+kOfYChjw%xjnuQ+)ozUmSHNUalIpwBy zhsRvVW3C12{-|Q0@~U5xKng}z)j{xk?(g@{=X5-a$HkTFV*AJEuWEwZI`eIvO@VER zUhL?4Vn{>Sy0f^Rv$!G1Y+AE+%GSyzV;aI>;YZrzBkhkKDytiS_XZGz-cnW{0RIOd z42@khZ$sboB%n?LCsa^@F*fQJ=Y(QxmVehv(963lU-whniVFeGirSa!>x{axqOQ;h zD|9ZHGjstNI$O+7QTOYl{W=SlpV1l5=&YD4baI8x4f7+N{Ue=iL@4Su25e)TP`fE= z9>e7^&X|uf+)7|R^(8OABzdMF z%oJR(yhH>gq7#~*74@A6-ic0VeuniUffbSynxA3pL;{B-C!`V;^}Yn|OHOEhK5A`2 zO?O_<2zJ=j0=-&b(1Qw|HyVE8j5!dtcs1Lknr(?x1DsvN)`?<&GHZ4#<$1%eWw_-Q*4I}pQn9$Qs;Y)427>2#RNq$ozXi( zmx&2lgL#P$cj?BTQ?yt6AT<3T*y2>%^DLA5HW?ZQ1u?vL4BrGz1iQa5&^GjcNk#cR}iS0qcv)J73M;uyj~6 zD0oGWentO?UKM>CR6X@enP~K;pBR5Nb%~_~{J5ozc`4(LuF!0guM)vX^yHIt|!p`={S(DsGI13O>{VxpJe?`vMo^6E9zC&?<&cQ zLC|8*8a-4|bAd}PHb7v268P-_EwKC`@IMGzVP3{HT*kFTbH1YP=3IAkjgWR!)Tdm) zQ!X5JNBF+HUpn6cRga<`=lzb8T*doW@vYF{Q`EP-|67vd1phdJkf(~isbX_94xmyJ zee&=^hN2!3eUFIEQP;{mRXBUB-EpkSWlVPQvs+3bMM5? zd3dvBOTna8(Oea6Lh%EWdYl!Hvqn_4CiNA|y<*MCzc;CKfiM^7QB|4L|Jr&cH6L*K zSnZqCG9Z)zJ(?d(>VIuJllq9`A92p8DnHRv*4}PBw#wi05qZv7~#NB4I)2 zaOaL_VOv(cTX?ra?#Gu4Ya&*Ag+{{3eV6RGOZGy#?{?&GGh$Z$8p$Z?RtEm{Mz>Ye zWgvVR_zcy6qTT`B?|`pR`8TY0H9 z6l~P>*{B}@#x3d}b?}pR#Z}(>D&GX@+p>0hPqVl6-S4Qzc11R`LcJu9Ej>6^JVIh z6I*7h(6T&E2Oq~hMO(jYcoZ8sXcB>ICgD`LGt#e$+J)-kjP2HO)HuR!DWs`F+8Mnq zR2ek&ly*krOi_~=Dw%OcdQwq~7`litqY6^g%Pf7FCHNsrJ!GAcE{7_FrQWj6Xk04l zd_c_y&baAP0h5aDc&I`Fy$P7H`~{$10B008Q`99KvxIZODsDf=>?gT~V`?}TRH@Jo z;h1+M&*bTuycx?=c`B86#wxLrXDfME)U1m7nrB~=94oM~0wK>4s2sr=%~enZ3)F7G z8MU^erifGuHXRgogGg-AO!K7vemvFp2yu)+e^*Oc}mho-NMz3Ao0UAJaWXl{` zLEQyeP_VPtr`({InRTUYGw)vA-IrF7U*JkgodOx`OKuY8%*9lX~Ll27nGPVfUz zt(w#~Lhu_Q6ipOR8;i}hi;<`nZnSlL*gbkyCz?^;)1mKaTbP$o7jaD%aox}i$Ee%6 zCfhN8HFU}N9i59i!CFb+zewN*qbJJhLOy&U-x2YfeJ6T)oW0%2tf>9v{)CynLf3GG zt|=P#ikhJ_WRPb1F`fM}?1(7pd7b@vlCS9OuaJC0XLo}%;~(gx2Rbvp|28IY8`BaG zpWTeKn;cFj8R;a+=h;T*NsD1AFD@m!YX;9{@Q&y+74-lw9pKHFqXa_~xum#RY_eHw ziz;4GH;cVCi(g^BAxbyMCB!;Wsw0;SGbAa4Tp~OoNk_;f!E#9|$4h|kn{4$t_4T#R zaLH~vaM})hP%nj(6bQ@%;h4)g=W@;$jZ0a5$OS#*A`rixNZED#epeURtKaG@Z?R)E zd3hgZ*T&+m(2;B1wslXe^QzdkRcueJhc*f=HVU25I7MANNLKCb>^+cu2j?j}XAfeY zvh(&p^OUTHfDk7XJd@RyprsRfoUE!qbwVmuR(pY7PN>Z_&l(&dmr5Sd;1TVFRICi$ zWAKu;1rneOz<^xF=IX)V2n)(tC-f;Y9HrnX>x70ayq*OwStq1op*hZi53CcK*I^hE zfLXu^CALAU9Do>X`p7UM4K4vE6rzSpDFBoJCzMJDvrYiG1)R|A3Y{DPs(}+y$+G$e zfH%Mi<#Rz-9Dt9&38`o}Q*z)c=Y&#-WVMt7rP#xk)w>+H3+4ajq-kCQh~b@(*C0b1 z9?avNP@mRjUT~EsmL9SMkR>>wriJw!|%W)BzJCQFr=99S-rIKSQ&YghuFM$t|6H>2Q;tWV4mkw6Q zV1?|2GQVV)kY%@8_CWC=n3^MlO|lc3{!u+b^<1Cui25#SASkF$bVP!_0mHsr(kQ71 z)QVM%YZYTN++fwRt})n)P{J36l(#Zr=CNQ7@ zzwD9olmC78T`#B^qM7#5*sX-lH4_=fsL0}gnw{yKz;wr)!!*ia8Y9lmeAK+Tdu}iI zPET~^Cs-Hjbs>YQ_*dGaD}YZ0Xoxy6`hQq&_4%Ku-crozVl#f{{4i?`Dd1X!7A{^ zVb8>HbYlhHI4nsDM>kgBjl;G};poN+ym45G6pn5T%^4}|ofM94ylR90*~L?+-tgle z^L~%{KxDVvo-y!9!)=D%dT6lG?ThFh*uc9$_q#w3Bl(95^skt&(-GI{PMFK+h%%D* z3K4sSPH1#NpH^snRp>(U;H$z&%-4iI*MuP?e}7H*1@m>G@pYjU<{Ltj8$xT$cLk5T zLIC1rKL_9088A%y;`Yw%J(0@2uygi^;F^QlKi>l0w?HIn0!maCCAhI!9H}1HXNfB)Oc|HhIT(r2O&PxX4Jz~7hd;+cPL`R zir5Y)`Gi?DE$4?>Y=3x%uRDI-4Lwm-M~9DYi|And)2=^`2<#89zQ{RWygy+ z+o1S3?do*UD4h%i90egqai;6+F4z9b9XxdaG}vb_b~A7~g$XKEV;oMWFsUmT*A)tGT}q6Z{U>y@KsBIcL@kbb5TW)?AR~Xa)Y4Y z67aqR!jV;hJ`%Q*mNJi8>C5+9y0Y(weF@9Yq|7rZTVtG^ePw5lwTr)m-#mk}%)mh{ zSdg>K#9X~_dDgB855IzUNE5x&M4OYb`dzz>grVz)@R~v5{SmZ46RBnpMAitsP?ypS zf>z7L9;87KQ7raEN?J1rTE7s#KuTIO2qG6ry^xZI{YYw)FZD)B8g@7-vQ+AYlr&8D zKWu%xV+foai#VZ(vqLYEd-?9ofdh68fv;Xfk13+Zqkcqff7A2PFBL;LS-npCT*n;@ zu07K}Wh7VA-qmy{rQlVGBO}n36uh5e`GOl$&+LrO z9SWn$+nC0 zIg1l!aWbj{ZK~y;i4v-8ZK~yyBnefvHr4XmB?(owHr4Val7uQ-n`-%Yl7uR|S?kPi zM}IqJ7_8G2%A7(qMjh|9uw-Xy8|iB(xF7{wz>8=ZC0lk(8R_@6gRJ%r=uKoe4Al>{ zt;fI&aQ!fXzSe(D&{jsj73Ya+Q82?HMnT^WgG-#0{auMFC{rk)Mw$GS~!=9`fQS~i25s{8>&)hpo{u9q8qAG82gs=OC>i{rLuZJ z(jSoAP?bW1T+-i_+)$M&3tPMNbD#K6%`yB1#ujwlFz>+fPAl7f1FLj3AH14xjlO8t z&|yEAyhdq)50ujf$_q8Zg}BE9`N2WMq2MFk40oL~-_h%-lS zK1c3|t?4=PggNq5%!x9UC>t?vleul!dWP{?nc9UDasK{%gp^$L^GH!qhXxI8gI-Kg zhcy}&iRtUWuUlh!MYn!M_e9E3fflPJnhCq1u2kG(IGmZ-=>r z4=mwZBU=sT?eYPod<5c=(_Ss!UFb0is=ivfX)WCW-59R&0xBLSrMV0ozU)>*r_r!B zqiLsToKiUP>W)5#QfFy`Wjf0;>@BAq`_v({)#}l3^{fmS%78O6lVD^NMBE1*FjoNA z3gCsfoUMo{`c$Z0xJ&ZfB{jyKWtY@zmox%BT_-8)Bp*CjPfN;a$p_Uh^m-)aiR6O@>-0+T%bV3> ze}MH}N|{UXgu3JLT+@KYArqh=i}A@~8lhfQ+hJ{`XZ#lv{#jgy+PNE2&A}P3LatZL z(XM#OdcS0wp;={#`-0RPMe`=WSz-p)d(Q4+_$s1@tAi>hFv&3q;;OwyQI$e z<#$U?yCo0A7w?R#Yut|iQR^&%_f>3V-VB{Q+55TmXDH~@yi)|S`q8upjf(n>cF3%d zKUPMY?Kb`_$}pffBVH^F~`H zFzvB?Ipe#W3BkOQ@mYzzQ*F^yUPInLhjGin$yJ-Ct{vZXRI7*8^b2U zJA@g-+>lQXscBeSL~S-5n|5w;*e|d%+yPDQU_Wa7_ebg$AMW-m6kKGD7g<*{yRFOZ z+~RuZ*k9poi&(CRbwC2l=Klo~`i;>Ceq9{=o3pI`W&Mj7`$;-$5~&+D>#Une zuGU$rNv_jb>quTsS(lT#U>jxKM)FC@dXnT@l=T+Lm6WxTGsbD!@33JuNFEz-NNnc2FUP(p-=zuW@!s?JW@xHAcW&T}(uu{I zAQ5;a;-#w1kBd?*Znyr>t`IxV6K%%$iqF4wxEuNS54hOX%(0n*`lSMk`OXs?Bb&YE z!HLM=w|`BA*OyS{60GL(eb*fr_U*Z;aGBM`!=)JxS>ierN;=!^*bLb!zh`e8-t$^O@r3=;c4NUuJLo zr9czRq0DnATNcpDl$Lr+%wGTOLk0yqwNup9+6p$RiJ4V=!6E<!=j$0Kc}K(!iDM>oa1oC#gdG{d}-30cVy@@>q}ZOm|_ z8(?}A9cMSWt^8>TJ<68%H5vCWYvnE?Uq?gE@X;NT%2n^F`75 zqG&<0x}w&I&NZS1&FYGpCOM}`7Bs6X>R!otuVg_JABw>-u(0LgEad zr~~DJ#PU^vPA(v`&d%xNb0lBT887G*WLzogC7pbUl$Yp?C0LFc-`?`iwsSOdC~7CS zPL0u|tEi(qMup*9j<$|&g6S;nah49l{Um{LPhf1bnxdX%EN7Wu+^!c{%SD#pD&SfL zf>7s#^~9Oeu(J;{OgM8M$yJvZtXmbx17-B@9OY>a~Ta1%ol6H-%J znql|@prZGOQ4mhJggyS<#v9!yO#BoD@Arr^Kf<}fN3#3;r0>el=3zb}?Rt{-#Wi?} zb~{Bk#C)1|IZgXuUJcwZ|u{jP}p(U6A*o!IY<*dGmfxP~tETPpQOL*4|v z?tTZP{%FXXpx52+uGAk5`Oy&zH_x9=MZ@n)2Yu3U+B~`;H1O(Ac0g4-$zkBzV||)N z!#0Rz!yMEjc54nhYRRh>y4EDqMAp=?rHj~^O_Z2vodm8Olq_sM+g3JXZi5QPj;#{K7#C|nX{+<$I~!Yz_t ziNY&UM$K{+|prUD&_*SjsKcc-K(P5~^jSLyu`qbQ|F;Gy*1r&0TXf~hz2R+K?>~>A? zf%X2twn9tadzX|BX!ygWxlnnWXT|fZZB0F)+fPS3edQSkt)owp`zOgChmUe)_gvW@ z>9Y-Ox_eM51H=c@zy7_|;@IeSe zeN!_q180g&F~^8uF=9C4%cpNj^G@E^F3b|VvxEp_qH3AU`Z&=S71a2%IPqJ=_rIFB z;m5cE^Ng}Oz;%FaLp0n|LK_y-HakS)ri*D?G);y(>wWexjgfAU)l-buDJBT>a^A3< zcR|xKjKK3Pmg5MStj-oZXA8E~Oc+EF4O>JPG*&cjwgsoL$m&*+-zqv_d8z1LD*B_b z1nWz5{~-FKu_MEs?(Qoke>7HL7nIzOO8#hUK%ZK2uaNxFSnwG7%Wsb(;^zGmy>2y& z3r9Uqi(ZF36GPF1wCHt6k`#&_q(!eowo9StL0a@Wq(llu57MI7A@8J6^q?-g7c#dd zUYQ4HuQJA1h7*C{8a89BAi0V$R*_uC80$!mVvSKaFAvUstTBenBpan6)k@UGuH1bt}nbqEbe>;#O$oMAWC^gIw06vdF zAT~{_xrWtTW29{=Gg1#dd--A^yyHFo_DH9R4z`K5Zla0uC+Q|9@j5(IQFOCYbZcZ+ zYgyP~r|EFaiy3(_V?s(=OCa#eCIfvZS>+_Tq4gB&bBZNY-c?q)O3H7r`Wtvgf-7@u zU?tlW2NSAUyK2^qv%D4q@5LYxwF+Ev0nJw9y#p}o3E1W0#963HV?TE1B=UW9=&pWqQE5Z5OPO%sJke0_@0G==01g7*d? z5YMDLgr+-$NYvT2Ec~!MAslnQ&?Fz{VZaUPLi3$M8!Ue#xV{m*(9EmF#oXqJKA2NQ zw^Wi>iPlxvQ-#}pL~gTaho`{pqWgBy4|ASq$rHUX9}(S-h(4GHoEXo`c%byJagpl4pqe8KO7- zo*80~8RBrn)gg($etO`V0`GTRa669U*=PVlYpDJhI%Ey~^wrEvt0^}HKIkdy{gjQs zLnT4fCy+)>g4jDj9E%>+i*6hKeautsQPa%RY?}nN%}=P%=!9!wjm1ukgjKsz2`Mb{tahbnr=mbr&J`|^w7L*~$yIkZg!_rE&q zpo8-oO^~C5f41nzs@^Mi%B?mphC4S(Xmbe}t++>a;J{CKuJ%iyct2Ojr9 zV>At-P65BV{)|HO)gfal#;wY}tzD6$>yv}`hSXkpQL!(DUJeC&D9aw)9h&}R&rC}C zYdKuYDHn|8WR6pX;8-D;(98XF@lKcRBRZ{scc=v%%-=#yaIa*k74G!a1m&!EIolk~ z23tC{-4^OUC>^d^XV9h$+Lk5*6S!&9W|C7Ghg8NBO;fM|SjQ693t8T9A0}s7!FeM! zt-y0fOb1C`&6`&9-bgLOeW$!>8_7FG$DN`VQX4QZEIJ$$JrQ@^H|Obu$73@LFmW^> zBm~dunY3Ld?KFWIyNJ$m|3W(g&u%;IwELU5_0ba@W3>%@+$&m-URztHlj~^Wc$npk zemUcq_k4Zr_35?WLIa+WSCYraqyT*ixs^YaGo*4RJUi{+3_D29;q7vGr;WajZv#I( z84tBFZ?}_oTHJr}H{Y&Xe*lhjQO+bCihZJCpJ?jR#qElzW0T`)hPzQenyf2fL(LPz z=ZUs()vOaA*Zk71p(ZE*kp*~RT2!Qa~+bofvB<+n6DDCk?VzdmDp~T*dMjA0wZHBvT)=}f%zvbvvK|u3;~Kh zIr#iSMZF?6z9M!&PLcv6V~yX49gvfxz{ptRrBVmvB*CDp)cAnZ0XazujEptDD|J9l z(z8F>N569Ex&~$rOfpO&oX}{UAsPp_HQj1hO7b$DVHwHmbk=pcMo4LDs`8OlknqYQN2}3i*7*pQw9>2a@2jhElIp?{Y6-^l$!#`V^ z2uz9K%n6()mapgB)^om?3puw!%xNPItk^kZa5jA63NCmBXUoex`$zTDo6Cl0!z_82 zP<@s5MBNAGBGBeLIPF$}InEAqc{9p!hKC0ThWmme>W6T(Pd22=j>wAeJNYJbx@qnP z_{1pMDT=nGqb=E2v21-ti6%HgnUCOuSkSx+b!q*%!$_B2x|I>TF#Gf-Xmp+h!Dm5p z+=X6qzOT7pq}Ji1c%LXf2(jh6LdL6C#Aaw+9u^!AW3RY6@sDP)XMf!cw<+X^jyZT= z%5Tr!FjLk)&V`Svw=PjKG0Z>xXHy*Jdg~H#+ZOS`Usv?q0>5e=?KBVjypy)L{j@(| zo+hZ@jDfBYayLy}lel^dd{h}Hm63aKs<@U_Tzm8ta9-wm)^URnJJ*Ds>s0Hp^*dSp ziTX*vs`Pim@5BbEX@+S8&C?m?=?Gq+Gb|u^ovy_?9T7`hr|Y&(_XWOpj;=)xDbLY$ z%OT|(buBiM@{PJ~8%g;Qo$(0XlBb;uV?0T6q0U%Ha*@thMDk^w@iNI*b;heCm+I_F zb+#S0+F2%s+vN8>(HWkQ{6S~%JcA|}F2Y8U98Js7B+sSgxg^h{<#{A0(vgXD2i(6B>0ycV zD9jnOPX=u}BUC$I!)G(eMYL-XR#w{nZ`TVXU#BhCaq5JY!fh!dxteyZraiGIlgPLw zGTzt}PG!7OnE=dLj3o;%?!o6V_7@lzq_^Sy{}VaZCIB*WtnCRSBgb$^|0i+`71w_v z$J(ATGI9+4{r^Ocp(*~K$gy@<02w)k+42909BU^vdY7<`@cX`FUEi^u*vw4?E{WLt z*5V76CFF4jTYzN?$$Np@Uf_)taRE>Y$epH#fO3fBv%u#p8AvMzF2&^Y9s|o`G7we+ zTx)#z=K|Jqp_rd>?$5}btks-*HOa3zx7VCEQlXkkb*m#einm1Z zURb`G_gT#cB99E#FYmLB;L=Fd>_3M930L}W_-%j|RJ$_!hA`whZ z1k+Jxo6_&&kxp!xCMX78#dsHfuLc`D2Hu#P2L(lxr3eQJIu`8lp5z*nFTh+J+V2wG z2pc)2v|lO74`{y!BxeD?EYJu&8lJWc0xCc-3S_{PA;Iq!-r50ET?D_|Bv%Q3RU}sn ze$|+-tc|g|QFc5ZzHxi0y&lEfk<$h1r2h94P@N3_bD&(^uk|kIx6YEA&5~Q;2AU%~ z&5>P64xS?uM;yh<9b)A!NdCHXYDL-8Q@fyLbRUG=2Tjoz#h!a$;LWl`@}o&By$c{_wnWKZ*Nc z9aIDFYS0u7`VG~QKfV5W?tb`=n?>Vh9Co!^(RS%iXX~^p7U;|i@b1%bl|6)IEr4&iOA6g3HAUSKhSH^$yQK)k zduM+8{PWA}55YT}rQ4sSKSNz8);XA8cFF!Q6l?;@CamN7MyB<*CVzDp*5pLvMB)(P zbvn~J(p1UOnQ}OFq63O4z)+u3VljY~j^n84xZos(*p~``;+b@^|TA65t%6~zU`BU@yTgR=140MHZJMWK_2{reyF(G}T|_rUwS2SU ze@A!c*`I(qat0STg9||x5efpsDMb5)9W;Tc-<>GY?HO`fTR!OL+K*VN9nK9mVe@;6 zaf)q?1||&{e5 zC}R@I$&@jf!u{jIomBr;PC_$u*3jhJ4;z#`u<$zh{i^N&dtbKao6(HO^vf zKRg3BnX$%blH*uo9LWnO zW}H1TOYoc}G{)B_2*w0_9ydJGM=&OloGciVNq!?Vc_XOU>D?+uZWX&>C-<7jT@y{% zoV_l(Ul#*0-xKxs@ct1P)DiV%B$tc&a*`j3`bQ*Jiuy{Dt3-Vj$+aR^E1Ix*{9bf_ zF9u?clJrrMZNCak$dvT6Nsf{9F(k)H`Z$v3OZxdFCrJ7Pl9x-|a><0v>vYLIT?)j! zPSUT#`(vPeCh4Tcr9jN5CH-l< z9|xwoN%}J+7fSj2Cb4mZ4{b0hJ({Q`Jhu~pC2_o;2U;&=5?ZEeZG+6BZ5b#14PPt2|q1HCwQ4>W535VtA?829M|uV)zHK z4SG>61vz}B)CTwXqf+=$sSWOd6;gPG)CTp4A?_p3M_5~)hwpnyaKD7}qx1`pzL?Co z7ePT4Wv;?!=L(f~4i?3VN-9LNPS;vt>iJ?2MYc&Xj%6HJiTxpBcqiqR1%r z8pg5)bKLZjRaUQ_7vQbScw-swfHdtY>+5cH4F_NN$20Q1Oa~zMLi3D#Z<1V2`<9b@ z2DqHT2P46)X25ioJX!R);QJgOBn7h=WdAHV2)()(((^#-@{Egc4Q#gPFk5uRx;sX6 zfP059Cx}zv-XX*-OFy6f#N)3^@KX)}zeD(Rp7KlOc5l}1y9A>ybL2ng$k96N;?9wm z=;p|o#J|ML!{X&}xWs&U=zMuB;=+X9GvAJIy{sK`IKK51lvSswRqXgGb_!argsB_C zR~v<~C@b-gR+oy;vgwy$LnVrGqGjsj`bk;JGXH(YM_?RcS(m+|4keo|db4fl%S&xx?gR{pN)ojxZqoPg- zm|#nIgt1DfC+(&(_+R0DSkyg#Ri{Zi6hl-u+BGFV&iZ!7nsa7LwyJysm{6Q zat)ELgBx{ub0+VJOiKl(8Jl;Ie1dO(g8vN5AM-69^D0tL3JjaHspY$1P83=v3Y{^h z2(42{ej|9l5rR;QDC#OPV3pVe8G^oFr$rs`xqHLMq;?AF6pEtmCUscrVYVf3llpa= zuiK*WVp2yn8D-1jGO44Rj<(HG@N_u3$ypqefybiLy zvHffY+!V=#B`~(%DS-E58lT0UmzRo3%7UW|jsw1eO(oLy;x`*#D= zxFA&h+Bsr@c_deHVO4m|#st@Jy4K+{vElph-4k$gnBcL#O&8+x1x)bhoXAp~#SN7f z-}p8kf|>(vvJ{#g5SpRj6+9PB963WAg_;9?zc?yR9E~|a9G`%HG(y`H8n6~GR%x3; zdt`~9qvkWg{G89T#h#dR#PA$)6X_MP;}x+JvI4YCp&j3dosbovZ3^wURO*COowg~o z;{mA?vI4YCp&jo^osboPz5}Yn`X8G{D)Fnrz~(>ocP)kEYzgbS1n2iO9p?LHeAkhh z;3RN6iMQGHo9r^-{Q5*qa9VIXjTi8S{@F(Di^F0y++GF^LQyyOv&b(z&LGh!}(_HLl8b})2s zLt|A|2ipx+(CCDbV%m^Q6NiI6rVWp2H@v)mg)v?sV*@uChnx810~pw69G;O}%Q)1M z9M3w$V}%Ekfmnw{BxkY?nIvy!9X6A^pLN(z@)6c}g!Ii{vxe8K8(xl|#TjOCZfFEU zQ&6yv7CcZ>%5WR4VU=L}p%^%Y2zJGIV;Ib06%6kLH#EZF!C!*mBgwNw!z_`I&k+rC zNRAZ^u_P}L4GT!l5DgjR;b)gb!zJ?Yvs<{WH=NekB@Sk%yyw5)Ge7PLlLV zr02R=GAt$!Pg^Y+R+GG4(r+g{&3%$#A9=XiamjF;8-qY?NN@C2tgrWIy*f>Q!{GypuIX$^TjJfSIvvHfr~)XGfr1B}h+Fu@(p0jYQ? z-UQdw`Yr+ekcu(EWv0+&APh6y?wpSIUTHt6)iWLRBIT3P!DP(vm#Q9sCP*V`vuI=* zcG$F8G%^o!dH-Ffh7J2v0XP27lAUMC?#OF^+558dHrXBJN^Hz-b(9BVXv9V1rz+|hmOjJUA)iB0@3HhflB-y%iZx)brkbUySp(YO1HDd;$>xmc zC84XwF=t8M$J6_GJ8ZM%A^lqUiv}%qKBV)wA=)$bR@>5@KZTScao=G0haJueo zzYMUxt2ETZ(>jW-Fl}mbS#=(8wQqZ>%^uwyP$%%X#0$CKO7Fg>!5S zZ;s(@N3CAAf9LXd@Ivj14?6P)><6K4r(FTeF~D|(W%-6~6?p@z;1yRW^A&6ftUt6U zXw{(0kD)Fp<=dC?Jy6ZT$UEQcHs2O;dPw=q8)!aJmcd^k@ZvrW7GS1(&I?$p4i zu*-!hVV-D_u=>kQYg~)VpSfsRuEQ2_W055fj}_qjQpr54G%gH|3)BhVmJ)8*cC!2q z&Tj`rnBEA@Il$)CpiT zOzZ=X48fc&_Jv1=V9pU?hHrPw7e(nJ{>3y{$6|MQga|Sf;VHGERD*v(O*_T2J3LYZ znU3(dTS-d8zo@32>e(G0F@j7Z}RpWDC+y^JjNy&Cn@>3NyG2-4FlHNu6 zvb5$h^40w;7xaz)7M_LC)UQ0*k4Q{3%b4?oa&mLl(Hj||4&K{=+0no!$>;Ur#;3eC zbLC7`$1LP>)j8|d($<5$&%3_iAEz^0`+L({l3l&CZZ%Y5lmzMYsD^5cnjrm>8fq{a znE25V&KTi>bX5h{E@#|hA$;3;qn!`ZTfi|pc=uTBglmHD8k<-=B^XmekWQA6=qeZw zSP0-l#5jbpK#(awj9C(-p-r%15dEKuMW`3&MgMtLo)i6ZY+(DM=wD>zX35u#f$pHE zlJN-}pExZArX}VmWkCuou<}7UaF9J}IUyS-*u>hivT+t6is3L!F^(uf)YCr2=u?7J zul^WMefAe$kh0n!MX(661gYh11J{9P7*Cx5dqF6I6f0`!nuv=9A0Tdtxk}rQB3=iq zy2Jwvv2?n$!RE$w1|w-qVodu0`}sTM**j!CRS=VgKu;i=p$#ZbyucVs9cbRs(u;3r z*QG$SB65BN3B4#{s<~?tonvBpetuv1{aZ)kdJ3lD3$l8F%|{uKa|SSmgEkRoB@zAaTYlzr?#Bl;1R$~8&l>xs05(X?A0L-A@ zC2rc4fE7oyIpU%U3Y-z5V+O|waN>%NBr7k7wgu5c$B~JFW?N?E7D;cB+*m&(=|ebm z!u=)tU4)l5U0n8mSh-Dhw&B?(P+G~(Bdi>gwV3Rpz6p~NLK|b{8?ttTl>z>L8V4s( zj>+0Rw!Tx*I*|bYn2lBaLyRW{1T$6pUUkudL#J67+#zQuJ+v+73QujHIQ#%c?r90 zE9P|CiZQSJ0#_iCDGg^7CACq6>oT1sFUDAZ!~kg+Abaui2~wLN+vrnpBkQ(QIHs22 z@dlOPAg*NOQslL6_wYlg80B6V{hk)Hu*rP;@3oN@EE%C;?{)drc&4Ik+EBc)q@uK}vfNUfuD6t8u@Z|FSlocc z5-gTsu^fx_Z|rC)05R}Ho+dl&O19)CVkXDibipTh1w-%)o*b*1_1GHcdRIoS9h&LkP zO&gawImJLA5SYQg%*h#J&QSuvSg}AbZS~&%C&%CNVt(KJe%II~<^hZ-tH-tN#y^b@ zOM0-g=g;RBJN7GPqMNVUzWsZ{$c8B4o|ik#Xoux999;4rj!>FIUYzI_>hi zce}c)b~#KMb;NbI$w-q6#Tl3U8dKHw-Tt8Fn#ZQakBV@tIV!aIeqznob17cEwhxYS zTNCD2p)z4|*Pq>ba#DZyThXHW>1+S#W%A+L!_-gO;~i`BW;A3+|CIgl$Hq3|b+NgQCxqHEPov+TT>+`+LD5twsUytDCFq4+jJ;CX!E!R%{?s(JI(suS^ zD$(kfH>IN;H-$bFEc2T*?|T2siZ_Xqp5?w8Tnvx=pwxGwUpE$u~G_v+%)N*_9VXXKfyz zYaW*#b7_P;Xv5Nz(&vGOx0RZdCm)twdz+9p{NbIXzDuV%T`X;!t{7w47!dWuU~Wt0 zis8x1kSV=HDT@w%UK*M*$baPZ?25fl9J7754UKXC@TlRCh z?LMSvy9&%H>mCBuPH3mlH3Ay;Jp487wO)~!Uqj@SvWGxxYHRAjRuEYQu|tJTSKf7t zs`oWeP~Y_sIM+$oI*B_QqmI#{LSd0$#O9(026D;<6kZytUK*;|AUend749A0)oWez zb3-XLsE>dxC5lpF+uEVZjkA01ziZ4FOR1zd0lSze7Zc0Y4pl0Lr5_nsS}BuKez1-j zBC8=btsSZi>vjF`#s6lS@}68bR9y#8{Aqu^Cxd?p8gcb}vO-P?!PV6g)oO_w+lTI> zMhp2{?i7pfol+PIWKjZkr13~oU4vq}_g*VyN{JaifuG7x&AQX>dh?~*6NKM6JvWn5 zk+9GeM81NUwRUKsI*R@jT&7jYDMRqULF3@bI+;3YP@K9qWtCD zshw^|XlYB@nYESJTB7)xfBx})o)IpfNf6S|yOqsoBaXM}mGC%YL^VhGX< z$qa?ALGk8<4}W}iDR74+_70ia5`MS)U{{F)EBR^>L{f=!Ny9W zSV=5eJG4=8{?fcO?L|--(o4Wju%DpSH7I^{VCc%^xU$at6rV(@Pa-wjiSDGIBEr_9 zY0b=+0lY%BfvVa-&32$W=oO+II&S&0!8*v0l7kO9#5f1GEZ^ZIZ%3UzubDd{NGeEz zV2x6aveY#w{_^6)f`-4&2g@mA_!^&#RiBLA*tLXSOZ2Cz_5I zj&w)87yo+KIG#`XBV0<^f*0Ag+3j@=PBCZooz6DilOn9R45RyFT^(H8q4-tS*{RD9 zSVkF9*4+iHh1|kU*9hPuhd;uK>dJ&O{(Sl(il6_pq3Sc_g%CPKKmY2(qWjT(oTGV# z218W?C}dWG!tA1D4kI&d6Mk43<)MaOkGkO>x&X`1ZP{`lcv{Q%Q!D8p4}TjPr@IwL_Jw`Oo{) z1KpCP0{0jJJDZr!h8)dzsFGjOY1oIY)+thIDCFn@VqXA>hwo73SI4#1CbMpVN)W7K z4^iwPn$`|ghG)N7dGM0$2r1PWRJIY>HkgR-P-Xdh_oo-fY?;6>_K8sS1agEo?X6$# zRdI>tmsj*8USYFXwOOoYBk4%J!s|O*|7*E5BvVR-!X(>?&vp{j+TkSo*iFZV4Et?{ zlnMluy@cKi*9qUDiox4vW5Kp$B+(Fl%_@5z7pekW{j}kSnd$v6EtgVZFvV^n-wj!g?@;AKu&34W zzkF9nse!PP`9wJ%whiB*ih0p0_QL#jg}fK1gsM}pC%kAcy%)Kj>p~-Fxbfx zX!xVoTu>PX`=O9{7n0D{4psI)G?aBvf>V0+WO?F1GAffZz<`2JOb z$l5xv5dm%vvKXY+HTeF(PyG%}E>2$~r{ckjXtQXwu0iqKv!6Fi4srTfDhP+Gd6;sT zgRVjG^60;06W?&+u8^tI6lpfP2F0}*miGeayFW{*j$nK%(QGANtsSa3S9N-k{@aLk ze3;%Ds@_2w3#NnhVcI#%bA8YMW>rY3E?}dIw67w8tsUCvZQwQHsDarI-o`_b>LFx% zU)oo1Bjwh~zM7ZQ_9!R|2+}@dcAv2q8?TOcMhm;&r++Uxb9s-H@`gaKB8pW+-P)nb zf@W`v^z&o(8&U?~M}J9wGhKt?*`X!M!0o5@D=15t;3Kd%EnpX|0q>gj~0jm@Op^tsSbge=83uxI7$Gl3>&35@jw_ z0DOlkZZ4y}@*YkEl@2gTmMY6e*PuAY#`aH}1&>ZisQ_5RE@HZi*tK@3vb))2PQi4= z87b8tB2i4Ni;1?iLlr^sYJcI3y7O{M0!#H!c{s4n7S8%KbaLj~q^9)w7o=1$Oj1p3 ztBFf%hZbIqD_l6i;;$Qqlo7a@V4Pr~YfzlIaKHbm42uQ@rGg2HjM*ZHWt=)rAIpo$ z5h)9U1-JPRUM*HtLpttGch`ULEI!x_tlu`+hA;u}ksdWubuy<$pnX&KYVli^b&^lYQ^<=Id!yJ=9SVbcEi#aZd1=X9sH@%P9poxQ0=!VI0|YgkDF? z(1!bq4PMWTv!C)d@@Q2a*yu)g)7v-{`(VYu85O8tsLF$l--Yg?SLl4^vuJ9p^d)~X zqs*ezEZ5)!(XZ757Ib(CVpH&8J)>FAxUuVr>H4-RsO<9nF0*V_G|MRhDyAA!FV@l2 z(H<=LEjg(P4TI-ldjiT?xL`s?Z`*wZOUZqy6*>-3+^pTG&_g zMoJ~ard>jmOCZzo9ZoXRb%WwrTFQHVl3-P^n)RSP^cFHw(=u-Z8G@J*zy}8yvA{yC z2pgTph$y(9H+IXyxE(@@fqW<~B<7eZ8Mt-n?c_VWkP%FR1r9>u`!DT3be%eGw*kCw z>uDQ+0EL0mAlyY{cu){&!rL6a#JBtPQM7x!EKp?3u!)jHIo<>eJ4HN2hNTh1W{I<8 zcp@2gs(7jlu?hply|{?Tu44d3{M{e07P6uWQa`|KpXAKi8}%j2JjcXgGdpY zF_01IDk8;X$-sf5tBDlPA_8I}X@$WER}cn+fXBdCxy8C(OM7;;-URX>SNY<~5fg(x z4~S8KNEjl;;a?m^{0qYz>cwG1y_7_Ub}_d?kmOU%F-VAg;av{%;=71>!37@h;#v^t zf;u_6pRNHj==7bV6N^m(j{`UrACz#&{Lw{Y*kv>d2K zZ3MNT%^_OUMlcJ*9FoPAxBGo|h<*7U7JTtidO2Y6fuR6x4%nhLVp^DzL$Wv}?iSGI zVJt=lw+-m?s1@Hp1(BFlOVs*f2Zv&iZ3-?-qC>Ly3Io-eX(h45LXLr`3U?A?3^O8K zaDs!m_@!~D!!VC)aq8WBtuo`h2YbQFyD7UlVBSQy3;I0BMSTRhuoe#5qFV@UL7&I9 zs6V*2p{b%~LdS15GU8m&=Rhvr&T%qV*NNYkbcVc8MeM4GOWTR6A;KDBf(HPBFu1|N zUvy*sHb<+q8Z&=*U+bdnfE7E#IypIc;RZ#F4DWKt7~d@$Rn#}<_?G~PM1(TJ0dFA$ z%y3qCn2amql7_sPSYpyZ*bGbJFf&FT;WEs|gJhf!K{5z9XpF;-o2!QOFFX_uW{hYf zCmp1P1`#t1b8s1*K%`8G|1VF7SvPw(Cp3w@u|$WHAAH_2*v{^kld#RcIxx)tWqx?F zv~$L5fzd%%Gy_jcjRWFahP5}aSGLKbgi#8-I~g{Ljq1?$6fKNaV8zR@(YDd<_=JcZ zg2CZ*G>14HhBvEOs`>iio>>9JdoMynL!JE6&RL%X@#b_Ym8I zQ4Z0g(X0FCrL=#2JO;jhpfb=6wGiloHV5xf8xM84)mju^&dmZ3kGjZq!~6u8RCQ?W7ytq zy@L^mFl-;^J^`5b88*f{CLAwehK=nI8;KZ^VdH$_BCyzF*m&Rg?pUcaY+s+g5m;2? zl?r>0qZ%*`KE3+)UPD8JBna=kqGsT&vSnM(EWbtHEM8OQ3EzUN@ zP0axCqPGw^VloC$3cZ!c5y0TB2xpKdGjRKJ7qz^ESYYavzZmb{eX%GR0%~DoA;ZHn zT%=uec8OUs>=%o^7Gp4=4C^L#v%@E3L|~OX4}x?6@*p7K*$;FF*$)u#)CZbE&I1HI z(}9Bc72jXEIP};U@Gndmroj@hefb-Yn~&zF!?2&ykHx|dc@fwL92hmG3a#q%-dJP5+DB{6tm_==8CU!mX)oxZIazYxSL3ka!|R5CzQUNk`0siD1BV; zp2iOe+lM1{+BQ!SkrxpQyc>69jh$9f7e4!&IN>D%;pXTbbPy{FFv@W~cqpLklxKa1 zWhZWTSRTjtpc0ZjV3MbJ&}h}ogg1lsRnCJ2cqly_v3kdE0cLo<2QMW&%V3COdC<&n zug}jL(zzxV%y=uk?QtK?oGu*U`0MUG81AI(2WGeKyk$xHOwNTyl@`c=fN zirC_9j1&<}%MnAU|NDhI#*5EA;PfMvk*>H;`-&ruj!Tsn!0-wpUO{A7Le9Ii_4&)b zLkhl0Ag^bC>fJBI=qJz*Rt7sEMS-*vxXE!&STf+Zhhd&%LT`{{0s&7gVbGFq92h5@ z6u1KHyDQzDvCbX6FRxvw^|cjTlJKyIKr;;MDt6UZvsf9z$~iI$mBtU6Q(Q#NCNbQNw#Knp^VCMnlR9Y;!~v+Qy^^MtGJA1&Fyoz;jc$vGFbd zLmU-_`dDFuKF33$H+TiZmBsN-sQp(%sol>$lh?qKe3iahBzY1hg*+{{ytd|>Zx(rE z{)_bIY2^UPY)9LUZ#$sQF3z59_w#HbnN8%FX&I<3#mk8di%kwpstbt&E{uD2DI}h4 z&lN;lLEJF)a5=`llC;AO%s{rKw-G6(U#=do-cIZ>Gjg!aYzMJIh=J@H1cam3@I)i4 z2E!bshJ_qnMlj4%X&5Qopb&13Im2P^Q$wdHa@Vbc0D3At9r04fGX!RMHVyU94P9%x z{ocV%px;5+!5*vB!4IyS{?{&h>o)<%?*Wr?R2v$>3mk?yf(?g}V1r3{b`7^mvdmrX zP#B^YF$;u!Ed}6Z&JJXxABsr5Ro8dkR!4I7bPtnPY>yH0){gTGL#7EkivsC^86iM z(@5NbfT!y)5nz@E0ms#$Z?gY<-=_{7bqWfY7)gxvSJjgw)*3S|R8NvP>#wRONxU@% zAF3xwUuz5qk{K`yPx)bJoPTTbR3G#DMaY1|qNPNMD_{UAIIbn$2pt$GFNAxDDb^c^ zIKU#$5aQRwg9hJ#qXcmxq#;0`=L1o&qCqs+NpbiJM6#T8C?_F^R53TeSL5hGj0`X= z@+mf04jv1O(7LM>4c~kv|K7LCaO@Xx6NbAe zySO1O$C$bjm*cB%eq$S%N3hNDjc6PBMpz(6HsYSc?FGXe$%v~!WCun#RuPRLs|dq9 zmxzMthi|PpmlpXHTVTIYLS@kBh(*-K6~Hh@C*trQuj&^ixt#d>n*|{@g5=Aw zi>Qt4A{gO0MHC>X2m+2v#9`|z{->tPySIRg-Id+#F-%xrf;LAiqBho-FwD`3IE-{6 zgo`H;@c_+m^Dc_J^!Y9L{&k^`)d`s4I7KugIOMh?<^J;b;7ey^XE(%86}|6XOIZ5y zJy&j8PSAW^Zd&FM4VE}uxoKHIG+&pS(G?^PbN=QDQ+k+;wEqvRSCD*CLCOe<3Txlg z_YX!{X-ccSQgflKKb#fuu()XHP@A$x%g^-fs|mTsXLw3 zSUZ25DM74NtZfMWHM7ZyU>$IGSY=)9%4~OnA@3e^{&mTi=k5fnt4*h_Q1kAD`4EJL z8C!pSZ*D!cGr{^O;oolmnUqvV6Rgv!|Ef0j&E649Fv6nKmF1Nep9~~;Y7o!}Fz5#! zv3^nE=BfHw9?l3V^SdugBe-2JU7uGIxg>8I!RyMYdG!QEnDH!v)r#u${HH#LT4oW% zq2m*KzRj=MJcr;ulKqrrBXL$OC3rdQ%)C(0cs1cCf`}H2D7|Ca*{|F;Tg8+TEVE(@ zZ;WGi+U+2?3;T!e3-+JmzlY#~+MBN!ci=?*UV;$3AkO-EptJNa!Ar0ElVfK({#|>9 zAdEP&@9i4HVZ+W7JbgbjKMp8d821Ok?bi}~SblTXsDB8aenDo&h|HxNLUcozD1iT7 zVs_)u#{;R4j2$)h4o>Y{T;1Ah1+Hxhj%`03+J0)=erno&wrl&Tr*Q-Vm$uRNZ9nbX Ge*O==dufya literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvAstVisitor.inl.C62F864FD6F2E4BF.idx b/.cache/clangd/index/SpirvAstVisitor.inl.C62F864FD6F2E4BF.idx new file mode 100644 index 0000000000000000000000000000000000000000..b184ef4bfce3f18973a8a44593154a470f6e2e48 GIT binary patch literal 968 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvConstantCache.cpp.880A65F97A09E3F2.idx b/.cache/clangd/index/SpirvConstantCache.cpp.880A65F97A09E3F2.idx new file mode 100644 index 0000000000000000000000000000000000000000..352f1650f14bead55aa6a27d27f9711b80785d91 GIT binary patch literal 49008 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvConstantCache.hpp.6FB8F6B4E99CE834.idx b/.cache/clangd/index/SpirvConstantCache.hpp.6FB8F6B4E99CE834.idx new file mode 100644 index 0000000000000000000000000000000000000000..c2eb8ac701ec0f314685855a7bb411b140a0d0e7 GIT binary patch literal 13398 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvConstantCache.inl.AE90C3FD8FADBB9C.idx b/.cache/clangd/index/SpirvConstantCache.inl.AE90C3FD8FADBB9C.idx new file mode 100644 index 0000000000000000000000000000000000000000..ce6d6740a25bd9bbd0aad740b1477889a3e922d9 GIT binary patch literal 1638 zcmY*ZeN0nV6u&J6dmpzQuOCbv&sSM#o{Z8Dif)s!DFg^+<4ZDOCbDi6kh-7yq)pOm6FC;Rq22a?J^41)-_tmT8?i1aIN4sWL+NOg}Mmnz&p{#H4@0fo7wKm^e@yblN zoouOGdf54B+;y($(~l3Gua8)n=#IQ$&1pp<@>ILukDyGD$zboFek-Su2dfa)ss1{Ok*{GCSjj8JfBnf-^h!&IamD!iWx%G}qQoaqbZd zRdZXpOh6v{UFnUz5r;O(31)3ycuwDnNB}WolD#Y-KRPN~My6IiYuzEC+WfOeMzw zOoEL{BL`h2*c@VB3(282O13nE;1tzUUh?p>*X!guY{gar-a2f@_GhQ9bKIZD*n72sP4#uH}P`7=uuR6ybEJ>r7 zCT2p&Lerg`0pW$^H3T!5Q2}#wwN~*+FnzLAz$3vt=2d{2U=uc}ARJv_lNj^=$!s+{ lpaO_Zd6J$2m=5|1lsTnFddffWgi0S+pHMYcoNgFG=wJNeF3A7@ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvData.cpp.78213380C8ADB0B9.idx b/.cache/clangd/index/SpirvData.cpp.78213380C8ADB0B9.idx new file mode 100644 index 0000000000000000000000000000000000000000..31f355213a317d08c94f27f8200977e95d498c6a GIT binary patch literal 209014 zcmY)130zEj`vCB=o|=Y=o|>jqLYryRLUyi;Yu_%nnK{eM#NFJ@eedqx5Jo}>LrEA3 zVK4|GgkmreLI{Hp1|fw1oa28^=XpP$_kBOU&vSm~`7LLendZ#cp`U;LLv(Yefx4l8 zOilTfY2oDL)ZX#mX}|vRO?WFOC!?>E(;qpjCw}+iwS@K;N4Z$rOv(;3`(4>FYxj^x zoz$jYSCgjBm>v`QFzHsu#T^Fq7&+(tYxR{K!Rf}^(rC@2+_|C8mn6CT`|tbTf9;<8 zbNt5=pZ3RBESdbzss4|ve_s6IMHhR!dvOs*bjD2sT)h*$V`p2Kiohxe7?%5>8#C;3 zszO#F8}Y}9m$SBRX4Na}(iyo@cTN`fY^eG$LQ`M_f(e<#GX*P9y=b42w%F{dh zUl?=DZ$NI(_LIz;LL_ub$~c8y5qrzqwy@=oHG7UcxUY2|d-usTdBL!MIvR%WSgkrQ zz2`}8g_76RBW9kyy`}4*x0R+$vIfVe#a#(ukE<(lv0|Bc<5 zGj-07+3`PJt4aK-)_YWQ@A5rKryoc&e%R!m=|677_JGL?Pfpu;^~|>M4}F)7cvh98 znKDNpe@bNm&_^w=JK#HOIT^ z*}?~3Z@l(u;9+?zF8z@7wNu_C@2~P2=95ZFM?9e&L_x zx5BFd~nr6-yzn!qY`}c-l&s^GEmv?$>O!tkq^Gg+vtSgI-Ic1xY+H_0q zo^0uNUGsHcx9`)ZPLr<7bp3J3x$1V8JNdxuk!{-!i~O~6O|5^AEe~&)9v)l1P;T`Y zGu;qW*!sfcGl2=W3)X*sUOAw4Sk75!wJN1MZX6BJLcZR z_)8~UmyFB{in+aheRbZowH0&Y)4m*E-!H$gci<2GyVd#aur`;)Qa;}wlQ#dc#rK{6 zP~^^96R`XE?$^7w{NPFwe_pe@4IE|uZie*FZq|Jd^Gm$$6z2s^os&56x_hzTl|5SD z{NF}T3!YQf?p!iG@JXALe=FU8^gh04%7HV==2fr0-?-1~K(fo6*?qs?-A&bHf&T8` z5zo3zTIsb^cQUN4?$oNFQ!bM{dnUaZGqBEec%SbT-=8oh_V;OZ>)G9aJ1@#l{y63S z$w%{-UU;_X<lfVKv(a>F+6?gS-!N;k z>_f{9#=quzhNXY|+SUKwKl=*TmOkF}M@oI^stJ!)zc}e?@wo2fI`*HZ6<>U}Jmr5g zf7~|z?`>D6{%@Z({r29>TfMCZe%kiU66ZFqb9<)DA4Eu6?b_U9N5WRBx&?D%(X7#} zf_}UC%Z6iFTYk5Fd9UA-B`3>M>r$3fWVGKq-q~YX?$R6>n>L(tjEfGjC4U^w)F0*?8g6@n455eNR@- zB?3EiFunidyTP3U`qzXWXfXWb{yKkk_b+@NpUgNK=)co^ZvQul3%>cWWY6>VpIHYF z5B0gZbEf6zx7I(SGnTe7TG!7Cdpm0Bjh_xD`rq#AHuoU;mucCqPN$d8_;tyJukNZ8 zBibL!8~A$Tg*N^tj`bhj_WU<~zpwwH@~Kv7c(o;f9VgiJ{SX*wqLSydg|Y? z^xW->A{Uv~EIKjRMbSOG{jjIyImh0=o49`Bx#(m5-Ht4trVgY-r(|t;z5T}L6E^q~ z%fH-izc}#Fsm!VCpM?AtBlY`z|BYwzy5g=OQ!A>sIIyqf*KJM&%+PUSC zp5JV;S}iTyoJv0B?pG`Js|TERe(Rp_)_s_h%N*xKr%LA&T=KC&+doYCBCeH?yh5#5 z!6v_OPk6y5{}CqS?tI_XcC+-W)yPEGu`@qPgyc<(=O)IHyvReoh)q_y3AwX8D>{&6{kz42?FJyCe+_t+!N~9)9vq+&}i^kKUaTL7RL%x_Tm~s~iPJU8%In3usQ|@(*=XExBiHCd%o6C3#xs6Z! z?)KLOL<#NgNb%gk4#XM{`5HF&@2)~_c6Q4r&n7*O7IO8Zr=E1=rhCZK+1xSBgj{bA z|AR)Sov}jSE+;E4Cp-Ff%RS*1+qdy8g}xnqbj5qqOlh2uyF{&6!VcPV_k`zc?r$MN z?)GNAK5sLaY|7QE6?!(;?w(+0bAJgIa(`GB`MzY}^xkexM?W1KuhgaM4q=X!LU z>k;qdlIuLm>6CLBcWmrfHu>a|nCYJjoy%c7bJ%6M&_lkE?c7(cLg)HPF76(!%Ni@> zUQY46%nsT*5BWMacZPGUkUYmJaAMYqoG*pmInJDS*;#(zp74OJSmz~Fd`+2YUv*^n zBq8@+vf>^)YBu)-8=IRf5prMsSWr69U~kGjpR72~=GM3;)Udf@n+v(t(sO;R7sq`i z6nshNd5Jxaay;ZYY{CEQBGen)=fXVV_;ANj`2S~=-D<^dc7)%!C%j?XO>>SH8vb(n ztxIluXtj`hL9MvJCVzBK_{b(_I`pw=plki2!W=T`P`-sBHqy#ViU(^(#Qj=O?Vk>QMPiSB(o$1_7sMOr~;O_Xw^h2+p}*Hc}5rvEA=FQ4qWoNald zhkPTOJm0yOkbJM@^kyACF8xEOd5%gkhg~}N+!OAxHIr?Hl4C~%CLbJ^<;ea2i^g-U z=X3Uaz1%~-oNf3UU!mQ90c$0p+tZ66Y{#5w*{8z;- zGK3;Ns1zUA+$Zh{PuSca0)$+$rlZrS{h6(%?#~vI3#ND$u$Nkshup*_uXY|OBoCc@ z_IkD7r1e7blN8S=4o0j=#2kwL#bp4XI{pW>O%b}rXLp3CO`87|~L zFsJ|E(XU{ao70g`=ZBB#;E(Elr=9g4UG*MAKV1pRolkOCg8O%_Y%-jt_6m#QjY{!` zo#)5y36I&i``%xeyHV9kL*3q8*e~Rks}<$!Jim8Oc+ci$IQJHke=d!4f7L1Appaau zR+O^IjqVAJY;wADPa*j#sjS*v7JpFcbpBJxnO}Cx{BoGZ`P2XNr?n$tw+bcC7d5qc zU9GszwmHKiVFr5`WjPNL+Wd{&>m2^#PE+z(wc;$B{J}lp16#mC=e|Png>0YCDlD%L z3v+QW#q%ILzIh(l?MWf`nOgCTZFjau!fdv8InE=5)jLT*&_am z5OO_ccOU)zwR0DQB6c&LyV+ZrOb>Y`TZFoeP(*4$K*WQnzLi35j?OcOJ>ph+$XBwt zKL!f96E@cUa=7BTBlrLB3?3yb9DnkCnkHIU{7jW zJmg#0c9%MTCNzA#(|V_NfxWH@$wiYri`eAN9`em>@?z%!LUP}!zjR&DaO|4Ysp8Xt zajI+hsjl5E&Y%9DKQMxZZo4(|z?3^eo4J%{F6C%*froqn+vY?Sl)tkRx z{oIlJ|8r5NR@AX2r+Fl#u_do^9wwCR^h?U*X@TBbR* z_|bfN<*l@3ww#Mx(E4A{cHv(D4tzAW`4?RhxyZ_7@0G~`{Hck5o$Bn%zeKft*rW^y zC_U18v`4tNY|OapA9?uk4xH_^IXIjB{fC`@~x%ps!HE+HPD&uslBVz z-nAVcA(MA69w?3FBDE=9Yg6L+`_hf=R5i^Wj^`qKhfDVkkK?!5k#y?TkL{;%k>$Fu z<+@({Tz$E9!;R_Nv$=?^pVZb**w5%q2cj>>oaG`XlB6e+{Q1_#Ure0;`e%AdDzk&*;y zNkTB+TJ5)8{`>sRV=mG#R@yLDh}=BW;PmG=&$-Cc$^K6#2l22t97S*}g*es(C#THc)oW>2ZojoIQ0vl(f1xwE znWgXQ#)(|yqt5rEt_y$bH0Vg`h*^2xaFJV->=qTpkI6sU4*T}W7IBdZjc0|%n}1W` zOU<`Vh9%3nNHry^ri5|)tLSB$!|&H}5p%rM950L(|Hc!0@PB&Gi9h&<7XPfi|k8~?n@AA`_^CjzAu|0j>Px`!Hd%m^Szl?63G{?e47N+^nQtvOCB}YeWgr*Xp!46LOXM%;X0u25w1CLg?4fr=DLbN! z6dig7jm)5l=u>?4DZzY6|Fs;^(rNl6F7ia<_e2xQpU3a(LN+bU z`xLp}Lwdc3aCYOb8|tDg~)j zFu!CThwgqivvCg>$xQLhObOs?^O6kxeaO=zT%?$i6;nz4BIbf#&vym-{T@@CwZTpBgPZi#2VlQs;eY!aQa_7i6 zs3Q*Qf<$mgM;tbm-{*~C56OJF8%{4MBQaUR#fNy@#-FQX%t0i1yafwB@2OrMhBDecXZ}(U5`9-MKYq-ev z0n+UQgcAb)Ry=$3eR>z3Kl*z9lB)XqsWHuK$NWwufh(G#< z{PiTQ{KF|OGH-%(-h@cLKgXoK3!nD;O2Y2v;b+o^p9$07e9yz0Hd9nwWcz68_R)R# zZTxRhFV~+|N!STntMXf`iV#iM9If9RZ3I7I{6`M#pnUqYfghBh>X;3W*JN|epQL3c zY2k`=uRuTe@z=ArHFA-wiPEcy z!lFI1=KGPJ+hkIuS~r&tV6p*E>h85TG8EyuOL*S-9a^lH;h^sgf){2LpW%0(9SmM-cY#J4u2F1v19&1^36Hd6Yw z>3|yc@K25ZR6Q5DukpLDiR9zpE`%o6=be%k1m&Cv3aAYjh5es!8B3Ps&79q&g5t#@U>xjh& zmgtBj2$t%Ir3kWgL>7W&I${}u8yBR zIcB6~K0o};I4<%!N%}fTI9R=^|C~I1;8$E^%|Pjzfx@|M=>9XVQO2!YIC zrJyyv;F-e7o!!s*FTKxy>BrwCJUVe?$9%spxyVC}-@~Tm_;<|AFxQM^ceWcVRDLT| zA);=4(D;4Ogz(+yva<6Z$}_oKBlb~J`>0<0aj;=~=(qOr-CU$X>tCT&@HbPw&i3;+ zesc0)OS-NLysqoW-|O-pk+SEuPoIwR=e9A^mPTc-@62s;qQCS+{|@|qTHLz2{P4CD zTx2UH+e&rdyPh&Hxy9P}08e&5HeH~tX+QkOtL%P0eX`2$=lYAU_V@poz-_a0lK0N0 zo2tFj6`SJ*Zr~z^DcNDF2fv?o(??6%F1yD?c8!$o8aafo?I&w`uEn*EixkF63uA>h z2+pnfI{o#39on(Atz){ZWBTwfTJ;^QNKL5cl z+l^13`SRW9^7CfqpPOsB=I<+{_Z7nG8ggbrm;ZgeiHoF9^iH2B+%={yxo~HEegzkK z6Dxfa3w$?%Ck5Ra*vigD^c3i+F8qSuk@n)Jqw_AbZ|5ksMm4@hHAVPzgS}yvmue&V zS$AZVX^AqeTmq8z~~EpZCLX)SRYfkjJL5S-BxXAqp#5@!*d(-P+pSha)|L4}s6 zKyY45oJVj$OI$!usU<2AT+|X55nR#|mk?am5||0vl3_GF1Y*^Phs=YZ$QlIIBOlO^>C zUL{LjA!taJG$44JEP0EdFQloA7iRZ7V!1UX7c4uV{z zBo{%RQj&*Yol>$6fl(utX(Uf*?yJ$wIJPC0UNZppqC6tWrrr|3;2#hL;5kbC6l8>N3B`H9#StZ$wpim_#M6gXI*@nQRl9&+eR7rLsFsmeH1bbAH zJqU_ak|G5ARg(P(idB+g1cy|TLkLP#k`e?*Rg$9!N>!3l1SeFI69~#wk}?FRRFYE& zEGmfw!C95$ECQ=aVnuLXB{`3vQYEQGa7iV(grG_#sX}m7CAo^AS|zDQa9ibaTjk2% z_c@m3eU;07l`H?JVh*TNxzwp#`9D2$z%!N0GnFg<;kg4|sa#&ET=~Btbig~6%R7}T z|EkdescM&0wJZPkFbujYFGZ9ZwKV6U2@f~{O8jSSg&?juXg1>2XR1w+ND74%6~lXfURnmt!h{P zZzUbDQ|+=-?aKd&mIL;xUG}P7`9DQ-K(X4TSnbMx=-_}OYL_EwSN;!p9B@MIazgFO z|BZzMPODu`t6llO&~SiN?P68C@_z*3fQxFEi)vT?Z`d4gRqb+B?aF@~?0}nUmz$2= z{{J6YIKZZMv8i48KVEXc1GUQowJZNwz5|}9U7o02`Ojw^@IvkKLhZ``DZ>))(p>oF zS1ibIT`-bsV-?%9o z^u%1tMe@Ip=6@kn@cPD|OV1vBz(tNRvSUmj|K{P}x7@ZiY<|c^9!~OpILViP>HVa~ zyeA91BYoJ~DoChkdLL%PjL-%1RX_W%pTU)@$Cs=B;^*7}YbVRsPVO&!4DWc4VKT8{ za-<0IClmPyHclosHi4<*H#=VqSjFvkz0QBVt}FiuOG(DYOOM(Wa*@@OyjM59?#)+T zd%OG0Q7-b9mc6Bgk8w91D0g@Et>hw?CYn#3Syp{x(aFJF zBXg(7=Qh1%`1y11x<8%AagpM_(&E0tH2v1?JE!K;CvnYRRQX+0#qbwWNAty6zhZ3+ z|FZgS&kIYYjQC47qm?7n2|CI7H{%@tjD~3OKf6PB@jr*daPdFChOfo{{0V*%|8u4@ z%ybq*x-+CBSm+E35$th>JqV6E!%+lho#8Bk=g#mP!CPl|i{OJZd_XX#8O&)WE-a@R zA1&Pcztq;CwSUk6>nVnAu#smxaw?A%Z2%VF?0bb1)(>H3t&{b8|2w zC~6Kx2uhnnDFRD#upqED2P=ZA=1_&8x;a!MsBI3l2xo0ckD7-PgAO zJ%X$jkcGg|0t^UpT0jnhf)-GKz|;av2#Q)j5rWbdP>P_e1(YGMv;Yf&>K0Iqpr!@X zAgF5rbqMS&z>c841=J%*Z3(F@#p99I64DT4wS+7L#+G12P|y+z5EQk9A_S!^p%j6& zC0G$uwuDLqH7%hAfvqLj5Y)GXdISwEp#ec-OK3!p(F!tJiF=#b3NjJowSqhZ##UfN zP|ykr5SUtl34ys4m=P4Uf+7TEt)L8nr4?8ZRJDRC1h!USLtt+Ob_9*Bpb>$-HRxN5 zdz;l7vJejS(Y67Ye)DTdEz(#-#ft>(5f_eh#5oEYPhKqQB3@%_mU~~Z^0+S1v z5EQ#WF@iD|C__-?0#yjAU7#94oeR_i5N0woA660jh!O2CSsQUa9-sw7Z_pjrae2x=rygTN*M8-iL1)FP;tKs|y~H%N68 zk7=44q#@9|fgXXu4Gai!+#m-*o*U#LFuH*eL7^KIA~3mu34z%S%m|9ypa?;!8Zq)O4eNFfbDrW7&}WJw_lfk6re1UXX3L69efJOqVOC`4eAf(e0H3T6aFQYb=D zDuq%6Wl|_ZV3C3afmI4t1eH>#L{KG#Dg-tu*bvl8p%y`%6zUK(NTC6Np$!+CUY8+BQ&&pso$nAxLctscprj zXSRh*1X*n%3xTmM7!ee-g#rY{ZJ`)JNn0pEU~LOl1eI-}5JF*y;=ZK0LmGlicgRGL6N_VJ4P~{F)2&&zo8bOUa)F80AgAGBwJJcg+aEAs2jqcEhK<@#15Am30c!1-3 zWTJN)GCjcYH5UL zXh6{D35^I++d*nO@u;V@gER#CcA!U))ef={$2we6r5L47-@N6^p?8W1$LgGL0Y z?IE>28q@ZWh9I*&WFp9F4_OEd?ZJS++#bvbirPaFg5vg2jG(kVlp?UU2P=Z=_E3$W zwmsA$sA~^(2pZZ$1A@l((1;+_3sSvM_q`wuf!+)B2r|4N13{)2WFpA&f-D3EFEAj; z@q!!#d0vo*z~}`=1O;ADfS}L|3K5vRz=Xi;1!e?AUQmRf*b9mglz2f2f>JLiMNsAi zWe6-@U_oH@0xN<_FQ`ON#DL^TLGJrA!761zZD}WV2B|s&DDu5~k)d1B9Y5-~w z*Z^z@Y5{5y)B)5Xumji;)C1HbXaHzH&A5^M*VGMsF}8DDZ{?1clyEh`{6xCIn`0Fe51Ph9U&T-j2^R z#oaIQh7ts&-cX95%p1xOSiHf4!0HWF1eM-UiJ;0Gst{CrLp6dLZ>T|F^9CD&T5qUD zQ0EPG2pYVh0YRfTG$Kg#fm9!H_tShJ4MBzvWFW}&flLHhK9GgL-~$E(IX;ksAkPQ# z5Ey;Hh@ij+3J{omz>J{C2Z|6B`#>>*5+5i*Q0fDv2&_I}MNsJjl?bYQpb9~?4^$(l z@qroyHXpDdsP%zb1a&@8hrsRwb_Df4P>-O&2O1DG`amOsR2iho&{WDG4S`+;dIT9V z$Uu-OgG>ZjGRQ(;kbwa~jtp`T({b1dTFiM4%ApcLl^m)N*yLbC zP%DR81od*LN6;XL1_X_AXhe|e2dRE&#QY!)L8c#MBFOTCECfbBFd``Mg8~GFeo%j!GIvgA94^B_(K7LLVqYkVDbkO0<%Au5fu4D5rSfW zC`M4?4O4q!%5)B%bRly-np1Z5qd3_)cFs6@d$tn1epPli6AEcauDPNKpuj^04PLY3IG!Va{!nTlmtKtg3X5C{bb3Im}KfhiD72#N!t7(q!OlpwGKf(3y!5UdEQ1ECs0 zO(4`Ds0)NT1ol9%Bd8CAdIYIKkQ#(WEC|vN=z~CyAR`De5Ez2MfFLIbauDPNK^_8Q z5Ev1dg205p90X1(c2&xg(1VIe~TM*a~*n_~1 zpgsud5u|p6)Q)IOJ3<-)eMitE$mj?e2r@fDCW5SvkcGg|5ex{79l?m8pd%C@DC`J@ z2uvNpguvVp%m|7)LJ@-Ej!=xCq$89duyh0q0&7RGBB<;Ll?ZA&LJb02N3bEN?Fh99 z>N-Llf`*RJfS|D>G$Ke1hSXp*FTs$8KpzZx1R24Qfxr+91_U|5kb@vE81fJpgTaWP zAQ%b|6b3^f0#h)U5SW9(jG!bKN)VI=Ln(r?U?@Xi2?h%SYcN<5R0cyOf~sJsLQowH z)d*^Wp$3617;Fe?gP|5deK6D`Xb6S|1ZkZht&@17^qoMDAfppxAjs?lnFw+^K@Nhv zPLPM7uoDy_Fm(bGg5pk4jG&|wlpwHl0t*6bC$J)@?gZ5cYCAzKf{f0P(OKNv!p=~L zz|t8k2x>b+EdqOIup`Lq0-0UJjT*Xu0fD&-m=P3rfno$DU7!R(Sr;fnP}v145ma@7 zDg+H(paDT+7idJF4*`9MxYCRe$Uu-60(l4uL!c0WDFjRi%pqV#P#OZI2rMCBL0}C5 zD}u@ps6uP>i4?6iN`3hC(TVvQQ{PUz#Il<1Vv#`grFo0N)VKWK`DZ=FepP{2?GlPYZzD&*u%h%pgs)h z5$MA~A1>}~O*qsbu!VySL2WqHBB%?8It2D`up>x|fV2qlUaBLYx(Par7$w>F{2%T+ zHSfkt-;Ec(Q+I8EdE6y7-T{ zKe8M+I;A!qg>>iF8G`-fq(W{*62}3 zChaWcB4vZ6WrKyUfAQa4WS_M0=@%3DCvA-PUU{&hgVlEq+tvB1@$*%aMPDphq#_on zd_}NWMJz_JR7EUBuuMfPL$E?ctU$0*MXW@Sts=4!tX2`L5v)-WYY?ne5o-~wR}t$G zY)}y!5NuQt8xd?$5t|TfQ4w1ZY*i6k5o}ix+Y#(g5jzm{b!G5$shFdlBqY z5&IAvP!R_Z98?hp5gb+#hY=i65l0XlQxV4y99I#?5u8*JClQpZh;js{Rm5ooXH>)) z1m{%5IRq6dq5{DM6>$Ncsb0_ z5;G9Y)Dklh%+eCG5Tt2|Gz7D?#B2m}w8R_)bG5`=1bQu@M=(!I%tMf_CDIYh*Anv) zWN3*D1Pipp0t5@S#6kp%w8SC=nOY(f!D2137{L-Pu>`?VEwL0qmX^puuuMxVL$F*+ zEJv_HORPX(&=Lj&E49Q*1go^fDg@bDA{#-DmdHV{T1%`(kgFwf5v$Jo=1nafLdIUx-VMMS&OKd=puO;#kY}67P5fo^N0tB11#3lrrwZvuwTeQR$ z1ch3n5W!Y0u@%8KEwK&3b}g|Tfk{i45bV$rI}q&D5<3y>(h|E6n6-o%!EP(Mfu*me`A+NJ|tU*rz4-A=s}a_9Hl;B@Q4c))K`C4r+;m2o7n9Lrp+_*tOWV5%9YrC+~#zmIt!j|dc_&cs{{{N2rsr)e)IoVr!vbXRsfaZ^f z{J?9Bf-%(&ia!>fV}9({&ey2?)}UwI z&DQ$O)(X$MJO25igg)1AaEd=_Z0;uA+)a2c z`@9{7SgIt0i!2)@T{cP>CEpP{7AHMj#6|M@O7r>(kDi@0d*Nm>eX6os)^3P2m0Ggv19Oo^rc+%gEj`!sFjdrdY4F z`l?e0wxjRIN#BnXp7`1RLHdptC!@K@qY2VS6NG1Hy1MQmp3&cMkd9vC4m2>nxF?GNxyHs0@x8Kn;^J<7ioxqh6rJFHg@@Zdg99GT*OX-ofIDSS6Qno zU9rqHknPXR3DTJpgxY?)9&@j6gbx>4P0Lo(!r|3t)RWW4o&|D|ZGENN`U=nI2t4ss zP;p^TE^@n@^maGl`I_G2#=eal(~pasAmIerk*}J6$_o23?9-3Y@h`&~SF{+=_sJY? zn~ZSC2=B(v_Po^0wmb6Aa*+j-0~bsV;eVqjv)9`RL-t1nvHf{M%bqk<{R{JOuT|TV zi#(5&K5u#y;u%X>%R~C_xX6hi(i203C!TamonJSPoWVto#!HXJ3;nsYR{ulaJ5@pK zDQ2(AZ?7s!^n!4$)^Dvgil552#xG*$p18&}vP$c>s_8k+gM+5z#s2z^ix?+)8=D@` z@w7wV@TBnfT=VmlviZs`qLa@JMs|bg!mr}!rQc23;MS}o+vCf$>@pq1p9b$sQa%s< zLB>U9E2Og(!YO804P?4o76=+1m?Ur(JP|3Oi~MYfZ$z3B%yF4Xx}%o}CnB73!dd$ry8 z!T)cQY-^FNS1>y|3n^GgCGzWzh>-ehFYeDpQd4|WQ#$Y!{B^4~Y2UUfT*Nd;Y8oWG zW$?4E=Za}>{^25bzmVSj;tRf~$wuS;HHz6>Bv0#?*EId<-6kCA6OqkDN+?+gCG_V| zM|;#}`OZ(RQL?*DziRNrH14a&zYhnqtLwBEvs@!9 zQhZl54dm|mH%jeKLp!lu&!uI#bTmJZhqeE``?D;Ci(J%rUex&T&z!veFd?y^%}g$` zw~ush(`n~nK-!(&32(SaX`Hk)PWZuqy{@WXdYlgI%?|^HkrxA{ zFPa{B{ddK)qF(=9<|3zc!KZbhe19%ob?sMo?o(uaH|hGOYqtA@kv5(^M4B#DJhK$c9V?_cS~m6)&f%hw8z=APp5_-p55{kTZo7-?P8&sF?b z9<-w1^dK&xkCN(}etsjO*OzCeDJO7|`*G6yal%D!U#!!JR@o{p@;*`eKGBySzOZid zhQ!Era*>V6-W!v{`G-ZdnYcn~-*cFYtWT1zPZFNxJJ~bs%FEW)kXNl7Pv*)XqcX@| ze3u=tfQ(*1_7TBCGI}9`#iYyPrZI4AVjv?8WDGD!r5WJDoqV=LKdD;X)u*hY5U=BU1Dx7$g@cCw!cOr*kuUE^Nn+)HLD&0ed>_MH|ODguF-4>ByMW~H^WavJ$m;Geae)2O> z=?BQJ2T))G%v?V#c|Zz6J*2*lyQ=bJV_1^wNXY!l%b4rvRgSS>=YSx z3e|C%?0%a3Qq+cp47Z@}pCP-RK?8J_3_Xhm`5YN>4(--TMpzM4kf9Z5lk;T6d6aR1 zR9ry4tt1td2riO}iwG`}ic1JClZwj-s>rY^)Y~g$#1*vLt7Pa^RM<5#;TkzsG#=Gt zcr_Z2>tyJ4w8;%paRcr4CK-E^{6f@54VhF!CX3(}+5Hw8_1k33ZM3BBkUj2@lSG@? z$V3}CUIcf^xVvZt-6Ny#p>=wn?0KJ5i8iSvBWuxuc|a;2pwb_bu@6z{kH~~aXguo3 z=sL8Q$7I}NRL2uC@(J3@Q!@N18bUi6Wk*NlGcx8G>i%;w?m24o1sV4OK|QIcN2R|c zBVVH3z9OSvp-Nwq5wFqgH;}OnsJCy(@HeQ^w`BZVaVra%q%Kq79~ChrBQKdl=y@) zn+lsvi7y3nsIWN*=2G!bH=ZEP_SUz(v&eBFLm-Gb!-_w3v!rj9>{Bv4j#|8kbU`ODXZiGm8qz zqQsZiWmM;7sPyGjzvZZo6;$69lulHKfeJTJ;)`cC<&sVLi89tvq3ft_{EGs|iGDp5 zx*ma%3O6?W5RfBd0~NV}>MPnLpNhzD`qczS#zrb^BPBfk(*XrkXaQ<;6BWJ*HM*IK z+D!EqHM)fg+k)CCq{0djY^6fBQZb@Uwo#GWP+{AtuG^`eq6`xiZK4K>U2F zPAX(4YIGMBx(k(VrlQQK(%n?_Zq(==DryhP*h_`%MU56wiAB^H(Qfxq-S$yKMX;ZW z-%pJY!2znr0cwH>im8Fc)HfnHNDVkhO%cH%YTzN1ahMu#7-f`DktJxvj!=ABZ8Z2t`EERPY&C5ATaSl~#r6R4U`xR903Q8?%<2=>% zJX%s0sBRa~cvMn}m1u4+Qr#}1j7wC^CDgggRNu=KBic(9)vt=uir@+rbp@4vm5RNJ zI(LnVyoO4zrWDnvbJwYu>u9$(sQ4RbjoqYr-lV<~?Y4$WtU-ObMRmVLjT2?uruyAR zmENI}?obm&88#~3hW2uoQrty_-J{~~p^W=fxBF*$ zK0;$!NA<2l8IP&%k5ONqP~D!O-9DwFpQ43prv}*30rZR-{*3xt)Z6FOi09OF5xk&c zUZB$Jsib-|KrgA!UQ*wQHhD!QzCxq^no4+0jS^)vP>KdLgm0*bH|S`1OZ9z=y8n)f zeTNoIBNf|-;62s*JsO}7RF4nnl=G1q_z|5@Qt5mz`9wr)~d367IbczVl>8NyC ze0`Zu_nc3Q*Lnt>kb(NLfKFUMi%-%E>Fx_r9gFCgMX1tDIx!P%vY3upj53zcu}f(2 zNogsauoUe!i;l`dl`f;Bm!UCTPIp_5#&iW8y#i$z=spIT5_Nwi-Fqc1K98-Ud#^%} zO($fdI&$c^95kk@>G;*O_>z=M_sFHim!vgx)EZQJ9vz#9db^g6UW+PSM|WR`#&kX1 zZ#^wO^%?0nBdTKq-Dd;pTs|F}kM^>W?!FN7KXIh~1%k-a%la<85dq z-=+KCMa%LY{rNp~Am69^-bYheODEQ%A$&k5K0xr0?)eby_7UCV5gOz=x>p^V?8kJ} zV|2EBLdQQrl|H3=K1Ge%>7jPC3ZKzEo}s-wrw2Z##jgrp(A{64iK?gj)T2Y}B^~(^ zoncYMmo9?t&jI~!h5u| zKhQlspw4}yV?Lr4l*%NfGUA(w8BFvH2Hk%!@iQ6mMQaulKMO$`6Q71)Hq&)BBd&A~ z6F&!K%w-bhGUD4FJ<~(ah_8h6m~QhJ@oi5!6PM12?@;D5edaUbOLPX)JA)Blq8BhR z3mEZ@(L$!jLbR7fOz%Z#lT4;>CL=zNEoMGj%!uzTmoUATpiP!CJ(n`#`=Bf)DGQD1 zGA3>rDt$Qf<}pcm%oqGGA39DbYnk3_nb9Ix#|&P_=tQud`C>iu ztqAfNmwd)g1Y4Pet;`_)XL22lZetR*A=u9J+s=F?%Gk-c>}32zu#bt|#|-8_dvdg~ zp9$U1bQ8e=CgcDUBZ6W^QOxuf!9gbcAS3(%iKC4}O!y%LhZ)6Tv`GmQS;F)cwQ+>$ zdW7jIf}>2=qX>>MVaJ$wQAQ~fR*K*_6Lp;FFUmNBf;IM0Ng zM|-)zL|j0HRWk9F%m`7X7n#tDs4th8@Jnd7mzjvmsEsNnqzVnt6(;No+U->)>M9!K zYfR`hw3lioq8c@Nor$=P;069VEW}y<+L%Y4pMBPQ3++!5?&>-JuV(v48L~YbEk+o=@K479Bpu!$9-5#RC9x;iJ zm@%R@>X^hj1do|+kI^PinEp?g6wxM6nfRw@D(y^nJ2Os{@r;RohBBTrNza*yqKp?z zuNRC`1occ(J<52=^nS^xMH#P{xL3?D5xi!iUZW9fVB#83#v7*h8`Q>ICgv>~!gox> zJ2VZAOhhAs_e|t_G{_&At{>2`|B;FLh#F1RM5k)R3ucC6L*p7HFaupu!evdM-q}U8IRxgbK^lL}sEo7Hgsxqc)akdM-h2 zEY2Bo&|WrcVm6~n zw`d}_ps6g>^e99VwN(?p74>$TCVm@&?V9-Q2uzwd6WZ+#O}`x)t!ValYLa%MN_S~K z+ok#L|ERk6I2X?S58$=FR@QEoy=6DM+57#1#k${bMO(c(y1feNu8*QpVN@!>h1gQq0X{7|whAx62B_*xkw>#%G+4=mjf6V*yJkQKL^JFra zZ06yVuu2A5p~tpM>bFA&?U0Pz0b}eN$%t>DQJZ9}4PK@@C8Ku2;NK+~w+l9Gw`9U@ zNh@bN?2@r|Xk(9L^d2}adnFV1O8&;FvQIK*pQMQc4#{|jgnP!_FB!QXHvNEPzyUZe z2PORv!ohY*Mmu4(-%5sl3xofVWY{4I_pE(bl5|)i;%tXUQsj};u>WY*aq0Afr055L zA0Do#p6&PYTYI4`L` zFB!-F!(hjTU62g8Aeq2{UnL`cmCWEkyJUE~g>!uyh8_hCC8Na`QJ zrazPndI*gwrS(cFcR0+E_M6l759l4eK36(mu9Q1I=1E7)lXAyLn{-s0l)H2DrS((G0W{`4+_B!dXbpW492Ym*6`?+-3=TO2Z z9c6^Q{X#nW3)qhJ(xK~NwO>j{e+eZ_(y=DkmkrV}8({Z0O2=)44%#H0xJjzu?7mq# z*(`mT17AtUeg%zgmJZ(xy}m^{d<%d@I>rL4-6|cs724P)9kC7i^lNFu*KlmD(qUHU zpzYET+o8%1>9`%RFW*QwG&G0l8)I0Te@31ayN_*yL5ydR=Y^NNm&F0DHbYx!PU_dS3|TIT`yK|16I>EoO>ev}UWQ96wS zC#3yPz*@Z0L0;)(PKlqSeSeY;=fFwnfRobk95^NIdkRYUqLpMQ-uG1WMfB_JJQ-a(uRT4i)QY5 zPWyHT+?Cecl@8>2@u7wh-WTRKfrgKWHmQ7wQYvjO3vZRk>A`Td2bq3i`cCOftEnO!Yv`#je1E0wT zeFpHkZ1Cr@X`B*9*>I!m84i3Q8~25*i396pq)2uWT|0 z_Q?kCgAxwe5C@dlFB`sJ_Bf}?0om{a00(6w4$7u;N;qXhoY2O%vZ3F~rf^Cek_|ls z@SSYfcd}`m5-!ldjOAYtOwwPEa`+y#Hn&dR&z#H&;Dkwqm$3dYR&@qWwn0UKu(Esvf6V1 zKg;TVmNjrn{37f7i);u70e zSSI4E<*uyeu51YV)1;10j>>AH0Ds78{s8z>R{5u_o>S$Xtm>X@AO~WyzA@P-4&0Yj z-G>qnWK|CU9?JSZl#Sz5QOYZoa_(B@$gAhb8#pEA%4_Dzxtl&uUO5k{w8<;luBSE zy!rsZL3zJ}@-dtehvZ3z zM?TIYZ{)xa@?k&7r*pt7Px8t|95^elJ}Yk+m;BTAr)An_JJ#Zt*ZAc_IB-s0eGW?e zEU*3<;JiHPyj;Yo5|ob#%Ac6>+6Vlzn&Os@Mz6_}uE|9lxFxT?B_GKC;<=;5ZF$vg zc|8Xr^1c!I2oC%%ulrp-i~~`5QdBPDz(e_jhw`Sc1k?2o3ZMGljz;GylIAKz99X2N zTcl`Uf5_WWVzFYtV#OE^e4wcN07|G81JqDriK2dqVic#!Qbog3#Uu_aQw&%JRWyph z8pWfW5-Sx+D-|LRtWmVAQ7r9NwfUSfDd*p>cWl{OMdMn<0goDx4P zl73c*IB-$X_o8C>)2-p4cUep4k-4O(xuh7xfy;`T%K$+|zo23yr^FRS{T0Pn4qR2# zT!kvv6b;uDQ#d6;ikc9VxUQ(Xt{BQGaYIpa14`Uf)Z7FJD{8}v!JI0;DXM={4B$XS zkrYvgIB-uf=$>MVwS3R^!LiT(+OfAWMRiOuhy(W(wf7Z6Iq*PH^FT3}0}mB_A1X$2 zK-oG_**cj6b6RWXv~t^++gdlbbvUQQyw=)zP@=81zO8jUr^Ni$0rOiYa$rGg^@3LJ zmM&}^un+q$m z&vB|OYaPA}K+`&01F*bx*z(qAI8|1(j$8q&UD?{OvUM7#gtm2%7FN5eb-*gvFkNes zu2saT@@eakPg|$5KmF}EwuaUbhSsM!u&#CJy4J@y@LB87&j7w?P5Po$#3^BJtv9!h zDSK*{Ch_mP)^;@dRcrsRT1RnUbL+s(trIw~rM2&t)?pm5v<|kkPUXPYtw~?EidcB= zy&KCV!+&6Y{<>9Bx>YfeJ%71IT*+2m^D&9DFW=cW{)m$amXue2{-LI-^B2b}8~7_5 z;y;-!w95W9HDex=#KeMF*AK)0NSok4CabFM{4MgYvxL9S8p`=C@>Yp(YuCd-!dHuC zXN=QScQ!v?o;zQj&t9pl8I>~cXzETTIW>`gYGV8s=}+IB_1E_&>|>h$VV3X*cuK>1 ziEzCn{*;CnKRP`}vG+35$e$DWe@-0C{z&-t#=pJ&OW(wr&J}xFgr1f%_DhrNeRFod zULjzTKZf)F7#`o_Z*D)^v?BB)D@E1Q5f1b|Ajn$Wu z@8>Z|v_%+gsbxpS^5Y-*{&QdqliX|;-t2mCX7j~Qo0rO-W)k~!zJ2;6_L!voIQRK> z-SbScXC!~m$oS(HBAfPI7XKkEynh`}0MU@QbczU5tC>tJkWBusb;N=kGQ?exrnGGi#rVwCRx)gT+`gZj>}j7eOx z+Ek{_NlE%iNj_WlrPw2V|1$a=COOcLf1qEywJW1ubZ+_Qdrab!=KG{&?A_PGyfx`7 zjxJ=9E3%?1U5{X5_qcNl&PmeGb!`FrQK~c9Do@`kk8j(`3nw2sektkSxu;gC$lCP~ zl*cZ=VK?*}!zAC<^S`Z+KOSo1knuA%#wIg~W(r?3rG)LB*tUm%R{ZuVlYHJJ{Jg1< z?a{w%Tk!C;k3VISBZ{IUic0n>^Sj$3>Dx{#liZ!kzdJSlc%~jz-%YS=b~DN8Y5db& zPnDhCd^aihG}U)*wO1_gcAZQOr+>Wp&W3a*dDtX;*ffIOg7PCK+3EXFG07f9*&aoI z_R@Ia-9YI6n%9{m(j<&@{r2zJJ1I3sN>xm+Mis`A3cak7RYlKbbW#! zuGlkw#ndO5#MGB>>U!##N&N1|^UpUk$$GJ1y||El+t?|8Y)fsjlu1^ST8($&_1B)xT)`w)#e%Ei_?uAw!jhH$UiUSVY!nMNii_Cwq?D~Y z@lW1kt+OE^hn6ooZZTrN+ zB-_M-ZQ@dP*R#{|_ZT19Hn4MGoSND9)XWL&spG?6l>Lu)|C-s2eX~XTX4iAxf44|Q zTcq)SCHUg-J6rxVTpw7~vB&&;el`2xt&YWGGt-XE%;!9)<;R(6KhDg*^FJo%L|ypB zjuNM4rk$FZ&u&Kt_-Cg1XXYDs7oM$dYd+Qi=Vzv!pP4@+CGwSQ?f8WqaA{`RrJ4C> zXKBJ~_HXZOwIFFgxvo+4-D32+U3k%+7zp zJMJl3`#{xE;^OSIi?j0=JW}+6_Cx*i9dLDa+SS?l>~o(x;O6YKo3ry>GY`&P{_NF5 z9T1tF7MY#TJ_M@+{+ONi$L##eznZtN)GYfSSs z=1+gE;hE%#!D}6Gt}*Rg$7-w3o0D%X>umHwW7>tr{P+7@UsV6gzRn|exiRf>WB%kf zr{BIWsp;JPP-9xCF`x4kq~99TerwE+r1;l<9(wt^4du%By=9LM>U`<0t>>?;kDowK zixua7`oGthWc4Ke>Pe;S3ADLa=7lFev@^+r5&Q=u;>o?oz8#TvWFM29>c>CTFa7}X zj1%7_op|grlPsOeUph5jr~cp8VOy?;ndC@|@JQF?411V6Uymyq`>tq=zaHE2ejJ>4 zZAgPUxnr~YP@hcBt1Oc;xr;fJ!(9}Sh`U%sMclfc@liuVmzDw_N7ym>5;V#bYMsvGyVL>-q0I;|lEe2TH zjg|te=te65R(GS-0BgF@8h}r_(I)_(b)(M!)_0@z02{l}Mu5%TXfwdJZnOpC5 zu&W#G0@&M)_5vK}Mh5^6b)!Q7N4n7wfaBfhIKYqH=tqE)-RLC1nQn9j;OB1iGr)yz zbOGQ}H@XCHwHsXpxY3Pn0Nm1Udq6Jb{h_{Fp#L0-Q{slK^KD=nTNm3G_3-g#@|)a4CT<0bEU> zs{l6==mx;81iA%qCxPw&{Fy+10z62d2LN-s)7rOfVeRt9W7`l@Iz}TIP0H*F_0x)+cGk~Q#Spclv$qHcWPBs90cd`RGx|0LI*`1sK zuI}UlaCav+fTufo0KDDF3*hTcJ^+7r@&g3AQvjg7JGBD@yHgM#)SW^A;qDX$h;*k2 zK(sqW0b<=L2B0KT5_dSX5w!uRh*SV-A~k@9NCTiH(gNs+bO3rHJ%EA80AM6C0+@(Q z0A?aHfQ85cU?s8w*obTZb|O1~gUA8kBys|{h+F_}A~%4C$OGUd@&fpXd;oqTKR|#e z0MJg<4iF>?0)&V{0AZpqK!hj)5G9HN#E4=5${wWb0pp_wwE?JlkP1NEgVX?;9;5-# z_8={Qt_SG=^gT!qVCX>x0Amj_0+@P`3BcTg%m9`iWC5`DAS-~a2iXAZJ;)B==s^wu zXAg1$xO$Kaz}>jF9@GvH>_I_*P!9?LgnLjJ zAku>(0MQ;41&H;a7=SX7l!-7t5~&S9l}IW8bt0(&G>N1E&?b@=K$l250DU6q0St*` z05B$!5x|s4CIE9HnE@<`WC5@yk`=&~NHzd_BG~~PiR1uqCXy4tl}IiCcOtm~Jc;B1 z@FtQMz?Voq0DmI+0Ro8>0BBF7c7R|a1pz{d6aok*QWzkTND+W&B1HjWi4+4+_9SIb z7#}^U4M5eCQ~>Ipqz2IRBn^PJCusq6JxK?k?@4+9Lr*dQ7<-Ztz|@mW0Op=#2C(!b z3xKsJSpjT4$p&EWNp=87PjUb_dy*5t)stKR?w;fZ@bn}PfVU@k0en5l2jK5Xet^opk)9L*i1wr?K&&Ul0F*pZ@?d=Ms0~2HBNc#}M`{2K zk2C;U9%%t|JkkN^d87w0@W=pQ0en320r+|32MF*e0MO2(c7Py{f&d{Ng#f}l3IjxV z6ak3xC<+kcQ4BztM9L%>A4${(ph_YYfI5lP0GcGy0BDm)3!qCP9e_TG^ZM`Bu_THCD0`8z7mSZy z)CQpHMJfPwFH!?&dXWY|+l#aSx?ZFM(Dx!efT0%|0F1rJ2w>_(CIE9UG6Pt8kp;lo zi>v^)UStEX_aZxhqZc^<;uondZLcJ&i5bi}`fJiTj07QFH6d=}%VgSlyQYORrNTxObRWhjn)XAg<&?J)v zK$}cj09`Wa0QAYE2QVa)0l=6{MgUVXnE=emWCpM#lLf$4j{kj%0Vw&T zHPkw*^p8^2w zd};>>@+k-q;!_A9%%?CwgijHGD4(JLF+Rlrl&Pdlh4GO}Z2+oNQURz_Ne!S$B@KW! zm9zl5RMG+HQ%MhCNF@V+F_nw}rc^Qkm{Z9NU`ZtlfHjq@0Jc=J0oYT?4&X>72Y@q` zoB*y=asjwg$qnF1B@ci%mAnAHRPq7%Q^^kyNTmQkdn&a91XC#p5K5&GKsc4c0FhLR z07O$M3J^=B7=W@jDSN~C=uK?^s@|jmQ1>P^fTlNT0JObH3!v*wIskod(gPTJlL5fk zn~VUa-edwW_a-xdr8ijsti8z!VCzjb0DEt;12}q<1HjpvoB*!grFlYe{b>w1bR~dpuIP>0|a|h5Fpf>LIC036b6X&rU*c^H$?$ry(tEu>_bZU zAB(m=)CQpHLn;7uA5sHo`j7@d+lRCOx;~@>(DxxdfT0f=0E~Ue2w>_%CIE9EG6Pup zkOjcnhpYg$K4b&1_aQrgqYpU%oPEd%;Oavz0Cyj9199=B1^{Ck839abWCAd!kr}{}Miu~T8d(8sX=DSir;#1N zkwy*xXBs&HTxsM2aHo+Qz>`KE0B;(30eorX1MsJjA0UuM0f6>2Y6l3WQ4k=MMj?Q3 z8ifHOX%qp7rco3imPRoEWjZO-VSJ=h8-OaEQ~>I9QUhqxNdurwCoO<3opb>DbkYMD z(#Zf|OeZ6NDVsiO2B6F! zWd@9o4C?r8Fz288R2ifKP-l=DK$Afl0Br_o0dyIp1JGxX9>9=61^{CQ839ZgWCAc} zkQu;|K^6dO23Y}Y8Ds;nXOJDhkwFdsX9hU|Tp8p7aA%Mkz>`590B;6)0el(c1Mp{% zA0UuH0f6=lY6l2rP!J%LK_P%}28974859ACW>6F$mO(K9WhN=%pE}zzsSQAtNh$z! zCaD25nWO>GW|9^_mq|JReJ1Gv44GsAFlLewz?4ZQ0COgp0W6th0kCG06~LBBHUN7j z*#R7x0+|#5XwRf}fM6yC0YaG+ z0tjbP7$A~K5rAkWMFC=&6a!FZkur;Wx@gOyHUL!?sQ}bjqz2Grkp@7UMOpw|7U=-= zS)>OrWRU^Dm_0PI<02XJJO1HhR@P5@UHxd7Z* zy)@WKjU1J&W1_f>{&<2xUEfJhca0HRqG1&C!) z3_vL$r2xi|0 z0s!p-Y6l1kC$qx|7rT{>DHnjr;vndD=%BB!NIGe%% zk!*?pM6)Rh5X+_*fHH@a@GFwG9BKnl<&X+MokMB>O%7=Qv^k^&(B+U0K%YZ;07DKL z0E{_g1Tf{03Ba5~W&leLSpcj#WCgJ0kPX0|Lv{d14mkjvIphRz<&X=&okMN_PY!ti zygB3r@a2#Xz@I~YfItof0NQh?9Uz!PL4Z&Wg#f}i6b6XoPy`^FLs5WO4#fbJLQ)Fh z{2`<^0F{tb0BRwr0W?C=0BD7z1<(me2cQ>{9>5?Z1AtLTMgWtLOaNvfnE@<9vH)0x zWCgGZ$p&B-k{!SyBnN;~NKOEkkX!(6A-MrOLh=B3h2#bB3CRcG7m^ zE|+uw`drcj7;?z~V9X^WfGL+u0OnjW16Xp&0$|N0D}XJRYykFLvI97B$pPTZB`1I@ zms|kuTyg_=a>)bW%_T2@FPD4({#^0{1ac_=(4I@}0Kr@e0)%oY1Q5=pFhC@iA^_1` ziUP!PDF&d-BV`_pk34DvQ00*dK%GZw08Jig0JM3e1<>V@4nUtrdH_Qn832rVWCSqf zkqN+@M`i#^9$5gad1M8!<&h1*o=0{7M;d6Ch_nDY5$OQ*BGLmGL}UOkipU6H5|IhOEFv?2MMM?=tB9-sHWAqX z>>{!QI7H+CaEizY;1ZDwz%3#-fJa0g0I!I=06r1<0Q@5I0|Z1A0B9FcJ3vrGL4c5m zLI7bAg#jWWiU34K6a|QhC z=>ZJ+WB@SclM%p_PbL6!KA8b5`D6jG=93k`mQOYSdp_9#9Qot`aORT}z?Dxf0CzsQ z0X+HS0r2LN7r>WKJ^+6{`2hm?6aZ+?r*?o~J_P|n`4j>O=TjIUl1~wUXg);&V)+yU zP!^D~0LDiFwE?IKNCluSAT@xdfHVNw0@4EL3P=Z_FCaaDp@0kk#sV?|mY9g%kyd6;cd9Swu>BPDWc1wE?J#NCluSA~k@fh%^A&BGLlribw~bFCsmF zp@<9s#v(ETn2N{*U@jsvfTf5m0M;V10@#Yk24F8DJAk8z901NDass%D$OYgoA~%4i zh&%w^BJu+GipU4xFCsrcpojth?M2iM5G7pc1^{C*839biWCAc3lNrEL zOcnrZFpQA`d1XE8YeT*c%9a2Jysz*9^f0Be1MnAmY6l1wQxG6jOd)`9F@*sl#S{UE7E=@;R!lJfWeF)uV0@HN8-S{WQ~>G{QUhp8 zNCTiPAuWKegmeJ<64C=0O2`0UEFmL+sf0`b<`OakSW3tOU@ajlfUSgV0QM5H12{^^ z0pKhlCxEMjTmbG8aszlu$OGUlAuoWhgnR)067mBCN+nxv2B0h@Whso0QfdQGm68fTT}o;IO(|&rw56m4(3O%7KwnCF07EGm z0F0$%1TdA73BX)RW&lemSpcl1WCgI5k`2IKN_GH8DLDX~rQ`%~m68jPAVDa8PkWuz>F z@li%?0ID)l0jSGJ4WKC_4S=?cv;ev?(gEnpNDp8rBLjf3jEn%LGBN>}%g791DI*Jj zwT!F)wlcB-*vrTc;3y*pfU}I80Io7}0l3S^4d5vw4}iCfya2v3@&WkE$PW-GqX0mA z8MOlh%P0sCDx(lUxQxO8kur(^M9U}&5G$h?fU=yFn6~IUeImXjC2S57_ve>wR90_79{XfLOBfM7WV0Yc>z0tlB=7$8zk z5rAkpMFC>v6a!FJkg@{CM+LP3s47SWpspY_fTn^p0NM)D0_ZA82cWMYJ%FKt3;@Oo zG6I+?$OK@nATxlaf-C^m3bF#&D#!+4uOK^sqk@0s!q5)D94=pddh~f6DkuUFt)M7Ctb$?y%1TmJ!uY79 zHUL#6sQ}cKqz2Gbk_JFqNm>A1CFub4m81tSRFVO}SV=|zQze-I%#~yYuvC%-z*SqA{&6citGT6DsligtH=r9 zsv;MFyNcWZo+|PHc&o?@;Hx4ZfWM0T0D&qB0JK+8J3z3Cf&if^3IT+xC=3v(q6k2= zilP9qDvALpt4Uc6#RY zV5}h{fT@N|0OlGp16XRv0${BnD}b$r zYykEevI973$N}K2At!*VhFk#d8gc`8YRCiNtsyUfuZDa8{u=TF1ZpS%&|X9B0Kpmx z0)%QP1Q4#FFhHb+A^_1EiUP!HC0KB#21@P6955QkbetsU09#OF@88ErkHWwG;-3)KUZ>T1!!Y zSS`f>ly#)6gYi*EZ2+n|QUR#zNDZK=BMpGIjqrk^s3QY_v5t%YraCeK znCr+4V5uVufVGaS0Jb`^0od!v4&bOG2Y|DVoLw;B>MQ?vY{jSsW;zOKzFS((PTKPH zg|dAoR{n)aVlBd0*R$r?Ne7roK^pt2x}G)vPW`9psW<+^)VVW;e`id5vYSHrvKLC1 zsF~#V3H;wD#HUPIbZXYoKF2>}64kSO)wAX7v-3^Qtv$Hx!8Rtj-YmS{T)|G2@doeW ziUdW7Np$jDoxG5pmiRDm;<3z1AgB$Er?e1SKg3&DIr5FnH<2myF% z1fCjhl~|1+2B4}HsA{<-)U^UNfT31k0I=2ytN^xJfepZ1Cop$)-S#b`*LGXkeQ@Uh z(l!gVT?Z+9>Vz@xE+}G>8x8y$T~n!Dyu5g`E2)f0ex1bsby7d}keer5Sa)T>NG91d zn!jmueCh+~f_v&Ow#b>}V6*UGa}7Hf`WgQkSoGk%!QDHyU{~XeU5&4B=9;)C&$}ld z$j<-SQR1PT_fTHQLh|Ca{->=frq%lr(S1pOc1EI8uX}Pw*Dqp{OU=Sd&7;}%ohs7G z)5`u}AflP8qEVv}DWG7NN zGWx>p)Nh_)lC|>Oweli%DBn~cY5cPGWhU{D=KDw2vb_|3Ys=2pt#gNT&J=TMw&>LC zL7WLn_DDs0q=VSqSkp1b%_kF=F^w#LhQGXP?yuecBf;H`-!O?@D$+}buyw}lPJEA^ zy~QL-sYofUWRtXJ|CE2dTsyRL2k*R;ednbTc50s^2kXZ__Sr%vIo-fN-4LHnYv7_G zDz|$-lb9qzlVkupi_NvSn=ig_^8%Cn+MoYx|6FzlbN*+}hP#2j!#daVeT(q>mSVQf z!*ea+!L@^!#M~q_cTJ!3OmDNVYS0)a+4~%S?{o3Pa^qvM|L0d|a$s|FsASf4Uh2R*sN6=9M{voO*;m^}*&fAhDuo1QKj**T$&vvG#A@mgy!hB_=^7D}n5OYf)8d0z zvL$@rsj!?$77gbw8eYT>yYG*FJ@l))?=i`;*1Tn{_3YH3g{D`s#zz)0$vJuMIe8H~ z0raC=^e;3ES2D?*7U7(hO19e;DyJ2fMWak|xLJ6(c_^D)xZ8dD$JH?=+1n)C+cgcE z?5myw`~BK;bm#ueYZ1{0rH)jfO&Mf4d$9J^|ceNC<=W*M6PcPc>`4*;; zo&EVc`^V=m%(}Vo^GEN0$0Wb?=l|9}{^A(3?a1w|tG!IJVl02f*!Xm(-yWa$>d74s zn8eUpWN010PD82=^?l3nOWL^3E?)Z_e{I*>(XlH!%e`^6O!8%u@XM~Zu$HN33ajo9 zWs-AK_~*K2DV%fm=C&Sx8^a_AM)41fieDE!zWTkM#wl+w$=Rp)XP=6{$E4i-W1r^V zZ!w8;0^d0ye(t~5(^7qD$r2{H+akQ%5}!b}+2{WJ$cm1fM=%}KCoj6f;HEZ3APn}|tT~G3N zJsCgh&wV^<{iB0?OmbO~e_2t?PA>iUWO>F+<7FmU)ht}q96y)XJ?}pD>5%(OvOz4^ zATD6v1pYSX+(7M|0TVj6VB>iH#_`qcSiShK!~=y{PclhNkrz`Gv1c>;r~jCux$z8> zD4*ghpK4(1SjXMi{14gdO!7^W@SCOr_LaQp{cpa1f9tms-t1V_(sh8 z2EZof*#LHmc{>4iiFvyKc8htt0qkO)9bk``w+CRan70>TpP07~z#-;20QQS{`vDG! zc?SRvig^bCoMN66;9D{8TYy7i-XVbR#JukSTwAH=*L0Dctnegrrn=A8iWig{jupTxYM08WZ|Cjm~0 zd8Yt;VxAA+w3v4q;Eb4e2H>oicNV}e=J^56iFxM$eirk72KYtH`vo8%<^=%Gi+Se( zE{J&-0Dcwoeg$Y3^V$I}ig_0SE{S=U04|GpmjQxeUJ&4ln0E!>s+e~b;F_3s4Im`u zg#fOLdDj7MhB&3V%{x)+hX2rfQXnE0r*|a`yJqpn0E)@ zu9$ZhAS&iX0sav4{s8z>%=;7Io|tzJASUL;0Pc%<_W>S=c@F>{ig^zKlubNk6ZfrP zP7`kqz}zO@T!48^ym`i#8#nXHe8B~(o8 zyy9qU5w>-GM!9zR^?`X;CQs~aVDM_yox-k&AB zKdT?7=(iH#w~~HrQCac)BX8~fA7*_YJ<9*+(fH@JS#s&Q!GC?9NzRVvpB*2+x%S%8 zoEfvXt!A1(Jxh3cRz0VAvqWf?)U(YO?pD-f|7{D?$XBfeU$s`0J+(`d`1f6F*Y_LH zJm{ydnPkgI{+5yPyB*zEZP)BuzKcmN&EQ{}F@(K<;=OhAho^2lJ*l&EZcO9fn3lsP z{HEdd_uqeuNe(p$4>iRv?qdDV|IcsNR7|3;73gbA*ju^De}BejwtYCMvqP`U5?+}# zgtHqqiO?n)!tTa6?F4(m;j+n{EB>st=(E;-?B#iK^UC2>w!bmSZn0o@*UZM>yz%7x#ed8a{xPe9v*Lpi;Xz6KI=ZgpBgM4pFw@8# zX~7+7$-wDFGxt2FeS5;V$+k1^++~uhkMplSKA7!`_QzIUQ-s6%pQ#Y3`9dz+065%IZT|9WjnaL+#SUx2|v5jR~o)i#?}yZuIZ7gul-k z#wqHM2py7PY*ELvf|n0|Gh=FJKmINk{Vp$^rZ|4iFM9EFDyC@x!!9N

~!^Ux1S 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

-gr4cd+S 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 AAOHXW literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvData.hpp.1456A956D1AA9CFA.idx b/.cache/clangd/index/SpirvData.hpp.1456A956D1AA9CFA.idx new file mode 100644 index 0000000000000000000000000000000000000000..9da244b543f53fd7669940741b62d4685eed5b37 GIT binary patch literal 161852 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

6wv-bf{+6ZcFY-%f~Q#2W$23-RZqptA|Qft<`_~ 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 T0oQ;l!P zW7@;0mTIwc^n=>^YvYd0(aHBp&7FT9h%+C%Xp3&EYdtsqzVUpXFBM(>Hf#RNMxSuE zn_0N`%QmLI;~U53>wH(*DNm}kBfC=XoY{QSBgpAFbHVyVH*%f#hko={#sJTK@aO}^ zJUuovIFanU^+x?-S*xW(V(cFu>fPS=tS>)GD0e!3jXFDZr`CUAOGA^oXJpGAxhY5S zMSN%HU;n(jspY|vzyCzej?$)rp400r|F%)3d*Ae^7UHG@i!H<<)V^mS&RgRtI)k^g86?8h!yijgcK+AG5%H?5WwdIFH6YIoGj9#snm0($dKIFQ zWJx;Cfc#NgL3iHqy4X+@hLfAcW(8+JHVX5G=I181(u6>{x*cVtjarbunm5fv#(kVA zL1LUdL6)H649Ig?ub-%PPG+hI4Nk7&s|1_@Ipu~w@rix%B?*$@)fSm$17|>fdE#<= z{HB@$n&89U2HLQ;_h*ky5p-%wDNXP|R*TdUSgm%@HL0&8yOo3p@2%u3rJMnIX3(~$ zWNTeHO@zYg7$#<|YF+Mke9b%lJ}4wa3Pdq9qvZ?=W5ZWEBFd2#Tr=MT(~WM*m~}n1gUXT5@m@IoBx)Yk)REf`}l#J-(ztmp-5<0g%TkEm8a$a zg=hd2N3(RoegGyuB}*kl1CThHr4gdxAUHP*AVkx%<(905kU}0wF+xTPCjl;TG|MAI z1CPA*9Eacr4skTgAGnLA(~swy2WoI`qrsRAw*xs`%;7k>((Tach6YKl{~(fFKc9P3 zDx#t3# z#s1~rq7O$xB6Kaw7Ipu7-*)7!DE8*Ev`}d`?)wLRIy4m;PD*J;g2I6zgw}9END}nY M!AB)g=ZISn567RrXI zTTiGP>c`p}>su}t(ReB@`ew0w%!Ei0Hnr0+L6aM;y1p23ab+YIq{Z<$$AuR5O%>g= zVX7!IL*;Crqs5iENp?V2tY4Da>Cbd-t^gAwD+3F=HoFD0qP(IG0|!tJ2$q&_-fHWi zyCUj zl9&C=|4jiZ;^gF%MkwNA;uC=>f{8LpfgJ-g7$yxA1~~#IT$GxV2y$j|QF1Xih{0l# Nm3g~{H!zHW0RTJ=d;0(Y literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvExpressionLoad.cpp.5338F642B09E36D9.idx b/.cache/clangd/index/SpirvExpressionLoad.cpp.5338F642B09E36D9.idx new file mode 100644 index 0000000000000000000000000000000000000000..fc207f40230d04a0c2743dcbdc1472eb6d83b823 GIT binary patch literal 5482 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvExpressionLoad.hpp.AE3C6B8402B69E0D.idx b/.cache/clangd/index/SpirvExpressionLoad.hpp.AE3C6B8402B69E0D.idx new file mode 100644 index 0000000000000000000000000000000000000000..b9a794890db2e43bc45c05c555be9b1a3f2cd4e7 GIT binary patch literal 3672 zcmZ8k3s93+7XI@G5(vpn2;@b`gFtu|76Sna0g8Z-R0JQ0k1`YrR1~BOh_KpXby?ko z0hL+=gI1+ttp(f_2TQjW7RB9K89)&fX_tb^QcI<_qT8i=|KB-=h8YgY`Odlb-1GR( zu*$e>SqdVE*lc52K~71g4M7mj__w&ED9^|s2zRU~Gk2`+-rVzw;O?>MoAJ}f?IK4G z$GSOpPaK!XLQl$;m)74kZjO9>C*sN`|9y`IZj(8>!f}tk{kUercUH6HR0MkcusJo4 znZv6NN_c;X`P)k3%+MWFM_ye~-7UR2wtCZG6JNM5<(@jN?}V+9UwQBkzs{W=UNf<7 zOL`~gr_zp$sOgV_wpG4=a>Z*k;pNi5U;XgD?W9!KE>9YMucLW9>R!XqxZz7p8_Fev zO)>p@dj6{n_qg7gH&i#0sjK>VeBajWcJnTu_KK%IfsfmsJxQ5uO}=25xwXXn z?$|bMT!{a){YJq%GyccJY8jKWM-LT>=JxzEn=2Wpj+L;Cac=)$iB#ne_uE`*lg+dD zyOre=#pMNA(Kwr1E?gabRaeJAq?-$YBE^vkS`c

-fi~d{@Y+^JX54U`q+Kl(Upi z3xHd%`JEP&Y($1(lDQ`U8N2&mLzB+eBb3!fdx&qbsfdq)YQ zAS^ymO>6G30lM}_yAEuRR)rb-Rw~tRW_vVRqBEsF3 zKyku287%;=9DgG?Dz)Za3F(2~EoaJYXaR8FTy~5gI_QsVk|iOKNFZ{j1z}Hj76aKb zr|(rg+rGS>McQEha89@*Ex=z|_4HA3U0ciZhLAC3VnhjmCC4sn*6%&t!6F&h+lS+$ zpasBxIq~h>(@bM8P7Ho|h%iJ>3xMYXQui1>o4kfddkhDug1l$}aP-T6Hl&_fHHb(@ zJVt&>KP@c)zFw33?tG@~rhsHZNtKRDCBXOYSFj$BNX8b`%-zoYMa@=z{eAFXTXQE7 zslkW8Bz#Fq3-Im@J+*yzpZ-2>2pn3dFjPegfE(ZbYAmC&XbyKeuDC&M2%rVPL{Uy| z@g&>ABMc7BACTcHjF@t(>8M=NWf zFKkV57u*E2#gNf-1!|xxY)x?$sDY*!_P@yh&=Ys`*@@-s;Ved~8h-6CARV@9X>4=K3(EJrc5o zj*|-?ZB(gxySYf3Bu#^OxG0gC$b+m^e(dgYRP7v&Ypn281OhK{kAnHizJypQKo+fi!VA6k|ej9~*5yUz(*&XK+yvKS%*XF8F?{e?qlw23CvMBL4Hu zMi4-)ICzRuA$Xuvd^W|Wa5hjWR#Q9*bpQ&*`J$*34mteA?IUrK@g-Jq^RE3m9+K-< zic1h|6D)=X;Ua^LK@5|f|Mu8m%!UU$aQ2+oPQpdmQ%Zd-*)uYY2wDl48V5(wG)$!D zoVidK<4|E0#V4g(%IXK=c3G)`&+$_zGKZ(YUk47&-;2Uo)aqQCo52)+Q^*2=z`4Jf z75q)&;tPYsMRFUt#NwxAYQ>OJF4B5yBP`!MnVw>3PcHJ*csJ=Q`g$wNN z}wL4lrR?1B$zy?J!bJW=}iVO+Tdx-dbMhIy;V4~>r;RC;HZ5Qb)=n% z57rZ-jj9iHC6rp@q|pM$K~gaTQQHu1s=ZPWxMa5e9Bu%%9orXL9QYK+MQup1#y6== zL2y$B-(R2^=*&kyxn#a=rH1O`L#V9_hrrgwS5hk%u7qui z)zqqm07o9(s!I3y;-S^qKSp&4ZdbfHYo&(C#fMM}8M>i4>6@Xn+8^erX_p487EQa< zpaP$k!flDXY`0&qk={lx0-E8XNSjCz{4?-g&rj#VpUo^--CLBCpP7nlU3BK!yjZ?H zi~(=&yzdcWj1%WDV5XtD2}p-_*CYQHm*hqUw13S?`F93y)Wv{KBZ`aOC|*r-i?5GYDbD?SFK{h3YX zl-|D~#>m6W$;in8)3zh(=Jn~7IdVW@4n__xm@tfHlmZ)h{8NgffW2|cQn~ur@3Bgz zK-FA~T%0gff&5xp1zFQAfWqtv>{&43k7dWpC+(2*1PQybhr)z&YVTZfjCxTG5;kPF vfeFLxU;+wruuH>)fjpp}V3I|tIf)=&6&EEJbAuSnS0aVYGU`_vF)#oC(7T)Y literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvExpressionStore.cpp.97AE7ABCD5AE4BD4.idx b/.cache/clangd/index/SpirvExpressionStore.cpp.97AE7ABCD5AE4BD4.idx new file mode 100644 index 0000000000000000000000000000000000000000..6e722ad073b6e843b470881d8738bd964f88aa30 GIT binary patch literal 5014 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 bTl{ivcnElWp{I!8xv*#7jf?|-mBa5paLu@r literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvExpressionStore.inl.738980EFB64FAC59.idx b/.cache/clangd/index/SpirvExpressionStore.inl.738980EFB64FAC59.idx new file mode 100644 index 0000000000000000000000000000000000000000..16d482062400fb6edb625bb248d4bcab37440634 GIT binary patch literal 432 zcmWIYbaPw5$iU#7;#rZKT9U}Zz`!5^#Kk2=nYBRrD-c)AN#@Wyp`%s2Rzt%}SMS`J z^W1tT^}SL(PM`7Idg=Q0^C!;xUOn%(s%!g&@{|60XMN9VYhEiq=kIy7Jj}F+N$Kx{ zo+DGPD9t~zr{wRMJx}HYEtnD?vZ3GZ#0`VmoVM4gA|e;AHJ#Zb)3#^TBN=V&oJ(P0 zJPa+L!z~$#D|3_NfiAFdWBRwlVd^I_CPo$pW_CGtBPIzh2{{H1pd1JkrKS}h1JZ%~ zT3Q8J(=8ZznAwxqb70y&mK`sjv_sMpB<#T+4inxrt>c!l+IfE_pfCr!3``iv16lx+ zl&>}Zr8h6F1gMvbk&6?iD5v($CC8{2)gU8{+3jG$>}jvuI@t}^0fjjjIk;fL{Z8GS u(^QpC1BE#mIXPg$Fq%;c#mb`8oJ5eXii?tqxj_tOURjp@?CCRs5dr`XsG67n literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvGenData.hpp.CCFC3D839C70A4D9.idx b/.cache/clangd/index/SpirvGenData.hpp.CCFC3D839C70A4D9.idx new file mode 100644 index 0000000000000000000000000000000000000000..c809ee9ab33594aa6239db600a201a157f2172b3 GIT binary patch literal 8998 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvOutput.hpp.B3254A75A9F8E0D9.idx b/.cache/clangd/index/SpirvOutput.hpp.B3254A75A9F8E0D9.idx new file mode 100644 index 0000000000000000000000000000000000000000..122dbf48cf8800ff1baac4981cb9efb24348a3c7 GIT binary patch literal 402 zcmWIYbaU%sWMFVk@vO*AElFfyU|FwRfb;v-(^|SH1y<03i z+#g4joOq`6RdrUvtd=KBo%i44;(DZV=jnlmF@?qVzA)s>;gP%kbkkwQpt(K|m?XD0 z-YNNA8c=pcjX!zE;*=(vc~=>Z?!1(>>dB{?Rdck=%~U_0yf*0})6ZRPFJ!Z}`(EF& z;Lt7Bf9`X63(qL&9IcoATXetslhQ|)0vmTThT_WHBnP0Yv^rSbuGjr7=VM}HWnko! z;Zp-i?AUIo)|1RV`|0^~opqChV*m=aj1Oq2nmXVRQC^fA(2FMBV6HXfi(aC literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvPrinter.cpp.45873E9ED9C78885.idx b/.cache/clangd/index/SpirvPrinter.cpp.45873E9ED9C78885.idx new file mode 100644 index 0000000000000000000000000000000000000000..2e89ab2d78292ccd6dfd9a232128c498b1543aef GIT binary patch literal 13768 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 AJpcdz literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvPrinter.hpp.60E14A2C43310425.idx b/.cache/clangd/index/SpirvPrinter.hpp.60E14A2C43310425.idx new file mode 100644 index 0000000000000000000000000000000000000000..e6d98a68936897ac6fb29ce980b6090d11dc0570 GIT binary patch literal 2136 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 OojD7|6R$64U;qG2=0c_b literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvSectionBase.cpp.3C270AFB7368C673.idx b/.cache/clangd/index/SpirvSectionBase.cpp.3C270AFB7368C673.idx new file mode 100644 index 0000000000000000000000000000000000000000..ce014f91dde04c94ffbab434eb4e41fa863e46af GIT binary patch literal 1066 zcmWIYbaPW;VPJ4h@vO*AElC728AO1%xTGjEfr)`3fR%xvV$Rm!-0a&10^jD}T&^_# z>4`qs7w!9axt1n-?>@AzWpjz&mK&2MzEOE{-QO?%+O(iU2?{E6m=iHCKA7dvS9{-&G{O_N4Z{GdtdSu<<3vOo3i#B}rb9)mlwDEnjq>W}O5 zD*27uMlF)L!|6W()KiluadC7r(!q z{90tE`0e~s{qV&*U(2>#jo79dv)Q*l)LC(bK%Q>7wVSnP?0RRPhYz-H?1`A&-Ep(S z@>5yCq#2jqiG*!ajR^nk%2=4JYW5)f1;-h;?H3kpXS14;9W#mj=7Pvo%Tp(+8TJcj zlzgpV$`m;B{Z+`kIUh2=v{hbzH0z&`V8Gk$2a*Mg1vvdrr%VzGTj}v>&x}u#CZuQ1 z^PMciYIFUm@iD1a+t|-JdoWdK?wm12%X5=YLg!VL$CiakfqqY2WX`^LGtZ~Ph&S_6 zNJ^R`~6)&nb7wR%*Z`n+UL*v;FmM3nK%gi!tyq+ifuZ|cPSELWGa*JE zHBNm_Bbc_wJKJx3_%&S&C@d``Ed~=le!K6jaDb==ql}t7vpf$>IPv?WUQV&i%|Ky( zF@AZNu*m0}#XFZvwgU~}b>ww{39s&Qa*Mc?)&o?{EzYe56Nb@@Qefv6wY`4x*>L_H zw>_=za^9rPX9GHrjT3Gqj~X{SH!n;Nj~YKaKN3%XM?eT6C(J7>jNnOdO7O#YFiSwb z=jD`z2?IkXClM4%#YM@*%0QY?Ej>nOzlA{8WhPY>233$01gO9m3=GM+DLLvuuDq(E p5T}?ZmjH((8#@y-i-<6*EUPrD467Wglpr?`FCV|SvIL_70|3XXs}%qM literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvSectionBase.hpp.611E247491AFDA0E.idx b/.cache/clangd/index/SpirvSectionBase.hpp.611E247491AFDA0E.idx new file mode 100644 index 0000000000000000000000000000000000000000..4139a47c84b26d40af182842e9e7db972639e71a GIT binary patch literal 3084 zcmY+F4Ny~87RTR90wM94oP4~5P~yu9Ng#kPBqWfJEf8v~(!q+hr9!8R2%REOmycFh zU1tQPD&m6e=%`>v#;Mk}Q?<^N0^8L(YL^zLbuC?W9Y3n;Otsp&vwp1G?!7O2f-=LI zy#KlPoO{ka@At~*MxzRjVM>4pW)UE#8-ESY> zYu|a)P+0cj`ZaHTeY$>p;BvX@}KH*HzI`K>WS??|pF`+L#s=i1X( zTzsvw&R9}idM1r)oVUL!zwL`p=ImY6nOXC`Kj+}&s?SEMm!(BEZV!*AZNK`$c(&&G zZ>x5nTfXXd^ENt;eRHLBxH@b8jk4}}LB29BPZR+X{yVOuc_nD-yw zedWN_oQmd)%F-DLD<2;G-udNaT@BOH-nb;2wCkUdg&)j1$}2Q7qltm&jA({rm?Y9g z@;CU*;;O6dcQ}x-CPtU!NXiC}$&-riHS?llb2bcWOfrt_Hp|Th$)J1VL__)bGQU2N znMT}BwR5^;(0ygN`@7o@wwg4|6Uhv?z-5#Sy4&CT`I>LvD-Mt)lH9$lvzK*4p}Ek8 z3q~peZ6`nd16d#=3tSGD2tJcfK=+Ary*CZd@)4|De@GBWYFymc6#1pgB2jN5VwuDStWz+n>`nue-!!` z$IjlxI=jf(i_AswvvVCQ6IcDDT>>&CIr|niyoH?usoAOd7@?`JZp`_~w5C{VljX?< zpa$K~?fEL%{<6L;R$PUnLWH0x7%#5+ZvQ5g=}>1Z|9aNBp5!k!7svA(?=%bzzia8% zFe#+>nUHCa42BnrM%TXNxAeraTjUl4P=oIM8zRw)vvoZnOCqP=#yYmKKCqgsc3g1g zOl#S`XEyyQmVdQ#wHux^KN-)yt}836{I{XEK_(~rmpGPqA!G`r;cm@4+_}U&S$X*(GJ@esKE4 zgd)A>XsmNhLQ@8W8^f=o+mpMjqn+>jJT~zfL1PE6%j-tB{pp&|Haz?D@!0ODBPv3^ zDL>x#4x_vAfq-F03m<9G&iptDJaQAtIzkg#KA z?%3RfgO~KO1hRjC%@|<4kR#-{Fv9*d_mth@wmY%86L`T2)S!FrDR>VR>@0TS{3Bw>Q7KNkzMzs-euUcXaK5^jjdIH#*tiRNc|K8H$r*SjF z-bdnQM7$Um@xJ9;w7k@MBZX zoSuZ2Sq^kcomQGuV(@xNNQx~CiP$0+NpXcT;)<-Mm_iw^iO3XAC?lN6tx+=Jts#_1 zYziY>jW8lXD1uO4sG2?2SPQ+RxcsdATzqjkD9SGKU_+2oWH03t?nOQknQ{qboG~I( z9-$l^UHfChjk;YL4y;-$kLTgQrE+O;0yz*ZqJZckH?H;Yc;g&+)4Z8T9uD%Xd1*)z z4t!c4kCVxPU+d@bEhm*}^ZBXD3bX}04l8*pk^&k$F$Y0ykjGo#AfyfPSR}dpx^M$t zKAw>Do{|-79Gd)ezGLvsJ*1m{yWc%^fG!s z_+D_2jV^gITGDZ@IY?2Y7~?5GkP8OnJqLna@J&70>Stxn>h6pa)p9;xp)Vp zJo*{I;24N-f_^?w#%m?3>1P9FL;;cM=K^K?T#$~^Zv~=`X|8Rk){*|=I%a{^bG=~}%($LObg)2DtKrhdk8#4!H@wN1tP literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvSectionBase.inl.F9384090290A4B35.idx b/.cache/clangd/index/SpirvSectionBase.inl.F9384090290A4B35.idx new file mode 100644 index 0000000000000000000000000000000000000000..ca74339ae19f4262a4c9aec95006d5d4132cd98b GIT binary patch literal 3732 zcmb_fdsLI>8P6LoNxt{}(vUB=rXQC|@&#frgm96Yax;RcWl$`#YBfSgr_c&%EttyK z7!|O1VQvlucG}}wvE8w=-71x?+B%(Wu|=KpGRN%kvg2h|XRV%|b#IJMKDKkJ{?VMn zfj7_l+Hhbi_b)gRHp13;cY0KY~{l6)!^Bi3@vUQ65Or`wKD;57T7oDmuedD7Q z&3kX+p=~!>&fx4bZ~Wk&^ECO7R33l6+;lK;N9(UV=9mNe!GYgj>DoSCf3@;h=CxN2 zcQi^aytaOk_ZNR4udI!dNxLuq*wXmH2k(xr*|YSE@hwHmHHE^8IkUUUKN(&y=9^=E zW^C>iF0r<6DA(ICr!0K!=C7I$pWZokVD{*Yk#|}zzrXoJvU;WLY)jJ5pE$P9Sa$Pu z@3gqVRsN?gh8>xAXn)e6JvQ;P&%f3c+?enws#e{s!n*;sHAf0U=tEHp)@917i|UyN00jEZkzq`x}b$t zOKUPSO+PK9-_bsKa(Qm{MwK*->bnKElgZX)$Afm}e^$RV-}Bzipms}KOCnP^qi`;W zZy(-28g5#$HyC|GY(oN*Q=juZh*KO(Tbi}&KMWQ}8LKoiPOCE+#OC59f9xu|_NSn> zOK{nl3|&Sj_ZCfZ{b^45iAowyLo=ir3Yb(=Y6@s?_B%#OB7XM|wKRf?`%ywaaxzJ= zNmjT}awysJ_}a1SLGyOOZfDYU=^^v4tH+NOo%-rlFg0JCFOex|C|Cj7lEzw3(ly*ByhWcpRmViUy>+N0*gFIx61{AwT;kNv#gJmKW< zXNjjaq-aBGpfHa+kfH;rq3euy8ycX1UJm0i7tXO_FmYjVp}HCGG&!hv)a}P_$Ud`3 zHQ2`4bYMY)+Yr}=bl@4vEaNewVAN2Gd->sUURWN1q>VT*JHRWC7lbV!(E2=nR`IMF zTIok;oTt8temj}6L0%{?0apY^2~jpkY0<(;%d6-2q|s`4EnX{7#_-z8!R06QMKqgY zQ?Uj5OG9xpbs!7i=4x^jz1cl~9@RF*njBCj5J%p-mJeDzBM#0(NE&!diB^+QQvfj= z?@mRymfkfgnevzB<$=^>UJTa&tozh9FhIdl)6m%N4XYQuNFCM*bs>;=+J2foWPtXA zM)=;+4o+!^Lb}{K9YOGUtR-DoIs~vJ5t3f?lQ~^C3~@VqKhwb17TOLE#84mzA^P zsfw-Qpo|1p%c@!NIh946KR&S+y$!4&{ zPe?V*o+k!bY$%QwgKR^FHWUveAapPoI#4{2gV2GR-h=XCs_Xu3|FrN{%v<5KCQ0(t z2{jRvNn%Y5g@#!o?)@mWA7#UKhFN}3z8P`gWdU@dE8zhb#Fpb<6z(Y`wj%AnbvEB z%0dv-LEv2jw@)9rwdCUqqbKQ-u1c$#0UQCbhL%AiH%%x5s|;;^+6dfY8G=hSrKSl~)l`|lF~M$)+XO+=QmV_GtGGuzE0g`~)eOe^&LKW>kXp3|e4(xFM zcHwQBS?;9V&?Ag{Z1)EBY%Pq%LRF((S*Dl`TT>fwe`+HgWe&JGs!aM`19No@)5n2omzb8Jp zs(0RaN}R8J+M?$gc8%wz zC@>UP<|fSrx|nBI_=)+;XS4A!ak4Y8iin6PfC&Z;pd1jyFZ^k<#N?AV8xtcN11moV zzbKes-~`Juva;$qC0wz8uItOk#0}IhEGMiACSdy4y}2+=O8QqT2Mex5=_9P z54qoz5a-!=gO7;|C@mx)BnBp6(hNnZX~pM(R>54!$OU#C%vCTNC=7DilYc9t<>ikY zgt-YQ3~~@m74Mn<_sr6?%NTiBg_(p!V5(qF1gZwP52pJ2+W${Pe_uEc6lUjOR{{GM zNWfeS6b3mLrh19*gUjLlAAW$$7890*nY}!})Ppxg@efc~gh@mg<_(~~auPu%78fNK j>w_4;GzA09Fa`qyYvB8;b3BWy<}oudvoL@X8x#Nl(xk)u literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvWriter.cpp.5E8F581994752358.idx b/.cache/clangd/index/SpirvWriter.cpp.5E8F581994752358.idx new file mode 100644 index 0000000000000000000000000000000000000000..481001fb4f2b8e6b95312c605a0b199eb88dd91e GIT binary patch literal 36704 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

58OjlN1TsGYJ@_t*!W4NM6H1~*s=q{KnjU2wz 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

YYb>}1{2cY0xfdH=OJImRdYzWL@9>xfH#O# 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/SpirvWriter.inl.50EA1795D7EA1EA3.idx b/.cache/clangd/index/SpirvWriter.inl.50EA1795D7EA1EA3.idx new file mode 100644 index 0000000000000000000000000000000000000000..f8ec8f49aeee28f268145dce66aab377f83e12bc GIT binary patch literal 168 zcmWIYbaPw4z`)>~;#rZKT9U{DWQzcCaY<2T43G{6;)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582RP zSKycy7+DdR=9x7yE-j9anW0WihQGKnHwkDwLs4p4F@(-Z1kuGs$;I3t2BSe|&O-6T I>&qD!0I!-pxc~qF literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/StatementVisitor.cpp.24A7EDAE9CA5503B.idx b/.cache/clangd/index/StatementVisitor.cpp.24A7EDAE9CA5503B.idx new file mode 100644 index 0000000000000000000000000000000000000000..d5fa8f70bfed858048f47fc2edd4d295976e8853 GIT binary patch literal 814 zcmWIYbaPWI6Di|Om{*p`%Q-VPAhmR9%j@%4-;2GcgI z?!Q0Xe0BHw>*nG82Y>UQzJ2`Xr_(>Dzdqd(dpvQ?D>vUlu{~Zlmg^+WceiG{#Phf6 z%}GAR#O*gqKYHJ@t{2;GA?+iv=vb9-)5h#)-vUj9UnE}bTXbReW0h}#wL&&8FJ{g8 zw$I0U{Ym?y56|&r8Mn3{O#Tyn{2j;k9Q%aJfhMAFx4kMzC<)ji?ej%M_e(0KP^12`A(7a;2vVM)OYR%o8@-dE(Tjbvsm^ zxWWCl*PXL*U9S7^XkQ!)KnQ%ID|Pw zlts8jco;Z85b5nBEfx_~tib9-XqFe$Tl5Ffu%q$|p atg@`qtTL=}tWtv9JiL7T;z|;X3Jd^|wN&>2 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/StatementVisitor.hpp.1C6A06909DF5FBD2.idx b/.cache/clangd/index/StatementVisitor.hpp.1C6A06909DF5FBD2.idx new file mode 100644 index 0000000000000000000000000000000000000000..7cc6c0bf381e6061cf97a966c0c0f6b1c7a686ad GIT binary patch literal 1900 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 VVP;^1WdjBVQ2hr5%rFK60|39WIbr|+ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/TokenList.hpp.3E1793B302B953D1.idx b/.cache/clangd/index/TokenList.hpp.3E1793B302B953D1.idx new file mode 100644 index 0000000000000000000000000000000000000000..a4a6bc56bd459ff356113d67b64330bd112d0a40 GIT binary patch literal 5406 zcmYk9c~I5m8pj_baRGT*UpSn@;ehP>a@ZGH&*88L;#k_MDQX#A71FG(OPPiN3F`HF z)3TdpE@*0kW_C4d>}rvwW?d<>)NGR6Q3lidyzk7@`!d6Kcs}!);SV_He10_!n~nPd z6isnFUsu~O=>Y)n!SDKp*-v#j0W5R|cz$hr>zS65iEc}7B+e`k-Cn)p;>mxv9%Z)f`X<8uZsefiw4D?iB}U(b##8j<__%^6$n z`DV@=XmOj+(zQP0;h>A-UvbKvm4DPP@YswC0Y5I7?0mFi<;;m)^LDK|^WM|HAAHND z^+ufSe1g;3+DNy}%kO&p@9H?iKVtW8`1H7C+4Se~cMUma%Uo6c(p1lTw|cf_zcucS z5vLc&z3hGXLDSOKM?LIEw=NqtsNtuJaxtedh`M&W=bM2)k8PRtbj_B& zLm#a3;lJ639-lC#YvBt4bw5ltmQC-fc;mZUO^2=}UgSx3^Q}(vzTxW*oLQUJck0c` zPclyozTBVn^7Q`L6*Ya{ZTRJ&`9RND=h^q~{nD~}+l!|b#;ocMeYh?p zXx;pi8`mbUnAn*2(xt=K7QFVU>t07pX7{f2uKOQPTXV;G&fc77pnhK6lNW{pyte(h zd7nMI+=;>PGO+t`KeHSdhJSB|&8c+o$tP+Joj=}kVc?E}ksG7sDB=C}b2c{i{A(D4 z3>56#9xg`-rTdTnUOVag5e!ODsNpq6IZF62?d?79KDOMQK`;vOJU(2G5^gdl_XNi@ z#=sYa5FTQZql6u&tVilnJ3SaM6inP?l%s?n&pq~_-^>(G2B|3I^4w54N?3QMrEYxn zWiJK>6e4&;upA{AzCHBk58Wnj2F@sWa1VbuN@xykUfj8PIA`F7LI4kllB0ylr@Ly` zW*7J~u%Hmf)C=~Nzvm7Pd+xzubebZ({Gsr{1#%&fkO33;; z&~@dN#ux@cD8%yEC^<@)v&oRPYwMvn2E$O`oCnEKLUQ7@JGnlM2@G6O@aO(UIZBw& z{`iZ-+nrMx1fmelqYZMDaQeHpHFJWuXE7Lr0^`gmM+v4WE!L)e@7NgRqENz10^}&c zIL>-zM!l7$SM zP;lq&Mmb6txSoH#dF7g=3<6LH<6%ZQO2}G$tY&NNszwGWC=~L-5IIU{8}NwxxuR$_ zgOMmC@g#paN_b^U?9FBWy|jiwJ_?n*GDwaRTC4WW+8bh9$G{JTP#$WKqlAW+COcQ1 z-T4j!e-y%bcz_%w*#Fl2b-!izy9~Tg2;xD(a+L6)+p;&GIoz{>fe#A7JUCE}68@N& zX9ISFAO&xe(2ZLf1#_%yFIZ7C) zPQN?MJof_zg(y_xwBu(6 zi71TXqk`oqVaUf-Nu z=ig>ffWl}#I!KNZ&h6(5-peVw!+@hOl8+3Lql77K=jMl9iM-EXFbdw>+agB^FuQhY zeZ+88J5Ix8<%DnbNwxMY-c5~zSOgAXDjUQiYY0=%AQmx0m?{RbNEpJ@E{H|A5T;^5 zEOLb~bqZn;DTJv`5Q{V+OihAV1PNg(5yT=x2vdI`7V$xtssph|4#LzLh(%}+rouoh z@`5mR1!55ugsCPFiC+#v_~_Ah@vRC^mZEkj#5iTK^$nwk0?hfwwyhImPsCIdPhjw{_ zr*?UPmv(uBw|4n}k9PTjuXb?|&u8@e{J>AU{J~$l3}Dc%00_`7BN(;I1SahYgh1^w zgIT+RAV|9`V9~B%2-dC;2+^*QFjBihAym70_dE(bWYs|?Dts~pO;s{$&ts}d@;Yc!13t}3X~u4<^(t}!r1 zyK123uZw~nU-P2o=`~Lok61K3VTyOeqTC5nvLhC~PMAU+v8Z&yl;?;=n-iueM=Xk* zFr_$R(cy$Cz!8i3CQR9lSTr|bifzQAvJp~LMJxiBFqJK0k+p=WXAz5- zB}^5ISR^cAYFES}TnSULA{Mzym^u})h*ZKSs@`cNIU_%f2tzzwNjDJplg)jX_v4 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Types.hpp.CF309E480C254E5C.idx b/.cache/clangd/index/Types.hpp.CF309E480C254E5C.idx new file mode 100644 index 0000000000000000000000000000000000000000..223a5d37406e00c874d0e4a70279a6dc968ba641 GIT binary patch literal 1222 zcmWIYbaUIs!oc91;#rZKT9OE4GKc_iaY<3;e;_@diGiVF&e}=7*@q2y+WsbQ%XT@< zcX)YDWHndngiVL_oJ+49JF~G@cly@-b$%ML%&oCZZgpS3DkyiKx_KhwC$q28M!#b@ z{_~Dlvt6sW==gos*NJZHA5IYIFEZFEP@TjTyxwV9Gq?Ii?^|15r%Vm_wD8W9Z!*67 z;*_SZ{#185PI?l?OY}UNkGrx29uaAvMSI+TWKF=XnP^flKA~S}oD{J|L&s&6xx*pzIptt5|@J1c6 z4d-`Dy}HE&FhnA?bv_rKbO(r%6)B%Kh%E`Z{&G3nW4BcH_3yMfuU4= z>(%ob&$;*+ScDjOM3_YQ!2|;*FpLB_8F^UEOm^9Ed%QK|V-gl%;E`9AHv$t396$v? zP#Bu8dR^yYDmN1wKLd{xyOao+0PAO90P2tFEHIMYeI65fCT5@`WjJJn!34sQ zbM~2?6j$^9$j`tEbb~09C=ZxGxS=RDt(Xazrb7IL)L%@rVP)dskz<$Rg*lCfN1k1t z7Z#SVKxgCv2R1B-VA4QgP&mUJ)u5n#=X)eeEKr!8gIx*|?!Xj$bHkRhB-L1;O;W~E zjVK7UuK`d5s;Nh z3I#ALVKh)RBq6}m!)Rts9tjQ!VMG{6IZOG$?BW8a3YZ)$O#saTB?y>1i&AqEL2*=E olw52LV(=Ix>a3hud}uQZ7dI~-12;$v0{CDI1_oXPlMBHF0R2sNcmMzZ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Utils.cpp.60D1E0CC138B8929.idx b/.cache/clangd/index/Utils.cpp.60D1E0CC138B8929.idx new file mode 100644 index 0000000000000000000000000000000000000000..577acf6e05c51ebc2144726f61889077cb98525b GIT binary patch literal 4762 zcmYjU2~-r<5}j_P>5(3RSz5Xq5S{537@E-;WD^8MMA3jKY5;=^tIDDSf(ya8@lg{^ z98Er=h|6GHqY3^HHRLNE6EzyeFK*F9P1K`Nf^mt)<-f_Kx`%T>U)}0@_3BpDt2cJ! z@ZoFJ3PnQh$hpONq|~N2=9KHjNW}^4B4C?M_l!KR~gx!uzmLT?+z;7 zC_FPiO>LUEYj(?hznX;w&owvJmoC`N_Smxc$IJ&68!A?Wf2~}9^w|9)Yr4X1?`IwN zn>Q#jaS~Ta7_X{#?|QZ6y-)Y|;C?rjcfZ!re0Iy1enn&U%pU2VzU122-qkA&tA=S4 za(3QfMl7D%da+=J**j`M!u10!O+N+TJ6~yPM-0bvL)MrZgr(#A-U=~V)6^@%PPE6I z8FREN`?|hk%$KpGw_&80U2V<07nw3{IX~fidaj{1w{F*tn7X^aH5_a-E5F?~scB9~ zqP@SZ$Bwi1_PXTqEqv3m=;fD({A)pZBy&J$88evjnU6m6@mA z<6ax~E`Ipt=Bu_P`kBo)TkO%f9?Z$N-W%F^;z?1=vm&~^;0yO6B04jye*dPRLv;a) zvU$bR9-@qU{5fl$Yqovt+i_>kLac6(V#IEFVY) zN^s33pASqUes*`l$+~2g4<>^pc-!~!6=O~re7x|!$h=aojO2Z2A0rrly*<+ISE4jK zzt-xsEZ>LhBYi!fV_n$4Up-H9!u~pcme-Sd2|oVvNtMt1Uq?IP99<5}n@E!c?`(eZ zC}TidrW4N4Ww5+RiW1!MBuQmB*)7Wn*I~Lkbn-AVOj0o1{-byM*CVDn6;gGnEN>)@ z61-~bu(;l}Yi2oNQ75vzKnfDPNj-LWpED(Eop8D?o#jKw5DDHluzr~N&jk%m*s8O# zyqPph@WyuX&uy0u>~zAOI!~4lAOj@$PLD{&?cBuuPPkZC%<==s0TMjo>Yh(5(PeE; zxKdZi@)pt}!P^Q8ThbN&z_QkL)MG#)d-^|NG6ZznpNQE|KMf$RG)BxSZjquekZz32()8TM?z< zWVobY&C4&_OUYS}vHzs}p`OhRHzp0v{$yWSpRh;vZWtv*a1s3>`Qcxr@2CLKhU7);#qimqcxJ&`x_ z@%jH0q(X7)!lcZbcVBoRvA4Uo2jmLW8uG?bXyDDXJwr@ghg*GdN~j8|iU8Y`P=gt2 zFf*)MYvv?&)&&@lQBTfuAQ<)8&{Pt8r#%q!6{?6T9cWi}60zaLrVyk}yVD*}$Bm!m zCe%iGhaz!|dyE%^Ewgz>JW%G zCD<^|hKcgJ9%Je;BlJQ_XvCOC%m}vvCD<{>jv1k_wl%Xo(N^JWkdZ^gK+STLBGzw|GD!>l85EG1A%$`AArzc@#`@QVk~ zF8ty=?ZPh}OuO)ln`jq)@i5wj-@xb?nYGxU*jRZL-z~nEyc*hVsLLt|PoiBo#7EOE z9O7xT3y1gw+J!?ri+147t0^5dKh{o)lDmSdw8p$jc5hhgH}PgYlSG!C~pY7R*3P6 zQOhgj(mG7)G>_jjU7Xo@ehk`&;TRKS$7ZZ`@!+eY(kPTPB4+_HB@7K68V0r~AxTWK zxR5B0w#Xz-5GPo`ZB%+g2c}01b|JK_cd2cgUHZ8WKg__Yz@SV5^{(fjZ9A= zQK*sWDJF_FGCfwps*&lbBr2tJr%+UhI!ps$rqC!rG+-Ja%h9xmt(XSt2K+>HIA%eJ z_QFw9J#1%7r=h!To_<~!kWn_|yUw<|lV%`}ten*ZEu00bp7vhs*pI43mgE^-+N`^lZ^j-itbUtpYxZlzzZj@dA$GKFDsF_0pl7l zGn_>A=`)dPJNW?ua=4su2;Ah3mf~)+V{AyQ<+S}FCx8LuqGM_W7fUi0ZR@T5Y%S7G z!I!@DsvU@KAZEA?bVtZvBeh*$ z)RT1UFc!ji^YZ%Mjpp)=XxBt8QG`5#a3UWaqciw8{P41eMZe{5LfSQ$s>Y?YwPnvy z*KFR506nLd#)R*(8@zYl_^Jts&73(1GI&9&I{idw`wk>76V78ROP!~lz2RlLYsQ7&^VXI z7B@An076I!@uBf9Selq-0e;XFAx^Q#l~WyBE#;_V8ZguRZ7?ld9oX@-fCIxRkl6900P)edajo5U|&A zXcrVeC?N8aR1g&%Tu#-BB4X7RmLNE~q*|wrvt$~eRk70h!kovOti^rYz0W!KzH`sr zCs`0TXU;);f|$J`E`Qz1jhQwCK{(?-)5hG@zv1T@0YT&+X)L~zeI?lW`cVCUj?UI? zZONCRs{Ya?d#3a;>6-SBT<4V(E0<3@cj>{}_$4X(cFs(H7%|uuv3cLTIhFcbQS$9Q zRHH(1s_0VPimsFMZcMM#|E)IM$MRW|&uDwi_0hQG0kXb&W2yN}X=YmTfv2nA|2cYY z4Ke?je4y31zVcCuDWf`9YWOy`qy2^&E$pmC;hqbd#m4zQtmGPm`8h)-W*-&v|x_M?VPW9bO0H^(G9Jl z*M|nKVVYfA?j)C62Uxo~?C^Vrmjx9(Zv$!Iyq_;EK#LPf>*Ny^qi|DrfOmNp`LgET zSu@XDMXEUOe^HTBML#B;;?a6i&(YtX3|+IqX4YA$K!msEB6N{h2M9j*e&d0VX{I)w zcL*86dDmoRwI*)!y~U%wNH2~~eR1p1u=Gt2kJgYHj?Rs^bNZYMaes=y39l^`N^PtI ztgT(GIo5hV=K;@KO{zKX=91m7sy^?2$fJYEAdcRVkQhCC#fm{59ZUvubemq~(3j2p zI{x01g_9)|JHXo0r+>9|?GszeIPENSmQd^f^c}(VnO#K*7G7{4(uWJ~UvVMn@}+M^ zd9)wt$I%siDej(|etOHJ!^v=t&Rx06v}n?VQlP0;g@6h_&}{MuwbTj`P5Cmuo*)?T z#MZ1}fHepPhFPHi7=!}DtUv(l>ptn))K9aN0-BNpN@f5|Qwm#!9A+1H<;4shQfcr8 zRE)|O>JP*Phh#-XX;CjNIvTSKBn88)lt7S}q0hWG&1ei4(v(anbAkQPRHQJ{1$2g{ zjHFQxfoodibYY7&0vhayWM!nGpzK1_5UAX&@Mtnv%1fc)b3WMvm%Q*_5*+b@gP;2;LZpa!7?HOAJg3WN2w z*Ga1^Ph0b`bqEup1nrvQXS=@azj=ii_F}v=pjl1*Nh2xej_<&*C*!GrGr!yU!0yYA zCtqMVj0y9Cc5Q$B_dvR>vk1dFM&}2mkkQk+PPpOS5)6AV9-dI_Py={_Y#)FP=A>+^ zQ97Ue8e97_{$B9XkWQQvwl{$FPkm*|qlS&;*xHZrQ-P>J5^!v`OMtb$Ej`a^S5+0Z z)-W0cNG~)GWJ|G41FSpJD;!S@oUg;yK8%kW=vl!ZrEdgy$RnQF)5bA5yQpA)@-K%YbY-y|G(PXn_%~OPRzpZ@RHt)w;GNX4i5)m z8x914!^1G!XaFY1GIU24NPBRQP$tw3ZVe;>TeE!!tj$BZr^dp&_pr5=(P}{=p&j94 zV0#f*!^Oox*!BZ3TwDyZZ3kdT8HU+*12D83{PJv@0T`|$hS~N4FdPRC!nPHF(Q|X) zPPf&+;e7`(fohNpC=6`Pb{Vh+jl(e8T>#Eqxi+%_5yXDwJtBLS145AL!?B&smn{Ky z2nsAJIjhp^L^*>XF^%)r{4?_bJsCmaLc1U!_{-xi+RLxb`yfce)_1Oqm7X^m5Zoga z>l5<+`E# ze*N$!f*OlWtaoZY7IzDQLj3YWd`03|=pzKDnSMOy)cP9TV+6%Zm~xk!V%f_@EqJ!* m!sDIQts=uw;#P{ata|!l@uQGu4^}^X(X!=qp2WXf>QhqY|LvHkxXHXjGwV7- zab<3jBFNnto300M>Q&)kVBuh3XBT1DWV4pGHeldnVq{=uWn^PzC`wH$?gFY@a>k)7 z;IxVaqYOKjAeS0UBaCL00_&Flq?FLRz%|MBbCX(`-C8q79(Hy{c43&R*44^V^Atp^ zK*Cz=CNSaMd|T!{jIoOY3Ue}X^23A=8!GVM%;x*ZD8kMuz$p$BE=tWw1UiVJxG1@p S8^mDWFp0Ii(^V#dfdK%p4VjGq literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Vector.hpp.AB1C1967D698D3FF.idx b/.cache/clangd/index/Vector.hpp.AB1C1967D698D3FF.idx new file mode 100644 index 0000000000000000000000000000000000000000..ec08eb4136e45dc8212a7b356fa17a51d841fdc9 GIT binary patch literal 6420 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/Vector.inl.F0571DA066B41DAE.idx b/.cache/clangd/index/Vector.inl.F0571DA066B41DAE.idx new file mode 100644 index 0000000000000000000000000000000000000000..b5bc3725af5c64abc7baae68975057f1d857d4d0 GIT binary patch literal 8208 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 NY_aZAo+jbCe*n(b@h<=X literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/WriterStates.cpp.E66D395EB560B690.idx b/.cache/clangd/index/WriterStates.cpp.E66D395EB560B690.idx new file mode 100644 index 0000000000000000000000000000000000000000..3293e688ed19ea49b392a6cec643ebabe26358ac GIT binary patch literal 5172 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/WriterStates.h.3EB1FA8425607F4F.idx b/.cache/clangd/index/WriterStates.h.3EB1FA8425607F4F.idx new file mode 100644 index 0000000000000000000000000000000000000000..e0821157f2760fa79a93501f7ef82f45cf1642be GIT binary patch literal 3334 zcmYjT2~<;88opss5^jBfq%kCrkehvfiB%9mgB?YdFchjmf=byUh+%OQajESosCAhc zYfF_Up&=BO~Xr#iN-1qugB+i_&j3fiO2?aRB#%Q?XNzkKh$|9v}sXc|2cdgM)&vG~X*&#~b zbLZ@|v-+$hGp?k3Xc2rtpV$z!z2~*|l6kq0`!qvcd*@WBZt*1B>vqXHW?eV@Q1)ok zOwHRFL%T!D|Lbb|&x7)E(QrZc$M!aPc=RH9*7Xfj z6Us*=e_0+nl6bOfL~;B`eZ<>mFV_6C|AeeLVyHzJeevEI>C&c&CvAuOm$hfQbEd3a z_u{yx=lutbJ+Yz>hvZu>HNSL5@nReQn5gD&y0N3DM#6e)wsd`v+!-`}>*u$wt@}*) z^hn~;1+&yYebswTwB%mXQSq-IjV(&r|FF1naF?Mi_N(6W=ZYrtzLnl-$v<5}Eg$Ot zr9Ut0=G45Jd}`6sg4n%(TrmFkjj@LY`yLe}R95XwOw~r}4m5itn;cWsVP$C*qM(7$ ztekfb_KyhP6P@R63+vi2RhII}%+`BZf8Bb`BXjgd=Qv$)!MpX}HmDcgou1(si$1g4 z6TkY$f%nD_$fA`AO)E?1F6bG!ynp$@qZ9j9H5Ik)NQ4hQ3oo1Y^o8Wmwld3?We>79 z=O#mE@u3#Yk;o+_2j=V?jd~Po?2Y-~T&% zb4i)dc2clc9N&1L{UH@$Za4?()>XZc7!1J8L%%z1Ton=ufep{iZy%(kv^3xgCxetY z9typ6cy^y{RRJG@S-$T9(o=d4AwQ;T1?_3X1RWtrDXALpBZ7P@xOOz<{M2uW4F@W` zx-e2GV}1cXL&uL;(s}!IMrUp;1PNpX3uUnae)J^Y3XfWKZP^oU1q60NFi-|ecsa~R zxX^l~{dUX+Ed&NakWn(+WK@Wcu(S2Z$i=JqP6%Eh1e&7p3L?IbkfA#^emvfg4Z(Cm zFjHnu4=cWYcW3c8jhJ8}1O=r?0{qBe-wNX5UsAg#_HTq>CLtIpBd5tvE+IeNeB`N!A99Ife2M~ zv}XU<$2(3zU?c=NCC9s%8tUueY~PyTgoEG=1TzRhN9i~Nld~?x_0*;P8UmUSG?WIf zAbH8Rf~N@Pc3gaQ5CSbBNTd=Q;7^$XG*Ub;Y2SB`C5~a=<}6vClayo%jaBj9*xoxCO(EOIVnABue1(1`9(Z5{RbxcY~A} z%6$J2AXU1``~BU*QoK8Py4*#aPFlunCeT(47AE~;mUoJtF{oJt3DoJtS$oXP+UoXQA{oXP}DoXQN$oXP?$ zoXQHUoQeiCr?LSXr?LaPzak@s6=ss2m6A9R!%V)jFgbG!GpWwP#3UGIvYdsVS8o>2 z`Jm|v9vCqtmXTN{xr5nEu(NCu>lkL@oP}Z2r(y4O&mHCo5I>ABWl15NT65%1z+w`dQMrd&~)e`HU|-!prj%n4dBB|c;W ze~8Tc=SAVJayS-&khfr)2wrXfnn(? z#{h=n%G@MHpzZ$(8YJzfwVhyNVrF1q;%4U-2NMjOKsg2mMkZEA^JWSjQ+&VCg+U^2o@01QrXXIjH=U`U@YXcIsmzEaZeQG@yq*{;L1g08B1670U nf~hV_%}EqQ(gk-GLvc}ZF<2Q>+7_Klz9|u=jEoGx5QPB%rAl&* literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/main.cpp.41A508184138A40E.idx b/.cache/clangd/index/main.cpp.41A508184138A40E.idx new file mode 100644 index 0000000000000000000000000000000000000000..f429e47caa96bbf5fd8317bf03e09df5345e7268 GIT binary patch literal 1630 zcmWIYbaM-1V_x5cqojOXkGm zo1S)a{hpwv-*_QNNaIWD#HAmjBBP^Js*}IHw!R(X;pOpNQDM!_jK1`~KA~emWnce( ze|z@Xw|9@;{W40tzGcnj!#NYyNR%9^OX2)&x!ZD4qE^mx!Mh^D-@JL5YYkcCuZ28{ z-BP$nMmo3WTJB8yfJ^fl=J~yyD74si-X!JJcp=8KZ+fh*?&JNPV6f-M$Af;m?023P z5qW!VGkb`2*^Cft1yk3zWmS<9dQ#sfFP*3H;nq#HoHZ_oY7Q~E*|Ybaxv`<`UO&g~ zZ#yy-WcP$IABkgSDc_*nqgBOTy|g^5Tky+*JJ)P-XWMvJ&N`TI`#8rFmxwuMqSlA) z@w=y>zxdWeZG{DCf9tvmG%ndZ4Y)4zd6THdr>GM#nj*_gVIcreIR_F;LhX7{GarqhF_Ew#+AbCRpE z*LrUDeR;KVUS|(e$F)Tloj$EHRl44KX4Rs{P6>LOm5lH1eh?mKuO+9q*KtS8+6UXh zmzInz>)X6E%VUlcx82!u z;8MtJuZDwV{{-~EdZx4g;rj4W>u2=kp9ZTm-`@XydcR7|$^939@e7`JyCp0+pY_+F zcPBmmF|;c!m|9$!n- zWbUiyEQ~zLd^&t~FzNrP8qr2Owy`tuD68bv<2x1b9$E$bBI6CgHF{6yKERU=VOjxkqy64<1 z2Wz0Pmb{iSOt|fw!0G$WGaZ3$<`v~tgbDvV_;A`)$B(W+VRmkIA((J=;=R=MtlK?+ z4p8M%6@xjRM_HRwTNK7ybMJQT3T87epjUV}cz9uYWt2rZMB%*e>`$c5McQWqox>@^ z3Ab19MEb6)>^ZHBBFd6Nl2S0e#r`Zep5*7w1FDwek%Nav@BVk|qnxiSVCGR4;1WP` zju@915>J6k0nSs>;agOdc5oZeV@fJYx-bi3UjEwu*ZVg{+E=8Jp)D(yCJ(ROqjVZa!hyVjd zG=2{KDCOEOC_%P>px Qb8>O>@QNykG0HIj0BX`vrvLx| literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/main.cpp.C4CF7810A05D703D.idx b/.cache/clangd/index/main.cpp.C4CF7810A05D703D.idx new file mode 100644 index 0000000000000000000000000000000000000000..b813354253a7b92b32ea65d025f69eb5acb23251 GIT binary patch literal 1690 zcmWIYbaR`;#=zj5;#rZKT9U}Zz`!5^#Kk2=nN~~;46lI#6?4`G`)1!U5coR(W#+`= zn^LPoPb|C}!?bXzO2CWMiAz65MMfJ<+H3gxwe{_q2`v-eDJra)Svl+Z%;kZHA`a=* z|Jk|o-n~0@yZ7EwdDAtmbk}^|NuteuH_q!M?oTs!H}Pq`YqMZ>(xJN5`ZYs{;krCyn@+{NZk_cHU*_2*TJ$?8KInO3v!p3 zO+DwE*P?a(myRF1pKNHr=alMK^Ho%yZ58otWAomc*SSB}D{{)(H9Mzl(m7lCSGf57 zZb!@Qd#&$EXL=`zIBXKj)>Tg0Y_;8gl?%aDCFXS!x&4jHPVEZmPi89Sxe)Q)z~0mN_C1GJv#nn}m8kaJ{PY>? zw9>6>StN3v@&62(zeVH+*N2zEpY)f1O$-RWwfFnNu~t)k9G2ZpDX{V=v#Yb~!-RR1dAWIok$76XMo2tQ-arITl2cL;#yh<07n^F8 zl^Tf;O)R^d?*g9-mU_;A`)$B(W+L)f|5g{fLLnJvnz2otVOyqCJ3b-M>MkFqM4su(Qfc$Brcw2*iPoCcyWxi$B0*REhT^8)&p zhl7U~W|EAuD2FJV_nrNT)VWCeOrYa9WjNv1?T)>Bz1b|e2`DVfBP#>b`|1CmhQnIR zn}Nb|JaX_rtGe!J-F|lA9H5((M3tmqs(bgpTOZ|oWdYF50$c(}t`y@EL*glLDZqJ3 zI(&<&(hhC|nxw9xt_w5iNWofVq3Egupg=L`VMSd*RIRaE9swk=o69#HA*R+Q5mT*RH+a@>d0?=MvVO@AI>~Nb} zvCiT74JHv~E)gzSm}(JaVG&`t@5^^B=(*w+@BpZnkA)BJL&vUQArvXIo26_ylr=1fLcxZ4{;EB!bw*Majj=Aci7{fB+>JgMm@`(W-wHwgnllnUoY6 xl5s}P(w-UVJtsN$|K^{6`R1FMn-Hbb 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 167b49d (base for wgsl writer) compile_commands.json # Prerequisites diff --git a/examples/wgsl/main.cpp b/examples/wgsl/main.cpp new file mode 100644 index 00000000..b8734efb --- /dev/null +++ b/examples/wgsl/main.cpp @@ -0,0 +1,15 @@ +#include +#include +#include + +int main() +{ + auto shader = nzsl::ParseFromFile("shader.nzsl"); + + nzsl::WgslWriter wgslWriter; + auto wgslShader = wgslWriter.Generate(*shader); + + std::cout << wgslShader << std::endl; + + return 0; +} diff --git a/examples/wgsl/shader.nzsl b/examples/wgsl/shader.nzsl new file mode 100644 index 00000000..27625605 --- /dev/null +++ b/examples/wgsl/shader.nzsl @@ -0,0 +1,15 @@ +[nzsl_version("1.0")] +module; + +struct Output +{ + [location(0)] color: vec4[f32] +} + +[entry(frag)] +fn main() -> Output +{ + let output: Output; + output.color = vec4[f32](1.0, 1.0, 1.0, 1.0); + return output; +} diff --git a/examples/wgsl/xmake.lua b/examples/wgsl/xmake.lua new file mode 100644 index 00000000..ff9a15ac --- /dev/null +++ b/examples/wgsl/xmake.lua @@ -0,0 +1,8 @@ +target("wgsl-example") + set_group("Examples") + add_deps("nzsl") + set_rundir(".") + + add_files("main.cpp") + add_headerfiles("shader.nzsl", { install = false }) + add_installfiles("shader.nzsl", {prefixdir = "bin"}) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp new file mode 100644 index 00000000..caecd670 --- /dev/null +++ b/include/NZSL/WgslWriter.hpp @@ -0,0 +1,185 @@ +// Copyright (C) 2025 kbz_8 (contact@kbz8.me) +// This file is part of the "Nazara Shading Language" project +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NZSL_WGSLWRITER_HPP +#define NZSL_WGSLWRITER_HPP + +#include +#include +#include +#include +#include +#include + +namespace nzsl +{ + class NZSL_API WgslWriter : public ShaderWriter, public Ast::ExpressionVisitorExcept, public Ast::StatementVisitorExcept + { + public: + struct Environment; + + inline WgslWriter(); + WgslWriter(const WgslWriter&) = delete; + WgslWriter(WgslWriter&&) = delete; + ~WgslWriter() = default; + + std::string Generate(const Ast::Module& module, const States& states = {}); + + void SetEnv(Environment environment); + + struct Environment + { + }; + + private: + struct PreVisitor; + friend PreVisitor; + + // Attributes + struct AutoBindingAttribute; + struct AuthorAttribute; + struct BindingAttribute; + struct BuiltinAttribute; + struct CondAttribute; + struct DepthWriteAttribute; + struct DescriptionAttribute; + struct EarlyFragmentTestsAttribute; + struct EntryAttribute; + struct FeatureAttribute; + struct InterpAttribute; + struct LangVersionAttribute; + struct LayoutAttribute; + struct LicenseAttribute; + struct LocationAttribute; + struct SetAttribute; + struct TagAttribute; + struct UnrollAttribute; + struct WorkgroupAttribute; + + void Append(const Ast::AliasType& type); + void Append(const Ast::ArrayType& type); + void Append(const Ast::DynArrayType& type); + void Append(const Ast::ExpressionType& type); + void Append(const Ast::ExpressionValue& type); + void Append(const Ast::FunctionType& functionType); + void Append(const Ast::IntrinsicFunctionType& intrinsicFunctionType); + void Append(const Ast::MatrixType& matrixType); + void Append(const Ast::MethodType& methodType); + void Append(const Ast::ModuleType& moduleType); + void Append(const Ast::NamedExternalBlockType& namedExternalBlockType); + void Append(Ast::NoType); + void Append(Ast::PrimitiveType type); + void Append(const Ast::PushConstantType& pushConstantType); + void Append(const Ast::SamplerType& samplerType); + void Append(const Ast::StorageType& storageType); + void Append(const Ast::StructType& structType); + void Append(const Ast::TextureType& samplerType); + void Append(const Ast::Type& type); + void Append(const Ast::UniformType& uniformType); + void Append(const Ast::VectorType& vecType); + template void Append(const T& param); + template void Append(const T1& firstParam, const T2& secondParam, Args&&... params); + template void AppendAttributes(bool appendLine, Args&&... params); + template void AppendAttributesInternal(bool& first, const T& param); + template void AppendAttributesInternal(bool& first, const T1& firstParam, const T2& secondParam, Rest&&... params); + void AppendAttribute(AutoBindingAttribute attribute); + void AppendAttribute(AuthorAttribute attribute); + void AppendAttribute(BindingAttribute attribute); + void AppendAttribute(BuiltinAttribute attribute); + void AppendAttribute(CondAttribute attribute); + void AppendAttribute(DepthWriteAttribute attribute); + void AppendAttribute(DescriptionAttribute attribute); + void AppendAttribute(EarlyFragmentTestsAttribute attribute); + void AppendAttribute(EntryAttribute attribute); + void AppendAttribute(FeatureAttribute attribute); + void AppendAttribute(InterpAttribute attribute); + void AppendAttribute(LangVersionAttribute attribute); + void AppendAttribute(LayoutAttribute attribute); + void AppendAttribute(LicenseAttribute attribute); + void AppendAttribute(LocationAttribute attribute); + void AppendAttribute(SetAttribute attribute); + void AppendAttribute(TagAttribute attribute); + void AppendAttribute(UnrollAttribute attribute); + void AppendAttribute(WorkgroupAttribute attribute); + void AppendComment(std::string_view section); + void AppendCommentSection(std::string_view section); + void AppendHeader(); + template void AppendIdentifier(const T& map, std::size_t id); + void AppendLine(std::string_view txt = {}); + template void AppendLine(Args&&... params); + void AppendModuleAttributes(const Ast::Module::Metadata& metadata); + void AppendStatementList(std::vector& statements); + template void AppendValue(const T& value); + + void EnterScope(); + void LeaveScope(bool skipLine = true); + + void RegisterAlias(std::size_t aliasIndex, std::string aliasName); + void RegisterConstant(std::size_t constantIndex, std::string constantName); + void RegisterFunction(std::size_t funcIndex, std::string functionName); + void RegisterModule(std::size_t moduleIndex, std::string moduleName); + void RegisterStruct(std::size_t structIndex, std::string structName); + void RegisterVariable(std::size_t varIndex, std::string varName); + + void ScopeVisit(Ast::Statement& node); + + void Visit(Ast::ExpressionPtr& expr, bool encloseIfRequired = false); + + using ExpressionVisitorExcept::Visit; + void Visit(Ast::AccessIdentifierExpression& node) override; + void Visit(Ast::AccessIndexExpression& node) override; + void Visit(Ast::AliasValueExpression& node) override; + void Visit(Ast::AssignExpression& node) override; + void Visit(Ast::BinaryExpression& node) override; + void Visit(Ast::CallFunctionExpression& node) override; + void Visit(Ast::CastExpression& node) override; + void Visit(Ast::ConditionalExpression& node) override; + void Visit(Ast::ConstantArrayValueExpression& node) override; + void Visit(Ast::ConstantValueExpression& node) override; + void Visit(Ast::ConstantExpression& node) override; + void Visit(Ast::FunctionExpression& node) override; + void Visit(Ast::IdentifierExpression& node) override; + void Visit(Ast::IntrinsicExpression& node) override; + void Visit(Ast::ModuleExpression& node) override; + void Visit(Ast::NamedExternalBlockExpression& node) override; + void Visit(Ast::StructTypeExpression& node) override; + void Visit(Ast::SwizzleExpression& node) override; + void Visit(Ast::VariableValueExpression& node) override; + void Visit(Ast::UnaryExpression& node) override; + + using StatementVisitorExcept::Visit; + void Visit(Ast::BranchStatement& node) override; + void Visit(Ast::BreakStatement& node) override; + void Visit(Ast::ConditionalStatement& node) override; + void Visit(Ast::ContinueStatement& node) override; + void Visit(Ast::DeclareAliasStatement& node) override; + void Visit(Ast::DeclareConstStatement& node) override; + void Visit(Ast::DeclareExternalStatement& node) override; + void Visit(Ast::DeclareFunctionStatement& node) override; + void Visit(Ast::DeclareOptionStatement& node) override; + void Visit(Ast::DeclareStructStatement& node) override; + void Visit(Ast::DeclareVariableStatement& node) override; + void Visit(Ast::DiscardStatement& node) override; + void Visit(Ast::ExpressionStatement& node) override; + void Visit(Ast::ForStatement& node) override; + void Visit(Ast::ForEachStatement& node) override; + void Visit(Ast::ImportStatement& node) override; + void Visit(Ast::MultiStatement& node) override; + void Visit(Ast::NoOpStatement& node) override; + void Visit(Ast::ReturnStatement& node) override; + void Visit(Ast::ScopedStatement& node) override; + void Visit(Ast::WhileStatement& node) override; + + struct State; + + Environment m_environment; + State* m_currentState; + }; +} + +#include + +#endif // NZSL_LANGWRITER_HPP diff --git a/include/NZSL/WgslWriter.inl b/include/NZSL/WgslWriter.inl new file mode 100644 index 00000000..517ced86 --- /dev/null +++ b/include/NZSL/WgslWriter.inl @@ -0,0 +1,13 @@ +// Copyright (C) 2025 kbz_8 (contact@kbz8.me) +// This file is part of the "Nazara Shading Language" project +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include + +namespace nzsl +{ + inline WgslWriter::WgslWriter() : + m_currentState(nullptr) + { + } +} diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp new file mode 100644 index 00000000..4f0665d5 --- /dev/null +++ b/src/NZSL/WgslWriter.cpp @@ -0,0 +1,1716 @@ +// Copyright (C) 2025 kbz_8 (contact@kbz8.me) +// This file is part of the "Nazara Shading Language" project +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace nzsl +{ + struct WgslWriter::PreVisitor : Ast::RecursiveVisitor + { + PreVisitor(WgslWriter& writer) : + m_writer(writer) + { + } + + void Visit(Ast::DeclareFunctionStatement& node) override + { + if (node.funcIndex) + m_writer.RegisterFunction(*node.funcIndex, node.name); + + // Speed up by not visiting function statements, we only need to extract function data + } + + WgslWriter& m_writer; + }; + + struct WgslWriter::AutoBindingAttribute + { + const Ast::ExpressionValue& autoBinding; + + bool HasValue() const { return autoBinding.HasValue(); } + }; + + struct WgslWriter::AuthorAttribute + { + const std::string& author; + + bool HasValue() const { return !author.empty(); } + }; + + struct WgslWriter::BindingAttribute + { + const Ast::ExpressionValue& bindingIndex; + + bool HasValue() const { return bindingIndex.HasValue(); } + }; + + struct WgslWriter::BuiltinAttribute + { + const Ast::ExpressionValue& builtin; + + bool HasValue() const { return builtin.HasValue(); } + }; + + struct WgslWriter::CondAttribute + { + const Ast::ExpressionValue& cond; + + bool HasValue() const { return cond.HasValue(); } + }; + + struct WgslWriter::DepthWriteAttribute + { + const Ast::ExpressionValue& writeMode; + + bool HasValue() const { return writeMode.HasValue(); } + }; + + struct WgslWriter::DescriptionAttribute + { + const std::string& description; + + bool HasValue() const { return !description.empty(); } + }; + + struct WgslWriter::EarlyFragmentTestsAttribute + { + const Ast::ExpressionValue& earlyFragmentTests; + + bool HasValue() const { return earlyFragmentTests.HasValue(); } + }; + + struct WgslWriter::EntryAttribute + { + const Ast::ExpressionValue& stageType; + + bool HasValue() const { return stageType.HasValue(); } + }; + + struct WgslWriter::FeatureAttribute + { + Ast::ModuleFeature featureAttribute; + + bool HasValue() const { return true; } + }; + + struct WgslWriter::InterpAttribute + { + const Ast::ExpressionValue& interpQualifier; + + bool HasValue() const { return interpQualifier.HasValue(); } + }; + + struct WgslWriter::LangVersionAttribute + { + std::uint32_t version; + + bool HasValue() const { return true; } + }; + + struct WgslWriter::LayoutAttribute + { + const Ast::ExpressionValue& layout; + + bool HasValue() const { return layout.HasValue(); } + }; + + struct WgslWriter::LicenseAttribute + { + const std::string& license; + + bool HasValue() const { return !license.empty(); } + }; + + struct WgslWriter::LocationAttribute + { + const Ast::ExpressionValue& locationIndex; + + bool HasValue() const { return locationIndex.HasValue(); } + }; + + struct WgslWriter::SetAttribute + { + const Ast::ExpressionValue& setIndex; + + bool HasValue() const { return setIndex.HasValue(); } + }; + + struct WgslWriter::TagAttribute + { + const std::string& tag; + + bool HasValue() const { return !tag.empty(); } + }; + + struct WgslWriter::UnrollAttribute + { + const Ast::ExpressionValue& unroll; + + bool HasValue() const { return unroll.HasValue(); } + }; + + struct WgslWriter::WorkgroupAttribute + { + const Ast::ExpressionValue& workgroup; + + bool HasValue() const { return workgroup.HasValue(); } + }; + + struct WgslWriter::State + { + struct Identifier + { + std::optional externalBlockIndex; + std::size_t moduleIndex; + std::string name; + }; + + std::optional currentExternalBlockIndex; + std::size_t currentModuleIndex; + std::stringstream stream; + std::unordered_map aliases; + std::unordered_map constants; + std::unordered_map functions; + std::unordered_map modules; + std::unordered_map structs; + std::unordered_map variables; + std::vector externalBlockNames; + std::vector moduleNames; + const States* states = nullptr; + const Ast::Module* module; + bool isInEntryPoint = false; + int streamEmptyLine = 1; + unsigned int indentLevel = 0; + }; + + std::string WgslWriter::Generate(const Ast::Module& module, const States& /*states*/) + { + State state; + m_currentState = &state; + Nz::CallOnExit onExit([this]() + { + m_currentState = nullptr; + }); + + state.module = &module; + + AppendHeader(); + + // First registration pass (required to register function names) + PreVisitor previsitor(*this); + { + m_currentState->currentModuleIndex = 0; + for (const auto& importedModule : module.importedModules) + { + importedModule.module->rootNode->Visit(previsitor); + m_currentState->currentModuleIndex++; + m_currentState->moduleNames.push_back(importedModule.identifier); + } + + m_currentState->currentModuleIndex = std::numeric_limits::max(); + + std::size_t moduleIndex = 0; + for (const auto& importedModule : module.importedModules) + RegisterModule(moduleIndex++, importedModule.identifier); + + module.rootNode->Visit(previsitor); + } + + // Register imported modules + m_currentState->currentModuleIndex = 0; + for (const auto& importedModule : module.importedModules) + { + AppendModuleAttributes(*importedModule.module->metadata); + AppendLine("module ", importedModule.identifier); + EnterScope(); + importedModule.module->rootNode->Visit(*this); + LeaveScope(true); + + m_currentState->currentModuleIndex++; + m_currentState->moduleNames.push_back(importedModule.identifier); + } + + m_currentState->currentModuleIndex = std::numeric_limits::max(); + module.rootNode->Visit(*this); + + return state.stream.str(); + } + + void WgslWriter::SetEnv(Environment environment) + { + m_environment = std::move(environment); + } + + void WgslWriter::Append(const Ast::AliasType& type) + { + AppendIdentifier(m_currentState->aliases, type.aliasIndex); + } + + void WgslWriter::Append(const Ast::ArrayType& type) + { + if (type.length > 0) + Append("array[", type.containedType->type, ", ", type.length, "]"); + else + Append("array[", type.containedType->type, "]"); + } + + void WgslWriter::Append(const Ast::DynArrayType& type) + { + Append("dyn_array[", type.containedType->type, "]"); + } + + void WgslWriter::Append(const Ast::ExpressionType& type) + { + std::visit([&](auto&& arg) + { + Append(arg); + }, type); + } + + void WgslWriter::Append(const Ast::ExpressionValue& type) + { + assert(type.HasValue()); + if (type.IsResultingValue()) + Append(type.GetResultingValue()); + else + type.GetExpression()->Visit(*this); + } + + void WgslWriter::Append(const Ast::FunctionType& /*functionType*/) + { + throw std::runtime_error("unexpected function type"); + } + + void WgslWriter::Append(const Ast::IntrinsicFunctionType& /*functionType*/) + { + throw std::runtime_error("unexpected intrinsic function type"); + } + + void WgslWriter::Append(const Ast::MatrixType& matrixType) + { + if (matrixType.columnCount == matrixType.rowCount) + { + Append("mat"); + Append(matrixType.columnCount); + } + else + { + Append("mat"); + Append(matrixType.columnCount); + Append("x"); + Append(matrixType.rowCount); + } + + Append("[", matrixType.type, "]"); + } + + void WgslWriter::Append(const Ast::MethodType& /*functionType*/) + { + throw std::runtime_error("unexpected method type"); + } + + void WgslWriter::Append(const Ast::ModuleType& moduleType) + { + AppendIdentifier(m_currentState->modules, moduleType.moduleIndex); + } + + void WgslWriter::Append(const Ast::NamedExternalBlockType& namedExternalBlockType) + { + Append(m_currentState->externalBlockNames[namedExternalBlockType.namedExternalBlockIndex]); + } + + void WgslWriter::Append(Ast::PrimitiveType type) + { + switch (type) + { + case Ast::PrimitiveType::Boolean: return Append("bool"); + case Ast::PrimitiveType::Float32: return Append("f32"); + case Ast::PrimitiveType::Float64: return Append("f64"); + case Ast::PrimitiveType::Int32: return Append("i32"); + case Ast::PrimitiveType::UInt32: return Append("u32"); + case Ast::PrimitiveType::String: return Append("string"); + } + } + + void WgslWriter::Append(const Ast::PushConstantType& pushConstantType) + { + Append("push_constant[", pushConstantType.containedType, "]"); + } + + void WgslWriter::Append(const Ast::SamplerType& samplerType) + { + if (samplerType.depth) + Append("depth_"); + + Append("sampler"); + + switch (samplerType.dim) + { + case ImageType::E1D: Append("1D"); break; + case ImageType::E1D_Array: Append("1D_array"); break; + case ImageType::E2D: Append("2D"); break; + case ImageType::E2D_Array: Append("2D_array"); break; + case ImageType::E3D: Append("3D"); break; + case ImageType::Cubemap: Append("_cube"); break; + } + + Append("[", samplerType.sampledType, "]"); + } + + void WgslWriter::Append(const Ast::StorageType& storageType) + { + Append("storage[", storageType.containedType); + switch (storageType.accessPolicy) + { + case AccessPolicy::ReadOnly: Append(", readonly"); break; + case AccessPolicy::ReadWrite: break; + case AccessPolicy::WriteOnly: Append(", writeonly"); break; + } + Append("]"); + } + + void WgslWriter::Append(const Ast::StructType& structType) + { + AppendIdentifier(m_currentState->structs, structType.structIndex); + } + + void WgslWriter::Append(const Ast::TextureType& textureType) + { + Append("texture"); + + switch (textureType.dim) + { + case ImageType::E1D: Append("1D"); break; + case ImageType::E1D_Array: Append("1D_array"); break; + case ImageType::E2D: Append("2D"); break; + case ImageType::E2D_Array: Append("2D_array"); break; + case ImageType::E3D: Append("3D"); break; + case ImageType::Cubemap: Append("_cube"); break; + } + + Append("[", textureType.baseType, ", "); + switch (textureType.accessPolicy) + { + case AccessPolicy::ReadOnly: Append("readonly"); break; + case AccessPolicy::ReadWrite: Append("readwrite"); break; + case AccessPolicy::WriteOnly: Append("writeonly"); break; + } + + if (textureType.format != ImageFormat::Unknown) + { + assert(textureType.format == ImageFormat::RGBA8); //< TODO + Append(", rgba8"); + } + Append("]"); + } + + void WgslWriter::Append(const Ast::Type& /*type*/) + { + throw std::runtime_error("unexpected type?"); + } + + void WgslWriter::Append(const Ast::UniformType& uniformType) + { + Append("uniform[", uniformType.containedType, "]"); + } + + void WgslWriter::Append(const Ast::VectorType& vecType) + { + Append("vec", vecType.componentCount, "[", vecType.type, "]"); + } + + void WgslWriter::Append(Ast::NoType) + { + return Append("()"); + } + + template + void WgslWriter::Append(const T& param) + { + assert(m_currentState && "This function should only be called while processing an AST"); + + if (m_currentState->streamEmptyLine > 0) + { + for (std::size_t i = 0; i < m_currentState->indentLevel; ++i) + m_currentState->stream << '\t'; + + m_currentState->streamEmptyLine = 0; + } + + m_currentState->stream << param; + } + + template + void WgslWriter::Append(const T1& firstParam, const T2& secondParam, Args&&... params) + { + Append(firstParam); + Append(secondParam, std::forward(params)...); + } + + template + void WgslWriter::AppendAttributes(bool appendLine, Args&&... params) + { + bool hasAnyAttribute = (params.HasValue() || ...); + if (!hasAnyAttribute) + return; + + bool first = true; + + Append("["); + AppendAttributesInternal(first, std::forward(params)...); + Append("]"); + + if (appendLine) + AppendLine(); + else + Append(" "); + } + + template + void WgslWriter::AppendAttributesInternal(bool& first, const T& param) + { + if (!param.HasValue()) + return; + + if (!first) + Append(", "); + + first = false; + + AppendAttribute(param); + } + + template + void WgslWriter::AppendAttributesInternal(bool& first, const T1& firstParam, const T2& secondParam, Rest&&... params) + { + AppendAttributesInternal(first, firstParam); + AppendAttributesInternal(first, secondParam, std::forward(params)...); + } + + void WgslWriter::AppendAttribute(AutoBindingAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("auto_binding("); + + if (attribute.autoBinding.IsResultingValue()) + Append((attribute.autoBinding.GetResultingValue()) ? "true" : "false"); + else + attribute.autoBinding.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(AuthorAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("author(", EscapeString(attribute.author), ")"); + } + + void WgslWriter::AppendAttribute(BindingAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("binding("); + + if (attribute.bindingIndex.IsResultingValue()) + Append(attribute.bindingIndex.GetResultingValue()); + else + attribute.bindingIndex.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(BuiltinAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("builtin("); + + if (attribute.builtin.IsResultingValue()) + Append(Parser::ToString(attribute.builtin.GetResultingValue())); + else + attribute.builtin.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(CondAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("cond("); + + if (attribute.cond.IsResultingValue()) + Append(Ast::ToString(attribute.cond.GetResultingValue())); + else + attribute.cond.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(DepthWriteAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("depth_write("); + + if (attribute.writeMode.IsResultingValue()) + Append(Parser::ToString(attribute.writeMode.GetResultingValue())); + else + attribute.writeMode.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(DescriptionAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("desc(", EscapeString(attribute.description), ")"); + } + + void WgslWriter::AppendAttribute(EarlyFragmentTestsAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("early_fragment_tests("); + + if (attribute.earlyFragmentTests.IsResultingValue()) + Append((attribute.earlyFragmentTests.GetResultingValue()) ? "true" : "false"); + else + attribute.earlyFragmentTests.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(EntryAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("entry("); + + if (attribute.stageType.IsResultingValue()) + Append(Parser::ToString(attribute.stageType.GetResultingValue())); + else + attribute.stageType.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(FeatureAttribute attribute) + { + Append("feature("); + + auto it = LangData::s_moduleFeatures.find(attribute.featureAttribute); + assert(it != LangData::s_moduleFeatures.end()); + + Append(it->second.identifier); + + Append(")"); + } + + void WgslWriter::AppendAttribute(InterpAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("interp("); + + if (attribute.interpQualifier.IsResultingValue()) + Append(Parser::ToString(attribute.interpQualifier.GetResultingValue())); + else + attribute.interpQualifier.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(LangVersionAttribute attribute) + { + std::uint32_t shaderLangVersion = attribute.version; + std::uint32_t majorVersion = shaderLangVersion / 100; + shaderLangVersion -= majorVersion * 100; + + std::uint32_t minorVersion = shaderLangVersion / 10; + shaderLangVersion -= minorVersion * 100; + + std::uint32_t patchVersion = shaderLangVersion; + + // nzsl_version + Append("nzsl_version(\"", majorVersion, ".", minorVersion); + if (patchVersion != 0) + Append(".", patchVersion); + + Append("\")"); + } + + void WgslWriter::AppendAttribute(LayoutAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("layout("); + if (attribute.layout.IsResultingValue()) + Append(Parser::ToString(attribute.layout.GetResultingValue())); + else + attribute.layout.GetExpression()->Visit(*this); + Append(")"); + } + + void WgslWriter::AppendAttribute(LicenseAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("license(", EscapeString(attribute.license), ")"); + } + + void WgslWriter::AppendAttribute(LocationAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("location("); + + if (attribute.locationIndex.IsResultingValue()) + Append(attribute.locationIndex.GetResultingValue()); + else + attribute.locationIndex.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(SetAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("set("); + + if (attribute.setIndex.IsResultingValue()) + Append(attribute.setIndex.GetResultingValue()); + else + attribute.setIndex.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(TagAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("tag(", EscapeString(attribute.tag), ")"); + } + + void WgslWriter::AppendAttribute(UnrollAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("unroll("); + + if (attribute.unroll.IsResultingValue()) + Append(Parser::ToString(attribute.unroll.GetResultingValue())); + else + attribute.unroll.GetExpression()->Visit(*this); + + Append(")"); + } + + void WgslWriter::AppendAttribute(WorkgroupAttribute attribute) + { + if (!attribute.HasValue()) + return; + + Append("workgroup("); + + if (attribute.workgroup.IsResultingValue()) + { + const Vector3u32& workgroupSize = attribute.workgroup.GetResultingValue(); + Append(workgroupSize.x(), ", ", workgroupSize.y(), ", ", workgroupSize.z()); + } + else + { + const Ast::ExpressionPtr& workgroupExpr = attribute.workgroup.GetExpression(); + if (workgroupExpr->GetType() != Ast::NodeType::CastExpression) + throw std::runtime_error("expected workgroup expression to be a cast expression"); + + const Ast::CastExpression& workgroupCast = static_cast(*workgroupExpr); + if (!workgroupCast.targetType.IsResultingValue() || workgroupCast.targetType.GetResultingValue() != Ast::ExpressionType{ Ast::VectorType{ 3, Ast::PrimitiveType::UInt32 }}) + throw std::runtime_error("expected workgroup expression to be a cast to vec3[u32]"); + + if (workgroupCast.expressions.size() != 3) + throw std::runtime_error("expected workgroup expression to be a cast of 3 expressions"); + + workgroupCast.expressions[0]->Visit(*this); + Append(", "); + workgroupCast.expressions[1]->Visit(*this); + Append(", "); + workgroupCast.expressions[2]->Visit(*this); + } + + Append(")"); + } + + void WgslWriter::AppendComment(std::string_view section) + { + std::size_t lineFeed = section.find('\n'); + if (lineFeed != section.npos) + { + std::size_t previousCut = 0; + + AppendLine("/*"); + do + { + AppendLine(section.substr(previousCut, lineFeed - previousCut)); + previousCut = lineFeed + 1; + } + while ((lineFeed = section.find('\n', previousCut)) != section.npos); + AppendLine(section.substr(previousCut)); + AppendLine("*/"); + } + else + AppendLine("// ", section); + } + + void WgslWriter::AppendCommentSection(std::string_view section) + { + assert(m_currentState && "This function should only be called while processing an AST"); + + std::string stars((section.size() < 33) ? (36 - section.size()) / 2 : 3, '*'); + Append("/*", stars, ' ', section, ' ', stars, "*/"); + AppendLine(); + } + + void WgslWriter::AppendLine(std::string_view txt) + { + assert(m_currentState && "This function should only be called while processing an AST"); + + if (txt.empty() && m_currentState->streamEmptyLine > 1) + return; + + m_currentState->stream << txt << '\n'; + m_currentState->streamEmptyLine++; + } + + template + void WgslWriter::AppendIdentifier(const T& map, std::size_t id) + { + const auto& identifier = Nz::Retrieve(map, id); + if (identifier.moduleIndex != m_currentState->currentModuleIndex) + Append(m_currentState->moduleNames[identifier.moduleIndex], '.'); + + if (identifier.externalBlockIndex && identifier.externalBlockIndex != m_currentState->currentExternalBlockIndex) + Append(m_currentState->externalBlockNames[*identifier.externalBlockIndex], '.'); + + Append(identifier.name); + } + + template + void WgslWriter::AppendLine(Args&&... params) + { + (Append(std::forward(params)), ...); + AppendLine(); + } + + template + void WgslWriter::AppendValue(const T& value) + { + if constexpr (std::is_same_v::reference>) + { + // fallback for std::vector + bool v = value; + return AppendValue(v); + } + else + Append(Ast::ConstantToString(value)); + } + + void WgslWriter::AppendModuleAttributes(const Ast::Module::Metadata& metadata) + { + AppendAttributes(true, LangVersionAttribute{ metadata.shaderLangVersion }); + for (Ast::ModuleFeature feature : metadata.enabledFeatures) + AppendAttributes(true, FeatureAttribute{ feature }); + + AppendAttributes(true, AuthorAttribute{ metadata.author }, DescriptionAttribute{ metadata.description }); + AppendAttributes(true, LicenseAttribute{ metadata.license }); + } + + void WgslWriter::AppendStatementList(std::vector& statements) + { + bool first = true; + for (const Ast::StatementPtr& statement : statements) + { + if (statement->GetType() == Ast::NodeType::NoOpStatement) + continue; + + if (!first) + AppendLine(); + + statement->Visit(*this); + + first = false; + } + } + + void WgslWriter::EnterScope() + { + assert(m_currentState && "This function should only be called while processing an AST"); + + AppendLine("{"); + m_currentState->indentLevel++; + } + + void WgslWriter::LeaveScope(bool skipLine) + { + assert(m_currentState && "This function should only be called while processing an AST"); + + m_currentState->indentLevel--; + AppendLine(); + + if (skipLine) + AppendLine("}"); + else + Append("}"); + } + + void WgslWriter::RegisterAlias(std::size_t aliasIndex, std::string aliasName) + { + State::Identifier identifier; + identifier.moduleIndex = m_currentState->currentModuleIndex; + identifier.name = std::move(aliasName); + + assert(m_currentState->aliases.find(aliasIndex) == m_currentState->aliases.end()); + m_currentState->aliases.emplace(aliasIndex, std::move(identifier)); + } + + void WgslWriter::RegisterConstant(std::size_t constantIndex, std::string constantName) + { + State::Identifier identifier; + identifier.moduleIndex = m_currentState->currentModuleIndex; + identifier.name = std::move(constantName); + + assert(m_currentState->constants.find(constantIndex) == m_currentState->constants.end()); + m_currentState->constants.emplace(constantIndex, std::move(identifier)); + } + + void WgslWriter::RegisterFunction(std::size_t funcIndex, std::string functionName) + { + State::Identifier identifier; + identifier.moduleIndex = m_currentState->currentModuleIndex; + identifier.name = std::move(functionName); + + assert(m_currentState->functions.find(funcIndex) == m_currentState->functions.end()); + m_currentState->functions.emplace(funcIndex, std::move(identifier)); + } + + void WgslWriter::RegisterModule(std::size_t moduleIndex, std::string moduleName) + { + State::Identifier identifier; + identifier.moduleIndex = m_currentState->currentModuleIndex; + identifier.name = std::move(moduleName); + + assert(m_currentState->modules.find(moduleIndex) == m_currentState->modules.end()); + m_currentState->modules.emplace(moduleIndex, std::move(identifier)); + } + + void WgslWriter::RegisterStruct(std::size_t structIndex, std::string structName) + { + State::Identifier identifier; + identifier.moduleIndex = m_currentState->currentModuleIndex; + identifier.name = std::move(structName); + + assert(m_currentState->structs.find(structIndex) == m_currentState->structs.end()); + m_currentState->structs.emplace(structIndex, std::move(identifier)); + } + + void WgslWriter::RegisterVariable(std::size_t varIndex, std::string varName) + { + State::Identifier identifier; + identifier.externalBlockIndex = m_currentState->currentExternalBlockIndex; + identifier.moduleIndex = m_currentState->currentModuleIndex; + identifier.name = std::move(varName); + + assert(m_currentState->variables.find(varIndex) == m_currentState->variables.end()); + m_currentState->variables.emplace(varIndex, std::move(identifier)); + } + + void WgslWriter::ScopeVisit(Ast::Statement& node) + { + if (node.GetType() != Ast::NodeType::ScopedStatement) + { + EnterScope(); + node.Visit(*this); + LeaveScope(true); + } + else + node.Visit(*this); + } + + void WgslWriter::Visit(Ast::ExpressionPtr& expr, bool encloseIfRequired) + { + bool enclose = encloseIfRequired && (GetExpressionCategory(*expr) != Ast::ExpressionCategory::LValue); + + if (enclose) + Append("("); + + expr->Visit(*this); + + if (enclose) + Append(")"); + } + + void WgslWriter::Visit(Ast::AccessIdentifierExpression& node) + { + Visit(node.expr, true); + + for (const auto& identifierEntry : node.identifiers) + Append(".", identifierEntry.identifier); + } + + void WgslWriter::Visit(Ast::AccessIndexExpression& node) + { + Visit(node.expr, true); + + // Array access + Append("["); + + bool first = true; + for (Ast::ExpressionPtr& expr : node.indices) + { + if (!first) + Append(", "); + + expr->Visit(*this); + first = false; + } + + Append("]"); + } + + void WgslWriter::Visit(Ast::AliasValueExpression& node) + { + AppendIdentifier(m_currentState->aliases, node.aliasId); + } + + void WgslWriter::Visit(Ast::AssignExpression& node) + { + node.left->Visit(*this); + + switch (node.op) + { + case Ast::AssignType::Simple: Append(" = "); break; + case Ast::AssignType::CompoundAdd: Append(" += "); break; + case Ast::AssignType::CompoundDivide: Append(" /= "); break; + case Ast::AssignType::CompoundModulo: Append(" %= "); break; + case Ast::AssignType::CompoundMultiply: Append(" *= "); break; + case Ast::AssignType::CompoundLogicalAnd: Append(" &&= "); break; + case Ast::AssignType::CompoundLogicalOr: Append(" ||= "); break; + case Ast::AssignType::CompoundSubtract: Append(" -= "); break; + } + + node.right->Visit(*this); + } + + void WgslWriter::Visit(Ast::BinaryExpression& node) + { + Visit(node.left, true); + + switch (node.op) + { + case Ast::BinaryType::Add: Append(" + "); break; + case Ast::BinaryType::Subtract: Append(" - "); break; + case Ast::BinaryType::Modulo: Append(" % "); break; + case Ast::BinaryType::Multiply: Append(" * "); break; + case Ast::BinaryType::Divide: Append(" / "); break; + + case Ast::BinaryType::CompEq: Append(" == "); break; + case Ast::BinaryType::CompGe: Append(" >= "); break; + case Ast::BinaryType::CompGt: Append(" > "); break; + case Ast::BinaryType::CompLe: Append(" <= "); break; + case Ast::BinaryType::CompLt: Append(" < "); break; + case Ast::BinaryType::CompNe: Append(" != "); break; + + case Ast::BinaryType::LogicalAnd: Append(" && "); break; + case Ast::BinaryType::LogicalOr: Append(" || "); break; + + case Ast::BinaryType::BitwiseAnd: Append(" & "); break; + case Ast::BinaryType::BitwiseOr: Append(" | "); break; + case Ast::BinaryType::BitwiseXor: Append(" ^ "); break; + case Ast::BinaryType::ShiftLeft: Append(" << "); break; + case Ast::BinaryType::ShiftRight: Append(" >> "); break; + } + + Visit(node.right, true); + } + + void WgslWriter::Visit(Ast::CallFunctionExpression& node) + { + node.targetFunction->Visit(*this); + + Append("("); + for (std::size_t i = 0; i < node.parameters.size(); ++i) + { + if (i != 0) + Append(", "); + + if (node.parameters[i].semantic == Ast::FunctionParameterSemantic::InOut) + { + Append("inout "); + } + else if (node.parameters[i].semantic == Ast::FunctionParameterSemantic::Out) + { + Append("out "); + } + + node.parameters[i].expr->Visit(*this); + } + Append(")"); + } + + void WgslWriter::Visit(Ast::CastExpression& node) + { + Append(node.targetType); + Append("("); + + bool first = true; + for (const auto& exprPtr : node.expressions) + { + if (!first) + Append(", "); + + first = false; + + exprPtr->Visit(*this); + } + + Append(")"); + } + + void WgslWriter::Visit(Ast::ConditionalExpression& node) + { + Append("const_select("); + node.condition->Visit(*this); + Append(", "); + node.truePath->Visit(*this); + Append(", "); + node.falsePath->Visit(*this); + Append(")"); + } + + void WgslWriter::Visit(Ast::ConstantArrayValueExpression& node) + { + Append(*node.cachedExpressionType); + m_currentState->indentLevel++; + AppendLine("("); + std::visit([&](auto&& vec) + { + using T = std::decay_t; + + if constexpr (std::is_same_v) + throw std::runtime_error("unexpected array of NoValue"); + else + { + for (std::size_t i = 0; i < vec.size(); ++i) + { + if (i != 0) + AppendLine(","); + + AppendValue(vec[i]); + } + } + }, node.values); + m_currentState->indentLevel--; + AppendLine(); + Append(")"); + } + + void WgslWriter::Visit(Ast::ConstantValueExpression& node) + { + std::visit([&](auto&& arg) + { + AppendValue(arg); + }, node.value); + } + + + void WgslWriter::Visit(Ast::ConstantExpression& node) + { + AppendIdentifier(m_currentState->constants, node.constantId); + } + + void WgslWriter::Visit(Ast::FunctionExpression& node) + { + AppendIdentifier(m_currentState->functions, node.funcId); + } + + void WgslWriter::Visit(Ast::IdentifierExpression& node) + { + Append(node.identifier); + } + + void WgslWriter::Visit(Ast::IntrinsicExpression& node) + { + bool method = false; + switch (node.intrinsic) + { + // Function intrinsics + case Ast::IntrinsicType::Abs: + case Ast::IntrinsicType::ArcCos: + case Ast::IntrinsicType::ArcCosh: + case Ast::IntrinsicType::ArcSin: + case Ast::IntrinsicType::ArcSinh: + case Ast::IntrinsicType::ArcTan: + case Ast::IntrinsicType::ArcTan2: + case Ast::IntrinsicType::ArcTanh: + case Ast::IntrinsicType::Ceil: + case Ast::IntrinsicType::Clamp: + case Ast::IntrinsicType::Cos: + case Ast::IntrinsicType::Cosh: + case Ast::IntrinsicType::CrossProduct: + case Ast::IntrinsicType::DegToRad: + case Ast::IntrinsicType::Distance: + case Ast::IntrinsicType::DotProduct: + case Ast::IntrinsicType::Exp: + case Ast::IntrinsicType::Exp2: + case Ast::IntrinsicType::Floor: + case Ast::IntrinsicType::Fract: + case Ast::IntrinsicType::InverseSqrt: + case Ast::IntrinsicType::Length: + case Ast::IntrinsicType::Lerp: + case Ast::IntrinsicType::Log: + case Ast::IntrinsicType::Log2: + case Ast::IntrinsicType::MatrixInverse: + case Ast::IntrinsicType::MatrixTranspose: + case Ast::IntrinsicType::Max: + case Ast::IntrinsicType::Min: + case Ast::IntrinsicType::Normalize: + case Ast::IntrinsicType::Pow: + case Ast::IntrinsicType::RadToDeg: + case Ast::IntrinsicType::Reflect: + case Ast::IntrinsicType::Round: + case Ast::IntrinsicType::RoundEven: + case Ast::IntrinsicType::Select: + case Ast::IntrinsicType::Sign: + case Ast::IntrinsicType::Sin: + case Ast::IntrinsicType::Sinh: + case Ast::IntrinsicType::Sqrt: + case Ast::IntrinsicType::Tan: + case Ast::IntrinsicType::Tanh: + case Ast::IntrinsicType::Trunc: + { + auto intrinsicIt = LangData::s_intrinsicData.find(node.intrinsic); + assert(intrinsicIt != LangData::s_intrinsicData.end()); + assert(!intrinsicIt->second.functionName.empty()); + + Append(intrinsicIt->second.functionName); + break; + } + + // Method intrinsics + case Ast::IntrinsicType::ArraySize: + assert(!node.parameters.empty()); + Visit(node.parameters.front(), true); + Append(".Size"); + method = true; + break; + + case Ast::IntrinsicType::TextureRead: + assert(!node.parameters.empty()); + Visit(node.parameters.front(), true); + Append(".Read"); + method = true; + break; + + case Ast::IntrinsicType::TextureSampleImplicitLod: + assert(!node.parameters.empty()); + Visit(node.parameters.front(), true); + Append(".Sample"); + method = true; + break; + + case Ast::IntrinsicType::TextureSampleImplicitLodDepthComp: + assert(!node.parameters.empty()); + Visit(node.parameters.front(), true); + Append(".SampleDepthComp"); + method = true; + break; + + case Ast::IntrinsicType::TextureWrite: + assert(!node.parameters.empty()); + Visit(node.parameters.front(), true); + Append(".Write"); + method = true; + break; + } + + Append("("); + bool first = true; + for (std::size_t i = (method) ? 1 : 0; i < node.parameters.size(); ++i) + { + if (!first) + Append(", "); + + first = false; + + node.parameters[i]->Visit(*this); + } + Append(")"); + } + + void WgslWriter::Visit(Ast::ModuleExpression& node) + { + AppendIdentifier(m_currentState->modules, node.moduleId); + } + + void WgslWriter::Visit(Ast::NamedExternalBlockExpression& node) + { + Append(m_currentState->externalBlockNames[node.externalBlockId]); + } + + void WgslWriter::Visit(Ast::StructTypeExpression& node) + { + AppendIdentifier(m_currentState->structs, node.structTypeId); + } + + void WgslWriter::Visit(Ast::SwizzleExpression& node) + { + Visit(node.expression, true); + Append("."); + + const char* componentStr = "xyzw"; + for (std::size_t i = 0; i < node.componentCount; ++i) + Append(componentStr[node.components[i]]); + } + + void WgslWriter::Visit(Ast::VariableValueExpression& node) + { + AppendIdentifier(m_currentState->variables, node.variableId); + } + + void WgslWriter::Visit(Ast::UnaryExpression& node) + { + switch (node.op) + { + case Ast::UnaryType::BitwiseNot: + Append("~"); + break; + + case Ast::UnaryType::LogicalNot: + Append("!"); + break; + case Ast::UnaryType::Minus: + Append("-"); + break; + + case Ast::UnaryType::Plus: + Append("+"); + break; + } + + node.expression->Visit(*this); + } + + void WgslWriter::Visit(Ast::BranchStatement& node) + { + bool first = true; + for (const auto& statement : node.condStatements) + { + if (first) + { + if (node.isConst) + Append("const "); + } + else + Append("else "); + + Append("if ("); + statement.condition->Visit(*this); + AppendLine(")"); + + ScopeVisit(*statement.statement); + + first = false; + } + + if (node.elseStatement) + { + AppendLine("else"); + + ScopeVisit(*node.elseStatement); + } + } + + void WgslWriter::Visit(Ast::BreakStatement& /*node*/) + { + Append("break;"); + } + + void WgslWriter::Visit(Ast::ConditionalStatement& node) + { + Append("[cond("); + node.condition->Visit(*this); + AppendLine(")]"); + node.statement->Visit(*this); + } + + void WgslWriter::Visit(Ast::ContinueStatement& /*node*/) + { + Append("continue;"); + } + + void WgslWriter::Visit(Ast::DeclareAliasStatement& node) + { + if (node.aliasIndex) + RegisterAlias(*node.aliasIndex, node.name); + + Append("alias ", node.name, " = "); + assert(node.expression); + node.expression->Visit(*this); + + // Special case, if that alias points to a module, use it instead to try to keep source code readable + if (node.expression->GetType() == Ast::NodeType::ModuleExpression) + { + auto& moduleExpr = Nz::SafeCast(*node.expression); + m_currentState->moduleNames[moduleExpr.moduleId] = node.name; + } + + AppendLine(";"); + } + + void WgslWriter::Visit(Ast::DeclareConstStatement& node) + { + if (node.constIndex) + RegisterConstant(*node.constIndex, node.name); + + Append("const ", node.name); + if (node.type.HasValue()) + Append(": ", node.type); + + if (node.expression) + { + Append(" = "); + node.expression->Visit(*this); + } + + AppendLine(";"); + } + + void WgslWriter::Visit(Ast::DeclareExternalStatement& node) + { + AppendAttributes(true, SetAttribute{ node.bindingSet }, AutoBindingAttribute{ node.autoBinding }, TagAttribute{ node.tag }); + Append("external"); + + if (!node.name.empty()) + { + Append(" ", node.name); + + m_currentState->currentExternalBlockIndex = m_currentState->externalBlockNames.size(); + m_currentState->externalBlockNames.push_back(node.name); + } + + AppendLine(); + + EnterScope(); + + bool first = true; + for (const auto& externalVar : node.externalVars) + { + if (!first) + AppendLine(","); + + first = false; + + if (externalVar.type.IsResultingValue() && IsPushConstantType(externalVar.type.GetResultingValue())) // push constants don't have set or binding' + AppendAttributes(false, TagAttribute{ externalVar.tag }); + else + AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ externalVar.bindingIndex }, TagAttribute{ externalVar.tag }); + Append(externalVar.name, ": ", externalVar.type); + + if (externalVar.varIndex) + RegisterVariable(*externalVar.varIndex, externalVar.name); + } + + LeaveScope(); + + m_currentState->currentExternalBlockIndex = {}; + } + + void WgslWriter::Visit(Ast::DeclareFunctionStatement& node) + { + assert(m_currentState && "This function should only be called while processing an AST"); + + AppendAttributes(true, + EntryAttribute{ node.entryStage }, + WorkgroupAttribute{ node.workgroupSize }, + EarlyFragmentTestsAttribute{ node.earlyFragmentTests }, + DepthWriteAttribute{ node.depthWrite } + ); + + Append("fn ", node.name, "("); + for (std::size_t i = 0; i < node.parameters.size(); ++i) + { + const auto& parameter = node.parameters[i]; + + if (i != 0) + Append(", "); + + if (parameter.semantic == Ast::FunctionParameterSemantic::InOut) + { + Append("inout "); + } + else if (parameter.semantic == Ast::FunctionParameterSemantic::Out) + { + Append("out "); + } + + Append(parameter.name); + Append(": "); + Append(parameter.type); + + if (parameter.varIndex) + RegisterVariable(*parameter.varIndex, parameter.name); + } + Append(")"); + if (node.returnType.HasValue()) + { + if (!node.returnType.IsResultingValue() || !IsNoType(node.returnType.GetResultingValue())) + Append(" -> ", node.returnType); + } + + AppendLine(); + EnterScope(); + { + AppendStatementList(node.statements); + } + LeaveScope(); + } + + void WgslWriter::Visit(Ast::DeclareOptionStatement& node) + { + if (node.optIndex) + RegisterConstant(*node.optIndex, node.optName); + + Append("option ", node.optName); + if (node.optType.HasValue()) + Append(": ", node.optType); + + if (node.defaultValue) + { + Append(" = "); + node.defaultValue->Visit(*this); + } + + Append(";"); + } + + void WgslWriter::Visit(Ast::DeclareStructStatement& node) + { + if (node.structIndex) + RegisterStruct(*node.structIndex, node.description.name); + + AppendAttributes(true, LayoutAttribute{ node.description.layout }, TagAttribute{ node.description.tag }); + Append("struct "); + AppendLine(node.description.name); + EnterScope(); + { + bool first = true; + for (const auto& member : node.description.members) + { + if (!first) + AppendLine(","); + + first = false; + + AppendAttributes(false, CondAttribute{ member.cond }, LocationAttribute{ member.locationIndex }, InterpAttribute{ member.interp }, BuiltinAttribute{ member.builtin }, TagAttribute{ member.tag }); + Append(member.name, ": ", member.type); + } + } + LeaveScope(); + } + + void WgslWriter::Visit(Ast::DeclareVariableStatement& node) + { + if (node.varIndex) + RegisterVariable(*node.varIndex, node.varName); + + Append("let ", node.varName); + if (node.varType.HasValue()) + Append(": ", node.varType); + + if (node.initialExpression) + { + Append(" = "); + node.initialExpression->Visit(*this); + } + + Append(";"); + } + + void WgslWriter::Visit(Ast::DiscardStatement& /*node*/) + { + Append("discard;"); + } + + void WgslWriter::Visit(Ast::ExpressionStatement& node) + { + node.expression->Visit(*this); + Append(";"); + } + + void WgslWriter::Visit(Ast::ForStatement& node) + { + if (node.varIndex) + RegisterVariable(*node.varIndex, node.varName); + + AppendAttributes(true, UnrollAttribute{ node.unroll }); + Append("for ", node.varName, " in "); + node.fromExpr->Visit(*this); + Append(" -> "); + node.toExpr->Visit(*this); + + if (node.stepExpr) + { + Append(" : "); + node.stepExpr->Visit(*this); + } + + AppendLine(); + + ScopeVisit(*node.statement); + } + + void WgslWriter::Visit(Ast::ForEachStatement& node) + { + if (node.varIndex) + RegisterVariable(*node.varIndex, node.varName); + + AppendAttributes(true, UnrollAttribute{ node.unroll }); + Append("for ", node.varName, " in "); + node.expression->Visit(*this); + AppendLine(); + + ScopeVisit(*node.statement); + } + + void WgslWriter::Visit(Ast::ImportStatement& node) + { + Append("import "); + + if (node.identifiers.empty()) + { + // Whole module import + Append(node.moduleName); + + std::string_view defaultIdentifierName; + std::size_t lastSep = node.moduleName.find_last_of('.'); + if (lastSep != std::string::npos) + defaultIdentifierName = std::string_view(node.moduleName).substr(lastSep + 1); + else + defaultIdentifierName = node.moduleName; + + if (node.moduleIdentifier != node.moduleName) + Append(" as ", node.moduleIdentifier); + + AppendLine(";"); + } + else + { + // Module identifier import + bool first = true; + for (const auto& entry : node.identifiers) + { + if (!first) + Append(", "); + + first = false; + + if (!entry.identifier.empty()) + { + Append(entry.identifier); + if (!entry.renamedIdentifier.empty()) + Append(" as ", entry.renamedIdentifier); + } + else + Append("*"); + } + AppendLine(" from ", node.moduleName, ";"); + } + } + + void WgslWriter::Visit(Ast::MultiStatement& node) + { + AppendStatementList(node.statements); + } + + void WgslWriter::Visit(Ast::NoOpStatement& /*node*/) + { + /* nothing to do */ + } + + void WgslWriter::Visit(Ast::ReturnStatement& node) + { + if (node.returnExpr) + { + Append("return "); + node.returnExpr->Visit(*this); + Append(";"); + } + else + Append("return;"); + } + + void WgslWriter::Visit(Ast::ScopedStatement& node) + { + EnterScope(); + node.statement->Visit(*this); + LeaveScope(); + } + + void WgslWriter::Visit(Ast::WhileStatement& node) + { + Append("while ("); + node.condition->Visit(*this); + AppendLine(")"); + + ScopeVisit(*node.body); + } + + void WgslWriter::AppendHeader() + { + AppendModuleAttributes(*m_currentState->module->metadata); + if (!m_currentState->module->metadata->moduleName.empty() && m_currentState->module->metadata->moduleName[0] != '_') + AppendLine("module ", m_currentState->module->metadata->moduleName, ";"); + else + AppendLine("module;"); + AppendLine(); + } +} From bc546c46a1e8ddcdce26cbe0e1f3e895938ec86b Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 14 Apr 2025 16:10:50 +0200 Subject: [PATCH 02/37] removing garbage file --- .../index/Archive.cpp.5CC47325CF0C08AB.idx | Bin 5954 -> 0 bytes .../index/Archive.hpp.F8E233A27B18B6AF.idx | Bin 3452 -> 0 bytes .../index/Archive.inl.6367083BB3B5A2B7.idx | Bin 340 -> 0 bytes .../index/Archiver.cpp.408A70FC963F8738.idx | Bin 7852 -> 0 bytes .../index/Archiver.hpp.FA5E94CE3BA8D9AF.idx | Bin 2250 -> 0 bytes .../index/Archiver.inl.A38A8F6F4396450A.idx | Bin 180 -> 0 bytes .../AstSerializer.cpp.0DFC061FAE11AEC9.idx | Bin 37964 -> 0 bytes .../AstSerializer.hpp.9AB9DB4353D98136.idx | Bin 15830 -> 0 bytes .../AstSerializer.inl.FD8333351D5F3306.idx | Bin 4550 -> 0 bytes .../index/Cloner.cpp.DD6719B4181B4210.idx | Bin 25004 -> 0 bytes .../index/Cloner.hpp.7A53E17449C7C1F4.idx | Bin 9078 -> 0 bytes .../index/Cloner.inl.246C453E8B117AE6.idx | Bin 2594 -> 0 bytes .../index/Compare.hpp.F0DEFD4D9EF65904.idx | Bin 9760 -> 0 bytes .../index/Compare.inl.3E7E9C1B6953A89D.idx | Bin 29110 -> 0 bytes .../index/Compiler.cpp.0DDC7674EE65C12B.idx | Bin 22792 -> 0 bytes .../index/Compiler.hpp.D7B17CB22CAB9348.idx | Bin 4624 -> 0 bytes .../index/Compiler.inl.3CFD39B18F8A33F4.idx | Bin 178 -> 0 bytes .../clangd/index/Config.h.A2B329D5283B56BD.idx | Bin 466 -> 0 bytes .../index/Config.hpp.B92F75B7385347CF.idx | Bin 398 -> 0 bytes ...PropagationVisitor.cpp.B15E68958969C6F2.idx | Bin 46458 -> 0 bytes ...PropagationVisitor.hpp.A8A9416E29B616EB.idx | Bin 4860 -> 0 bytes ...PropagationVisitor.inl.CF03B7DE262BDE99.idx | Bin 1928 -> 0 bytes ..._BinaryArithmetics.cpp.88AEE26FCFB2C9C6.idx | Bin 13940 -> 0 bytes ...r_BinaryComparison.cpp.3A06BF4C9B9E5160.idx | Bin 7546 -> 0 bytes .../ConstantValue.cpp.3282F9BCE766111D.idx | Bin 9774 -> 0 bytes .../ConstantValue.hpp.39DD4E19347AB46D.idx | Bin 3340 -> 0 bytes .../ConstantValue.inl.28732739665ED713.idx | Bin 2114 -> 0 bytes .../index/DebugLevel.h.EEF1238084A8C169.idx | Bin 588 -> 0 bytes ...encyCheckerVisitor.cpp.89010A4027EB9A6A.idx | Bin 8150 -> 0 bytes ...encyCheckerVisitor.hpp.22BBF2B5697F255E.idx | Bin 5378 -> 0 bytes ...encyCheckerVisitor.inl.F6EF1FB956298A21.idx | Bin 1042 -> 0 bytes ...eUnusedPassVisitor.cpp.F41EC631E4D8C65D.idx | Bin 4626 -> 0 bytes ...eUnusedPassVisitor.hpp.91540B274712C8C3.idx | Bin 4314 -> 0 bytes ...eUnusedPassVisitor.inl.261505C45B8750CF.idx | Bin 1616 -> 0 bytes .../index/Enums.hpp.563FEBCD9499CC4B.idx | Bin 15628 -> 0 bytes .../index/Enums.hpp.FB30416E54DE92D2.idx | Bin 7070 -> 0 bytes .../index/ErrorList.hpp.D860B6CD397F7DEA.idx | Bin 75516 -> 0 bytes .../index/Errors.cpp.53872D8B941817E7.idx | Bin 11556 -> 0 bytes .../index/Errors.hpp.5291946494B6A65D.idx | Bin 19662 -> 0 bytes .../index/Errors.inl.05CC2FB573E4D8E0.idx | Bin 1586 -> 0 bytes .../ExportVisitor.cpp.5FF2E0C23B31D487.idx | Bin 1702 -> 0 bytes .../ExportVisitor.hpp.33D190D7A875F587.idx | Bin 2748 -> 0 bytes .../ExportVisitor.inl.3940CC349081D1D2.idx | Bin 174 -> 0 bytes .../ExpressionType.cpp.01AEA155CEABD227.idx | Bin 21606 -> 0 bytes .../ExpressionType.hpp.5B1B722F2FDC0A6C.idx | Bin 21966 -> 0 bytes .../ExpressionType.inl.EB82FA5221E24A15.idx | Bin 12632 -> 0 bytes .../ExpressionValue.hpp.2AE6A8183CF57628.idx | Bin 1714 -> 0 bytes .../ExpressionValue.inl.2EA48C02B505E8B8.idx | Bin 3744 -> 0 bytes .../ExpressionVisitor.cpp.3077F256229413CD.idx | Bin 816 -> 0 bytes .../ExpressionVisitor.hpp.90F6309974E912C9.idx | Bin 1998 -> 0 bytes ...ssionVisitorExcept.cpp.2E0BE9827C216D6D.idx | Bin 1462 -> 0 bytes ...ssionVisitorExcept.hpp.00E68E287FF1A860.idx | Bin 1876 -> 0 bytes .../FieldOffsets.hpp.291159D8401AE223.idx | Bin 2312 -> 0 bytes .../FieldOffsets.inl.BD4AECEB917E1B85.idx | Bin 5768 -> 0 bytes ...stemModuleResolver.cpp.368D1B6BA5471AAB.idx | Bin 2754 -> 0 bytes ...stemModuleResolver.cpp.AF9ECF7077CFE767.idx | Bin 7828 -> 0 bytes ...systemModuleResolver.h.D815F057EFBA2404.idx | Bin 1254 -> 0 bytes ...stemModuleResolver.hpp.1253354BC2EFE659.idx | Bin 2648 -> 0 bytes ...stemModuleResolver.hpp.3592EC8F444D6908.idx | Bin 538 -> 0 bytes ...stemModuleResolver.inl.FE9654978E01FD02.idx | Bin 180 -> 0 bytes .../index/GlslOutput.hpp.F4B2DA50D5F7A96A.idx | Bin 358 -> 0 bytes .../index/GlslWriter.cpp.0C022627AA6639D2.idx | Bin 5130 -> 0 bytes .../index/GlslWriter.cpp.EA19CDFEEB3C33B1.idx | Bin 81954 -> 0 bytes .../index/GlslWriter.h.F52557D537D619A1.idx | Bin 3382 -> 0 bytes .../index/GlslWriter.hpp.7EDF9E885DC2F3AE.idx | Bin 11196 -> 0 bytes .../index/GlslWriter.hpp.AA1AA90F1F5BC592.idx | Bin 510 -> 0 bytes .../index/GlslWriter.inl.E50041BDF108763C.idx | Bin 540 -> 0 bytes ...slWriterParameters.hpp.884FFF92C43C2573.idx | Bin 402 -> 0 bytes ...dexRemapperVisitor.cpp.3FDA3F0181419558.idx | Bin 15904 -> 0 bytes ...dexRemapperVisitor.hpp.5A1F3D267CF83316.idx | Bin 4748 -> 0 bytes ...dexRemapperVisitor.inl.33CDFAE2C8487BB2.idx | Bin 522 -> 0 bytes .../index/LangData.hpp.AC8ACDF1204F2BD1.idx | Bin 21138 -> 0 bytes .../index/LangOutput.hpp.0EC4C5E10F5E3E53.idx | Bin 378 -> 0 bytes .../index/LangWriter.cpp.2A5F975395A1A129.idx | Bin 2242 -> 0 bytes .../index/LangWriter.cpp.D4B16EFE3DB381CE.idx | Bin 49516 -> 0 bytes .../index/LangWriter.h.C3CB06844E607448.idx | Bin 1362 -> 0 bytes .../index/LangWriter.hpp.581750B186F7B47C.idx | Bin 11960 -> 0 bytes .../index/LangWriter.hpp.5CAA92D4F544B759.idx | Bin 508 -> 0 bytes .../index/LangWriter.inl.EF43BAFD9DD11C89.idx | Bin 302 -> 0 bytes .../index/Lexer.cpp.D91296467F304958.idx | Bin 10156 -> 0 bytes .../index/Lexer.hpp.DAF366F8B15496D8.idx | Bin 1478 -> 0 bytes .../index/Lexer.inl.D7047EEE0A359694.idx | Bin 162 -> 0 bytes .../index/Module.cpp.E3358329D8511CD9.idx | Bin 1208 -> 0 bytes .../clangd/index/Module.h.D1A2ED2858B94A88.idx | Bin 768 -> 0 bytes .../index/Module.hpp.411E2D524ABAAD60.idx | Bin 2438 -> 0 bytes .../index/Module.hpp.564F7E14559C4586.idx | Bin 486 -> 0 bytes .../index/Module.inl.C69C9779A67C2D0A.idx | Bin 1220 -> 0 bytes .../ModuleResolver.cpp.EA91DAACA2896EF6.idx | Bin 808 -> 0 bytes .../ModuleResolver.hpp.9290CB3A27FCDCAC.idx | Bin 1380 -> 0 bytes .../ModuleResolver.inl.DAA39B156E800304.idx | Bin 172 -> 0 bytes .../index/NodeList.hpp.AD6E957801D54B72.idx | Bin 10368 -> 0 bytes .../index/Nodes.cpp.1C5DD9F7FE6C5283.idx | Bin 4818 -> 0 bytes .../index/Nodes.hpp.204926A98A922049.idx | Bin 28364 -> 0 bytes .../index/Nodes.inl.BC11D985D6F3104F.idx | Bin 1002 -> 0 bytes .../index/Option.hpp.4BBA65DC50E43052.idx | Bin 688 -> 0 bytes .../index/Option.inl.CFF0523FAF2DCDA2.idx | Bin 656 -> 0 bytes .../index/Parser.cpp.0F0BDD9A80646B86.idx | Bin 1918 -> 0 bytes .../index/Parser.cpp.20700236829D64A3.idx | Bin 59152 -> 0 bytes .../clangd/index/Parser.h.C94B85EFC98D9087.idx | Bin 974 -> 0 bytes .../index/Parser.hpp.1AB61F136D8C4EC0.idx | Bin 7696 -> 0 bytes .../index/Parser.inl.2063DF4F08AB2BC9.idx | Bin 776 -> 0 bytes .../RecursiveVisitor.cpp.C40406451A44869E.idx | Bin 7604 -> 0 bytes .../RecursiveVisitor.hpp.D2AB053DA85E56B6.idx | Bin 5154 -> 0 bytes .../RecursiveVisitor.inl.756E0CA4A20970A1.idx | Bin 176 -> 0 bytes .../ReflectVisitor.cpp.2B838843DEF9EE5B.idx | Bin 5572 -> 0 bytes .../ReflectVisitor.hpp.816E9B5AA88700E6.idx | Bin 3612 -> 0 bytes .../ReflectVisitor.inl.4BE1EC0AD13B3912.idx | Bin 176 -> 0 bytes .../SanitizeVisitor.cpp.5F08E384DE28382B.idx | Bin 189522 -> 0 bytes .../SanitizeVisitor.hpp.BB6D3EFD2E10ED14.idx | Bin 16996 -> 0 bytes .../SanitizeVisitor.inl.31394EF9FA011B85.idx | Bin 888 -> 0 bytes .../index/Serializer.cpp.34E642360DEA6063.idx | Bin 7370 -> 0 bytes .../index/Serializer.cpp.5664F71FD8E0AFB1.idx | Bin 2670 -> 0 bytes .../index/Serializer.h.528D2AD4F4C3C135.idx | Bin 1554 -> 0 bytes .../index/Serializer.hpp.3D421AA4DD3434C4.idx | Bin 7216 -> 0 bytes .../index/Serializer.hpp.98DCD717F755FED6.idx | Bin 844 -> 0 bytes .../index/Serializer.inl.9FD220F8465E83D0.idx | Bin 704 -> 0 bytes .../ShaderBuilder.hpp.F15E929B249EABBD.idx | Bin 14300 -> 0 bytes .../ShaderBuilder.inl.0DB1878757CF231C.idx | Bin 20954 -> 0 bytes .../ShaderStageType.h.B028CE6C7CE6F853.idx | Bin 534 -> 0 bytes .../ShaderWriter.cpp.4CAAD00F9D40ACCB.idx | Bin 826 -> 0 bytes .../ShaderWriter.hpp.B1D3980A9644C95A.idx | Bin 1304 -> 0 bytes .../SourceLocation.hpp.9C538E2C155C6D1F.idx | Bin 1520 -> 0 bytes .../SourceLocation.inl.41355A2DF1DAD462.idx | Bin 2688 -> 0 bytes .../SpirvAstVisitor.cpp.55169384415821CA.idx | Bin 38368 -> 0 bytes .../SpirvAstVisitor.hpp.E4993EB2688BB46D.idx | Bin 10416 -> 0 bytes .../SpirvAstVisitor.inl.C62F864FD6F2E4BF.idx | Bin 968 -> 0 bytes .../index/SpirvBlock.hpp.F783122CCD3052BA.idx | Bin 1664 -> 0 bytes .../index/SpirvBlock.inl.E0470A64B4207A2A.idx | Bin 1724 -> 0 bytes ...SpirvConstantCache.cpp.880A65F97A09E3F2.idx | Bin 49008 -> 0 bytes ...SpirvConstantCache.hpp.6FB8F6B4E99CE834.idx | Bin 13398 -> 0 bytes ...SpirvConstantCache.inl.AE90C3FD8FADBB9C.idx | Bin 1638 -> 0 bytes .../index/SpirvData.cpp.78213380C8ADB0B9.idx | Bin 209014 -> 0 bytes .../index/SpirvData.hpp.1456A956D1AA9CFA.idx | Bin 161852 -> 0 bytes .../SpirvDecoder.cpp.4B45AFE335798C8F.idx | Bin 1956 -> 0 bytes .../SpirvDecoder.hpp.D4F9509EBA646B98.idx | Bin 1894 -> 0 bytes .../SpirvDecoder.inl.A3F9A1A37F2DA249.idx | Bin 388 -> 0 bytes ...pirvExpressionLoad.cpp.5338F642B09E36D9.idx | Bin 5482 -> 0 bytes ...pirvExpressionLoad.hpp.AE3C6B8402B69E0D.idx | Bin 3672 -> 0 bytes ...pirvExpressionLoad.inl.3B94CF604BFE395A.idx | Bin 430 -> 0 bytes ...irvExpressionStore.cpp.97AE7ABCD5AE4BD4.idx | Bin 5014 -> 0 bytes ...irvExpressionStore.hpp.0F2EE8CBFA895008.idx | Bin 2982 -> 0 bytes ...irvExpressionStore.inl.738980EFB64FAC59.idx | Bin 432 -> 0 bytes .../SpirvGenData.hpp.CCFC3D839C70A4D9.idx | Bin 8998 -> 0 bytes .../index/SpirvOutput.hpp.B3254A75A9F8E0D9.idx | Bin 402 -> 0 bytes .../SpirvPrinter.cpp.45873E9ED9C78885.idx | Bin 13768 -> 0 bytes .../SpirvPrinter.hpp.60E14A2C43310425.idx | Bin 2136 -> 0 bytes .../SpirvPrinter.inl.850288AF12FBC0CA.idx | Bin 788 -> 0 bytes .../SpirvSection.hpp.27E77EC86B689532.idx | Bin 1416 -> 0 bytes .../SpirvSection.inl.D1C878B5174E2796.idx | Bin 172 -> 0 bytes .../SpirvSectionBase.cpp.3C270AFB7368C673.idx | Bin 1066 -> 0 bytes .../SpirvSectionBase.hpp.611E247491AFDA0E.idx | Bin 3084 -> 0 bytes .../SpirvSectionBase.inl.F9384090290A4B35.idx | Bin 3732 -> 0 bytes .../SpirvVariable.hpp.8F16AEF8924A5974.idx | Bin 648 -> 0 bytes .../index/SpirvWriter.cpp.5E8F581994752358.idx | Bin 36704 -> 0 bytes .../index/SpirvWriter.cpp.E8EBE094AD40B410.idx | Bin 2584 -> 0 bytes .../index/SpirvWriter.h.DC91983551E9455A.idx | Bin 1768 -> 0 bytes .../index/SpirvWriter.hpp.A5736D944F09C5D6.idx | Bin 4250 -> 0 bytes .../index/SpirvWriter.hpp.CC720F81FB21E462.idx | Bin 508 -> 0 bytes .../index/SpirvWriter.inl.50EA1795D7EA1EA3.idx | Bin 168 -> 0 bytes .../StatementVisitor.cpp.24A7EDAE9CA5503B.idx | Bin 814 -> 0 bytes .../StatementVisitor.hpp.1C6A06909DF5FBD2.idx | Bin 1900 -> 0 bytes ...ementVisitorExcept.cpp.C019D206FA85118C.idx | Bin 1400 -> 0 bytes ...ementVisitorExcept.hpp.15CAE34A9761EE53.idx | Bin 1830 -> 0 bytes .../index/TokenList.hpp.3E1793B302B953D1.idx | Bin 5406 -> 0 bytes .../index/Types.hpp.CF309E480C254E5C.idx | Bin 1222 -> 0 bytes .../index/Utils.cpp.60D1E0CC138B8929.idx | Bin 4762 -> 0 bytes .../index/Utils.hpp.0ABAD7026BEC17EA.idx | Bin 3488 -> 0 bytes .../index/Utils.inl.77869E1BD643905B.idx | Bin 416 -> 0 bytes .../index/Vector.hpp.AB1C1967D698D3FF.idx | Bin 6420 -> 0 bytes .../index/Vector.inl.F0571DA066B41DAE.idx | Bin 8208 -> 0 bytes .../WriterStates.cpp.E66D395EB560B690.idx | Bin 5172 -> 0 bytes .../index/WriterStates.h.3EB1FA8425607F4F.idx | Bin 3334 -> 0 bytes .../WriterStates.hpp.B3E751CD161DD2EC.idx | Bin 354 -> 0 bytes .../clangd/index/main.cpp.41A508184138A40E.idx | Bin 1630 -> 0 bytes .../clangd/index/main.cpp.C4CF7810A05D703D.idx | Bin 1690 -> 0 bytes .../clangd/index/main.cpp.C52301DA43FEA1F7.idx | Bin 3722 -> 0 bytes .gitignore | 3 +++ 177 files changed, 3 insertions(+) delete mode 100644 .cache/clangd/index/Archive.cpp.5CC47325CF0C08AB.idx delete mode 100644 .cache/clangd/index/Archive.hpp.F8E233A27B18B6AF.idx delete mode 100644 .cache/clangd/index/Archive.inl.6367083BB3B5A2B7.idx delete mode 100644 .cache/clangd/index/Archiver.cpp.408A70FC963F8738.idx delete mode 100644 .cache/clangd/index/Archiver.hpp.FA5E94CE3BA8D9AF.idx delete mode 100644 .cache/clangd/index/Archiver.inl.A38A8F6F4396450A.idx delete mode 100644 .cache/clangd/index/AstSerializer.cpp.0DFC061FAE11AEC9.idx delete mode 100644 .cache/clangd/index/AstSerializer.hpp.9AB9DB4353D98136.idx delete mode 100644 .cache/clangd/index/AstSerializer.inl.FD8333351D5F3306.idx delete mode 100644 .cache/clangd/index/Cloner.cpp.DD6719B4181B4210.idx delete mode 100644 .cache/clangd/index/Cloner.hpp.7A53E17449C7C1F4.idx delete mode 100644 .cache/clangd/index/Cloner.inl.246C453E8B117AE6.idx delete mode 100644 .cache/clangd/index/Compare.hpp.F0DEFD4D9EF65904.idx delete mode 100644 .cache/clangd/index/Compare.inl.3E7E9C1B6953A89D.idx delete mode 100644 .cache/clangd/index/Compiler.cpp.0DDC7674EE65C12B.idx delete mode 100644 .cache/clangd/index/Compiler.hpp.D7B17CB22CAB9348.idx delete mode 100644 .cache/clangd/index/Compiler.inl.3CFD39B18F8A33F4.idx delete mode 100644 .cache/clangd/index/Config.h.A2B329D5283B56BD.idx delete mode 100644 .cache/clangd/index/Config.hpp.B92F75B7385347CF.idx delete mode 100644 .cache/clangd/index/ConstantPropagationVisitor.cpp.B15E68958969C6F2.idx delete mode 100644 .cache/clangd/index/ConstantPropagationVisitor.hpp.A8A9416E29B616EB.idx delete mode 100644 .cache/clangd/index/ConstantPropagationVisitor.inl.CF03B7DE262BDE99.idx delete mode 100644 .cache/clangd/index/ConstantPropagationVisitor_BinaryArithmetics.cpp.88AEE26FCFB2C9C6.idx delete mode 100644 .cache/clangd/index/ConstantPropagationVisitor_BinaryComparison.cpp.3A06BF4C9B9E5160.idx delete mode 100644 .cache/clangd/index/ConstantValue.cpp.3282F9BCE766111D.idx delete mode 100644 .cache/clangd/index/ConstantValue.hpp.39DD4E19347AB46D.idx delete mode 100644 .cache/clangd/index/ConstantValue.inl.28732739665ED713.idx delete mode 100644 .cache/clangd/index/DebugLevel.h.EEF1238084A8C169.idx delete mode 100644 .cache/clangd/index/DependencyCheckerVisitor.cpp.89010A4027EB9A6A.idx delete mode 100644 .cache/clangd/index/DependencyCheckerVisitor.hpp.22BBF2B5697F255E.idx delete mode 100644 .cache/clangd/index/DependencyCheckerVisitor.inl.F6EF1FB956298A21.idx delete mode 100644 .cache/clangd/index/EliminateUnusedPassVisitor.cpp.F41EC631E4D8C65D.idx delete mode 100644 .cache/clangd/index/EliminateUnusedPassVisitor.hpp.91540B274712C8C3.idx delete mode 100644 .cache/clangd/index/EliminateUnusedPassVisitor.inl.261505C45B8750CF.idx delete mode 100644 .cache/clangd/index/Enums.hpp.563FEBCD9499CC4B.idx delete mode 100644 .cache/clangd/index/Enums.hpp.FB30416E54DE92D2.idx delete mode 100644 .cache/clangd/index/ErrorList.hpp.D860B6CD397F7DEA.idx delete mode 100644 .cache/clangd/index/Errors.cpp.53872D8B941817E7.idx delete mode 100644 .cache/clangd/index/Errors.hpp.5291946494B6A65D.idx delete mode 100644 .cache/clangd/index/Errors.inl.05CC2FB573E4D8E0.idx delete mode 100644 .cache/clangd/index/ExportVisitor.cpp.5FF2E0C23B31D487.idx delete mode 100644 .cache/clangd/index/ExportVisitor.hpp.33D190D7A875F587.idx delete mode 100644 .cache/clangd/index/ExportVisitor.inl.3940CC349081D1D2.idx delete mode 100644 .cache/clangd/index/ExpressionType.cpp.01AEA155CEABD227.idx delete mode 100644 .cache/clangd/index/ExpressionType.hpp.5B1B722F2FDC0A6C.idx delete mode 100644 .cache/clangd/index/ExpressionType.inl.EB82FA5221E24A15.idx delete mode 100644 .cache/clangd/index/ExpressionValue.hpp.2AE6A8183CF57628.idx delete mode 100644 .cache/clangd/index/ExpressionValue.inl.2EA48C02B505E8B8.idx delete mode 100644 .cache/clangd/index/ExpressionVisitor.cpp.3077F256229413CD.idx delete mode 100644 .cache/clangd/index/ExpressionVisitor.hpp.90F6309974E912C9.idx delete mode 100644 .cache/clangd/index/ExpressionVisitorExcept.cpp.2E0BE9827C216D6D.idx delete mode 100644 .cache/clangd/index/ExpressionVisitorExcept.hpp.00E68E287FF1A860.idx delete mode 100644 .cache/clangd/index/FieldOffsets.hpp.291159D8401AE223.idx delete mode 100644 .cache/clangd/index/FieldOffsets.inl.BD4AECEB917E1B85.idx delete mode 100644 .cache/clangd/index/FilesystemModuleResolver.cpp.368D1B6BA5471AAB.idx delete mode 100644 .cache/clangd/index/FilesystemModuleResolver.cpp.AF9ECF7077CFE767.idx delete mode 100644 .cache/clangd/index/FilesystemModuleResolver.h.D815F057EFBA2404.idx delete mode 100644 .cache/clangd/index/FilesystemModuleResolver.hpp.1253354BC2EFE659.idx delete mode 100644 .cache/clangd/index/FilesystemModuleResolver.hpp.3592EC8F444D6908.idx delete mode 100644 .cache/clangd/index/FilesystemModuleResolver.inl.FE9654978E01FD02.idx delete mode 100644 .cache/clangd/index/GlslOutput.hpp.F4B2DA50D5F7A96A.idx delete mode 100644 .cache/clangd/index/GlslWriter.cpp.0C022627AA6639D2.idx delete mode 100644 .cache/clangd/index/GlslWriter.cpp.EA19CDFEEB3C33B1.idx delete mode 100644 .cache/clangd/index/GlslWriter.h.F52557D537D619A1.idx delete mode 100644 .cache/clangd/index/GlslWriter.hpp.7EDF9E885DC2F3AE.idx delete mode 100644 .cache/clangd/index/GlslWriter.hpp.AA1AA90F1F5BC592.idx delete mode 100644 .cache/clangd/index/GlslWriter.inl.E50041BDF108763C.idx delete mode 100644 .cache/clangd/index/GlslWriterParameters.hpp.884FFF92C43C2573.idx delete mode 100644 .cache/clangd/index/IndexRemapperVisitor.cpp.3FDA3F0181419558.idx delete mode 100644 .cache/clangd/index/IndexRemapperVisitor.hpp.5A1F3D267CF83316.idx delete mode 100644 .cache/clangd/index/IndexRemapperVisitor.inl.33CDFAE2C8487BB2.idx delete mode 100644 .cache/clangd/index/LangData.hpp.AC8ACDF1204F2BD1.idx delete mode 100644 .cache/clangd/index/LangOutput.hpp.0EC4C5E10F5E3E53.idx delete mode 100644 .cache/clangd/index/LangWriter.cpp.2A5F975395A1A129.idx delete mode 100644 .cache/clangd/index/LangWriter.cpp.D4B16EFE3DB381CE.idx delete mode 100644 .cache/clangd/index/LangWriter.h.C3CB06844E607448.idx delete mode 100644 .cache/clangd/index/LangWriter.hpp.581750B186F7B47C.idx delete mode 100644 .cache/clangd/index/LangWriter.hpp.5CAA92D4F544B759.idx delete mode 100644 .cache/clangd/index/LangWriter.inl.EF43BAFD9DD11C89.idx delete mode 100644 .cache/clangd/index/Lexer.cpp.D91296467F304958.idx delete mode 100644 .cache/clangd/index/Lexer.hpp.DAF366F8B15496D8.idx delete mode 100644 .cache/clangd/index/Lexer.inl.D7047EEE0A359694.idx delete mode 100644 .cache/clangd/index/Module.cpp.E3358329D8511CD9.idx delete mode 100644 .cache/clangd/index/Module.h.D1A2ED2858B94A88.idx delete mode 100644 .cache/clangd/index/Module.hpp.411E2D524ABAAD60.idx delete mode 100644 .cache/clangd/index/Module.hpp.564F7E14559C4586.idx delete mode 100644 .cache/clangd/index/Module.inl.C69C9779A67C2D0A.idx delete mode 100644 .cache/clangd/index/ModuleResolver.cpp.EA91DAACA2896EF6.idx delete mode 100644 .cache/clangd/index/ModuleResolver.hpp.9290CB3A27FCDCAC.idx delete mode 100644 .cache/clangd/index/ModuleResolver.inl.DAA39B156E800304.idx delete mode 100644 .cache/clangd/index/NodeList.hpp.AD6E957801D54B72.idx delete mode 100644 .cache/clangd/index/Nodes.cpp.1C5DD9F7FE6C5283.idx delete mode 100644 .cache/clangd/index/Nodes.hpp.204926A98A922049.idx delete mode 100644 .cache/clangd/index/Nodes.inl.BC11D985D6F3104F.idx delete mode 100644 .cache/clangd/index/Option.hpp.4BBA65DC50E43052.idx delete mode 100644 .cache/clangd/index/Option.inl.CFF0523FAF2DCDA2.idx delete mode 100644 .cache/clangd/index/Parser.cpp.0F0BDD9A80646B86.idx delete mode 100644 .cache/clangd/index/Parser.cpp.20700236829D64A3.idx delete mode 100644 .cache/clangd/index/Parser.h.C94B85EFC98D9087.idx delete mode 100644 .cache/clangd/index/Parser.hpp.1AB61F136D8C4EC0.idx delete mode 100644 .cache/clangd/index/Parser.inl.2063DF4F08AB2BC9.idx delete mode 100644 .cache/clangd/index/RecursiveVisitor.cpp.C40406451A44869E.idx delete mode 100644 .cache/clangd/index/RecursiveVisitor.hpp.D2AB053DA85E56B6.idx delete mode 100644 .cache/clangd/index/RecursiveVisitor.inl.756E0CA4A20970A1.idx delete mode 100644 .cache/clangd/index/ReflectVisitor.cpp.2B838843DEF9EE5B.idx delete mode 100644 .cache/clangd/index/ReflectVisitor.hpp.816E9B5AA88700E6.idx delete mode 100644 .cache/clangd/index/ReflectVisitor.inl.4BE1EC0AD13B3912.idx delete mode 100644 .cache/clangd/index/SanitizeVisitor.cpp.5F08E384DE28382B.idx delete mode 100644 .cache/clangd/index/SanitizeVisitor.hpp.BB6D3EFD2E10ED14.idx delete mode 100644 .cache/clangd/index/SanitizeVisitor.inl.31394EF9FA011B85.idx delete mode 100644 .cache/clangd/index/Serializer.cpp.34E642360DEA6063.idx delete mode 100644 .cache/clangd/index/Serializer.cpp.5664F71FD8E0AFB1.idx delete mode 100644 .cache/clangd/index/Serializer.h.528D2AD4F4C3C135.idx delete mode 100644 .cache/clangd/index/Serializer.hpp.3D421AA4DD3434C4.idx delete mode 100644 .cache/clangd/index/Serializer.hpp.98DCD717F755FED6.idx delete mode 100644 .cache/clangd/index/Serializer.inl.9FD220F8465E83D0.idx delete mode 100644 .cache/clangd/index/ShaderBuilder.hpp.F15E929B249EABBD.idx delete mode 100644 .cache/clangd/index/ShaderBuilder.inl.0DB1878757CF231C.idx delete mode 100644 .cache/clangd/index/ShaderStageType.h.B028CE6C7CE6F853.idx delete mode 100644 .cache/clangd/index/ShaderWriter.cpp.4CAAD00F9D40ACCB.idx delete mode 100644 .cache/clangd/index/ShaderWriter.hpp.B1D3980A9644C95A.idx delete mode 100644 .cache/clangd/index/SourceLocation.hpp.9C538E2C155C6D1F.idx delete mode 100644 .cache/clangd/index/SourceLocation.inl.41355A2DF1DAD462.idx delete mode 100644 .cache/clangd/index/SpirvAstVisitor.cpp.55169384415821CA.idx delete mode 100644 .cache/clangd/index/SpirvAstVisitor.hpp.E4993EB2688BB46D.idx delete mode 100644 .cache/clangd/index/SpirvAstVisitor.inl.C62F864FD6F2E4BF.idx delete mode 100644 .cache/clangd/index/SpirvBlock.hpp.F783122CCD3052BA.idx delete mode 100644 .cache/clangd/index/SpirvBlock.inl.E0470A64B4207A2A.idx delete mode 100644 .cache/clangd/index/SpirvConstantCache.cpp.880A65F97A09E3F2.idx delete mode 100644 .cache/clangd/index/SpirvConstantCache.hpp.6FB8F6B4E99CE834.idx delete mode 100644 .cache/clangd/index/SpirvConstantCache.inl.AE90C3FD8FADBB9C.idx delete mode 100644 .cache/clangd/index/SpirvData.cpp.78213380C8ADB0B9.idx delete mode 100644 .cache/clangd/index/SpirvData.hpp.1456A956D1AA9CFA.idx delete mode 100644 .cache/clangd/index/SpirvDecoder.cpp.4B45AFE335798C8F.idx delete mode 100644 .cache/clangd/index/SpirvDecoder.hpp.D4F9509EBA646B98.idx delete mode 100644 .cache/clangd/index/SpirvDecoder.inl.A3F9A1A37F2DA249.idx delete mode 100644 .cache/clangd/index/SpirvExpressionLoad.cpp.5338F642B09E36D9.idx delete mode 100644 .cache/clangd/index/SpirvExpressionLoad.hpp.AE3C6B8402B69E0D.idx delete mode 100644 .cache/clangd/index/SpirvExpressionLoad.inl.3B94CF604BFE395A.idx delete mode 100644 .cache/clangd/index/SpirvExpressionStore.cpp.97AE7ABCD5AE4BD4.idx delete mode 100644 .cache/clangd/index/SpirvExpressionStore.hpp.0F2EE8CBFA895008.idx delete mode 100644 .cache/clangd/index/SpirvExpressionStore.inl.738980EFB64FAC59.idx delete mode 100644 .cache/clangd/index/SpirvGenData.hpp.CCFC3D839C70A4D9.idx delete mode 100644 .cache/clangd/index/SpirvOutput.hpp.B3254A75A9F8E0D9.idx delete mode 100644 .cache/clangd/index/SpirvPrinter.cpp.45873E9ED9C78885.idx delete mode 100644 .cache/clangd/index/SpirvPrinter.hpp.60E14A2C43310425.idx delete mode 100644 .cache/clangd/index/SpirvPrinter.inl.850288AF12FBC0CA.idx delete mode 100644 .cache/clangd/index/SpirvSection.hpp.27E77EC86B689532.idx delete mode 100644 .cache/clangd/index/SpirvSection.inl.D1C878B5174E2796.idx delete mode 100644 .cache/clangd/index/SpirvSectionBase.cpp.3C270AFB7368C673.idx delete mode 100644 .cache/clangd/index/SpirvSectionBase.hpp.611E247491AFDA0E.idx delete mode 100644 .cache/clangd/index/SpirvSectionBase.inl.F9384090290A4B35.idx delete mode 100644 .cache/clangd/index/SpirvVariable.hpp.8F16AEF8924A5974.idx delete mode 100644 .cache/clangd/index/SpirvWriter.cpp.5E8F581994752358.idx delete mode 100644 .cache/clangd/index/SpirvWriter.cpp.E8EBE094AD40B410.idx delete mode 100644 .cache/clangd/index/SpirvWriter.h.DC91983551E9455A.idx delete mode 100644 .cache/clangd/index/SpirvWriter.hpp.A5736D944F09C5D6.idx delete mode 100644 .cache/clangd/index/SpirvWriter.hpp.CC720F81FB21E462.idx delete mode 100644 .cache/clangd/index/SpirvWriter.inl.50EA1795D7EA1EA3.idx delete mode 100644 .cache/clangd/index/StatementVisitor.cpp.24A7EDAE9CA5503B.idx delete mode 100644 .cache/clangd/index/StatementVisitor.hpp.1C6A06909DF5FBD2.idx delete mode 100644 .cache/clangd/index/StatementVisitorExcept.cpp.C019D206FA85118C.idx delete mode 100644 .cache/clangd/index/StatementVisitorExcept.hpp.15CAE34A9761EE53.idx delete mode 100644 .cache/clangd/index/TokenList.hpp.3E1793B302B953D1.idx delete mode 100644 .cache/clangd/index/Types.hpp.CF309E480C254E5C.idx delete mode 100644 .cache/clangd/index/Utils.cpp.60D1E0CC138B8929.idx delete mode 100644 .cache/clangd/index/Utils.hpp.0ABAD7026BEC17EA.idx delete mode 100644 .cache/clangd/index/Utils.inl.77869E1BD643905B.idx delete mode 100644 .cache/clangd/index/Vector.hpp.AB1C1967D698D3FF.idx delete mode 100644 .cache/clangd/index/Vector.inl.F0571DA066B41DAE.idx delete mode 100644 .cache/clangd/index/WriterStates.cpp.E66D395EB560B690.idx delete mode 100644 .cache/clangd/index/WriterStates.h.3EB1FA8425607F4F.idx delete mode 100644 .cache/clangd/index/WriterStates.hpp.B3E751CD161DD2EC.idx delete mode 100644 .cache/clangd/index/main.cpp.41A508184138A40E.idx delete mode 100644 .cache/clangd/index/main.cpp.C4CF7810A05D703D.idx delete mode 100644 .cache/clangd/index/main.cpp.C52301DA43FEA1F7.idx diff --git a/.cache/clangd/index/Archive.cpp.5CC47325CF0C08AB.idx b/.cache/clangd/index/Archive.cpp.5CC47325CF0C08AB.idx deleted file mode 100644 index 2774827b5eed93ed0df1bcb966ee222d22b742a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5954 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 diff --git a/.cache/clangd/index/Archive.inl.6367083BB3B5A2B7.idx b/.cache/clangd/index/Archive.inl.6367083BB3B5A2B7.idx deleted file mode 100644 index 66ac673542d05c3a2ec4c15a71e61e77781fc074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 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 diff --git a/.cache/clangd/index/Archiver.hpp.FA5E94CE3BA8D9AF.idx b/.cache/clangd/index/Archiver.hpp.FA5E94CE3BA8D9AF.idx deleted file mode 100644 index ab58abec6eb9d62cb5a61d59abac057fd2d72dc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2250 zcmY+E4NwzT5XUbsNjb>n?nrXxgO4VBCx!?ZwN@MpC`AisMS-c>78UV>w3Sc?;YJT-b^<4_P@LL_U-*{ z=G4T*(=d zvHz~DIpLa~r)Tf}Tq{3RTNPUPZAIjrk=MiHYjfUlw49%|vdYuG5A|FNK0lDEjhf;< zRe1F5_}O)THFN~F6nCitotK=}k_TJdcgs0;{|(9E+Upk>|BSf-Y-Z6pPg{vj7F&+^ znvl{Nle?QXt4`ae9;?YRPA)VDeY4SWPvcs>w)xjI-jroItrh#5yiZ?UK33)Fi`~}x?t{3Z z#zQw2r**U(pVrB*=sTEFFh8aI&E)Q+%aW|z{=~W`jk}I)^(@?2KixaVnZGXfuzR_u zZ%w%+v!u%2rhL}xe(oI*^K759$T2@cN>Me|z2~;LDtR9H_~V1e7Z(u_VWsd;$fe!; z`JMHxWxgy@`%|1X%o-yakn4VXG^^m$MFWdQU^$wOR*ME?rR|5&bKZY3nn!Xd?oa#c zK>qATdfqvzbUcf6I6G1w87dl(w;BQ}JO^qf@Q8tI3vKy7yX+Ew@m9jlI03zev(-Ur zn`j_=)AMbaem%Q0cocwTlhP!J2IS-os~ZlaN#?RhgXK~5C_ywJA4jHT6E0XkWsw%k zHoYxKG$8w)&vA8l<*plnB(OEDRI31aef`dm%U9CMStQ`>C^||l8jzjSW!HZH*s+I4 z-jE$g2XY`6$CRcX89R80MS7eaL&xYu1G2sC%VinyPwT~Jb9$*>AsUdMbVgZM39DQP z8HPqkajXx^QQkwVxqtlA`eOP`mlu-wQ5^5ZbE5fAmT>Zd%5g2wDsF3l0Za>0*+`sNDB>Bn3H)4)X}W0*92*7q5+w&fB4m;U9BW8PuXcEE}W-nP@;xSkw7Zdu8wik7Q6hoDOF}&dXlpJc)Ukm8uHwt&Ei; zhKryhSipzjthAK{TEHvOi!i~NgDmk8Ap$o*gx!Q7a05KJ2!RIN01b{N#DE)M!O;W~ za04Vbnh*l+!BgGaJK`QqkuY4aI@kbH17;*DkrjvrR&Wsl3b>=IZYN2rdmS=-6q6&8 zplOD)L|N>xAAB%IYY24CaFLow9kc+D;ktw{s0(o6RtQw!2B>f}Aqw1S-c!DJWb+lc z6*FyS;T-|Sa1p{5L?&v~rs2Y#YJjy%_20)2g5U3{FZu*^SRgD`<@{4u-QaHZ9ByUKxD81aQbT zEGes=ry6+=ADtKN1z#WvxX00icZdewaWsJ)+%Od!P51^k@QtGh+~5YTadQM}a0Ab{ z2;msqdD*#Hj diff --git a/.cache/clangd/index/Archiver.inl.A38A8F6F4396450A.idx b/.cache/clangd/index/Archiver.inl.A38A8F6F4396450A.idx deleted file mode 100644 index d64b4acda5f3bb30a08bd2afd6b52e189923606d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 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 RP{QPEE>_%L+aZ?n`hP9-0Z0G< diff --git a/.cache/clangd/index/AstSerializer.hpp.9AB9DB4353D98136.idx b/.cache/clangd/index/AstSerializer.hpp.9AB9DB4353D98136.idx deleted file mode 100644 index 3fba23c3f9d51d24ae83d1f96636bbe30ac5fba1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15830 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 diff --git a/.cache/clangd/index/AstSerializer.inl.FD8333351D5F3306.idx b/.cache/clangd/index/AstSerializer.inl.FD8333351D5F3306.idx deleted file mode 100644 index e318cea130a481452d83997859e5263921e3ec78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4550 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 Mi`5YuPQ2y*ALZEqCjbBd diff --git a/.cache/clangd/index/Cloner.hpp.7A53E17449C7C1F4.idx b/.cache/clangd/index/Cloner.hpp.7A53E17449C7C1F4.idx deleted file mode 100644 index 1ea0369306ce476a8bb658662f0c703f586a44db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9078 zcmZ`<2UrwW*WOt`7H5E^&CKq?4#j2ZZRu4|x`4EZARriu1qdK9D(15Qny45x3K~%{ zKor3sHVn~-C>GQh5)d)5NBq>pL=an)?+*TF*#CL5K9A$x_uO-CKj*yn8W$cCl5fG| zP5ChVlf0~j8R|S9&k+4BURX4DKE~snK)@$Enm2dkubeEbco948a6{U!vzO$C&Ci`% z&{aL#cQ{BGa=q=(xQ~y{%^S#hYASeGFAWns`A0Ey`NQmtW2*|zEqi;Z$SEYZS7K9h z>c=%E&v_PQepbF!bDD{f?RANh?0xONIgwFTz4pl2IS*x9>Tpx*87(1~s*(d=<(o&g zTW)>u%yvJ&xUbBiC9fu;rTj{=XREmX^!CGlSR5+s`(|akeu(MX-&T0MAS}~v&y?M? zFB3iZ`P16QRU3yFyM$etFi_y4-#_((%M~N`O8an zOFLikg?vpjv=rzM=_+!S@&xY-H_opy_DsSwmBjuce@@(XUw!^nzkAB!P&(8Ew6pJg zC%cy2oBmQIKDcsl--07U5*6BKf0E9MQrs|BAr5Ze=D4OH z+C+ue>1|e`X?BuSg?LF^P4n%)Lm7gnY09I#jJ(8Tj!}-7r=`K?=^J6BhVOFCuvO=% zNh1W45wX+_2oPou<}Zm)WXJh-m4Kc^;DEn*8=H4ZeUYp=4PKBQA<>z-L>^spD+EjKTsiF5){3M-|C*ELVR$B z+fA#3(J4x8yNTSmX_gKA@?kfw_7T!;sr_{ES$cbxP z`=>$doL`T!*j{AMi4%{`{wkOv=aYQgj7O4cq}JF6+CEmeONt*|J71HJoAO9Kp&mK* z;c1O|RpdSlmZhg?EHBR&@&#r*N+OlmljgL!9Q0RSez(IaFsDF8-|N>2x7&O6s}i^P zm-{JBE&fPpXr3ZZuJ5J>9ZO^ty-k?aR%t$V?aJE@bROND$L*bu3DshqZsnWtm0VbRL>K3zd7BxE+3E#YaYV?4qT zElN!f{)y9Qf0>HT?f0F1yL(XkGo{WY&nVp6OkvTML2C4YnvjSNHbIT8Gb|?U*UebQt@9SP=a2 zR)Kk3jSAxi^$CgBPyDe{hc89i8PW{Lu@7k9*ynxZXqW3ArE&X;e7R}0dXng8x?{9X z$k&2dx1=pCL3{g*dvT8U?>4Atdqr&_Q(h?D`+i^oV}ThdvK2XT+TF{KX#M2XMDZ<9 z*C;hgee46`Q-AK=J)tr4pbF!HX6x_rRy8BBInriu#$fCN+GkUo;$H;}BQdvEy+z*K zz@nNnoA%1&txDn$I)q#Azi0I)Z7wQ2q@wLtMUwQ<^30=SCw%PKlQNOa3fjIWU)=FR z5#FXkJL@|&vUOzU_eyQsiR`$p84a1V2Zi;V9Gi2>!o9bMfm*>tc+h1er{S5ENcmAxv&DfhEK{ZGeURpL9@fn_}# z+WJ&zm#nz!n$oD=uR?soDaD9**Nep5Rx}nGbFpm0&FqT}XBw_6i4`IRH|}3+BRph5 zXMR%>C(?=Bl9Vp%DqPuIfAhWLvp2LCky+MR4m_<1YCLToa(oR{qlf#{I&UiJ$J6ng zzNP6|fty?OEhTXj9mR>i3HbbKM*i>vC9#*ti|bs=$)|<4Mg|9!#1cIT2`hfQajIec zn_nIZ`9jzb$%14~{Pkr+>aV2dkKem|Lp4J!lKp^o!b0)1Qp=gol#Dxw9Jsa(n&qvL z^L>ZjI{+yzH6Ym!XlE`Rc4?ujhE*)esZ8~bcV_3G3;7eFYjRt;D`>xM@wn8PuKQAj zc9X5F;-&xnf0Vj5jh@EM+O1i|*TS_2k@#QpF2SMn&ej&AcS_o}B3o`?yrQh^;Z=0nUd^ zvRn^L0@p(@%kcmPri5UYAu-R)XRqHKoM~k;;jHM>Tn2SO&s5JDYM-nq34XfGbP|HC z8EY>f8}i=e0cN`nvv8m^&>pgBU{T06%bvgpuqOnwtO?+{)!i$}vUodWBt{zJ04(Xy z5pi*>bBYs!6Ql|D5XC`^jIiX1Gjdo=lpeP6K()OYZyyK|<@+tfJ53F})d*5TNz7nR z6Qs;qrT|w@klDuBmXKzAm9r&&)eoaS$Wj0k-~g@*mIAfQvNC8FW&*)1-2xcs7J^xt z1u)Po1he!CV4znBW@#0`z?%@v@+E*_mJ!Ty6@Wi6O-pi2J`;`l?Z&t{1H0%sR+eEm z{6h?aBc+k<5Cw)u8?McN`tx)I+cLHa*tUHO-hMmDrY`}(5z+`(Sh2x~y=$WDH9tUb zxHQ}q)_2eAfL)a-jmZf1U_4x)ztA-5AWLYVgFt8y%n})ZcU^Be{Bfo%Rh=NkVzCuu zOsEthP8cuAC30&x*aRt$l+T2c@Xvhv&~+N=s26&gdgyGu{{svNHODd^XbzYUf?37` zFfbkjvrGqIU^)n984keh!AAzGA|~XZCZ|ZJxIk0DY*1~M(LinUXb-cOKUU?UO=wIS zGY~Tf(o$~e1ZfyS=16iT!KsYfJnw3E+R3@7fjDWLEku4GKd1qg^gsi}f#;ugKAbfV z)%Ib06fhRxLZ~*&fuJ^UAWS^QeE^1k@rh%c2OI)1=C?sej3w?$C7}@s**)?9%%Rdm zQV4AkB&AMG9M_YoNwvVq6QookH5)H6YK#_SfCR}HF%l@*?RxGoFj&3-jdQAWsv{g5 zAZ2KrEE$7VfKDNprBMI_PeL%uj{pV&gkYBV0KDS$jO=F*+CD)|`ZB&wkW&NULA6<; z1GQl)(A2U72VfvLs5VP%0H&<93by}MQi^OlFb-}I6TuOo+APn3g*Y%USSZ$8Qr9-Px?GR~* z0#fDsS6vlJPS;io2vS6gl7}c{yd<6|7LA`svAZ~Uyd=lvVmOiLeEP^E#!Fdb zmW)eg$Sk+4sZav1j>gJzGMJg(i@)LP&fi~)y6MmOyF+Bt-uuFy=)AZd!Jdq#H!Se* z^0!e50h(VRI7%Aj3~5h#Ut6A9q3>n{+b}k+uw?l&SJW|v-+qZ;SH{&HE>dA6s3$B# zgPuTeMf1qgGk_<(NCW*6 zWWV2HWM zHcQ62;U$C!RnZoF<*-067})DO8)~QBWIr z6oOg)1aM_E{#kx-dG+`h;MXHUa#$ z>Z50WFYdd@p!`EkA{@^@%qN;t;I|0U+`-&uyd=YAG)xc5w{UA3vJAA7aT^+TG78=cF~5zy=d5QD0#!Z zY1l|8n&Cb)L^I@oabFrv0YUoVel*NFauc{e4Q>J@Zg>C>?}OTOP07L1;-jC)_5QVDIfCjcn}3X9wi_66bh0L z6ch2O6vRa2m+)W;{1Wo^cnAe2ksw3yPzrbfL5AUB6zq1C;NjsEBzPzb#3Lxk0#OEu zM^bPA&`HFnQE(EG>&2reaJ>W>jYm_EYN5OykD(xOC&=mebPB>PLB`^-6vSkd?ci|~ z97uwU$Kxp=xrhef2^0hjf=t8{DIm}UnL?(RL;6LKX=-V@uzrXn>1Im6kE1k8kYfmG zmS8m9aYr24hZfV1@w12R)Hvk$z^AmgAHfPn;R8D!Ru8Q)OY&ijL5yIQ+ygvXu{yia z<<@m%Bvu-02Sa>wPh4b?5Ilh3Flm@O%sY$(8DXygzzD=i1hdp1asikV1ha%6YQyv+ zm?ioE!|6gWOYi{(XM|vu*aHkF1;H$#2Y7M&jhge>A&*eMC)-;u&hA;Q6j|BelP+a2-#-oKEROsp@72De1Iiay*n2RLx+&rI=s@{Mk6^cz5e5%lty^N2^=?=##^A;hxH%8nf4SGl=G3d>att19 z9}k*n$t2cR7`(wQ^Ey4c<+zUv2GMABH;D{aAR0*i@E6mqhI_DuKJ(UDYDMO;C|0FV!t7OJ(h#P z?XmBMk0#vB=jCGXC=5Xit9*k0azP}y1o02cOJ9Djk|3I4=6DwJylq`(yB>W0Zn5NK zQ_3O?F7kapyz^+$6YC`y+#A}pOcp%0)GWo|>Q}S<^@XKFJO9HiWrRj%Nkl~L3Jl(N z1Op|SbmO%(7(BWxtb9|@&}p^_gV*hOEt`UWemQ9?2G{I6%i~ft60UB=;Ld+wXin#| znxD5~a0AIpy1g|)b8{62HvI@`TjB2?T}WhNbB|zf(R(CNU-Qk9y&V|5 zpdR$7c=JtvcP9o<=x$X;jTVh2=P_$5cGFqHwMpO5Qw?c5E}c9e#@Tl%NShn zaWT2LbSr;d^_gc5UQH#LD<)0h@XOvDt=7-$xcN00yH5_=v`G>)2#|D?u$ IipPKc51TfoH~;_u diff --git a/.cache/clangd/index/Cloner.inl.246C453E8B117AE6.idx b/.cache/clangd/index/Cloner.inl.246C453E8B117AE6.idx deleted file mode 100644 index 7719458961ed369fe99b726626b13bc7c91002ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2594 zcmZuy3s4hh5WWO3mynPHE&-ANAt50`F`0&-;Z?y=M8H-n5;Xw$QNMueAd^kQ*p{2ewYpZVM!oz&bq-(;N=bj$7Asp*F5(L4vI+^9Q)Bk7DJ zuk@E`-=$uw?L2r`^~U;WdtduUx%vXT_!F6<^A*c&E}qJ}6j0$|mNmpXGL$H&8g*cjC?9B0kl+V_$|DidpipA*7>X7o|%9AVVZaq%2av@~{qPxegeIHO727B)a=lC(O%eDIa0B^{v{BAAk;xL`sDCcIJ#KHt44)sq0HMy)LG%$KI}#Hf zp&6qfNcqtlg*%(ykx4vEhRIlf*mvbi-Xax=0>Smex=|gjLojUnuxQ7t7Ec2b9W&H1 zq|Paz)sV#bAfV-#U_;iarD5m0vU~iSvuvQ)2dh@0QsyID2$nd9xG4n39U(ZQRLD8O z$DN3ja-LiaAI*6i8nnq}e(!E2+-${uyz4Itx~ z1S`xX<|dr>`H${zoc?yAjI`~$S}fdgJAgNy^5M0VWJ>19b=oa#bDkD%ZD8R ztlTcX_;;uL5GZ7>-?%#8>B0sG=7)4n_=*ZbAvm+>{h!jw*qD4xs z(i&`3&mMOMHthEW6nXee`%?drYg0J>OmmtWuW^gV#qG z`=C;udgS>oTI+w5fEjFt0Av9X$(#=t8PE#4Qc9d^>)ISnLm?$k{apEZGlc{!p-N0Z z+dya{Z|Pe3D!(VVG!vR7;IszHKA-&LO(m4cw>+%uoXDmMf+u6RAu}0a zbx_-R7@x{F1v3%;lMcITeBI9w7gS5MX7&ySRc`fDJM`yuH$mRU?Yj2DxS_Z0 zP{3hQ8w8V1PqDg#b70sjCY9nBJ$@DP{wrtu*sH{zYdXX(pj;NHo3I?X?pjNZ%2{BZ z9zT_-CT_TNK#`8z(+d?`0b2>AX$>k{hE^&LAQ_S^2 zIvf*GL>Qp-$pTsQ>F!?%o&Wu%;bAVA3kyU#)E{xJxTW|WRFid3&hAFx!#*Mb-;B@E zCXkp)%s_(s1uGVcJX#(=Trko^k7hrFV10^nW@>tLn)@MdF~1d6C{_+Y@YzrHcZ5d2 z`3-_A8egaf#z#i}b0$a3@gJSf+{8^@s@^`)!7(XS$^`Y`n1ZTcf@a{DGu4?1WLOi+ z@kti18-vna4AZ?dZFS`>0h>}yjlkNK*@-gWxeZT2-e`45b5#Xv8iHfOw}#Gsp*1lZ THTtuEuwrwu(Uv7?Q3&!krlGG1 diff --git a/.cache/clangd/index/Compare.hpp.F0DEFD4D9EF65904.idx b/.cache/clangd/index/Compare.hpp.F0DEFD4D9EF65904.idx deleted file mode 100644 index 0cbe24c217fd26b52868a309d3bad4adfd19c029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9760 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 diff --git a/.cache/clangd/index/Compiler.cpp.0DDC7674EE65C12B.idx b/.cache/clangd/index/Compiler.cpp.0DDC7674EE65C12B.idx deleted file mode 100644 index 4715abacad69868936435df680046362e682ab93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22792 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 NBgxXPg*|dL`9I;SB9j0B diff --git a/.cache/clangd/index/Compiler.hpp.D7B17CB22CAB9348.idx b/.cache/clangd/index/Compiler.hpp.D7B17CB22CAB9348.idx deleted file mode 100644 index bf35717ffffd10ad22c868e169e2680b84f0d192..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4624 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 diff --git a/.cache/clangd/index/ConstantPropagationVisitor.cpp.B15E68958969C6F2.idx b/.cache/clangd/index/ConstantPropagationVisitor.cpp.B15E68958969C6F2.idx deleted file mode 100644 index b9a739b1333fc94f78330f8070cea70a9b9d48fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46458 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 (u0b+HKTN^4L%EznV?bNM%r@ z@(0f3A({=!*bU0RnoZJ!%Cv(DJVRRa^t^lddvm0Kb*GqW=`peNF`e3blIWcz*3#6w zQ=<1ND-h}b>wspJLsMD3dmwl{5CU)z1z;iZT1W!$=of%6>KR7;a9sjG6s-_NebJmP zp5n23$6qAFdRMMnoh667BhIjT7cV)-TQz3UxIGKQpC`jXuF3GzH-sa7&#}VGr)oac zzMD}%OBPrytN`O3E%{Cd6w;D~I^aDm`CbQnpd~-(fRD7~M;#C=)`}IIYlIgo_KXz= zYk+HF&^56Mu2mr&*Tk;Z#9uT(njDlSH_`01r^#K@VWsO+It=FfmZuq1z@1$kGkPNiBm}??)jFN+^~qgEFYWyX7bf@DrBO0=jQ!1 zZDk9ExxX#;F5th1(mhs#AOPH<@UPe+008%??R{Eor3rxNlsu=!Mg#!3Ai_UejiBy} zu(4^2>o;J$6un=HwKTvt5l;SXae@ep8ItV`YX=R$O$q)L8+HfafkYozt$P5lNQQsK zHi-a;mT9!rb_W2NGW@f}asl9x4F7C#0t3J&8UESonk+1?ZFNl+TCJ_F$%45&TWqmi zdS@@a*}chm)*O3jS7&0%iE^b_lacyzW8-7lgmFcn# zP9_0(BzJiv_rT)9!v_{8e?Ac7#0`&9AZqqzAZ}`dd?(hP*bqO#es-VONBeW!#J{vZ z7YY-X77raj53U`o4ISJ)SQ|QcT(CCuq}r3Tj2M}{C56!=&C zwu1$zaY1Q<>U3GL|BdgS>7L2Hdz`Artu{DN!;7VrzX^#Mp7+mw!IC^X*e~@;?vxzc_5D8x2pG3OMlI} z&Pq8>EEi{8xB-wPmQAuQ?NGIneU?8iil4=;3FgD!6Gflr$vu-+)jE8GCFlcn{a}4B z>D!#SL$}qqcZ1dVRkYeF+6cFp09a3}t*4D}@iF7An@_?e`indur+hTSB zSWnxmr)@F20PLhc@1*^4N(I0!`tvRw@S6VenhwA!0*r7&>u{^C2mtpC?d}=027q%7 z?Q(U%QnBGuv5}@B#)%cs{;qw$wjc`UQt%0KQ7Cze;U1z;e0&a`_kR@PLsl*H4xkV0QyRrcxtQsfj)A z{Ef@*{4w>}Ed%)6r|$QymmdKLF;oh%wk`m|#oFOktLy;GklbfjFF)4w{aD!4&h9p= zAfKhGpQZYkGSrb`h0Wiu#ljAYo14_Z=gA!w=D6g1+&a|YV&4E^*mJfxjR4{Z*AW$Q zmH|IUd5-ec{2cfDxL_RHV{8xKt}<-!UDj3}30{wc0NkMfU@`GpOaf5977yxK8rj>p zc)fnDty|3No`!6e!X(K#$vSG_IR^{z#qwS*=F0u>n%-wye*{f8*klmPpAbDXHQ}P{ zeo-!uMe=e&;(_gxyziHWUgHV1dqRs%h5_)MT;+h2&XsKES}y{6*v_aQrd+tsrU}so zhiL1q4*)KSwwJ`RSn&b4F4|t#0mo(A<8oP)5HL>5wx_KCPXAfYd(z-^Qg;}~UnIuK zJ#P84BI3^vV-casF7x3p4x`VMyd5znW9B2aAlNUu?iVX#;hnDeOZCU0(T~||Io(hx zU3VcNN-7;?HRu40D9Jxcs*TMT&pO%n_|wJsJv`82KK!*}^ub)P^Y3U{Dwz<_3TZqTL12M^hB{MZ5c=k8Wvb z_f7P{OhAyElHE<~hA{w(WV=PO4|X{KB+9mla#c;~Wy*G$|D*F}_vn8#-0VK-6xt#c zyGWfv+XlsMgHECCpkjB>s?f&rqS#(gs$$1>WO?;If1a%Sgf;vVq8l_qO|~z}uFwcE zg=>2a^lelt`Uz{`;i5;l^|iaqoRfbXX?o>JDQL#C4NkKS#jpCY&d|^`+|UiB3qX>g zX_BFt4j7PR7^neG8k(NeF-{r=octfgw3CME#Rs<#Ynq{Hnl4P5VL+NLOqyX@+W&@$ zg>Y+&qrq3Nnf?xc>l$kqWO;>PyFw^8uIQ5E?xa`a?iD_H!rInt(ebwEjI{%RyQ1S= zD-gf6Q3YW_`KPQk92EkN3N>(t34o2VX`}3_sTG^#nw#W$2%vT|tMmL>ZA{VBu)6=W z4LtpnnZ<1z*tQLh{_r!NR*a|hH5ELb_KBxsH9#KikVglj#39IRL*Q)d*bcxALzNrW zhtdFu5*tQ|-87XWL-fk94%EQ7D|y|O8sJa{z*5<3soVgw0zi`Nm1G@cQT>_ajXwpB zd7D;$_octeh`Fq$9i-|(>m(DE##k8kGC1BhN2Okd^S8h;E>tOJKK%J_^uhfTb|Mrb zJH*J|m{b7P$qwsuz$V#YlMaZJ9pbD2tl|0V;n)}TGF_PF`(MHf*06E}uN)x&@74ma zgm^6>0eBx}Tk=xBbw6djVA+k5y`tm*OvsB#E0yQnrI*a-wpjkQ)ja<<@p=4>@y%Yc zCbx$=?4fR0yZ}6>_RneYQ$qmE7wzVY<*@Jocpy1Ekle7W0Em_yqGdPyE&y4wUzS`8 zccB1yD*HW^YvHyA0AFRluW~JvA^mq-HSOPh+R|TC+#^JRA$dpNGdV1-o6>jcOkAhUwSjNHub# zMp)bc0Ue|10N>F;@8};IppXtOv_1p?alEI)-_u|X;{zS> zf&Qfdk_;o043jj#Ny9vtc&#WNUm%t=!#4Q;kQT}}1mqhUYJ!0&+b`C4xFFCML!~d) z1qJ|M%668hwZJ$_EI&&uzElYeFlBq%y3)1)KBvXH*aZOaL9Fyatf860fNk5Q)=4`s zmP%EYO0_f<8Eo5T>9)JGB(E$fNW;jHy5>j&u*4ybT&ZiW4#<<*;NO4&bPjP3_)V#ZZYye?9KpKCwE(?12)N>Hp%@oj5xVt zobHkWnAF{6wMPSS?2;?*l51*$fJxm0va=5GIAHC)(Sz-!FOvNh$<=Xiz$-YcDLf(S z6XK0cp}jfoW8jY6Z&{DORdU{HJu=37Z!An4QRA#(P%V%7%%kc&T6||P)a!WHw%(fx zS!@}SbB0t8%c@1w&1Kya;|eQ-&#+d*+83`P|5xJ-l+*O4!T`{#2?3y2`~u*f;B`+3 z&>6A#zpC!1C8{tC!}vL8W}GZD%}!>PHG~jRtB@jEv}+e+&^|0^VFkHrt>_n!7J(n2 zU4)w!BD4%rOWl`3t3b@9WIac`u94|ATx^Nqie$fV`184zr#g)0@Mv__WOa#PFr1NzFX)#(rIusR?7%Mt_CFkAm^A@ju;%(JETSd9mevNZ%P~9`uJ?2PE>(zsM4~P5rt5^6^*Wgln zV|Vr_JXSqouPFE0zl*GEb|WHow|c|@gMHio4fS^MohSpTlG8VYvp`xgy(@&UvY8iT&oJu|g(ru|+&xZm@k|MAd4^-L@_N1{)V&mThF)nlfMa=P&O{`Kj1@0vJ=*nX&0Ea2+gxp+JEZQi1s;fgL!3lYW5%9)V|(8tjZ2 zxYkkEPsUoVKx2=<-jBcxtH8m#z-OC4lYv0YTp&~=Fx4wC9x5;lA+Rhbu)ipR+IrK;XH@Ro0wdM}Q+EPW7XsVK0-Krw8(#w34gxEo0?UU2 zYk&eve*#M{0!tDCCuRa?T>^)w0>_yGhnE7!jsk~wM87g78U@l?0*NnyypKR8Ltuki zU~5I-#8KerlJHVSB1vE`FPnNjG4-+LX(f9trt(Q$jFeLMf2 zU;B9H*4w@>*PE;PN=)6XNg9YCU~f9 z*H?bs<^OH<9l`E1O%t*L=3^Hm+#R?U`94oS9?z`L1&NHAEkIlsdt@SkkNL+jn)b)^;ekZ7N)vGAKOxb- zEV+>J&9{GsFtQu7B-mP-78u@G?@MZ zZ_}1sPio!!^*Nf`KUG(3IM63NF(cvAl96rWp7x$w>np!GQka~db9zLSb~oU0dBZ2= z%NOO#JPG1jRqT?XU`4R7;nP&OHbRwO|gXyEZeObLnPS0{2Z{nF0D3h0|AbdC;M0g}V{=|U~pOT>= zxsKEZX@c}9LJ;9h?aIYNU4KnjI6Cc@=$DMbgkfSh{!&fjbBfJP3uu-IZcn9C1u(rO zulr?c+|7k<&c$)#_%QuccXGp{!r3o7oYV1i3Y5Xiz|Q%w9nNhnXy|U=d868Ge>^wd zxqsHJlm6GA(XQmP{Bh=aY@W#ef#Y8i{88^;=l`036^EyVY@vt!1Jjeg*X;f1X8#** zpa}O1cY=a@``EIU^x=B9yVYE^^KRjlzKoYUEn8_;FhrijO-h8r<)w#SsZE@^!x5S) zP$fg@f$12MzMc+93Q_j7;q@iE-Hwmt#yXGRmw9jCu%LL4+q8z(ILlh3eQmbK#Y=l> zRtVgl5})D()y3bV$5rU4b~nuERJzIF+@hSCQ}q<}q1)j~uF`q;+*Q-}-@U)=fFrGZ zHeZC85A1F{bh72}lPg^gyi3Fq1!6uhZC+g@HiRzgrdd32&5&Zqg6Ws)>Z^ZU?RU(P z7%^WQjVyc%#=95k!28kVq&{wc-|;alF0Pu4BjegXu>aJwB`2rst3K&)PQVt35c7fQ zo0mJH&Tf4F49yb2?aA@UR+z3I_PzL3NZ47o$W>gGGjdb!$n}b?E536ygIA(gG71%j zI??{9_LS+;FFlvsYOYu5C&A&O@#1ZbzLFnlRw&$UiZ?lnf)tCk_DY&>d9nOs2t?Dg z(*7ZQ?5u!Wans$)6J9_5)-cTy!hWOD=-gjky_xm)mYxT0z9(=KoW7S86qa{!TwF

zAT}1@2h@pIGn6TQAkAIZGBFLghPNRNsfahM_vhgK@M4jX?z{Sw-ET{&4)Vc za^5iE>%!UL6mSHEL~IcSS)ow6cRJVE;>hN0<3b{VuJO4HO+y$!)7Z?=Gnj#%v6-P| z@S^p}xaRuo59VT@)dIEBNku;|jV~4QE4gu$iH3Fn3Sv zxZRX7rU)OB$WK&)W721IlHdE9igDl(;)rNClR{##I2!bqLK)E+8YgX|%;-!FgaA^2 zuVW+tuKVnz<_OpSiM}sVYBlr+THz0d3jm?Z&z}cV{WT-hI9>eS-MhSZVKtDbn8ji zP(MRo0{lZEeWkvhbPbcANiG29qmbb(($Go*4^zl!H9imA;&E;J`By8xXvD4Rc46m?l#vI829?IJwoCNrYA6GCj!|WB4yY5G88wDN1C#ss zpdd~V7gl5PHHS?Ee!&swL}ph6Vx#!qKo}f{fRA2Ip)__H2SkKI)_K+!fQNCc^KB&% zD}^%WX66C4M4uaq5C0;ehl9bUXVQj2>J?I3j@xVO!AQs3s@DHX}9Nw-!x zNE(j0x5|sgS0IBFN-0Pw2S`xJwAAz(2^vo!^D5H3kp$I(X9+Hj{Y^3&G2Ddn$~;3L zfqynFd2oOEz!@GEHBP9&P1HDH0#{y@Y$Xk7!a!xKXaFh}ads>Xn8$6%j-#Osv1YK< zG!PYLOm;jCl!!Huoj`*I;&igLv|F#SlW4bI6X}!yam+X(y%KtjLdlY3HN=MdTWv4` zurLb4jWKRHl%%NLawsvW-BKtqt093{!o4j#z#+zlx0MIjfT(d6nb#U*vFgMRgDX5P zoWsaB! zS=2um0FPvRGtdL|4*=p(gg_7Iq>#`<=zJhhNWzwgfGF@NUSe~Nq-?1Oo@x}5#z@m# zBkOo;HWUXpuGN<3*0|=(*^m){0gjP*$wF*^KWt`RuwX7LSeVz16{(sWD7t$k+Drnz zvwGgPt?!s_B>~jRL#yYT)(Iw)P{2t)_yq=c%*!UB3AXk}%6~HK%pswu1FOgT(StKf zNC1=Hh1=vQQ-28w9R@EI0{pq!X6X2|SKCTL_iX#Rro-n#@;(yY3`4^Svmc*LIZr}F rM0wf#ax0^%Qjk`HKnp%gEh9)}rKemPrH~PF*ObilQ{nm<<@))5SG6_& diff --git a/.cache/clangd/index/ConstantPropagationVisitor.inl.CF03B7DE262BDE99.idx b/.cache/clangd/index/ConstantPropagationVisitor.inl.CF03B7DE262BDE99.idx deleted file mode 100644 index c09137c1a6954b1cf037e76bde1e788983a22409..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1928 zcmYk6dsGx<7{+IZ%g(Sfu*}YUFw4NQ$hZqD>afVNoHjhVf`IGs7#`6)a#6gbh=Lc8 z@^bP@g%T>Ec&n^qp_GXgX@D0rjwx1JSg2|6M`j)@PF}Nb++Nl_XV2{S?K{u+d!F~5 znVgxPzD7$BV`pcU7Z)up@Fxg@$KSH0rSshyf~dqB1#bJ9`=1(`ThKFDk{5sSCky^ySsf< z(pr6M-qxP-jmPR-Gjng%1mBEjs&^-x$;r=m#W!`OUNCijF_84>vQN14lcLYJM|;+t z4g5Q&w&mWn&MZIA;|b#z5By1V#PwZ2+wAvyS8KMm{to?wsLm;lI(6;0C5v`tzImx; zdR+Sc7Aj@h!M3a`wFBlMO*if=-L`Vu{2dz>N#~Bce=HgI!?5GQtqZo8r)8J)+uoaL zn|GtcxS%*bc7pqWQnydD|9WT3gI}v|f4w@i!OAu$$)Ae{S-T{?Zq`1u~MYLI%pP5;R2;tN|Ca35_`&C(cdv7PthLMaUMi zEd(9pPlWQg;M9>rk2FRx-%DUn3@JiXSkxfFsztpm|GF3c|2Lb+I)#Yv2onH4a-7*Z zFekUtEAJ2-79mT>!t%7ASAOV%qpz(^oYdeguyM9nVLUe;JJ1Dq9W2>U{pw%q*miG$ z37M=yI!eb5v>LAiSI6C+<@GBsdjYkHTBl$PHx3e%7R@PZ#uEuilE!B-4zU#1cbNC~ zNoX`TT7(oJPmS?en5KI%`ETtTSEwn}UH*C7sz8l|lDH%hs!lE({&r2PG9hP=%#l0i1g7CM+QQYa-9=)p6-S8Y4o3#2$Fwb{O$Qn^$S+6ip9 zNNu^V$jVtofQp&uFyFseHxIirI1OV!m_edb90L(B$YFITpvxea)ujL#>|#Q7a)5AZ z-%a9C@ERhx&4(CxqWP%LNd1Q~Y%ix?x&Pb;W>O4w|Oq1bE&o$+P z!#BR$j9WdN8!mzXTrr9|qkv-lV~Q)f;pzLNgbOb<#U@}90QJcgBm=%8>I1qtbCeK^DoRxyS8AOJ;Mg(fAT>Eg)%2C=zp z9#rF?r-(CvfdUE<-8s zWoIYtl5gcCoziozUUcPxD+Z;JX%eiWemap|zqfjTj9rfLWrOTV4}2WVS)Oh XFDso@rc-~Q9TOTK?%G(gl_35DA<3ji diff --git a/.cache/clangd/index/ConstantPropagationVisitor_BinaryArithmetics.cpp.88AEE26FCFB2C9C6.idx b/.cache/clangd/index/ConstantPropagationVisitor_BinaryArithmetics.cpp.88AEE26FCFB2C9C6.idx deleted file mode 100644 index 1273a292f047923a8ceddf08a0203fcf820411e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13940 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 diff --git a/.cache/clangd/index/ConstantValue.cpp.3282F9BCE766111D.idx b/.cache/clangd/index/ConstantValue.cpp.3282F9BCE766111D.idx deleted file mode 100644 index eb932b5962c26d788169ad05d0d380fddb51923f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9774 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 diff --git a/.cache/clangd/index/ConstantValue.inl.28732739665ED713.idx b/.cache/clangd/index/ConstantValue.inl.28732739665ED713.idx deleted file mode 100644 index adfa3962b0840a74fc1c3778d54b1076be8bf39c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2114 zcmaKsYfuwc6vsCZFl;uPguK{133L-6fHA}>Sg?vv@c{zb7g7iqMKC@BDu_5rN_|o+ zjwonH#M&Y+Q9(rvpe$KO)U^04%0maMgH?O2v*ETM`eA4GcjumS@A;qqxiJyp z;Xw=p30)A8X))F!Iz$4UOe3aLGoM>By(?lQFL05mY?@B7X70%r#QOs_-5kF z;u2P<2)*>AR^%CH_Vt+=USzp?<#kA)@9bDxDCF8-Q~I99XWN1j8V{c=Bbz^NzF0HAKf`uY-pJ0m zb+j5goVLH~*XUd9r3E8uV|9n**l)V|dG$tvbfBCYxtryq>#yiLSTvCKS)95ik8F#xlfJ3qRtUQ%AKKR$?dQ89F2#9f$@oIcl?(kramR}! zVRx;a-2vN;-*Ts$E>a@JT)nyr#o@nL_bnf9#OUb?6vz2I|saew)E%HI+A`|f)(d0)A*YT z-d{`a-Qf}9-MeGm4UK3xo4Ao%7j;it{H%?kIuPQW7&F|Kxx1x`hphShvgamw@~~Uk zGVO?S*|KpX!m>f_2wtXk3#O$wAH#-7dcZ35hXcQJw6ffDp)G3}Vh)Yxkur_mzNu8n z)sngArnT&4i1`}|x3ux^ez$oSv(3@=j2Ul!9heiLdS$s(QmBc0!Mu2~`MK`&YQh}x zSoBgXZ@y?fh9NE>1B1ixW(AQ!A&85!6T)DE42apdFnxv-g49;lloao2b8y0NH-VeN z9*BztVu+*yDMWIC93pptyPc@3)5QPWTk*srF~2k{X?}5(rKYZyLBntnA+qm2s?AED z&@;x>0mFF&Pd<9MLazv<$fCS|BxIhK&_Rm(uzh$`?NVIF*72zGa<2skcx1SSVtky5 zGC5Q%A7`N~(I~M|Hbh*M3lR_HK_oy05Q$I`Lt>i1HCtXzU?PlDkRy<`#ljW7BEpxX4!@)X&%RxF~ zIIJUv!#ZL(tYfT8nAK$Dd3$QumF_7CfHCJGQG@R#+(x?x6Tq} z7lK%SmH$M_OGbWurhMhdw-{)R0EJwMi7`*=01U^)I7A#V2O?LoD@1%TA0nYx2$7q{ zO+T7btPw*b)kq2`EJ^&PcJZmnV>lY zJ%Q#Bm=u~r@Df0Ch~e-Yg2w}zL*O5hus0m|hm=4hBV`aNNCiYnQfVh5_C(<0-I4A8 z`?@?lGp}inzM&hqNk9nf&lhl_UKvD*XErV|fX5q2Hz%hv-~8Y&yS}a+yK=Y&LH-7$ C&L)5W diff --git a/.cache/clangd/index/DebugLevel.h.EEF1238084A8C169.idx b/.cache/clangd/index/DebugLevel.h.EEF1238084A8C169.idx deleted file mode 100644 index 1b32552b56afbf66bc67ce03423ff6a6b15518f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 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 Lo!a06I;;NzX>LYU diff --git a/.cache/clangd/index/DependencyCheckerVisitor.hpp.22BBF2B5697F255E.idx b/.cache/clangd/index/DependencyCheckerVisitor.hpp.22BBF2B5697F255E.idx deleted file mode 100644 index dbd6cf1a3f594bbc4fc6da389055b260a57f35a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5378 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 diff --git a/.cache/clangd/index/EliminateUnusedPassVisitor.cpp.F41EC631E4D8C65D.idx b/.cache/clangd/index/EliminateUnusedPassVisitor.cpp.F41EC631E4D8C65D.idx deleted file mode 100644 index edbcf917c1e15a02300aa079066ee09992283f07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4626 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 a&Pr-E)=FaKWF;1ip=`K32el*N%=kZMIdE72 diff --git a/.cache/clangd/index/EliminateUnusedPassVisitor.hpp.91540B274712C8C3.idx b/.cache/clangd/index/EliminateUnusedPassVisitor.hpp.91540B274712C8C3.idx deleted file mode 100644 index 8db105a0e8596cc1f23b54f186fe2e30e7903b30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4314 zcmZ8j30M=?7M@91k}#M_B*BDavXEdP5iki5MZp!t1zd4KWpS^Bd+vYF|DTMDjEJZv zF>LUx$mNS>rzSXI80LZgQ&N*ZYr!$>r3;2F-(EUl(So`_vMsu|#?9*+UF&?QS4{P3 zFXFT?u;t72-o>d=LuOsRb>+#pIi%+F?w(P!P+ zyyj5Rj-~uNF<<2Tn*2x4w6(qmtnW8$On+D7b-Zl<{>oQ|B~72U)lS0t-FY-%{h9Qn zSEA&0{8{eKCBElU%r1+w+H*>_aF;3d2|-m_>*)ZiDlPx7K657@o>p@=a&&e^OMP?< zS-$5<{ja)_t?i4CBwCuQP8N3T9osN2lC|mO!>Fgq%*qYVGJ;cc{HK-i=EX>s2LJq1 z;{H>y*N-J_>vcVMrM@P_js2Ey_^Fb`b3R@_%fr&c;&zAFI%TGq!U)!><@8DNYH2HW2d1FJaGT>!knnHZ@GjizI9@XP7 zI6eH1b$apqNuyslo1|A$$4^W@o42KAYEeXHYR2Vljc)C`j!M?*4c6?fakunM?}l7+ zKE!5qyLJcnT|cb#)8@cm_(Q6%H?5vs5s&LqoSgBk(-Q9h)P2;wpRZAI#MlHtWIbmW6PB}kaZs1pzJ$38GQfn|OfCv!T9uWWGR>M8_%xIxK zULjKGs9;gB4&%DwSPvIZ1kN5B9uc9m> z3ySBm?eTS{(#KqJdhagvYe{Wq{Z6f+o?!*2O!oA0g}f(4KOns|J)`Z?h(&{4S)?~c z2}psT?SXM^r$^-t|Fh(SP<|vv>VQWnP>Lab%gUX)P?!8zdwCK!2}PNOW&{u6Vuz=? zCGlUIp7xnWvOED^DJk`Yc%@(8g}HpeGLqFDmi;(>o#`c51+O(|`8qL+MBsR^J><3r zL>GxB8={@+0>((0%XQ3yhh!?L4yUX-_U zP{*Y#7pxoX@6YoWzy=FCavRgEceA^It06U=;D)9rl(>u6ZT4jOpz=J~o=&z0M3c!! zGQ+v`IV4K}$#ooEcUV3t&C_JNK0n+gxtdgWCU^CqLVxoabhgW~H|gEE9G}>IR>`f$ zXYJ64*O6qVQ6e(p03XvovGUUC1FblfRdn$9HRivN>C<_Nzh3S z%FHnffT$~R>)fZcx-drG^IL1bKD3A!$S{9?`|{+IBOWl#*unGlo5R$D8QxI48_y;p zfCpjYEG!bXM(gsW5rsiF61En0tcfYH1^S$zJe@o#$C`{Slf%6blq^6N>G+bf<#NE4 zpya;t!SFTV!p6w#W8;P~D)&3OZf5^1&(REX^@()}hSz1$I6?V{ef**GtP4LJ*7#W` zAhTAiHNeG!RN~x!^lQyCaUV<@XcYl6Lex6VEU!<8HQ(*6vDRnAh)p|1RL| z%0z})9TlQ_b0cpa>Og4^sR{}ss9@hC{Y8#f3d5Yd zt!R%|_x7a>GmIhxF+GAHcjKqsp z_y<>--7^_UfTCzidTzmG18&GnPb)CPtYUE~dPYHk1Qoyz;DMmQ#6q$3qyi_HR7hp$ zF$HFrP{^B}OkmC+MwX5m5%?{mT+Q35rPpJMx1+~Vr&Pq8hO(*8oXzpW{Zp4rkrJXgQTI}p+`1&FPxZUZrFaijNuI^ zq1^NY2k-8ct2Y#A+sYZzCCgiHyE1H20K+VyY3nmQOMp}|nO^iMu0ms1i~UVKFKk>S1j;J&)h8EZb$ zBpxf70>P*gqNFj7PB15$=R5k*GR2Yr_mn()VZv8PKu$I}EvV|>=!(M`HWiQM1n__J z!=V!@7Cd@#W$u$fIJ6YZ9Smyx;mWFG+?#z0aFEi`g^2|Rv^|S)=)2O|i`i4R;1_YY zVSIOo==O}fi#T*xO7hH<@wA}HK-DnJ%kipmyi%E1i)YZcSfz`XN+wq-Fok1H?s!!? GUjGK6wZ3Hl diff --git a/.cache/clangd/index/EliminateUnusedPassVisitor.inl.261505C45B8750CF.idx b/.cache/clangd/index/EliminateUnusedPassVisitor.inl.261505C45B8750CF.idx deleted file mode 100644 index 99562f146a9dbb330c7ba64f9ced83a91fec7e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1616 zcmYjRc~BEq7~gCluwi4^eH&zxg^)lX7@8*G2Bj#XhzCb)F>+(0G6*QK7AzqH;&iZq}h-vL}4@Oj+~WBZ{pa=8J;g_BR-350njC z`J*GX>d@hc)$h`+SpWD*d`@WHliL_5X{@@_p7u-Bc=xvLE;s5vT=&D={O{GxYopi+ z$-}OfPM2DHkLvHlZrn3`Xlu`mg%QjZ4rWB}Ka%1VeqpBPk>le-ioD4Aq~5lH%f~8a z+^$)S)zYr^uWnzqL`<}w_JVE1hqCHuUg=N1b(rot*b;}dZ6ulH-rhx2o;!)YG1j7>*S=|U0{ zF&J>7om8}eHmEQ{=zy(o<%w}{L39w5AO&`buajT+W`0c8*a0G1q@n}q zKnQSgv;$r(O&XyaPW=y1NmOb&R1yj$oN>EEk!iPifxnc7C;cyq{10VT&Dq!-lmV7) z0Z^F^D)1-n*UNDZxUF%EMK(B~3DT@ankXIwX$TF6%2HrUikOD#THD{ttXjh-fs?Zn zwK!BDau!jDmjo=26{2a}f2U&R$N2mhoCGpl#-TC^bhwT~qUAFc<(~?sV%76q&pjB!$sAcCqeW^MAND+?&u6oyKB*$Xi z!pY#`a%ffNA@f0|7@+ge`Ji3|hE|1ykVC_i0^4RFt4J1tl!TH)o}|FG9SF2aeY^|z z{pKU+g3?k!h`9XkaX-Q9P4%#sVHg=IbHJbRmm%Wm;O{Svb);GO9H1nW#}WuIU~zmL zP&4Yqov>awUTK&uZL)1afRh0kCxIwHWIzOP3skHIC9e*9{z+u>pFPebAaFvutR+sA zwbUZU#nPn{yOuQ~0um^2g%rhySMrJ~1w|l%AMPhzI%&hSiD<|tha6LV>2Gh_?$lY% zEF*AMG0R$bS`ljTNv|*K@}3xhmq&S0a^!~rzyo-q6K_cU^Z9ENa}F>NM<|yC$`S2F zAZVIXD3@s(RhdZBGd-%?>wL*P+(C}w+)>VRUw$zXnQ`m|{1Vtyb{8tctxMMKL=Lec c)4pu@Q^U+fyUZ@O7m#P_+Y)a|evD!N0{*iz8UO$Q diff --git a/.cache/clangd/index/Enums.hpp.563FEBCD9499CC4B.idx b/.cache/clangd/index/Enums.hpp.563FEBCD9499CC4B.idx deleted file mode 100644 index d147dcd98f611adcdedb23eafc9fe356b19ecd86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15628 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 cmA56~|EvG{e>nS=ZP5^7FKCTNa&1_ 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 diff --git a/.cache/clangd/index/ErrorList.hpp.D860B6CD397F7DEA.idx b/.cache/clangd/index/ErrorList.hpp.D860B6CD397F7DEA.idx deleted file mode 100644 index 8be638a110f98717b6922077714648d5ee738354..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75516 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

LjcOO0{hkbAuV>rhct`f>Q@C=Iq%f!mK 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 SNN$I2m|os~Z~F7?p8J2xfCVW4 diff --git a/.cache/clangd/index/Parser.h.C94B85EFC98D9087.idx b/.cache/clangd/index/Parser.h.C94B85EFC98D9087.idx deleted file mode 100644 index cbb58307ad150f2d98e87500941eb14267ef7261..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 974 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 bKQnAU$-ez1zXaBGjdM;*&q&S6&XoKIgNm>W diff --git a/.cache/clangd/index/Parser.inl.2063DF4F08AB2BC9.idx b/.cache/clangd/index/Parser.inl.2063DF4F08AB2BC9.idx deleted file mode 100644 index 887b09e44c10c5d6b3517fa20a06d3b19da18224..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 zcmWIYbaP{1W?*nm@vO*AElFfyU|Bf6U` zUU)W5yIQqo>4tfGbPOeDU&!5*lBT`o$9-QZ{=FUIi8I{q9pBT@ee$8(Oo1dEuS`hDb?)Tx47Bj=Z1G>a`vi64JCCx#j9_6I{nL3o0DOYe)cu}+GqXj z=6q_u^TlJ$74I#{W(7jpb2(o79a`bJIj3krrgV|j!nbUGn>Qb7v;8VrWYcY`@72x3 zAikYr_V?Oy_VX8eqIrA_`o$9K>V8jQk6Ny~td%eO!@)1f)28LWWy<=vRl4oJ^)qMv zQ~6VWHJ*C@+&t~`MthRurl&+32F%H!A!n6ZOhKK_)c3U9xfhU9x=FiT!OrU zVlYK8S29U~otQ79?wofmVTTBpFsCp-Op)j==^2x|kEMbv&=)j;3Bzb687@9fK0cTQ zQefXa`L{A!UjE3zU{2S)xv2tuK)pPUJnk?>8GlO7uQ-!FkrAkupHCbntlD~4?Oy7d z#Xw;Z0TEG{4U4bu@>iSJu@q#85|1uS^}8-5?=NaqTYuTtzz>MY#AR_~c*~z-UG(E>Hx(`~(d798eT96c;5I TbAuRMn{0&nIF9RmW?%pS>5&mZ diff --git a/.cache/clangd/index/RecursiveVisitor.cpp.C40406451A44869E.idx b/.cache/clangd/index/RecursiveVisitor.cpp.C40406451A44869E.idx deleted file mode 100644 index 2c6ab4ec38f33dd54fb1ee3aa7eb1246760019fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7604 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 diff --git a/.cache/clangd/index/RecursiveVisitor.hpp.D2AB053DA85E56B6.idx b/.cache/clangd/index/RecursiveVisitor.hpp.D2AB053DA85E56B6.idx deleted file mode 100644 index d9a2ec7dde34e84124081c046eb22c1032920be1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5154 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 diff --git a/.cache/clangd/index/RecursiveVisitor.inl.756E0CA4A20970A1.idx b/.cache/clangd/index/RecursiveVisitor.inl.756E0CA4A20970A1.idx deleted file mode 100644 index 09c1ebda1171cc18e40238ebaae04b085070397b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmWIYbaPw5z`)>~;#rZKT9U{DWQzcCaY<2T3XqNg;)*%EC-?F>7>KY1=qGZKUiXn7PB8V<7N-pLG RF&GUxa~6sxUSH0@001NnKx_a2 diff --git a/.cache/clangd/index/ReflectVisitor.cpp.2B838843DEF9EE5B.idx b/.cache/clangd/index/ReflectVisitor.cpp.2B838843DEF9EE5B.idx deleted file mode 100644 index 85a1bcd329ace2e883c0a8b3f2dc8cb4d54009c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5572 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 diff --git a/.cache/clangd/index/ReflectVisitor.inl.4BE1EC0AD13B3912.idx b/.cache/clangd/index/ReflectVisitor.inl.4BE1EC0AD13B3912.idx deleted file mode 100644 index 3a9cdac10beb69aac216ec5d219a01900f29a214..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmWIYbaPw5z`)>~;#rZKT9U{DWQzcCaY<2TGLVh};)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582Sa zFS)R@E+8w)FRREiBCRmZvuxeSt{Sg7ZU{3l002UTLSp~` diff --git a/.cache/clangd/index/SanitizeVisitor.cpp.5F08E384DE28382B.idx b/.cache/clangd/index/SanitizeVisitor.cpp.5F08E384DE28382B.idx deleted file mode 100644 index db9882e0cf3fd2ab9f324cf0938d08f05e2053b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189522 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%0D>n}7pM)x{Kzk-3QGzSS1F^fzS%{38V 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 IFSIi~JfU)Lmdw-mz)~3X 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 diff --git a/.cache/clangd/index/SanitizeVisitor.inl.31394EF9FA011B85.idx b/.cache/clangd/index/SanitizeVisitor.inl.31394EF9FA011B85.idx deleted file mode 100644 index e5616714c8a3554fc4a7e6ce90de469d07d0a19b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 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 a5i=VAi+}K!HI=acoxakJ&)Kv@4F3bRPrWAq diff --git a/.cache/clangd/index/Serializer.hpp.3D421AA4DD3434C4.idx b/.cache/clangd/index/Serializer.hpp.3D421AA4DD3434C4.idx deleted file mode 100644 index d7692409e7418ee95cc3716c5c2255d472feaff9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7216 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 diff --git a/.cache/clangd/index/Serializer.inl.9FD220F8465E83D0.idx b/.cache/clangd/index/Serializer.inl.9FD220F8465E83D0.idx deleted file mode 100644 index 1d5a20add29d4f1ee8d567f8fea6ea041286497d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 zcmWIYbaUIm#K7R3;#rZKT9U}Zz`!5^#Kk2=nVmq|gpq-vVoq{_r>>vwDW5YZ*LdkB z75M8Gdg^$lc$_}tx%JZZ>*r6L_q}@FZ&la!3*{&M_0Ia9)z-XLe$L6%8?vh~!`hD#={KP+Xat6bp3GEH#IY8UOh>1(=xF8CW<>Ic%7Nw1bQo zIDm3MP{!)S8Sb(~7$VK9$7{+QtP-pZljhI!-MQgP<`Xd{Mm7c(Au%B(<~*)EF_<(% zQEFOoJCqWq#F2%Z?Pm=KKT zwx{)7&YQIPj65ttRzeOi;qQXtq3)tKD}cgcOk!LxVVM0OuV``@!yFCtiW095%oR=t zb}1D}wr^vUVd3ZF7lH}@QQvm1ar&AaK)qa?T>J>V{KEW_FhzHaHWqvfUV9#>NQgrS z$<3hPg-KdJ`8hG_sL*Yo<3yQ6d0>u%(ZH}mRt=1YoJ3G`78fNKi-Q;}*XrXpFz>DZ M%*e{X3KD<-04;doSO5S3 diff --git a/.cache/clangd/index/ShaderBuilder.hpp.F15E929B249EABBD.idx b/.cache/clangd/index/ShaderBuilder.hpp.F15E929B249EABBD.idx deleted file mode 100644 index 5d1a58e8cc038f0b0bfd387c2561273f6a1910d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14300 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 diff --git a/.cache/clangd/index/ShaderBuilder.inl.0DB1878757CF231C.idx b/.cache/clangd/index/ShaderBuilder.inl.0DB1878757CF231C.idx deleted file mode 100644 index c9a730a9562caecd141828625031a8a0f3d3a498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20954 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 diff --git a/.cache/clangd/index/ShaderStageType.h.B028CE6C7CE6F853.idx b/.cache/clangd/index/ShaderStageType.h.B028CE6C7CE6F853.idx deleted file mode 100644 index 9513a57edf0e10a0d106812c5a0c625b997c0597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmWIYbaUflVqkDi@vO*AElFfyU|*qh+7EvT@dwB*EUt#h2`JbXNL zx%51J{CQXEc%*uqKI6Id()H`-Pn`F?dfsnU*Y*qLC;j!#`kvL+yjFhB-}7pDm}wD{ zQf-Id{3Clx{+`+MWKPfokrP_ACdyxpBsN5{F#HK|Sqp$0f7kdKn1Koe83jea z1i}P{qSUnFE+p47azR`P6aoR58-cPKDQzfdK&B7l;i2 diff --git a/.cache/clangd/index/ShaderWriter.cpp.4CAAD00F9D40ACCB.idx b/.cache/clangd/index/ShaderWriter.cpp.4CAAD00F9D40ACCB.idx deleted file mode 100644 index c506053c595e95ddb4e4c59b499ec1822fe131d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 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 J-anDR{Rdkxbj|<( diff --git a/.cache/clangd/index/SpirvAstVisitor.cpp.55169384415821CA.idx b/.cache/clangd/index/SpirvAstVisitor.cpp.55169384415821CA.idx deleted file mode 100644 index 8c8f12e7979ae5db8bcec633e238d41da6ecb234..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38368 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 Ge*O==dufya diff --git a/.cache/clangd/index/SpirvAstVisitor.inl.C62F864FD6F2E4BF.idx b/.cache/clangd/index/SpirvAstVisitor.inl.C62F864FD6F2E4BF.idx deleted file mode 100644 index b184ef4bfce3f18973a8a44593154a470f6e2e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 968 zcmWIYbaOkv%)sEB;#rZKT9U}Zz`!5^#Kk2=nKOa3EF%L$#hk5Y4EdW31lk_{lML4r zV885JsKPhFV8@Igza0^`o~^U^@cQTxgAKE5ZqI%nXv(L;xzp5VS@DWl9)Ik-vph9e z!~Ba@FedN_A6gwPr@n*D+W*C52g$0IPXRI49F1qm?KG-m_;l@T_O83Lx%MS-TboNK z|C#N3FZY|yp4d13r~4x(K27N5C<>|*T>h2sVpJ_dWmu9tLvdwpk^|6%Pq#`>j_TUT zD8R(X#=s&dC#c7~gpq#&;)kh*(Ll37_QT8$yISR_FH@ooGCPB#0Hz8i%?uRg;1Gui19?b# zc~}H_1!Z8Kk6-xHW{JrsZ=gvcQX=XwVO~bPu-6=4eHleq#F@p}V8R7AR^6F*WpWl! zScF%E4<`KO?y5hZZ^sk^?G@$}7J&%^dFsMO2%ZR&2rrDsd*=T=vo!58puK{wg5fY> zj*m|xcLrpXgFF_`kq-00HkD=jViL|)0fl)PdBtGDIkk5#IYzyx2C3HMFo6lLwsHHP zZFR2;D9p*oDFPFg)^X-I!k0XeQHDj>SlA3^Wm?j1p32a3lYpvu7}~6G1DOUZ(@Ql!_$Vw=v1Ea7uB?!4%1`h;xYZz!ZJEQ}z7uyOTRW z_KFHi!i4>0vJvPEn~)jDLzy8n&H+w`%s7qFhlafBM5@WzfgT}!)^TTBncwi`eDn18wXR_;ah=$nbi}I zQQ|eec*h1+6F*>lXyE(2j(yEFj5zbd@s4A4C+Q{XM_<19ceu4J9J4;X`?uZ$uXZH6 z+j>rnD<0_@-d$PSeVhL*-FNPz!S%ZWZ*AS2bk=<~i@MgUFKQ@jUAfCCeyNCrge&zK z>CErr->%>Lr@G`_uD>zrSlpS}m}ta<2J6zxb3y-^7khD8v3`#28Vtv-Cxlg-QKMmRaThOj=uTT z*W=TLn?h@f&Q~;dH9E7N_0Nz~?GujBmfG^03WDhV$#Za7ex*+!Rfz-=l!8t+gc^4S zKj}68y(5wROIh+BEZZ5oK{g;i&Un4gS0Bhwkt&Wr9Lt$xLm+vx0>xi?<*C8sUb=uK zm5GGL?Qq|VEJlk1_FotpP00CW-8uuw?$7p~xpG?Wn?}W}tccg}Jjng& zMSYDUYrdH6n}cx}kYqs4xpQ&j!>fi{P;gzB{tj8rdbm*Yz6mp0TCwu{d3Q=&ld+PPcn(I~VN<0Wg)I$XnGC55tfB=Qe7PAvF0J92>%qnCOV!qLw zX=_hB&SVi?3o`jl84EI{nO8z43b}l)eN0GLF^u@Awf}+E!xZ_V=G3W!YEU~ zElv$)G1Ckd;+zW8i6haegUu~!lrS*MCfS!C(-D*<25?hYAP(c4o}#C`ziiU9=l<^b z-QVw=b8mG;ID9;nqLghFt+8m!mK2JjZ19b@G(XV~zb*|$wZ3s;?-%;veDjyH(M_dI zT@4>U&%eZVb9r4kM@kQFUUzBD!c1((1-rRy@y__o7an7>`Ld1I&-^g(oYvU)^Jy+;%bMsn`sTeTo#wZ2)y7#cww>p z-N?dVmz7Qh*eiH_;3Yc`;kT*|on-wV95B->0G0*W&19M~9SDD$UFC_s4R;M$NpJUPVEI)HUHoy6GmHXFjt*V@88eQ%GM=@fuNLMVsvm^?{ohxVPl z+B({J>tE%(z-Ka|EaoS(qqXt#(7c|?$flp$=2_ZFtPblc^y?&|LtKR%@?_srH%IR0 zG%QhQ<-gKURNb}0@!J{4^I@4Qo~)B|1iD z#bt=V8G^uM<0NEa32)@>sDdSuQL{zav z59fxf=AvssbdjYf8#nFfy}b1oC0Yr~#g^h^F7j){rP)B4^x&<^nU<*t>@Ktv3P>^< zzBqE>>O(b9OwlWrpl~N~`CVlwT-1pV9C`5RI>-%Lf)eJUXE-S_W_VJ=uJKEu$n-O? zTbHSmv1*t_i%V07yPc#wwOm50WuBgAyQg*^fLw#sAYd+52~J9kB<7+%SWb*0E{8ws z_^shaZLbzuW8_w%OlVCi&!R(UO{&Bq12bB5-tBwj9XK~&2_&nt*KqH*)6?Pp6qYa= z#)NWMl1p+`tyA<$IyzvER5i}$GX-Yt1iFN{lpH;5&LmNJE=<*0}$Qbol~u_`KIN>q`b@vEW$6HrA#Ca8)+ zo=_gTYWI!C@2mF>fGfYnpPUD@0qsy%c$)K_j3&q0^;wBCTp zP!WeAdpYtDj}=F{-IgDlSjl|_OfH9OH5LP9r8tS1Hk+`1PLfWio3MUPl0|2kFhyK? zeQ;o!U%Y-}-q$-0Qmn)(AOTB6A__>r5*Kj^NU+nc-SwLG&hP(wZ!i@$8E6B8rbLo> g+wgFzIohx#@o>kRx5f>LKjg#}`OofOPv%n8KY+DR7ytkO diff --git a/.cache/clangd/index/SpirvConstantCache.cpp.880A65F97A09E3F2.idx b/.cache/clangd/index/SpirvConstantCache.cpp.880A65F97A09E3F2.idx deleted file mode 100644 index 352f1650f14bead55aa6a27d27f9711b80785d91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49008 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 diff --git a/.cache/clangd/index/SpirvConstantCache.hpp.6FB8F6B4E99CE834.idx b/.cache/clangd/index/SpirvConstantCache.hpp.6FB8F6B4E99CE834.idx deleted file mode 100644 index c2eb8ac701ec0f314685855a7bb411b140a0d0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13398 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 diff --git a/.cache/clangd/index/SpirvConstantCache.inl.AE90C3FD8FADBB9C.idx b/.cache/clangd/index/SpirvConstantCache.inl.AE90C3FD8FADBB9C.idx deleted file mode 100644 index ce6d6740a25bd9bbd0aad740b1477889a3e922d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1638 zcmY*ZeN0nV6u&J6dmpzQuOCbv&sSM#o{Z8Dif)s!DFg^+<4ZDOCbDi6kh-7yq)pOm6FC;Rq22a?J^41)-_tmT8?i1aIN4sWL+NOg}Mmnz&p{#H4@0fo7wKm^e@yblN zoouOGdf54B+;y($(~l3Gua8)n=#IQ$&1pp<@>ILukDyGD$zboFek-Su2dfa)ss1{Ok*{GCSjj8JfBnf-^h!&IamD!iWx%G}qQoaqbZd zRdZXpOh6v{UFnUz5r;O(31)3ycuwDnNB}WolD#Y-KRPN~My6IiYuzEC+WfOeMzw zOoEL{BL`h2*c@VB3(282O13nE;1tzUUh?p>*X!guY{gar-a2f@_GhQ9bKIZD*n72sP4#uH}P`7=uuR6ybEJ>r7 zCT2p&Lerg`0pW$^H3T!5Q2}#wwN~*+FnzLAz$3vt=2d{2U=uc}ARJv_lNj^=$!s+{ lpaO_Zd6J$2m=5|1lsTnFddffWgi0S+pHMYcoNgFG=wJNeF3A7@ diff --git a/.cache/clangd/index/SpirvData.cpp.78213380C8ADB0B9.idx b/.cache/clangd/index/SpirvData.cpp.78213380C8ADB0B9.idx deleted file mode 100644 index 31f355213a317d08c94f27f8200977e95d498c6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209014 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

~!^Ux1S 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

-gr4cd+S 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 AAOHXW diff --git a/.cache/clangd/index/SpirvData.hpp.1456A956D1AA9CFA.idx b/.cache/clangd/index/SpirvData.hpp.1456A956D1AA9CFA.idx deleted file mode 100644 index 9da244b543f53fd7669940741b62d4685eed5b37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161852 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

6wv-bf{+6ZcFY-%f~Q#2W$23-RZqptA|Qft<`_~ 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 T0oQ;l!P zW7@;0mTIwc^n=>^YvYd0(aHBp&7FT9h%+C%Xp3&EYdtsqzVUpXFBM(>Hf#RNMxSuE zn_0N`%QmLI;~U53>wH(*DNm}kBfC=XoY{QSBgpAFbHVyVH*%f#hko={#sJTK@aO}^ zJUuovIFanU^+x?-S*xW(V(cFu>fPS=tS>)GD0e!3jXFDZr`CUAOGA^oXJpGAxhY5S zMSN%HU;n(jspY|vzyCzej?$)rp400r|F%)3d*Ae^7UHG@i!H<<)V^mS&RgRtI)k^g86?8h!yijgcK+AG5%H?5WwdIFH6YIoGj9#snm0($dKIFQ zWJx;Cfc#NgL3iHqy4X+@hLfAcW(8+JHVX5G=I181(u6>{x*cVtjarbunm5fv#(kVA zL1LUdL6)H649Ig?ub-%PPG+hI4Nk7&s|1_@Ipu~w@rix%B?*$@)fSm$17|>fdE#<= z{HB@$n&89U2HLQ;_h*ky5p-%wDNXP|R*TdUSgm%@HL0&8yOo3p@2%u3rJMnIX3(~$ zWNTeHO@zYg7$#<|YF+Mke9b%lJ}4wa3Pdq9qvZ?=W5ZWEBFd2#Tr=MT(~WM*m~}n1gUXT5@m@IoBx)Yk)REf`}l#J-(ztmp-5<0g%TkEm8a$a zg=hd2N3(RoegGyuB}*kl1CThHr4gdxAUHP*AVkx%<(905kU}0wF+xTPCjl;TG|MAI z1CPA*9Eacr4skTgAGnLA(~swy2WoI`qrsRAw*xs`%;7k>((Tach6YKl{~(fFKc9P3 zDx#t3# z#s1~rq7O$xB6Kaw7Ipu7-*)7!DE8*Ev`}d`?)wLRIy4m;PD*J;g2I6zgw}9END}nY M!AB)g=ZISn567RrXI zTTiGP>c`p}>su}t(ReB@`ew0w%!Ei0Hnr0+L6aM;y1p23ab+YIq{Z<$$AuR5O%>g= zVX7!IL*;Crqs5iENp?V2tY4Da>Cbd-t^gAwD+3F=HoFD0qP(IG0|!tJ2$q&_-fHWi zyCUj zl9&C=|4jiZ;^gF%MkwNA;uC=>f{8LpfgJ-g7$yxA1~~#IT$GxV2y$j|QF1Xih{0l# Nm3g~{H!zHW0RTJ=d;0(Y diff --git a/.cache/clangd/index/SpirvExpressionLoad.cpp.5338F642B09E36D9.idx b/.cache/clangd/index/SpirvExpressionLoad.cpp.5338F642B09E36D9.idx deleted file mode 100644 index fc207f40230d04a0c2743dcbdc1472eb6d83b823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5482 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 diff --git a/.cache/clangd/index/SpirvExpressionLoad.hpp.AE3C6B8402B69E0D.idx b/.cache/clangd/index/SpirvExpressionLoad.hpp.AE3C6B8402B69E0D.idx deleted file mode 100644 index b9a794890db2e43bc45c05c555be9b1a3f2cd4e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3672 zcmZ8k3s93+7XI@G5(vpn2;@b`gFtu|76Sna0g8Z-R0JQ0k1`YrR1~BOh_KpXby?ko z0hL+=gI1+ttp(f_2TQjW7RB9K89)&fX_tb^QcI<_qT8i=|KB-=h8YgY`Odlb-1GR( zu*$e>SqdVE*lc52K~71g4M7mj__w&ED9^|s2zRU~Gk2`+-rVzw;O?>MoAJ}f?IK4G z$GSOpPaK!XLQl$;m)74kZjO9>C*sN`|9y`IZj(8>!f}tk{kUercUH6HR0MkcusJo4 znZv6NN_c;X`P)k3%+MWFM_ye~-7UR2wtCZG6JNM5<(@jN?}V+9UwQBkzs{W=UNf<7 zOL`~gr_zp$sOgV_wpG4=a>Z*k;pNi5U;XgD?W9!KE>9YMucLW9>R!XqxZz7p8_Fev zO)>p@dj6{n_qg7gH&i#0sjK>VeBajWcJnTu_KK%IfsfmsJxQ5uO}=25xwXXn z?$|bMT!{a){YJq%GyccJY8jKWM-LT>=JxzEn=2Wpj+L;Cac=)$iB#ne_uE`*lg+dD zyOre=#pMNA(Kwr1E?gabRaeJAq?-$YBE^vkS`c

-fi~d{@Y+^JX54U`q+Kl(Upi z3xHd%`JEP&Y($1(lDQ`U8N2&mLzB+eBb3!fdx&qbsfdq)YQ zAS^ymO>6G30lM}_yAEuRR)rb-Rw~tRW_vVRqBEsF3 zKyku287%;=9DgG?Dz)Za3F(2~EoaJYXaR8FTy~5gI_QsVk|iOKNFZ{j1z}Hj76aKb zr|(rg+rGS>McQEha89@*Ex=z|_4HA3U0ciZhLAC3VnhjmCC4sn*6%&t!6F&h+lS+$ zpasBxIq~h>(@bM8P7Ho|h%iJ>3xMYXQui1>o4kfddkhDug1l$}aP-T6Hl&_fHHb(@ zJVt&>KP@c)zFw33?tG@~rhsHZNtKRDCBXOYSFj$BNX8b`%-zoYMa@=z{eAFXTXQE7 zslkW8Bz#Fq3-Im@J+*yzpZ-2>2pn3dFjPegfE(ZbYAmC&XbyKeuDC&M2%rVPL{Uy| z@g&>ABMc7BACTcHjF@t(>8M=NWf zFKkV57u*E2#gNf-1!|xxY)x?$sDY*!_P@yh&=Ys`*@@-s;Ved~8h-6CARV@9X>4=K3(EJrc5o zj*|-?ZB(gxySYf3Bu#^OxG0gC$b+m^e(dgYRP7v&Ypn281OhK{kAnHizJypQKo+fi!VA6k|ej9~*5yUz(*&XK+yvKS%*XF8F?{e?qlw23CvMBL4Hu zMi4-)ICzRuA$Xuvd^W|Wa5hjWR#Q9*bpQ&*`J$*34mteA?IUrK@g-Jq^RE3m9+K-< zic1h|6D)=X;Ua^LK@5|f|Mu8m%!UU$aQ2+oPQpdmQ%Zd-*)uYY2wDl48V5(wG)$!D zoVidK<4|E0#V4g(%IXK=c3G)`&+$_zGKZ(YUk47&-;2Uo)aqQCo52)+Q^*2=z`4Jf z75q)&;tPYsMRFUt#NwxAYQ>OJF4B5yBP`!MnVw>3PcHJ*csJ=Q`g$wNN z}wL4lrR?1B$zy?J!bJW=}iVO+Tdx-dbMhIy;V4~>r;RC;HZ5Qb)=n% z57rZ-jj9iHC6rp@q|pM$K~gaTQQHu1s=ZPWxMa5e9Bu%%9orXL9QYK+MQup1#y6== zL2y$B-(R2^=*&kyxn#a=rH1O`L#V9_hrrgwS5hk%u7qui z)zqqm07o9(s!I3y;-S^qKSp&4ZdbfHYo&(C#fMM}8M>i4>6@Xn+8^erX_p487EQa< zpaP$k!flDXY`0&qk={lx0-E8XNSjCz{4?-g&rj#VpUo^--CLBCpP7nlU3BK!yjZ?H zi~(=&yzdcWj1%WDV5XtD2}p-_*CYQHm*hqUw13S?`F93y)Wv{KBZ`aOC|*r-i?5GYDbD?SFK{h3YX zl-|D~#>m6W$;in8)3zh(=Jn~7IdVW@4n__xm@tfHlmZ)h{8NgffW2|cQn~ur@3Bgz zK-FA~T%0gff&5xp1zFQAfWqtv>{&43k7dWpC+(2*1PQybhr)z&YVTZfjCxTG5;kPF vfeFLxU;+wruuH>)fjpp}V3I|tIf)=&6&EEJbAuSnS0aVYGU`_vF)#oC(7T)Y diff --git a/.cache/clangd/index/SpirvExpressionStore.cpp.97AE7ABCD5AE4BD4.idx b/.cache/clangd/index/SpirvExpressionStore.cpp.97AE7ABCD5AE4BD4.idx deleted file mode 100644 index 6e722ad073b6e843b470881d8738bd964f88aa30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5014 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 bTl{ivcnElWp{I!8xv*#7jf?|-mBa5paLu@r diff --git a/.cache/clangd/index/SpirvExpressionStore.inl.738980EFB64FAC59.idx b/.cache/clangd/index/SpirvExpressionStore.inl.738980EFB64FAC59.idx deleted file mode 100644 index 16d482062400fb6edb625bb248d4bcab37440634..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmWIYbaPw5$iU#7;#rZKT9U}Zz`!5^#Kk2=nYBRrD-c)AN#@Wyp`%s2Rzt%}SMS`J z^W1tT^}SL(PM`7Idg=Q0^C!;xUOn%(s%!g&@{|60XMN9VYhEiq=kIy7Jj}F+N$Kx{ zo+DGPD9t~zr{wRMJx}HYEtnD?vZ3GZ#0`VmoVM4gA|e;AHJ#Zb)3#^TBN=V&oJ(P0 zJPa+L!z~$#D|3_NfiAFdWBRwlVd^I_CPo$pW_CGtBPIzh2{{H1pd1JkrKS}h1JZ%~ zT3Q8J(=8ZznAwxqb70y&mK`sjv_sMpB<#T+4inxrt>c!l+IfE_pfCr!3``iv16lx+ zl&>}Zr8h6F1gMvbk&6?iD5v($CC8{2)gU8{+3jG$>}jvuI@t}^0fjjjIk;fL{Z8GS u(^QpC1BE#mIXPg$Fq%;c#mb`8oJ5eXii?tqxj_tOURjp@?CCRs5dr`XsG67n diff --git a/.cache/clangd/index/SpirvGenData.hpp.CCFC3D839C70A4D9.idx b/.cache/clangd/index/SpirvGenData.hpp.CCFC3D839C70A4D9.idx deleted file mode 100644 index c809ee9ab33594aa6239db600a201a157f2172b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8998 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 diff --git a/.cache/clangd/index/SpirvOutput.hpp.B3254A75A9F8E0D9.idx b/.cache/clangd/index/SpirvOutput.hpp.B3254A75A9F8E0D9.idx deleted file mode 100644 index 122dbf48cf8800ff1baac4981cb9efb24348a3c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmWIYbaU%sWMFVk@vO*AElFfyU|FwRfb;v-(^|SH1y<03i z+#g4joOq`6RdrUvtd=KBo%i44;(DZV=jnlmF@?qVzA)s>;gP%kbkkwQpt(K|m?XD0 z-YNNA8c=pcjX!zE;*=(vc~=>Z?!1(>>dB{?Rdck=%~U_0yf*0})6ZRPFJ!Z}`(EF& z;Lt7Bf9`X63(qL&9IcoATXetslhQ|)0vmTThT_WHBnP0Yv^rSbuGjr7=VM}HWnko! z;Zp-i?AUIo)|1RV`|0^~opqChV*m=aj1Oq2nmXVRQC^fA(2FMBV6HXfi(aC diff --git a/.cache/clangd/index/SpirvPrinter.cpp.45873E9ED9C78885.idx b/.cache/clangd/index/SpirvPrinter.cpp.45873E9ED9C78885.idx deleted file mode 100644 index 2e89ab2d78292ccd6dfd9a232128c498b1543aef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13768 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 AJpcdz diff --git a/.cache/clangd/index/SpirvPrinter.hpp.60E14A2C43310425.idx b/.cache/clangd/index/SpirvPrinter.hpp.60E14A2C43310425.idx deleted file mode 100644 index e6d98a68936897ac6fb29ce980b6090d11dc0570..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2136 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 OojD7|6R$64U;qG2=0c_b diff --git a/.cache/clangd/index/SpirvSectionBase.cpp.3C270AFB7368C673.idx b/.cache/clangd/index/SpirvSectionBase.cpp.3C270AFB7368C673.idx deleted file mode 100644 index ce014f91dde04c94ffbab434eb4e41fa863e46af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1066 zcmWIYbaPW;VPJ4h@vO*AElC728AO1%xTGjEfr)`3fR%xvV$Rm!-0a&10^jD}T&^_# z>4`qs7w!9axt1n-?>@AzWpjz&mK&2MzEOE{-QO?%+O(iU2?{E6m=iHCKA7dvS9{-&G{O_N4Z{GdtdSu<<3vOo3i#B}rb9)mlwDEnjq>W}O5 zD*27uMlF)L!|6W()KiluadC7r(!q z{90tE`0e~s{qV&*U(2>#jo79dv)Q*l)LC(bK%Q>7wVSnP?0RRPhYz-H?1`A&-Ep(S z@>5yCq#2jqiG*!ajR^nk%2=4JYW5)f1;-h;?H3kpXS14;9W#mj=7Pvo%Tp(+8TJcj zlzgpV$`m;B{Z+`kIUh2=v{hbzH0z&`V8Gk$2a*Mg1vvdrr%VzGTj}v>&x}u#CZuQ1 z^PMciYIFUm@iD1a+t|-JdoWdK?wm12%X5=YLg!VL$CiakfqqY2WX`^LGtZ~Ph&S_6 zNJ^R`~6)&nb7wR%*Z`n+UL*v;FmM3nK%gi!tyq+ifuZ|cPSELWGa*JE zHBNm_Bbc_wJKJx3_%&S&C@d``Ed~=le!K6jaDb==ql}t7vpf$>IPv?WUQV&i%|Ky( zF@AZNu*m0}#XFZvwgU~}b>ww{39s&Qa*Mc?)&o?{EzYe56Nb@@Qefv6wY`4x*>L_H zw>_=za^9rPX9GHrjT3Gqj~X{SH!n;Nj~YKaKN3%XM?eT6C(J7>jNnOdO7O#YFiSwb z=jD`z2?IkXClM4%#YM@*%0QY?Ej>nOzlA{8WhPY>233$01gO9m3=GM+DLLvuuDq(E p5T}?ZmjH((8#@y-i-<6*EUPrD467Wglpr?`FCV|SvIL_70|3XXs}%qM diff --git a/.cache/clangd/index/SpirvSectionBase.hpp.611E247491AFDA0E.idx b/.cache/clangd/index/SpirvSectionBase.hpp.611E247491AFDA0E.idx deleted file mode 100644 index 4139a47c84b26d40af182842e9e7db972639e71a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3084 zcmY+F4Ny~87RTR90wM94oP4~5P~yu9Ng#kPBqWfJEf8v~(!q+hr9!8R2%REOmycFh zU1tQPD&m6e=%`>v#;Mk}Q?<^N0^8L(YL^zLbuC?W9Y3n;Otsp&vwp1G?!7O2f-=LI zy#KlPoO{ka@At~*MxzRjVM>4pW)UE#8-ESY> zYu|a)P+0cj`ZaHTeY$>p;BvX@}KH*HzI`K>WS??|pF`+L#s=i1X( zTzsvw&R9}idM1r)oVUL!zwL`p=ImY6nOXC`Kj+}&s?SEMm!(BEZV!*AZNK`$c(&&G zZ>x5nTfXXd^ENt;eRHLBxH@b8jk4}}LB29BPZR+X{yVOuc_nD-yw zedWN_oQmd)%F-DLD<2;G-udNaT@BOH-nb;2wCkUdg&)j1$}2Q7qltm&jA({rm?Y9g z@;CU*;;O6dcQ}x-CPtU!NXiC}$&-riHS?llb2bcWOfrt_Hp|Th$)J1VL__)bGQU2N znMT}BwR5^;(0ygN`@7o@wwg4|6Uhv?z-5#Sy4&CT`I>LvD-Mt)lH9$lvzK*4p}Ek8 z3q~peZ6`nd16d#=3tSGD2tJcfK=+Ary*CZd@)4|De@GBWYFymc6#1pgB2jN5VwuDStWz+n>`nue-!!` z$IjlxI=jf(i_AswvvVCQ6IcDDT>>&CIr|niyoH?usoAOd7@?`JZp`_~w5C{VljX?< zpa$K~?fEL%{<6L;R$PUnLWH0x7%#5+ZvQ5g=}>1Z|9aNBp5!k!7svA(?=%bzzia8% zFe#+>nUHCa42BnrM%TXNxAeraTjUl4P=oIM8zRw)vvoZnOCqP=#yYmKKCqgsc3g1g zOl#S`XEyyQmVdQ#wHux^KN-)yt}836{I{XEK_(~rmpGPqA!G`r;cm@4+_}U&S$X*(GJ@esKE4 zgd)A>XsmNhLQ@8W8^f=o+mpMjqn+>jJT~zfL1PE6%j-tB{pp&|Haz?D@!0ODBPv3^ zDL>x#4x_vAfq-F03m<9G&iptDJaQAtIzkg#KA z?%3RfgO~KO1hRjC%@|<4kR#-{Fv9*d_mth@wmY%86L`T2)S!FrDR>VR>@0TS{3Bw>Q7KNkzMzs-euUcXaK5^jjdIH#*tiRNc|K8H$r*SjF z-bdnQM7$Um@xJ9;w7k@MBZX zoSuZ2Sq^kcomQGuV(@xNNQx~CiP$0+NpXcT;)<-Mm_iw^iO3XAC?lN6tx+=Jts#_1 zYziY>jW8lXD1uO4sG2?2SPQ+RxcsdATzqjkD9SGKU_+2oWH03t?nOQknQ{qboG~I( z9-$l^UHfChjk;YL4y;-$kLTgQrE+O;0yz*ZqJZckH?H;Yc;g&+)4Z8T9uD%Xd1*)z z4t!c4kCVxPU+d@bEhm*}^ZBXD3bX}04l8*pk^&k$F$Y0ykjGo#AfyfPSR}dpx^M$t zKAw>Do{|-79Gd)ezGLvsJ*1m{yWc%^fG!s z_+D_2jV^gITGDZ@IY?2Y7~?5GkP8OnJqLna@J&70>Stxn>h6pa)p9;xp)Vp zJo*{I;24N-f_^?w#%m?3>1P9FL;;cM=K^K?T#$~^Zv~=`X|8Rk){*|=I%a{^bG=~}%($LObg)2DtKrhdk8#4!H@wN1tP diff --git a/.cache/clangd/index/SpirvSectionBase.inl.F9384090290A4B35.idx b/.cache/clangd/index/SpirvSectionBase.inl.F9384090290A4B35.idx deleted file mode 100644 index ca74339ae19f4262a4c9aec95006d5d4132cd98b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3732 zcmb_fdsLI>8P6LoNxt{}(vUB=rXQC|@&#frgm96Yax;RcWl$`#YBfSgr_c&%EttyK z7!|O1VQvlucG}}wvE8w=-71x?+B%(Wu|=KpGRN%kvg2h|XRV%|b#IJMKDKkJ{?VMn zfj7_l+Hhbi_b)gRHp13;cY0KY~{l6)!^Bi3@vUQ65Or`wKD;57T7oDmuedD7Q z&3kX+p=~!>&fx4bZ~Wk&^ECO7R33l6+;lK;N9(UV=9mNe!GYgj>DoSCf3@;h=CxN2 zcQi^aytaOk_ZNR4udI!dNxLuq*wXmH2k(xr*|YSE@hwHmHHE^8IkUUUKN(&y=9^=E zW^C>iF0r<6DA(ICr!0K!=C7I$pWZokVD{*Yk#|}zzrXoJvU;WLY)jJ5pE$P9Sa$Pu z@3gqVRsN?gh8>xAXn)e6JvQ;P&%f3c+?enws#e{s!n*;sHAf0U=tEHp)@917i|UyN00jEZkzq`x}b$t zOKUPSO+PK9-_bsKa(Qm{MwK*->bnKElgZX)$Afm}e^$RV-}Bzipms}KOCnP^qi`;W zZy(-28g5#$HyC|GY(oN*Q=juZh*KO(Tbi}&KMWQ}8LKoiPOCE+#OC59f9xu|_NSn> zOK{nl3|&Sj_ZCfZ{b^45iAowyLo=ir3Yb(=Y6@s?_B%#OB7XM|wKRf?`%ywaaxzJ= zNmjT}awysJ_}a1SLGyOOZfDYU=^^v4tH+NOo%-rlFg0JCFOex|C|Cj7lEzw3(ly*ByhWcpRmViUy>+N0*gFIx61{AwT;kNv#gJmKW< zXNjjaq-aBGpfHa+kfH;rq3euy8ycX1UJm0i7tXO_FmYjVp}HCGG&!hv)a}P_$Ud`3 zHQ2`4bYMY)+Yr}=bl@4vEaNewVAN2Gd->sUURWN1q>VT*JHRWC7lbV!(E2=nR`IMF zTIok;oTt8temj}6L0%{?0apY^2~jpkY0<(;%d6-2q|s`4EnX{7#_-z8!R06QMKqgY zQ?Uj5OG9xpbs!7i=4x^jz1cl~9@RF*njBCj5J%p-mJeDzBM#0(NE&!diB^+QQvfj= z?@mRymfkfgnevzB<$=^>UJTa&tozh9FhIdl)6m%N4XYQuNFCM*bs>;=+J2foWPtXA zM)=;+4o+!^Lb}{K9YOGUtR-DoIs~vJ5t3f?lQ~^C3~@VqKhwb17TOLE#84mzA^P zsfw-Qpo|1p%c@!NIh946KR&S+y$!4&{ zPe?V*o+k!bY$%QwgKR^FHWUveAapPoI#4{2gV2GR-h=XCs_Xu3|FrN{%v<5KCQ0(t z2{jRvNn%Y5g@#!o?)@mWA7#UKhFN}3z8P`gWdU@dE8zhb#Fpb<6z(Y`wj%AnbvEB z%0dv-LEv2jw@)9rwdCUqqbKQ-u1c$#0UQCbhL%AiH%%x5s|;;^+6dfY8G=hSrKSl~)l`|lF~M$)+XO+=QmV_GtGGuzE0g`~)eOe^&LKW>kXp3|e4(xFM zcHwQBS?;9V&?Ag{Z1)EBY%Pq%LRF((S*Dl`TT>fwe`+HgWe&JGs!aM`19No@)5n2omzb8Jp zs(0RaN}R8J+M?$gc8%wz zC@>UP<|fSrx|nBI_=)+;XS4A!ak4Y8iin6PfC&Z;pd1jyFZ^k<#N?AV8xtcN11moV zzbKes-~`Juva;$qC0wz8uItOk#0}IhEGMiACSdy4y}2+=O8QqT2Mex5=_9P z54qoz5a-!=gO7;|C@mx)BnBp6(hNnZX~pM(R>54!$OU#C%vCTNC=7DilYc9t<>ikY zgt-YQ3~~@m74Mn<_sr6?%NTiBg_(p!V5(qF1gZwP52pJ2+W${Pe_uEc6lUjOR{{GM zNWfeS6b3mLrh19*gUjLlAAW$$7890*nY}!})Ppxg@efc~gh@mg<_(~~auPu%78fNK j>w_4;GzA09Fa`qyYvB8;b3BWy<}oudvoL@X8x#Nl(xk)u diff --git a/.cache/clangd/index/SpirvWriter.cpp.5E8F581994752358.idx b/.cache/clangd/index/SpirvWriter.cpp.5E8F581994752358.idx deleted file mode 100644 index 481001fb4f2b8e6b95312c605a0b199eb88dd91e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36704 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

58OjlN1TsGYJ@_t*!W4NM6H1~*s=q{KnjU2wz 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

YYb>}1{2cY0xfdH=OJImRdYzWL@9>xfH#O# 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 diff --git a/.cache/clangd/index/SpirvWriter.inl.50EA1795D7EA1EA3.idx b/.cache/clangd/index/SpirvWriter.inl.50EA1795D7EA1EA3.idx deleted file mode 100644 index f8ec8f49aeee28f268145dce66aab377f83e12bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmWIYbaPw4z`)>~;#rZKT9U{DWQzcCaY<2T43G{6;)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582RP zSKycy7+DdR=9x7yE-j9anW0WihQGKnHwkDwLs4p4F@(-Z1kuGs$;I3t2BSe|&O-6T I>&qD!0I!-pxc~qF diff --git a/.cache/clangd/index/StatementVisitor.cpp.24A7EDAE9CA5503B.idx b/.cache/clangd/index/StatementVisitor.cpp.24A7EDAE9CA5503B.idx deleted file mode 100644 index d5fa8f70bfed858048f47fc2edd4d295976e8853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 814 zcmWIYbaPWI6Di|Om{*p`%Q-VPAhmR9%j@%4-;2GcgI z?!Q0Xe0BHw>*nG82Y>UQzJ2`Xr_(>Dzdqd(dpvQ?D>vUlu{~Zlmg^+WceiG{#Phf6 z%}GAR#O*gqKYHJ@t{2;GA?+iv=vb9-)5h#)-vUj9UnE}bTXbReW0h}#wL&&8FJ{g8 zw$I0U{Ym?y56|&r8Mn3{O#Tyn{2j;k9Q%aJfhMAFx4kMzC<)ji?ej%M_e(0KP^12`A(7a;2vVM)OYR%o8@-dE(Tjbvsm^ zxWWCl*PXL*U9S7^XkQ!)KnQ%ID|Pw zlts8jco;Z85b5nBEfx_~tib9-XqFe$Tl5Ffu%q$|p atg@`qtTL=}tWtv9JiL7T;z|;X3Jd^|wN&>2 diff --git a/.cache/clangd/index/StatementVisitor.hpp.1C6A06909DF5FBD2.idx b/.cache/clangd/index/StatementVisitor.hpp.1C6A06909DF5FBD2.idx deleted file mode 100644 index 7cc6c0bf381e6061cf97a966c0c0f6b1c7a686ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1900 zcmWIYbaP8#XJBwn@vO*AElFfyU|bZ1#BiA>bEf6WuwTD^N&eiq^4Cqz(2ruj^nRXPs?d7$*SVjXD}S9^<>u$GM1Ic1 z8Iz)(Or9})-Tax;=LB<2`P9wz?P9r(-o@|CT3=2A>C+k-3l>d08e+nK_kW1dElYcS zU1Qmth`7+gzNw-Y^t828%yu1hxcR5)$|4tq%hML}DMvBvu9%cvT$!7c#>~L*tTghe zpjZTh7!xB01FImjpfH$V-~hTG2-dZJyTq|TLsWo?2`a)WW+G+@lioDdzxHZ>yA%%T z*Ux1+Ri!mGa7e!jEYMTpSnJ;?9J=o}a*7oP2PZmnjQy#u5f1_E2Lpq~8cFI(J`Fe=Qgqekf zSwRHMY3#dyovi*muU?#q3l?J{+#)5{(R`O6L~PQqdMyw;#t){qO+a7dT5Nj;Z( zmpc=O^tU7HGoLIvy%2}A{K>_Kr8FHDTG^vs6 zJ`VkQQx26D<@3D8AzhT3R$K%u4Pd#AQ3{;PV79_C0;3Q(1Hgn~Nf@XalyqUj0`Ky4 z-FsN$8F^Uw*!lRuE(8*=BnvbIlvH7=AHLyYQLmp_#>mAg#v!HvQw>W+K(j%q2c{a9 zdKd*+L8%5N45PWZz`-K_NhzUsfol>EiZ6IjTnXe!32DK+z=L87kS8Ln0&@Zns|b&X z49p51R!L?_VOWR&d8(482%Z$PlrYSrJgidkQu;8Swc*3#%Cf!Zfc|9XU{{6tvnVwu zu^kxlu!4+n8SDIWz1lO}VMQ0?$Cw)tlZy&B!wM_LjZM#2=4|~e4J&^bwSGQi*}eKz zIjqECY~NF(WN&|{2UdtMHl6)9N5e5aA670fn)}U9cXepG3M&a154>BkfNfRMMp)iw zH29kus*n~TX9LacjL}ch>go@!xC)PgS*IJea$dAt1Ix0EuDfUIcjWuY!ZIl%hiln1 z4yB;Eux!b=`S`;lAst_%VHuIp!r0qRThG@Wmh~9V_0KUEyjki2%WRC%AU3G6|zi z1G`7_ad8z`wqV@NEq7Ak*hF`R;-chYeNg0pDoZF}gE1HwSe@rQOVWNNz{wG(+-mR`24`tsvqtcr_@UVfeK zv(umDuYW%M{K2c&kKR@8-C?_X@4k*Bru?^GrWqVr{h(B3pX$UPb|uaV$`{tRP1|MX z@`!JC+x{neKQFI2QhKm$Uh$%>iZ}99@AOSBQ>k*w?G#>X+jDZ-W_?cov==;m>G$)k z^H1zQ^6=ibD%-Z-_mt1i75?5Lz47(NtPa_(XVu|N4Lb^@q&c#`u-rYj?Ltz4Y))W)fh%K4^W9T6zNbw(Q|CA& zuRbp8adX3k*}=6%O3N==KdbGQu2NN6V0EXtCsfB#)kt@;r&q*Mt&^XVw7i{WF0C~4 zEeiSYM{mC2wSeum9w#S>oCxwZ)%2Z|GV_qoYEQM|NiM7Ayy~=?b#XUy=^CS__m`|Z z^~&X>SMoZOphU0SqPerKXq@4y6-j58mAmlx!fmw!eQ%SWEeZ*BYBSQwdbWP`nmH+@ zC-tVJPMi5M@C=`vSKFCQN8g^XvFi;9QL$M0n#DU*jBEL_Fs-R8&rB|gN|iT?xB46L zs^B5d!J{WRb*`PbQ(X7>@x%kREXmymBVQz5O!im)ww!lc`M*~SO_KNCbu(b$pZZp= zTce7>I`ZeE*ze!!aBl+3>?5T2n5qqZ#tYQeyWB;`a!~qi-%^^=;Dxew>|k~ zdgdEk(&4|I|L{&(LeSSDbzsfkXP$rMFwz*jQq5NI$Exoo)7*KMjZUxhpLj z-Fn+Aa7c?EZGC05>vKI0>AWcKZ(SRgH{y_PIk)P~hv1k#9MT(#Pxalq6g~lmbanWXqH*iQ-X&X)rJooP#4rzv>)U;wyqANJysDxQr6(a*f#hhdgJx?9av%Y7wIZx}H z(>bYMwARB@j~D4&%>VY1!!3+g^b~TKs71E2CYX>v2fu zMR|Yg+PJ(Chjh!iRc}57$MoTl-cWq1@7|^G2{@#~3+-Rcm%Ka|hjjFl3rBy;*Q~-J z9WdouuF3}awK$|h9k$t7HCk=KA-%OrD0jz!>sxV1@7eZkE?YvvNgUGEpI%r`=?uJq zL%K@aaBASWf8TIOGZdw!6@&8J_I|VVw#$PJ7`a&4IoP$q5e_5--sS1K_prt@^04x; z^YO!kVF?AO8k9=pKPe^jE^tkPB@aeUR#38lsXFI;Y5BIP)Iw&Q}+FO<|s8DAOrfy*DMUT=;_BKE5K&R7RK!VOkl(Z`UTT zIH7jh#A~$(Q!isWBh1M*{RM1~@)$B0VJRJ!+ZgSmk`?9`=Y-g#JbYFDMze|$mL^~s zj?rZsH@9zjc^)iW7}d-z4UcSJ-v-N6jQqlbI5!qSE5bkSAHt7MNe!h8vfW5y}lR5ui{E-!(lPzG28!7>}8 z_@sk-_XYn`(X(7rn$*a3pAl9<=uJ6PT9nW8nh~ayp|~iySRa(;S-bxTioCTn;9zEB VVP;^1WdjBVQ2hr5%rFK60|39WIbr|+ diff --git a/.cache/clangd/index/TokenList.hpp.3E1793B302B953D1.idx b/.cache/clangd/index/TokenList.hpp.3E1793B302B953D1.idx deleted file mode 100644 index a4a6bc56bd459ff356113d67b64330bd112d0a40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5406 zcmYk9c~I5m8pj_baRGT*UpSn@;ehP>a@ZGH&*88L;#k_MDQX#A71FG(OPPiN3F`HF z)3TdpE@*0kW_C4d>}rvwW?d<>)NGR6Q3lidyzk7@`!d6Kcs}!);SV_He10_!n~nPd z6isnFUsu~O=>Y)n!SDKp*-v#j0W5R|cz$hr>zS65iEc}7B+e`k-Cn)p;>mxv9%Z)f`X<8uZsefiw4D?iB}U(b##8j<__%^6$n z`DV@=XmOj+(zQP0;h>A-UvbKvm4DPP@YswC0Y5I7?0mFi<;;m)^LDK|^WM|HAAHND z^+ufSe1g;3+DNy}%kO&p@9H?iKVtW8`1H7C+4Se~cMUma%Uo6c(p1lTw|cf_zcucS z5vLc&z3hGXLDSOKM?LIEw=NqtsNtuJaxtedh`M&W=bM2)k8PRtbj_B& zLm#a3;lJ639-lC#YvBt4bw5ltmQC-fc;mZUO^2=}UgSx3^Q}(vzTxW*oLQUJck0c` zPclyozTBVn^7Q`L6*Ya{ZTRJ&`9RND=h^q~{nD~}+l!|b#;ocMeYh?p zXx;pi8`mbUnAn*2(xt=K7QFVU>t07pX7{f2uKOQPTXV;G&fc77pnhK6lNW{pyte(h zd7nMI+=;>PGO+t`KeHSdhJSB|&8c+o$tP+Joj=}kVc?E}ksG7sDB=C}b2c{i{A(D4 z3>56#9xg`-rTdTnUOVag5e!ODsNpq6IZF62?d?79KDOMQK`;vOJU(2G5^gdl_XNi@ z#=sYa5FTQZql6u&tVilnJ3SaM6inP?l%s?n&pq~_-^>(G2B|3I^4w54N?3QMrEYxn zWiJK>6e4&;upA{AzCHBk58Wnj2F@sWa1VbuN@xykUfj8PIA`F7LI4kllB0ylr@Ly` zW*7J~u%Hmf)C=~Nzvm7Pd+xzubebZ({Gsr{1#%&fkO33;; z&~@dN#ux@cD8%yEC^<@)v&oRPYwMvn2E$O`oCnEKLUQ7@JGnlM2@G6O@aO(UIZBw& z{`iZ-+nrMx1fmelqYZMDaQeHpHFJWuXE7Lr0^`gmM+v4WE!L)e@7NgRqENz10^}&c zIL>-zM!l7$SM zP;lq&Mmb6txSoH#dF7g=3<6LH<6%ZQO2}G$tY&NNszwGWC=~L-5IIU{8}NwxxuR$_ zgOMmC@g#paN_b^U?9FBWy|jiwJ_?n*GDwaRTC4WW+8bh9$G{JTP#$WKqlAW+COcQ1 z-T4j!e-y%bcz_%w*#Fl2b-!izy9~Tg2;xD(a+L6)+p;&GIoz{>fe#A7JUCE}68@N& zX9ISFAO&xe(2ZLf1#_%yFIZ7C) zPQN?MJof_zg(y_xwBu(6 zi71TXqk`oqVaUf-Nu z=ig>ffWl}#I!KNZ&h6(5-peVw!+@hOl8+3Lql77K=jMl9iM-EXFbdw>+agB^FuQhY zeZ+88J5Ix8<%DnbNwxMY-c5~zSOgAXDjUQiYY0=%AQmx0m?{RbNEpJ@E{H|A5T;^5 zEOLb~bqZn;DTJv`5Q{V+OihAV1PNg(5yT=x2vdI`7V$xtssph|4#LzLh(%}+rouoh z@`5mR1!55ugsCPFiC+#v_~_Ah@vRC^mZEkj#5iTK^$nwk0?hfwwyhImPsCIdPhjw{_ zr*?UPmv(uBw|4n}k9PTjuXb?|&u8@e{J>AU{J~$l3}Dc%00_`7BN(;I1SahYgh1^w zgIT+RAV|9`V9~B%2-dC;2+^*QFjBihAym70_dE(bWYs|?Dts~pO;s{$&ts}d@;Yc!13t}3X~u4<^(t}!r1 zyK123uZw~nU-P2o=`~Lok61K3VTyOeqTC5nvLhC~PMAU+v8Z&yl;?;=n-iueM=Xk* zFr_$R(cy$Cz!8i3CQR9lSTr|bifzQAvJp~LMJxiBFqJK0k+p=WXAz5- zB}^5ISR^cAYFES}TnSULA{Mzym^u})h*ZKSs@`cNIU_%f2tzzwNjDJplg)jX_v4 diff --git a/.cache/clangd/index/Types.hpp.CF309E480C254E5C.idx b/.cache/clangd/index/Types.hpp.CF309E480C254E5C.idx deleted file mode 100644 index 223a5d37406e00c874d0e4a70279a6dc968ba641..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1222 zcmWIYbaUIs!oc91;#rZKT9OE4GKc_iaY<3;e;_@diGiVF&e}=7*@q2y+WsbQ%XT@< zcX)YDWHndngiVL_oJ+49JF~G@cly@-b$%ML%&oCZZgpS3DkyiKx_KhwC$q28M!#b@ z{_~Dlvt6sW==gos*NJZHA5IYIFEZFEP@TjTyxwV9Gq?Ii?^|15r%Vm_wD8W9Z!*67 z;*_SZ{#185PI?l?OY}UNkGrx29uaAvMSI+TWKF=XnP^flKA~S}oD{J|L&s&6xx*pzIptt5|@J1c6 z4d-`Dy}HE&FhnA?bv_rKbO(r%6)B%Kh%E`Z{&G3nW4BcH_3yMfuU4= z>(%ob&$;*+ScDjOM3_YQ!2|;*FpLB_8F^UEOm^9Ed%QK|V-gl%;E`9AHv$t396$v? zP#Bu8dR^yYDmN1wKLd{xyOao+0PAO90P2tFEHIMYeI65fCT5@`WjJJn!34sQ zbM~2?6j$^9$j`tEbb~09C=ZxGxS=RDt(Xazrb7IL)L%@rVP)dskz<$Rg*lCfN1k1t z7Z#SVKxgCv2R1B-VA4QgP&mUJ)u5n#=X)eeEKr!8gIx*|?!Xj$bHkRhB-L1;O;W~E zjVK7UuK`d5s;Nh z3I#ALVKh)RBq6}m!)Rts9tjQ!VMG{6IZOG$?BW8a3YZ)$O#saTB?y>1i&AqEL2*=E olw52LV(=Ix>a3hud}uQZ7dI~-12;$v0{CDI1_oXPlMBHF0R2sNcmMzZ diff --git a/.cache/clangd/index/Utils.cpp.60D1E0CC138B8929.idx b/.cache/clangd/index/Utils.cpp.60D1E0CC138B8929.idx deleted file mode 100644 index 577acf6e05c51ebc2144726f61889077cb98525b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4762 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 S8^mDWFp0Ii(^V#dfdK%p4VjGq diff --git a/.cache/clangd/index/Vector.hpp.AB1C1967D698D3FF.idx b/.cache/clangd/index/Vector.hpp.AB1C1967D698D3FF.idx deleted file mode 100644 index ec08eb4136e45dc8212a7b356fa17a51d841fdc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6420 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 diff --git a/.cache/clangd/index/Vector.inl.F0571DA066B41DAE.idx b/.cache/clangd/index/Vector.inl.F0571DA066B41DAE.idx deleted file mode 100644 index b5bc3725af5c64abc7baae68975057f1d857d4d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8208 zcmcJUeOy%4y2ocdTVY<-%8C{j*%ejh4NAv9_)>S)p z;3}3M^QDfcWMO96L83&nqbG?Y;8pS(p{W^BdVS4z3*)9`XHCO1Yv0fLPM+4AL%F*QGYb9uevv(ImI z#H{e#zqu@Ht@P=0J#PeoauL~lXJZLj-Se$IeFwS&rVNz=TudC`@^5tjLxs_ zw_)SR(raUX8gsX7?)y8B1)rMs$AYG<8&fW;e|`A>4m@6U`I$cdwz$ag`1ScW$Gm!Q z>V=B4NA4b5cGR=0`EM8BD0MITbkn7&#iXY?{YT=r**+=zuHf3@zZ#G9+i71otLabwF?LDNs<=?gdFZT3 zol^M5TS3!)pSk$U&z3YEJZ)~6J?jg3_K|LOV182LFJ()2Tf3KKJ-AbQ?J&GhF?-Hh z_2OslFYiVUc_*V0ep(TcGrV^r`SGKyZe8h;c{8GebUJo;@~TnS>=vqvjL@-a$yqH$ zs?(g)B6S9d=t6Zw?Y%91;(;UT#I>Kqs2SFbFrA(U2>&_SRnnE;I)NKd zZcrRooUX>WV*26m`1_;n`9Dsyhe9YHHiR2Isv4p)9KJrh@jsiFc*11p!-sDW?+ucy z4zUjj7}RfC`qWc(IbjM|xj`H7PhWLR$QTbkA>@Oc@7FYhs|q-{!A;cdse{UW9u&^bV1Mn8B(~xHo`wHHPw=8#TC31|5i!d?Ju~2i5nEf6{V|v zTzvwsXy5yD&(2#vD@y?zA3h0=lMtbfmB)tT{qc3Db{Bs9!Xy42#DvFq)QFIX!2Hu+ zX!>Ofxn1Pn!Fl36&lfn@J~&{IdaUO9_%RWa6bR!Jbb-4IqSeRL$J{u9IV0xpkq7%v zR=~~;&Vl0`F!fRS(SVZ&Tv+zIq0?tfmqE`Bvf{GR)ks%lUD^p|G3n2OL}0Nm;XK}YkS!DFHl`yzReAia|7SzROeL9HZN3VCjQ)YbfbS4 z<=`#n;Wo@ZEU=5nl?#^ca!lJKLtj40YVfY+2E*;c0|q0deSI6BiG5WD12@Qx%S~6K zTu}jE1RXn(dFI2_ulWybBVmoCkD6)848>h6pZZF7e0}rV3Rw94tzc_~aCNk4v>grZ zof*{o#lMv7lp&ZKq{OA9s~(ppFu_@P<!W-9;jV_O z9@Q1%3he*>_?>6Lg2@6x#C#r%2d0#cXFERJ zbxj_6L52`+P|8YU)mTexV2TO$`(IZK?z}34kq;Nd6{M@tuIPX#s#?F9aU`nxmJG>! zcolK2;@eEJCIz-xmws&iOV7Q_4SWGxLtHi7V1RW%z@X~-!Ty<3tl#;c@G@a9^N3Ei zBnKjTVab!Fhr&dqAWBb}xbUE6ipSG(@VnGWIs50Xk%^1#1-ciUc#4h{*Gp$J>g5rX znZc~bIzU+ngy=CRQ^uXFAvd`7=zhvP;L%VdL~1A&V)d98DT{+R4aGyeh7uq_Lj#Nh zWDIc1280cW&`|7vWI=<$iQ?`Z})(|Vk6lImfP|3L`LMVHk7+xn>WHC^STW=% z+e-|4i4}7uWgij4N5qPHg0h3eaFAFrT~XFbf?J6htF4b6twa@kf*4N_8LI$gCrIcC z;u73RjGaWrV@p{l3GE~HUAaotL zwCr66iGr)ZSOqf58Oo}_T?H{(PO5?dg11BPb}(aAq-;Alw}V^oUWnKWeegJQe?sD3 zNE5tSGH#aSK*?j9rO3^aSMZyX@l8n%NKE#o)bC9x2^r&nCltS^96n?Ri}9xmYJebV5JO)Gl@r=tT%c zMTF{-uf{Je@kY#Gd}5!Z#LM`4`DMS9!~u+BKH!&-IDiKzSnZLHIN)MUU~2*e3#yO% zHi1`gGXyt-UdyZ*T!PzSU^`^sn{csq7}5?ykuihtt@$J=PK#=kU-nB;9O(YG|FweI z@8~y9&uyAr0T~z4^K8zUh+3{R^|H z+tQV!nht(!F-}Cpj;6?R(m8d8sf_M8}LhE z9Kejv2YeD3FJlVj9`s9J9B^@W*qXH-Y=*wgS`W5BaEsQ1Ex=m-zX#3jU_p=hJQ&sv zPGnToAr77lBTtYhOok4gTp}wV3X_S0hmNTUD29fQJxvfPxEV~%+VN)aG;7COz|^80 zZvjt>cDx;I?V#Yo9DJdD+rg{ltacbAxD)unbK$9Ta2V7H*@7=Y$R*(+2fGCP<3i8) zIO!533%&~Gt6MIrAz!gsk+mAShxSY`tV&FIn(~V$$X@)?jLgvL{uv2y(Le4`hPK*xX5B4`O_+Y#N)L$DH zyzFA9!G0RT@laxR2BoKgK|=?t17jU1D6TP0^HB9SGH8hP*f;QN1A_yYxO;PFkjPFF zg_YC6D^KJ)h{8(a;A=9U1`Do9>1lMt%iJufnZM+iMa6s!!C9VhfSQ7}d*`-;%7h=P8g>=L1uh=RMO>^7mdiGn4N zvU`NyBMJsDWh;QL00rMaWov=11qEL_Wt)L+1_j?5W!r#m0|jG@vOPfefP$e!SvSyb zP%w{DRxZ(UNx{TR*(Ql@k`(kif1X6QNeX&_D?}-{PBP<>q3nH0|Gs1qTrZjH#gW23 zl}CZUNky-roA`jQImOGUY z9{vy>}i=7uReP-q1w4zH)Cl@uKl^s{)HT%51l=6X=B$J;$UTxtxU4xj95ar zJN*4N&WH-o_h9>iNKCluuU$79;ko8_`?_tsj7<^ufWOPe0iOqgo3s_Y3HT+A25SLZ zi&g=&K;IUv0%(V*c8JEp=&SGv?U0C!-4tJszkA1t2f6QjGAF3`PA}j7dzVSUxPKpq zmPt;*E2Q8Rl0oo`QtuaqJ@$8eYyS2hXZWqRhVwi}nZabRp}yy&k@u9@Og0;8ZB81g zO_^#^ZFrbCY0eU5F{T(B3R6xRT}oMsDaD3KgcD1N(olBFFhQx1suz@H%Cd>7kj1j1 zG?bk+Oi(st>jmYSa&4l1?sq7gB0rpx}Ct z>mgJqqtK|W$kR`Yc%xz%D>O%RKA&G5}rsW}RFhcN22s#NAl|JR)2*jL(crB-& zgh7HkK<=OE}DQ0$f{@4utZiSEhAgU-QF?fCd} zFj?>wFkS&!@J%q^1Ur6-L-}_&sW%~0%a7cI(So}`?t)OEaJwM33z7x@0Pq9o1wVka z2k;QqR<5um(^|=fZKRJ=)=C2fZ;(tIB%4sk8>EyC(m=r*CDh6Ha&dcn1ly;cfGaphCoee0wIRF=AhC3A~?|7Tme@QG6XrM^xV?)&BcVSl=+ NY_aZAo+jbCe*n(b@h<=X diff --git a/.cache/clangd/index/WriterStates.cpp.E66D395EB560B690.idx b/.cache/clangd/index/WriterStates.cpp.E66D395EB560B690.idx deleted file mode 100644 index 3293e688ed19ea49b392a6cec643ebabe26358ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5172 zcmYjU3tUrW8$Sn;nw+tTBRbY9I$0oeG&`C@bfpKdwk%5fiQU^pRk)|K0 zp{3=mLO&628Tg^0XkOA16%+A(*DTY#mUsEy#qZh9e*5iro@f6(@ALeh+q<+eTCGe# z5XdyfUOM>$qdP$mSR`y8Ofy#xAc&ixNbqQzs|WbyOd+=~jf zWX_sededv*KL@^UZap$OnA_R>?);aJ17Ch|XvP}T4B|}4-37-kB zGjHXjZz?G5skyszN9OrIUvymc=-Hzma8`QZ$&Cu;ZuUEx5xS{U9?!e^_1(7FS9xEa z@qgtO{?NO7o#AMn`)%3gHC@?3MPKbZJp3QgwrhS8QQ71_|2Q0^PUSAWIFDxO_wX@cFi~ok!**ynb0b_pgQ>XBw-B zNrTFGD~eCt;Y|GF`-JaqYiD%cefsj^>ORUcC!;3+(xX!wer#WOX>--~jT<-LzfyZ+ z_<$AW1FAmTxre(A##oa&y&!v5nkJ&JerYPK7Pw6CB?mkWOFBOmofH2j%N4cZs5 z^-R}X`r~-1#4jPQK4G`AAtArAv!r^%n@{MBrKVudp!Ppr-do|m!xSSHmWhJCy*^Od z{6+0JX~)`v?z$Tj>sxO`-fsIivS{&&b)K9*f{bTPOK)EfQ9TSj)LMIS?||-4>j$B| zeDZy7MpoYxQqtaWVHp$C@WT~p9Z^2*r*DqD zQ|hVzc>S{Fen#c64|zHKG~XA?kNT(=4#{k6ee|qnL&!3Jw_S}VR()#Qv+(Sq11W>Y zExO+~@X5%hdnAXuADF$pZZ?fQ@M?SZ$@aar(c7=qhY#MX{M}vj&Di53j(xtkBga=& zdGhe7bDhoYqY?%xr_OsmYqj!$Mfd95i|2cH?CEISTy0rSHDCTsx|m!x_t?VRv$u|O zhaUZ4>HXj<#`#-1gnvtJ^%PZX>g_Goy|>ci=Fv53V#@fTb*)8INU>K)G5-AbZSe}R zP>%PE*-ILyT#Oho;mgZ}t)le(r)~ssYTf8|nZ3`pmvD>R|JP!=FdxX&C_^a%!x!2n;ruUO;H^JfSS->u(*VfUGK z-R=ni6p@Jm7QQ7)6Typ!Bsc<(e!!!Z(w5XGIl&Y$0Rs$tLzE_r7lr|EyxtG!TzP2g z8DXb{B6Jua;)@iTp}e8k2XFU&K*P%QzwhbFdY2;7F~H8ZM`@yXQP_enryrn`ZhZWm zC@hsCCSrh@Z;sN)d2*Hy=I;3o1t&kjfD{Z+@D(aeFfVun!5KWD-vV9mchb*KR##I* z1_tEw^P@B}o{Z(>HwTr)6MyRZh$2!kK*d*uYu@6$B_lXOs^3B}8kBtbrzdq3F%|>- z`Thz`ATN*=#nXpB6y5wecP>S|ive-`IJqW-7ZOfzXwQBNnIW$~_~q2ec@&X@0XDuZ zN)yS8WJR%Sy6@bgaaWd5L^cMP_@*dLI4_*#WXI#!Qfuj=R*J~NfNFkqlt#f*U;q$R zx}kjagH`q0C}JE2FnlIl6T}O`Q4AT_@57EuGX^Nv65APUJLlW{XvC0Nue}(S}eo|jX?_k z?FziO{(bee_^iHR&i26QP@hm5=z=c6Xh(|x8hQh(9gP9%N&Ku|wfj{O8Z4&iGrGBLW6fi0jFvorIydad8G`86lNUmE|l; zl&DM0ax#asI&GFSRY<4T<$)U%((CnkzypQS_33#KAB7C5hFoxwLiwrrxz5f&rc_g| zvjmYj)tn3NQ^=BP$#qTwWJ|T>I;$DkQ|-AB8ilG;t8<-oij$XGOXfmC!2%}KF-U+= za0sg%;{((M+B?Jh9^V<}K_P#=f2Okmkw`DfbPg31HzlsjMVhW$SHYs9TwlSWqCC9< zsDR(&GaVBN&TLup=kTT_VPUvHrpu=*A;_7gE_z~MfE=r3J~Dr(o7p8Je=Q-dMPRk! zJ;jGGg$7qGC(D=q6X{MNRiUcfl|zHoPzAwa_O1C_nQXWO)N|-byb7eYM#l;mDMs6n5K};YMTjRgl_8nethTLQMht5BpEW` zLVyY-g)%r?fTl~P%it#hR7XncNExIM5{-Ft3~JyFPRDA;cm_3ij@6E#4C<@bUsU#; z-fkoXC?+^&7@)ozRhF+mmpd7U&FGjcU^(^L%d;(R3B_1#lpB>mne}wb`BgoOi}?Z+ zPsarjv!xH@JQ26d@Fg0Hx7sLMRqY5S<}(5tKvc2qAL< zWTcHka08P^7YbeEmCz+ZU_*ecv{eYXz{Jwig)U+%=}IBcDL^%JjS%|AK{{PW3W4;j zOIx0I{2ow(`HB!nNPrkgPMS7l)&43>Oo}`u79s)9FzJp(2c!cfSnXJEpw|6*@b0Z8 z#K)vR;t6Vf_E(YQC84=T(DA(bO`v3hc73T zC53UqSdxq*b4tO-o5w3(K5g{Hlak~P0=pFQCcRmbFX_vY{7HY7BqBvDi6I%5q#zY6 zDUOU|Nh(ssk`l>8mZT-MEJ;V|SdyO9v!rw~oh2Da153&$^I4LKG_fQzX=X_l(!!E# zq>UxnNjpobCaYOeElJjrPC1c?d)&0%Z!s@C(_@P8G+HwB?bgwN=R3!Xg8%7t(3zc9KGLF%X%Lt%#>f}=2i-))2Ig}Qd~x$gtTI>g)JSS%a60?~+jZPw!0xG2MWongc_;QFL!J=}?Yl@;kU#RRPY+Augg}I8i8>n@oc}+|t|>8d@4( zZn$YQM2(~4X3!8F&JQ<-hWy|e$u-izAf_|U zCh=`1+8+T;6cR;?5SYV@PtK?zdVH%$P^5qd6pD+8)3_>0C0D6km6Rw?RJ$rkE7z)B ztmvY3$W=-DXgzXOQhIbca#fN+VMuaSQobTT$yG@vg(=BZNoIvP337_BhYCxQtCDOA zTav4i>oH=Mhu}kHab&BiXl{3v$(Jw|B#@tAuOzR{4WAE{0gi4 z{|&(x(yT<`VJsFM;$jv_`m xza!MH$AVJRR1p^AhQ^17L`A+8HY`RI91u7(LLL+wG+f4rCDKsE+tL0?;{S6R6d3>j diff --git a/.cache/clangd/index/WriterStates.h.3EB1FA8425607F4F.idx b/.cache/clangd/index/WriterStates.h.3EB1FA8425607F4F.idx deleted file mode 100644 index e0821157f2760fa79a93501f7ef82f45cf1642be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3334 zcmYjT2~<;88opss5^jBfq%kCrkehvfiB%9mgB?YdFchjmf=byUh+%OQajESosCAhc zYfF_Up&=BO~Xr#iN-1qugB+i_&j3fiO2?aRB#%Q?XNzkKh$|9v}sXc|2cdgM)&vG~X*&#~b zbLZ@|v-+$hGp?k3Xc2rtpV$z!z2~*|l6kq0`!qvcd*@WBZt*1B>vqXHW?eV@Q1)ok zOwHRFL%T!D|Lbb|&x7)E(QrZc$M!aPc=RH9*7Xfj z6Us*=e_0+nl6bOfL~;B`eZ<>mFV_6C|AeeLVyHzJeevEI>C&c&CvAuOm$hfQbEd3a z_u{yx=lutbJ+Yz>hvZu>HNSL5@nReQn5gD&y0N3DM#6e)wsd`v+!-`}>*u$wt@}*) z^hn~;1+&yYebswTwB%mXQSq-IjV(&r|FF1naF?Mi_N(6W=ZYrtzLnl-$v<5}Eg$Ot zr9Ut0=G45Jd}`6sg4n%(TrmFkjj@LY`yLe}R95XwOw~r}4m5itn;cWsVP$C*qM(7$ ztekfb_KyhP6P@R63+vi2RhII}%+`BZf8Bb`BXjgd=Qv$)!MpX}HmDcgou1(si$1g4 z6TkY$f%nD_$fA`AO)E?1F6bG!ynp$@qZ9j9H5Ik)NQ4hQ3oo1Y^o8Wmwld3?We>79 z=O#mE@u3#Yk;o+_2j=V?jd~Po?2Y-~T&% zb4i)dc2clc9N&1L{UH@$Za4?()>XZc7!1J8L%%z1Ton=ufep{iZy%(kv^3xgCxetY z9typ6cy^y{RRJG@S-$T9(o=d4AwQ;T1?_3X1RWtrDXALpBZ7P@xOOz<{M2uW4F@W` zx-e2GV}1cXL&uL;(s}!IMrUp;1PNpX3uUnae)J^Y3XfWKZP^oU1q60NFi-|ecsa~R zxX^l~{dUX+Ed&NakWn(+WK@Wcu(S2Z$i=JqP6%Eh1e&7p3L?IbkfA#^emvfg4Z(Cm zFjHnu4=cWYcW3c8jhJ8}1O=r?0{qBe-wNX5UsAg#_HTq>CLtIpBd5tvE+IeNeB`N!A99Ife2M~ zv}XU<$2(3zU?c=NCC9s%8tUueY~PyTgoEG=1TzRhN9i~Nld~?x_0*;P8UmUSG?WIf zAbH8Rf~N@Pc3gaQ5CSbBNTd=Q;7^$XG*Ub;Y2SB`C5~a=<}6vClayo%jaBj9*xoxCO(EOIVnABue1(1`9(Z5{RbxcY~A} z%6$J2AXU1``~BU*QoK8Py4*#aPFlunCeT(47AE~;mUoJtF{oJt3DoJtS$oXP+UoXQA{oXP}DoXQN$oXP?$ zoXQHUoQeiCr?LSXr?LaPzak@s6=ss2m6A9R!%V)jFgbG!GpWwP#3UGIvYdsVS8o>2 z`Jm|v9vCqtmXTN{xr5nEu(NCu>lkL@oP}Z2r(y4O&mHCo5I>ABWl15NT65%1z+w`dQMrd&~)e`HU|-!prj%n4dBB|c;W ze~8Tc=SAVJayS-&khfr)2wrXfnn(? z#{h=n%G@MHpzZ$(8YJzfwVhyNVrF1q;%4U-2NMjOKsg2mMkZEA^JWSjQ+&VCg+U^2o@01QrXXIjH=U`U@YXcIsmzEaZeQG@yq*{;L1g08B1670U nf~hV_%}EqQ(gk-GLvc}ZF<2Q>+7_Klz9|u=jEoGx5QPB%rAl&* diff --git a/.cache/clangd/index/main.cpp.41A508184138A40E.idx b/.cache/clangd/index/main.cpp.41A508184138A40E.idx deleted file mode 100644 index f429e47caa96bbf5fd8317bf03e09df5345e7268..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1630 zcmWIYbaM-1V_x5cqojOXkGm zo1S)a{hpwv-*_QNNaIWD#HAmjBBP^Js*}IHw!R(X;pOpNQDM!_jK1`~KA~emWnce( ze|z@Xw|9@;{W40tzGcnj!#NYyNR%9^OX2)&x!ZD4qE^mx!Mh^D-@JL5YYkcCuZ28{ z-BP$nMmo3WTJB8yfJ^fl=J~yyD74si-X!JJcp=8KZ+fh*?&JNPV6f-M$Af;m?023P z5qW!VGkb`2*^Cft1yk3zWmS<9dQ#sfFP*3H;nq#HoHZ_oY7Q~E*|Ybaxv`<`UO&g~ zZ#yy-WcP$IABkgSDc_*nqgBOTy|g^5Tky+*JJ)P-XWMvJ&N`TI`#8rFmxwuMqSlA) z@w=y>zxdWeZG{DCf9tvmG%ndZ4Y)4zd6THdr>GM#nj*_gVIcreIR_F;LhX7{GarqhF_Ew#+AbCRpE z*LrUDeR;KVUS|(e$F)Tloj$EHRl44KX4Rs{P6>LOm5lH1eh?mKuO+9q*KtS8+6UXh zmzInz>)X6E%VUlcx82!u z;8MtJuZDwV{{-~EdZx4g;rj4W>u2=kp9ZTm-`@XydcR7|$^939@e7`JyCp0+pY_+F zcPBmmF|;c!m|9$!n- zWbUiyEQ~zLd^&t~FzNrP8qr2Owy`tuD68bv<2x1b9$E$bBI6CgHF{6yKERU=VOjxkqy64<1 z2Wz0Pmb{iSOt|fw!0G$WGaZ3$<`v~tgbDvV_;A`)$B(W+VRmkIA((J=;=R=MtlK?+ z4p8M%6@xjRM_HRwTNK7ybMJQT3T87epjUV}cz9uYWt2rZMB%*e>`$c5McQWqox>@^ z3Ab19MEb6)>^ZHBBFd6Nl2S0e#r`Zep5*7w1FDwek%Nav@BVk|qnxiSVCGR4;1WP` zju@915>J6k0nSs>;agOdc5oZeV@fJYx-bi3UjEwu*ZVg{+E=8Jp)D(yCJ(ROqjVZa!hyVjd zG=2{KDCOEOC_%P>px Qb8>O>@QNykG0HIj0BX`vrvLx| diff --git a/.cache/clangd/index/main.cpp.C4CF7810A05D703D.idx b/.cache/clangd/index/main.cpp.C4CF7810A05D703D.idx deleted file mode 100644 index b813354253a7b92b32ea65d025f69eb5acb23251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1690 zcmWIYbaR`;#=zj5;#rZKT9U}Zz`!5^#Kk2=nN~~;46lI#6?4`G`)1!U5coR(W#+`= zn^LPoPb|C}!?bXzO2CWMiAz65MMfJ<+H3gxwe{_q2`v-eDJra)Svl+Z%;kZHA`a=* z|Jk|o-n~0@yZ7EwdDAtmbk}^|NuteuH_q!M?oTs!H}Pq`YqMZ>(xJN5`ZYs{;krCyn@+{NZk_cHU*_2*TJ$?8KInO3v!p3 zO+DwE*P?a(myRF1pKNHr=alMK^Ho%yZ58otWAomc*SSB}D{{)(H9Mzl(m7lCSGf57 zZb!@Qd#&$EXL=`zIBXKj)>Tg0Y_;8gl?%aDCFXS!x&4jHPVEZmPi89Sxe)Q)z~0mN_C1GJv#nn}m8kaJ{PY>? zw9>6>StN3v@&62(zeVH+*N2zEpY)f1O$-RWwfFnNu~t)k9G2ZpDX{V=v#Yb~!-RR1dAWIok$76XMo2tQ-arITl2cL;#yh<07n^F8 zl^Tf;O)R^d?*g9-mU_;A`)$B(W+L)f|5g{fLLnJvnz2otVOyqCJ3b-M>MkFqM4su(Qfc$Brcw2*iPoCcyWxi$B0*REhT^8)&p zhl7U~W|EAuD2FJV_nrNT)VWCeOrYa9WjNv1?T)>Bz1b|e2`DVfBP#>b`|1CmhQnIR zn}Nb|JaX_rtGe!J-F|lA9H5((M3tmqs(bgpTOZ|oWdYF50$c(}t`y@EL*glLDZqJ3 zI(&<&(hhC|nxw9xt_w5iNWofVq3Egupg=L`VMSd*RIRaE9swk=o69#HA*R+Q5mT*RH+a@>d0?=MvVO@AI>~Nb} zvCiT74JHv~E)gzSm}(JaVG&`t@5^^B=(*w+@BpZnkA)BJL&vUQArvXIo26_ylr=1fLcxZ4{;EB!bw*Majj=Aci7{fB+>JgMm@`(W-wHwgnllnUoY6 xl5s}P(w-UVJtsN$|K^{6`R1FMn-Hbb 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 Date: Mon, 14 Apr 2025 17:44:45 +0200 Subject: [PATCH 03/37] adding sanitazation --- examples/wgsl/.gdb_history | 50 +++++++++++++++++++++++++++++ examples/wgsl/main.cpp | 15 +++++++++ include/NZSL/WgslWriter.hpp | 3 ++ src/NZSL/WgslWriter.cpp | 63 ++++++++++++++++++++++++++++++------- 4 files changed, 119 insertions(+), 12 deletions(-) create mode 100644 examples/wgsl/.gdb_history diff --git a/examples/wgsl/.gdb_history b/examples/wgsl/.gdb_history new file mode 100644 index 00000000..ac76c0aa --- /dev/null +++ b/examples/wgsl/.gdb_history @@ -0,0 +1,50 @@ +b WgslWriter::Generate +run +n +s +n +s +q +run +n +s +s +s +s +s +s +s +s +s +s +n +s +n +s +n +s +s +n +s +n +sq +q +b WgslWriter::Append(const Ast::ExpressionValue& type) +b WgslWriter.cpp:290 +run +n +s +n +s +q +b WgslWriter.cpp:290 +run +n +n +s +n +n +s +s +s +q diff --git a/examples/wgsl/main.cpp b/examples/wgsl/main.cpp index b8734efb..a0670d44 100644 --- a/examples/wgsl/main.cpp +++ b/examples/wgsl/main.cpp @@ -11,5 +11,20 @@ int main() std::cout << wgslShader << std::endl; + std::cout << "\n=============================================================\n" << R"( +struct Outputs +{ + @location(0) color: vec4; +} + +@fragment +fn main() -> Outputs +{ + var output: Outputs; + output.color = vec4(1.0, 1.0, 1.0, 1.0); + return output; +} + )" << std::endl; + return 0; } diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index caecd670..2ad14bac 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -34,6 +35,8 @@ namespace nzsl { }; + static Ast::SanitizeVisitor::Options GetSanitizeOptions(); + private: struct PreVisitor; friend PreVisitor; diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 4f0665d5..f5d175cb 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -14,12 +14,16 @@ #include #include #include +#include +#include #include #include #include #include #include +#include + namespace nzsl { struct WgslWriter::PreVisitor : Ast::RecursiveVisitor @@ -173,6 +177,29 @@ namespace nzsl bool HasValue() const { return workgroup.HasValue(); } }; + Ast::SanitizeVisitor::Options WgslWriter::GetSanitizeOptions() + { + static constexpr auto s_reservedKeywords = frozen::make_unordered_set({ + "write", "vec2", "vec3", "vec4", "void", + }); + + Ast::SanitizeVisitor::Options options; + options.makeVariableNameUnique = true; + options.reduceLoopsToWhile = true; + options.removeAliases = true; + options.removeCompoundAssignments = false; + options.removeOptionDeclaration = true; + options.removeScalarSwizzling = true; + options.removeSingleConstDeclaration = true; + options.splitWrappedStructAssignation = true; //< TODO: Only split for base uniforms/storage + options.identifierSanitizer = [](std::string& identifier, Ast::IdentifierScope /*scope*/) + { + return false; + }; + + return options; + } + struct WgslWriter::State { struct Identifier @@ -200,7 +227,7 @@ namespace nzsl unsigned int indentLevel = 0; }; - std::string WgslWriter::Generate(const Ast::Module& module, const States& /*states*/) + std::string WgslWriter::Generate(const Ast::Module& module, const States& states) { State state; m_currentState = &state; @@ -211,13 +238,27 @@ namespace nzsl state.module = &module; + Ast::ModulePtr sanitizedModule; + const Ast::Module* targetModule; + if (!states.sanitized) + { + Ast::SanitizeVisitor::Options options = GetSanitizeOptions(); + options.optionValues = states.optionValues; + options.moduleResolver = states.shaderModuleResolver; + + sanitizedModule = Ast::Sanitize(module, options); + targetModule = sanitizedModule.get(); + } + else + targetModule = &module; + AppendHeader(); // First registration pass (required to register function names) PreVisitor previsitor(*this); { m_currentState->currentModuleIndex = 0; - for (const auto& importedModule : module.importedModules) + for (const auto& importedModule : targetModule->importedModules) { importedModule.module->rootNode->Visit(previsitor); m_currentState->currentModuleIndex++; @@ -227,7 +268,7 @@ namespace nzsl m_currentState->currentModuleIndex = std::numeric_limits::max(); std::size_t moduleIndex = 0; - for (const auto& importedModule : module.importedModules) + for (const auto& importedModule : targetModule->importedModules) RegisterModule(moduleIndex++, importedModule.identifier); module.rootNode->Visit(previsitor); @@ -235,7 +276,7 @@ namespace nzsl // Register imported modules m_currentState->currentModuleIndex = 0; - for (const auto& importedModule : module.importedModules) + for (const auto& importedModule : targetModule->importedModules) { AppendModuleAttributes(*importedModule.module->metadata); AppendLine("module ", importedModule.identifier); @@ -248,7 +289,7 @@ namespace nzsl } m_currentState->currentModuleIndex = std::numeric_limits::max(); - module.rootNode->Visit(*this); + targetModule->rootNode->Visit(*this); return state.stream.str(); } @@ -408,9 +449,9 @@ namespace nzsl Append("[", textureType.baseType, ", "); switch (textureType.accessPolicy) { - case AccessPolicy::ReadOnly: Append("readonly"); break; - case AccessPolicy::ReadWrite: Append("readwrite"); break; - case AccessPolicy::WriteOnly: Append("writeonly"); break; + case AccessPolicy::ReadOnly: Append("read"); break; + case AccessPolicy::ReadWrite: Append("read_write"); break; + case AccessPolicy::WriteOnly: Append("write"); break; } if (textureType.format != ImageFormat::Unknown) @@ -433,7 +474,7 @@ namespace nzsl void WgslWriter::Append(const Ast::VectorType& vecType) { - Append("vec", vecType.componentCount, "[", vecType.type, "]"); + Append("vec", vecType.componentCount, "<", vecType.type, ">"); } void WgslWriter::Append(Ast::NoType) @@ -615,14 +656,12 @@ namespace nzsl if (!attribute.HasValue()) return; - Append("entry("); + Append("@"); if (attribute.stageType.IsResultingValue()) Append(Parser::ToString(attribute.stageType.GetResultingValue())); else attribute.stageType.GetExpression()->Visit(*this); - - Append(")"); } void WgslWriter::AppendAttribute(FeatureAttribute attribute) From 83e683236ea7ec869e58866222e52c1f300d3b3f Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 14 Apr 2025 21:42:47 +0200 Subject: [PATCH 04/37] working on external statements ci skip --- examples/wgsl/main.cpp | 18 -------- examples/wgsl/shader.nzsl | 52 ++++++++++++++++++++- src/NZSL/WgslWriter.cpp | 95 +++++++++++++++++++++++++++++---------- 3 files changed, 121 insertions(+), 44 deletions(-) diff --git a/examples/wgsl/main.cpp b/examples/wgsl/main.cpp index a0670d44..8413c199 100644 --- a/examples/wgsl/main.cpp +++ b/examples/wgsl/main.cpp @@ -5,26 +5,8 @@ int main() { auto shader = nzsl::ParseFromFile("shader.nzsl"); - nzsl::WgslWriter wgslWriter; auto wgslShader = wgslWriter.Generate(*shader); - std::cout << wgslShader << std::endl; - - std::cout << "\n=============================================================\n" << R"( -struct Outputs -{ - @location(0) color: vec4; -} - -@fragment -fn main() -> Outputs -{ - var output: Outputs; - output.color = vec4(1.0, 1.0, 1.0, 1.0); - return output; -} - )" << std::endl; - return 0; } diff --git a/examples/wgsl/shader.nzsl b/examples/wgsl/shader.nzsl index 27625605..1c8a2043 100644 --- a/examples/wgsl/shader.nzsl +++ b/examples/wgsl/shader.nzsl @@ -1,15 +1,63 @@ [nzsl_version("1.0")] module; +struct UBO +{ + screen_size: vec2[f32], + center: vec2[f32], + scale: f32, + iteration_count: i32 +} + +external +{ + [binding(0)] palette: sampler2D[f32], + [binding(1)] ubo: uniform[UBO], +} + +struct Input +{ + [builtin(frag_coord)] fragcoord: vec4[f32] +} + struct Output { [location(0)] color: vec4[f32] } [entry(frag)] -fn main() -> Output +fn main(input: Input) -> Output { + let coords = input.fragcoord.xy / ubo.screen_size; + + let c: vec2[f32]; + c.x = (ubo.screen_size.x / ubo.screen_size.y) * (coords.x - 0.5) * ubo.scale - ubo.center.x / ubo.screen_size.y; + c.y = (coords.y - 0.5) * ubo.scale - ubo.center.y / ubo.screen_size.y; + + let z = c; + let i = 0; + while (i < ubo.iteration_count) + { + let x = (z.x * z.x - z.y * z.y) + c.x; + let y = (z.y * z.x + z.x * z.y) + c.y; + + if ((x * x + y * y) > 4.0) + break; + + z.x = x; + z.y = y; + + i += 1; + } + + let u: f32; + if (i < ubo.iteration_count) + u = f32(i) / 100.0; + else + u = 0.0; + let output: Output; - output.color = vec4[f32](1.0, 1.0, 1.0, 1.0); + output.color = palette.Sample(vec2[f32](u, 0.0)); + return output; } diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index f5d175cb..afc658c6 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -10,6 +10,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -21,6 +24,7 @@ #include #include #include +#include #include @@ -180,7 +184,22 @@ namespace nzsl Ast::SanitizeVisitor::Options WgslWriter::GetSanitizeOptions() { static constexpr auto s_reservedKeywords = frozen::make_unordered_set({ - "write", "vec2", "vec3", "vec4", "void", + "NULL", "Self", "abstract", "active", "alignas", "alignof", "as", "asm", "asm_fragment", "async", + "attribute", "auto", "await", "become", "cast", "catch", "class", "co_await", "co_return", "co_yield", + "coherent", "column_major", "common", "compile", "compile_fragment", "concept", "const_cast", "consteval", + "constexpr", "constinit", "crate", "debugger", "decltype", "delete", "demote", "demote_to_helper", + "do", "dynamic_cast", "enum", "explicit", "export", "extends", "extern", "external", "fallthrough", + "filter", "final", "finally", "friend", "from", "fxgroup", "get", "goto", "groupshared", "highp", "impl", + "implements", "import", "inline", "instanceof", "interface", "layout", "lowp", "macro", "macro_rules", + "match", "mediump", "meta", "mod", "module", "move", "mut", "mutable", "namespace", "new", "nil", + "noexcept", "noinline", "nointerpolation", "non_coherent", "noncoherent", "noperspective", "null", + "nullptr", "of", "operator", "package", "packoffset", "partition", "pass", "patch", "pixelfragment", + "precise", "precision", "premerge", "priv", "protected", "pub", "public", "readonly", "ref", "regardless", + "register", "reinterpret_cast", "require", "resource", "restrict", "self", "set", "shared", "sizeof", + "smooth", "snorm", "static", "static_assert", "static_cast", "std", "subroutine", "super", "target", + "template", "this", "thread_local", "throw", "trait", "try", "type", "typedef", "typeid", "typename", + "typeof", "union", "unless", "unorm", "unsafe", "unsized", "use", "using", "varying", "virtual", + "volatile", "wgsl", "where", "with", "writeonly", "yield" }); Ast::SanitizeVisitor::Options options; @@ -194,7 +213,23 @@ namespace nzsl options.splitWrappedStructAssignation = true; //< TODO: Only split for base uniforms/storage options.identifierSanitizer = [](std::string& identifier, Ast::IdentifierScope /*scope*/) { - return false; + using namespace std::string_view_literals; + + bool nameChanged = false; + while (s_reservedKeywords.count(frozen::string(identifier)) != 0) + { + identifier += '_'; + nameChanged = true; + } + + // Identifier can't start with _nzsl + if (identifier.compare(0, 5, "_nzsl") == 0) + { + identifier.replace(0, 5, "_"sv); + nameChanged = true; + } + + return nameChanged; }; return options; @@ -252,6 +287,18 @@ namespace nzsl else targetModule = &module; + if (states.optimize) + { + sanitizedModule = Ast::PropagateConstants(*targetModule); + + Ast::DependencyCheckerVisitor::Config dependencyConfig; + dependencyConfig.usedShaderStages = ShaderStageType_All; + + sanitizedModule = Ast::EliminateUnusedPass(*sanitizedModule, dependencyConfig); + + targetModule = sanitizedModule.get(); + } + AppendHeader(); // First registration pass (required to register function names) @@ -467,9 +514,9 @@ namespace nzsl throw std::runtime_error("unexpected type?"); } - void WgslWriter::Append(const Ast::UniformType& uniformType) + void WgslWriter::Append(const Ast::UniformType& /*uniformType*/) { - Append("uniform[", uniformType.containedType, "]"); + throw std::runtime_error("unexpected UniformType?"); } void WgslWriter::Append(const Ast::VectorType& vecType) @@ -514,9 +561,8 @@ namespace nzsl bool first = true; - Append("["); + Append("@"); AppendAttributesInternal(first, std::forward(params)...); - Append("]"); if (appendLine) AppendLine(); @@ -531,7 +577,7 @@ namespace nzsl return; if (!first) - Append(", "); + Append(" @"); first = false; @@ -656,8 +702,6 @@ namespace nzsl if (!attribute.HasValue()) return; - Append("@"); - if (attribute.stageType.IsResultingValue()) Append(Parser::ToString(attribute.stageType.GetResultingValue())); else @@ -751,7 +795,7 @@ namespace nzsl if (!attribute.HasValue()) return; - Append("set("); + Append("group("); if (attribute.setIndex.IsResultingValue()) Append(attribute.setIndex.GetResultingValue()); @@ -1466,7 +1510,6 @@ namespace nzsl void WgslWriter::Visit(Ast::DeclareExternalStatement& node) { AppendAttributes(true, SetAttribute{ node.bindingSet }, AutoBindingAttribute{ node.autoBinding }, TagAttribute{ node.tag }); - Append("external"); if (!node.name.empty()) { @@ -1478,28 +1521,32 @@ namespace nzsl AppendLine(); - EnterScope(); - - bool first = true; for (const auto& externalVar : node.externalVars) { - if (!first) - AppendLine(","); + if (!externalVar.tag.empty() && m_currentState->states->debugLevel >= DebugLevel::Minimal) + AppendComment("external var tag: " + externalVar.tag); - first = false; + if (!externalVar.type.IsResultingValue() || !IsPushConstantType(externalVar.type.GetResultingValue())) // push constants don't have set or binding' + AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ externalVar.bindingIndex }); - if (externalVar.type.IsResultingValue() && IsPushConstantType(externalVar.type.GetResultingValue())) // push constants don't have set or binding' - AppendAttributes(false, TagAttribute{ externalVar.tag }); - else - AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ externalVar.bindingIndex }, TagAttribute{ externalVar.tag }); - Append(externalVar.name, ": ", externalVar.type); + Append("var"); + + std::visit(Nz::Overloaded + { + [&](const Ast::UniformType& uniformType) + { + }, + [&](const Ast::StorageType& storageType) + { + }, + }, externalVar.type.GetResultingValue()); + + Append(";"); if (externalVar.varIndex) RegisterVariable(*externalVar.varIndex, externalVar.name); } - LeaveScope(); - m_currentState->currentExternalBlockIndex = {}; } From 82e9ea5cb32ceaac7ece21e32c64b5d1af19908c Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 15 Apr 2025 00:35:00 +0200 Subject: [PATCH 05/37] working on external implementation --- examples/wgsl/shader.nzsl | 1 + include/NZSL/WgslWriter.hpp | 2 - src/NZSL/WgslWriter.cpp | 124 ++++++++++++++++++++++++++---------- 3 files changed, 92 insertions(+), 35 deletions(-) diff --git a/examples/wgsl/shader.nzsl b/examples/wgsl/shader.nzsl index 1c8a2043..20d6d7b7 100644 --- a/examples/wgsl/shader.nzsl +++ b/examples/wgsl/shader.nzsl @@ -13,6 +13,7 @@ external { [binding(0)] palette: sampler2D[f32], [binding(1)] ubo: uniform[UBO], + [binding(2)] ssbo: storage[UBO, readonly], } struct Input diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index 2ad14bac..f421b13e 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -53,7 +53,6 @@ namespace nzsl struct EntryAttribute; struct FeatureAttribute; struct InterpAttribute; - struct LangVersionAttribute; struct LayoutAttribute; struct LicenseAttribute; struct LocationAttribute; @@ -99,7 +98,6 @@ namespace nzsl void AppendAttribute(EntryAttribute attribute); void AppendAttribute(FeatureAttribute attribute); void AppendAttribute(InterpAttribute attribute); - void AppendAttribute(LangVersionAttribute attribute); void AppendAttribute(LayoutAttribute attribute); void AppendAttribute(LicenseAttribute attribute); void AppendAttribute(LocationAttribute attribute); diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index afc658c6..660ac2a5 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -125,13 +125,6 @@ namespace nzsl bool HasValue() const { return interpQualifier.HasValue(); } }; - struct WgslWriter::LangVersionAttribute - { - std::uint32_t version; - - bool HasValue() const { return true; } - }; - struct WgslWriter::LayoutAttribute { const Ast::ExpressionValue& layout; @@ -703,7 +696,14 @@ namespace nzsl return; if (attribute.stageType.IsResultingValue()) - Append(Parser::ToString(attribute.stageType.GetResultingValue())); + { + switch (attribute.stageType.GetResultingValue()) + { + case ShaderStageType::Compute: Append("compute"); break; + case ShaderStageType::Fragment: Append("fragment"); break; + case ShaderStageType::Vertex: Append("vertex"); break; + } + } else attribute.stageType.GetExpression()->Visit(*this); } @@ -735,25 +735,6 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(LangVersionAttribute attribute) - { - std::uint32_t shaderLangVersion = attribute.version; - std::uint32_t majorVersion = shaderLangVersion / 100; - shaderLangVersion -= majorVersion * 100; - - std::uint32_t minorVersion = shaderLangVersion / 10; - shaderLangVersion -= minorVersion * 100; - - std::uint32_t patchVersion = shaderLangVersion; - - // nzsl_version - Append("nzsl_version(\"", majorVersion, ".", minorVersion); - if (patchVersion != 0) - Append(".", patchVersion); - - Append("\")"); - } - void WgslWriter::AppendAttribute(LayoutAttribute attribute) { if (!attribute.HasValue()) @@ -939,7 +920,6 @@ namespace nzsl void WgslWriter::AppendModuleAttributes(const Ast::Module::Metadata& metadata) { - AppendAttributes(true, LangVersionAttribute{ metadata.shaderLangVersion }); for (Ast::ModuleFeature feature : metadata.enabledFeatures) AppendAttributes(true, FeatureAttribute{ feature }); @@ -1535,13 +1515,95 @@ namespace nzsl { [&](const Ast::UniformType& uniformType) { + Append(" ", externalVar.name, ": ", uniformType.containedType); }, [&](const Ast::StorageType& storageType) { + Append(" ", externalVar.name, ": ", storageType.containedType); + }, + [&](const Ast::SamplerType& samplerType) + { + Append(" ", externalVar.name, ": texture_"); + switch (samplerType.dim) + { + case ImageType::E1D: Append("1d"); break; + case ImageType::E1D_Array: Append("1d_array"); break; + case ImageType::E2D: Append("2d"); break; + case ImageType::E2D_Array: Append("2d_array"); break; + case ImageType::E3D: Append("3d"); break; + case ImageType::Cubemap: Append("cube"); break; + } + switch (samplerType.sampledType) + { + case Ast::PrimitiveType::Boolean: + throw std::runtime_error("unexpected bool type for texture"); + case Ast::PrimitiveType::Float64: + throw std::runtime_error("unexpected f64 type for texture"); + + case Ast::PrimitiveType::Float32: Append(""); break; + case Ast::PrimitiveType::Int32: Append(""); break; + case Ast::PrimitiveType::UInt32: Append(""); break; + + case Ast::PrimitiveType::String: + throw std::runtime_error("unexpected string type for texture"); + } + }, + [&](const Ast::PushConstantType& /*pushConstantType*/) + { + throw std::runtime_error("push constant are not supported yet"); + }, + [&](const Ast::TextureType& textureType) + { + Append(" ", externalVar.name, ": texture_storage_"); + switch (textureType.dim) + { + case ImageType::E1D: Append("1d"); break; + case ImageType::E2D: Append("2d"); break; + case ImageType::E2D_Array: Append("2d_array"); break; + case ImageType::E3D: Append("3d"); break; + + default: + throw std::runtime_error("unexpected texture type"); + } + switch (textureType.baseType) + { + case Ast::PrimitiveType::Boolean: + throw std::runtime_error("unexpected bool type for texture"); + case Ast::PrimitiveType::Float64: + throw std::runtime_error("unexpected f64 type for texture"); + + case Ast::PrimitiveType::Float32: Append(""); break; + case Ast::PrimitiveType::Int32: Append(""); break; + case Ast::PrimitiveType::UInt32: Append(""); break; + + case Ast::PrimitiveType::String: + throw std::runtime_error("unexpected string type for texture"); + } }, + [&](const Ast::NoType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::AliasType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::ArrayType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::DynArrayType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::FunctionType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::IntrinsicFunctionType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::MatrixType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::MethodType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::ModuleType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::PrimitiveType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::StructType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::Type&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::VectorType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::NamedExternalBlockType&) { throw std::runtime_error("unexpected Type?"); } }, externalVar.type.GetResultingValue()); - Append(";"); + AppendLine(";"); if (externalVar.varIndex) RegisterVariable(*externalVar.varIndex, externalVar.name); @@ -1793,10 +1855,6 @@ namespace nzsl void WgslWriter::AppendHeader() { AppendModuleAttributes(*m_currentState->module->metadata); - if (!m_currentState->module->metadata->moduleName.empty() && m_currentState->module->metadata->moduleName[0] != '_') - AppendLine("module ", m_currentState->module->metadata->moduleName, ";"); - else - AppendLine("module;"); AppendLine(); } } From b922d20d27f68dfa91e73159ef4a889ff0a6d197 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 15 Apr 2025 17:36:09 +0200 Subject: [PATCH 06/37] working on wgsl backend --- examples/wgsl/main.cpp | 2 +- examples/wgsl/shader.nzsl | 4 +-- include/NZSL/WgslWriter.hpp | 9 +++++- src/NZSL/WgslWriter.cpp | 56 ++++++++++++++++++++++++++----------- 4 files changed, 50 insertions(+), 21 deletions(-) diff --git a/examples/wgsl/main.cpp b/examples/wgsl/main.cpp index 8413c199..04e31a28 100644 --- a/examples/wgsl/main.cpp +++ b/examples/wgsl/main.cpp @@ -7,6 +7,6 @@ int main() auto shader = nzsl::ParseFromFile("shader.nzsl"); nzsl::WgslWriter wgslWriter; auto wgslShader = wgslWriter.Generate(*shader); - std::cout << wgslShader << std::endl; + std::cout << wgslShader.code << std::endl; return 0; } diff --git a/examples/wgsl/shader.nzsl b/examples/wgsl/shader.nzsl index 20d6d7b7..01c066bc 100644 --- a/examples/wgsl/shader.nzsl +++ b/examples/wgsl/shader.nzsl @@ -12,8 +12,8 @@ struct UBO external { [binding(0)] palette: sampler2D[f32], - [binding(1)] ubo: uniform[UBO], - [binding(2)] ssbo: storage[UBO, readonly], + [binding(1)] ubo: uniform[UBO], + [binding(2)] ssbo: storage[UBO, readonly], } struct Input diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index f421b13e..28aa3e97 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -21,13 +21,14 @@ namespace nzsl { public: struct Environment; + struct Output; inline WgslWriter(); WgslWriter(const WgslWriter&) = delete; WgslWriter(WgslWriter&&) = delete; ~WgslWriter() = default; - std::string Generate(const Ast::Module& module, const States& states = {}); + Output Generate(const Ast::Module& module, const States& states = {}); void SetEnv(Environment environment); @@ -35,6 +36,12 @@ namespace nzsl { }; + struct Output + { + std::string code; + std::vector> bindingRemap; + }; + static Ast::SanitizeVisitor::Options GetSanitizeOptions(); private: diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 660ac2a5..ca98563d 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -2,6 +2,7 @@ // This file is part of the "Nazara Shading Language" project // For conditions of distribution and use, see copyright notice in Config.hpp +#include "NZSL/Ast/Enums.hpp" #include #include #include @@ -174,6 +175,22 @@ namespace nzsl bool HasValue() const { return workgroup.HasValue(); } }; + constexpr auto s_wgslBuiltinMapping = frozen::make_unordered_map({ + { Ast::BuiltinEntry::BaseInstance, {} }, + { Ast::BuiltinEntry::BaseVertex, {} }, + { Ast::BuiltinEntry::DrawIndex, {} }, + { Ast::BuiltinEntry::FragCoord, "position" }, + { Ast::BuiltinEntry::FragDepth, "frag_depth" }, + { Ast::BuiltinEntry::GlocalInvocationIndices, "global_invocation_id" }, + { Ast::BuiltinEntry::InstanceIndex, "instance_index" }, + { Ast::BuiltinEntry::LocalInvocationIndex, "local_invocation_index" }, + { Ast::BuiltinEntry::LocalInvocationIndices, "local_invocation_id" }, + { Ast::BuiltinEntry::VertexIndex, "vertex_index" }, + { Ast::BuiltinEntry::VertexPosition, "position" }, + { Ast::BuiltinEntry::WorkgroupCount, "num_workgroups" }, + { Ast::BuiltinEntry::WorkgroupIndices, "workgroup_id" } + }); + Ast::SanitizeVisitor::Options WgslWriter::GetSanitizeOptions() { static constexpr auto s_reservedKeywords = frozen::make_unordered_set({ @@ -192,7 +209,9 @@ namespace nzsl "smooth", "snorm", "static", "static_assert", "static_cast", "std", "subroutine", "super", "target", "template", "this", "thread_local", "throw", "trait", "try", "type", "typedef", "typeid", "typename", "typeof", "union", "unless", "unorm", "unsafe", "unsized", "use", "using", "varying", "virtual", - "volatile", "wgsl", "where", "with", "writeonly", "yield" + "volatile", "wgsl", "where", "with", "writeonly", "yield", "alias", "break", "case", "const", "const_assert", + "continue", "continuing", "default", "diagnostic", "discard", "else", "enable", "false", "fn", "for", + "if", "let", "loop", "override", "requires", "return", "struct", "switch", "true", "var", "while" }); Ast::SanitizeVisitor::Options options; @@ -255,7 +274,7 @@ namespace nzsl unsigned int indentLevel = 0; }; - std::string WgslWriter::Generate(const Ast::Module& module, const States& states) + WgslWriter::Output WgslWriter::Generate(const Ast::Module& module, const States& states) { State state; m_currentState = &state; @@ -331,7 +350,10 @@ namespace nzsl m_currentState->currentModuleIndex = std::numeric_limits::max(); targetModule->rootNode->Visit(*this); - return state.stream.str(); + Output output; + output.code = std::move(state.stream).str(); + + return output; } void WgslWriter::SetEnv(Environment environment) @@ -626,15 +648,11 @@ namespace nzsl { if (!attribute.HasValue()) return; - - Append("builtin("); - - if (attribute.builtin.IsResultingValue()) - Append(Parser::ToString(attribute.builtin.GetResultingValue())); - else - attribute.builtin.GetExpression()->Visit(*this); - - Append(")"); + auto it = s_wgslBuiltinMapping.find(attribute.builtin.GetResultingValue()); + assert(it != s_wgslBuiltinMapping.end()); + if (it->second.empty()) + throw std::runtime_error("unsupported builtin attribute! (for now)"); + Append("builtin(", it->second, ")"); } void WgslWriter::AppendAttribute(CondAttribute attribute) @@ -1314,10 +1332,7 @@ namespace nzsl break; case Ast::IntrinsicType::TextureSampleImplicitLod: - assert(!node.parameters.empty()); - Visit(node.parameters.front(), true); - Append(".Sample"); - method = true; + Append("textureLoad"); break; case Ast::IntrinsicType::TextureSampleImplicitLodDepthComp: @@ -1346,6 +1361,12 @@ namespace nzsl node.parameters[i]->Visit(*this); } + switch (node.intrinsic) + { + case Ast::IntrinsicType::TextureSampleImplicitLod: Append(", 0.0"); break; + + default: break; + } Append(")"); } @@ -1710,7 +1731,8 @@ namespace nzsl if (node.varIndex) RegisterVariable(*node.varIndex, node.varName); - Append("let ", node.varName); + Append("var "); + Append(node.varName); if (node.varType.HasValue()) Append(": ", node.varType); From 329249a9bcf5d0f8fc7419b8e14a4904c5de955d Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Thu, 17 Apr 2025 23:00:57 +0200 Subject: [PATCH 07/37] adding binding shift to groups --- include/NZSL/WgslWriter.hpp | 2 +- src/NZSL/WgslWriter.cpp | 68 +++++++++++++++++++++++++------------ 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index 28aa3e97..c1990f2d 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -39,7 +39,7 @@ namespace nzsl struct Output { std::string code; - std::vector> bindingRemap; + std::unordered_map bindingRemap; }; static Ast::SanitizeVisitor::Options GetSanitizeOptions(); diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index ca98563d..b1b4c55d 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -265,6 +266,7 @@ namespace nzsl std::unordered_map modules; std::unordered_map structs; std::unordered_map variables; + std::unordered_map bindingRemap; std::vector externalBlockNames; std::vector moduleNames; const States* states = nullptr; @@ -352,6 +354,7 @@ namespace nzsl Output output; output.code = std::move(state.stream).str(); + output.bindingRemap = std::move(state.bindingRemap); return output; } @@ -1261,6 +1264,8 @@ namespace nzsl void WgslWriter::Visit(Ast::IntrinsicExpression& node) { bool method = false; + bool firstParam = true; + std::size_t firstParamIndex = 0; switch (node.intrinsic) { // Function intrinsics @@ -1332,7 +1337,14 @@ namespace nzsl break; case Ast::IntrinsicType::TextureSampleImplicitLod: - Append("textureLoad"); + firstParam = false; + firstParamIndex = node.parameters.size(); + Append("textureSample("); + node.parameters[0]->Visit(*this); + Append(", "); + node.parameters[0]->Visit(*this); + Append("Sampler, "); + node.parameters[1]->Visit(*this); break; case Ast::IntrinsicType::TextureSampleImplicitLodDepthComp: @@ -1350,9 +1362,10 @@ namespace nzsl break; } - Append("("); + if (firstParam) + Append("("); bool first = true; - for (std::size_t i = (method) ? 1 : 0; i < node.parameters.size(); ++i) + for (std::size_t i = (method) ? firstParamIndex + 1 : firstParamIndex; i < node.parameters.size(); ++i) { if (!first) Append(", "); @@ -1361,12 +1374,6 @@ namespace nzsl node.parameters[i]->Visit(*this); } - switch (node.intrinsic) - { - case Ast::IntrinsicType::TextureSampleImplicitLod: Append(", 0.0"); break; - - default: break; - } Append(")"); } @@ -1515,20 +1522,34 @@ namespace nzsl if (!node.name.empty()) { Append(" ", node.name); - + m_currentState->currentExternalBlockIndex = m_currentState->externalBlockNames.size(); m_currentState->externalBlockNames.push_back(node.name); } AppendLine(); + std::unordered_set reservedBindings; + for (const auto& externalVar : node.externalVars) { if (!externalVar.tag.empty() && m_currentState->states->debugLevel >= DebugLevel::Minimal) AppendComment("external var tag: " + externalVar.tag); + std::uint32_t binding = 0; + std::uint64_t bindingSet; + if (externalVar.bindingSet.HasValue()) + bindingSet = externalVar.bindingSet.GetResultingValue(); + else + bindingSet = 0; if (!externalVar.type.IsResultingValue() || !IsPushConstantType(externalVar.type.GetResultingValue())) // push constants don't have set or binding' - AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ externalVar.bindingIndex }); + { + binding = externalVar.bindingIndex.GetResultingValue(); + for (; reservedBindings.count(bindingSet << 32 | binding); binding++); + reservedBindings.emplace(bindingSet << 32 | binding); + m_currentState->bindingRemap[bindingSet << 32 | externalVar.bindingIndex.GetResultingValue()] = binding; + AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding } }); + } Append("var"); @@ -1551,15 +1572,16 @@ namespace nzsl }, [&](const Ast::SamplerType& samplerType) { - Append(" ", externalVar.name, ": texture_"); + std::string dimension; + std::string type; switch (samplerType.dim) { - case ImageType::E1D: Append("1d"); break; - case ImageType::E1D_Array: Append("1d_array"); break; - case ImageType::E2D: Append("2d"); break; - case ImageType::E2D_Array: Append("2d_array"); break; - case ImageType::E3D: Append("3d"); break; - case ImageType::Cubemap: Append("cube"); break; + case ImageType::E1D: dimension = "1d"; break; + case ImageType::E1D_Array: dimension = "1d_array"; break; + case ImageType::E2D: dimension = "2d"; break; + case ImageType::E2D_Array: dimension = "2d_array"; break; + case ImageType::E3D: dimension = "3d"; break; + case ImageType::Cubemap: dimension = "cube"; break; } switch (samplerType.sampledType) { @@ -1568,13 +1590,17 @@ namespace nzsl case Ast::PrimitiveType::Float64: throw std::runtime_error("unexpected f64 type for texture"); - case Ast::PrimitiveType::Float32: Append(""); break; - case Ast::PrimitiveType::Int32: Append(""); break; - case Ast::PrimitiveType::UInt32: Append(""); break; + case Ast::PrimitiveType::Float32: type = ""; break; + case Ast::PrimitiveType::Int32: type = ""; break; + case Ast::PrimitiveType::UInt32: type = ""; break; case Ast::PrimitiveType::String: throw std::runtime_error("unexpected string type for texture"); } + AppendLine(" ", externalVar.name, ": texture_", dimension, type, ";"); + AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding + 1 } }); + reservedBindings.emplace(bindingSet << 32 | binding + 1); + Append("var ", externalVar.name, "Sampler: sampler"); }, [&](const Ast::PushConstantType& /*pushConstantType*/) { From 49dc8c570460d533b3541c638cf88adb7098e4c8 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Thu, 24 Apr 2025 22:55:00 +0200 Subject: [PATCH 08/37] adding some tests --- include/NZSL/WgslWriter.hpp | 36 ++++----- src/NZSL/WgslWriter.cpp | 108 ++++++++++++++----------- tests/src/Tests/AccessMemberTests.cpp | 18 ++++- tests/src/Tests/EntryFunctionTests.cpp | 82 +++++++++++++++++++ tests/src/Tests/ExternalTests.cpp | 12 +++ tests/src/Tests/ShaderUtils.cpp | 46 +++++++++++ tests/src/Tests/ShaderUtils.hpp | 1 + tests/xmake.lua | 7 +- 8 files changed, 242 insertions(+), 68 deletions(-) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index c1990f2d..ab4435ba 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -94,24 +94,24 @@ namespace nzsl template void AppendAttributes(bool appendLine, Args&&... params); template void AppendAttributesInternal(bool& first, const T& param); template void AppendAttributesInternal(bool& first, const T1& firstParam, const T2& secondParam, Rest&&... params); - void AppendAttribute(AutoBindingAttribute attribute); - void AppendAttribute(AuthorAttribute attribute); - void AppendAttribute(BindingAttribute attribute); - void AppendAttribute(BuiltinAttribute attribute); - void AppendAttribute(CondAttribute attribute); - void AppendAttribute(DepthWriteAttribute attribute); - void AppendAttribute(DescriptionAttribute attribute); - void AppendAttribute(EarlyFragmentTestsAttribute attribute); - void AppendAttribute(EntryAttribute attribute); - void AppendAttribute(FeatureAttribute attribute); - void AppendAttribute(InterpAttribute attribute); - void AppendAttribute(LayoutAttribute attribute); - void AppendAttribute(LicenseAttribute attribute); - void AppendAttribute(LocationAttribute attribute); - void AppendAttribute(SetAttribute attribute); - void AppendAttribute(TagAttribute attribute); - void AppendAttribute(UnrollAttribute attribute); - void AppendAttribute(WorkgroupAttribute attribute); + void AppendAttribute(bool first, AutoBindingAttribute attribute); + void AppendAttribute(bool first, AuthorAttribute attribute); + void AppendAttribute(bool first, BindingAttribute attribute); + void AppendAttribute(bool first, BuiltinAttribute attribute); + void AppendAttribute(bool first, CondAttribute attribute); + void AppendAttribute(bool first, DepthWriteAttribute attribute); + void AppendAttribute(bool first, DescriptionAttribute attribute); + void AppendAttribute(bool first, EarlyFragmentTestsAttribute attribute); + void AppendAttribute(bool first, EntryAttribute attribute); + void AppendAttribute(bool first, FeatureAttribute attribute); + void AppendAttribute(bool first, InterpAttribute attribute); + void AppendAttribute(bool first, LayoutAttribute attribute); + void AppendAttribute(bool first, LicenseAttribute attribute); + void AppendAttribute(bool first, LocationAttribute attribute); + void AppendAttribute(bool first, SetAttribute attribute); + void AppendAttribute(bool first, TagAttribute attribute); + void AppendAttribute(bool first, UnrollAttribute attribute); + void AppendAttribute(bool first, WorkgroupAttribute attribute); void AppendComment(std::string_view section); void AppendCommentSection(std::string_view section); void AppendHeader(); diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index b1b4c55d..7fc978e2 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -43,8 +43,12 @@ namespace nzsl { if (node.funcIndex) m_writer.RegisterFunction(*node.funcIndex, node.name); - - // Speed up by not visiting function statements, we only need to extract function data + std::optional entryPointType; + if (node.entryStage.HasValue()) + entryPointType = node.entryStage.GetResultingValue(); + if (entryPointType && *entryPointType == ShaderStageType::Vertex) + { + } } WgslWriter& m_writer; @@ -279,6 +283,8 @@ namespace nzsl WgslWriter::Output WgslWriter::Generate(const Ast::Module& module, const States& states) { State state; + state.states = &states; + m_currentState = &state; Nz::CallOnExit onExit([this]() { @@ -594,12 +600,8 @@ namespace nzsl if (!param.HasValue()) return; - if (!first) - Append(" @"); - + AppendAttribute(first, param); first = false; - - AppendAttribute(param); } template @@ -609,10 +611,12 @@ namespace nzsl AppendAttributesInternal(first, secondParam, std::forward(params)...); } - void WgslWriter::AppendAttribute(AutoBindingAttribute attribute) + void WgslWriter::AppendAttribute(bool first, AutoBindingAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("auto_binding("); @@ -624,18 +628,22 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(AuthorAttribute attribute) + void WgslWriter::AppendAttribute(bool first, AuthorAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("author(", EscapeString(attribute.author), ")"); } - void WgslWriter::AppendAttribute(BindingAttribute attribute) + void WgslWriter::AppendAttribute(bool first, BindingAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("binding("); @@ -647,10 +655,12 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(BuiltinAttribute attribute) + void WgslWriter::AppendAttribute(bool first, BuiltinAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); auto it = s_wgslBuiltinMapping.find(attribute.builtin.GetResultingValue()); assert(it != s_wgslBuiltinMapping.end()); if (it->second.empty()) @@ -658,10 +668,12 @@ namespace nzsl Append("builtin(", it->second, ")"); } - void WgslWriter::AppendAttribute(CondAttribute attribute) + void WgslWriter::AppendAttribute(bool first, CondAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("cond("); @@ -673,48 +685,32 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(DepthWriteAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, DepthWriteAttribute /*attribute*/) { - if (!attribute.HasValue()) - return; - - Append("depth_write("); - - if (attribute.writeMode.IsResultingValue()) - Append(Parser::ToString(attribute.writeMode.GetResultingValue())); - else - attribute.writeMode.GetExpression()->Visit(*this); - - Append(")"); + return; } - void WgslWriter::AppendAttribute(DescriptionAttribute attribute) + void WgslWriter::AppendAttribute(bool first, DescriptionAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("desc(", EscapeString(attribute.description), ")"); } - void WgslWriter::AppendAttribute(EarlyFragmentTestsAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, EarlyFragmentTestsAttribute /*attribute*/) { - if (!attribute.HasValue()) - return; - - Append("early_fragment_tests("); - - if (attribute.earlyFragmentTests.IsResultingValue()) - Append((attribute.earlyFragmentTests.GetResultingValue()) ? "true" : "false"); - else - attribute.earlyFragmentTests.GetExpression()->Visit(*this); - - Append(")"); + return; } - void WgslWriter::AppendAttribute(EntryAttribute attribute) + void WgslWriter::AppendAttribute(bool first, EntryAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); if (attribute.stageType.IsResultingValue()) { @@ -729,8 +725,10 @@ namespace nzsl attribute.stageType.GetExpression()->Visit(*this); } - void WgslWriter::AppendAttribute(FeatureAttribute attribute) + void WgslWriter::AppendAttribute(bool first, FeatureAttribute attribute) { + if (!first) + Append(" @"); Append("feature("); auto it = LangData::s_moduleFeatures.find(attribute.featureAttribute); @@ -741,10 +739,12 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(InterpAttribute attribute) + void WgslWriter::AppendAttribute(bool first, InterpAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("interp("); @@ -756,10 +756,12 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(LayoutAttribute attribute) + void WgslWriter::AppendAttribute(bool first, LayoutAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("layout("); if (attribute.layout.IsResultingValue()) @@ -769,18 +771,22 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(LicenseAttribute attribute) + void WgslWriter::AppendAttribute(bool first, LicenseAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("license(", EscapeString(attribute.license), ")"); } - void WgslWriter::AppendAttribute(LocationAttribute attribute) + void WgslWriter::AppendAttribute(bool first, LocationAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("location("); @@ -792,10 +798,12 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(SetAttribute attribute) + void WgslWriter::AppendAttribute(bool first, SetAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("group("); @@ -807,18 +815,22 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(TagAttribute attribute) + void WgslWriter::AppendAttribute(bool first, TagAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("tag(", EscapeString(attribute.tag), ")"); } - void WgslWriter::AppendAttribute(UnrollAttribute attribute) + void WgslWriter::AppendAttribute(bool first, UnrollAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("unroll("); @@ -830,10 +842,12 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(WorkgroupAttribute attribute) + void WgslWriter::AppendAttribute(bool first, WorkgroupAttribute attribute) { if (!attribute.HasValue()) return; + if (!first) + Append(" @"); Append("workgroup("); diff --git a/tests/src/Tests/AccessMemberTests.cpp b/tests/src/Tests/AccessMemberTests.cpp index dc2431c4..17e678bb 100644 --- a/tests/src/Tests/AccessMemberTests.cpp +++ b/tests/src/Tests/AccessMemberTests.cpp @@ -51,7 +51,7 @@ void main() ExpectNZSL(*shaderModule, R"( [entry(vert)] -fn main() +fn main() -> @builtin(position) vec4 { let result: f32 = ubo.s.field.z; } @@ -67,6 +67,14 @@ OpCompositeExtract OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@vertex +fn main() +{ + var result: f32 = ubo.s.field.z; +} +)"); } SECTION("AccessMember with multiples fields") @@ -104,6 +112,14 @@ OpCompositeExtract OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@vertex +fn main() -> @builtin(position) vec4 +{ + var result: f32 = ubo.s.field.z; +} +)"); } } } diff --git a/tests/src/Tests/EntryFunctionTests.cpp b/tests/src/Tests/EntryFunctionTests.cpp index 77a66928..7e80d7e2 100644 --- a/tests/src/Tests/EntryFunctionTests.cpp +++ b/tests/src/Tests/EntryFunctionTests.cpp @@ -109,6 +109,21 @@ fn main() -> FragOut OpStore %5 %17 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +struct FragOut +{ + @builtin(frag_depth) depth: f32 +} + +@fragment +fn main() -> FragOut +{ + var output: FragOut; + output.depth = 1.0; + return output; +} +)"); } WHEN("Using depth_write(less)") @@ -212,6 +227,21 @@ fn main() -> FragOut OpStore %5 %17 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +struct FragOut +{ + @builtin(frag_depth) depth: f32 +} + +@fragment +fn main() -> FragOut +{ + var output: FragOut; + output.depth = 0.0; + return output; +} +)"); } WHEN("Using depth_write(replace)") @@ -319,6 +349,21 @@ fn main() -> FragOut OpStore %5 %17 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +struct FragOut +{ + @builtin(frag_depth) depth: f32 +} + +@fragment +fn main() -> FragOut +{ + var output: FragOut; + output.depth = 0.5; + return output; +} +)"); } WHEN("Using depth_write(unchanged)") @@ -447,6 +492,26 @@ fn main(input: FragIn) -> FragOut OpStore %13 %28 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +struct FragIn +{ + @builtin(position) fragCoord: vec4 +} + +struct FragOut +{ + @builtin(frag_depth) depth: f32 +} + +@fragment +fn main(input: FragIn) -> FragOut +{ + var output: FragOut; + output.depth = input.fragCoord.z; + return output; +} +)"); } } @@ -590,7 +655,16 @@ fn main() %4 = OpLabel OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + +} +)"); } + WHEN("Disabling early fragment tests") { @@ -645,6 +719,14 @@ fn main() %4 = OpLabel OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + +} +)"); } } } diff --git a/tests/src/Tests/ExternalTests.cpp b/tests/src/Tests/ExternalTests.cpp index 6648ee7f..b1c69f6e 100644 --- a/tests/src/Tests/ExternalTests.cpp +++ b/tests/src/Tests/ExternalTests.cpp @@ -85,6 +85,18 @@ fn main() OpStore %14 %17 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +// external var tag: Color map +@group(0) @binding(0) var tex: texture_2d; +@group(0) @binding(1) var texSampler: sampler; + +@fragment +fn main() +{ + var value: vec4 = textureSample(tex, texSampler, vec2(0.0, 0.0)); +} +)"); } SECTION("Arrays of texture") diff --git a/tests/src/Tests/ShaderUtils.cpp b/tests/src/Tests/ShaderUtils.cpp index 9a5f2af4..ea363c4b 100644 --- a/tests/src/Tests/ShaderUtils.cpp +++ b/tests/src/Tests/ShaderUtils.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -14,6 +15,7 @@ #include #include #include +#include namespace NAZARA_ANONYMOUS_NAMESPACE { @@ -462,6 +464,50 @@ void ExpectSPIRV(nzsl::Ast::Module& shaderModule, std::string_view expectedOutpu } } +void ExpectWGSL(const nzsl::Ast::Module& shaderModule, std::string_view expectedOutput, const nzsl::ShaderWriter::States& options) +{ + NAZARA_USE_ANONYMOUS_NAMESPACE + + std::string source = SanitizeSource(expectedOutput); + + SECTION("Generating WGSL") + { + nzsl::Ast::ModulePtr sanitizedModule; + WHEN("Sanitizing a second time") + { + CHECK_NOTHROW(sanitizedModule = nzsl::Ast::Sanitize(shaderModule)); + } + const nzsl::Ast::Module& targetModule = (sanitizedModule) ? *sanitizedModule : shaderModule; + + nzsl::WgslWriter writer; + nzsl::WgslWriter::Output output = writer.Generate(targetModule, options); + + SECTION("Validating expected code") + { + std::string outputCode = SanitizeSource(output.code); + if (outputCode.find(source) == std::string::npos) + HandleSourceError("WGSL", source, outputCode); + } + + SECTION("Validating full WGSL code (using wgsl-validator)") + { + char* error = nullptr; + wgsl_validator_t* validator = wgsl_validator_create(); + Nz::CallOnExit cleanupOnExit([&] + { + if (error != nullptr) + wgsl_validator_free_error(error); + wgsl_validator_destroy(validator); + }); + if (wgsl_validator_validate(validator, output.code.c_str(), &error)) + { + INFO("full WGSL output:\n" << output.code << "\nerror:\n" << error); + REQUIRE(false); + } + } + } +} + std::filesystem::path GetResourceDir() { static std::filesystem::path resourceDir = [] diff --git a/tests/src/Tests/ShaderUtils.hpp b/tests/src/Tests/ShaderUtils.hpp index db0fe8dc..3eb30a6c 100644 --- a/tests/src/Tests/ShaderUtils.hpp +++ b/tests/src/Tests/ShaderUtils.hpp @@ -31,6 +31,7 @@ void ExpectGLSL(nzsl::ShaderStageType stageType, nzsl::Ast::Module& shader, std: void ExpectGLSL(nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::BackendParameters& options = {}, const nzsl::GlslWriter::Environment& env = {}, bool testShaderCompilation = true); void ExpectNZSL(const nzsl::Ast::Module& shader, std::string_view expectedOutput); void ExpectSPIRV(nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::BackendParameters& options = {}, const nzsl::SpirvWriter::Environment& env = {}, bool outputParameter = false, const spvtools::ValidatorOptions& validatorOptions = {}); +void ExpectWGSL(const nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::ShaderWriter::States& options = {}); std::filesystem::path GetResourceDir(); diff --git a/tests/xmake.lua b/tests/xmake.lua index e9e6897a..1c89948b 100644 --- a/tests/xmake.lua +++ b/tests/xmake.lua @@ -1,12 +1,15 @@ option("tests", { description = "Build unit tests", default = false }) +-- add_repositories("kbz_8-nazara-engine-repo https://github.com/Kbz-8/xmake-repo") +add_repositories("local-repo /home/kbz_8/Documents/Code/nazara-xmake-repo") + if has_config("tests") then if has_config("asan") then add_defines("CATCH_CONFIG_NO_WINDOWS_SEH") add_defines("CATCH_CONFIG_NO_POSIX_SIGNALS") end - add_requires("catch2 3", "spirv-tools", "tiny-process-library") + add_requires("catch2 3", "wgsl-validator", "spirv-tools", "tiny-process-library") add_requires("glslang", { configs = { rtti = has_config("ubsan") } }) -- ubsan requires rtti add_includedirs("src") @@ -19,7 +22,7 @@ if has_config("tests") then add_files("src/**.cpp") add_deps("nzsl") - add_packages("catch2", "glslang", "spirv-tools") + add_packages("catch2", "glslang", "wgsl-validator", "spirv-tools") if has_config("with_nzslc") then add_deps("nzslc", { links = {} }) From f22dcc85769a24ad393d76f2e14fed76c23bbc40 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Sun, 27 Apr 2025 21:02:14 +0200 Subject: [PATCH 09/37] ading tests --- TODO.md | 4 + src/NZSL/WgslWriter.cpp | 125 ++++++++++++++++------- tests/src/Tests/AccessMemberTests.cpp | 6 +- tests/src/Tests/AliasTests.cpp | 55 ++++++++++ tests/src/Tests/ArithmeticTests.cpp | 138 ++++++++++++++++++++++++++ tests/src/Tests/ArrayTests.cpp | 34 +++++++ tests/xmake.lua | 1 - 7 files changed, 323 insertions(+), 40 deletions(-) create mode 100644 TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 00000000..fb096735 --- /dev/null +++ b/TODO.md @@ -0,0 +1,4 @@ +# Sanitizer + +* Vertex shader should always contain `position` in their output +* Fragment shader inputs should always be related to vertex shader output (location or builtin) diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 7fc978e2..d4324b7d 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include @@ -43,12 +44,6 @@ namespace nzsl { if (node.funcIndex) m_writer.RegisterFunction(*node.funcIndex, node.name); - std::optional entryPointType; - if (node.entryStage.HasValue()) - entryPointType = node.entryStage.GetResultingValue(); - if (entryPointType && *entryPointType == ShaderStageType::Vertex) - { - } } WgslWriter& m_writer; @@ -378,14 +373,14 @@ namespace nzsl void WgslWriter::Append(const Ast::ArrayType& type) { if (type.length > 0) - Append("array[", type.containedType->type, ", ", type.length, "]"); + Append("array<", type.containedType->type, ", ", type.length, ">"); else - Append("array[", type.containedType->type, "]"); + Append("array<", type.containedType->type, ">"); } void WgslWriter::Append(const Ast::DynArrayType& type) { - Append("dyn_array[", type.containedType->type, "]"); + Append("dyn_array<", type.containedType->type, ">"); } void WgslWriter::Append(const Ast::ExpressionType& type) @@ -417,20 +412,11 @@ namespace nzsl void WgslWriter::Append(const Ast::MatrixType& matrixType) { - if (matrixType.columnCount == matrixType.rowCount) - { - Append("mat"); - Append(matrixType.columnCount); - } - else - { - Append("mat"); - Append(matrixType.columnCount); - Append("x"); - Append(matrixType.rowCount); - } - - Append("[", matrixType.type, "]"); + Append("mat"); + Append(matrixType.columnCount); + Append("x"); + Append(matrixType.rowCount); + Append("<", matrixType.type, ">"); } void WgslWriter::Append(const Ast::MethodType& /*functionType*/) @@ -949,6 +935,13 @@ namespace nzsl bool v = value; return AppendValue(v); } + else if constexpr (IsVector_v) + { + std::string str = Ast::ConstantToString(value); + std::replace(str.begin(), str.end(), '[', '<'); + std::replace(str.begin(), str.end(), ']', '>'); + Append(str); + } else Append(Ast::ConstantToString(value)); } @@ -1140,6 +1133,8 @@ namespace nzsl void WgslWriter::Visit(Ast::BinaryExpression& node) { + bool rightCastU32 = false; + Visit(node.left, true); switch (node.op) @@ -1163,11 +1158,15 @@ namespace nzsl case Ast::BinaryType::BitwiseAnd: Append(" & "); break; case Ast::BinaryType::BitwiseOr: Append(" | "); break; case Ast::BinaryType::BitwiseXor: Append(" ^ "); break; - case Ast::BinaryType::ShiftLeft: Append(" << "); break; - case Ast::BinaryType::ShiftRight: Append(" >> "); break; + case Ast::BinaryType::ShiftLeft: Append(" << "); rightCastU32 = true; break; + case Ast::BinaryType::ShiftRight: Append(" >> "); rightCastU32 = true; break; } + if (rightCastU32) + Append("u32("); Visit(node.right, true); + if (rightCastU32) + Append(")"); } void WgslWriter::Visit(Ast::CallFunctionExpression& node) @@ -1181,13 +1180,9 @@ namespace nzsl Append(", "); if (node.parameters[i].semantic == Ast::FunctionParameterSemantic::InOut) - { Append("inout "); - } else if (node.parameters[i].semantic == Ast::FunctionParameterSemantic::Out) - { Append("out "); - } node.parameters[i].expr->Visit(*this); } @@ -1199,15 +1194,67 @@ namespace nzsl Append(node.targetType); Append("("); - bool first = true; - for (const auto& exprPtr : node.expressions) + if (node.expressions.size() > 1 || !node.targetType.IsResultingValue()) { - if (!first) - Append(", "); + bool first = true; + for (const auto& exprPtr : node.expressions) + { + if (!first) + Append(", "); - first = false; + first = false; - exprPtr->Visit(*this); + exprPtr->Visit(*this); + } + } + else + { + /** + * In WGSL, code like this is invalid: + * `var m: mat3x3 = mat3x3(1.0);` + * + * Instead we fill the declaration with the number of components: + * `var m: mat3x3 = mat3x3(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0);` + */ + std::size_t nbParams; + std::visit(Nz::Overloaded + { + [&](const Ast::VectorType& vec) + { + nbParams = vec.componentCount; + }, + [&](const Ast::MatrixType& mat) + { + nbParams = mat.columnCount * mat.rowCount; + }, + [&](const Ast::PrimitiveType&) + { + nbParams = 1; + }, + [&](const Ast::UniformType&) { throw std::runtime_error("unexpected UniformType?"); }, + [&](const Ast::StorageType&) { throw std::runtime_error("unexpected StorageType?"); }, + [&](const Ast::SamplerType&) { throw std::runtime_error("unexpected SamplerType?"); }, + [&](const Ast::PushConstantType&) { throw std::runtime_error("unexpected PushConstantType?"); }, + [&](const Ast::TextureType&) { throw std::runtime_error("unexpected TextureType?"); }, + [&](const Ast::NoType&) { throw std::runtime_error("unexpected NoType?"); }, + [&](const Ast::AliasType&) { throw std::runtime_error("unexpected AliasType?"); }, + [&](const Ast::ArrayType&) { throw std::runtime_error("unexpected ArrayType?"); }, + [&](const Ast::DynArrayType&) { throw std::runtime_error("unexpected DynArrayType?"); }, + [&](const Ast::FunctionType&) { throw std::runtime_error("unexpected FunctionType?"); }, + [&](const Ast::IntrinsicFunctionType&) { throw std::runtime_error("unexpected IntrinsicFunctionType?"); }, + [&](const Ast::MethodType&) { throw std::runtime_error("unexpected MethodType?"); }, + [&](const Ast::ModuleType&) { throw std::runtime_error("unexpected ModuleType?"); }, + [&](const Ast::StructType&) { throw std::runtime_error("unexpected StructType?"); }, + [&](const Ast::Type&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::NamedExternalBlockType&) { throw std::runtime_error("unexpected NamedExternalBlockType?"); } + }, node.targetType.GetResultingValue()); + + for (std::size_t i = 0; i < nbParams; i++) + { + if (i != 0) + Append(", "); + node.expressions.at(0)->Visit(*this); + } } Append(")"); @@ -1338,8 +1385,11 @@ namespace nzsl // Method intrinsics case Ast::IntrinsicType::ArraySize: assert(!node.parameters.empty()); - Visit(node.parameters.front(), true); - Append(".Size"); + assert(!node.parameters.empty()); + firstParam = false; + firstParamIndex = node.parameters.size(); + Append("arrayLength("); + node.parameters[0]->Visit(*this); method = true; break; @@ -1437,7 +1487,6 @@ namespace nzsl break; case Ast::UnaryType::Plus: - Append("+"); break; } diff --git a/tests/src/Tests/AccessMemberTests.cpp b/tests/src/Tests/AccessMemberTests.cpp index 17e678bb..13ec80ce 100644 --- a/tests/src/Tests/AccessMemberTests.cpp +++ b/tests/src/Tests/AccessMemberTests.cpp @@ -51,7 +51,7 @@ void main() ExpectNZSL(*shaderModule, R"( [entry(vert)] -fn main() -> @builtin(position) vec4 +fn main() { let result: f32 = ubo.s.field.z; } @@ -68,6 +68,7 @@ OpStore OpReturn OpFunctionEnd)"); +#if 0 ExpectWGSL(*shaderModule, R"( @vertex fn main() @@ -75,6 +76,7 @@ fn main() var result: f32 = ubo.s.field.z; } )"); +#endif } SECTION("AccessMember with multiples fields") @@ -113,6 +115,7 @@ OpStore OpReturn OpFunctionEnd)"); +#if 0 ExpectWGSL(*shaderModule, R"( @vertex fn main() -> @builtin(position) vec4 @@ -120,6 +123,7 @@ fn main() -> @builtin(position) vec4 var result: f32 = ubo.s.field.z; } )"); +#endif } } } diff --git a/tests/src/Tests/AliasTests.cpp b/tests/src/Tests/AliasTests.cpp index 3cd1c92c..1d4df8cf 100644 --- a/tests/src/Tests/AliasTests.cpp +++ b/tests/src/Tests/AliasTests.cpp @@ -93,6 +93,18 @@ OpCompositeExtract OpStore OpReturn OpFunctionEnd)"); + +#if 0 + ExpectWGSL(*shaderModule, R"( +@fragment +fn main(input: Input) -> Output +{ + var output: Output; + output.value = extData.value * input.value; + return output; +} +)"); +#endif } SECTION("Conditional aliases") @@ -218,6 +230,27 @@ OpCompositeExtract OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +struct ForwardOutput +{ + @location(0) color: vec4 +} + +struct DeferredOutput +{ + @location(0) color: vec4, + @location(1) normal: vec3 +} + +@fragment +fn main() -> ForwardOutput +{ + var output: ForwardOutput; + output.color = vec4(0.0, 0.0, 1.0, 1.0); + return output; +} +)"); } WHEN("We disable ForwardPass") @@ -299,6 +332,28 @@ OpCompositeExtract OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +struct ForwardOutput +{ + @location(0) color: vec4 +} + +struct DeferredOutput +{ + @location(0) color: vec4, + @location(1) normal: vec3 +} + +@fragment +fn main() -> DeferredOutput +{ + var output: DeferredOutput; + output.color = vec4(0.0, 0.0, 1.0, 1.0); + output.normal = vec3(0.0, 1.0, 0.0); + return output; +} +)"); } } } diff --git a/tests/src/Tests/ArithmeticTests.cpp b/tests/src/Tests/ArithmeticTests.cpp index 6106e57f..c24cfa1b 100644 --- a/tests/src/Tests/ArithmeticTests.cpp +++ b/tests/src/Tests/ArithmeticTests.cpp @@ -268,6 +268,41 @@ fn main() OpStore %48 %112 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var x: i32 = 5; + var y: i32 = 2; + var r: i32 = x + y; + var r_2: i32 = x - y; + var r_3: i32 = x * y; + var r_4: i32 = x / y; + var r_5: i32 = x % y; + var x_2: f32 = 5.0; + var y_2: f32 = 2.0; + var r_6: f32 = x_2 + y_2; + var r_7: f32 = x_2 - y_2; + var r_8: f32 = x_2 * y_2; + var r_9: f32 = x_2 / y_2; + var r_10: f32 = x_2 % y_2; + var x_3: vec2 = vec2(5, 7); + var y_3: vec2 = vec2(2, 3); + var r_11: vec2 = x_3 + y_3; + var r_12: vec2 = x_3 - y_3; + var r_13: vec2 = x_3 * y_3; + var r_14: vec2 = x_3 / y_3; + var r_15: vec2 = x_3 % y_3; + var x_4: vec2 = vec2(5.0, 7.0); + var y_4: vec2 = vec2(2.0, 3.0); + var r_16: vec2 = x_4 + y_4; + var r_17: vec2 = x_4 - y_4; + var r_18: vec2 = x_4 * y_4; + var r_19: vec2 = x_4 / y_4; + var r_20: vec2 = x_4 % y_4; +} +)"); } SECTION("Bitwise operations") @@ -533,6 +568,27 @@ fn main() OpStore %48 %112 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var x: i32 = 5; + var y: i32 = 2; + var r: i32 = x & y; + var r_2: i32 = x | y; + var r_3: i32 = x ^ y; + var r_4: i32 = x << u32(y); + var r_5: i32 = x >> u32(y); + var x_2: u32 = u32(5); + var y_2: u32 = u32(2); + var r_6: u32 = x_2 & y_2; + var r_7: u32 = x_2 | y_2; + var r_8: u32 = x_2 ^ y_2; + var r_9: u32 = x_2 << u32(y_2); + var r_10: u32 = x_2 >> u32(y_2); +} +)"); // r_9 and r_10 expressions should perhaps not cast the right node to u32 } SECTION("Matrix/matrix operations") @@ -737,6 +793,21 @@ fn main() OpStore %18 %131 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var x: mat3x3 = mat3x3(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + var y: mat3x3 = mat3x3(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0); + var r: mat3x3 = x + y; + var r_2: mat3x3 = x - y; + var r_3: mat3x3 = x * y; + x += y; + x -= y; + x *= y; +} +)"); } SECTION("Matrix/scalars operations") @@ -815,6 +886,17 @@ fn main() OpStore %22 %39 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var mat: mat3x3 = mat3x3(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0); + var val: f32 = 42.0; + var r: mat3x3 = mat * val; + var r_2: mat3x3 = val * mat; +} +)"); } SECTION("Vector/vector operations") @@ -957,6 +1039,27 @@ fn main() OpStore %30 %64 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var x: vec3 = vec3(0.0, 1.0, 2.0); + var y: vec3 = vec3(2.0, 1.0, 0.0); + var r: vec3 = x + y; + var r_2: vec3 = x - y; + var r_3: vec3 = x * y; + var r_4: vec3 = x / y; + var r_5: vec3 = x % y; + var x_2: vec3 = vec3(u32(0), u32(1), u32(2)); + var y_2: vec3 = vec3(u32(2), u32(1), u32(0)); + var r_6: vec3 = x_2 + y_2; + var r_7: vec3 = x_2 - y_2; + var r_8: vec3 = x_2 * y_2; + var r_9: vec3 = x_2 / y_2; + var r_10: vec3 = x_2 % y_2; +} +)"); } SECTION("Vector/scalars operations") @@ -1123,6 +1226,29 @@ fn main() OpStore %38 %85 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var vec: vec4 = vec4(1, 2, 3, 4); + var val: i32 = 42; + var r: vec4 = vec * val; + var r_2: vec4 = val * vec; + var r_3: vec4 = vec / val; + var r_4: vec4 = val / vec; + var r_5: vec4 = vec % val; + var r_6: vec4 = val % vec; + var vec_2: vec4 = vec4(1.0, 2.0, 3.0, 4.0); + var val_2: f32 = 42.0; + var r_7: vec4 = vec_2 * val_2; + var r_8: vec4 = val_2 * vec_2; + var r_9: vec4 = vec_2 / val_2; + var r_10: vec4 = val_2 / vec_2; + var r_11: vec4 = vec_2 % val_2; + var r_12: vec4 = val_2 % vec_2; +} +)"); } SECTION("Unary operators") @@ -1234,5 +1360,17 @@ fn main() OpStore %35 %46 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var r: f32 = 42.0; + var r_2: f32 = -6.0; + var r_3: f32 = (-r_2) * (r_2); + var r_4: i32 = ~42; + var r_5: u32 = ~u32(42); +} +)"); } } diff --git a/tests/src/Tests/ArrayTests.cpp b/tests/src/Tests/ArrayTests.cpp index 191f3241..eb4faede 100644 --- a/tests/src/Tests/ArrayTests.cpp +++ b/tests/src/Tests/ArrayTests.cpp @@ -201,5 +201,39 @@ fn main(input: VertIn) -> VertOut OpStore %32 %70 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +const vertices: array, 3> = array, 3>( + vec3(1.0, 2.0, 3.0), + vec3(4.0, 5.0, 6.0), + vec3(7.0, 8.0, 9.0) +); + +struct VertIn +{ + @builtin(vertex_index) vert_index: i32 +} + +struct VertOut +{ + @builtin(position) pos: vec4 +} + +@vertex +fn main(input: VertIn) -> VertOut +{ + var output: VertOut; + if ((u32(input.vert_index)) < (vertices.length())) + { + output.pos = vec4(vertices[input.vert_index], 1.0); + } + else + { + output.pos = vec4(0.0, 0.0, 0.0, 0.0); + } + + var customData: array = array(1, 2, 3, 4, 5); + return output; +})"); } } diff --git a/tests/xmake.lua b/tests/xmake.lua index 1c89948b..09fd1af7 100644 --- a/tests/xmake.lua +++ b/tests/xmake.lua @@ -1,7 +1,6 @@ option("tests", { description = "Build unit tests", default = false }) -- add_repositories("kbz_8-nazara-engine-repo https://github.com/Kbz-8/xmake-repo") -add_repositories("local-repo /home/kbz_8/Documents/Code/nazara-xmake-repo") if has_config("tests") then if has_config("asan") then From bb6a9d18d13fc3036e4c2e31b1fc0ff8d894347d Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Sun, 18 May 2025 20:51:21 +0200 Subject: [PATCH 10/37] adding tests --- TODO.md | 1 + src/NZSL/WgslWriter.cpp | 171 +++++++++++----------- tests/src/Tests/ArrayTests.cpp | 4 +- tests/src/Tests/BranchTests.cpp | 90 ++++++++++++ tests/src/Tests/BuiltinAttributeTests.cpp | 63 ++++++++ tests/src/Tests/CastTests.cpp | 20 +++ tests/src/Tests/ComparisonTests.cpp | 64 ++++++++ tests/src/Tests/ComputeTests.cpp | 28 ++++ tests/src/Tests/ExternalTests.cpp | 42 ++++++ tests/xmake.lua | 2 +- 10 files changed, 400 insertions(+), 85 deletions(-) diff --git a/TODO.md b/TODO.md index fb096735..db592d3e 100644 --- a/TODO.md +++ b/TODO.md @@ -2,3 +2,4 @@ * Vertex shader should always contain `position` in their output * Fragment shader inputs should always be related to vertex shader output (location or builtin) +* Array of textures [See this](https://github.com/gpuweb/gpuweb/issues/822) diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index d4324b7d..9133b5ee 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -30,6 +30,7 @@ #include #include +#include namespace nzsl { @@ -273,6 +274,7 @@ namespace nzsl bool isInEntryPoint = false; int streamEmptyLine = 1; unsigned int indentLevel = 0; + bool isTerminatedScope = false; }; WgslWriter::Output WgslWriter::Generate(const Ast::Module& module, const States& states) @@ -571,7 +573,6 @@ namespace nzsl bool first = true; - Append("@"); AppendAttributesInternal(first, std::forward(params)...); if (appendLine) @@ -597,21 +598,8 @@ namespace nzsl AppendAttributesInternal(first, secondParam, std::forward(params)...); } - void WgslWriter::AppendAttribute(bool first, AutoBindingAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, AutoBindingAttribute /*attribute*/) { - if (!attribute.HasValue()) - return; - if (!first) - Append(" @"); - - Append("auto_binding("); - - if (attribute.autoBinding.IsResultingValue()) - Append((attribute.autoBinding.GetResultingValue()) ? "true" : "false"); - else - attribute.autoBinding.GetExpression()->Visit(*this); - - Append(")"); } void WgslWriter::AppendAttribute(bool first, AuthorAttribute attribute) @@ -619,7 +607,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); Append("author(", EscapeString(attribute.author), ")"); } @@ -629,7 +618,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); Append("binding("); @@ -646,7 +636,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); auto it = s_wgslBuiltinMapping.find(attribute.builtin.GetResultingValue()); assert(it != s_wgslBuiltinMapping.end()); if (it->second.empty()) @@ -659,7 +650,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); Append("cond("); @@ -681,7 +673,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); Append("desc(", EscapeString(attribute.description), ")"); } @@ -696,7 +689,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); if (attribute.stageType.IsResultingValue()) { @@ -711,18 +705,9 @@ namespace nzsl attribute.stageType.GetExpression()->Visit(*this); } - void WgslWriter::AppendAttribute(bool first, FeatureAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, FeatureAttribute /*attribute*/) { - if (!first) - Append(" @"); - Append("feature("); - - auto it = LangData::s_moduleFeatures.find(attribute.featureAttribute); - assert(it != LangData::s_moduleFeatures.end()); - - Append(it->second.identifier); - - Append(")"); + throw std::runtime_error("none of the features of NZSL are supported by WGSL"); } void WgslWriter::AppendAttribute(bool first, InterpAttribute attribute) @@ -730,7 +715,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); Append("interp("); @@ -747,7 +733,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); Append("layout("); if (attribute.layout.IsResultingValue()) @@ -757,14 +744,9 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(bool first, LicenseAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, LicenseAttribute /*attribute*/) { - if (!attribute.HasValue()) - return; - if (!first) - Append(" @"); - - Append("license(", EscapeString(attribute.license), ")"); + // TODO } void WgslWriter::AppendAttribute(bool first, LocationAttribute attribute) @@ -772,7 +754,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); Append("location("); @@ -789,7 +772,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); Append("group("); @@ -801,14 +785,9 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(bool first, TagAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, TagAttribute /*attribute*/) { - if (!attribute.HasValue()) - return; - if (!first) - Append(" @"); - - Append("tag(", EscapeString(attribute.tag), ")"); + // TODO } void WgslWriter::AppendAttribute(bool first, UnrollAttribute attribute) @@ -816,7 +795,8 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); Append("unroll("); @@ -833,9 +813,10 @@ namespace nzsl if (!attribute.HasValue()) return; if (!first) - Append(" @"); + Append(" "); + Append("@"); - Append("workgroup("); + Append("workgroup_size("); if (attribute.workgroup.IsResultingValue()) { @@ -1326,7 +1307,6 @@ namespace nzsl { bool method = false; bool firstParam = true; - std::size_t firstParamIndex = 0; switch (node.intrinsic) { // Function intrinsics @@ -1384,31 +1364,34 @@ namespace nzsl // Method intrinsics case Ast::IntrinsicType::ArraySize: - assert(!node.parameters.empty()); assert(!node.parameters.empty()); firstParam = false; - firstParamIndex = node.parameters.size(); + if (node.parameters[0]->cachedExpressionType.has_value()) + { + auto value = node.parameters[0]->cachedExpressionType.value(); + if (IsArrayType(value) && std::get(value).length > 0) + { + Append(std::get(value).length); + return; + } + } Append("arrayLength("); node.parameters[0]->Visit(*this); method = true; break; case Ast::IntrinsicType::TextureRead: - assert(!node.parameters.empty()); - Visit(node.parameters.front(), true); - Append(".Read"); - method = true; + Append("textureLoad"); break; case Ast::IntrinsicType::TextureSampleImplicitLod: firstParam = false; - firstParamIndex = node.parameters.size(); Append("textureSample("); node.parameters[0]->Visit(*this); Append(", "); node.parameters[0]->Visit(*this); Append("Sampler, "); - node.parameters[1]->Visit(*this); + method = true; break; case Ast::IntrinsicType::TextureSampleImplicitLodDepthComp: @@ -1419,17 +1402,14 @@ namespace nzsl break; case Ast::IntrinsicType::TextureWrite: - assert(!node.parameters.empty()); - Visit(node.parameters.front(), true); - Append(".Write"); - method = true; + Append("textureStore"); break; } if (firstParam) Append("("); bool first = true; - for (std::size_t i = (method) ? firstParamIndex + 1 : firstParamIndex; i < node.parameters.size(); ++i) + for (std::size_t i = (method) ? 1 : 0; i < node.parameters.size(); ++i) { if (!first) Append(", "); @@ -1674,32 +1654,55 @@ namespace nzsl Append(" ", externalVar.name, ": texture_storage_"); switch (textureType.dim) { - case ImageType::E1D: Append("1d"); break; - case ImageType::E2D: Append("2d"); break; + case ImageType::E1D: Append("1d"); break; + case ImageType::E2D: Append("2d"); break; case ImageType::E2D_Array: Append("2d_array"); break; - case ImageType::E3D: Append("3d"); break; + case ImageType::E3D: Append("3d"); break; default: throw std::runtime_error("unexpected texture type"); } - switch (textureType.baseType) + Append("<"); + switch (textureType.format) { - case Ast::PrimitiveType::Boolean: - throw std::runtime_error("unexpected bool type for texture"); - case Ast::PrimitiveType::Float64: - throw std::runtime_error("unexpected f64 type for texture"); + case ImageFormat::RGBA8: Append("rgba8unorm"); break; + case ImageFormat::RGBA8i: Append("rgba8sint"); break; + case ImageFormat::RGBA8Snorm: Append("rgba8snorm"); break; + case ImageFormat::RGBA8ui: Append("rgba8uint"); break; - case Ast::PrimitiveType::Float32: Append(""); break; - case Ast::PrimitiveType::Int32: Append(""); break; - case Ast::PrimitiveType::UInt32: Append(""); break; + case ImageFormat::RGBA16f: Append("rgba16float"); break; + case ImageFormat::RGBA16i: Append("rgba16sint"); break; + case ImageFormat::RGBA16ui: Append("rgba16uint"); break; - case Ast::PrimitiveType::String: - throw std::runtime_error("unexpected string type for texture"); + case ImageFormat::R32f: Append("r32float"); break; + case ImageFormat::R32i: Append("r32sint"); break; + case ImageFormat::R32ui: Append("r32uint"); break; + + case ImageFormat::RG32f: Append("rg32float"); break; + case ImageFormat::RG32i: Append("rg32sint"); break; + case ImageFormat::RG32ui: Append("rg32uint"); break; + + case ImageFormat::RGBA32f: Append("rgba32float"); break; + case ImageFormat::RGBA32i: Append("rgba32sint"); break; + case ImageFormat::RGBA32ui: Append("rgba32uint"); break; + + default: + throw std::runtime_error("unexpected format type for texture"); } + Append(", "); + switch (textureType.accessPolicy) + { + case AccessPolicy::ReadOnly: Append("read"); break; + case AccessPolicy::ReadWrite: Append("read_write"); break; + case AccessPolicy::WriteOnly: Append("write"); break; + } + Append(">"); + }, + [&](const Ast::ArrayType& arrayType) + { }, [&](const Ast::NoType&) { throw std::runtime_error("unexpected Type?"); }, [&](const Ast::AliasType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::ArrayType&) { throw std::runtime_error("unexpected Type?"); }, [&](const Ast::DynArrayType&) { throw std::runtime_error("unexpected Type?"); }, [&](const Ast::FunctionType&) { throw std::runtime_error("unexpected Type?"); }, [&](const Ast::IntrinsicFunctionType&) { throw std::runtime_error("unexpected Type?"); }, @@ -1809,7 +1812,11 @@ namespace nzsl first = false; AppendAttributes(false, CondAttribute{ member.cond }, LocationAttribute{ member.locationIndex }, InterpAttribute{ member.interp }, BuiltinAttribute{ member.builtin }, TagAttribute{ member.tag }); - Append(member.name, ": ", member.type); + Append(member.name, ": "); + if (member.builtin.HasValue() && member.builtin.GetResultingValue() == Ast::BuiltinEntry::VertexIndex) + Append("u32"); + else + Append(member.type); } } LeaveScope(); diff --git a/tests/src/Tests/ArrayTests.cpp b/tests/src/Tests/ArrayTests.cpp index eb4faede..8255776d 100644 --- a/tests/src/Tests/ArrayTests.cpp +++ b/tests/src/Tests/ArrayTests.cpp @@ -211,7 +211,7 @@ const vertices: array, 3> = array, 3>( struct VertIn { - @builtin(vertex_index) vert_index: i32 + @builtin(vertex_index) vert_index: u32 } struct VertOut @@ -223,7 +223,7 @@ struct VertOut fn main(input: VertIn) -> VertOut { var output: VertOut; - if ((u32(input.vert_index)) < (vertices.length())) + if ((u32(input.vert_index)) < (3)) { output.pos = vec4(vertices[input.vert_index], 1.0); } diff --git a/tests/src/Tests/BranchTests.cpp b/tests/src/Tests/BranchTests.cpp index a70eefb9..c86ab7b3 100644 --- a/tests/src/Tests/BranchTests.cpp +++ b/tests/src/Tests/BranchTests.cpp @@ -87,6 +87,23 @@ OpBranch OpLabel OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var value: f32; + if (data.value > (0.0)) + { + value = 1.0; + } + else + { + value = 0.0; + } + +} +)"); } WHEN("using a more complex branch") @@ -178,6 +195,23 @@ OpBranch OpLabel OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var value: f32; + if ((data.value > (42.0)) || ((data.value <= (50.0)) && (data.value < (0.0)))) + { + value = 1.0; + } + else + { + value = 0.0; + } + +} +)"); } WHEN("discarding in a branch") @@ -269,6 +303,21 @@ OpCompositeExtract OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() -> Output +{ + if (data.value > (0.0)) + { + discard; + } + + var output: Output; + output.color = vec4(1.0, 1.0, 1.0, 1.0); + return output; +} +)"); } WHEN("discarding in a const branch") @@ -337,6 +386,22 @@ OpLabel OpVariable OpKill OpFunctionEnd)"); + +/* + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() -> Output +{ + { + discard; + } + + var output: Output; + output.color = vec4(1.0, 1.0, 1.0, 1.0); + return output; +} +)"); +*/ } WHEN("using a complex branch") @@ -462,5 +527,30 @@ OpBranch OpLabel OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var value: f32; + if (data.value >= (3.0)) + { + value = 3.0; + } + else if (data.value > (2.0)) + { + value = 2.0; + } + else if (data.value > (1.0)) + { + value = 1.0; + } + else + { + value = 0.0; + } + +} +)"); } } diff --git a/tests/src/Tests/BuiltinAttributeTests.cpp b/tests/src/Tests/BuiltinAttributeTests.cpp index 3c7ed8d7..35f2e557 100644 --- a/tests/src/Tests/BuiltinAttributeTests.cpp +++ b/tests/src/Tests/BuiltinAttributeTests.cpp @@ -246,6 +246,38 @@ fn main(input: Input) -> Output OpDecorate %14 Decoration(BuiltIn) BuiltIn(VertexIndex) OpDecorate %21 Decoration(BuiltIn) BuiltIn(Position))", {}, spirvEnv, true); } + +/* + ExpectWGSL(*shaderModule, R"( +struct Input +{ + @builtin(base_instance) base_instance: i32, + @builtin(base_vertex) base_vertex: i32, + @builtin(draw_index) draw_index: i32, + @builtin(instance_index) instance_index: i32, + @builtin(vertex_index) vertex_index: u32 +} + +struct Output +{ + @builtin(position) position: vec4 +} + +@vertex +fn main(input: Input) -> Output +{ + var bi: i32 = input.base_instance; + var bv: i32 = input.base_vertex; + var di: i32 = input.draw_index; + var ii: i32 = input.instance_index; + var vi: u32 = input.vertex_index; + var color: f32 = f32((((bi + bv) + di) + ii) + vi); + var output: Output; + output.position = color.xxxx; + return output; +} +)"); +*/ } SECTION("vertex index") @@ -325,6 +357,27 @@ fn main(input: Input) -> Output )"); ExpectSPIRV(*shaderModule, R"(OpDecorate %5 Decoration(BuiltIn) BuiltIn(VertexIndex))", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +struct Input +{ + @builtin(vertex_index) vert_index: u32 +} + +struct Output +{ + @builtin(position) position: vec4 +} + +@vertex +fn main(input: Input) -> Output +{ + var color: f32 = f32(input.vert_index); + var output: Output; + output.position = vec4(color, color, color, color); + return output; +} +)"); } SECTION("vertex position") @@ -428,5 +481,15 @@ fn main() -> Output )"); ExpectSPIRV(*shaderModule, R"(OpDecorate %6 Decoration(BuiltIn) BuiltIn(Position))", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@vertex +fn main() -> Output +{ + var output: Output; + output.position = vec4(0.0, 0.5, 1.0, 1.0); + return output; +} +)"); } } diff --git a/tests/src/Tests/CastTests.cpp b/tests/src/Tests/CastTests.cpp index 120deade..1d4cf8e1 100644 --- a/tests/src/Tests/CastTests.cpp +++ b/tests/src/Tests/CastTests.cpp @@ -136,5 +136,25 @@ fn main() OpStore %28 %47 OpReturn OpFunctionEnd)", {}, {}, true); +/* + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var fVal: f32 = 42.0; + var x: f64 = f64(fVal); + var x_2: i32 = i32(fVal); + var x_3: u32 = u32(fVal); + var iVal: i32 = 42; + var x_4: f32 = f32(iVal); + var x_5: f64 = f64(iVal); + var x_6: u32 = u32(iVal); + var uVal: u32 = u32(42); + var x_7: f32 = f32(uVal); + var x_8: f64 = f64(uVal); + var x_9: i32 = i32(uVal); +} +)"); +*/ } } diff --git a/tests/src/Tests/ComparisonTests.cpp b/tests/src/Tests/ComparisonTests.cpp index 92248f00..c81d2f90 100644 --- a/tests/src/Tests/ComparisonTests.cpp +++ b/tests/src/Tests/ComparisonTests.cpp @@ -338,6 +338,49 @@ fn main() OpStore %64 %148 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var x: i32 = 5; + var y: i32 = 2; + var r: bool = x == y; + var r_2: bool = x != y; + var r_3: bool = x < y; + var r_4: bool = x <= y; + var r_5: bool = x > y; + var r_6: bool = x >= y; + var x_2: f32 = 5.0; + var y_2: f32 = 2.0; + var r_7: bool = x_2 == y_2; + var r_8: bool = x_2 != y_2; + var r_9: bool = x_2 < y_2; + var r_10: bool = x_2 <= y_2; + var r_11: bool = x_2 > y_2; + var r_12: bool = x_2 >= y_2; + var x_3: vec2 = vec2(5, 7); + var y_3: vec2 = vec2(2, 3); + var r_13: vec2 = x_3 == y_3; + var r_14: vec2 = x_3 != y_3; + var r_15: vec2 = x_3 < y_3; + var r_16: vec2 = x_3 <= y_3; + var r_17: vec2 = x_3 > y_3; + var r_18: vec2 = x_3 >= y_3; + var x_4: vec2 = vec2(5.0, 7.0); + var y_4: vec2 = vec2(2.0, 3.0); + var r_19: vec2 = x_4 == y_4; + var r_20: vec2 = x_4 != y_4; + var r_21: vec2 = x_4 < y_4; + var r_22: vec2 = x_4 <= y_4; + var r_23: vec2 = x_4 > y_4; + var r_24: vec2 = x_4 >= y_4; + var x_5: vec3 = vec3(true, false, true); + var y_5: vec3 = vec3(false, false, true); + var r_25: vec3 = x_5 == y_5; + var r_26: vec3 = x_5 != y_5; +} +)"); } SECTION("Unary operators combined with binary operators") @@ -440,5 +483,26 @@ fn main() OpStore %17 %25 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +fn foo() -> bool +{ + return false; +} + +fn bar() -> bool +{ + return true; +} + +@fragment +fn main() +{ + var x: bool = false; + var y: bool = true; + var z: bool = (!x) || y; + var z_2: bool = (!foo()) || (bar()); +} +)"); } } diff --git a/tests/src/Tests/ComputeTests.cpp b/tests/src/Tests/ComputeTests.cpp index cab40a75..07691410 100644 --- a/tests/src/Tests/ComputeTests.cpp +++ b/tests/src/Tests/ComputeTests.cpp @@ -226,5 +226,33 @@ fn main(input: Input) OpImageWrite %56 %60 %61 OpReturn OpFunctionEnd)", {}, {}, true); +/* + ExpectWGSL(*shaderModule, R"( +struct Data +{ + tex_size: vec2 +} + +@group(0) @binding(0) var input_tex: texture_storage_2d; +@group(0) @binding(1) var output_tex: texture_storage_2d; +@group(0) @binding(2) var data: Data; + +struct Input +{ + @builtin(global_invocation_id) indices: vec3 +} + +@compute @workgroup_size(32, 32, 1) +fn main(input: Input) +{ + if ((input.indices.x >= data.tex_size.x) || (input.indices.y >= data.tex_size.y)) + { + return; + } + + var value: vec4 = textureLoad(input_tex, vec2(input.indices.xy, input.indices.xy)); + textureStore(output_tex, vec2(input.indices.xy, input.indices.xy), value); +})"); +*/ } } diff --git a/tests/src/Tests/ExternalTests.cpp b/tests/src/Tests/ExternalTests.cpp index b1c69f6e..f6a19980 100644 --- a/tests/src/Tests/ExternalTests.cpp +++ b/tests/src/Tests/ExternalTests.cpp @@ -297,6 +297,22 @@ fn main() OpStore %23 %30 OpReturn OpFunctionEnd)", {}, {}, true); +/* + ExpectWGSL(*shaderModule, R"( +struct Data +{ + values: array, + matrices: array, 3> +} + +@group(0) @binding(0) var data: Data; + +@fragment +fn main() +{ + var value: mat4x4 = data.values[42] * data.matrices[1]; +})"); +*/ } SECTION("Storage buffers") @@ -453,6 +469,32 @@ fn main() %24 = OpLabel OpReturn OpFunctionEnd)", {}, spirvEnv, true); + + ExpectWGSL(*shaderModule, R"( +@layout(std430) +struct Data +{ + values: array +} + +@group(0) @binding(0) var inData: Data; +@group(0) @binding(1) var outData: Data; + +@fragment +fn main() +{ + { + var i: i32 = 0; + var to: i32 = 47; + while (i < to) + { + outData.values[i] = inData.values[i]; + i += 1; + } + + } + +})"); } WHEN("Generating SPIR-V 1.3") diff --git a/tests/xmake.lua b/tests/xmake.lua index 09fd1af7..86164435 100644 --- a/tests/xmake.lua +++ b/tests/xmake.lua @@ -1,6 +1,6 @@ option("tests", { description = "Build unit tests", default = false }) --- add_repositories("kbz_8-nazara-engine-repo https://github.com/Kbz-8/xmake-repo") +add_repositories("local-repo /home/kbz_8/Documents/Code/nazara-xmake-repo") if has_config("tests") then if has_config("asan") then From 11577b730c041e137d81cbde9c434f1712595225 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Thu, 28 Aug 2025 18:37:47 +0200 Subject: [PATCH 11/37] working on a rebase --- include/NZSL/WgslWriter.hpp | 10 +++++----- src/NZSL/LangWriter.cpp | 1 - src/NZSL/WgslWriter.cpp | 9 ++------- tests/src/Tests/ShaderUtils.cpp | 15 ++++++++++----- tests/src/Tests/ShaderUtils.hpp | 2 +- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index ab4435ba..72d8f8c6 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -7,17 +7,17 @@ #ifndef NZSL_WGSLWRITER_HPP #define NZSL_WGSLWRITER_HPP +#include #include -#include #include #include -#include #include +#include #include namespace nzsl { - class NZSL_API WgslWriter : public ShaderWriter, public Ast::ExpressionVisitorExcept, public Ast::StatementVisitorExcept + class NZSL_API WgslWriter : Ast::ExpressionVisitorExcept, Ast::StatementVisitorExcept { public: struct Environment; @@ -28,7 +28,7 @@ namespace nzsl WgslWriter(WgslWriter&&) = delete; ~WgslWriter() = default; - Output Generate(const Ast::Module& module, const States& states = {}); + Output Generate(const Ast::Module& module, const BackendParameters& parameters = {}); void SetEnv(Environment environment); @@ -42,7 +42,7 @@ namespace nzsl std::unordered_map bindingRemap; }; - static Ast::SanitizeVisitor::Options GetSanitizeOptions(); + static void RegisterPasses(Ast::TransformerExecutor& executor); private: struct PreVisitor; diff --git a/src/NZSL/LangWriter.cpp b/src/NZSL/LangWriter.cpp index b68ad1e0..cfefeb38 100644 --- a/src/NZSL/LangWriter.cpp +++ b/src/NZSL/LangWriter.cpp @@ -1778,5 +1778,4 @@ namespace nzsl ScopeVisit(*node.body); } - } diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 9133b5ee..43508d1d 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -11,11 +11,8 @@ #include #include #include -#include #include -#include #include -#include #include #include #include @@ -25,7 +22,6 @@ #include #include #include -#include #include #include @@ -269,15 +265,14 @@ namespace nzsl std::unordered_map bindingRemap; std::vector externalBlockNames; std::vector moduleNames; - const States* states = nullptr; - const Ast::Module* module; + const BackendParameters& backendParameters; bool isInEntryPoint = false; int streamEmptyLine = 1; unsigned int indentLevel = 0; bool isTerminatedScope = false; }; - WgslWriter::Output WgslWriter::Generate(const Ast::Module& module, const States& states) + WgslWriter::Output WgslWriter::Generate(const Ast::Module& module, const BackendParameters& parameters) { State state; state.states = &states; diff --git a/tests/src/Tests/ShaderUtils.cpp b/tests/src/Tests/ShaderUtils.cpp index ea363c4b..0cdb2523 100644 --- a/tests/src/Tests/ShaderUtils.cpp +++ b/tests/src/Tests/ShaderUtils.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include namespace NAZARA_ANONYMOUS_NAMESPACE @@ -464,10 +464,13 @@ void ExpectSPIRV(nzsl::Ast::Module& shaderModule, std::string_view expectedOutpu } } -void ExpectWGSL(const nzsl::Ast::Module& shaderModule, std::string_view expectedOutput, const nzsl::ShaderWriter::States& options) +void ExpectWGSL(const nzsl::Ast::Module& shaderModule, std::string_view expectedOutput) { NAZARA_USE_ANONYMOUS_NAMESPACE + // Clone to avoid cross-test changes + nzsl::Ast::ModulePtr moduleClone = nzsl::Ast::Clone(shaderModule); + std::string source = SanitizeSource(expectedOutput); SECTION("Generating WGSL") @@ -475,12 +478,14 @@ void ExpectWGSL(const nzsl::Ast::Module& shaderModule, std::string_view expected nzsl::Ast::ModulePtr sanitizedModule; WHEN("Sanitizing a second time") { - CHECK_NOTHROW(sanitizedModule = nzsl::Ast::Sanitize(shaderModule)); + nzsl::Ast::TransformerContext context; + nzsl::Ast::ResolveTransformer resolver; + REQUIRE_NOTHROW(resolver.Transform(*moduleClone, context)); } - const nzsl::Ast::Module& targetModule = (sanitizedModule) ? *sanitizedModule : shaderModule; + nzsl::Ast::Module& targetModule = (sanitizedModule) ? *sanitizedModule : *moduleClone; nzsl::WgslWriter writer; - nzsl::WgslWriter::Output output = writer.Generate(targetModule, options); + nzsl::WgslWriter::Output output = writer.Generate(targetModule); SECTION("Validating expected code") { diff --git a/tests/src/Tests/ShaderUtils.hpp b/tests/src/Tests/ShaderUtils.hpp index 3eb30a6c..2e4ed989 100644 --- a/tests/src/Tests/ShaderUtils.hpp +++ b/tests/src/Tests/ShaderUtils.hpp @@ -31,7 +31,7 @@ void ExpectGLSL(nzsl::ShaderStageType stageType, nzsl::Ast::Module& shader, std: void ExpectGLSL(nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::BackendParameters& options = {}, const nzsl::GlslWriter::Environment& env = {}, bool testShaderCompilation = true); void ExpectNZSL(const nzsl::Ast::Module& shader, std::string_view expectedOutput); void ExpectSPIRV(nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::BackendParameters& options = {}, const nzsl::SpirvWriter::Environment& env = {}, bool outputParameter = false, const spvtools::ValidatorOptions& validatorOptions = {}); -void ExpectWGSL(const nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::ShaderWriter::States& options = {}); +void ExpectWGSL(const nzsl::Ast::Module& shader, std::string_view expectedOutput); std::filesystem::path GetResourceDir(); From 9b61a03fe366a675eb23ffae27058ad6aaad2515 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Fri, 29 Aug 2025 01:31:15 +0200 Subject: [PATCH 12/37] fixing rebase, fixing unary management, bitwise operators and unit tests in WGSL --- include/NZSL/WgslWriter.hpp | 10 +- src/NZSL/GlslWriter.cpp | 1 - src/NZSL/WgslWriter.cpp | 386 +++++++++++++++------- tests/src/Tests/ArithmeticTests.cpp | 31 +- tests/src/Tests/BranchTests.cpp | 2 - tests/src/Tests/BuiltinAttributeTests.cpp | 2 - tests/src/Tests/ExternalTests.cpp | 7 +- tests/xmake.lua | 2 +- 8 files changed, 304 insertions(+), 137 deletions(-) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index 72d8f8c6..de9a5c40 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -28,7 +28,7 @@ namespace nzsl WgslWriter(WgslWriter&&) = delete; ~WgslWriter() = default; - Output Generate(const Ast::Module& module, const BackendParameters& parameters = {}); + Output Generate(Ast::Module& module, const BackendParameters& parameters = {}); void SetEnv(Environment environment); @@ -74,6 +74,9 @@ namespace nzsl void Append(const Ast::ExpressionType& type); void Append(const Ast::ExpressionValue& type); void Append(const Ast::FunctionType& functionType); + void Append(const Ast::ImplicitArrayType& type); + void Append(const Ast::ImplicitMatrixType& type); + void Append(const Ast::ImplicitVectorType& type); void Append(const Ast::IntrinsicFunctionType& intrinsicFunctionType); void Append(const Ast::MatrixType& matrixType); void Append(const Ast::MethodType& methodType); @@ -114,7 +117,7 @@ namespace nzsl void AppendAttribute(bool first, WorkgroupAttribute attribute); void AppendComment(std::string_view section); void AppendCommentSection(std::string_view section); - void AppendHeader(); + void AppendHeader(const Ast::Module::Metadata& metadata); template void AppendIdentifier(const T& map, std::size_t id); void AppendLine(std::string_view txt = {}); template void AppendLine(Args&&... params); @@ -129,7 +132,7 @@ namespace nzsl void RegisterConstant(std::size_t constantIndex, std::string constantName); void RegisterFunction(std::size_t funcIndex, std::string functionName); void RegisterModule(std::size_t moduleIndex, std::string moduleName); - void RegisterStruct(std::size_t structIndex, std::string structName); + void RegisterStruct(std::size_t structIndex, const Ast::StructDescription& structDescription); void RegisterVariable(std::size_t varIndex, std::string varName); void ScopeVisit(Ast::Statement& node); @@ -137,6 +140,7 @@ namespace nzsl void Visit(Ast::ExpressionPtr& expr, bool encloseIfRequired = false); using ExpressionVisitorExcept::Visit; + void Visit(Ast::AccessFieldExpression& node) override; void Visit(Ast::AccessIdentifierExpression& node) override; void Visit(Ast::AccessIndexExpression& node) override; void Visit(Ast::AliasValueExpression& node) override; diff --git a/src/NZSL/GlslWriter.cpp b/src/NZSL/GlslWriter.cpp index b9e6df8a..74125d86 100644 --- a/src/NZSL/GlslWriter.cpp +++ b/src/NZSL/GlslWriter.cpp @@ -350,7 +350,6 @@ namespace nzsl }; } - struct GlslWriter::State { State(const BackendParameters& backendParameters, const GlslWriter::Parameters& glslParameters) : diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 43508d1d..eb2ae5a6 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -3,6 +3,7 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include "NZSL/Ast/Enums.hpp" +#include "NZSL/Ast/ExpressionType.hpp" #include #include #include @@ -15,6 +16,18 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -22,6 +35,7 @@ #include #include #include +#include #include #include @@ -188,64 +202,13 @@ namespace nzsl { Ast::BuiltinEntry::WorkgroupIndices, "workgroup_id" } }); - Ast::SanitizeVisitor::Options WgslWriter::GetSanitizeOptions() + struct WgslWriter::State { - static constexpr auto s_reservedKeywords = frozen::make_unordered_set({ - "NULL", "Self", "abstract", "active", "alignas", "alignof", "as", "asm", "asm_fragment", "async", - "attribute", "auto", "await", "become", "cast", "catch", "class", "co_await", "co_return", "co_yield", - "coherent", "column_major", "common", "compile", "compile_fragment", "concept", "const_cast", "consteval", - "constexpr", "constinit", "crate", "debugger", "decltype", "delete", "demote", "demote_to_helper", - "do", "dynamic_cast", "enum", "explicit", "export", "extends", "extern", "external", "fallthrough", - "filter", "final", "finally", "friend", "from", "fxgroup", "get", "goto", "groupshared", "highp", "impl", - "implements", "import", "inline", "instanceof", "interface", "layout", "lowp", "macro", "macro_rules", - "match", "mediump", "meta", "mod", "module", "move", "mut", "mutable", "namespace", "new", "nil", - "noexcept", "noinline", "nointerpolation", "non_coherent", "noncoherent", "noperspective", "null", - "nullptr", "of", "operator", "package", "packoffset", "partition", "pass", "patch", "pixelfragment", - "precise", "precision", "premerge", "priv", "protected", "pub", "public", "readonly", "ref", "regardless", - "register", "reinterpret_cast", "require", "resource", "restrict", "self", "set", "shared", "sizeof", - "smooth", "snorm", "static", "static_assert", "static_cast", "std", "subroutine", "super", "target", - "template", "this", "thread_local", "throw", "trait", "try", "type", "typedef", "typeid", "typename", - "typeof", "union", "unless", "unorm", "unsafe", "unsized", "use", "using", "varying", "virtual", - "volatile", "wgsl", "where", "with", "writeonly", "yield", "alias", "break", "case", "const", "const_assert", - "continue", "continuing", "default", "diagnostic", "discard", "else", "enable", "false", "fn", "for", - "if", "let", "loop", "override", "requires", "return", "struct", "switch", "true", "var", "while" - }); - - Ast::SanitizeVisitor::Options options; - options.makeVariableNameUnique = true; - options.reduceLoopsToWhile = true; - options.removeAliases = true; - options.removeCompoundAssignments = false; - options.removeOptionDeclaration = true; - options.removeScalarSwizzling = true; - options.removeSingleConstDeclaration = true; - options.splitWrappedStructAssignation = true; //< TODO: Only split for base uniforms/storage - options.identifierSanitizer = [](std::string& identifier, Ast::IdentifierScope /*scope*/) + State(const BackendParameters& backendParameters) : + backendParameters(backendParameters) { - using namespace std::string_view_literals; - - bool nameChanged = false; - while (s_reservedKeywords.count(frozen::string(identifier)) != 0) - { - identifier += '_'; - nameChanged = true; - } - - // Identifier can't start with _nzsl - if (identifier.compare(0, 5, "_nzsl") == 0) - { - identifier.replace(0, 5, "_"sv); - nameChanged = true; - } - - return nameChanged; - }; - - return options; - } + } - struct WgslWriter::State - { struct Identifier { std::optional externalBlockIndex; @@ -253,6 +216,11 @@ namespace nzsl std::string name; }; + struct StructData : Identifier + { + const Ast::StructDescription* desc; + }; + std::optional currentExternalBlockIndex; std::size_t currentModuleIndex; std::stringstream stream; @@ -260,7 +228,7 @@ namespace nzsl std::unordered_map constants; std::unordered_map functions; std::unordered_map modules; - std::unordered_map structs; + std::unordered_map structs; std::unordered_map variables; std::unordered_map bindingRemap; std::vector externalBlockNames; @@ -272,52 +240,61 @@ namespace nzsl bool isTerminatedScope = false; }; - WgslWriter::Output WgslWriter::Generate(const Ast::Module& module, const BackendParameters& parameters) + WgslWriter::Output WgslWriter::Generate(Ast::Module& module, const BackendParameters& parameters) { - State state; - state.states = &states; + State state(parameters); m_currentState = &state; - Nz::CallOnExit onExit([this]() + NAZARA_DEFER({ m_currentState = nullptr; }); + + if (parameters.backendPasses) { - m_currentState = nullptr; - }); + Ast::TransformerExecutor executor; + if (parameters.backendPasses.Test(BackendPass::Resolve)) + { + executor.AddPass([&](Ast::ResolveTransformer::Options& opt) + { + opt.moduleResolver = parameters.shaderModuleResolver; + opt.removeAliases = true; + }); + } - state.module = &module; + if (parameters.backendPasses.Test(BackendPass::TargetRequired)) + RegisterPasses(executor); - Ast::ModulePtr sanitizedModule; - const Ast::Module* targetModule; - if (!states.sanitized) - { - Ast::SanitizeVisitor::Options options = GetSanitizeOptions(); - options.optionValues = states.optionValues; - options.moduleResolver = states.shaderModuleResolver; + if (parameters.backendPasses.Test(BackendPass::Optimize)) + executor.AddPass(); + + if (parameters.backendPasses.Test(BackendPass::Validate)) + { + executor.AddPass([](Ast::ValidationTransformer::Options& opt) + { + opt.allowUntyped = false; + opt.checkIndices = true; + }); + } - sanitizedModule = Ast::Sanitize(module, options); - targetModule = sanitizedModule.get(); + Ast::TransformerContext context; + context.optionValues = parameters.optionValues; + + executor.Transform(module, context); } - else - targetModule = &module; - if (states.optimize) + if (parameters.backendPasses.Test(BackendPass::RemoveDeadCode)) { - sanitizedModule = Ast::PropagateConstants(*targetModule); - Ast::DependencyCheckerVisitor::Config dependencyConfig; dependencyConfig.usedShaderStages = ShaderStageType_All; - sanitizedModule = Ast::EliminateUnusedPass(*sanitizedModule, dependencyConfig); - - targetModule = sanitizedModule.get(); + Ast::EliminateUnusedPass(module, dependencyConfig); } - AppendHeader(); + AppendHeader(*module.metadata); // First registration pass (required to register function names) PreVisitor previsitor(*this); { m_currentState->currentModuleIndex = 0; - for (const auto& importedModule : targetModule->importedModules) + for (const auto& importedModule : module.importedModules) { importedModule.module->rootNode->Visit(previsitor); m_currentState->currentModuleIndex++; @@ -327,7 +304,7 @@ namespace nzsl m_currentState->currentModuleIndex = std::numeric_limits::max(); std::size_t moduleIndex = 0; - for (const auto& importedModule : targetModule->importedModules) + for (const auto& importedModule : module.importedModules) RegisterModule(moduleIndex++, importedModule.identifier); module.rootNode->Visit(previsitor); @@ -335,7 +312,7 @@ namespace nzsl // Register imported modules m_currentState->currentModuleIndex = 0; - for (const auto& importedModule : targetModule->importedModules) + for (const auto& importedModule : module.importedModules) { AppendModuleAttributes(*importedModule.module->metadata); AppendLine("module ", importedModule.identifier); @@ -348,7 +325,7 @@ namespace nzsl } m_currentState->currentModuleIndex = std::numeric_limits::max(); - targetModule->rootNode->Visit(*this); + module.rootNode->Visit(*this); Output output; output.code = std::move(state.stream).str(); @@ -362,6 +339,103 @@ namespace nzsl m_environment = std::move(environment); } + void WgslWriter::RegisterPasses(Ast::TransformerExecutor& executor) + { + // Wtf WGSL ? + static constexpr auto s_reservedKeywords = frozen::make_unordered_set({ + "NULL", "Self", "abstract", "active", "alignas", "alignof", "as", "asm", "asm_fragment", "async", + "attribute", "auto", "await", "become", "cast", "catch", "class", "co_await", "co_return", "co_yield", + "coherent", "column_major", "common", "compile", "compile_fragment", "concept", "const_cast", "consteval", + "constexpr", "constinit", "crate", "debugger", "decltype", "delete", "demote", "demote_to_helper", + "do", "dynamic_cast", "enum", "explicit", "export", "extends", "extern", "external", "fallthrough", + "filter", "final", "finally", "friend", "from", "fxgroup", "get", "goto", "groupshared", "highp", "impl", + "implements", "import", "inline", "instanceof", "interface", "layout", "lowp", "macro", "macro_rules", + "match", "mediump", "meta", "mod", "module", "move", "mut", "mutable", "namespace", "new", "nil", + "noexcept", "noinline", "nointerpolation", "non_coherent", "noncoherent", "noperspective", "null", + "nullptr", "of", "operator", "package", "packoffset", "partition", "pass", "patch", "pixelfragment", + "precise", "precision", "premerge", "priv", "protected", "pub", "public", "readonly", "ref", "regardless", + "register", "reinterpret_cast", "require", "resource", "restrict", "self", "set", "shared", "sizeof", + "smooth", "snorm", "static", "static_assert", "static_cast", "std", "subroutine", "super", "target", + "template", "this", "thread_local", "throw", "trait", "try", "type", "typedef", "typeid", "typename", + "typeof", "union", "unless", "unorm", "unsafe", "unsized", "use", "using", "varying", "virtual", + "volatile", "wgsl", "where", "with", "writeonly", "yield", "alias", "break", "case", "const", "const_assert", + "continue", "continuing", "default", "diagnostic", "discard", "else", "enable", "false", "fn", "for", + "if", "let", "loop", "override", "requires", "return", "struct", "switch", "true", "var", "while" + }); + + // We need two identifiers passes, the first one to rename reserved/forbidden variable names and the second one to ensure all variables name are uniques (which isn't guaranteed by the transformation passes) + // We can't do this at once at the end because transformations passes will introduce variables prefixed by _nzsl which is forbidden in user code + Ast::IdentifierTransformer::Options firstIdentifierPassOptions; + firstIdentifierPassOptions.makeVariableNameUnique = false; + firstIdentifierPassOptions.identifierSanitizer = [](std::string& identifier, Ast::IdentifierType /*scope*/) + { + using namespace std::string_view_literals; + + // Identifier can't start with _nzsl + if (identifier.compare(0, 5, "_nzsl") == 0) + { + identifier.replace(0, 5, "_"sv); + return true; + } + + return false; + }; + + Ast::IdentifierTransformer::Options secondIdentifierPassOptions; + secondIdentifierPassOptions.makeVariableNameUnique = true; + secondIdentifierPassOptions.identifierSanitizer = [](std::string& identifier, Ast::IdentifierType /*scope*/) + { + using namespace std::string_view_literals; + + bool nameChanged = false; + while (s_reservedKeywords.count(frozen::string(identifier)) != 0) + { + identifier += '_'; + nameChanged = true; + } + + // Identifier can't start with gl_ + if (identifier.compare(0, 3, "gl_") == 0) + { + identifier.replace(0, 3, "_gl_"sv); + nameChanged = true; + } + + // Replace __ by _X_ + std::size_t startPos = 0; + while ((startPos = identifier.find("__"sv, startPos)) != std::string::npos) + { + std::size_t endPos = identifier.find_first_not_of('_', startPos); + identifier.replace(startPos, endPos - startPos, fmt::format("{}{}_", (startPos == 0) ? "_" : "", endPos - startPos)); + + startPos = endPos; + nameChanged = true; + } + + return nameChanged; + }; + + executor.AddPass(); + executor.AddPass(firstIdentifierPassOptions); + executor.AddPass(); + executor.AddPass([](Ast::StructAssignmentTransformer::Options& opt) + { + opt.splitWrappedArrayAssignation = false; + opt.splitWrappedStructAssignation = true; //< TODO: Only split for base uniforms/storage + }); + executor.AddPass([](Ast::SwizzleTransformer::Options& opt) + { + opt.removeScalarSwizzling = true; + }); + executor.AddPass(); + executor.AddPass([](Ast::ConstantRemovalTransformer::Options& opt) + { + opt.removeConstArraySize = false; + opt.removeTypeConstant = false; + }); + executor.AddPass(secondIdentifierPassOptions); + } + void WgslWriter::Append(const Ast::AliasType& type) { AppendIdentifier(m_currentState->aliases, type.aliasIndex); @@ -407,6 +481,21 @@ namespace nzsl throw std::runtime_error("unexpected intrinsic function type"); } + void WgslWriter::Append(const Ast::ImplicitArrayType& /*type*/) + { + throw std::runtime_error("unexpected ImplicitArrayType"); + } + + void WgslWriter::Append(const Ast::ImplicitMatrixType& /*type*/) + { + throw std::runtime_error("unexpected ImplicitMatrixType"); + } + + void WgslWriter::Append(const Ast::ImplicitVectorType& /*type*/) + { + throw std::runtime_error("unexpected ImplicitVectorType"); + } + void WgslWriter::Append(const Ast::MatrixType& matrixType) { Append("mat"); @@ -440,7 +529,9 @@ namespace nzsl case Ast::PrimitiveType::Float64: return Append("f64"); case Ast::PrimitiveType::Int32: return Append("i32"); case Ast::PrimitiveType::UInt32: return Append("u32"); - case Ast::PrimitiveType::String: return Append("string"); + case Ast::PrimitiveType::FloatLiteral: throw std::runtime_error("unexpected untyped float"); + case Ast::PrimitiveType::IntLiteral: throw std::runtime_error("unexpected untyped integer"); + case Ast::PrimitiveType::String: throw std::runtime_error("unexpected string type"); } } @@ -723,20 +814,9 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(bool first, LayoutAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, LayoutAttribute /*attribute*/) { - if (!attribute.HasValue()) - return; - if (!first) - Append(" "); - Append("@"); - - Append("layout("); - if (attribute.layout.IsResultingValue()) - Append(Parser::ToString(attribute.layout.GetResultingValue())); - else - attribute.layout.GetExpression()->Visit(*this); - Append(")"); + // WGSL does not have memory layout management syntax } void WgslWriter::AppendAttribute(bool /*first*/, LicenseAttribute /*attribute*/) @@ -918,6 +998,11 @@ namespace nzsl std::replace(str.begin(), str.end(), ']', '>'); Append(str); } + else if constexpr (std::is_same_v) + { + Append(Ast::ToString(value)); + Append("u"); + } else Append(Ast::ConstantToString(value)); } @@ -1009,14 +1094,15 @@ namespace nzsl m_currentState->modules.emplace(moduleIndex, std::move(identifier)); } - void WgslWriter::RegisterStruct(std::size_t structIndex, std::string structName) + void WgslWriter::RegisterStruct(std::size_t structIndex, const Ast::StructDescription& structDescription) { - State::Identifier identifier; - identifier.moduleIndex = m_currentState->currentModuleIndex; - identifier.name = std::move(structName); + State::StructData structData; + structData.moduleIndex = m_currentState->currentModuleIndex; + structData.name = structDescription.name; + structData.desc = &structDescription; assert(m_currentState->structs.find(structIndex) == m_currentState->structs.end()); - m_currentState->structs.emplace(structIndex, std::move(identifier)); + m_currentState->structs.emplace(structIndex, std::move(structData)); } void WgslWriter::RegisterVariable(std::size_t varIndex, std::string varName) @@ -1055,6 +1141,36 @@ namespace nzsl Append(")"); } + void WgslWriter::Visit(Ast::AccessFieldExpression& node) + { + Visit(node.expr, true); + + const Ast::ExpressionType* exprType = GetExpressionType(*node.expr); + NazaraUnused(exprType); + assert(exprType); + assert(IsStructAddressible(*exprType)); + + std::size_t structIndex = Ast::ResolveStructIndex(*exprType); + assert(structIndex != std::numeric_limits::max()); + + const auto& structData = Nz::Retrieve(m_currentState->structs, structIndex); + + std::uint32_t remainingIndices = node.fieldIndex; + for (const auto& member : structData.desc->members) + { + if (member.cond.HasValue() && !member.cond.GetResultingValue()) + continue; + + if (remainingIndices == 0) + { + Append(".", member.name); + break; + } + + remainingIndices--; + } + } + void WgslWriter::Visit(Ast::AccessIdentifierExpression& node) { Visit(node.expr, true); @@ -1109,7 +1225,7 @@ namespace nzsl void WgslWriter::Visit(Ast::BinaryExpression& node) { - bool rightCastU32 = false; + bool needsClosingCast = false; Visit(node.left, true); @@ -1134,14 +1250,33 @@ namespace nzsl case Ast::BinaryType::BitwiseAnd: Append(" & "); break; case Ast::BinaryType::BitwiseOr: Append(" | "); break; case Ast::BinaryType::BitwiseXor: Append(" ^ "); break; - case Ast::BinaryType::ShiftLeft: Append(" << "); rightCastU32 = true; break; - case Ast::BinaryType::ShiftRight: Append(" >> "); rightCastU32 = true; break; + case Ast::BinaryType::ShiftLeft: Append(" << "); break; + case Ast::BinaryType::ShiftRight: Append(" >> "); break; } - if (rightCastU32) - Append("u32("); + if (node.op == Ast::BinaryType::ShiftLeft || node.op == Ast::BinaryType::ShiftRight) + { + const Ast::ExpressionType& rightType = Ast::ResolveAlias(Ast::EnsureExpressionType(*node.right)); + + if (Ast::IsVectorType(rightType)) + { + Ast::VectorType vectorType = std::get(rightType); + if (vectorType.type == Ast::PrimitiveType::Int32) + { + Append("vec"); + Append(std::to_string(vectorType.componentCount)); + Append("("); + needsClosingCast = true; + } + } + else if (Ast::IsPrimitiveType(rightType) && std::get(rightType) == Ast::PrimitiveType::Int32) + { + Append("u32("); + needsClosingCast = true; + } + } Visit(node.right, true); - if (rightCastU32) + if (needsClosingCast) Append(")"); } @@ -1222,7 +1357,10 @@ namespace nzsl [&](const Ast::ModuleType&) { throw std::runtime_error("unexpected ModuleType?"); }, [&](const Ast::StructType&) { throw std::runtime_error("unexpected StructType?"); }, [&](const Ast::Type&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::NamedExternalBlockType&) { throw std::runtime_error("unexpected NamedExternalBlockType?"); } + [&](const Ast::NamedExternalBlockType&) { throw std::runtime_error("unexpected NamedExternalBlockType?"); }, + [&](const Ast::ImplicitArrayType&) { throw std::runtime_error("unexpected ImplicitArrayType?"); }, + [&](const Ast::ImplicitMatrixType&) { throw std::runtime_error("unexpected ImplicitMatrixType?"); }, + [&](const Ast::ImplicitVectorType&) { throw std::runtime_error("unexpected ImplicitVectorType?"); }, }, node.targetType.GetResultingValue()); for (std::size_t i = 0; i < nbParams; i++) @@ -1306,6 +1444,8 @@ namespace nzsl { // Function intrinsics case Ast::IntrinsicType::Abs: + case Ast::IntrinsicType::All: + case Ast::IntrinsicType::Any: case Ast::IntrinsicType::ArcCos: case Ast::IntrinsicType::ArcCosh: case Ast::IntrinsicType::ArcSin: @@ -1325,6 +1465,8 @@ namespace nzsl case Ast::IntrinsicType::Exp2: case Ast::IntrinsicType::Floor: case Ast::IntrinsicType::Fract: + case Ast::IntrinsicType::IsInf: + case Ast::IntrinsicType::IsNaN: case Ast::IntrinsicType::InverseSqrt: case Ast::IntrinsicType::Length: case Ast::IntrinsicType::Lerp: @@ -1335,6 +1477,7 @@ namespace nzsl case Ast::IntrinsicType::Max: case Ast::IntrinsicType::Min: case Ast::IntrinsicType::Normalize: + case Ast::IntrinsicType::Not: case Ast::IntrinsicType::Pow: case Ast::IntrinsicType::RadToDeg: case Ast::IntrinsicType::Reflect: @@ -1344,7 +1487,9 @@ namespace nzsl case Ast::IntrinsicType::Sign: case Ast::IntrinsicType::Sin: case Ast::IntrinsicType::Sinh: + case Ast::IntrinsicType::SmoothStep: case Ast::IntrinsicType::Sqrt: + case Ast::IntrinsicType::Step: case Ast::IntrinsicType::Tan: case Ast::IntrinsicType::Tanh: case Ast::IntrinsicType::Trunc: @@ -1571,7 +1716,7 @@ namespace nzsl for (const auto& externalVar : node.externalVars) { - if (!externalVar.tag.empty() && m_currentState->states->debugLevel >= DebugLevel::Minimal) + if (!externalVar.tag.empty() && m_currentState->backendParameters.debugLevel >= DebugLevel::Minimal) AppendComment("external var tag: " + externalVar.tag); std::uint32_t binding = 0; @@ -1603,8 +1748,8 @@ namespace nzsl switch (storageType.accessPolicy) { case AccessPolicy::ReadOnly: Append("read"); break; + case AccessPolicy::WriteOnly: case AccessPolicy::ReadWrite: Append("read_write"); break; - case AccessPolicy::WriteOnly: Append("write"); break; } Append("> ", externalVar.name, ": ", storageType.containedType); }, @@ -1634,6 +1779,10 @@ namespace nzsl case Ast::PrimitiveType::String: throw std::runtime_error("unexpected string type for texture"); + + case Ast::PrimitiveType::FloatLiteral: + case Ast::PrimitiveType::IntLiteral: + throw std::runtime_error("unexpected untyped for sampler"); } AppendLine(" ", externalVar.name, ": texture_", dimension, type, ";"); AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding + 1 } }); @@ -1708,7 +1857,10 @@ namespace nzsl [&](const Ast::StructType&) { throw std::runtime_error("unexpected Type?"); }, [&](const Ast::Type&) { throw std::runtime_error("unexpected Type?"); }, [&](const Ast::VectorType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::NamedExternalBlockType&) { throw std::runtime_error("unexpected Type?"); } + [&](const Ast::NamedExternalBlockType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::ImplicitArrayType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::ImplicitMatrixType&) { throw std::runtime_error("unexpected Type?"); }, + [&](const Ast::ImplicitVectorType&) { throw std::runtime_error("unexpected Type?"); }, }, externalVar.type.GetResultingValue()); AppendLine(";"); @@ -1791,7 +1943,7 @@ namespace nzsl void WgslWriter::Visit(Ast::DeclareStructStatement& node) { if (node.structIndex) - RegisterStruct(*node.structIndex, node.description.name); + RegisterStruct(*node.structIndex, node.description); AppendAttributes(true, LayoutAttribute{ node.description.layout }, TagAttribute{ node.description.tag }); Append("struct "); @@ -1965,9 +2117,9 @@ namespace nzsl ScopeVisit(*node.body); } - void WgslWriter::AppendHeader() + void WgslWriter::AppendHeader(const Ast::Module::Metadata& metadata) { - AppendModuleAttributes(*m_currentState->module->metadata); + AppendModuleAttributes(metadata); AppendLine(); } } diff --git a/tests/src/Tests/ArithmeticTests.cpp b/tests/src/Tests/ArithmeticTests.cpp index c24cfa1b..43cb1037 100644 --- a/tests/src/Tests/ArithmeticTests.cpp +++ b/tests/src/Tests/ArithmeticTests.cpp @@ -580,13 +580,27 @@ fn main() var r_3: i32 = x ^ y; var r_4: i32 = x << u32(y); var r_5: i32 = x >> u32(y); - var x_2: u32 = u32(5); - var y_2: u32 = u32(2); + var x_2: u32 = 5u; + var y_2: u32 = 2u; var r_6: u32 = x_2 & y_2; var r_7: u32 = x_2 | y_2; var r_8: u32 = x_2 ^ y_2; - var r_9: u32 = x_2 << u32(y_2); - var r_10: u32 = x_2 >> u32(y_2); + var r_9: u32 = x_2 << y_2; + var r_10: u32 = x_2 >> y_2; + var x_3: vec3 = vec3(0, 1, 2); + var y_3: vec3 = vec3(2, 1, 0); + var r_11: vec3 = x_3 & y_3; + var r_12: vec3 = x_3 | y_3; + var r_13: vec3 = x_3 ^ y_3; + var r_14: vec3 = x_3 << vec3(y_3); + var r_15: vec3 = x_3 >> vec3(y_3); + var x_4: vec3 = vec3(0u, 1u, 2u); + var y_4: vec3 = vec3(2u, 1u, 0u); + var r_16: vec3 = x_4 & y_4; + var r_17: vec3 = x_4 | y_4; + var r_18: vec3 = x_4 ^ y_4; + var r_19: vec3 = x_4 << y_4; + var r_20: vec3 = x_4 >> y_4; } )"); // r_9 and r_10 expressions should perhaps not cast the right node to u32 } @@ -1051,8 +1065,8 @@ fn main() var r_3: vec3 = x * y; var r_4: vec3 = x / y; var r_5: vec3 = x % y; - var x_2: vec3 = vec3(u32(0), u32(1), u32(2)); - var y_2: vec3 = vec3(u32(2), u32(1), u32(0)); + var x_2: vec3 = vec3(0u, 1u, 2u); + var y_2: vec3 = vec3(2u, 1u, 0u); var r_6: vec3 = x_2 + y_2; var r_7: vec3 = x_2 - y_2; var r_8: vec3 = x_2 * y_2; @@ -1369,7 +1383,10 @@ fn main() var r_2: f32 = -6.0; var r_3: f32 = (-r_2) * (r_2); var r_4: i32 = ~42; - var r_5: u32 = ~u32(42); + var r_5: u32 = ~42u; + var r_6: bool = !true; + var r_7: vec3 = ~vec3(1, 2, 3); + var r_8: vec3 = ~vec3(1u, 2u, 3u); } )"); } diff --git a/tests/src/Tests/BranchTests.cpp b/tests/src/Tests/BranchTests.cpp index c86ab7b3..1c57e6d1 100644 --- a/tests/src/Tests/BranchTests.cpp +++ b/tests/src/Tests/BranchTests.cpp @@ -387,7 +387,6 @@ OpVariable OpKill OpFunctionEnd)"); -/* ExpectWGSL(*shaderModule, R"( @fragment fn main() -> Output @@ -401,7 +400,6 @@ fn main() -> Output return output; } )"); -*/ } WHEN("using a complex branch") diff --git a/tests/src/Tests/BuiltinAttributeTests.cpp b/tests/src/Tests/BuiltinAttributeTests.cpp index 35f2e557..f1363548 100644 --- a/tests/src/Tests/BuiltinAttributeTests.cpp +++ b/tests/src/Tests/BuiltinAttributeTests.cpp @@ -247,7 +247,6 @@ fn main(input: Input) -> Output OpDecorate %21 Decoration(BuiltIn) BuiltIn(Position))", {}, spirvEnv, true); } -/* ExpectWGSL(*shaderModule, R"( struct Input { @@ -277,7 +276,6 @@ fn main(input: Input) -> Output return output; } )"); -*/ } SECTION("vertex index") diff --git a/tests/src/Tests/ExternalTests.cpp b/tests/src/Tests/ExternalTests.cpp index f6a19980..28c417aa 100644 --- a/tests/src/Tests/ExternalTests.cpp +++ b/tests/src/Tests/ExternalTests.cpp @@ -471,22 +471,21 @@ fn main() OpFunctionEnd)", {}, spirvEnv, true); ExpectWGSL(*shaderModule, R"( -@layout(std430) struct Data { values: array } @group(0) @binding(0) var inData: Data; -@group(0) @binding(1) var outData: Data; +@group(0) @binding(1) var outData: Data; @fragment fn main() { { var i: i32 = 0; - var to: i32 = 47; - while (i < to) + var _nzsl_to: i32 = 47; + while (i < _nzsl_to) { outData.values[i] = inData.values[i]; i += 1; diff --git a/tests/xmake.lua b/tests/xmake.lua index 86164435..cce47fbf 100644 --- a/tests/xmake.lua +++ b/tests/xmake.lua @@ -1,6 +1,6 @@ option("tests", { description = "Build unit tests", default = false }) -add_repositories("local-repo /home/kbz_8/Documents/Code/nazara-xmake-repo") +add_repositories("nazara-engine-repo https://github.com/NazaraEngine/xmake-repo") if has_config("tests") then if has_config("asan") then From a807be0aeb90b139ea039c0fc6ea87a5e81f45eb Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Sat, 30 Aug 2025 02:18:49 +0200 Subject: [PATCH 13/37] fixing unit tests, adding type constants, early depth tests, depth write and features management in wgsl backend --- include/NZSL/WgslWriter.hpp | 7 + src/NZSL/Ast/RecursiveVisitor.cpp | 6 +- src/NZSL/WgslWriter.cpp | 363 +++++++++++++++++++--- tests/src/Tests/AccessMemberTests.cpp | 4 +- tests/src/Tests/AliasTests.cpp | 13 +- tests/src/Tests/BuiltinAttributeTests.cpp | 2 + tests/src/Tests/CastTests.cpp | 12 +- tests/src/Tests/ComputeTests.cpp | 5 +- tests/src/Tests/ConstantTests.cpp | 26 ++ tests/src/Tests/EntryFunctionTests.cpp | 28 +- tests/src/Tests/ExternalTests.cpp | 5 +- tests/src/Tests/ShaderUtils.cpp | 7 +- tests/src/Tests/ShaderUtils.hpp | 3 +- 13 files changed, 410 insertions(+), 71 deletions(-) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index de9a5c40..87b6b3ef 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -20,6 +20,7 @@ namespace nzsl class NZSL_API WgslWriter : Ast::ExpressionVisitorExcept, Ast::StatementVisitorExcept { public: + using FeaturesSupportCallback = std::function; struct Environment; struct Output; @@ -34,12 +35,16 @@ namespace nzsl struct Environment { + FeaturesSupportCallback featuresCallback; }; struct Output { std::string code; std::unordered_map bindingRemap; + bool usesDrawParameterBaseInstanceUniform; + bool usesDrawParameterBaseVertexUniform; + bool usesDrawParameterDrawIndexUniform; }; static void RegisterPasses(Ast::TransformerExecutor& executor); @@ -117,6 +122,7 @@ namespace nzsl void AppendAttribute(bool first, WorkgroupAttribute attribute); void AppendComment(std::string_view section); void AppendCommentSection(std::string_view section); + void AppendConstantHelpers(Ast::PrimitiveType type, Ast::TypeConstant constant); void AppendHeader(const Ast::Module::Metadata& metadata); template void AppendIdentifier(const T& map, std::size_t id); void AppendLine(std::string_view txt = {}); @@ -159,6 +165,7 @@ namespace nzsl void Visit(Ast::NamedExternalBlockExpression& node) override; void Visit(Ast::StructTypeExpression& node) override; void Visit(Ast::SwizzleExpression& node) override; + void Visit(Ast::TypeConstantExpression& node) override; void Visit(Ast::VariableValueExpression& node) override; void Visit(Ast::UnaryExpression& node) override; diff --git a/src/NZSL/Ast/RecursiveVisitor.cpp b/src/NZSL/Ast/RecursiveVisitor.cpp index 3991e699..0178f9e0 100644 --- a/src/NZSL/Ast/RecursiveVisitor.cpp +++ b/src/NZSL/Ast/RecursiveVisitor.cpp @@ -42,10 +42,10 @@ namespace nzsl::Ast void RecursiveVisitor::Visit(CallFunctionExpression& node) { + node.targetFunction->Visit(*this); + for (auto& param : node.parameters) param.expr->Visit(*this); - - node.targetFunction->Visit(*this); } void RecursiveVisitor::Visit(CallMethodExpression& node) @@ -64,6 +64,7 @@ namespace nzsl::Ast void RecursiveVisitor::Visit(ConditionalExpression& node) { + node.condition->Visit(*this); node.truePath->Visit(*this); node.falsePath->Visit(*this); } @@ -164,6 +165,7 @@ namespace nzsl::Ast void RecursiveVisitor::Visit(ConditionalStatement& node) { + node.condition->Visit(*this); node.statement->Visit(*this); } diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index eb2ae5a6..e6244ceb 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -28,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +46,41 @@ namespace nzsl { + constexpr std::string_view s_wgslWriterShaderDrawParametersBaseInstanceName = "_nzslBaseInstance"; + constexpr std::string_view s_wgslWriterShaderDrawParametersBaseVertexName = "_nzslBaseVertex"; + constexpr std::string_view s_wgslWriterShaderDrawParametersDrawIndexName = "_nzslDrawID"; + + enum class WgslFeature + { + None = -1, + + WgpuConservativeDepth, // wgpu native features + WgpuEarlyFragmentTests, // wgpu native features + WgpuFloat64, // wgpu native features + }; + + struct WgslBuiltin + { + std::string_view identifier; + WgslFeature requiredFeature; + }; + + constexpr auto s_wgslBuiltinMapping = frozen::make_unordered_map({ + { Ast::BuiltinEntry::BaseInstance, {} }, + { Ast::BuiltinEntry::BaseVertex, {} }, + { Ast::BuiltinEntry::DrawIndex, {} }, + { Ast::BuiltinEntry::FragCoord, { "position", WgslFeature::None } }, + { Ast::BuiltinEntry::FragDepth, { "frag_depth", WgslFeature::None } }, + { Ast::BuiltinEntry::GlocalInvocationIndices, { "global_invocation_id", WgslFeature::None } }, + { Ast::BuiltinEntry::InstanceIndex, { "instance_index", WgslFeature::None } }, + { Ast::BuiltinEntry::LocalInvocationIndex, { "local_invocation_index", WgslFeature::None } }, + { Ast::BuiltinEntry::LocalInvocationIndices, { "local_invocation_id", WgslFeature::None } }, + { Ast::BuiltinEntry::VertexIndex, { "vertex_index", WgslFeature::None } }, + { Ast::BuiltinEntry::VertexPosition, { "position", WgslFeature::None } }, + { Ast::BuiltinEntry::WorkgroupCount, { "num_workgroups", WgslFeature::None } }, + { Ast::BuiltinEntry::WorkgroupIndices, { "workgroup_id", WgslFeature::None } } + }); + struct WgslWriter::PreVisitor : Ast::RecursiveVisitor { PreVisitor(WgslWriter& writer) : @@ -55,9 +92,52 @@ namespace nzsl { if (node.funcIndex) m_writer.RegisterFunction(*node.funcIndex, node.name); + + if (node.entryStage.HasValue()) + { + ShaderStageType stage = node.entryStage.GetResultingValue(); + + if (stage == ShaderStageType::Fragment) + { + if (node.depthWrite.HasValue() && node.depthWrite.GetResultingValue() != Ast::DepthWriteMode::Replace) + + features.insert(WgslFeature::WgpuConservativeDepth); + + if (node.earlyFragmentTests.HasValue() && node.earlyFragmentTests.GetResultingValue()) + features.insert(WgslFeature::WgpuEarlyFragmentTests); + } + } + + RecursiveVisitor::Visit(node); } + void Visit(Ast::TypeConstantExpression& node) override + { + assert(IsPrimitiveType(node.type)); + Ast::PrimitiveType primitiveType = std::get(node.type); + + if (node.typeConstant == Ast::TypeConstant::Infinity) + { + if (primitiveType == Ast::PrimitiveType::Float32) + hasf32Infinity = true; + if (primitiveType == Ast::PrimitiveType::Float64) + hasf64Infinity = true; + } + else if (node.typeConstant == Ast::TypeConstant::NaN) + { + if (primitiveType == Ast::PrimitiveType::Float32) + hasf32NaN = true; + if (primitiveType == Ast::PrimitiveType::Float64) + hasf64NaN = true; + } + } + + tsl::ordered_set features; WgslWriter& m_writer; + bool hasf32Infinity = false; + bool hasf32NaN = false; + bool hasf64Infinity = false; + bool hasf64NaN = false; }; struct WgslWriter::AutoBindingAttribute @@ -186,22 +266,6 @@ namespace nzsl bool HasValue() const { return workgroup.HasValue(); } }; - constexpr auto s_wgslBuiltinMapping = frozen::make_unordered_map({ - { Ast::BuiltinEntry::BaseInstance, {} }, - { Ast::BuiltinEntry::BaseVertex, {} }, - { Ast::BuiltinEntry::DrawIndex, {} }, - { Ast::BuiltinEntry::FragCoord, "position" }, - { Ast::BuiltinEntry::FragDepth, "frag_depth" }, - { Ast::BuiltinEntry::GlocalInvocationIndices, "global_invocation_id" }, - { Ast::BuiltinEntry::InstanceIndex, "instance_index" }, - { Ast::BuiltinEntry::LocalInvocationIndex, "local_invocation_index" }, - { Ast::BuiltinEntry::LocalInvocationIndices, "local_invocation_id" }, - { Ast::BuiltinEntry::VertexIndex, "vertex_index" }, - { Ast::BuiltinEntry::VertexPosition, "position" }, - { Ast::BuiltinEntry::WorkgroupCount, "num_workgroups" }, - { Ast::BuiltinEntry::WorkgroupIndices, "workgroup_id" } - }); - struct WgslWriter::State { State(const BackendParameters& backendParameters) : @@ -238,6 +302,8 @@ namespace nzsl int streamEmptyLine = 1; unsigned int indentLevel = 0; bool isTerminatedScope = false; + bool hasf32RatioFunction = false; + bool hasf64RatioFunction = false; }; WgslWriter::Output WgslWriter::Generate(Ast::Module& module, const BackendParameters& parameters) @@ -288,8 +354,6 @@ namespace nzsl Ast::EliminateUnusedPass(module, dependencyConfig); } - AppendHeader(*module.metadata); - // First registration pass (required to register function names) PreVisitor previsitor(*this); { @@ -310,6 +374,39 @@ namespace nzsl module.rootNode->Visit(previsitor); } + AppendHeader(*module.metadata); + + // Validate required features + for (WgslFeature feature : previsitor.features) + { + switch (feature) + { + case WgslFeature::None: + break; + + case WgslFeature::WgpuConservativeDepth: + { + if (!m_environment.featuresCallback || !m_environment.featuresCallback("WgpuConservativeDepth")) + throw std::runtime_error("WGSL does not support conservative depth feature, wgpu does natively but you need to confirm its usage using feature callback"); + break; + } + + case WgslFeature::WgpuEarlyFragmentTests: + { + if (!m_environment.featuresCallback || !m_environment.featuresCallback("WgpuEarlyFragmentTests")) + throw std::runtime_error("WGSL does not support early fragment depth test feature, wgpu does natively but you need to confirm its usage using feature callback"); + break; + } + + case WgslFeature::WgpuFloat64: + { + if (!m_environment.featuresCallback || !m_environment.featuresCallback("WgpuFloat64")) + throw std::runtime_error("WGSL does not support float 64 feature, wgpu does natively but you need to confirm its usage using feature callback"); + break; + } + } + } + // Register imported modules m_currentState->currentModuleIndex = 0; for (const auto& importedModule : module.importedModules) @@ -324,6 +421,15 @@ namespace nzsl m_currentState->moduleNames.push_back(importedModule.identifier); } + if (previsitor.hasf32Infinity) + AppendConstantHelpers(Ast::PrimitiveType::Float32, Ast::TypeConstant::Infinity); + if (previsitor.hasf32NaN) + AppendConstantHelpers(Ast::PrimitiveType::Float32, Ast::TypeConstant::NaN); + if (previsitor.hasf64Infinity) + AppendConstantHelpers(Ast::PrimitiveType::Float64, Ast::TypeConstant::Infinity); + if (previsitor.hasf64NaN) + AppendConstantHelpers(Ast::PrimitiveType::Float64, Ast::TypeConstant::NaN); + m_currentState->currentModuleIndex = std::numeric_limits::max(); module.rootNode->Visit(*this); @@ -394,13 +500,6 @@ namespace nzsl nameChanged = true; } - // Identifier can't start with gl_ - if (identifier.compare(0, 3, "gl_") == 0) - { - identifier.replace(0, 3, "_gl_"sv); - nameChanged = true; - } - // Replace __ by _X_ std::size_t startPos = 0; while ((startPos = identifier.find("__"sv, startPos)) != std::string::npos) @@ -416,6 +515,7 @@ namespace nzsl }; executor.AddPass(); + //executor.AddPass(); executor.AddPass(firstIdentifierPassOptions); executor.AddPass(); executor.AddPass([](Ast::StructAssignmentTransformer::Options& opt) @@ -612,6 +712,96 @@ namespace nzsl throw std::runtime_error("unexpected type?"); } + void WgslWriter::Visit(Ast::TypeConstantExpression& node) + { + assert(IsPrimitiveType(node.type)); + Ast::PrimitiveType primitiveType = std::get(node.type); + + auto AppendConstant = [&](auto&& type) + { + using T = std::decay_t; + + if (node.typeConstant == Ast::TypeConstant::Max) + { + if constexpr (std::is_same_v) + return Append("3.402823466e+38"); + else if constexpr (std::is_same_v) + return Append("1.7976931348623158e+308lf"); + else + return AppendValue(Nz::MaxValue()); + } + + if (node.typeConstant == Ast::TypeConstant::Min) + { + if constexpr (std::is_same_v) + return Append("-3.402823466e+38"); + else if constexpr (std::is_same_v) + return Append("-1.7976931348623158e+308lf"); + else + return AppendValue(std::numeric_limits::lowest()); //< Nz::MinValue is implemented by std::numeric_limits::min() which doesn't give the value we want + } + + if constexpr (std::is_floating_point_v) + { + if (node.typeConstant == Ast::TypeConstant::Epsilon) + { + if constexpr (std::is_same_v) + return Append("1.192092896e-07"); + else if constexpr (std::is_same_v) + return Append("2.2204460492503131e-016lf"); + else + static_assert(Nz::AlwaysFalse(), "unhandled type"); + } + + if (node.typeConstant == Ast::TypeConstant::Infinity) + { + if constexpr (std::is_same_v) + return Append("_nzslInfinityf32()"); + else if constexpr (std::is_same_v) + return Append("_nzslInfinityf64()"); + else + static_assert(Nz::AlwaysFalse(), "unhandled type"); + } + + if (node.typeConstant == Ast::TypeConstant::MinPositive) + { + if constexpr (std::is_same_v) + return Append("1.175494351e-38"); + else if constexpr (std::is_same_v) + return Append("2.2250738585072014e-308lf"); + else + static_assert(Nz::AlwaysFalse(), "unhandled type"); + } + + if (node.typeConstant == Ast::TypeConstant::NaN) + { + if constexpr (std::is_same_v) + return Append("_nzslNaNf32()"); + else if constexpr (std::is_same_v) + return Append("_nzslNaNf64()"); + else + static_assert(Nz::AlwaysFalse(), "unhandled type"); + } + } + + throw std::runtime_error("unexpected type constant with type"); + }; + + switch (primitiveType) + { + case Ast::PrimitiveType::Float32: AppendConstant(float{}); break; + case Ast::PrimitiveType::Float64: AppendConstant(double{}); break; + case Ast::PrimitiveType::Int32: AppendConstant(std::int32_t{}); break; + case Ast::PrimitiveType::UInt32: AppendConstant(std::uint32_t{}); break; + + case Ast::PrimitiveType::Boolean: + case Ast::PrimitiveType::FloatLiteral: + case Ast::PrimitiveType::IntLiteral: + case Ast::PrimitiveType::String: + throw std::runtime_error("unexpected primitive type"); + } + } + void WgslWriter::Append(const Ast::UniformType& /*uniformType*/) { throw std::runtime_error("unexpected UniformType?"); @@ -688,15 +878,11 @@ namespace nzsl { } - void WgslWriter::AppendAttribute(bool first, AuthorAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, AuthorAttribute attribute) { if (!attribute.HasValue()) return; - if (!first) - Append(" "); - Append("@"); - - Append("author(", EscapeString(attribute.author), ")"); + Append("// Author ", EscapeString(attribute.author)); } void WgslWriter::AppendAttribute(bool first, BindingAttribute attribute) @@ -726,9 +912,9 @@ namespace nzsl Append("@"); auto it = s_wgslBuiltinMapping.find(attribute.builtin.GetResultingValue()); assert(it != s_wgslBuiltinMapping.end()); - if (it->second.empty()) + if (it->second.identifier.empty()) throw std::runtime_error("unsupported builtin attribute! (for now)"); - Append("builtin(", it->second, ")"); + Append("builtin(", it->second.identifier, ")"); } void WgslWriter::AppendAttribute(bool first, CondAttribute attribute) @@ -749,9 +935,19 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(bool /*first*/, DepthWriteAttribute /*attribute*/) + void WgslWriter::AppendAttribute(bool first, DepthWriteAttribute attribute) { - return; + if (!attribute.HasValue() || attribute.writeMode.GetResultingValue() == Ast::DepthWriteMode::Replace) + return; + if (!first) + Append(" "); + switch (attribute.writeMode.GetResultingValue()) + { + case Ast::DepthWriteMode::Greater: Append("@early_depth_test(greater_equal)"); break; + case Ast::DepthWriteMode::Less: Append("@early_depth_test(less_equal)"); break; + case Ast::DepthWriteMode::Replace: break; // Should never be triggered + case Ast::DepthWriteMode::Unchanged: Append("@early_depth_test(unchanged)"); break; + } } void WgslWriter::AppendAttribute(bool first, DescriptionAttribute attribute) @@ -765,9 +961,13 @@ namespace nzsl Append("desc(", EscapeString(attribute.description), ")"); } - void WgslWriter::AppendAttribute(bool /*first*/, EarlyFragmentTestsAttribute /*attribute*/) + void WgslWriter::AppendAttribute(bool first, EarlyFragmentTestsAttribute attribute) { - return; + if (!attribute.HasValue() || !attribute.earlyFragmentTests.GetResultingValue()) + return; + if (!first) + Append(" "); + Append("@early_depth_test(force)"); } void WgslWriter::AppendAttribute(bool first, EntryAttribute attribute) @@ -791,9 +991,28 @@ namespace nzsl attribute.stageType.GetExpression()->Visit(*this); } - void WgslWriter::AppendAttribute(bool /*first*/, FeatureAttribute /*attribute*/) + void WgslWriter::AppendAttribute(bool /*first*/, FeatureAttribute attribute) { - throw std::runtime_error("none of the features of NZSL are supported by WGSL"); + if (!attribute.HasValue()) + return; + + switch (attribute.featureAttribute) + { + case Ast::ModuleFeature::Float64: + { + if (!m_environment.featuresCallback || !m_environment.featuresCallback("WgpuFloat64")) + throw std::runtime_error("WGSL does not support float64 feature, wgpu does natively but you need to confirm its usage using feature callback"); + break; + } + + case Ast::ModuleFeature::PrimitiveExternals: + throw std::runtime_error("primitive externals have no way to be translated in WGSL"); + break; + + case Ast::ModuleFeature::Texture1D: + // Supported by WGSL + break; + } } void WgslWriter::AppendAttribute(bool first, InterpAttribute attribute) @@ -951,6 +1170,71 @@ namespace nzsl AppendLine(); } + void WgslWriter::AppendConstantHelpers(Ast::PrimitiveType type, Ast::TypeConstant constant) + { + using namespace std::string_view_literals; + + std::string_view stringType; + switch (type) + { + case Ast::PrimitiveType::Float32: stringType = "f32"sv; break; + case Ast::PrimitiveType::Float64: stringType = "f64"sv; break; + + default: return; + } + + auto setupRatioFunction = [this, type, stringType]() + { + if (type == Ast::PrimitiveType::Float32) + { + if (m_currentState->hasf32RatioFunction) + return; + m_currentState->hasf32RatioFunction = true; + } + else if (type == Ast::PrimitiveType::Float64) + { + if (m_currentState->hasf64RatioFunction) + return; + m_currentState->hasf64RatioFunction = true; + } + + Append(fmt::format(R"( +fn _nzslRatio{0}(n: {0}, d: {0}) -> {0} +{{ + return n / d; +}} +)", stringType)); + }; + + switch (constant) + { + case Ast::TypeConstant::NaN: + { + setupRatioFunction(); + Append(fmt::format(R"( +fn _nzslNaN{0}() -> {0} +{{ + return _nzslRatio{0}(0.0, 0.0); +}} +)", stringType)); + break; + } + case Ast::TypeConstant::Infinity: + { + setupRatioFunction(); + Append(fmt::format(R"( +fn _nzslInfinity{0}() -> {0} +{{ + return _nzslRatio{0}(1.0, 0.0); +}} +)", stringType)); + break; + } + + default: break; + } + } + void WgslWriter::AppendLine(std::string_view txt) { assert(m_currentState && "This function should only be called while processing an AST"); @@ -2119,6 +2403,7 @@ namespace nzsl void WgslWriter::AppendHeader(const Ast::Module::Metadata& metadata) { + AppendComment("This file was generated by NZSL compiler (Nazara Shading Language)"); AppendModuleAttributes(metadata); AppendLine(); } diff --git a/tests/src/Tests/AccessMemberTests.cpp b/tests/src/Tests/AccessMemberTests.cpp index 13ec80ce..da5eae17 100644 --- a/tests/src/Tests/AccessMemberTests.cpp +++ b/tests/src/Tests/AccessMemberTests.cpp @@ -68,7 +68,7 @@ OpStore OpReturn OpFunctionEnd)"); -#if 0 +#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( @vertex fn main() @@ -115,7 +115,7 @@ OpStore OpReturn OpFunctionEnd)"); -#if 0 +#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( @vertex fn main() -> @builtin(position) vec4 diff --git a/tests/src/Tests/AliasTests.cpp b/tests/src/Tests/AliasTests.cpp index 1d4df8cf..caa6c37c 100644 --- a/tests/src/Tests/AliasTests.cpp +++ b/tests/src/Tests/AliasTests.cpp @@ -3,7 +3,6 @@ #include #include #include -#include TEST_CASE("aliases", "[Shader]") { @@ -15,7 +14,7 @@ module; struct Data { - value: f32 + value: vec4[f32] } alias ExtData = Data; @@ -27,14 +26,14 @@ external struct Input { - value: f32 + [location(0)] value: vec4[f32] } alias In = Input; struct Output { - [location(0)] value: f32 + [location(0)] value: vec4[f32] } alias Out = Output; @@ -56,7 +55,7 @@ fn main(input: In) -> FragOut void main() { Input input_; - input_.value = _nzslInvalue; + input_.value = _nzslVarying0; Output output_; output_.value = extData.value * input_.value; @@ -82,6 +81,8 @@ OpLabel OpVariable OpVariable OpAccessChain +OpCopyMemory +OpAccessChain OpLoad OpAccessChain OpLoad @@ -94,7 +95,6 @@ OpStore OpReturn OpFunctionEnd)"); -#if 0 ExpectWGSL(*shaderModule, R"( @fragment fn main(input: Input) -> Output @@ -104,7 +104,6 @@ fn main(input: Input) -> Output return output; } )"); -#endif } SECTION("Conditional aliases") diff --git a/tests/src/Tests/BuiltinAttributeTests.cpp b/tests/src/Tests/BuiltinAttributeTests.cpp index f1363548..2c26a829 100644 --- a/tests/src/Tests/BuiltinAttributeTests.cpp +++ b/tests/src/Tests/BuiltinAttributeTests.cpp @@ -247,6 +247,7 @@ fn main(input: Input) -> Output OpDecorate %21 Decoration(BuiltIn) BuiltIn(Position))", {}, spirvEnv, true); } +#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( struct Input { @@ -276,6 +277,7 @@ fn main(input: Input) -> Output return output; } )"); +#endif } SECTION("vertex index") diff --git a/tests/src/Tests/CastTests.cpp b/tests/src/Tests/CastTests.cpp index 1d4cf8e1..51c35c1e 100644 --- a/tests/src/Tests/CastTests.cpp +++ b/tests/src/Tests/CastTests.cpp @@ -2,7 +2,6 @@ #include #include #include -#include TEST_CASE("Casts", "[Shader]") { @@ -136,7 +135,10 @@ fn main() OpStore %28 %47 OpReturn OpFunctionEnd)", {}, {}, true); -/* + + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + ExpectWGSL(*shaderModule, R"( @fragment fn main() @@ -149,12 +151,12 @@ fn main() var x_4: f32 = f32(iVal); var x_5: f64 = f64(iVal); var x_6: u32 = u32(iVal); - var uVal: u32 = u32(42); + var uVal: u32 = 42u; var x_7: f32 = f32(uVal); var x_8: f64 = f64(uVal); var x_9: i32 = i32(uVal); + var fToIVal: f32 = f32(42); } -)"); -*/ +)", {}, wgslEnv); } } diff --git a/tests/src/Tests/ComputeTests.cpp b/tests/src/Tests/ComputeTests.cpp index 07691410..d1e47a37 100644 --- a/tests/src/Tests/ComputeTests.cpp +++ b/tests/src/Tests/ComputeTests.cpp @@ -226,7 +226,8 @@ fn main(input: Input) OpImageWrite %56 %60 %61 OpReturn OpFunctionEnd)", {}, {}, true); -/* + +#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( struct Data { @@ -253,6 +254,6 @@ fn main(input: Input) var value: vec4 = textureLoad(input_tex, vec2(input.indices.xy, input.indices.xy)); textureStore(output_tex, vec2(input.indices.xy, input.indices.xy), value); })"); -*/ +#endif } } diff --git a/tests/src/Tests/ConstantTests.cpp b/tests/src/Tests/ConstantTests.cpp index d27064c2..229c52c4 100644 --- a/tests/src/Tests/ConstantTests.cpp +++ b/tests/src/Tests/ConstantTests.cpp @@ -157,5 +157,31 @@ fn main() OpStore %44 %26 OpReturn OpFunctionEnd)", {}, {}, true); + + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var foo: f32 = 1.192092896e-07; + var foo_2: f32 = 3.402823466e+38; + var foo_3: f32 = -3.402823466e+38; + var foo_4: f32 = 1.175494351e-38; + var foo_5: f32 = _nzslInfinityf32(); + var foo_6: f32 = _nzslNaNf32(); + var foo_7: f64 = 2.2204460492503131e-016lf; + var foo_8: f64 = 1.7976931348623158e+308lf; + var foo_9: f64 = -1.7976931348623158e+308lf; + var foo_10: f64 = 2.2250738585072014e-308lf; + var foo_11: f64 = _nzslInfinityf64(); + var foo_12: f64 = _nzslNaNf64(); + var foo_13: i32 = 2147483647; + var foo_14: i32 = -2147483648; + var foo_15: u32 = 4294967295u; + var foo_16: u32 = 0u; +} +)", {}, wgslEnv); } } diff --git a/tests/src/Tests/EntryFunctionTests.cpp b/tests/src/Tests/EntryFunctionTests.cpp index 7e80d7e2..0d733370 100644 --- a/tests/src/Tests/EntryFunctionTests.cpp +++ b/tests/src/Tests/EntryFunctionTests.cpp @@ -110,20 +110,23 @@ fn main() -> FragOut OpReturn OpFunctionEnd)", {}, {}, true); + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + ExpectWGSL(*shaderModule, R"( struct FragOut { @builtin(frag_depth) depth: f32 } -@fragment +@fragment @early_depth_test(greater_equal) fn main() -> FragOut { var output: FragOut; output.depth = 1.0; return output; } -)"); +)", {}, wgslEnv); } WHEN("Using depth_write(less)") @@ -228,20 +231,23 @@ fn main() -> FragOut OpReturn OpFunctionEnd)", {}, {}, true); + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + ExpectWGSL(*shaderModule, R"( struct FragOut { @builtin(frag_depth) depth: f32 } -@fragment +@fragment @early_depth_test(less_equal) fn main() -> FragOut { var output: FragOut; output.depth = 0.0; return output; } -)"); +)", {}, wgslEnv); } WHEN("Using depth_write(replace)") @@ -493,6 +499,9 @@ fn main(input: FragIn) -> FragOut OpReturn OpFunctionEnd)", {}, {}, true); + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + ExpectWGSL(*shaderModule, R"( struct FragIn { @@ -504,14 +513,14 @@ struct FragOut @builtin(frag_depth) depth: f32 } -@fragment +@fragment @early_depth_test(unchanged) fn main(input: FragIn) -> FragOut { var output: FragOut; output.depth = input.fragCoord.z; return output; } -)"); +)", {}, wgslEnv); } } @@ -656,13 +665,16 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + ExpectWGSL(*shaderModule, R"( -@fragment +@fragment @early_depth_test(force) fn main() { } -)"); +)", {}, wgslEnv); } diff --git a/tests/src/Tests/ExternalTests.cpp b/tests/src/Tests/ExternalTests.cpp index 28c417aa..aa0e9b84 100644 --- a/tests/src/Tests/ExternalTests.cpp +++ b/tests/src/Tests/ExternalTests.cpp @@ -297,7 +297,8 @@ fn main() OpStore %23 %30 OpReturn OpFunctionEnd)", {}, {}, true); -/* + +#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( struct Data { @@ -312,7 +313,7 @@ fn main() { var value: mat4x4 = data.values[42] * data.matrices[1]; })"); -*/ +#endif } SECTION("Storage buffers") diff --git a/tests/src/Tests/ShaderUtils.cpp b/tests/src/Tests/ShaderUtils.cpp index 0cdb2523..9642332e 100644 --- a/tests/src/Tests/ShaderUtils.cpp +++ b/tests/src/Tests/ShaderUtils.cpp @@ -464,12 +464,12 @@ void ExpectSPIRV(nzsl::Ast::Module& shaderModule, std::string_view expectedOutpu } } -void ExpectWGSL(const nzsl::Ast::Module& shaderModule, std::string_view expectedOutput) +void ExpectWGSL(const nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::BackendParameters& options, const nzsl::WgslWriter::Environment& env) { NAZARA_USE_ANONYMOUS_NAMESPACE // Clone to avoid cross-test changes - nzsl::Ast::ModulePtr moduleClone = nzsl::Ast::Clone(shaderModule); + nzsl::Ast::ModulePtr moduleClone = nzsl::Ast::Clone(shader); std::string source = SanitizeSource(expectedOutput); @@ -485,7 +485,8 @@ void ExpectWGSL(const nzsl::Ast::Module& shaderModule, std::string_view expected nzsl::Ast::Module& targetModule = (sanitizedModule) ? *sanitizedModule : *moduleClone; nzsl::WgslWriter writer; - nzsl::WgslWriter::Output output = writer.Generate(targetModule); + writer.SetEnv(env); + nzsl::WgslWriter::Output output = writer.Generate(targetModule, options); SECTION("Validating expected code") { diff --git a/tests/src/Tests/ShaderUtils.hpp b/tests/src/Tests/ShaderUtils.hpp index 2e4ed989..963c0a77 100644 --- a/tests/src/Tests/ShaderUtils.hpp +++ b/tests/src/Tests/ShaderUtils.hpp @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -31,7 +32,7 @@ void ExpectGLSL(nzsl::ShaderStageType stageType, nzsl::Ast::Module& shader, std: void ExpectGLSL(nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::BackendParameters& options = {}, const nzsl::GlslWriter::Environment& env = {}, bool testShaderCompilation = true); void ExpectNZSL(const nzsl::Ast::Module& shader, std::string_view expectedOutput); void ExpectSPIRV(nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::BackendParameters& options = {}, const nzsl::SpirvWriter::Environment& env = {}, bool outputParameter = false, const spvtools::ValidatorOptions& validatorOptions = {}); -void ExpectWGSL(const nzsl::Ast::Module& shader, std::string_view expectedOutput); +void ExpectWGSL(const nzsl::Ast::Module& shader, std::string_view expectedOutput, const nzsl::BackendParameters& options = {}, const nzsl::WgslWriter::Environment& env = {}); std::filesystem::path GetResourceDir(); From b31ac16a9451c8e6f25e49593e3275977dbc03d6 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Sun, 7 Sep 2025 21:35:42 +0200 Subject: [PATCH 14/37] pushing a lot of work --- include/NZSL/WgslWriter.hpp | 1 + src/NZSL/WgslWriter.cpp | 638 ++++++++++--------- tests/src/Tests/ExternalTests.cpp | 13 +- tests/src/Tests/FilesystemResolverTests.cpp | 57 ++ tests/src/Tests/FunctionsTests.cpp | 100 ++- tests/src/Tests/IdentifierTests.cpp | 62 +- tests/src/Tests/ImplicitTests.cpp | 60 ++ tests/src/Tests/IntrinsicTests.cpp | 662 ++++++++++++++------ tests/src/Tests/LayoutTests.cpp | 60 +- tests/src/Tests/LiteralTests.cpp | 24 + tests/src/Tests/LoopTests.cpp | 202 ++++++ tests/src/Tests/ModuleTests.cpp | 215 ++++++- 12 files changed, 1541 insertions(+), 553 deletions(-) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index 87b6b3ef..85a56d89 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -123,6 +123,7 @@ namespace nzsl void AppendComment(std::string_view section); void AppendCommentSection(std::string_view section); void AppendConstantHelpers(Ast::PrimitiveType type, Ast::TypeConstant constant); + //void AppendInverseMatHelpers(Ast::MatrixType type); void AppendHeader(const Ast::Module::Metadata& metadata); template void AppendIdentifier(const T& map, std::size_t id); void AppendLine(std::string_view txt = {}); diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index e6244ceb..b219bf7c 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -42,7 +42,6 @@ #include #include -#include namespace nzsl { @@ -54,9 +53,14 @@ namespace nzsl { None = -1, - WgpuConservativeDepth, // wgpu native features - WgpuEarlyFragmentTests, // wgpu native features - WgpuFloat64, // wgpu native features + // wgpu native features + WgpuBufferBindingArray, + WgpuConservativeDepth, + WgpuEarlyFragmentTests, + WgpuFloat64, + WgpuPushConstants, + WgpuStorageBindingArray, + WgpuTextureBindingArray, }; struct WgslBuiltin @@ -100,7 +104,6 @@ namespace nzsl if (stage == ShaderStageType::Fragment) { if (node.depthWrite.HasValue() && node.depthWrite.GetResultingValue() != Ast::DepthWriteMode::Replace) - features.insert(WgslFeature::WgpuConservativeDepth); if (node.earlyFragmentTests.HasValue() && node.earlyFragmentTests.GetResultingValue()) @@ -111,6 +114,48 @@ namespace nzsl RecursiveVisitor::Visit(node); } + void Visit(Ast::DeclareExternalStatement& node) override + { + for (const auto& extVar : node.externalVars) + { + const Ast::ExpressionType& type = extVar.type.GetResultingValue(); + if (IsPushConstantType(type)) + features.insert(WgslFeature::WgpuPushConstants); + else if (IsArrayType(type)) + { + const Ast::ArrayType& array = std::get(type); + if (IsStorageType(array.InnerType())) + features.insert(WgslFeature::WgpuStorageBindingArray); + else if (IsTextureType(array.InnerType())) + features.insert(WgslFeature::WgpuTextureBindingArray); + else if (IsStructType(array.InnerType())) + features.insert(WgslFeature::WgpuBufferBindingArray); + } + } + + RecursiveVisitor::Visit(node); + } + + void Visit(Ast::IntrinsicExpression& node) override + { + RecursiveVisitor::Visit(node); + + const Ast::ExpressionType& paramType = ResolveAlias(EnsureExpressionType(*node.parameters[0])); + + if (node.intrinsic == Ast::IntrinsicType::IsInf) + { + assert((IsVectorType(paramType) || IsPrimitiveType(paramType)) && "invalid type found"); + const Ast::PrimitiveType& type = IsVectorType(paramType) ? std::get(paramType).type : std::get(paramType); + + if (type == Ast::PrimitiveType::Float32) + hasf32Infinity = true; + else if (type == Ast::PrimitiveType::Float64) + hasf64Infinity = true; + else + assert(false && "isinf can only be used on floating types"); + } + } + void Visit(Ast::TypeConstantExpression& node) override { assert(IsPrimitiveType(node.type)); @@ -360,12 +405,12 @@ namespace nzsl m_currentState->currentModuleIndex = 0; for (const auto& importedModule : module.importedModules) { - importedModule.module->rootNode->Visit(previsitor); m_currentState->currentModuleIndex++; + importedModule.module->rootNode->Visit(previsitor); m_currentState->moduleNames.push_back(importedModule.identifier); } - m_currentState->currentModuleIndex = std::numeric_limits::max(); + m_currentState->currentModuleIndex = 0; std::size_t moduleIndex = 0; for (const auto& importedModule : module.importedModules) @@ -377,33 +422,25 @@ namespace nzsl AppendHeader(*module.metadata); // Validate required features + auto validateFeature = [&](std::string_view featureName, std::string_view featurePrettyName) + { + if (!m_environment.featuresCallback || !m_environment.featuresCallback(featureName)) + throw std::runtime_error(fmt::format("WGSL does not support {} feature, wgpu does natively but you need to confirm its usage using feature callback", featurePrettyName)); + }; + for (WgslFeature feature : previsitor.features) { switch (feature) { - case WgslFeature::None: - break; - - case WgslFeature::WgpuConservativeDepth: - { - if (!m_environment.featuresCallback || !m_environment.featuresCallback("WgpuConservativeDepth")) - throw std::runtime_error("WGSL does not support conservative depth feature, wgpu does natively but you need to confirm its usage using feature callback"); - break; - } - - case WgslFeature::WgpuEarlyFragmentTests: - { - if (!m_environment.featuresCallback || !m_environment.featuresCallback("WgpuEarlyFragmentTests")) - throw std::runtime_error("WGSL does not support early fragment depth test feature, wgpu does natively but you need to confirm its usage using feature callback"); - break; - } - - case WgslFeature::WgpuFloat64: - { - if (!m_environment.featuresCallback || !m_environment.featuresCallback("WgpuFloat64")) - throw std::runtime_error("WGSL does not support float 64 feature, wgpu does natively but you need to confirm its usage using feature callback"); - break; - } + case WgslFeature::None: break; + + case WgslFeature::WgpuBufferBindingArray: validateFeature("WgpuBufferBindingArray", "buffer binding array"); break; + case WgslFeature::WgpuConservativeDepth: validateFeature("WgpuConservativeDepth", "conservative depth"); break; + case WgslFeature::WgpuEarlyFragmentTests: validateFeature("WgpuEarlyFragmentTests", "early fragment depth test"); break; + case WgslFeature::WgpuFloat64: validateFeature("WgpuFloat64", "float 64"); break; + case WgslFeature::WgpuPushConstants: validateFeature("WgpuPushConstants", "push constants"); break; + case WgslFeature::WgpuStorageBindingArray: validateFeature("WgpuStorageBindingArray", "storage resource binding array"); break; + case WgslFeature::WgpuTextureBindingArray: validateFeature("WgpuTextureBindingArray", "texture binding array"); break; } } @@ -412,12 +449,10 @@ namespace nzsl for (const auto& importedModule : module.importedModules) { AppendModuleAttributes(*importedModule.module->metadata); - AppendLine("module ", importedModule.identifier); - EnterScope(); - importedModule.module->rootNode->Visit(*this); - LeaveScope(true); + AppendComment("Module " + importedModule.module->metadata->moduleName); m_currentState->currentModuleIndex++; + importedModule.module->rootNode->Visit(*this); m_currentState->moduleNames.push_back(importedModule.identifier); } @@ -430,7 +465,7 @@ namespace nzsl if (previsitor.hasf64NaN) AppendConstantHelpers(Ast::PrimitiveType::Float64, Ast::TypeConstant::NaN); - m_currentState->currentModuleIndex = std::numeric_limits::max(); + m_currentState->currentModuleIndex = 0; module.rootNode->Visit(*this); Output output; @@ -477,14 +512,23 @@ namespace nzsl { using namespace std::string_view_literals; + bool nameChanged = false; + // Identifier can't start with _nzsl if (identifier.compare(0, 5, "_nzsl") == 0) { identifier.replace(0, 5, "_"sv); - return true; + nameChanged = true; } - return false; + // Identifier can't be only _ + if (identifier == "_") + { + identifier = "_2_2"; + nameChanged = true; + } + + return nameChanged; }; Ast::IdentifierTransformer::Options secondIdentifierPassOptions; @@ -521,7 +565,7 @@ namespace nzsl executor.AddPass([](Ast::StructAssignmentTransformer::Options& opt) { opt.splitWrappedArrayAssignation = false; - opt.splitWrappedStructAssignation = true; //< TODO: Only split for base uniforms/storage + opt.splitWrappedStructAssignation = true; }); executor.AddPass([](Ast::SwizzleTransformer::Options& opt) { @@ -551,7 +595,7 @@ namespace nzsl void WgslWriter::Append(const Ast::DynArrayType& type) { - Append("dyn_array<", type.containedType->type, ">"); + Append("array<", type.containedType->type, ">"); } void WgslWriter::Append(const Ast::ExpressionType& type) @@ -617,7 +661,7 @@ namespace nzsl void WgslWriter::Append(const Ast::NamedExternalBlockType& namedExternalBlockType) { - Append(m_currentState->externalBlockNames[namedExternalBlockType.namedExternalBlockIndex]); + AppendComment(m_currentState->externalBlockNames[namedExternalBlockType.namedExternalBlockIndex]); } void WgslWriter::Append(Ast::PrimitiveType type) @@ -637,39 +681,68 @@ namespace nzsl void WgslWriter::Append(const Ast::PushConstantType& pushConstantType) { - Append("push_constant[", pushConstantType.containedType, "]"); + Append(pushConstantType.containedType); } void WgslWriter::Append(const Ast::SamplerType& samplerType) { - if (samplerType.depth) - Append("depth_"); - - Append("sampler"); - + std::string dimension; + std::string type; switch (samplerType.dim) { - case ImageType::E1D: Append("1D"); break; - case ImageType::E1D_Array: Append("1D_array"); break; - case ImageType::E2D: Append("2D"); break; - case ImageType::E2D_Array: Append("2D_array"); break; - case ImageType::E3D: Append("3D"); break; - case ImageType::Cubemap: Append("_cube"); break; + case ImageType::E1D: + { + if (samplerType.depth) + throw std::runtime_error("depth texture sampler 1D are not supported by WGSL"); + dimension = "1d"; + break; + } + case ImageType::E1D_Array: + { + if (samplerType.depth) + throw std::runtime_error("depth texture sampler 1D array are not supported by WGSL"); + dimension = "1d_array"; + break; + } + case ImageType::E2D: dimension = "2d"; break; + case ImageType::E2D_Array: dimension = "2d_array"; break; + case ImageType::E3D: + { + if (samplerType.depth) + throw std::runtime_error("depth texture sampler 3D are not supported by WGSL"); + dimension = "3d"; + break; + } + case ImageType::Cubemap: dimension = "cube"; break; } + switch (samplerType.sampledType) + { + case Ast::PrimitiveType::Boolean: + throw std::runtime_error("unexpected bool type for tture"); + case Ast::PrimitiveType::Float64: + throw std::runtime_error("unexpected f64 type for teure"); - Append("[", samplerType.sampledType, "]"); + case Ast::PrimitiveType::Float32: type = ""; break; + case Ast::PrimitiveType::Int32: type = ""; break; + case Ast::PrimitiveType::UInt32: type = ""; break; + + case Ast::PrimitiveType::String: + throw std::runtime_error("unexpected string type forexture"); + + case Ast::PrimitiveType::FloatLiteral: + case Ast::PrimitiveType::IntLiteral: + throw std::runtime_error("unexpected litteral type for sampler"); + } + Append("texture_"); + if (samplerType.depth) + Append("depth_", dimension); + else + Append(dimension, type); } void WgslWriter::Append(const Ast::StorageType& storageType) { - Append("storage[", storageType.containedType); - switch (storageType.accessPolicy) - { - case AccessPolicy::ReadOnly: Append(", readonly"); break; - case AccessPolicy::ReadWrite: break; - case AccessPolicy::WriteOnly: Append(", writeonly"); break; - } - Append("]"); + Append(storageType.containedType); } void WgslWriter::Append(const Ast::StructType& structType) @@ -679,37 +752,57 @@ namespace nzsl void WgslWriter::Append(const Ast::TextureType& textureType) { - Append("texture"); - + Append("texture_storage_"); switch (textureType.dim) { - case ImageType::E1D: Append("1D"); break; - case ImageType::E1D_Array: Append("1D_array"); break; - case ImageType::E2D: Append("2D"); break; - case ImageType::E2D_Array: Append("2D_array"); break; - case ImageType::E3D: Append("3D"); break; - case ImageType::Cubemap: Append("_cube"); break; + case ImageType::E1D: Append("1d"); break; + case ImageType::E2D: Append("2d"); break; + case ImageType::E2D_Array: Append("2d_array"); break; + case ImageType::E3D: Append("3d"); break; + + default: + throw std::runtime_error("unexpected storage texture type"); } + Append("<"); + switch (textureType.format) + { + case ImageFormat::RGBA8: Append("rgba8unorm"); break; + case ImageFormat::RGBA8i: Append("rgba8sint"); break; + case ImageFormat::RGBA8Snorm: Append("rgba8snorm"); break; + case ImageFormat::RGBA8ui: Append("rgba8uint"); break; + + case ImageFormat::RGBA16f: Append("rgba16float"); break; + case ImageFormat::RGBA16i: Append("rgba16sint"); break; + case ImageFormat::RGBA16ui: Append("rgba16uint"); break; + + case ImageFormat::R32f: Append("r32float"); break; + case ImageFormat::R32i: Append("r32sint"); break; + case ImageFormat::R32ui: Append("r32uint"); break; + + case ImageFormat::RG32f: Append("rg32float"); break; + case ImageFormat::RG32i: Append("rg32sint"); break; + case ImageFormat::RG32ui: Append("rg32uint"); break; - Append("[", textureType.baseType, ", "); + case ImageFormat::RGBA32f: Append("rgba32float"); break; + case ImageFormat::RGBA32i: Append("rgba32sint"); break; + case ImageFormat::RGBA32ui: Append("rgba32uint"); break; + + default: + throw std::runtime_error("unexpected format type for texture"); + } + Append(", "); switch (textureType.accessPolicy) { case AccessPolicy::ReadOnly: Append("read"); break; case AccessPolicy::ReadWrite: Append("read_write"); break; case AccessPolicy::WriteOnly: Append("write"); break; } - - if (textureType.format != ImageFormat::Unknown) - { - assert(textureType.format == ImageFormat::RGBA8); //< TODO - Append(", rgba8"); - } - Append("]"); + Append(">"); } void WgslWriter::Append(const Ast::Type& /*type*/) { - throw std::runtime_error("unexpected type?"); + throw std::runtime_error("unexpected type"); } void WgslWriter::Visit(Ast::TypeConstantExpression& node) @@ -802,9 +895,9 @@ namespace nzsl } } - void WgslWriter::Append(const Ast::UniformType& /*uniformType*/) + void WgslWriter::Append(const Ast::UniformType& uniformType) { - throw std::runtime_error("unexpected UniformType?"); + Append(uniformType.containedType); } void WgslWriter::Append(const Ast::VectorType& vecType) @@ -950,15 +1043,11 @@ namespace nzsl } } - void WgslWriter::AppendAttribute(bool first, DescriptionAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, DescriptionAttribute attribute) { if (!attribute.HasValue()) return; - if (!first) - Append(" "); - Append("@"); - - Append("desc(", EscapeString(attribute.description), ")"); + AppendComment("Description: " + EscapeString(attribute.description)); } void WgslWriter::AppendAttribute(bool first, EarlyFragmentTestsAttribute attribute) @@ -1079,9 +1168,11 @@ namespace nzsl Append(")"); } - void WgslWriter::AppendAttribute(bool /*first*/, TagAttribute /*attribute*/) + void WgslWriter::AppendAttribute(bool /*first*/, TagAttribute attribute) { - // TODO + if (!attribute.HasValue()) + return; + AppendComment("Tag: " + attribute.tag); } void WgslWriter::AppendAttribute(bool first, UnrollAttribute attribute) @@ -1198,11 +1289,11 @@ namespace nzsl m_currentState->hasf64RatioFunction = true; } - Append(fmt::format(R"( -fn _nzslRatio{0}(n: {0}, d: {0}) -> {0} + Append(fmt::format(R"(fn _nzslRatio{0}(n: {0}, d: {0}) -> {0} {{ return n / d; }} + )", stringType)); }; @@ -1211,22 +1302,22 @@ fn _nzslRatio{0}(n: {0}, d: {0}) -> {0} case Ast::TypeConstant::NaN: { setupRatioFunction(); - Append(fmt::format(R"( -fn _nzslNaN{0}() -> {0} + Append(fmt::format(R"(fn _nzslNaN{0}() -> {0} {{ return _nzslRatio{0}(0.0, 0.0); }} + )", stringType)); break; } case Ast::TypeConstant::Infinity: { setupRatioFunction(); - Append(fmt::format(R"( -fn _nzslInfinity{0}() -> {0} + Append(fmt::format(R"(fn _nzslInfinity{0}() -> {0} {{ return _nzslRatio{0}(1.0, 0.0); }} + )", stringType)); break; } @@ -1250,11 +1341,11 @@ fn _nzslInfinity{0}() -> {0} void WgslWriter::AppendIdentifier(const T& map, std::size_t id) { const auto& identifier = Nz::Retrieve(map, id); - if (identifier.moduleIndex != m_currentState->currentModuleIndex) - Append(m_currentState->moduleNames[identifier.moduleIndex], '.'); + if (identifier.moduleIndex != 0) + Append(m_currentState->moduleNames[identifier.moduleIndex - 1], '_'); if (identifier.externalBlockIndex && identifier.externalBlockIndex != m_currentState->currentExternalBlockIndex) - Append(m_currentState->externalBlockNames[*identifier.externalBlockIndex], '.'); + Append(m_currentState->externalBlockNames[*identifier.externalBlockIndex], '_'); Append(identifier.name); } @@ -1573,12 +1664,6 @@ fn _nzslInfinity{0}() -> {0} { if (i != 0) Append(", "); - - if (node.parameters[i].semantic == Ast::FunctionParameterSemantic::InOut) - Append("inout "); - else if (node.parameters[i].semantic == Ast::FunctionParameterSemantic::Out) - Append("out "); - node.parameters[i].expr->Visit(*this); } Append(")"); @@ -1626,25 +1711,7 @@ fn _nzslInfinity{0}() -> {0} { nbParams = 1; }, - [&](const Ast::UniformType&) { throw std::runtime_error("unexpected UniformType?"); }, - [&](const Ast::StorageType&) { throw std::runtime_error("unexpected StorageType?"); }, - [&](const Ast::SamplerType&) { throw std::runtime_error("unexpected SamplerType?"); }, - [&](const Ast::PushConstantType&) { throw std::runtime_error("unexpected PushConstantType?"); }, - [&](const Ast::TextureType&) { throw std::runtime_error("unexpected TextureType?"); }, - [&](const Ast::NoType&) { throw std::runtime_error("unexpected NoType?"); }, - [&](const Ast::AliasType&) { throw std::runtime_error("unexpected AliasType?"); }, - [&](const Ast::ArrayType&) { throw std::runtime_error("unexpected ArrayType?"); }, - [&](const Ast::DynArrayType&) { throw std::runtime_error("unexpected DynArrayType?"); }, - [&](const Ast::FunctionType&) { throw std::runtime_error("unexpected FunctionType?"); }, - [&](const Ast::IntrinsicFunctionType&) { throw std::runtime_error("unexpected IntrinsicFunctionType?"); }, - [&](const Ast::MethodType&) { throw std::runtime_error("unexpected MethodType?"); }, - [&](const Ast::ModuleType&) { throw std::runtime_error("unexpected ModuleType?"); }, - [&](const Ast::StructType&) { throw std::runtime_error("unexpected StructType?"); }, - [&](const Ast::Type&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::NamedExternalBlockType&) { throw std::runtime_error("unexpected NamedExternalBlockType?"); }, - [&](const Ast::ImplicitArrayType&) { throw std::runtime_error("unexpected ImplicitArrayType?"); }, - [&](const Ast::ImplicitMatrixType&) { throw std::runtime_error("unexpected ImplicitMatrixType?"); }, - [&](const Ast::ImplicitVectorType&) { throw std::runtime_error("unexpected ImplicitVectorType?"); }, + [&](const auto&) { throw std::runtime_error("unexpected Type?"); }, }, node.targetType.GetResultingValue()); for (std::size_t i = 0; i < nbParams; i++) @@ -1742,18 +1809,13 @@ fn _nzslInfinity{0}() -> {0} case Ast::IntrinsicType::Cos: case Ast::IntrinsicType::Cosh: case Ast::IntrinsicType::CrossProduct: - case Ast::IntrinsicType::DegToRad: case Ast::IntrinsicType::Distance: case Ast::IntrinsicType::DotProduct: case Ast::IntrinsicType::Exp: case Ast::IntrinsicType::Exp2: case Ast::IntrinsicType::Floor: case Ast::IntrinsicType::Fract: - case Ast::IntrinsicType::IsInf: - case Ast::IntrinsicType::IsNaN: - case Ast::IntrinsicType::InverseSqrt: case Ast::IntrinsicType::Length: - case Ast::IntrinsicType::Lerp: case Ast::IntrinsicType::Log: case Ast::IntrinsicType::Log2: case Ast::IntrinsicType::MatrixInverse: @@ -1761,13 +1823,9 @@ fn _nzslInfinity{0}() -> {0} case Ast::IntrinsicType::Max: case Ast::IntrinsicType::Min: case Ast::IntrinsicType::Normalize: - case Ast::IntrinsicType::Not: case Ast::IntrinsicType::Pow: - case Ast::IntrinsicType::RadToDeg: case Ast::IntrinsicType::Reflect: case Ast::IntrinsicType::Round: - case Ast::IntrinsicType::RoundEven: - case Ast::IntrinsicType::Select: case Ast::IntrinsicType::Sign: case Ast::IntrinsicType::Sin: case Ast::IntrinsicType::Sinh: @@ -1786,6 +1844,82 @@ fn _nzslInfinity{0}() -> {0} break; } + case Ast::IntrinsicType::DegToRad: Append("radians"); break; + case Ast::IntrinsicType::InverseSqrt: Append("inverseSqrt"); break; + + case Ast::IntrinsicType::IsInf: + case Ast::IntrinsicType::IsNaN: + { + const Ast::ExpressionType& paramType = ResolveAlias(EnsureExpressionType(*node.parameters[0])); + const Ast::PrimitiveType& innerType = IsVectorType(paramType) ? std::get(paramType).type : std::get(paramType); + std::size_t componentCount = 1; + if (node.intrinsic == Ast::IntrinsicType::IsInf && IsVectorType(paramType)) + { + componentCount = std::get(paramType).componentCount; + Append("vec", componentCount, "("); + } + for(std::size_t i = 0; i < componentCount; i++) + { + if (i != 0) + Append(", "); + if (node.intrinsic == Ast::IntrinsicType::IsInf) + { + if (IsVectorType(paramType)) + { + const char* componentStr = "xyzw"; + node.parameters[0]->Visit(*this); + Append('.', componentStr[i]); + } + Append(" == _nzslInfinity", (innerType == Ast::PrimitiveType::Float32 ? "f32" : "f64"), "()"); + } + else + { + node.parameters[0]->Visit(*this); + Append(" != "); + node.parameters[0]->Visit(*this); + return; + } + } + if (IsVectorType(paramType)) + Append(")"); + return; + } + + case Ast::IntrinsicType::Lerp: Append("mix"); break; + case Ast::IntrinsicType::Not: Append("!"); break; + case Ast::IntrinsicType::RadToDeg: Append("degrees"); break; + case Ast::IntrinsicType::RoundEven: Append("round"); break; + + case Ast::IntrinsicType::Select: + { + const Ast::ExpressionType& condParamType = ResolveAlias(EnsureExpressionType(*node.parameters[0])); + const Ast::ExpressionType& firstParamType = ResolveAlias(EnsureExpressionType(*node.parameters[1])); + + Append("select("); + node.parameters[2]->Visit(*this); + Append(", "); + node.parameters[1]->Visit(*this); + Append(", "); + + // WGSL requires boolean vectors when selecting vectors + if (IsVectorType(firstParamType) && !IsVectorType(condParamType)) + { + std::size_t componentCount = std::get(firstParamType).componentCount; + + Append("vec", componentCount, "("); + node.parameters[0]->Visit(*this); + Append(")"); + } + else + node.parameters[0]->Visit(*this); + + Append(")"); + return; + } + + case Ast::IntrinsicType::TextureRead: Append("textureLoad"); break; + case Ast::IntrinsicType::TextureWrite: Append("textureStore"); break; + // Method intrinsics case Ast::IntrinsicType::ArraySize: assert(!node.parameters.empty()); @@ -1799,15 +1933,11 @@ fn _nzslInfinity{0}() -> {0} return; } } - Append("arrayLength("); + Append("arrayLength(&"); node.parameters[0]->Visit(*this); method = true; break; - case Ast::IntrinsicType::TextureRead: - Append("textureLoad"); - break; - case Ast::IntrinsicType::TextureSampleImplicitLod: firstParam = false; Append("textureSample("); @@ -1819,15 +1949,14 @@ fn _nzslInfinity{0}() -> {0} break; case Ast::IntrinsicType::TextureSampleImplicitLodDepthComp: - assert(!node.parameters.empty()); - Visit(node.parameters.front(), true); - Append(".SampleDepthComp"); + firstParam = false; + Append("textureSampleCompare("); + node.parameters[0]->Visit(*this); + Append(", "); + node.parameters[0]->Visit(*this); + Append("Sampler, "); method = true; break; - - case Ast::IntrinsicType::TextureWrite: - Append("textureStore"); - break; } if (firstParam) @@ -1984,12 +2113,10 @@ fn _nzslInfinity{0}() -> {0} void WgslWriter::Visit(Ast::DeclareExternalStatement& node) { - AppendAttributes(true, SetAttribute{ node.bindingSet }, AutoBindingAttribute{ node.autoBinding }, TagAttribute{ node.tag }); + AppendAttributes(true, TagAttribute{ node.tag }); if (!node.name.empty()) { - Append(" ", node.name); - m_currentState->currentExternalBlockIndex = m_currentState->externalBlockNames.size(); m_currentState->externalBlockNames.push_back(node.name); } @@ -2001,153 +2128,70 @@ fn _nzslInfinity{0}() -> {0} for (const auto& externalVar : node.externalVars) { if (!externalVar.tag.empty() && m_currentState->backendParameters.debugLevel >= DebugLevel::Minimal) - AppendComment("external var tag: " + externalVar.tag); + AppendAttribute(false, TagAttribute{ externalVar.tag }); + + const Ast::ExpressionType& exprType = externalVar.type.GetResultingValue(); std::uint32_t binding = 0; - std::uint64_t bindingSet; - if (externalVar.bindingSet.HasValue()) - bindingSet = externalVar.bindingSet.GetResultingValue(); - else - bindingSet = 0; - if (!externalVar.type.IsResultingValue() || !IsPushConstantType(externalVar.type.GetResultingValue())) // push constants don't have set or binding' + std::uint64_t bindingSet = (externalVar.bindingSet.HasValue()) ? externalVar.bindingSet.GetResultingValue() : 0; + + // Binding group declaration in WGSL in built like this + // @group(G) @binding(B) var name : TYPE; + + // Binding group handling + if (!IsPushConstantType(exprType)) // Push constants don't have set or binding { binding = externalVar.bindingIndex.GetResultingValue(); for (; reservedBindings.count(bindingSet << 32 | binding); binding++); reservedBindings.emplace(bindingSet << 32 | binding); m_currentState->bindingRemap[bindingSet << 32 | externalVar.bindingIndex.GetResultingValue()] = binding; + AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding } }); } Append("var"); - std::visit(Nz::Overloaded + // Address space handling + if (IsUniformType(exprType)) + Append(""); + else if (IsPushConstantType(exprType)) + Append(""); + else if (IsStorageType(exprType)) { - [&](const Ast::UniformType& uniformType) - { - Append(" ", externalVar.name, ": ", uniformType.containedType); - }, - [&](const Ast::StorageType& storageType) - { - Append(" ", externalVar.name, ": ", storageType.containedType); - }, - [&](const Ast::SamplerType& samplerType) - { - std::string dimension; - std::string type; - switch (samplerType.dim) - { - case ImageType::E1D: dimension = "1d"; break; - case ImageType::E1D_Array: dimension = "1d_array"; break; - case ImageType::E2D: dimension = "2d"; break; - case ImageType::E2D_Array: dimension = "2d_array"; break; - case ImageType::E3D: dimension = "3d"; break; - case ImageType::Cubemap: dimension = "cube"; break; - } - switch (samplerType.sampledType) - { - case Ast::PrimitiveType::Boolean: - throw std::runtime_error("unexpected bool type for texture"); - case Ast::PrimitiveType::Float64: - throw std::runtime_error("unexpected f64 type for texture"); - - case Ast::PrimitiveType::Float32: type = ""; break; - case Ast::PrimitiveType::Int32: type = ""; break; - case Ast::PrimitiveType::UInt32: type = ""; break; - - case Ast::PrimitiveType::String: - throw std::runtime_error("unexpected string type for texture"); + const Ast::StorageType& storageType = std::get(exprType); - case Ast::PrimitiveType::FloatLiteral: - case Ast::PrimitiveType::IntLiteral: - throw std::runtime_error("unexpected untyped for sampler"); - } - AppendLine(" ", externalVar.name, ": texture_", dimension, type, ";"); - AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding + 1 } }); - reservedBindings.emplace(bindingSet << 32 | binding + 1); - Append("var ", externalVar.name, "Sampler: sampler"); - }, - [&](const Ast::PushConstantType& /*pushConstantType*/) - { - throw std::runtime_error("push constant are not supported yet"); - }, - [&](const Ast::TextureType& textureType) + Append(""); + } - case ImageFormat::R32f: Append("r32float"); break; - case ImageFormat::R32i: Append("r32sint"); break; - case ImageFormat::R32ui: Append("r32uint"); break; + Append(' '); - case ImageFormat::RG32f: Append("rg32float"); break; - case ImageFormat::RG32i: Append("rg32sint"); break; - case ImageFormat::RG32ui: Append("rg32uint"); break; + std::string variableName; - case ImageFormat::RGBA32f: Append("rgba32float"); break; - case ImageFormat::RGBA32i: Append("rgba32sint"); break; - case ImageFormat::RGBA32ui: Append("rgba32uint"); break; + if (m_currentState->currentModuleIndex != 0) + variableName += m_currentState->moduleNames[m_currentState->currentModuleIndex - 1] + '_'; + if (!node.name.empty()) + variableName += node.name + '_'; + variableName += externalVar.name; + Append(variableName, ": ", exprType); - default: - throw std::runtime_error("unexpected format type for texture"); - } - Append(", "); - switch (textureType.accessPolicy) - { - case AccessPolicy::ReadOnly: Append("read"); break; - case AccessPolicy::ReadWrite: Append("read_write"); break; - case AccessPolicy::WriteOnly: Append("write"); break; - } - Append(">"); - }, - [&](const Ast::ArrayType& arrayType) - { - }, - [&](const Ast::NoType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::AliasType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::DynArrayType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::FunctionType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::IntrinsicFunctionType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::MatrixType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::MethodType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::ModuleType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::PrimitiveType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::StructType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::Type&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::VectorType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::NamedExternalBlockType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::ImplicitArrayType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::ImplicitMatrixType&) { throw std::runtime_error("unexpected Type?"); }, - [&](const Ast::ImplicitVectorType&) { throw std::runtime_error("unexpected Type?"); }, - }, externalVar.type.GetResultingValue()); + if (IsSamplerType(exprType)) + { + // WGSL has not (yet?) combined image samplers so we need to split textures and samplers + AppendLine(';'); // Closing last line + AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding + 1 } }); + reservedBindings.emplace(bindingSet << 32 | binding + 1); + Append("var ", variableName, "Sampler: sampler"); + } - AppendLine(";"); + AppendLine(';'); if (externalVar.varIndex) RegisterVariable(*externalVar.varIndex, externalVar.name); @@ -2167,7 +2211,14 @@ fn _nzslInfinity{0}() -> {0} DepthWriteAttribute{ node.depthWrite } ); - Append("fn ", node.name, "("); + Append("fn "); + + assert(node.funcIndex); + const auto& identifier = Nz::Retrieve(m_currentState->functions, *node.funcIndex); + if (identifier.moduleIndex != 0) + Append(m_currentState->moduleNames[identifier.moduleIndex - 1], '_', node.name, '('); + else + Append(node.name, '('); for (std::size_t i = 0; i < node.parameters.size(); ++i) { const auto& parameter = node.parameters[i]; @@ -2176,22 +2227,21 @@ fn _nzslInfinity{0}() -> {0} Append(", "); if (parameter.semantic == Ast::FunctionParameterSemantic::InOut) - { Append("inout "); - } else if (parameter.semantic == Ast::FunctionParameterSemantic::Out) - { Append("out "); - } - Append(parameter.name); - Append(": "); - Append(parameter.type); + // Ugly but simple + if (identifier.moduleIndex != 0) + Append(m_currentState->moduleNames[identifier.moduleIndex - 1], '_', parameter.name); + else + Append(parameter.name); + Append(": ", parameter.type); if (parameter.varIndex) RegisterVariable(*parameter.varIndex, parameter.name); } - Append(")"); + Append(')'); if (node.returnType.HasValue()) { if (!node.returnType.IsResultingValue() || !IsNoType(node.returnType.GetResultingValue())) @@ -2206,22 +2256,10 @@ fn _nzslInfinity{0}() -> {0} LeaveScope(); } - void WgslWriter::Visit(Ast::DeclareOptionStatement& node) + void WgslWriter::Visit(Ast::DeclareOptionStatement& /*node*/) { - if (node.optIndex) - RegisterConstant(*node.optIndex, node.optName); - - Append("option ", node.optName); - if (node.optType.HasValue()) - Append(": ", node.optType); - - if (node.defaultValue) - { - Append(" = "); - node.defaultValue->Visit(*this); - } - - Append(";"); + // all options should have been handled by sanitizer + throw std::runtime_error("unexpected option declaration, is shader sanitized?"); } void WgslWriter::Visit(Ast::DeclareStructStatement& node) @@ -2231,7 +2269,13 @@ fn _nzslInfinity{0}() -> {0} AppendAttributes(true, LayoutAttribute{ node.description.layout }, TagAttribute{ node.description.tag }); Append("struct "); - AppendLine(node.description.name); + + assert(node.structIndex); + const auto& identifier = Nz::Retrieve(m_currentState->structs, *node.structIndex); + if (identifier.moduleIndex != 0) + AppendLine(m_currentState->moduleNames[identifier.moduleIndex - 1], '_', node.description.name); + else + AppendLine(node.description.name); EnterScope(); { bool first = true; diff --git a/tests/src/Tests/ExternalTests.cpp b/tests/src/Tests/ExternalTests.cpp index aa0e9b84..d10dca13 100644 --- a/tests/src/Tests/ExternalTests.cpp +++ b/tests/src/Tests/ExternalTests.cpp @@ -87,7 +87,7 @@ fn main() OpFunctionEnd)", {}, {}, true); ExpectWGSL(*shaderModule, R"( -// external var tag: Color map +// Tag: Color map @group(0) @binding(0) var tex: texture_2d; @group(0) @binding(1) var texSampler: sampler; @@ -182,6 +182,17 @@ fn main() OpStore %19 %24 OpReturn OpFunctionEnd)", {}, {}, true); + +#ifdef FAILING_WGSL + ExpectWGSL(*shaderModule, R"( +@group(0) @binding(0) var; + +@fragment +fn main() +{ + var value: vec4 = textureSample(tex[2], tex[2]Sampler, vec3(0.0, 0.0, 0.0)); +})"); +#endif } SECTION("Uniform buffers") diff --git a/tests/src/Tests/FilesystemResolverTests.cpp b/tests/src/Tests/FilesystemResolverTests.cpp index cea577e6..304e312f 100644 --- a/tests/src/Tests/FilesystemResolverTests.cpp +++ b/tests/src/Tests/FilesystemResolverTests.cpp @@ -219,4 +219,61 @@ fn main() -> Output OpStore %25 %57 OpReturn OpFunctionEnd)", {}, {}, true); + + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + + ExpectWGSL(*shaderModule, R"( +// This file was generated by NZSL compiler (Nazara Shading Language) +// Author "SirLynix"// Description: "Test module" + +// Author "SirLynix"// Description: "Test color module" + +// Module Color + +@group(0) @binding(0) var _Color_tex1: texture_2d; +@group(0) @binding(1) var _Color_tex1Sampler: sampler; + +fn _Color_GenerateColor() -> vec4 +{ + return textureSample(_Color_tex1, _Color_tex1Sampler, vec2(0.0, 0.0)); +} + +fn _Color_GetColor() -> vec4 +{ + return _Color_GenerateColor(); +} +// Module DataStruct +struct _DataStruct_Data +{ + color: vec4 +} +// Module OutputStruct + +fn _OutputStruct_GetColorFromData(_OutputStruct_data: _DataStruct_Data) -> vec4 +{ + return _OutputStruct_data.color * (vec4(0.5, 0.5, 0.5, 1.0)); +} + +struct _OutputStruct_Output +{ + @location(0) color: vec4 +} + +struct PushConstants +{ + color: vec4 +} + +var ExternalResources_constants: PushConstants; + +@fragment +fn main() -> _OutputStruct_Output +{ + var data: _DataStruct_Data; + data.color = _Color_GetColor(); + var output: _OutputStruct_Output; + output.color = (_OutputStruct_GetColorFromData(data)) * ExternalResources_constants.color; + return output; +})", {}, wgslEnv); } diff --git a/tests/src/Tests/FunctionsTests.cpp b/tests/src/Tests/FunctionsTests.cpp index 22d0ab1a..9d5edfd0 100644 --- a/tests/src/Tests/FunctionsTests.cpp +++ b/tests/src/Tests/FunctionsTests.cpp @@ -14,12 +14,12 @@ module; struct FragOut { - [location(0)] value: f32 + [location(0)] value: vec4[f32] } -fn GetValue() -> f32 +fn GetValue() -> vec4[f32] { - return 42.0; + return vec4[f32](42.0, 42.0, 42.0, 1.0); } [entry(frag)] @@ -36,13 +36,13 @@ fn main() -> FragOut ResolveModule(*shaderModule); ExpectGLSL(*shaderModule, R"( -float GetValue() +vec4 GetValue() { - return 42.0; + return vec4(42.0, 42.0, 42.0, 1.0); } /*************** Outputs ***************/ -layout(location = 0) out float _nzslOutvalue; +layout(location = 0) out vec4 _nzslOutvalue; void main() { @@ -55,9 +55,9 @@ void main() )"); ExpectNZSL(*shaderModule, R"( -fn GetValue() -> f32 +fn GetValue() -> vec4[f32] { - return 42.0; + return vec4[f32](42.0, 42.0, 42.0, 1.0); } [entry(frag)] @@ -72,10 +72,6 @@ fn main() -> FragOut ExpectSPIRV(*shaderModule, R"( OpFunction OpLabel -OpReturnValue -OpFunctionEnd -OpFunction -OpLabel OpVariable OpFunctionCall OpFNegate @@ -86,6 +82,25 @@ OpCompositeExtract OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +struct FragOut +{ + @location(0) value: vec4 +} + +fn GetValue() -> vec4 +{ + return vec4(42.0, 42.0, 42.0, 1.0); +} + +@fragment +fn main() -> FragOut +{ + var output: FragOut; + output.value = -GetValue(); + return output; +})"); } SECTION("Unordered functions") @@ -96,12 +111,12 @@ module; struct FragOut { - [location(0)] value: f32 + [location(0)] value: vec4[f32] } -fn bar() -> f32 +fn bar() -> vec4[f32] { - return 42.0; + return vec4[f32](42.0, 42.0, 42.0, 1.0); } [entry(frag)] @@ -113,12 +128,12 @@ fn main() -> FragOut return output; } -fn baz() -> f32 +fn baz() -> vec4[f32] { return foo(); } -fn foo() -> f32 +fn foo() -> vec4[f32] { return bar(); } @@ -128,15 +143,15 @@ fn foo() -> f32 ResolveModule(*shaderModule); ExpectGLSL(*shaderModule, R"( -float bar() +vec4 bar() { - return 42.0; + return vec4(42.0, 42.0, 42.0, 1.0); } -float baz(); +vec4 baz(); /*************** Outputs ***************/ -layout(location = 0) out float _nzslOutvalue; +layout(location = 0) out vec4 _nzslOutvalue; void main() { @@ -147,23 +162,23 @@ void main() return; } -float foo(); +vec4 foo(); -float baz() +vec4 baz() { return foo(); } -float foo() +vec4 foo() { return bar(); } )"); ExpectNZSL(*shaderModule, R"( -fn bar() -> f32 +fn bar() -> vec4[f32] { - return 42.0; + return vec4[f32](42.0, 42.0, 42.0, 1.0); } [entry(frag)] @@ -174,12 +189,12 @@ fn main() -> FragOut return output; } -fn baz() -> f32 +fn baz() -> vec4[f32] { return foo(); } -fn foo() -> f32 +fn foo() -> vec4[f32] { return bar(); } @@ -188,10 +203,6 @@ fn foo() -> f32 ExpectSPIRV(*shaderModule, R"( OpFunction OpLabel -OpReturnValue -OpFunctionEnd -OpFunction -OpLabel OpVariable OpFunctionCall OpAccessChain @@ -211,6 +222,31 @@ OpLabel OpFunctionCall OpReturnValue OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +fn bar() -> vec4 +{ + return vec4(42.0, 42.0, 42.0, 1.0); +} + +@fragment +fn main() -> FragOut +{ + var output: FragOut; + output.value = baz(); + return output; +} + +fn baz() -> vec4 +{ + return foo(); +} + +fn foo() -> vec4 +{ + return bar(); +} +)"); } SECTION("inout function call") diff --git a/tests/src/Tests/IdentifierTests.cpp b/tests/src/Tests/IdentifierTests.cpp index cdf80ff0..46e7903f 100644 --- a/tests/src/Tests/IdentifierTests.cpp +++ b/tests/src/Tests/IdentifierTests.cpp @@ -25,10 +25,10 @@ fn int() -> i32 struct output { - active: vec3[f32], - active_: vec2[i32], - _nzsl: i32, - _: f32 + [location(0)] active: vec3[f32], + [location(1)] active_: vec2[i32], + [location(2)] _nzsl: i32, + [location(3)] _: f32 } [entry(frag)] @@ -66,10 +66,10 @@ struct output_ }; /*************** Outputs ***************/ -out vec3 _nzslOutactive_; -out ivec2 _nzslOutactive2_2; -out int _nzslOut_; -out float _nzslOut_2_2; +layout(location = 0) out vec3 _nzslOutactive_; +layout(location = 1) out ivec2 _nzslOutactive2_2; +layout(location = 2) out int _nzslOut_; +layout(location = 3) out float _nzslOut_2_2; void main() { @@ -104,10 +104,10 @@ fn int() -> i32 struct output { - active: vec3[f32], - active_: vec2[i32], - _nzsl: i32, - _: f32 + [location(0)] active: vec3[f32], + [location(1)] active_: vec2[i32], + [location(2)] _nzsl: i32, + [location(3)] _: f32 } [entry(frag)] @@ -145,7 +145,45 @@ OpCompositeConstruct OpAccessChain OpStore OpLoad +OpCompositeExtract +OpStore +OpCompositeExtract +OpStore +OpCompositeExtract +OpStore +OpCompositeExtract +OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@group(0) @binding(0) var texture: texture_2d; +@group(0) @binding(1) var textureSampler: sampler; + +fn int() -> i32 +{ + return 42; +} + +struct output +{ + @location(0) active_: vec3, + @location(1) active2_2: vec2, + @location(2) _2_2: i32, + @location(3) _2_2_2: f32 +} + +@fragment +fn main() -> output +{ + var input: i32 = int(); + var input_: i32 = 0; + var fl2_oa8_t: f32 = 42.0; + var outValue: output; + var _nzsl_cachedResult: f32 = (f32(input)) + fl2_oa8_t; + outValue.active_ = vec3(_nzsl_cachedResult, _nzsl_cachedResult, _nzsl_cachedResult); + return outValue; +} +)"); } } diff --git a/tests/src/Tests/ImplicitTests.cpp b/tests/src/Tests/ImplicitTests.cpp index 2b4fc492..cea5040c 100644 --- a/tests/src/Tests/ImplicitTests.cpp +++ b/tests/src/Tests/ImplicitTests.cpp @@ -60,6 +60,15 @@ fn foo() OpStore %10 %14 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn foo() +{ + var x: f32; + var v: vec3 = vec3(x, x, x); +} +)"); } SECTION("Implicit arrays") @@ -221,6 +230,39 @@ fn foo() OpStore %61 %64 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +const vertPos: array, 3> = array, 3>( + vec2(-1.0, 1.0), + vec2(-1.0, -3.0), + vec2(3.0, 1.0) +); + +const a: array, 3> = array, 3>( + vec3(1, 2, 3), + vec3(4, 5, 6), + vec3(7, 8, 9) +); + +const b: array, 3> = array, 3>( + vec2(1.0, 2.0), + vec2(3.0, 4.0), + vec2(5.0, 6.0) +); + +const c: array = array( + true, + false, + false +); + +@fragment +fn foo() +{ + var value: vec3 = vec3(-1, -3, 42); + var runtimeArray: array, 3> = array, 3>(value, value, vec3(1, 2, 3)); +} +)"); } SECTION("Implicit matrices") @@ -396,5 +438,23 @@ fn foo() OpStore %52 %96 OpReturn OpFunctionEnd)", {}, {}, true); + +#ifdef FAILING_WGSL + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + + ExpectWGSL(*shaderModule, R"( +@fragment +fn foo() +{ + var x: f32 = 1.0; + var v: vec3 = vec3(-2.0, -1.0, 0.0); + var m1: mat4x4 = mat4x4(x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x); + var m2: mat3x3 = mat3x3(m1, m1, m1, m1, m1, m1, m1, m1, m1); + var m3: mat2x2 = mat2x2(x, x, x, x); + var m4: mat3x3 = mat3x3(v, vec3(1.0, 2.0, 3.0), vec3(4.0, 5.0, 6.0)); +} +)", {}, wgslEnv); +#endif } } diff --git a/tests/src/Tests/IntrinsicTests.cpp b/tests/src/Tests/IntrinsicTests.cpp index b2fd5d7f..6dfee634 100644 --- a/tests/src/Tests/IntrinsicTests.cpp +++ b/tests/src/Tests/IntrinsicTests.cpp @@ -110,6 +110,23 @@ fn main() OpStore %23 %25 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +struct DataStruct +{ + values: array +} + +@group(0) @binding(0) var data: DataStruct; + +@fragment +fn main() +{ + var a: array = array(1.0, 2.0, 3.0); + var arraySize: u32 = 3; + var dynArraySize: u32 = arrayLength(&data.values); +} +)"); } WHEN("testing texture intrinsics") @@ -128,8 +145,6 @@ external tex2DArray: sampler2D_array[f32], tex3D: sampler3D[f32], texCube: sampler_cube[f32], - tex1DDepth: depth_sampler1D[f32], - tex1DArrayDepth: depth_sampler1D_array[f32], tex2DDepth: depth_sampler2D[f32], tex2DArrayDepth: depth_sampler2D_array[f32], texCubeDepth: depth_sampler_cube[f32], @@ -150,8 +165,6 @@ fn main() let sampleResult5 = tex3D.Sample(uv3f); let sampleResult6 = texCube.Sample(uv3f); - let depthSampleResult1 = tex1DDepth.SampleDepthComp(uv1f, depth); - let depthSampleResult2 = tex1DArrayDepth.SampleDepthComp(uv2f, depth); let depthSampleResult3 = tex2DDepth.SampleDepthComp(uv2f, depth); let depthSampleResult4 = tex2DArrayDepth.SampleDepthComp(uv3f, depth); let depthSampleResult5 = texCubeDepth.SampleDepthComp(uv3f, depth); @@ -172,8 +185,6 @@ uniform sampler2D tex2D; uniform sampler2DArray tex2DArray; uniform sampler3D tex3D; uniform samplerCube texCube; -uniform sampler1DShadow tex1DDepth; -uniform sampler1DArrayShadow tex1DArrayDepth; uniform sampler2DShadow tex2DDepth; uniform sampler2DArrayShadow tex2DArrayDepth; uniform samplerCubeShadow texCubeDepth; @@ -190,8 +201,6 @@ void main() vec4 sampleResult4 = texture(tex2DArray, uv3f); vec4 sampleResult5 = texture(tex3D, uv3f); vec4 sampleResult6 = texture(texCube, uv3f); - float depthSampleResult1 = texture(tex1DDepth, vec3(uv1f, 0.0, depth)); - float depthSampleResult2 = texture(tex1DArrayDepth, vec3(uv2f, depth)); float depthSampleResult3 = texture(tex2DDepth, vec3(uv2f, depth)); float depthSampleResult4 = texture(tex2DArrayDepth, vec4(uv3f, depth)); float depthSampleResult5 = texture(texCubeDepth, vec4(uv3f, depth)); @@ -208,11 +217,9 @@ external [set(0), binding(3)] tex2DArray: sampler2D_array[f32], [set(0), binding(4)] tex3D: sampler3D[f32], [set(0), binding(5)] texCube: sampler_cube[f32], - [set(0), binding(6)] tex1DDepth: depth_sampler1D[f32], - [set(0), binding(7)] tex1DArrayDepth: depth_sampler1D_array[f32], - [set(0), binding(8)] tex2DDepth: depth_sampler2D[f32], - [set(0), binding(9)] tex2DArrayDepth: depth_sampler2D_array[f32], - [set(0), binding(10)] texCubeDepth: depth_sampler_cube[f32] + [set(0), binding(6)] tex2DDepth: depth_sampler2D[f32], + [set(0), binding(7)] tex2DArrayDepth: depth_sampler2D_array[f32], + [set(0), binding(8)] texCubeDepth: depth_sampler_cube[f32] } [entry(frag)] @@ -228,8 +235,6 @@ fn main() let sampleResult4: vec4[f32] = tex2DArray.Sample(uv3f); let sampleResult5: vec4[f32] = tex3D.Sample(uv3f); let sampleResult6: vec4[f32] = texCube.Sample(uv3f); - let depthSampleResult1: f32 = tex1DDepth.SampleDepthComp(uv1f, depth); - let depthSampleResult2: f32 = tex1DArrayDepth.SampleDepthComp(uv2f, depth); let depthSampleResult3: f32 = tex2DDepth.SampleDepthComp(uv2f, depth); let depthSampleResult4: f32 = tex2DArrayDepth.SampleDepthComp(uv3f, depth); let depthSampleResult5: f32 = texCubeDepth.SampleDepthComp(uv3f, depth); @@ -237,179 +242,194 @@ fn main() )"); ExpectSPIRV(*shaderModule, R"( - OpCapability Capability(Shader) - OpCapability Capability(Sampled1D) - OpMemoryModel AddressingModel(Logical) MemoryModel(GLSL450) - OpEntryPoint ExecutionModel(Fragment) %59 "main" - OpExecutionMode %59 ExecutionMode(OriginUpperLeft) - OpSource SourceLanguage(NZSL) 4198400 - OpSourceExtension "Version: 1.1" - OpName %5 "tex1D" - OpName %9 "tex1DArray" - OpName %13 "tex2D" - OpName %17 "tex2DArray" - OpName %21 "tex3D" - OpName %25 "texCube" - OpName %29 "tex1DDepth" - OpName %33 "tex1DArrayDepth" - OpName %37 "tex2DDepth" - OpName %41 "tex2DArrayDepth" - OpName %45 "texCubeDepth" - OpName %59 "main" - OpDecorate %5 Decoration(Binding) 0 - OpDecorate %5 Decoration(DescriptorSet) 0 - OpDecorate %9 Decoration(Binding) 1 - OpDecorate %9 Decoration(DescriptorSet) 0 - OpDecorate %13 Decoration(Binding) 2 - OpDecorate %13 Decoration(DescriptorSet) 0 - OpDecorate %17 Decoration(Binding) 3 - OpDecorate %17 Decoration(DescriptorSet) 0 - OpDecorate %21 Decoration(Binding) 4 - OpDecorate %21 Decoration(DescriptorSet) 0 - OpDecorate %25 Decoration(Binding) 5 - OpDecorate %25 Decoration(DescriptorSet) 0 - OpDecorate %29 Decoration(Binding) 6 - OpDecorate %29 Decoration(DescriptorSet) 0 - OpDecorate %33 Decoration(Binding) 7 - OpDecorate %33 Decoration(DescriptorSet) 0 - OpDecorate %37 Decoration(Binding) 8 - OpDecorate %37 Decoration(DescriptorSet) 0 - OpDecorate %41 Decoration(Binding) 9 - OpDecorate %41 Decoration(DescriptorSet) 0 - OpDecorate %45 Decoration(Binding) 10 - OpDecorate %45 Decoration(DescriptorSet) 0 - %1 = OpTypeFloat 32 - %2 = OpTypeImage %1 Dim(Dim1D) 0 0 0 1 ImageFormat(Unknown) - %3 = OpTypeSampledImage %2 - %4 = OpTypePointer StorageClass(UniformConstant) %3 - %6 = OpTypeImage %1 Dim(Dim1D) 0 1 0 1 ImageFormat(Unknown) - %7 = OpTypeSampledImage %6 - %8 = OpTypePointer StorageClass(UniformConstant) %7 - %10 = OpTypeImage %1 Dim(Dim2D) 0 0 0 1 ImageFormat(Unknown) - %11 = OpTypeSampledImage %10 - %12 = OpTypePointer StorageClass(UniformConstant) %11 - %14 = OpTypeImage %1 Dim(Dim2D) 0 1 0 1 ImageFormat(Unknown) - %15 = OpTypeSampledImage %14 - %16 = OpTypePointer StorageClass(UniformConstant) %15 - %18 = OpTypeImage %1 Dim(Dim3D) 0 0 0 1 ImageFormat(Unknown) - %19 = OpTypeSampledImage %18 - %20 = OpTypePointer StorageClass(UniformConstant) %19 - %22 = OpTypeImage %1 Dim(Cube) 0 0 0 1 ImageFormat(Unknown) - %23 = OpTypeSampledImage %22 - %24 = OpTypePointer StorageClass(UniformConstant) %23 - %26 = OpTypeImage %1 Dim(Dim1D) 1 0 0 1 ImageFormat(Unknown) - %27 = OpTypeSampledImage %26 - %28 = OpTypePointer StorageClass(UniformConstant) %27 - %30 = OpTypeImage %1 Dim(Dim1D) 1 1 0 1 ImageFormat(Unknown) - %31 = OpTypeSampledImage %30 - %32 = OpTypePointer StorageClass(UniformConstant) %31 - %34 = OpTypeImage %1 Dim(Dim2D) 1 0 0 1 ImageFormat(Unknown) - %35 = OpTypeSampledImage %34 - %36 = OpTypePointer StorageClass(UniformConstant) %35 - %38 = OpTypeImage %1 Dim(Dim2D) 1 1 0 1 ImageFormat(Unknown) - %39 = OpTypeSampledImage %38 - %40 = OpTypePointer StorageClass(UniformConstant) %39 - %42 = OpTypeImage %1 Dim(Cube) 1 0 0 1 ImageFormat(Unknown) - %43 = OpTypeSampledImage %42 - %44 = OpTypePointer StorageClass(UniformConstant) %43 - %46 = OpTypeVoid - %47 = OpTypeFunction %46 - %48 = OpConstant %1 f32(0.5) - %49 = OpTypePointer StorageClass(Function) %1 - %50 = OpConstant %1 f32(0) - %51 = OpConstant %1 f32(1) - %52 = OpTypeVector %1 2 - %53 = OpTypePointer StorageClass(Function) %52 - %54 = OpConstant %1 f32(2) - %55 = OpTypeVector %1 3 - %56 = OpTypePointer StorageClass(Function) %55 - %57 = OpTypeVector %1 4 - %58 = OpTypePointer StorageClass(Function) %57 - %5 = OpVariable %4 StorageClass(UniformConstant) - %9 = OpVariable %8 StorageClass(UniformConstant) - %13 = OpVariable %12 StorageClass(UniformConstant) - %17 = OpVariable %16 StorageClass(UniformConstant) - %21 = OpVariable %20 StorageClass(UniformConstant) - %25 = OpVariable %24 StorageClass(UniformConstant) - %29 = OpVariable %28 StorageClass(UniformConstant) - %33 = OpVariable %32 StorageClass(UniformConstant) - %37 = OpVariable %36 StorageClass(UniformConstant) - %41 = OpVariable %40 StorageClass(UniformConstant) - %45 = OpVariable %44 StorageClass(UniformConstant) - %59 = OpFunction %46 FunctionControl(0) %47 - %60 = OpLabel - %61 = OpVariable %49 StorageClass(Function) - %62 = OpVariable %49 StorageClass(Function) - %63 = OpVariable %53 StorageClass(Function) - %64 = OpVariable %56 StorageClass(Function) - %65 = OpVariable %58 StorageClass(Function) - %66 = OpVariable %58 StorageClass(Function) - %67 = OpVariable %58 StorageClass(Function) - %68 = OpVariable %58 StorageClass(Function) - %69 = OpVariable %58 StorageClass(Function) - %70 = OpVariable %58 StorageClass(Function) - %71 = OpVariable %49 StorageClass(Function) - %72 = OpVariable %49 StorageClass(Function) - %73 = OpVariable %49 StorageClass(Function) - %74 = OpVariable %49 StorageClass(Function) - %75 = OpVariable %49 StorageClass(Function) - OpStore %61 %48 - OpStore %62 %50 - %76 = OpCompositeConstruct %52 %50 %51 - OpStore %63 %76 - %77 = OpCompositeConstruct %55 %50 %51 %54 - OpStore %64 %77 - %78 = OpLoad %3 %5 - %79 = OpLoad %1 %62 - %80 = OpImageSampleImplicitLod %57 %78 %79 - OpStore %65 %80 - %81 = OpLoad %7 %9 - %82 = OpLoad %52 %63 - %83 = OpImageSampleImplicitLod %57 %81 %82 - OpStore %66 %83 - %84 = OpLoad %11 %13 - %85 = OpLoad %52 %63 - %86 = OpImageSampleImplicitLod %57 %84 %85 - OpStore %67 %86 - %87 = OpLoad %15 %17 - %88 = OpLoad %55 %64 - %89 = OpImageSampleImplicitLod %57 %87 %88 - OpStore %68 %89 - %90 = OpLoad %19 %21 - %91 = OpLoad %55 %64 - %92 = OpImageSampleImplicitLod %57 %90 %91 - OpStore %69 %92 - %93 = OpLoad %23 %25 - %94 = OpLoad %55 %64 - %95 = OpImageSampleImplicitLod %57 %93 %94 - OpStore %70 %95 - %96 = OpLoad %27 %29 - %97 = OpLoad %1 %62 - %98 = OpLoad %1 %61 - %99 = OpImageSampleDrefImplicitLod %1 %96 %97 %98 - OpStore %71 %99 -%100 = OpLoad %31 %33 -%101 = OpLoad %52 %63 -%102 = OpLoad %1 %61 -%103 = OpImageSampleDrefImplicitLod %1 %100 %101 %102 - OpStore %72 %103 -%104 = OpLoad %35 %37 -%105 = OpLoad %52 %63 -%106 = OpLoad %1 %61 -%107 = OpImageSampleDrefImplicitLod %1 %104 %105 %106 - OpStore %73 %107 -%108 = OpLoad %39 %41 -%109 = OpLoad %55 %64 -%110 = OpLoad %1 %61 -%111 = OpImageSampleDrefImplicitLod %1 %108 %109 %110 - OpStore %74 %111 -%112 = OpLoad %43 %45 -%113 = OpLoad %55 %64 -%114 = OpLoad %1 %61 -%115 = OpImageSampleDrefImplicitLod %1 %112 %113 %114 - OpStore %75 %115 - OpReturn - OpFunctionEnd)", {}, {}, true); + OpCapability Capability(Shader) + OpCapability Capability(Sampled1D) + OpMemoryModel AddressingModel(Logical) MemoryModel(GLSL450) + OpEntryPoint ExecutionModel(Fragment) %51 "main" + OpExecutionMode %51 ExecutionMode(OriginUpperLeft) + OpSource SourceLanguage(NZSL) 4198400 + OpSourceExtension "Version: 1.1" + OpName %5 "tex1D" + OpName %9 "tex1DArray" + OpName %13 "tex2D" + OpName %17 "tex2DArray" + OpName %21 "tex3D" + OpName %25 "texCube" + OpName %29 "tex2DDepth" + OpName %33 "tex2DArrayDepth" + OpName %37 "texCubeDepth" + OpName %51 "main" + OpDecorate %5 Decoration(Binding) 0 + OpDecorate %5 Decoration(DescriptorSet) 0 + OpDecorate %9 Decoration(Binding) 1 + OpDecorate %9 Decoration(DescriptorSet) 0 + OpDecorate %13 Decoration(Binding) 2 + OpDecorate %13 Decoration(DescriptorSet) 0 + OpDecorate %17 Decoration(Binding) 3 + OpDecorate %17 Decoration(DescriptorSet) 0 + OpDecorate %21 Decoration(Binding) 4 + OpDecorate %21 Decoration(DescriptorSet) 0 + OpDecorate %25 Decoration(Binding) 5 + OpDecorate %25 Decoration(DescriptorSet) 0 + OpDecorate %29 Decoration(Binding) 6 + OpDecorate %29 Decoration(DescriptorSet) 0 + OpDecorate %33 Decoration(Binding) 7 + OpDecorate %33 Decoration(DescriptorSet) 0 + OpDecorate %37 Decoration(Binding) 8 + OpDecorate %37 Decoration(DescriptorSet) 0 + %1 = OpTypeFloat 32 + %2 = OpTypeImage %1 Dim(Dim1D) 0 0 0 1 ImageFormat(Unknown) + %3 = OpTypeSampledImage %2 + %4 = OpTypePointer StorageClass(UniformConstant) %3 + %6 = OpTypeImage %1 Dim(Dim1D) 0 1 0 1 ImageFormat(Unknown) + %7 = OpTypeSampledImage %6 + %8 = OpTypePointer StorageClass(UniformConstant) %7 +%10 = OpTypeImage %1 Dim(Dim2D) 0 0 0 1 ImageFormat(Unknown) +%11 = OpTypeSampledImage %10 +%12 = OpTypePointer StorageClass(UniformConstant) %11 +%14 = OpTypeImage %1 Dim(Dim2D) 0 1 0 1 ImageFormat(Unknown) +%15 = OpTypeSampledImage %14 +%16 = OpTypePointer StorageClass(UniformConstant) %15 +%18 = OpTypeImage %1 Dim(Dim3D) 0 0 0 1 ImageFormat(Unknown) +%19 = OpTypeSampledImage %18 +%20 = OpTypePointer StorageClass(UniformConstant) %19 +%22 = OpTypeImage %1 Dim(Cube) 0 0 0 1 ImageFormat(Unknown) +%23 = OpTypeSampledImage %22 +%24 = OpTypePointer StorageClass(UniformConstant) %23 +%26 = OpTypeImage %1 Dim(Dim2D) 1 0 0 1 ImageFormat(Unknown) +%27 = OpTypeSampledImage %26 +%28 = OpTypePointer StorageClass(UniformConstant) %27 +%30 = OpTypeImage %1 Dim(Dim2D) 1 1 0 1 ImageFormat(Unknown) +%31 = OpTypeSampledImage %30 +%32 = OpTypePointer StorageClass(UniformConstant) %31 +%34 = OpTypeImage %1 Dim(Cube) 1 0 0 1 ImageFormat(Unknown) +%35 = OpTypeSampledImage %34 +%36 = OpTypePointer StorageClass(UniformConstant) %35 +%38 = OpTypeVoid +%39 = OpTypeFunction %38 +%40 = OpConstant %1 f32(0.5) +%41 = OpTypePointer StorageClass(Function) %1 +%42 = OpConstant %1 f32(0) +%43 = OpConstant %1 f32(1) +%44 = OpTypeVector %1 2 +%45 = OpTypePointer StorageClass(Function) %44 +%46 = OpConstant %1 f32(2) +%47 = OpTypeVector %1 3 +%48 = OpTypePointer StorageClass(Function) %47 +%49 = OpTypeVector %1 4 +%50 = OpTypePointer StorageClass(Function) %49 + %5 = OpVariable %4 StorageClass(UniformConstant) + %9 = OpVariable %8 StorageClass(UniformConstant) +%13 = OpVariable %12 StorageClass(UniformConstant) +%17 = OpVariable %16 StorageClass(UniformConstant) +%21 = OpVariable %20 StorageClass(UniformConstant) +%25 = OpVariable %24 StorageClass(UniformConstant) +%29 = OpVariable %28 StorageClass(UniformConstant) +%33 = OpVariable %32 StorageClass(UniformConstant) +%37 = OpVariable %36 StorageClass(UniformConstant) +%51 = OpFunction %38 FunctionControl(0) %39 +%52 = OpLabel +%53 = OpVariable %41 StorageClass(Function) +%54 = OpVariable %41 StorageClass(Function) +%55 = OpVariable %45 StorageClass(Function) +%56 = OpVariable %48 StorageClass(Function) +%57 = OpVariable %50 StorageClass(Function) +%58 = OpVariable %50 StorageClass(Function) +%59 = OpVariable %50 StorageClass(Function) +%60 = OpVariable %50 StorageClass(Function) +%61 = OpVariable %50 StorageClass(Function) +%62 = OpVariable %50 StorageClass(Function) +%63 = OpVariable %41 StorageClass(Function) +%64 = OpVariable %41 StorageClass(Function) +%65 = OpVariable %41 StorageClass(Function) + OpStore %53 %40 + OpStore %54 %42 +%66 = OpCompositeConstruct %44 %42 %43 + OpStore %55 %66 +%67 = OpCompositeConstruct %47 %42 %43 %46 + OpStore %56 %67 +%68 = OpLoad %3 %5 +%69 = OpLoad %1 %54 +%70 = OpImageSampleImplicitLod %49 %68 %69 + OpStore %57 %70 +%71 = OpLoad %7 %9 +%72 = OpLoad %44 %55 +%73 = OpImageSampleImplicitLod %49 %71 %72 + OpStore %58 %73 +%74 = OpLoad %11 %13 +%75 = OpLoad %44 %55 +%76 = OpImageSampleImplicitLod %49 %74 %75 + OpStore %59 %76 +%77 = OpLoad %15 %17 +%78 = OpLoad %47 %56 +%79 = OpImageSampleImplicitLod %49 %77 %78 + OpStore %60 %79 +%80 = OpLoad %19 %21 +%81 = OpLoad %47 %56 +%82 = OpImageSampleImplicitLod %49 %80 %81 + OpStore %61 %82 +%83 = OpLoad %23 %25 +%84 = OpLoad %47 %56 +%85 = OpImageSampleImplicitLod %49 %83 %84 + OpStore %62 %85 +%86 = OpLoad %27 %29 +%87 = OpLoad %44 %55 +%88 = OpLoad %1 %53 +%89 = OpImageSampleDrefImplicitLod %1 %86 %87 %88 + OpStore %63 %89 +%90 = OpLoad %31 %33 +%91 = OpLoad %47 %56 +%92 = OpLoad %1 %53 +%93 = OpImageSampleDrefImplicitLod %1 %90 %91 %92 + OpStore %64 %93 +%94 = OpLoad %35 %37 +%95 = OpLoad %47 %56 +%96 = OpLoad %1 %53 +%97 = OpImageSampleDrefImplicitLod %1 %94 %95 %96 + OpStore %65 %97 + OpReturn + OpFunctionEnd)", {}, {}, true); + +#ifdef FAILING_WGSL + ExpectWGSL(*shaderModule, R"( +@group(0) @binding(0) var tex1D: texture_1d; +@group(0) @binding(1) var tex1DSampler: sampler; +@group(0) @binding(2) var tex1DArray: texture_1d_array; +@group(0) @binding(3) var tex1DArraySampler: sampler; +@group(0) @binding(4) var tex2D: texture_2d; +@group(0) @binding(5) var tex2DSampler: sampler; +@group(0) @binding(6) var tex2DArray: texture_2d_array; +@group(0) @binding(7) var tex2DArraySampler: sampler; +@group(0) @binding(8) var tex3D: texture_3d; +@group(0) @binding(9) var tex3DSampler: sampler; +@group(0) @binding(10) var texCube: texture_cube; +@group(0) @binding(11) var texCubeSampler: sampler; +@group(0) @binding(12) var tex2DDepth: texture_depth_2d; +@group(0) @binding(13) var tex2DDepthSampler: sampler; +@group(0) @binding(14) var tex2DArrayDepth: texture_depth_2d_array; +@group(0) @binding(15) var tex2DArrayDepthSampler: sampler; +@group(0) @binding(16) var texCubeDepth: texture_depth_cube; +@group(0) @binding(17) var texCubeDepthSampler: sampler; + +@fragment +fn main() +{ + var depth: f32 = 0.5; + var uv1f: f32 = 0.0; + var uv2f: vec2 = vec2(0.0, 1.0); + var uv3f: vec3 = vec3(0.0, 1.0, 2.0); + var sampleResult1: vec4 = textureSample(tex1D, tex1DSampler, uv1f); + var sampleResult2: vec4 = textureSample(tex1DArray, tex1DArraySampler, uv2f); + var sampleResult3: vec4 = textureSample(tex2D, tex2DSampler, uv2f); + var sampleResult4: vec4 = textureSample(tex2DArray, tex2DArraySampler, uv3f); // texture array needs to take the z element of vector and put it as a function argument https://www.w3.org/TR/WGSL/#texturesample + var sampleResult5: vec4 = textureSample(tex3D, tex3DSampler, uv3f); + var sampleResult6: vec4 = textureSample(texCube, texCubeSampler, uv3f); + var depthSampleResult3: f32 = textureSampleCompare(tex2DDepth, tex2DDepthSampler, uv2f, depth); + var depthSampleResult4: f32 = textureSampleCompare(tex2DArrayDepth, tex2DArrayDepthSampler, uv3f, depth); + var depthSampleResult5: f32 = textureSampleCompare(texCubeDepth, texCubeDepthSampler, uv3f, depth); +} +)"); +#endif } WHEN("testing math intrinsics") @@ -1142,6 +1162,135 @@ fn main() OpStore %166 %419 OpReturn OpFunctionEnd)", {}, {}, true); + + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var d1: f64 = 4.2; + var d2: f64 = 133.699999999999989; + var d3: f64 = -123.400000000000006; + var f1: f32 = 4.2; + var f2: f32 = 133.699997; + var f3: f32 = -123.400002; + var i1: i32 = 42; + var i2: i32 = 1337; + var i3: i32 = -1234; + var u1: u32 = 42u; + var u2: u32 = 1337u; + var u3: u32 = 123456789u; + var uv: vec2 = vec2(0.0, 1.0); + var v1: vec3 = vec3(0.0, 1.0, 2.0); + var v2: vec3 = vec3(2.0, 1.0, 0.0); + var v3: vec3 = vec3(1.0, 0.0, 2.0); + var dv1: vec3 = vec3(0.0, 1.0, 2.0); + var dv2: vec3 = vec3(2.0, 1.0, 0.0); + var dv3: vec3 = vec3(1.0, 0.0, 2.0); + var iv1: vec3 = vec3(0, 1, 2); + var iv2: vec3 = vec3(2, 1, 0); + var iv3: vec3 = vec3(1, 0, 2); + var uv1: vec3 = vec3(0u, 1u, 2u); + var uv2: vec3 = vec3(2u, 1u, 0u); + var uv3: vec3 = vec3(1u, 0u, 2u); + var absResult1: f32 = abs(f1); + var absResult2: vec3 = abs(v1); + var absResult3: f64 = abs(d1); + var absResult3_2: vec3 = abs(dv1); + var ceilResult1: f32 = ceil(f1); + var ceilResult2: vec3 = ceil(v1); + var ceilResult3: f64 = ceil(d1); + var ceilResult4: vec3 = ceil(dv1); + var clampResult1: f32 = clamp(f1, f3, f2); + var clampResult2: vec3 = clamp(v1, v3, v2); + var clampResult3: f64 = clamp(d1, d3, d2); + var clampResult4: vec3 = clamp(dv1, dv3, dv2); + var crossResult1: vec3 = cross(v1, v2); + var crossResult2: vec3 = cross(dv1, dv2); + var distanceResult1: f32 = distance(v1, v2); + var distanceResult2: f64 = distance(dv1, dv2); + var dotResult1: f32 = dot(v1, v2); + var dotResult2: f64 = dot(dv1, dv2); + var expResult1: vec3 = exp(v1); + var expResult2: f32 = exp(f1); + var exp2Result1: vec3 = exp2(v1); + var exp2Result2: f32 = exp2(f1); + var floorResult1: f32 = floor(f1); + var floorResult2: vec3 = floor(v1); + var floorResult3: f64 = floor(d1); + var floorResult4: vec3 = floor(dv1); + var fractResult1: f32 = fract(f1); + var fractResult2: vec3 = fract(v1); + var fractResult3: f64 = fract(d1); + var fractResult4: vec3 = fract(dv1); + var rsqrtResult1: f32 = inverseSqrt(f1); + var rsqrtResult2: vec3 = inverseSqrt(v1); + var rsqrtResult3: f64 = inverseSqrt(d1); + var rsqrtResult4: vec3 = inverseSqrt(dv1); + var lengthResult1: f32 = length(v1); + var lengthResult2: f64 = length(dv1); + var lerpResult1: f32 = mix(f1, f3, f2); + var lerpResult2: vec3 = mix(v1, v3, v2); + var lerpResult3: f64 = mix(d1, d3, d2); + var lerpResult4: vec3 = mix(dv1, dv3, dv2); + var logResult1: vec3 = log(v1); + var logResult2: f32 = log(f1); + var log2Result1: vec3 = log2(v1); + var log2Result2: f32 = log2(f1); + var maxResult1: f32 = max(f1, f2); + var maxResult2: i32 = max(i1, i2); + var maxResult3: u32 = max(u1, u2); + var maxResult4: vec3 = max(v1, v2); + var maxResult5: vec3 = max(dv1, dv2); + var maxResult6: vec3 = max(iv1, iv2); + var maxResult7: vec3 = max(uv1, uv2); + var minResult1: f32 = min(f1, f2); + var minResult2: i32 = min(i1, i2); + var minResult3: u32 = min(u1, u2); + var minResult4: vec3 = min(v1, v2); + var minResult5: vec3 = min(dv1, dv2); + var minResult6: vec3 = min(iv1, iv2); + var minResult7: vec3 = min(uv1, uv2); + var normalizeResult1: vec3 = normalize(v1); + var normalizeResult2: vec3 = normalize(dv1); + var powResult1: f32 = pow(f1, f2); + var powResult2: vec3 = pow(v1, v2); + var reflectResult1: vec3 = reflect(v1, v2); + var reflectResult2: vec3 = reflect(dv1, dv2); + var roundResult1: f32 = round(f1); + var roundResult2: vec3 = round(v1); + var roundResult3: f64 = round(d1); + var roundResult4: vec3 = round(dv1); + var roundevenResult1: f32 = round(f1); + var roundevenResult2: vec3 = round(v1); + var roundevenResult3: f64 = round(d1); + var roundevenResult4: vec3 = round(dv1); + var signResult1: f32 = sign(f1); + var signResult2: i32 = sign(i1); + var signResult3: f64 = sign(d1); + var signResult4: vec3 = sign(v1); + var signResult5: vec3 = sign(dv1); + var signResult6: vec3 = sign(iv1); + var smoothStepResult1: f32 = smoothstep(f1, f2, f3); + var smoothStepResult2: vec3 = smoothstep(v1, v2, v3); + var smoothStepResult1_2: f64 = smoothstep(d1, d2, d3); + var smoothStepResult2_2: vec3 = smoothstep(dv1, dv2, dv3); + var sqrtResult1: f32 = sqrt(f1); + var sqrtResult2: vec3 = sqrt(v1); + var sqrtResult3: f64 = sqrt(d1); + var sqrtResult4: vec3 = sqrt(dv1); + var stepResult1: f32 = step(f1, f2); + var stepResult2: vec3 = step(v1, v2); + var stepResult1_2: f64 = step(d1, d2); + var stepResult2_2: vec3 = step(dv1, dv2); + var truncResult1: f32 = trunc(f1); + var truncResult2: vec3 = trunc(v1); + var truncResult3: f64 = trunc(d1); + var truncResult4: vec3 = trunc(dv1); +} +)", {}, wgslEnv); } WHEN("testing matrix intrinsics") @@ -1340,6 +1489,25 @@ fn main() OpStore %66 %106 OpReturn OpFunctionEnd)", {}, {}, true); + +#ifdef FAILING_WGSL + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + + ExpectWGSL(*shaderModule, R"( +fn main() +{ + let m1: mat4[f32] = mat4[f32](0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0); + let m2: mat2x3[f32] = mat2x3[f32](0.0, 1.0, 2.0, 3.0, 4.0, 5.0); + let m3: mat3[f64] = mat3[f64](0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0); + let m4: mat3x2[f64] = mat3x2[f64](0.0, 1.0, 2.0, 3.0, 4.0, 5.0); + let inverseResult1: mat4[f32] = inverse(m1); + let inverseResult2: mat3[f64] = inverse(m3); + let transposeResult1: mat3x2[f32] = transpose(m2); + let transposeResult2: mat2x3[f64] = transpose(m4); +} +)", {}, wgslEnv); +#endif } WHEN("testing trigonometry intrinsics") @@ -1562,6 +1730,49 @@ fn main() OpStore %57 %115 OpReturn OpFunctionEnd)", {}, {}, true); + + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + + ExpectWGSL(*shaderModule, R"( +fn main() +{ + var d1: f64 = 42.0; + var d2: f64 = 1337.0; + var f1: f32 = 42.0; + var f2: f32 = 1337.0; + var v1: vec3 = vec3(0.0, 1.0, 2.0); + var v2: vec3 = vec3(2.0, 1.0, 0.0); + var dv1: vec3 = vec3(0.0, 1.0, 2.0); + var dv2: vec3 = vec3(2.0, 1.0, 0.0); + var acosResult1: f32 = acos(f1); + var acosResult2: vec3 = acos(v1); + var acoshResult1: f32 = acosh(f1); + var acoshResult2: vec3 = acosh(v1); + var asinResult1: f32 = asin(f1); + var asinResult2: vec3 = asin(v1); + var asinhResult1: f32 = asinh(f1); + var asinhResult2: vec3 = asinh(v1); + var atanResult1: f32 = atan(f1); + var atanResult2: vec3 = atan(v1); + var atan2Result1: f32 = atan2(f1, f2); + var atan2Result2: vec3 = atan2(v1, v2); + var atanhResult1: f32 = atanh(f1); + var atanhResult2: vec3 = atanh(v1); + var cosResult1: f32 = cos(f1); + var cosResult2: vec3 = cos(v1); + var coshResult1: f32 = cosh(f1); + var coshResult2: vec3 = cosh(v1); + var deg2radResult1: f32 = radians(f1); + var deg2radResult2: vec3 = radians(v1); + var rad2degResult1: f32 = degrees(f1); + var rad2degResult2: vec3 = degrees(v1); + var sinResult1: f32 = sin(f1); + var sinResult2: vec3 = sin(v1); + var sinhResult1: f32 = sinh(f1); + var sinhResult2: vec3 = sinh(v1); +} +)", {}, wgslEnv); } WHEN("testing select intrinsic") @@ -2116,6 +2327,50 @@ fn main() OpReturn OpFunctionEnd)", {}, env, true); } + + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var b1: bool = false; + var b2: bool = true; + var d1: f64 = 4.2; + var d2: f64 = 133.699999999999989; + var f1: f32 = 4.2; + var f2: f32 = 133.699997; + var i1: i32 = 42; + var i2: i32 = 1337; + var u1: u32 = 42u; + var u2: u32 = 1337u; + var v1: vec3 = vec3(0.0, 1.0, 2.0); + var v2: vec3 = vec3(2.0, 1.0, 0.0); + var bv1: vec3 = vec3(true, false, true); + var bv2: vec3 = vec3(false, false, true); + var dv1: vec3 = vec3(0.0, 1.0, 2.0); + var dv2: vec3 = vec3(2.0, 1.0, 0.0); + var iv1: vec3 = vec3(0, 1, 2); + var iv2: vec3 = vec3(2, 1, 0); + var uv1: vec3 = vec3(0u, 1u, 2u); + var uv2: vec3 = vec3(2u, 1u, 0u); + var result: f64 = select(d2, d1, b1); + var result_2: f32 = select(f2, f1, b2); + var result_3: i32 = select(i2, i1, b1); + var result_4: u32 = select(u2, u1, b2); + var result_5: vec3 = select(v2, v1, vec3(b1)); + var result_6: vec3 = select(bv2, bv1, vec3(b2)); + var result_7: vec3 = select(dv2, dv1, vec3(b1)); + var result_8: vec3 = select(iv2, iv1, vec3(b2)); + var result_9: vec3 = select(uv2, uv1, vec3(b1)); + var result_10: vec3 = select(v2, v1, bv1); + var result_11: vec3 = select(bv2, bv1, bv2); + var result_12: vec3 = select(dv2, dv1, bv1); + var result_13: vec3 = select(iv2, iv1, bv2); + var result_14: vec3 = select(uv2, uv1, bv1); +} +)", {}, wgslEnv); } WHEN("testing all/any/not intrinsics") @@ -2187,6 +2442,17 @@ fn main() OpStore %14 %21 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var x: vec3 = vec3(true, false, false); + var r: bool = all(x); + var r_2: bool = any(x); + var r_3: vec3 = !(x); +} +)"); } WHEN("testing isinf/isnan intrinsics") @@ -2254,5 +2520,25 @@ fn main() OpStore %17 %21 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +fn _nzslRatiof32(n: f32, d: f32) -> f32 +{ + return n / d; +} + +fn _nzslInfinityf32() -> f32 +{ + return _nzslRatiof32(1.0, 0.0); +} + +@fragment +fn main() +{ + var x: vec3 = vec3(1.0, 2.0, 3.0); + var r: vec3 = vec3(x.x == _nzslInfinityf32(), x.y == _nzslInfinityf32(), x.z == _nzslInfinityf32()); + var r_2: vec3 = x != x; +} +)"); } } diff --git a/tests/src/Tests/LayoutTests.cpp b/tests/src/Tests/LayoutTests.cpp index ee64a641..24599726 100644 --- a/tests/src/Tests/LayoutTests.cpp +++ b/tests/src/Tests/LayoutTests.cpp @@ -119,6 +119,23 @@ fn main() OpReturn OpFunctionEnd )", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +struct Foo +{ + v0: vec3, + v1: vec3, + v2: f32 +} + +@group(0) @binding(0) var foo: Foo; + +@fragment +fn main() +{ + var value: f32 = 0.0; +} +)"); } SECTION("std430") @@ -282,6 +299,32 @@ fn main() OpReturn OpFunctionEnd )", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +struct Bar +{ + v0: vec2 +} + +struct Foo +{ + v0: f32, + v1: vec3, + v2: array, + v3: vec2, + v4: Bar, + v5: vec3, + v6: f32 +} + +@group(0) @binding(0) var foo: Foo; + +@fragment +fn main() +{ + var value: f32 = 0.0; +} +)"); } SECTION("scalar") @@ -415,6 +458,21 @@ fn main() OpFunctionEnd )", {}, spirvEnv, true, spvValidatorOptions); } - } + ExpectWGSL(*shaderModule, R"( +struct Foo +{ + v0: vec3, + v1: vec3 +} + +@group(0) @binding(0) var foo: Foo; + +@fragment +fn main() +{ + var value: f32 = 0.0; +} +)"); + } } diff --git a/tests/src/Tests/LiteralTests.cpp b/tests/src/Tests/LiteralTests.cpp index 69a168e9..3b47c9b4 100644 --- a/tests/src/Tests/LiteralTests.cpp +++ b/tests/src/Tests/LiteralTests.cpp @@ -85,6 +85,21 @@ fn foo() OpStore %31 %20 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn foo() +{ + var bar: f32 = -1.0; + var _nzsl_cachedResult: f32 = (1.0) + bar; + var bar_2: vec3 = vec3(_nzsl_cachedResult, _nzsl_cachedResult, _nzsl_cachedResult); + var bar_3: vec3 = vec3(2.0, 2.0, 2.0); + var bar_4: f32 = (max(1.0, 2.0)) + (min(2.0, 1.0)); + var bar_5: f32 = max(min(1.0, 2.0), 3.0); + var bar_6: u32 = max(1u, 2u); + var bar_7: vec3 = vec3(1, 2, 3); +} +)"); } @@ -140,5 +155,14 @@ fn foo() OpStore %10 %6 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn foo() +{ + var bar: u32 = 4u; + var bar_2: u32 = 5u; +} +)"); } } diff --git a/tests/src/Tests/LoopTests.cpp b/tests/src/Tests/LoopTests.cpp index da942fdb..46b0d767 100644 --- a/tests/src/Tests/LoopTests.cpp +++ b/tests/src/Tests/LoopTests.cpp @@ -94,6 +94,21 @@ OpLabel OpReturn OpFunctionEnd)"); + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var value: f32 = 0.0; + var i: i32 = 0; + while (i < (10)) + { + value += 0.1; + i += 1; + } + +} +)"); + WHEN("using break and continue") { std::string_view nzslSource2 = R"( @@ -237,6 +252,33 @@ fn main() %25 = OpLabel OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule2, R"( +@fragment +fn main() +{ + var value: f32 = 0.0; + var value2: f32 = 0.0; + var i: i32 = 0; + while (i < (10)) + { + if (i >= (8)) + { + break; + } + + value += 0.1; + i += 1; + if (i == (4)) + { + continue; + } + + value2 += value; + } + +} +)"); } } @@ -409,6 +451,47 @@ OpLabel OpReturn OpFunctionEnd)"); + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var x: i32 = 0; + { + var v: i32 = 0; + var _nzsl_to: i32 = 10; + while (v < _nzsl_to) + { + x += v; + { + var v_2: i32 = 5; + var _nzsl_to_2: i32 = 7; + while (v_2 < _nzsl_to_2) + { + x += v_2; + v_2 += 1; + } + + } + + v += 1; + } + + } + + { + var v: i32 = 0; + var _nzsl_to: i32 = 20; + while (v < _nzsl_to) + { + x += v; + v += 1; + } + + } + +} +)"); + WHEN("using break and continue") { @@ -534,6 +617,35 @@ fn main() %18 = OpLabel OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule2, R"( +@fragment +fn main() +{ + var x: i32 = 0; + { + var v: i32 = 0; + var _nzsl_to: i32 = 10; + while (v < _nzsl_to) + { + if (v == (4)) + { + continue; + } + + x += v; + if (v >= (8)) + { + break; + } + + v += 1; + } + + } + +} +)"); } } @@ -622,6 +734,26 @@ OpBranch OpLabel OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var x: i32 = 0; + { + var v: i32 = 0; + var _nzsl_to: i32 = 10; + var _nzsl_step: i32 = 2; + while (v < _nzsl_to) + { + x += v; + v += _nzsl_step; + } + + } + +} +)"); } WHEN("using a for-each") @@ -718,7 +850,26 @@ OpLabel OpReturn OpFunctionEnd)"); +#ifdef FAILING_WGSL + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var x: f32 = 0.0; + { + var _nzsl_counter: u32 = 0u; + while (_nzsl_counter < (10u)) + { + var v: f32 = data.value[_nzsl_counter]; + x += v; + _nzsl_counter += 1u; + } + } + +} +)"); +#endif WHEN("using break and continue") { @@ -856,6 +1007,37 @@ fn main() %27 = OpLabel OpReturn OpFunctionEnd)", {}, {}, true); + +#ifdef FAILING_WGSL + ExpectWGSL(*shaderModule2, R"( +@fragment +fn main() +{ + var x: f32 = 0.0; + { + var _nzsl_counter: u32 = 0u; + while (_nzsl_counter < (10u)) + { + var v: f32 = data.value[_nzsl_counter]; + if (v < (0.0)) + { + continue; + } + + x += v; + if (x >= (10.0)) + { + break; + } + + _nzsl_counter += 1u; + } + + } + +} +)"); +#endif } } @@ -945,5 +1127,25 @@ OpBranch OpLabel OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var cascadeIndex: u32 = 0u; + var cascadeCount: u32 = 4u; + { + var index: u32 = 0u; + var _nzsl_to: u32 = cascadeCount; + while (index < _nzsl_to) + { + cascadeIndex = index; + index += 1u; + } + + } + +} +)"); } } diff --git a/tests/src/Tests/ModuleTests.cpp b/tests/src/Tests/ModuleTests.cpp index 6b1c771c..bff4be79 100644 --- a/tests/src/Tests/ModuleTests.cpp +++ b/tests/src/Tests/ModuleTests.cpp @@ -64,13 +64,13 @@ struct Unused {} [export] struct InputData { - value: f32 + [location(0)] value: f32 } [export] struct OutputData { - value: f32 + [location(0)] value: vec4[f32] } )"; @@ -92,9 +92,10 @@ external ExtData fn main(input: InputData) -> OutputData { let data = ExtData.block.data; + let value = GetDataValue(data) * input.value * Pi; let output: OutputData; - output.value = GetDataValue(data) * input.value * Pi; + output.value = vec4[f32](value, value, value, value); return output; } )"; @@ -137,7 +138,7 @@ struct InputData_SimpleModule struct OutputData_SimpleModule { - float value; + vec4 value; }; // Main module @@ -151,20 +152,21 @@ layout(std140) uniform _nzslBindingExtData_block } ExtData_block; /**************** Inputs ****************/ -in float _nzslInvalue; +in float _nzslVarying0; // _nzslInvalue /*************** Outputs ***************/ -out float _nzslOutvalue; +layout(location = 0) out vec4 _nzslOutvalue; void main() { InputData_SimpleModule input_; - input_.value = _nzslInvalue; + input_.value = _nzslVarying0; Data_SimpleModule data; data.value = ExtData_block.data.value; + float value = ((GetDataValue_SimpleModule(data)) * input_.value) * (3.141592); OutputData_SimpleModule output_; - output_.value = ((GetDataValue_SimpleModule(data)) * input_.value) * (3.141592); + output_.value = vec4(value, value, value, value); _nzslOutvalue = output_.value; return; @@ -203,12 +205,12 @@ module _SimpleModule struct InputData { - value: f32 + [location(0)] value: f32 } struct OutputData { - value: f32 + [location(0)] value: vec4[f32] } } @@ -231,8 +233,9 @@ external ExtData fn main(input: InputData) -> OutputData { let data: _SimpleModule.Data = ExtData.block.data; + let value: f32 = ((GetDataValue(data)) * input.value) * Pi; let output: OutputData; - output.value = ((GetDataValue(data)) * input.value) * Pi; + output.value = vec4[f32](value, value, value, value); return output; } )"); @@ -251,6 +254,9 @@ OpVariable OpVariable OpVariable OpVariable +OpVariable +OpAccessChain +OpCopyMemory OpAccessChain OpLoad OpAccessChain @@ -262,11 +268,65 @@ OpAccessChain OpLoad OpFMul OpFMul +OpStore +OpLoad +OpLoad +OpLoad +OpLoad +OpCompositeConstruct OpAccessChain OpStore OpLoad +OpCompositeExtract +OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +// Author "Sir Lynix"// Description: "Main file" + +// Author "Lynix"// Description: "Simple \"module\" for testing" + +// Module SimpleModule + +struct _SimpleModule_Data +{ + value: f32 +} + +struct _SimpleModule_Block +{ + data: _SimpleModule_Data +} + +fn _SimpleModule_GetDataValue(_SimpleModule_data: _SimpleModule_Data) -> f32 +{ + return _SimpleModule_data.value; +} + +struct _SimpleModule_InputData +{ + @location(0) value: f32 +} + +struct _SimpleModule_OutputData +{ + @location(0) value: vec4 +} + +@group(0) @binding(0) var ExtData_block: _SimpleModule_Block; + +@fragment +fn main(input: _SimpleModule_InputData) -> _SimpleModule_OutputData +{ + var data: _SimpleModule_Data; + data.value = ExtData_block.data.value; + var value: f32 = ((_SimpleModule_GetDataValue(data)) * input.value) * (3.141592); + var output: _SimpleModule_OutputData; + output.value = vec4(value, value, value, value); + return output; +} +)"); } WHEN("Importing nested modules") @@ -308,13 +368,13 @@ module Modules.InputOutput; [export] struct InputData { - value: f32 + [location(0)] value: f32 } [export] struct OutputData { - value: f32 + [location(0)] value: vec4[f32] } [export] @@ -340,8 +400,9 @@ external [entry(frag)] fn main(input: Input) -> OutputData { + let value = block.data.value * input.value; let output: OutputDataAlias; - output.value = block.data.value * input.value; + output.value = vec4[f32](value, value, value, value); return output; } )"; @@ -382,7 +443,7 @@ struct InputData_Modules_InputOutput struct OutputData_Modules_InputOutput { - float value; + vec4 value; }; // Main module @@ -393,18 +454,19 @@ layout(std140) uniform _nzslBindingblock } block; /**************** Inputs ****************/ -in float _nzslInvalue; +in float _nzslVarying0; // _nzslInvalue /*************** Outputs ***************/ -out float _nzslOutvalue; +layout(location = 0) out vec4 _nzslOutvalue; void main() { InputData_Modules_InputOutput input_; - input_.value = _nzslInvalue; + input_.value = _nzslVarying0; + float value = block.data.value * input_.value; OutputData_Modules_InputOutput output_; - output_.value = block.data.value * input_.value; + output_.value = vec4(value, value, value, value); _nzslOutvalue = output_.value; return; @@ -442,12 +504,12 @@ module _Modules_InputOutput { struct InputData { - value: f32 + [location(0)] value: f32 } struct OutputData { - value: f32 + [location(0)] value: vec4[f32] } } @@ -467,8 +529,9 @@ external [entry(frag)] fn main(input: Input) -> OutputData { + let value: f32 = block.data.value * input.value; let output: OutputDataAlias; - output.value = block.data.value * input.value; + output.value = vec4[f32](value, value, value, value); return output; } )"); @@ -478,16 +541,63 @@ OpFunction OpLabel OpVariable OpVariable +OpVariable +OpAccessChain +OpCopyMemory OpAccessChain OpLoad OpAccessChain OpLoad OpFMul +OpStore +OpLoad +OpLoad +OpLoad +OpLoad +OpCompositeConstruct OpAccessChain OpStore OpLoad +OpCompositeExtract +OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +// Module Modules.Data + +struct _Modules_Data_Data +{ + value: f32 +} +// Module Modules.Block + +struct _Modules_Block_Block +{ + data: _Modules_Data_Data +} +// Module Modules.InputOutput +struct _Modules_InputOutput_InputData +{ + @location(0) value: f32 +} + +struct _Modules_InputOutput_OutputData +{ + @location(0) value: vec4 +} + +@group(0) @binding(0) var block: _Modules_Block_Block; + +@fragment +fn main(input: _Modules_InputOutput_InputData) -> _Modules_InputOutput_OutputData +{ + var value: f32 = block.data.value * input.value; + var output: _Modules_InputOutput_OutputData; + output.value = vec4(value, value, value, value); + return output; +} +)"); } WHEN("Testing AST variable indices remapping") @@ -832,6 +942,67 @@ OpFunctionCall OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +// Module Modules.Data + +struct _Modules_Data_Light +{ + color: vec4, + intensities: vec2 +} + +struct _Modules_Data_Lights +{ + lights: array<_Modules_Data_Light, 3> +} +// Module Modules.Func + +fn _Modules_Func_SumLightColor(_Modules_Func_lightData: _Modules_Data_Lights) -> vec4 +{ + var color: vec4 = vec4(0.0, 0.0, 0.0, 0.0); + { + var index: u32 = 0u; + var _nzsl_to: u32 = 3; + while (_Modules_Func_index < _Modules_Func__nzsl_to) + { + _Modules_Func_color += _Modules_Func_lightData.lights[_Modules_Func_index].color; + _Modules_Func_index += 1u; + } + + } + + return _Modules_Func_color; +} + +fn _Modules_Func_SumLightIntensities(_Modules_Func_lightData: _Modules_Data_Lights) -> vec2 +{ + var intensities: vec2 = vec2(0, 0); + { + var _nzsl_counter: u32 = 0u; + while (_Modules_Func__nzsl_counter < (3u)) + { + var light: _Modules_Data_Light = _Modules_Func_lightData.lights[_Modules_Func__nzsl_counter]; + _Modules_Func_intensities += _Modules_Func_light.intensities; + _Modules_Func__nzsl_counter += 1u; + } + + } + + return _Modules_Func_intensities; +} + +@group(0) @binding(0) var lightData: _Modules_Data_Lights; + +@fragment +fn main() +{ + var data: _Modules_Data_Lights; + data.lights = lightData.lights; + var color: vec4 = _Modules_Func_SumLightColor(data); + var intensities: vec2 = _Modules_Func_SumLightIntensities(data); +} +)"); } WHEN("Testing forward vs deferred based on option") From 7e83fe62fbe6ceafefbca3f5b8249ef9d4465364 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 15 Sep 2025 00:37:55 +0200 Subject: [PATCH 15/37] adding swizzle assignment removal transformer --- .../Transformations/SwizzleTransformer.hpp | 7 + include/NZSL/WgslWriter.hpp | 2 +- .../Transformations/SwizzleTransformer.cpp | 163 ++++++++++++++++ src/NZSL/WgslWriter.cpp | 144 ++++---------- tests/src/Tests/ArithmeticTests.cpp | 33 +++- tests/src/Tests/FilesystemResolverTests.cpp | 4 +- tests/src/Tests/ModuleTests.cpp | 182 ++++++++++++++---- tests/src/Tests/SwizzleTests.cpp | 60 ++++++ 8 files changed, 443 insertions(+), 152 deletions(-) diff --git a/include/NZSL/Ast/Transformations/SwizzleTransformer.hpp b/include/NZSL/Ast/Transformations/SwizzleTransformer.hpp index 201a7006..d73bc2d4 100644 --- a/include/NZSL/Ast/Transformations/SwizzleTransformer.hpp +++ b/include/NZSL/Ast/Transformations/SwizzleTransformer.hpp @@ -24,14 +24,21 @@ namespace nzsl::Ast struct Options { bool removeScalarSwizzling = false; + bool removeSwizzleAssigment = false; }; private: using Transformer::Transform; ExpressionTransformation Transform(SwizzleExpression&& swizzle) override; + ExpressionTransformation Transform(AssignExpression&& assign) override; + void PushAssignment(AssignExpression* assign) noexcept; + void PopAssignment() noexcept; + + std::vector m_assignmentStack; const Options* m_options; + bool m_inAssignmentLhs = false; }; } diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index 85a56d89..c5858a67 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -125,7 +125,7 @@ namespace nzsl void AppendConstantHelpers(Ast::PrimitiveType type, Ast::TypeConstant constant); //void AppendInverseMatHelpers(Ast::MatrixType type); void AppendHeader(const Ast::Module::Metadata& metadata); - template void AppendIdentifier(const T& map, std::size_t id); + template void AppendIdentifier(const T& map, std::size_t id, bool append_module_prefix = false); void AppendLine(std::string_view txt = {}); template void AppendLine(Args&&... params); void AppendModuleAttributes(const Ast::Module::Metadata& metadata); diff --git a/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp b/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp index b042a2fd..ab17ed2b 100644 --- a/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp +++ b/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp @@ -2,12 +2,26 @@ // This file is part of the "Nazara Shading Language" project // For conditions of distribution and use, see copyright notice in Config.hpp +#include "NZSL/Ast/Enums.hpp" +#include "NZSL/Ast/Nodes.hpp" #include #include #include namespace nzsl::Ast { + void SwizzleTransformer::PushAssignment(AssignExpression* assign) noexcept + { + m_assignmentStack.push_back(assign); + m_inAssignmentLhs = true; + } + + void SwizzleTransformer::PopAssignment() noexcept + { + m_inAssignmentLhs = false; + m_assignmentStack.pop_back(); + } + bool SwizzleTransformer::Transform(Module& module, TransformerContext& context, const Options& options, std::string* error) { m_options = &options; @@ -55,6 +69,155 @@ namespace nzsl::Ast return ReplaceExpression{ std::move(cast) }; } + if (m_options->removeSwizzleAssigment && m_inAssignmentLhs) + { + if (!IsVectorType(*exprType)) + return VisitChildren{}; + + AssignExpression* assign = m_assignmentStack.empty() ? nullptr : m_assignmentStack.back(); + if (!assign || !assign->right) + return VisitChildren{}; + + // Flatten swizzle chain + std::array flatComponents{}; + std::size_t flatCount = swizzle.componentCount; + for (std::size_t i = 0; i < flatCount; ++i) + flatComponents[i] = swizzle.components[i]; + + ExpressionPtr baseExpr = std::move(swizzle.expression); // Take ownership as we'll replace the LHS anyway + while (baseExpr->GetType() == Ast::NodeType::SwizzleExpression) + { + SwizzleExpression* innerSwz = static_cast(baseExpr.get()); + std::array nextComponents{}; + for (std::size_t i = 0; i < flatCount; ++i) + nextComponents[i] = innerSwz->components[flatComponents[i]]; + flatComponents = nextComponents; + // Step deeper + baseExpr = std::move(innerSwz->expression); + } + + const ExpressionType* baseVecEt = GetResolvedExpressionType(*baseExpr); + if (!baseVecEt || !std::holds_alternative(*baseVecEt)) + return VisitChildren{}; + + const VectorType& vecType = std::get(*baseVecEt); + const std::size_t vecSize = vecType.componentCount; + const PrimitiveType baseType = vecType.type; + + // Cache LHS base vector and RHS (reused several times) + ExpressionPtr baseVec = CacheExpression(std::move(baseExpr)); + ExpressionPtr rhs = CacheExpression(std::move(assign->right)); + + // Constructor of full vector: vecN[T](...) + auto ctor = std::make_unique(); + ctor->sourceLocation = swizzle.sourceLocation; + ctor->targetType = ExpressionType{ VectorType{ vecSize, baseType } }; + ctor->cachedExpressionType = ExpressionType{ VectorType{ vecSize, baseType } }; + ctor->expressions.reserve(vecSize); + + // Map destination index to optional RHS component index + auto mapDstToRhsIndex = [&](std::size_t dst) -> std::optional + { + for (std::size_t k = 0; k < flatCount; ++k) + { + if (flatComponents[k] == dst) + return k; + } + return std::nullopt; + }; + + // Small helper to read one component from RHS + auto makeRhsComponentExpr = [&](std::size_t rhsCompIndex) -> ExpressionPtr + { + if (flatCount == 1) + return Clone(*rhs); // Scalar write + auto rhsSwz = std::make_unique(); + rhsSwz->sourceLocation = swizzle.sourceLocation; + rhsSwz->expression = Clone(*rhs); + rhsSwz->componentCount = 1; + rhsSwz->components[0] = static_cast(rhsCompIndex); + rhsSwz->cachedExpressionType = ExpressionType{ baseType }; + return rhsSwz; + }; + + // If written components form a contiguous in-order suffix, + // emit "... , rhs" directly (gives vec4[f32](vec.x, rhs) for yzw) + auto isContiguousSuffix = [&]() -> std::optional + { + // Find first written index + std::size_t min_written = vecSize; + for (std::size_t k = 0; k < flatCount; ++k) + min_written = std::min(min_written, flatComponents[k]); + if (min_written + flatCount != vecSize) + return std::nullopt; // Not a suffix length + // Check order: {min,...,vec_size-1} + for (std::size_t k = 0; k < flatCount; ++k) + { + if (flatComponents[k] != min_written + k) + return std::nullopt; + } + return min_written; // Suffix starts here + }; + + if (auto suffixStart = isContiguousSuffix()) + { + // Keep prefix from baseVec + for (std::size_t dst = 0; dst < *suffixStart; ++dst) + { + auto keepSwz = std::make_unique(); + keepSwz->sourceLocation = swizzle.sourceLocation; + keepSwz->expression = Clone(*baseVec); + keepSwz->componentCount = 1; + keepSwz->components[0] = static_cast(dst); + keepSwz->cachedExpressionType = ExpressionType{ baseType }; + ctor->expressions.push_back(std::move(keepSwz)); + HandleExpression(ctor->expressions.back()); + } + + // Append rhs as a single argument + ctor->expressions.push_back(Clone(*rhs)); + HandleExpression(ctor->expressions.back()); + } + else + { + // General case: per-component merge + for (std::size_t dst = 0; dst < vecSize; ++dst) + { + if (auto rhsComp = mapDstToRhsIndex(dst)) + { + ExpressionPtr from_rhs = makeRhsComponentExpr(*rhsComp); + HandleExpression(from_rhs); + ctor->expressions.push_back(std::move(from_rhs)); + } + else + { + auto keep_swz = std::make_unique(); + keep_swz->sourceLocation = swizzle.sourceLocation; + keep_swz->expression = Clone(*baseVec); + keep_swz->componentCount = 1; + keep_swz->components[0] = static_cast(dst); + keep_swz->cachedExpressionType = ExpressionType{ baseType }; + ctor->expressions.push_back(std::move(keep_swz)); + HandleExpression(ctor->expressions.back()); + } + } + } + + // vec.xyz = rhs; ==> vec = vecN[T](merged...) + assign->left = std::move(baseVec); + assign->right = std::move(ctor); + } + + return VisitChildren{}; + } + + auto SwizzleTransformer::Transform(AssignExpression&& assign) -> ExpressionTransformation + { + PushAssignment(&assign); + HandleExpression(assign.left); + PopAssignment(); + + HandleExpression(assign.right); return VisitChildren{}; } } diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index b219bf7c..4acc2f99 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -570,6 +571,12 @@ namespace nzsl executor.AddPass([](Ast::SwizzleTransformer::Options& opt) { opt.removeScalarSwizzling = true; + opt.removeSwizzleAssigment = true; + }); + executor.AddPass([](Ast::MatrixTransformer::Options& opt) + { + opt.removeMatrixBinaryAddSub = true; + opt.removeMatrixCast = true; }); executor.AddPass(); executor.AddPass([](Ast::ConstantRemovalTransformer::Options& opt) @@ -580,9 +587,9 @@ namespace nzsl executor.AddPass(secondIdentifierPassOptions); } - void WgslWriter::Append(const Ast::AliasType& type) + void WgslWriter::Append(const Ast::AliasType& /*type*/) { - AppendIdentifier(m_currentState->aliases, type.aliasIndex); + throw std::runtime_error("unexpected AliasType"); } void WgslWriter::Append(const Ast::ArrayType& type) @@ -654,9 +661,9 @@ namespace nzsl throw std::runtime_error("unexpected method type"); } - void WgslWriter::Append(const Ast::ModuleType& moduleType) + void WgslWriter::Append(const Ast::ModuleType& /*moduleType*/) { - AppendIdentifier(m_currentState->modules, moduleType.moduleIndex); + throw std::runtime_error("unexpected module type"); } void WgslWriter::Append(const Ast::NamedExternalBlockType& namedExternalBlockType) @@ -747,7 +754,7 @@ namespace nzsl void WgslWriter::Append(const Ast::StructType& structType) { - AppendIdentifier(m_currentState->structs, structType.structIndex); + AppendIdentifier(m_currentState->structs, structType.structIndex, true); } void WgslWriter::Append(const Ast::TextureType& textureType) @@ -1338,15 +1345,12 @@ namespace nzsl } template - void WgslWriter::AppendIdentifier(const T& map, std::size_t id) + void WgslWriter::AppendIdentifier(const T& map, std::size_t id, bool append_module_prefix) { const auto& identifier = Nz::Retrieve(map, id); - if (identifier.moduleIndex != 0) + if (append_module_prefix && identifier.moduleIndex != 0) Append(m_currentState->moduleNames[identifier.moduleIndex - 1], '_'); - if (identifier.externalBlockIndex && identifier.externalBlockIndex != m_currentState->currentExternalBlockIndex) - Append(m_currentState->externalBlockNames[*identifier.externalBlockIndex], '_'); - Append(identifier.name); } @@ -1574,9 +1578,9 @@ namespace nzsl Append("]"); } - void WgslWriter::Visit(Ast::AliasValueExpression& node) + void WgslWriter::Visit(Ast::AliasValueExpression& /*node*/) { - AppendIdentifier(m_currentState->aliases, node.aliasId); + throw std::runtime_error("unexpected alias value, is shader sanitized?"); } void WgslWriter::Visit(Ast::AssignExpression& node) @@ -1674,68 +1678,25 @@ namespace nzsl Append(node.targetType); Append("("); - if (node.expressions.size() > 1 || !node.targetType.IsResultingValue()) + bool first = true; + for (const auto& exprPtr : node.expressions) { - bool first = true; - for (const auto& exprPtr : node.expressions) - { - if (!first) - Append(", "); - - first = false; + if (!first) + Append(", "); - exprPtr->Visit(*this); - } - } - else - { - /** - * In WGSL, code like this is invalid: - * `var m: mat3x3 = mat3x3(1.0);` - * - * Instead we fill the declaration with the number of components: - * `var m: mat3x3 = mat3x3(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0);` - */ - std::size_t nbParams; - std::visit(Nz::Overloaded - { - [&](const Ast::VectorType& vec) - { - nbParams = vec.componentCount; - }, - [&](const Ast::MatrixType& mat) - { - nbParams = mat.columnCount * mat.rowCount; - }, - [&](const Ast::PrimitiveType&) - { - nbParams = 1; - }, - [&](const auto&) { throw std::runtime_error("unexpected Type?"); }, - }, node.targetType.GetResultingValue()); + first = false; - for (std::size_t i = 0; i < nbParams; i++) - { - if (i != 0) - Append(", "); - node.expressions.at(0)->Visit(*this); - } + exprPtr->Visit(*this); } Append(")"); } - void WgslWriter::Visit(Ast::ConditionalExpression& node) + void WgslWriter::Visit(Ast::ConditionalExpression& /*node*/) { - Append("const_select("); - node.condition->Visit(*this); - Append(", "); - node.truePath->Visit(*this); - Append(", "); - node.falsePath->Visit(*this); - Append(")"); + throw std::runtime_error("unexpected conditional expression, is shader sanitized?"); } - + void WgslWriter::Visit(Ast::ConstantArrayValueExpression& node) { Append(*node.cachedExpressionType); @@ -1771,7 +1732,6 @@ namespace nzsl }, node.value); } - void WgslWriter::Visit(Ast::ConstantExpression& node) { AppendIdentifier(m_currentState->constants, node.constantId); @@ -1779,7 +1739,7 @@ namespace nzsl void WgslWriter::Visit(Ast::FunctionExpression& node) { - AppendIdentifier(m_currentState->functions, node.funcId); + AppendIdentifier(m_currentState->functions, node.funcId, true); } void WgslWriter::Visit(Ast::IdentifierExpression& node) @@ -1986,7 +1946,7 @@ namespace nzsl void WgslWriter::Visit(Ast::StructTypeExpression& node) { - AppendIdentifier(m_currentState->structs, node.structTypeId); + AppendIdentifier(m_currentState->structs, node.structTypeId, true); } void WgslWriter::Visit(Ast::SwizzleExpression& node) @@ -2074,23 +2034,10 @@ namespace nzsl Append("continue;"); } - void WgslWriter::Visit(Ast::DeclareAliasStatement& node) + void WgslWriter::Visit(Ast::DeclareAliasStatement& /*node*/) { - if (node.aliasIndex) - RegisterAlias(*node.aliasIndex, node.name); - - Append("alias ", node.name, " = "); - assert(node.expression); - node.expression->Visit(*this); - - // Special case, if that alias points to a module, use it instead to try to keep source code readable - if (node.expression->GetType() == Ast::NodeType::ModuleExpression) - { - auto& moduleExpr = Nz::SafeCast(*node.expression); - m_currentState->moduleNames[moduleExpr.moduleId] = node.name; - } - - AppendLine(";"); + // all aliases should have been handled by sanitizer + throw std::runtime_error("unexpected alias declaration, is shader sanitized?"); } void WgslWriter::Visit(Ast::DeclareConstStatement& node) @@ -2194,7 +2141,7 @@ namespace nzsl AppendLine(';'); if (externalVar.varIndex) - RegisterVariable(*externalVar.varIndex, externalVar.name); + RegisterVariable(*externalVar.varIndex, variableName); } m_currentState->currentExternalBlockIndex = {}; @@ -2231,12 +2178,7 @@ namespace nzsl else if (parameter.semantic == Ast::FunctionParameterSemantic::Out) Append("out "); - // Ugly but simple - if (identifier.moduleIndex != 0) - Append(m_currentState->moduleNames[identifier.moduleIndex - 1], '_', parameter.name); - else - Append(parameter.name); - Append(": ", parameter.type); + Append(parameter.name, ": ", parameter.type); if (parameter.varIndex) RegisterVariable(*parameter.varIndex, parameter.name); @@ -2327,26 +2269,10 @@ namespace nzsl Append(";"); } - void WgslWriter::Visit(Ast::ForStatement& node) + void WgslWriter::Visit(Ast::ForStatement& /*node*/) { - if (node.varIndex) - RegisterVariable(*node.varIndex, node.varName); - - AppendAttributes(true, UnrollAttribute{ node.unroll }); - Append("for ", node.varName, " in "); - node.fromExpr->Visit(*this); - Append(" -> "); - node.toExpr->Visit(*this); - - if (node.stepExpr) - { - Append(" : "); - node.stepExpr->Visit(*this); - } - - AppendLine(); - - ScopeVisit(*node.statement); + // For loops must have been converted to while loop in prepasses + throw std::runtime_error("unexpected for statement, is the shader sanitized?"); } void WgslWriter::Visit(Ast::ForEachStatement& node) diff --git a/tests/src/Tests/ArithmeticTests.cpp b/tests/src/Tests/ArithmeticTests.cpp index 43cb1037..3f0dcc60 100644 --- a/tests/src/Tests/ArithmeticTests.cpp +++ b/tests/src/Tests/ArithmeticTests.cpp @@ -812,10 +812,28 @@ fn main() @fragment fn main() { - var x: mat3x3 = mat3x3(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); - var y: mat3x3 = mat3x3(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0); - var r: mat3x3 = x + y; - var r_2: mat3x3 = x - y; + var _nzsl_matrix: mat3x3; + var _nzsl_cachedResult: f32 = 0.0; + _nzsl_matrix[0u] = vec3(_nzsl_cachedResult, 0.0, 0.0); + _nzsl_matrix[1u] = vec3(0.0, _nzsl_cachedResult, 0.0); + _nzsl_matrix[2u] = vec3(0.0, 0.0, _nzsl_cachedResult); + var x: mat3x3 = _nzsl_matrix; + var _nzsl_matrix_2: mat3x3; + var _nzsl_cachedResult_2: f32 = 1.0; + _nzsl_matrix_2[0u] = vec3(_nzsl_cachedResult_2, 0.0, 0.0); + _nzsl_matrix_2[1u] = vec3(0.0, _nzsl_cachedResult_2, 0.0); + _nzsl_matrix_2[2u] = vec3(0.0, 0.0, _nzsl_cachedResult_2); + var y: mat3x3 = _nzsl_matrix_2; + var _nzsl_matrix_3: mat3x3; + _nzsl_matrix_3[0u] = x[0u] + y[0u]; + _nzsl_matrix_3[1u] = x[1u] + y[1u]; + _nzsl_matrix_3[2u] = x[2u] + y[2u]; + var r: mat3x3 = _nzsl_matrix_3; + var _nzsl_matrix_4: mat3x3; + _nzsl_matrix_4[0u] = x[0u] - y[0u]; + _nzsl_matrix_4[1u] = x[1u] - y[1u]; + _nzsl_matrix_4[2u] = x[2u] - y[2u]; + var r_2: mat3x3 = _nzsl_matrix_4; var r_3: mat3x3 = x * y; x += y; x -= y; @@ -905,7 +923,12 @@ fn main() @fragment fn main() { - var mat: mat3x3 = mat3x3(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0); + var _nzsl_matrix: mat3x3; + var _nzsl_cachedResult: f32 = 1.0; + _nzsl_matrix[0u] = vec3(_nzsl_cachedResult, 0.0, 0.0); + _nzsl_matrix[1u] = vec3(0.0, _nzsl_cachedResult, 0.0); + _nzsl_matrix[2u] = vec3(0.0, 0.0, _nzsl_cachedResult); + var mat: mat3x3 = _nzsl_matrix; var val: f32 = 42.0; var r: mat3x3 = mat * val; var r_2: mat3x3 = val * mat; diff --git a/tests/src/Tests/FilesystemResolverTests.cpp b/tests/src/Tests/FilesystemResolverTests.cpp index 304e312f..d051e4ff 100644 --- a/tests/src/Tests/FilesystemResolverTests.cpp +++ b/tests/src/Tests/FilesystemResolverTests.cpp @@ -250,9 +250,9 @@ struct _DataStruct_Data } // Module OutputStruct -fn _OutputStruct_GetColorFromData(_OutputStruct_data: _DataStruct_Data) -> vec4 +fn _OutputStruct_GetColorFromData(data: _DataStruct_Data) -> vec4 { - return _OutputStruct_data.color * (vec4(0.5, 0.5, 0.5, 1.0)); + return data.color * (vec4(0.5, 0.5, 0.5, 1.0)); } struct _OutputStruct_Output diff --git a/tests/src/Tests/ModuleTests.cpp b/tests/src/Tests/ModuleTests.cpp index bff4be79..cbc67311 100644 --- a/tests/src/Tests/ModuleTests.cpp +++ b/tests/src/Tests/ModuleTests.cpp @@ -299,9 +299,9 @@ struct _SimpleModule_Block data: _SimpleModule_Data } -fn _SimpleModule_GetDataValue(_SimpleModule_data: _SimpleModule_Data) -> f32 +fn _SimpleModule_GetDataValue(data: _SimpleModule_Data) -> f32 { - return _SimpleModule_data.value; + return data.value; } struct _SimpleModule_InputData @@ -958,38 +958,38 @@ struct _Modules_Data_Lights } // Module Modules.Func -fn _Modules_Func_SumLightColor(_Modules_Func_lightData: _Modules_Data_Lights) -> vec4 +fn _Modules_Func_SumLightColor(lightData: _Modules_Data_Lights) -> vec4 { var color: vec4 = vec4(0.0, 0.0, 0.0, 0.0); { var index: u32 = 0u; var _nzsl_to: u32 = 3; - while (_Modules_Func_index < _Modules_Func__nzsl_to) + while (index < _nzsl_to) { - _Modules_Func_color += _Modules_Func_lightData.lights[_Modules_Func_index].color; - _Modules_Func_index += 1u; + color += lightData.lights[index].color; + index += 1u; } } - return _Modules_Func_color; + return color; } -fn _Modules_Func_SumLightIntensities(_Modules_Func_lightData: _Modules_Data_Lights) -> vec2 +fn _Modules_Func_SumLightIntensities(lightData: _Modules_Data_Lights) -> vec2 { var intensities: vec2 = vec2(0, 0); { var _nzsl_counter: u32 = 0u; - while (_Modules_Func__nzsl_counter < (3u)) + while (_nzsl_counter < (3u)) { - var light: _Modules_Data_Light = _Modules_Func_lightData.lights[_Modules_Func__nzsl_counter]; - _Modules_Func_intensities += _Modules_Func_light.intensities; - _Modules_Func__nzsl_counter += 1u; + var light: _Modules_Data_Light = lightData.lights[_nzsl_counter]; + intensities += light.intensities; + _nzsl_counter += 1u; } } - return _Modules_Func_intensities; + return intensities; } @group(0) @binding(0) var lightData: _Modules_Data_Lights; @@ -1327,13 +1327,13 @@ struct Unused {} [export] struct InputData { - value: f32 + [location(0)] value: f32 } [export] struct OutputData { - value: f32 + [location(0)] value: vec4[f32] } )"; @@ -1355,9 +1355,10 @@ external ExtData fn main(input: Module.InputData) -> Module.OutputData { let data = ExtData.block.data; + let value = Module.GetDataValue(data) * input.value * Module.Pi; let output: Module.OutputData; - output.value = Module.GetDataValue(data) * input.value * Module.Pi; + output.value = vec4[f32](value, value, value, value); return output; } )"; @@ -1400,7 +1401,7 @@ struct InputData_Simple_Module struct OutputData_Simple_Module { - float value; + vec4 value; }; // Main module @@ -1414,20 +1415,21 @@ layout(std140) uniform _nzslBindingExtData_block } ExtData_block; /**************** Inputs ****************/ -in float _nzslInvalue; +in float _nzslVarying0; // _nzslInvalue /*************** Outputs ***************/ -out float _nzslOutvalue; +layout(location = 0) out vec4 _nzslOutvalue; void main() { InputData_Simple_Module input_; - input_.value = _nzslInvalue; + input_.value = _nzslVarying0; Data_Simple_Module data; data.value = ExtData_block.data.value; + float value = ((GetDataValue_Simple_Module(data)) * input_.value) * (3.141592); OutputData_Simple_Module output_; - output_.value = ((GetDataValue_Simple_Module(data)) * input_.value) * (3.141592); + output_.value = vec4(value, value, value, value); _nzslOutvalue = output_.value; return; @@ -1466,12 +1468,12 @@ module _Simple_Module struct InputData { - value: f32 + [location(0)] value: f32 } struct OutputData { - value: f32 + [location(0)] value: vec4[f32] } } @@ -1486,8 +1488,9 @@ external ExtData fn main(input: Module.InputData) -> Module.OutputData { let data: Module.Data = ExtData.block.data; + let value: f32 = ((Module.GetDataValue(data)) * input.value) * Module.Pi; let output: Module.OutputData; - output.value = ((Module.GetDataValue(data)) * input.value) * Module.Pi; + output.value = vec4[f32](value, value, value, value); return output; } )"); @@ -1506,6 +1509,9 @@ OpVariable OpVariable OpVariable OpVariable +OpVariable +OpAccessChain +OpCopyMemory OpAccessChain OpLoad OpAccessChain @@ -1517,11 +1523,61 @@ OpAccessChain OpLoad OpFMul OpFMul +OpStore +OpLoad +OpLoad +OpLoad +OpLoad +OpCompositeConstruct OpAccessChain OpStore OpLoad +OpCompositeExtract +OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +// Module Simple.Module + +struct _Simple_Module_Data +{ + value: f32 +} + +struct _Simple_Module_Block +{ + data: _Simple_Module_Data +} + +fn _Simple_Module_GetDataValue(data: _Simple_Module_Data) -> f32 +{ + return data.value; +} + +struct _Simple_Module_InputData +{ + @location(0) value: f32 +} + +struct _Simple_Module_OutputData +{ + @location(0) value: vec4 +} + +@group(0) @binding(0) var ExtData_block: _Simple_Module_Block; + +@fragment +fn main(input: _Simple_Module_InputData) -> _Simple_Module_OutputData +{ + var data: _Simple_Module_Data; + data.value = ExtData_block.data.value; + var value: f32 = ((_Simple_Module_GetDataValue(data)) * input.value) * (3.141592); + var output: _Simple_Module_OutputData; + output.value = vec4(value, value, value, value); + return output; +} +)"); } WHEN("Importing a simple module by name with renaming") @@ -1560,13 +1616,13 @@ struct Unused {} [export] struct InputData { - value: f32 + [location(0)] value: f32 } [export] struct OutputData { - value: f32 + [location(0)] value: vec4[f32] } )"; @@ -1588,9 +1644,10 @@ external ExtData fn main(input: SimpleModule.InputData) -> SimpleModule.OutputData { let data = ExtData.block.data; + let value = SimpleModule.GetDataValue(data) * input.value * SimpleModule.Pi; let output: SimpleModule.OutputData; - output.value = SimpleModule.GetDataValue(data) * input.value * SimpleModule.Pi; + output.value = vec4[f32](value, value, value, value); return output; } )"; @@ -1633,7 +1690,7 @@ struct InputData_Simple_Module struct OutputData_Simple_Module { - float value; + vec4 value; }; // Main module @@ -1647,20 +1704,21 @@ layout(std140) uniform _nzslBindingExtData_block } ExtData_block; /**************** Inputs ****************/ -in float _nzslInvalue; +in float _nzslVarying0; // _nzslInvalue /*************** Outputs ***************/ -out float _nzslOutvalue; +layout(location = 0) out vec4 _nzslOutvalue; void main() { InputData_Simple_Module input_; - input_.value = _nzslInvalue; + input_.value = _nzslVarying0; Data_Simple_Module data; data.value = ExtData_block.data.value; + float value = ((GetDataValue_Simple_Module(data)) * input_.value) * (3.141592); OutputData_Simple_Module output_; - output_.value = ((GetDataValue_Simple_Module(data)) * input_.value) * (3.141592); + output_.value = vec4(value, value, value, value); _nzslOutvalue = output_.value; return; @@ -1699,12 +1757,12 @@ module _Simple_Module struct InputData { - value: f32 + [location(0)] value: f32 } struct OutputData { - value: f32 + [location(0)] value: vec4[f32] } } @@ -1719,8 +1777,9 @@ external ExtData fn main(input: SimpleModule.InputData) -> SimpleModule.OutputData { let data: SimpleModule.Data = ExtData.block.data; + let value: f32 = ((SimpleModule.GetDataValue(data)) * input.value) * SimpleModule.Pi; let output: SimpleModule.OutputData; - output.value = ((SimpleModule.GetDataValue(data)) * input.value) * SimpleModule.Pi; + output.value = vec4[f32](value, value, value, value); return output; } )"); @@ -1739,6 +1798,9 @@ OpVariable OpVariable OpVariable OpVariable +OpVariable +OpAccessChain +OpCopyMemory OpAccessChain OpLoad OpAccessChain @@ -1750,10 +1812,60 @@ OpAccessChain OpLoad OpFMul OpFMul +OpStore +OpLoad +OpLoad +OpLoad +OpLoad +OpCompositeConstruct OpAccessChain OpStore OpLoad +OpCompositeExtract +OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +// Module Simple.Module + +struct _Simple_Module_Data +{ + value: f32 +} + +struct _Simple_Module_Block +{ + data: _Simple_Module_Data +} + +fn _Simple_Module_GetDataValue(data: _Simple_Module_Data) -> f32 +{ + return data.value; +} + +struct _Simple_Module_InputData +{ + @location(0) value: f32 +} + +struct _Simple_Module_OutputData +{ + @location(0) value: vec4 +} + +@group(0) @binding(0) var ExtData_block: _Simple_Module_Block; + +@fragment +fn main(input: _Simple_Module_InputData) -> _Simple_Module_OutputData +{ + var data: _Simple_Module_Data; + data.value = ExtData_block.data.value; + var value: f32 = ((_Simple_Module_GetDataValue(data)) * input.value) * (3.141592); + var output: _Simple_Module_OutputData; + output.value = vec4(value, value, value, value); + return output; +} +)"); } } diff --git a/tests/src/Tests/SwizzleTests.cpp b/tests/src/Tests/SwizzleTests.cpp index b7a19996..35109b03 100644 --- a/tests/src/Tests/SwizzleTests.cpp +++ b/tests/src/Tests/SwizzleTests.cpp @@ -54,6 +54,15 @@ OpVectorShuffle OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var vec: vec4 = vec4(0.0, 1.0, 2.0, 3.0); + var value: vec3 = vec.xyz; +} +)"); } WHEN("writing") @@ -102,6 +111,16 @@ OpVectorShuffle OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var vec: vec4 = vec4(0.0, 0.0, 0.0, 0.0); + var _nzsl_cachedResult: vec3 = vec3(1.0, 2.0, 3.0); + vec = vec4(vec.x, _nzsl_cachedResult); +} +)"); } } @@ -152,6 +171,15 @@ OpCompositeConstruct OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var value: f32 = 42.0; + var vec: vec3 = vec3(value, value, value); +} +)"); } GIVEN("a function value") @@ -203,6 +231,17 @@ OpCompositeConstruct OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var _nzsl_cachedResult: f32 = max(2.0, 1.0); + var v: vec3 = vec3(_nzsl_cachedResult, _nzsl_cachedResult, _nzsl_cachedResult); + var _nzsl_cachedResult_2: f32 = min(2.0, 1.0); + var v2: vec3 = vec3(_nzsl_cachedResult_2, _nzsl_cachedResult_2, _nzsl_cachedResult_2); +} +)"); } } @@ -257,6 +296,15 @@ OpCompositeConstruct OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var vec: vec4 = vec4(0.0, 1.0, 2.0, 3.0); + var value: vec4 = vec4(vec.xyz.yz.y, vec.xyz.yz.y, vec.xyz.yz.y, vec.xyz.yz.y); +} +)"); } WHEN("writing") @@ -310,6 +358,18 @@ OpVectorShuffle OpStore OpReturn OpFunctionEnd)"); + + ExpectWGSL(*shaderModule, R"( +@fragment +fn main() +{ + var vec: vec4 = vec4(0.0, 1.0, 2.0, 3.0); + var _nzsl_cachedResult: f32 = 0.0; + vec = vec4(vec.x, vec.y, vec.z, _nzsl_cachedResult); + var _nzsl_cachedResult_2: vec2 = vec2(1.0, 0.0); + vec = vec4(vec.x, vec.y, _nzsl_cachedResult_2); +} +)"); } } } From b46a1f25b263e6fc265c8982b9276c8a875dc855 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 15 Sep 2025 08:24:59 +0200 Subject: [PATCH 16/37] fixing codestyle consistency --- .../Transformations/SwizzleTransformer.cpp | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp b/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp index ab17ed2b..0667bd8c 100644 --- a/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp +++ b/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp @@ -145,18 +145,18 @@ namespace nzsl::Ast auto isContiguousSuffix = [&]() -> std::optional { // Find first written index - std::size_t min_written = vecSize; + std::size_t minWritten = vecSize; for (std::size_t k = 0; k < flatCount; ++k) - min_written = std::min(min_written, flatComponents[k]); - if (min_written + flatCount != vecSize) + minWritten = std::min(minWritten, flatComponents[k]); + if (minWritten + flatCount != vecSize) return std::nullopt; // Not a suffix length // Check order: {min,...,vec_size-1} for (std::size_t k = 0; k < flatCount; ++k) { - if (flatComponents[k] != min_written + k) + if (flatComponents[k] != minWritten + k) return std::nullopt; } - return min_written; // Suffix starts here + return minWritten; // Suffix starts here }; if (auto suffixStart = isContiguousSuffix()) @@ -168,7 +168,7 @@ namespace nzsl::Ast keepSwz->sourceLocation = swizzle.sourceLocation; keepSwz->expression = Clone(*baseVec); keepSwz->componentCount = 1; - keepSwz->components[0] = static_cast(dst); + keepSwz->components[0] = static_cast(dst); keepSwz->cachedExpressionType = ExpressionType{ baseType }; ctor->expressions.push_back(std::move(keepSwz)); HandleExpression(ctor->expressions.back()); @@ -185,19 +185,19 @@ namespace nzsl::Ast { if (auto rhsComp = mapDstToRhsIndex(dst)) { - ExpressionPtr from_rhs = makeRhsComponentExpr(*rhsComp); - HandleExpression(from_rhs); - ctor->expressions.push_back(std::move(from_rhs)); + ExpressionPtr fromRhs = makeRhsComponentExpr(*rhsComp); + HandleExpression(fromRhs); + ctor->expressions.push_back(std::move(fromRhs)); } else { - auto keep_swz = std::make_unique(); - keep_swz->sourceLocation = swizzle.sourceLocation; - keep_swz->expression = Clone(*baseVec); - keep_swz->componentCount = 1; - keep_swz->components[0] = static_cast(dst); - keep_swz->cachedExpressionType = ExpressionType{ baseType }; - ctor->expressions.push_back(std::move(keep_swz)); + auto keepSwz = std::make_unique(); + keepSwz->sourceLocation = swizzle.sourceLocation; + keepSwz->expression = Clone(*baseVec); + keepSwz->componentCount = 1; + keepSwz->components[0] = static_cast(dst); + keepSwz->cachedExpressionType = ExpressionType{ baseType }; + ctor->expressions.push_back(std::move(keepSwz)); HandleExpression(ctor->expressions.back()); } } From 7a7499fb4a3a1ae884c7592da3f7578c295ac8cc Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 15 Sep 2025 09:54:15 +0200 Subject: [PATCH 17/37] documenting failing WGSL tests, fixing some --- tests/src/Tests/AccessMemberTests.cpp | 8 +++++- tests/src/Tests/BuiltinAttributeTests.cpp | 1 + tests/src/Tests/ComputeTests.cpp | 9 +++--- tests/src/Tests/ExternalTests.cpp | 6 ++-- tests/src/Tests/ImplicitTests.cpp | 26 +++++++++++++---- tests/src/Tests/IntrinsicTests.cpp | 35 +++++++++++++++++------ tests/src/Tests/LoopTests.cpp | 2 ++ 7 files changed, 65 insertions(+), 22 deletions(-) diff --git a/tests/src/Tests/AccessMemberTests.cpp b/tests/src/Tests/AccessMemberTests.cpp index da5eae17..c10c9204 100644 --- a/tests/src/Tests/AccessMemberTests.cpp +++ b/tests/src/Tests/AccessMemberTests.cpp @@ -4,6 +4,11 @@ #include #include +/** + * Here WGSL tests fail because vertex entrypoints need to return + * at least a builtin position attribute. + */ + TEST_CASE("structure member access", "[Shader]") { SECTION("Nested member loading") @@ -27,7 +32,6 @@ external [set(0), binding(0)] ubo: uniform[outerStruct] } )"; - nzsl::Ast::ModulePtr shaderModule = nzsl::Parse(nzslSource); ResolveModule(*shaderModule); @@ -68,6 +72,7 @@ OpStore OpReturn OpFunctionEnd)"); +// See top file comment #ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( @vertex @@ -115,6 +120,7 @@ OpStore OpReturn OpFunctionEnd)"); +// See top file comment #ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( @vertex diff --git a/tests/src/Tests/BuiltinAttributeTests.cpp b/tests/src/Tests/BuiltinAttributeTests.cpp index 2c26a829..3f56071e 100644 --- a/tests/src/Tests/BuiltinAttributeTests.cpp +++ b/tests/src/Tests/BuiltinAttributeTests.cpp @@ -247,6 +247,7 @@ fn main(input: Input) -> Output OpDecorate %21 Decoration(BuiltIn) BuiltIn(Position))", {}, spirvEnv, true); } +// Needs to emulate draw_index, base_instance and base_vertex #ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( struct Input diff --git a/tests/src/Tests/ComputeTests.cpp b/tests/src/Tests/ComputeTests.cpp index d1e47a37..0281924b 100644 --- a/tests/src/Tests/ComputeTests.cpp +++ b/tests/src/Tests/ComputeTests.cpp @@ -227,7 +227,6 @@ fn main(input: Input) OpReturn OpFunctionEnd)", {}, {}, true); -#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( struct Data { @@ -251,9 +250,9 @@ fn main(input: Input) return; } - var value: vec4 = textureLoad(input_tex, vec2(input.indices.xy, input.indices.xy)); - textureStore(output_tex, vec2(input.indices.xy, input.indices.xy), value); -})"); -#endif + var value: vec4 = textureLoad(input_tex, vec2(input.indices.xy)); + textureStore(output_tex, vec2(input.indices.xy), value); +} +)"); } } diff --git a/tests/src/Tests/ExternalTests.cpp b/tests/src/Tests/ExternalTests.cpp index d10dca13..40ec6b50 100644 --- a/tests/src/Tests/ExternalTests.cpp +++ b/tests/src/Tests/ExternalTests.cpp @@ -183,9 +183,10 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); +// Sampler missing ?? #ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( -@group(0) @binding(0) var; +@group(0) @binding(0) var tex: array, 5>; @fragment fn main() @@ -309,11 +310,12 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); +// Uniform buffer have and invalid memory layout #ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( struct Data { - values: array, + values: array, matrices: array, 3> } diff --git a/tests/src/Tests/ImplicitTests.cpp b/tests/src/Tests/ImplicitTests.cpp index cea5040c..c4c0f73c 100644 --- a/tests/src/Tests/ImplicitTests.cpp +++ b/tests/src/Tests/ImplicitTests.cpp @@ -439,7 +439,6 @@ fn foo() OpReturn OpFunctionEnd)", {}, {}, true); -#ifdef FAILING_WGSL nzsl::WgslWriter::Environment wgslEnv; wgslEnv.featuresCallback = [](std::string_view) { return true; }; @@ -449,12 +448,27 @@ fn foo() { var x: f32 = 1.0; var v: vec3 = vec3(-2.0, -1.0, 0.0); - var m1: mat4x4 = mat4x4(x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x); - var m2: mat3x3 = mat3x3(m1, m1, m1, m1, m1, m1, m1, m1, m1); - var m3: mat2x2 = mat2x2(x, x, x, x); - var m4: mat3x3 = mat3x3(v, vec3(1.0, 2.0, 3.0), vec3(4.0, 5.0, 6.0)); + var _nzsl_matrix: mat4x4; + _nzsl_matrix[0u] = vec4(x, 0.0, 0.0, 0.0); + _nzsl_matrix[1u] = vec4(0.0, x, 0.0, 0.0); + _nzsl_matrix[2u] = vec4(0.0, 0.0, x, 0.0); + _nzsl_matrix[3u] = vec4(0.0, 0.0, 0.0, x); + var m1: mat4x4 = _nzsl_matrix; + var _nzsl_matrix_2: mat3x3; + _nzsl_matrix_2[0u] = m1[0u].xyz; + _nzsl_matrix_2[1u] = m1[1u].xyz; + _nzsl_matrix_2[2u] = m1[2u].xyz; + var m2: mat3x3 = _nzsl_matrix_2; + var _nzsl_matrix_3: mat2x2; + _nzsl_matrix_3[0u] = vec2(x, x); + _nzsl_matrix_3[1u] = vec2(x, x); + var m3: mat2x2 = _nzsl_matrix_3; + var _nzsl_matrix_4: mat3x3; + _nzsl_matrix_4[0u] = v; + _nzsl_matrix_4[1u] = vec3(1.0, 2.0, 3.0); + _nzsl_matrix_4[2u] = vec3(4.0, 5.0, 6.0); + var m4: mat3x3 = _nzsl_matrix_4; } )", {}, wgslEnv); -#endif } } diff --git a/tests/src/Tests/IntrinsicTests.cpp b/tests/src/Tests/IntrinsicTests.cpp index 6dfee634..1a75c280 100644 --- a/tests/src/Tests/IntrinsicTests.cpp +++ b/tests/src/Tests/IntrinsicTests.cpp @@ -390,6 +390,7 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); +// See comment inside the test #ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( @group(0) @binding(0) var tex1D: texture_1d; @@ -1490,21 +1491,39 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); +// Needs to implement an inverse function in WGSL #ifdef FAILING_WGSL nzsl::WgslWriter::Environment wgslEnv; wgslEnv.featuresCallback = [](std::string_view) { return true; }; ExpectWGSL(*shaderModule, R"( +@fragment fn main() { - let m1: mat4[f32] = mat4[f32](0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0); - let m2: mat2x3[f32] = mat2x3[f32](0.0, 1.0, 2.0, 3.0, 4.0, 5.0); - let m3: mat3[f64] = mat3[f64](0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0); - let m4: mat3x2[f64] = mat3x2[f64](0.0, 1.0, 2.0, 3.0, 4.0, 5.0); - let inverseResult1: mat4[f32] = inverse(m1); - let inverseResult2: mat3[f64] = inverse(m3); - let transposeResult1: mat3x2[f32] = transpose(m2); - let transposeResult2: mat2x3[f64] = transpose(m4); + var _nzsl_matrix: mat4x4; + _nzsl_matrix[0u] = vec4(0.0, 1.0, 2.0, 3.0); + _nzsl_matrix[1u] = vec4(4.0, 5.0, 6.0, 7.0); + _nzsl_matrix[2u] = vec4(8.0, 9.0, 10.0, 11.0); + _nzsl_matrix[3u] = vec4(12.0, 13.0, 14.0, 15.0); + var m1: mat4x4 = _nzsl_matrix; + var _nzsl_matrix_2: mat2x3; + _nzsl_matrix_2[0u] = vec3(0.0, 1.0, 2.0); + _nzsl_matrix_2[1u] = vec3(3.0, 4.0, 5.0); + var m2: mat2x3 = _nzsl_matrix_2; + var _nzsl_matrix_3: mat3x3; + _nzsl_matrix_3[0u] = vec3(0.0, 1.0, 2.0); + _nzsl_matrix_3[1u] = vec3(3.0, 4.0, 5.0); + _nzsl_matrix_3[2u] = vec3(6.0, 7.0, 8.0); + var m3: mat3x3 = _nzsl_matrix_3; + var _nzsl_matrix_4: mat3x2; + _nzsl_matrix_4[0u] = vec2(0.0, 1.0); + _nzsl_matrix_4[1u] = vec2(2.0, 3.0); + _nzsl_matrix_4[2u] = vec2(4.0, 5.0); + var m4: mat3x2 = _nzsl_matrix_4; + var inverseResult1: mat4x4 = inverse(m1); + var inverseResult2: mat3x3 = inverse(m3); + var transposeResult1: mat3x2 = transpose(m2); + var transposeResult2: mat2x3 = transpose(m4); } )", {}, wgslEnv); #endif diff --git a/tests/src/Tests/LoopTests.cpp b/tests/src/Tests/LoopTests.cpp index 46b0d767..0bde7d1d 100644 --- a/tests/src/Tests/LoopTests.cpp +++ b/tests/src/Tests/LoopTests.cpp @@ -850,6 +850,7 @@ OpLabel OpReturn OpFunctionEnd)"); +// Uniform buffer have and invalid memory layout #ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( @fragment @@ -1008,6 +1009,7 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); +// Uniform buffer have and invalid memory layout #ifdef FAILING_WGSL ExpectWGSL(*shaderModule2, R"( @fragment From f0f9d1d45e87a1b0cc7c31eebf777d2c3e2cc1ef Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 15 Sep 2025 09:56:46 +0200 Subject: [PATCH 18/37] removing merge trashes from gitignore --- .gitignore | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.gitignore b/.gitignore index 844f0977..1b5effa3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -# Clangd -.cache/ - # XMake .xmake bin/* @@ -13,7 +10,6 @@ vsxmake* .idea/ cmake*/ CMakeLists.txt -<<<<<<< HEAD .luarc.json # vscode @@ -21,8 +17,6 @@ CMakeLists.txt # clangd .cache -======= ->>>>>>> 167b49d (base for wgsl writer) compile_commands.json # Prerequisites From b3ee2c1318b80816a01c69699b43ecd18e99b256 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 15 Sep 2025 10:27:46 +0200 Subject: [PATCH 19/37] fixing after-merge compilation issues --- include/NZSL/WgslWriter.hpp | 8 +--- src/NZSL/WgslWriter.cpp | 83 +++++++++++++++++++++---------------- 2 files changed, 48 insertions(+), 43 deletions(-) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index c5858a67..5b1c4e28 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -150,7 +150,7 @@ namespace nzsl void Visit(Ast::AccessFieldExpression& node) override; void Visit(Ast::AccessIdentifierExpression& node) override; void Visit(Ast::AccessIndexExpression& node) override; - void Visit(Ast::AliasValueExpression& node) override; + void Visit(Ast::IdentifierValueExpression& node) override; void Visit(Ast::AssignExpression& node) override; void Visit(Ast::BinaryExpression& node) override; void Visit(Ast::CallFunctionExpression& node) override; @@ -158,16 +158,10 @@ namespace nzsl void Visit(Ast::ConditionalExpression& node) override; void Visit(Ast::ConstantArrayValueExpression& node) override; void Visit(Ast::ConstantValueExpression& node) override; - void Visit(Ast::ConstantExpression& node) override; - void Visit(Ast::FunctionExpression& node) override; void Visit(Ast::IdentifierExpression& node) override; void Visit(Ast::IntrinsicExpression& node) override; - void Visit(Ast::ModuleExpression& node) override; - void Visit(Ast::NamedExternalBlockExpression& node) override; - void Visit(Ast::StructTypeExpression& node) override; void Visit(Ast::SwizzleExpression& node) override; void Visit(Ast::TypeConstantExpression& node) override; - void Visit(Ast::VariableValueExpression& node) override; void Visit(Ast::UnaryExpression& node) override; using StatementVisitorExcept::Visit; diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 4acc2f99..95fd2e5e 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -367,7 +367,6 @@ namespace nzsl executor.AddPass([&](Ast::ResolveTransformer::Options& opt) { opt.moduleResolver = parameters.shaderModuleResolver; - opt.removeAliases = true; }); } @@ -509,7 +508,7 @@ namespace nzsl // We can't do this at once at the end because transformations passes will introduce variables prefixed by _nzsl which is forbidden in user code Ast::IdentifierTransformer::Options firstIdentifierPassOptions; firstIdentifierPassOptions.makeVariableNameUnique = false; - firstIdentifierPassOptions.identifierSanitizer = [](std::string& identifier, Ast::IdentifierType /*scope*/) + firstIdentifierPassOptions.identifierSanitizer = [](std::string& identifier, Ast::IdentifierCategory /*scope*/) { using namespace std::string_view_literals; @@ -534,7 +533,7 @@ namespace nzsl Ast::IdentifierTransformer::Options secondIdentifierPassOptions; secondIdentifierPassOptions.makeVariableNameUnique = true; - secondIdentifierPassOptions.identifierSanitizer = [](std::string& identifier, Ast::IdentifierType /*scope*/) + secondIdentifierPassOptions.identifierSanitizer = [](std::string& identifier, Ast::IdentifierCategory /*scope*/) { using namespace std::string_view_literals; @@ -1509,7 +1508,7 @@ namespace nzsl void WgslWriter::Visit(Ast::ExpressionPtr& expr, bool encloseIfRequired) { - bool enclose = encloseIfRequired && (GetExpressionCategory(*expr) != Ast::ExpressionCategory::LValue); + bool enclose = encloseIfRequired && (GetExpressionCategory(*expr) != Ast::ExpressionCategory::Variable); if (enclose) Append("("); @@ -1578,9 +1577,51 @@ namespace nzsl Append("]"); } - void WgslWriter::Visit(Ast::AliasValueExpression& /*node*/) + void WgslWriter::Visit(Ast::IdentifierValueExpression& node) { - throw std::runtime_error("unexpected alias value, is shader sanitized?"); + switch (node.identifierType) + { + case Ast::IdentifierType::Alias: throw std::runtime_error("unexpected Alias identifier, shader is not properly resolved"); + case Ast::IdentifierType::Intrinsic: throw std::runtime_error("unexpected Intrinsic identifier, shader is not properly resolved"); + case Ast::IdentifierType::Type: throw std::runtime_error("unexpected Type identifier, shader is not properly resolved"); + case Ast::IdentifierType::Unresolved: throw std::runtime_error("unexpected Unresolved identifier, shader is not properly resolved"); + + case Ast::IdentifierType::ExternalBlock: + { + Append(m_currentState->externalBlockNames[node.identifierIndex]); + break; + } + + case Ast::IdentifierType::Module: + { + AppendIdentifier(m_currentState->modules, node.identifierIndex); + break; + } + + case Ast::IdentifierType::Struct: + { + AppendIdentifier(m_currentState->structs, node.identifierIndex, true); + break; + } + + case Ast::IdentifierType::Constant: + { + AppendIdentifier(m_currentState->constants, node.identifierIndex); + break; + } + + case Ast::IdentifierType::Function: + { + AppendIdentifier(m_currentState->functions, node.identifierIndex, true); + break; + } + + case Ast::IdentifierType::Variable: + { + AppendIdentifier(m_currentState->variables, node.identifierIndex); + break; + } + } } void WgslWriter::Visit(Ast::AssignExpression& node) @@ -1732,16 +1773,6 @@ namespace nzsl }, node.value); } - void WgslWriter::Visit(Ast::ConstantExpression& node) - { - AppendIdentifier(m_currentState->constants, node.constantId); - } - - void WgslWriter::Visit(Ast::FunctionExpression& node) - { - AppendIdentifier(m_currentState->functions, node.funcId, true); - } - void WgslWriter::Visit(Ast::IdentifierExpression& node) { Append(node.identifier); @@ -1934,21 +1965,6 @@ namespace nzsl Append(")"); } - void WgslWriter::Visit(Ast::ModuleExpression& node) - { - AppendIdentifier(m_currentState->modules, node.moduleId); - } - - void WgslWriter::Visit(Ast::NamedExternalBlockExpression& node) - { - Append(m_currentState->externalBlockNames[node.externalBlockId]); - } - - void WgslWriter::Visit(Ast::StructTypeExpression& node) - { - AppendIdentifier(m_currentState->structs, node.structTypeId, true); - } - void WgslWriter::Visit(Ast::SwizzleExpression& node) { Visit(node.expression, true); @@ -1959,11 +1975,6 @@ namespace nzsl Append(componentStr[node.components[i]]); } - void WgslWriter::Visit(Ast::VariableValueExpression& node) - { - AppendIdentifier(m_currentState->variables, node.variableId); - } - void WgslWriter::Visit(Ast::UnaryExpression& node) { switch (node.op) From da0e678406697ddb8c22a9609697252f8bcacf73 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 15 Sep 2025 13:33:39 +0200 Subject: [PATCH 20/37] fixing all unit tests --- src/NZSL/WgslWriter.cpp | 4 +++- tests/src/Tests/BranchTests.cpp | 12 ++++++------ tests/src/Tests/FilesystemResolverTests.cpp | 2 +- tests/src/Tests/LiteralTests.cpp | 2 +- tests/src/Tests/LoopTests.cpp | 12 ++++++------ tests/src/Tests/ModuleTests.cpp | 14 +++++++------- tests/src/Tests/SwizzleTests.cpp | 5 +++-- 7 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 95fd2e5e..158dd66c 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -583,6 +584,7 @@ namespace nzsl opt.removeConstArraySize = false; opt.removeTypeConstant = false; }); + executor.AddPass(); executor.AddPass(secondIdentifierPassOptions); } @@ -1508,7 +1510,7 @@ namespace nzsl void WgslWriter::Visit(Ast::ExpressionPtr& expr, bool encloseIfRequired) { - bool enclose = encloseIfRequired && (GetExpressionCategory(*expr) != Ast::ExpressionCategory::Variable); + bool enclose = encloseIfRequired && (GetExpressionCategory(*expr) == Ast::ExpressionCategory::Temporary); if (enclose) Append("("); diff --git a/tests/src/Tests/BranchTests.cpp b/tests/src/Tests/BranchTests.cpp index 3fa8e28f..00c297c7 100644 --- a/tests/src/Tests/BranchTests.cpp +++ b/tests/src/Tests/BranchTests.cpp @@ -93,7 +93,7 @@ OpFunctionEnd)"); fn main() { var value: f32; - if (data.value > (0.0)) + if (data.value > 0.0) { value = 1.0; } @@ -201,7 +201,7 @@ OpFunctionEnd)"); fn main() { var value: f32; - if ((data.value > (42.0)) || ((data.value <= (50.0)) && (data.value < (0.0)))) + if ((data.value > 42.0) || ((data.value <= 50.0) && (data.value < 0.0))) { value = 1.0; } @@ -308,7 +308,7 @@ OpFunctionEnd)"); @fragment fn main() -> Output { - if (data.value > (0.0)) + if (data.value > 0.0) { discard; } @@ -531,15 +531,15 @@ OpFunctionEnd)"); fn main() { var value: f32; - if (data.value >= (3.0)) + if (data.value >= 3.0) { value = 3.0; } - else if (data.value > (2.0)) + else if (data.value > 2.0) { value = 2.0; } - else if (data.value > (1.0)) + else if (data.value > 1.0) { value = 1.0; } diff --git a/tests/src/Tests/FilesystemResolverTests.cpp b/tests/src/Tests/FilesystemResolverTests.cpp index 1ae35459..eba19e9c 100644 --- a/tests/src/Tests/FilesystemResolverTests.cpp +++ b/tests/src/Tests/FilesystemResolverTests.cpp @@ -252,7 +252,7 @@ struct _DataStruct_Data fn _OutputStruct_GetColorFromData(data: _DataStruct_Data) -> vec4 { - return data.color * (vec4(0.5, 0.5, 0.5, 1.0)); + return data.color * vec4(0.5, 0.5, 0.5, 1.0); } struct _OutputStruct_Output diff --git a/tests/src/Tests/LiteralTests.cpp b/tests/src/Tests/LiteralTests.cpp index 2b701262..2ea0c51c 100644 --- a/tests/src/Tests/LiteralTests.cpp +++ b/tests/src/Tests/LiteralTests.cpp @@ -91,7 +91,7 @@ fn foo() fn foo() { var bar: f32 = -1.0; - var _nzsl_cachedResult: f32 = (1.0) + bar; + var _nzsl_cachedResult: f32 = 1.0 + bar; var bar_2: vec3 = vec3(_nzsl_cachedResult, _nzsl_cachedResult, _nzsl_cachedResult); var bar_3: vec3 = vec3(2.0, 2.0, 2.0); var bar_4: f32 = (max(1.0, 2.0)) + (min(2.0, 1.0)); diff --git a/tests/src/Tests/LoopTests.cpp b/tests/src/Tests/LoopTests.cpp index 2656e335..fc95eb1d 100644 --- a/tests/src/Tests/LoopTests.cpp +++ b/tests/src/Tests/LoopTests.cpp @@ -100,7 +100,7 @@ fn main() { var value: f32 = 0.0; var i: i32 = 0; - while (i < (10)) + while (i < 10) { value += 0.1; i += 1; @@ -260,16 +260,16 @@ fn main() var value: f32 = 0.0; var value2: f32 = 0.0; var i: i32 = 0; - while (i < (10)) + while (i < 10) { - if (i >= (8)) + if (i >= 8) { break; } value += 0.1; i += 1; - if (i == (4)) + if (i == 4) { continue; } @@ -628,13 +628,13 @@ fn main() var _nzsl_to: i32 = 10; while (v < _nzsl_to) { - if (v == (4)) + if (v == 4) { continue; } x += v; - if (v >= (8)) + if (v >= 8) { break; } diff --git a/tests/src/Tests/ModuleTests.cpp b/tests/src/Tests/ModuleTests.cpp index dbe1a618..e0a7f8b2 100644 --- a/tests/src/Tests/ModuleTests.cpp +++ b/tests/src/Tests/ModuleTests.cpp @@ -164,7 +164,7 @@ void main() Data_SimpleModule data; data.value = ExtData_block.data.value; - float value = ((GetDataValue_SimpleModule(data)) * input_.value) * (3.141592); + float value = ((GetDataValue_SimpleModule(data)) * input_.value) * 3.141592; OutputData_SimpleModule output_; output_.value = vec4(value, value, value, value); @@ -321,7 +321,7 @@ fn main(input: _SimpleModule_InputData) -> _SimpleModule_OutputData { var data: _SimpleModule_Data; data.value = ExtData_block.data.value; - var value: f32 = ((_SimpleModule_GetDataValue(data)) * input.value) * (3.141592); + var value: f32 = ((_SimpleModule_GetDataValue(data)) * input.value) * 3.141592; var output: _SimpleModule_OutputData; output.value = vec4(value, value, value, value); return output; @@ -980,7 +980,7 @@ fn _Modules_Func_SumLightIntensities(lightData: _Modules_Data_Lights) -> vec2 = vec2(0, 0); { var _nzsl_counter: u32 = 0u; - while (_nzsl_counter < (3u)) + while (_nzsl_counter < 3u) { var light: _Modules_Data_Light = lightData.lights[_nzsl_counter]; intensities += light.intensities; @@ -1427,7 +1427,7 @@ void main() Data_Simple_Module data; data.value = ExtData_block.data.value; - float value = ((GetDataValue_Simple_Module(data)) * input_.value) * (3.141592); + float value = ((GetDataValue_Simple_Module(data)) * input_.value) * 3.141592; OutputData_Simple_Module output_; output_.value = vec4(value, value, value, value); @@ -1572,7 +1572,7 @@ fn main(input: _Simple_Module_InputData) -> _Simple_Module_OutputData { var data: _Simple_Module_Data; data.value = ExtData_block.data.value; - var value: f32 = ((_Simple_Module_GetDataValue(data)) * input.value) * (3.141592); + var value: f32 = ((_Simple_Module_GetDataValue(data)) * input.value) * 3.141592; var output: _Simple_Module_OutputData; output.value = vec4(value, value, value, value); return output; @@ -1716,7 +1716,7 @@ void main() Data_Simple_Module data; data.value = ExtData_block.data.value; - float value = ((GetDataValue_Simple_Module(data)) * input_.value) * (3.141592); + float value = ((GetDataValue_Simple_Module(data)) * input_.value) * 3.141592; OutputData_Simple_Module output_; output_.value = vec4(value, value, value, value); @@ -1861,7 +1861,7 @@ fn main(input: _Simple_Module_InputData) -> _Simple_Module_OutputData { var data: _Simple_Module_Data; data.value = ExtData_block.data.value; - var value: f32 = ((_Simple_Module_GetDataValue(data)) * input.value) * (3.141592); + var value: f32 = ((_Simple_Module_GetDataValue(data)) * input.value) * 3.141592; var output: _Simple_Module_OutputData; output.value = vec4(value, value, value, value); return output; diff --git a/tests/src/Tests/SwizzleTests.cpp b/tests/src/Tests/SwizzleTests.cpp index 520b3cf2..896936d1 100644 --- a/tests/src/Tests/SwizzleTests.cpp +++ b/tests/src/Tests/SwizzleTests.cpp @@ -181,8 +181,9 @@ OpFunctionEnd)"); @fragment fn main() { - var value: f32 = 42.0; - var vec: vec3 = vec3(value, value, value); + var value: i32 = 42; + var vec: vec3 = vec3(value, value, value); + var vec_2: vec3 = vec3(47.0, 47.0, 47.0); } )"); } From 2e7a582f5cd7aa4c059905fdfe95cb6a1a3a0594 Mon Sep 17 00:00:00 2001 From: kbz_8 Date: Mon, 15 Sep 2025 14:56:04 +0200 Subject: [PATCH 21/37] removing unused nazara's xmake repo --- tests/xmake.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/xmake.lua b/tests/xmake.lua index cce47fbf..a015fc43 100644 --- a/tests/xmake.lua +++ b/tests/xmake.lua @@ -1,7 +1,5 @@ option("tests", { description = "Build unit tests", default = false }) -add_repositories("nazara-engine-repo https://github.com/NazaraEngine/xmake-repo") - if has_config("tests") then if has_config("asan") then add_defines("CATCH_CONFIG_NO_WINDOWS_SEH") From bc91adbe092e8c64797a1629797ca5d2dcb84686 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 16 Sep 2025 08:39:00 +0200 Subject: [PATCH 22/37] removing test example --- examples/wgsl/.gdb_history | 50 --------------- examples/wgsl/main.cpp | 12 ---- examples/wgsl/shader.nzsl | 64 ------------------- examples/wgsl/xmake.lua | 8 --- .../Transformations/SwizzleTransformer.cpp | 4 +- 5 files changed, 1 insertion(+), 137 deletions(-) delete mode 100644 examples/wgsl/.gdb_history delete mode 100644 examples/wgsl/main.cpp delete mode 100644 examples/wgsl/shader.nzsl delete mode 100644 examples/wgsl/xmake.lua diff --git a/examples/wgsl/.gdb_history b/examples/wgsl/.gdb_history deleted file mode 100644 index ac76c0aa..00000000 --- a/examples/wgsl/.gdb_history +++ /dev/null @@ -1,50 +0,0 @@ -b WgslWriter::Generate -run -n -s -n -s -q -run -n -s -s -s -s -s -s -s -s -s -s -n -s -n -s -n -s -s -n -s -n -sq -q -b WgslWriter::Append(const Ast::ExpressionValue& type) -b WgslWriter.cpp:290 -run -n -s -n -s -q -b WgslWriter.cpp:290 -run -n -n -s -n -n -s -s -s -q diff --git a/examples/wgsl/main.cpp b/examples/wgsl/main.cpp deleted file mode 100644 index 04e31a28..00000000 --- a/examples/wgsl/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include -#include - -int main() -{ - auto shader = nzsl::ParseFromFile("shader.nzsl"); - nzsl::WgslWriter wgslWriter; - auto wgslShader = wgslWriter.Generate(*shader); - std::cout << wgslShader.code << std::endl; - return 0; -} diff --git a/examples/wgsl/shader.nzsl b/examples/wgsl/shader.nzsl deleted file mode 100644 index 01c066bc..00000000 --- a/examples/wgsl/shader.nzsl +++ /dev/null @@ -1,64 +0,0 @@ -[nzsl_version("1.0")] -module; - -struct UBO -{ - screen_size: vec2[f32], - center: vec2[f32], - scale: f32, - iteration_count: i32 -} - -external -{ - [binding(0)] palette: sampler2D[f32], - [binding(1)] ubo: uniform[UBO], - [binding(2)] ssbo: storage[UBO, readonly], -} - -struct Input -{ - [builtin(frag_coord)] fragcoord: vec4[f32] -} - -struct Output -{ - [location(0)] color: vec4[f32] -} - -[entry(frag)] -fn main(input: Input) -> Output -{ - let coords = input.fragcoord.xy / ubo.screen_size; - - let c: vec2[f32]; - c.x = (ubo.screen_size.x / ubo.screen_size.y) * (coords.x - 0.5) * ubo.scale - ubo.center.x / ubo.screen_size.y; - c.y = (coords.y - 0.5) * ubo.scale - ubo.center.y / ubo.screen_size.y; - - let z = c; - let i = 0; - while (i < ubo.iteration_count) - { - let x = (z.x * z.x - z.y * z.y) + c.x; - let y = (z.y * z.x + z.x * z.y) + c.y; - - if ((x * x + y * y) > 4.0) - break; - - z.x = x; - z.y = y; - - i += 1; - } - - let u: f32; - if (i < ubo.iteration_count) - u = f32(i) / 100.0; - else - u = 0.0; - - let output: Output; - output.color = palette.Sample(vec2[f32](u, 0.0)); - - return output; -} diff --git a/examples/wgsl/xmake.lua b/examples/wgsl/xmake.lua deleted file mode 100644 index ff9a15ac..00000000 --- a/examples/wgsl/xmake.lua +++ /dev/null @@ -1,8 +0,0 @@ -target("wgsl-example") - set_group("Examples") - add_deps("nzsl") - set_rundir(".") - - add_files("main.cpp") - add_headerfiles("shader.nzsl", { install = false }) - add_installfiles("shader.nzsl", {prefixdir = "bin"}) diff --git a/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp b/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp index 0667bd8c..d50f91e3 100644 --- a/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp +++ b/src/NZSL/Ast/Transformations/SwizzleTransformer.cpp @@ -2,8 +2,6 @@ // This file is part of the "Nazara Shading Language" project // For conditions of distribution and use, see copyright notice in Config.hpp -#include "NZSL/Ast/Enums.hpp" -#include "NZSL/Ast/Nodes.hpp" #include #include #include @@ -97,7 +95,7 @@ namespace nzsl::Ast } const ExpressionType* baseVecEt = GetResolvedExpressionType(*baseExpr); - if (!baseVecEt || !std::holds_alternative(*baseVecEt)) + if (!baseVecEt || !IsVectorType(*baseVecEt)) return VisitChildren{}; const VectorType& vecType = std::get(*baseVecEt); From fbb63a46865f7b6408f22eaddb15bf33c4736e08 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 16 Sep 2025 08:46:26 +0200 Subject: [PATCH 23/37] adding debug logging to CI --- .github/workflows/build.yml | 2 +- TODO.md | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 TODO.md diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c1af5595..1bcedc12 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -164,7 +164,7 @@ jobs: # Setup compilation mode and install project dependencies - name: Configure xmake and install dependencies - run: xmake config --plat=${{ matrix.confs.plat }} --arch=${{ matrix.confs.arch }} --kind=${{ matrix.kind }} --mode=${{ matrix.confs.mode }} ${{ env.ADDITIONAL_CONF }} --ccache=n --yes + run: xmake config -vD --plat=${{ matrix.confs.plat }} --arch=${{ matrix.confs.arch }} --kind=${{ matrix.kind }} --mode=${{ matrix.confs.mode }} ${{ env.ADDITIONAL_CONF }} --ccache=n --yes # Save dependencies - name: Save cached xmake dependencies diff --git a/TODO.md b/TODO.md deleted file mode 100644 index db592d3e..00000000 --- a/TODO.md +++ /dev/null @@ -1,5 +0,0 @@ -# Sanitizer - -* Vertex shader should always contain `position` in their output -* Fragment shader inputs should always be related to vertex shader output (location or builtin) -* Array of textures [See this](https://github.com/gpuweb/gpuweb/issues/822) From bc397105a21d53c6a6f2108975a01ef3dc767e83 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 16 Sep 2025 09:25:12 +0200 Subject: [PATCH 24/37] adding missing tests (woops) --- src/NZSL/WgslWriter.cpp | 10 ++-- tests/src/Tests/FunctionsTests.cpp | 75 ++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 158dd66c..f1016c0d 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -2186,12 +2186,12 @@ namespace nzsl if (i != 0) Append(", "); - if (parameter.semantic == Ast::FunctionParameterSemantic::InOut) - Append("inout "); - else if (parameter.semantic == Ast::FunctionParameterSemantic::Out) - Append("out "); + Append(parameter.name, ": "); - Append(parameter.name, ": ", parameter.type); + if (parameter.semantic != Ast::FunctionParameterSemantic::In) + Append("ptr"); + else + Append(parameter.type); if (parameter.varIndex) RegisterVariable(*parameter.varIndex, parameter.name); diff --git a/tests/src/Tests/FunctionsTests.cpp b/tests/src/Tests/FunctionsTests.cpp index 9d5edfd0..e29889cc 100644 --- a/tests/src/Tests/FunctionsTests.cpp +++ b/tests/src/Tests/FunctionsTests.cpp @@ -398,6 +398,29 @@ fn main() -> FragOut OpStore %12 %50 OpReturn OpFunctionEnd)", {}, {}, true); + +// Should keep track of pointers in functions to add dereferencment and pass address to function calls +#ifdef FAILING_WGSL + ExpectWGSL(*shaderModule, R"( +fn Half(color: ptr>, value: ptr, inValue: f32, inValue2: f32) +{ + *color *= 2.0; + *value = 10.0; +} + +@fragment +fn main() -> FragOut +{ + var output: FragOut; + var mainColor: vec3 = vec3(1.0, 1.0, 1.0); + var inValue: f32 = 2.0; + var inValue2: f32 = 1.0; + Half(&mainColor, &output.value2, inValue, inValue2); + output.value = mainColor.x; + return output; +} +)"); +#endif } SECTION("passing sampler to function") @@ -525,6 +548,32 @@ fn main() -> FragOut OpStore %14 %33 OpReturn OpFunctionEnd)", {}, {}, true); + +// Should add sampler argument to function +#ifdef FAILING_WGSL + ExpectWGSL(*shaderModule, R"( +fn sample_center(tex: texture_2d) -> vec4 +{ + return textureSample(tex, texSampler, vec2(0.5, 0.5)); +} + +@group(0) @binding(0) var ExtData_texture: texture_2d; +@group(0) @binding(1) var ExtData_textureSampler: sampler; + +struct FragOut +{ + @location(0) value: vec4 +} + +@fragment +fn main() -> FragOut +{ + var output: FragOut; + output.value = sample_center(ExtData_texture); + return output; +} +)"); +#endif } SECTION("passing sampler array to function") @@ -658,5 +707,31 @@ fn main() -> FragOut OpStore %19 %39 OpReturn OpFunctionEnd)", {}, {}, true); + +// No sampler generated ? +// No sampler passed to function +#ifdef FAILING_WGSL + ExpectWGSL(*shaderModule, R"( +fn sample_center(tex: array, 3>, texSampler: Sampler) -> vec4 +{ + return textureSample(tex[1], texSampler, vec2(0.5, 0.5)); +} + +@group(0) @binding(0) var ExtData_texture: array, 3>; + +struct FragOut +{ + @location(0) value: vec4 +} + +@fragment +fn main() -> FragOut +{ + var output: FragOut; + output.value = sample_center(ExtData_texture); + return output; +} +)"); +#endif } } From 76ed51dfd1aad362ada7397f1d4d32a516f67b05 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 16 Sep 2025 13:20:48 +0200 Subject: [PATCH 25/37] adding inout implementation of WgslWriter --- include/NZSL/WgslWriter.hpp | 2 +- src/NZSL/WgslWriter.cpp | 10 ++++++++-- tests/src/Tests/FunctionsTests.cpp | 3 --- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index 5b1c4e28..0c4a8fdf 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -140,7 +140,7 @@ namespace nzsl void RegisterFunction(std::size_t funcIndex, std::string functionName); void RegisterModule(std::size_t moduleIndex, std::string moduleName); void RegisterStruct(std::size_t structIndex, const Ast::StructDescription& structDescription); - void RegisterVariable(std::size_t varIndex, std::string varName); + void RegisterVariable(std::size_t varIndex, std::string varName, bool isInout = false); void ScopeVisit(Ast::Statement& node); diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index f1016c0d..da8e06ae 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -325,6 +325,7 @@ namespace nzsl std::optional externalBlockIndex; std::size_t moduleIndex; std::string name; + bool isDereferenceable; }; struct StructData : Identifier @@ -1485,12 +1486,13 @@ namespace nzsl m_currentState->structs.emplace(structIndex, std::move(structData)); } - void WgslWriter::RegisterVariable(std::size_t varIndex, std::string varName) + void WgslWriter::RegisterVariable(std::size_t varIndex, std::string varName, bool isInout) { State::Identifier identifier; identifier.externalBlockIndex = m_currentState->currentExternalBlockIndex; identifier.moduleIndex = m_currentState->currentModuleIndex; identifier.name = std::move(varName); + identifier.isDereferenceable = isInout; assert(m_currentState->variables.find(varIndex) == m_currentState->variables.end()); m_currentState->variables.emplace(varIndex, std::move(identifier)); @@ -1620,6 +1622,8 @@ namespace nzsl case Ast::IdentifierType::Variable: { + if (m_currentState->variables[node.identifierIndex].isDereferenceable) + Append('*'); AppendIdentifier(m_currentState->variables, node.identifierIndex); break; } @@ -1711,6 +1715,8 @@ namespace nzsl { if (i != 0) Append(", "); + if (node.parameters[i].semantic != Ast::FunctionParameterSemantic::In) + Append('&'); node.parameters[i].expr->Visit(*this); } Append(")"); @@ -2194,7 +2200,7 @@ namespace nzsl Append(parameter.type); if (parameter.varIndex) - RegisterVariable(*parameter.varIndex, parameter.name); + RegisterVariable(*parameter.varIndex, parameter.name, parameter.semantic != Ast::FunctionParameterSemantic::In); } Append(')'); if (node.returnType.HasValue()) diff --git a/tests/src/Tests/FunctionsTests.cpp b/tests/src/Tests/FunctionsTests.cpp index e29889cc..ba1d2187 100644 --- a/tests/src/Tests/FunctionsTests.cpp +++ b/tests/src/Tests/FunctionsTests.cpp @@ -399,8 +399,6 @@ fn main() -> FragOut OpReturn OpFunctionEnd)", {}, {}, true); -// Should keep track of pointers in functions to add dereferencment and pass address to function calls -#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( fn Half(color: ptr>, value: ptr, inValue: f32, inValue2: f32) { @@ -420,7 +418,6 @@ fn main() -> FragOut return output; } )"); -#endif } SECTION("passing sampler to function") From c18c4950e350cdfc8f88ccbb48f87a5b3577a9e5 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 16 Sep 2025 14:01:50 +0200 Subject: [PATCH 26/37] adding SamplerType splitting in function calls and function parameters --- src/NZSL/WgslWriter.cpp | 13 ++++++++++++- tests/src/Tests/FunctionsTests.cpp | 7 ++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index da8e06ae..e870fb9d 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -505,7 +505,7 @@ namespace nzsl "continue", "continuing", "default", "diagnostic", "discard", "else", "enable", "false", "fn", "for", "if", "let", "loop", "override", "requires", "return", "struct", "switch", "true", "var", "while" }); - + // We need two identifiers passes, the first one to rename reserved/forbidden variable names and the second one to ensure all variables name are uniques (which isn't guaranteed by the transformation passes) // We can't do this at once at the end because transformations passes will introduce variables prefixed by _nzsl which is forbidden in user code Ast::IdentifierTransformer::Options firstIdentifierPassOptions; @@ -1718,6 +1718,13 @@ namespace nzsl if (node.parameters[i].semantic != Ast::FunctionParameterSemantic::In) Append('&'); node.parameters[i].expr->Visit(*this); + const auto& varType = *GetExpressionType(*node.parameters[i].expr); + if (IsSamplerType(varType)) + { + Append(", "); + node.parameters[i].expr->Visit(*this); + Append("Sampler"); + } } Append(")"); } @@ -2201,6 +2208,10 @@ namespace nzsl if (parameter.varIndex) RegisterVariable(*parameter.varIndex, parameter.name, parameter.semantic != Ast::FunctionParameterSemantic::In); + + // Should sampler be inout if texture is inout ? + if (parameter.type.IsResultingValue() && IsSamplerType(parameter.type.GetResultingValue())) + Append(", ", parameter.name, "Sampler: sampler"); } Append(')'); if (node.returnType.HasValue()) diff --git a/tests/src/Tests/FunctionsTests.cpp b/tests/src/Tests/FunctionsTests.cpp index ba1d2187..fe457a6a 100644 --- a/tests/src/Tests/FunctionsTests.cpp +++ b/tests/src/Tests/FunctionsTests.cpp @@ -546,10 +546,8 @@ fn main() -> FragOut OpReturn OpFunctionEnd)", {}, {}, true); -// Should add sampler argument to function -#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( -fn sample_center(tex: texture_2d) -> vec4 +fn sample_center(tex: texture_2d, texSampler: sampler) -> vec4 { return textureSample(tex, texSampler, vec2(0.5, 0.5)); } @@ -566,11 +564,10 @@ struct FragOut fn main() -> FragOut { var output: FragOut; - output.value = sample_center(ExtData_texture); + output.value = sample_center(ExtData_texture, ExtData_textureSampler); return output; } )"); -#endif } SECTION("passing sampler array to function") From 9d059de0a0ebdfdd69db2bbeaa5a5c078e27c144 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 16 Sep 2025 16:04:36 +0200 Subject: [PATCH 27/37] implementing missing tests, fixing binding array texture support, fixing sampler --- src/NZSL/WgslWriter.cpp | 91 ++++++++++--- tests/src/Tests/ExternalTests.cpp | 190 ++++++++++++++++++++++++++- tests/src/Tests/FunctionsTests.cpp | 28 +--- tests/src/Tests/InputOutputTests.cpp | 56 ++++++++ tests/src/Tests/IntrinsicTests.cpp | 6 +- tests/src/Tests/LoopTests.cpp | 4 +- 6 files changed, 329 insertions(+), 46 deletions(-) diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index e870fb9d..4b09a559 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -596,6 +596,8 @@ namespace nzsl void WgslWriter::Append(const Ast::ArrayType& type) { + if (IsSamplerType(type.containedType->type)) + Append("binding_"); if (type.length > 0) Append("array<", type.containedType->type, ", ", type.length, ">"); else @@ -604,6 +606,8 @@ namespace nzsl void WgslWriter::Append(const Ast::DynArrayType& type) { + if (IsSamplerType(type.containedType->type)) + Append("binding_"); Append("array<", type.containedType->type, ">"); } @@ -727,20 +731,20 @@ namespace nzsl switch (samplerType.sampledType) { case Ast::PrimitiveType::Boolean: - throw std::runtime_error("unexpected bool type for tture"); + throw std::runtime_error("unexpected bool type for sampled texture"); case Ast::PrimitiveType::Float64: - throw std::runtime_error("unexpected f64 type for teure"); + throw std::runtime_error("unexpected f64 type for sampled texture"); case Ast::PrimitiveType::Float32: type = ""; break; case Ast::PrimitiveType::Int32: type = ""; break; case Ast::PrimitiveType::UInt32: type = ""; break; case Ast::PrimitiveType::String: - throw std::runtime_error("unexpected string type forexture"); + throw std::runtime_error("unexpected string type for sampled texture"); case Ast::PrimitiveType::FloatLiteral: case Ast::PrimitiveType::IntLiteral: - throw std::runtime_error("unexpected litteral type for sampler"); + throw std::runtime_error("unexpected litteral type for sampled texture"); } Append("texture_"); if (samplerType.depth) @@ -1718,8 +1722,16 @@ namespace nzsl if (node.parameters[i].semantic != Ast::FunctionParameterSemantic::In) Append('&'); node.parameters[i].expr->Visit(*this); + const auto& varType = *GetExpressionType(*node.parameters[i].expr); - if (IsSamplerType(varType)) + Ast::ExpressionType rawOrContainedType; + if (IsArrayType(varType)) + rawOrContainedType = std::get(varType).containedType->type; + else if (IsDynArrayType(varType)) + rawOrContainedType = std::get(varType).containedType->type; + else + rawOrContainedType = varType; + if (IsSamplerType(rawOrContainedType)) { Append(", "); node.parameters[i].expr->Visit(*this); @@ -1945,24 +1957,42 @@ namespace nzsl break; case Ast::IntrinsicType::TextureSampleImplicitLod: + { firstParam = false; Append("textureSample("); node.parameters[0]->Visit(*this); Append(", "); - node.parameters[0]->Visit(*this); + + if (node.parameters[0]->GetType() == Ast::NodeType::AccessIndexExpression) + { + Ast::AccessIndexExpression* accessExpr = static_cast(node.parameters[0].get()); + accessExpr->expr->Visit(*this); + } + else + node.parameters[0]->Visit(*this); Append("Sampler, "); method = true; break; + } case Ast::IntrinsicType::TextureSampleImplicitLodDepthComp: + { firstParam = false; Append("textureSampleCompare("); node.parameters[0]->Visit(*this); Append(", "); - node.parameters[0]->Visit(*this); + + if (node.parameters[0]->GetType() == Ast::NodeType::AccessIndexExpression) + { + Ast::AccessIndexExpression* accessExpr = static_cast(node.parameters[0].get()); + accessExpr->expr->Visit(*this); + } + else + node.parameters[0]->Visit(*this); Append("Sampler, "); method = true; break; + } } if (firstParam) @@ -2155,13 +2185,26 @@ namespace nzsl variableName += externalVar.name; Append(variableName, ": ", exprType); - if (IsSamplerType(exprType)) + // Apply combined image sampler splitting { - // WGSL has not (yet?) combined image samplers so we need to split textures and samplers - AppendLine(';'); // Closing last line - AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding + 1 } }); - reservedBindings.emplace(bindingSet << 32 | binding + 1); - Append("var ", variableName, "Sampler: sampler"); + Ast::ExpressionType rawOrContainedType; + if (IsArrayType(exprType)) + rawOrContainedType = std::get(exprType).containedType->type; + else if (IsDynArrayType(exprType)) + rawOrContainedType = std::get(exprType).containedType->type; + else + rawOrContainedType = exprType; + + if (IsSamplerType(rawOrContainedType)) + { + // WGSL has not (yet?) combined image samplers so we need to split textures and samplers + AppendLine(';'); // Closing last line + AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding + 1 } }); + reservedBindings.emplace(bindingSet << 32 | binding + 1); + Append("var ", variableName, "Sampler: sampler"); + if (std::get(rawOrContainedType).depth) + Append("_comparison"); + } } AppendLine(';'); @@ -2210,8 +2253,26 @@ namespace nzsl RegisterVariable(*parameter.varIndex, parameter.name, parameter.semantic != Ast::FunctionParameterSemantic::In); // Should sampler be inout if texture is inout ? - if (parameter.type.IsResultingValue() && IsSamplerType(parameter.type.GetResultingValue())) - Append(", ", parameter.name, "Sampler: sampler"); + if (parameter.type.IsResultingValue()) + { + Ast::ExpressionType exprType = parameter.type.GetResultingValue(); + Ast::ExpressionType rawOrContainedType; + if (IsArrayType(exprType)) + rawOrContainedType = std::get(exprType).containedType->type; + else if (IsDynArrayType(exprType)) + rawOrContainedType = std::get(exprType).containedType->type; + else + rawOrContainedType = exprType; + + if (IsSamplerType(rawOrContainedType)) + { + if (IsArrayType(exprType) || IsDynArrayType(exprType)) + throw std::runtime_error("WGSL does not support sampled texture array as funtion parameter"); + Append(", ", parameter.name, "Sampler: sampler"); + if (std::get(rawOrContainedType).depth) + Append("_comparison"); + } + } } Append(')'); if (node.returnType.HasValue()) diff --git a/tests/src/Tests/ExternalTests.cpp b/tests/src/Tests/ExternalTests.cpp index 394ac862..4331df4c 100644 --- a/tests/src/Tests/ExternalTests.cpp +++ b/tests/src/Tests/ExternalTests.cpp @@ -310,7 +310,7 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); -// Uniform buffer have and invalid memory layout +// Uniform buffer have an invalid memory layout #ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( struct Data @@ -745,6 +745,23 @@ fn main() OpReturn OpFunctionEnd)", {}, spirvEnv, true); } + + ExpectWGSL(*shaderModule, R"( +struct Data +{ + data: u32, + values: array +} + +@group(0) @binding(0) var data: Data; + +@fragment +fn main() +{ + var value: f32 = data.values[42]; + var size: u32 = arrayLength(&data.values); +} +)"); } } @@ -852,6 +869,12 @@ fn main() nzsl::SpirvWriter spirvWriter; CHECK_THROWS_WITH(spirvWriter.Generate(*shaderModule), "unsupported type used in external block (SPIR-V doesn't allow primitive types as uniforms)"); } + + WHEN("Generating WGSL (which doesn't support primitive externals)") + { + nzsl::WgslWriter wgslWriter; + CHECK_THROWS_WITH(wgslWriter.Generate(*shaderModule), "primitive externals have no way to be translated in WGSL"); + } } @@ -1101,6 +1124,24 @@ fn main() %8 = OpLabel OpReturn OpFunctionEnd)", {}, {}, true); + + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + + ExpectWGSL(*shaderModule, R"( +struct Data +{ + index: i32 +} + +var data: Data; + +@fragment +fn main() +{ + +} +)", {}, wgslEnv); } @@ -1351,6 +1392,56 @@ fn main() %48 = OpLabel OpReturn OpFunctionEnd)", {}, {}, true); + +// Uniform buffer have an invalid memory layout +#ifdef FAILING_WGSL + ExpectWGSL(*shaderModule, R"( +struct DirectionalLight +{ + color: vec3, + direction: vec3, + invShadowMapSize: vec2, + ambientFactor: f32, + diffuseFactor: f32, + cascadeCount: u32, + cascadeDistances: array, + viewProjMatrices: array, 4> +} + +struct LightData +{ + directionalLights: array, + directionalLightCount: u32 +} + +@group(0) @binding(0) var lightData: LightData; + +@fragment +fn main() +{ + { + var lightIndex: u32 = 0u; + var _nzsl_to: u32 = lightData.directionalLightCount; + while (lightIndex < _nzsl_to) + { + var light: DirectionalLight; + light.color = lightData.directionalLights[lightIndex].color; + light.direction = lightData.directionalLights[lightIndex].direction; + light.invShadowMapSize = lightData.directionalLights[lightIndex].invShadowMapSize; + light.ambientFactor = lightData.directionalLights[lightIndex].ambientFactor; + light.diffuseFactor = lightData.directionalLights[lightIndex].diffuseFactor; + light.cascadeCount = lightData.directionalLights[lightIndex].cascadeCount; + light.cascadeDistances = lightData.directionalLights[lightIndex].cascadeDistances; + light.viewProjMatrices = lightData.directionalLights[lightIndex].viewProjMatrices; + var lightCopy: DirectionalLight = light; + lightIndex += 1u; + } + + } + +} +)"); +#endif } SECTION("named external") @@ -1447,6 +1538,24 @@ fn main() OpStore %19 %26 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +struct Data +{ + color: vec4 +} + +// Tag: Color map +@group(0) @binding(0) var Instance_tex: texture_2d; +@group(0) @binding(1) var Instance_texSampler: sampler; +@group(0) @binding(2) var Instance_data: Data; + +@fragment +fn main() +{ + var value: vec4 = (textureSample(Instance_tex, Instance_texSampler, vec2(0.0, 0.0))) * Instance_data.color; +} +)"); } SECTION("named external shadowing") @@ -1538,6 +1647,19 @@ fn main() OpStore %13 %14 OpReturn OpFunctionEnd)", {}, {}, true); + + ExpectWGSL(*shaderModule, R"( +// Tag: Color map +@group(0) @binding(0) var Viewer_tex: texture_2d; +@group(0) @binding(1) var Viewer_texSampler: sampler; + +@fragment +fn main() +{ + var Viewer_tex: f32 = 0.0; + var value: f32 = Viewer_tex; +} +)"); } SECTION("Proper SPIR-V 1.4 generation") @@ -2002,5 +2124,71 @@ fn main(input: VertIn) -> VertOut OpStore %40 %87 OpReturn OpFunctionEnd)", {}, env, true); + + ExpectWGSL(*shaderModule, R"( +struct MaterialData +{ + color: vec4 +} + +struct InstanceData +{ + worldViewProjMat: mat4x4 +} + +@group(0) @binding(0) var tex: texture_2d; +@group(0) @binding(1) var texSampler: sampler; +@group(0) @binding(2) var instanceData: InstanceData; +@group(0) @binding(3) var materialData: MaterialData; + +struct VertIn +{ + @location(0) pos: vec3, + @location(1) uv: vec2 +} + +struct VertOut +{ + @builtin(position) pos: vec4, + @location(0) uv: vec2 +} + +struct FragOut +{ + @location(0) color: vec4 +} + +fn GetBaseColor() -> vec4 +{ + return materialData.color; +} + +fn GetWorldMatrix() -> mat4x4 +{ + return Intermediate(); +} + +fn Intermediate() -> mat4x4 +{ + return instanceData.worldViewProjMat; +} + +@fragment +fn main(input: VertOut) -> FragOut +{ + var output: FragOut; + output.color = (GetBaseColor()) * (textureSample(tex, texSampler, input.uv)); + return output; +} + +@vertex +fn main_2(input: VertIn) -> VertOut +{ + var output: VertOut; + output.pos = (GetWorldMatrix()) * (vec4(input.pos, 1.0)); + output.uv = input.uv; + return output; +} +)"); } } diff --git a/tests/src/Tests/FunctionsTests.cpp b/tests/src/Tests/FunctionsTests.cpp index fe457a6a..cc7a6735 100644 --- a/tests/src/Tests/FunctionsTests.cpp +++ b/tests/src/Tests/FunctionsTests.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include TEST_CASE("functions", "[Shader]") @@ -702,30 +703,7 @@ fn main() -> FragOut OpReturn OpFunctionEnd)", {}, {}, true); -// No sampler generated ? -// No sampler passed to function -#ifdef FAILING_WGSL - ExpectWGSL(*shaderModule, R"( -fn sample_center(tex: array, 3>, texSampler: Sampler) -> vec4 -{ - return textureSample(tex[1], texSampler, vec2(0.5, 0.5)); -} - -@group(0) @binding(0) var ExtData_texture: array, 3>; - -struct FragOut -{ - @location(0) value: vec4 -} - -@fragment -fn main() -> FragOut -{ - var output: FragOut; - output.value = sample_center(ExtData_texture); - return output; -} -)"); -#endif + nzsl::WgslWriter wgslWriter; + CHECK_THROWS_WITH(wgslWriter.Generate(*shaderModule), "WGSL does not support sampled texture array as funtion parameter"); } } diff --git a/tests/src/Tests/InputOutputTests.cpp b/tests/src/Tests/InputOutputTests.cpp index c0f0f9f6..e284cd84 100644 --- a/tests/src/Tests/InputOutputTests.cpp +++ b/tests/src/Tests/InputOutputTests.cpp @@ -383,5 +383,61 @@ fn main(input: VertIn) -> VertOut OpStore %36 %80 OpReturn OpFunctionEnd)", {}, spirvEnv, true); + +// Need emulation of unsupported builtin attribute +#ifdef FAILING_WGSL + ExpectWGSL(*shaderModule, R"( +[nzsl_version("1.1")] +module; + +[layout(std430)] +struct ColorData +{ + colors: dyn_array[vec4[f32]] +} + +external +{ + [set(0), binding(0)] data: storage[ColorData] +} + +struct VertIn +{ + [builtin(instance_index)] instance_index: i32, + [builtin(draw_index)] draw_index: i32, + [builtin(vertex_index)] vertex_index: i32 +} + +struct VertOut +{ + [location(0), interp(flat)] instance_index: i32, + [location(1), interp(no_perspective)] x: f32, + [location(2), interp(smooth)] y: f32 +} + +struct FragOut +{ + [location(0)] color: vec4[f32] +} + +[entry(frag)] +fn main(input: VertOut) -> FragOut +{ + let output: FragOut; + output.color = (data.colors[input.instance_index] * input.x) * input.y; + return output; +} + +[entry(vert)] +fn main(input: VertIn) -> VertOut +{ + let output: VertOut; + output.instance_index = input.instance_index; + output.x = f32(input.draw_index); + output.y = f32(input.vertex_index); + return output; +} +)"); +#endif } } diff --git a/tests/src/Tests/IntrinsicTests.cpp b/tests/src/Tests/IntrinsicTests.cpp index 1a75c280..ab3d35d5 100644 --- a/tests/src/Tests/IntrinsicTests.cpp +++ b/tests/src/Tests/IntrinsicTests.cpp @@ -406,11 +406,11 @@ fn main() @group(0) @binding(10) var texCube: texture_cube; @group(0) @binding(11) var texCubeSampler: sampler; @group(0) @binding(12) var tex2DDepth: texture_depth_2d; -@group(0) @binding(13) var tex2DDepthSampler: sampler; +@group(0) @binding(13) var tex2DDepthSampler: sampler_comparison; @group(0) @binding(14) var tex2DArrayDepth: texture_depth_2d_array; -@group(0) @binding(15) var tex2DArrayDepthSampler: sampler; +@group(0) @binding(15) var tex2DArrayDepthSampler: sampler_comparison; @group(0) @binding(16) var texCubeDepth: texture_depth_cube; -@group(0) @binding(17) var texCubeDepthSampler: sampler; +@group(0) @binding(17) var texCubeDepthSampler: sampler_comparison; @fragment fn main() diff --git a/tests/src/Tests/LoopTests.cpp b/tests/src/Tests/LoopTests.cpp index fc95eb1d..a12ea0ae 100644 --- a/tests/src/Tests/LoopTests.cpp +++ b/tests/src/Tests/LoopTests.cpp @@ -850,7 +850,7 @@ OpLabel OpReturn OpFunctionEnd)"); -// Uniform buffer have and invalid memory layout +// Uniform buffer have an invalid memory layout #ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( @fragment @@ -1009,7 +1009,7 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); -// Uniform buffer have and invalid memory layout +// Uniform buffer have an invalid memory layout #ifdef FAILING_WGSL ExpectWGSL(*shaderModule2, R"( @fragment From af23bc003d5916768942bbcca36cc189a371c76b Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 16 Sep 2025 21:58:38 +0200 Subject: [PATCH 28/37] removing texture 1d array from wgsl, fixing texture sampling functions --- src/NZSL/WgslWriter.cpp | 29 ++- tests/src/Tests/IntrinsicTests.cpp | 357 +++++++++++++++++------------ 2 files changed, 234 insertions(+), 152 deletions(-) diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 4b09a559..cef3aefe 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -711,12 +711,7 @@ namespace nzsl break; } case ImageType::E1D_Array: - { - if (samplerType.depth) - throw std::runtime_error("depth texture sampler 1D array are not supported by WGSL"); - dimension = "1d_array"; - break; - } + throw std::runtime_error("texture 1D array are not supported by WGSL"); case ImageType::E2D: dimension = "2d"; break; case ImageType::E2D_Array: dimension = "2d_array"; break; case ImageType::E3D: @@ -1972,6 +1967,16 @@ namespace nzsl node.parameters[0]->Visit(*this); Append("Sampler, "); method = true; + + const Ast::ExpressionType& textureType = EnsureExpressionType(*node.parameters[0]); + if (IsSamplerType(textureType) && std::get(textureType).dim == ImageType::E2D_Array) + { + node.parameters[1]->Visit(*this); + Append(".xy, u32("); + node.parameters[1]->Visit(*this); + Append(".z))"); + return; + } break; } @@ -1991,6 +1996,18 @@ namespace nzsl node.parameters[0]->Visit(*this); Append("Sampler, "); method = true; + + const Ast::ExpressionType& textureType = EnsureExpressionType(*node.parameters[0]); + if (IsSamplerType(textureType) && std::get(textureType).dim == ImageType::E2D_Array) + { + node.parameters[1]->Visit(*this); + Append(".xy, u32("); + node.parameters[1]->Visit(*this); + Append(".z), "); + node.parameters[2]->Visit(*this); + Append(')'); + return; + } break; } } diff --git a/tests/src/Tests/IntrinsicTests.cpp b/tests/src/Tests/IntrinsicTests.cpp index ab3d35d5..8db18ae9 100644 --- a/tests/src/Tests/IntrinsicTests.cpp +++ b/tests/src/Tests/IntrinsicTests.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include TEST_CASE("intrinsics", "[Shader]") @@ -140,7 +141,6 @@ module; external { tex1D: sampler1D[f32], - tex1DArray: sampler1D_array[f32], tex2D: sampler2D[f32], tex2DArray: sampler2D_array[f32], tex3D: sampler3D[f32], @@ -159,11 +159,10 @@ fn main() let uv3f = vec3[f32](0.0, 1.0, 2.0); let sampleResult1 = tex1D.Sample(uv1f); - let sampleResult2 = tex1DArray.Sample(uv2f); - let sampleResult3 = tex2D.Sample(uv2f); - let sampleResult4 = tex2DArray.Sample(uv3f); - let sampleResult5 = tex3D.Sample(uv3f); - let sampleResult6 = texCube.Sample(uv3f); + let sampleResult2 = tex2D.Sample(uv2f); + let sampleResult3 = tex2DArray.Sample(uv3f); + let sampleResult4 = tex3D.Sample(uv3f); + let sampleResult5 = texCube.Sample(uv3f); let depthSampleResult3 = tex2DDepth.SampleDepthComp(uv2f, depth); let depthSampleResult4 = tex2DArrayDepth.SampleDepthComp(uv3f, depth); @@ -180,7 +179,6 @@ fn main() ExpectGLSL(*shaderModule, R"( uniform sampler1D tex1D; -uniform sampler1DArray tex1DArray; uniform sampler2D tex2D; uniform sampler2DArray tex2DArray; uniform sampler3D tex3D; @@ -196,11 +194,10 @@ void main() vec2 uv2f = vec2(0.0, 1.0); vec3 uv3f = vec3(0.0, 1.0, 2.0); vec4 sampleResult1 = texture(tex1D, uv1f); - vec4 sampleResult2 = texture(tex1DArray, uv2f); - vec4 sampleResult3 = texture(tex2D, uv2f); - vec4 sampleResult4 = texture(tex2DArray, uv3f); - vec4 sampleResult5 = texture(tex3D, uv3f); - vec4 sampleResult6 = texture(texCube, uv3f); + vec4 sampleResult2 = texture(tex2D, uv2f); + vec4 sampleResult3 = texture(tex2DArray, uv3f); + vec4 sampleResult4 = texture(tex3D, uv3f); + vec4 sampleResult5 = texture(texCube, uv3f); float depthSampleResult3 = texture(tex2DDepth, vec3(uv2f, depth)); float depthSampleResult4 = texture(tex2DArrayDepth, vec4(uv3f, depth)); float depthSampleResult5 = texture(texCubeDepth, vec4(uv3f, depth)); @@ -212,14 +209,13 @@ void main() external { [set(0), binding(0)] tex1D: sampler1D[f32], - [set(0), binding(1)] tex1DArray: sampler1D_array[f32], - [set(0), binding(2)] tex2D: sampler2D[f32], - [set(0), binding(3)] tex2DArray: sampler2D_array[f32], - [set(0), binding(4)] tex3D: sampler3D[f32], - [set(0), binding(5)] texCube: sampler_cube[f32], - [set(0), binding(6)] tex2DDepth: depth_sampler2D[f32], - [set(0), binding(7)] tex2DArrayDepth: depth_sampler2D_array[f32], - [set(0), binding(8)] texCubeDepth: depth_sampler_cube[f32] + [set(0), binding(1)] tex2D: sampler2D[f32], + [set(0), binding(2)] tex2DArray: sampler2D_array[f32], + [set(0), binding(3)] tex3D: sampler3D[f32], + [set(0), binding(4)] texCube: sampler_cube[f32], + [set(0), binding(5)] tex2DDepth: depth_sampler2D[f32], + [set(0), binding(6)] tex2DArrayDepth: depth_sampler2D_array[f32], + [set(0), binding(7)] texCubeDepth: depth_sampler_cube[f32] } [entry(frag)] @@ -230,11 +226,10 @@ fn main() let uv2f: vec2[f32] = vec2[f32](0.0, 1.0); let uv3f: vec3[f32] = vec3[f32](0.0, 1.0, 2.0); let sampleResult1: vec4[f32] = tex1D.Sample(uv1f); - let sampleResult2: vec4[f32] = tex1DArray.Sample(uv2f); - let sampleResult3: vec4[f32] = tex2D.Sample(uv2f); - let sampleResult4: vec4[f32] = tex2DArray.Sample(uv3f); - let sampleResult5: vec4[f32] = tex3D.Sample(uv3f); - let sampleResult6: vec4[f32] = texCube.Sample(uv3f); + let sampleResult2: vec4[f32] = tex2D.Sample(uv2f); + let sampleResult3: vec4[f32] = tex2DArray.Sample(uv3f); + let sampleResult4: vec4[f32] = tex3D.Sample(uv3f); + let sampleResult5: vec4[f32] = texCube.Sample(uv3f); let depthSampleResult3: f32 = tex2DDepth.SampleDepthComp(uv2f, depth); let depthSampleResult4: f32 = tex2DArrayDepth.SampleDepthComp(uv3f, depth); let depthSampleResult5: f32 = texCubeDepth.SampleDepthComp(uv3f, depth); @@ -245,20 +240,19 @@ fn main() OpCapability Capability(Shader) OpCapability Capability(Sampled1D) OpMemoryModel AddressingModel(Logical) MemoryModel(GLSL450) - OpEntryPoint ExecutionModel(Fragment) %51 "main" - OpExecutionMode %51 ExecutionMode(OriginUpperLeft) + OpEntryPoint ExecutionModel(Fragment) %47 "main" + OpExecutionMode %47 ExecutionMode(OriginUpperLeft) OpSource SourceLanguage(NZSL) 4198400 OpSourceExtension "Version: 1.1" OpName %5 "tex1D" - OpName %9 "tex1DArray" - OpName %13 "tex2D" - OpName %17 "tex2DArray" - OpName %21 "tex3D" - OpName %25 "texCube" - OpName %29 "tex2DDepth" - OpName %33 "tex2DArrayDepth" - OpName %37 "texCubeDepth" - OpName %51 "main" + OpName %9 "tex2D" + OpName %13 "tex2DArray" + OpName %17 "tex3D" + OpName %21 "texCube" + OpName %25 "tex2DDepth" + OpName %29 "tex2DArrayDepth" + OpName %33 "texCubeDepth" + OpName %47 "main" OpDecorate %5 Decoration(Binding) 0 OpDecorate %5 Decoration(DescriptorSet) 0 OpDecorate %9 Decoration(Binding) 1 @@ -275,49 +269,44 @@ fn main() OpDecorate %29 Decoration(DescriptorSet) 0 OpDecorate %33 Decoration(Binding) 7 OpDecorate %33 Decoration(DescriptorSet) 0 - OpDecorate %37 Decoration(Binding) 8 - OpDecorate %37 Decoration(DescriptorSet) 0 %1 = OpTypeFloat 32 %2 = OpTypeImage %1 Dim(Dim1D) 0 0 0 1 ImageFormat(Unknown) %3 = OpTypeSampledImage %2 %4 = OpTypePointer StorageClass(UniformConstant) %3 - %6 = OpTypeImage %1 Dim(Dim1D) 0 1 0 1 ImageFormat(Unknown) + %6 = OpTypeImage %1 Dim(Dim2D) 0 0 0 1 ImageFormat(Unknown) %7 = OpTypeSampledImage %6 %8 = OpTypePointer StorageClass(UniformConstant) %7 -%10 = OpTypeImage %1 Dim(Dim2D) 0 0 0 1 ImageFormat(Unknown) +%10 = OpTypeImage %1 Dim(Dim2D) 0 1 0 1 ImageFormat(Unknown) %11 = OpTypeSampledImage %10 %12 = OpTypePointer StorageClass(UniformConstant) %11 -%14 = OpTypeImage %1 Dim(Dim2D) 0 1 0 1 ImageFormat(Unknown) +%14 = OpTypeImage %1 Dim(Dim3D) 0 0 0 1 ImageFormat(Unknown) %15 = OpTypeSampledImage %14 %16 = OpTypePointer StorageClass(UniformConstant) %15 -%18 = OpTypeImage %1 Dim(Dim3D) 0 0 0 1 ImageFormat(Unknown) +%18 = OpTypeImage %1 Dim(Cube) 0 0 0 1 ImageFormat(Unknown) %19 = OpTypeSampledImage %18 %20 = OpTypePointer StorageClass(UniformConstant) %19 -%22 = OpTypeImage %1 Dim(Cube) 0 0 0 1 ImageFormat(Unknown) +%22 = OpTypeImage %1 Dim(Dim2D) 1 0 0 1 ImageFormat(Unknown) %23 = OpTypeSampledImage %22 %24 = OpTypePointer StorageClass(UniformConstant) %23 -%26 = OpTypeImage %1 Dim(Dim2D) 1 0 0 1 ImageFormat(Unknown) +%26 = OpTypeImage %1 Dim(Dim2D) 1 1 0 1 ImageFormat(Unknown) %27 = OpTypeSampledImage %26 %28 = OpTypePointer StorageClass(UniformConstant) %27 -%30 = OpTypeImage %1 Dim(Dim2D) 1 1 0 1 ImageFormat(Unknown) +%30 = OpTypeImage %1 Dim(Cube) 1 0 0 1 ImageFormat(Unknown) %31 = OpTypeSampledImage %30 %32 = OpTypePointer StorageClass(UniformConstant) %31 -%34 = OpTypeImage %1 Dim(Cube) 1 0 0 1 ImageFormat(Unknown) -%35 = OpTypeSampledImage %34 -%36 = OpTypePointer StorageClass(UniformConstant) %35 -%38 = OpTypeVoid -%39 = OpTypeFunction %38 -%40 = OpConstant %1 f32(0.5) -%41 = OpTypePointer StorageClass(Function) %1 -%42 = OpConstant %1 f32(0) -%43 = OpConstant %1 f32(1) -%44 = OpTypeVector %1 2 -%45 = OpTypePointer StorageClass(Function) %44 -%46 = OpConstant %1 f32(2) -%47 = OpTypeVector %1 3 -%48 = OpTypePointer StorageClass(Function) %47 -%49 = OpTypeVector %1 4 -%50 = OpTypePointer StorageClass(Function) %49 +%34 = OpTypeVoid +%35 = OpTypeFunction %34 +%36 = OpConstant %1 f32(0.5) +%37 = OpTypePointer StorageClass(Function) %1 +%38 = OpConstant %1 f32(0) +%39 = OpConstant %1 f32(1) +%40 = OpTypeVector %1 2 +%41 = OpTypePointer StorageClass(Function) %40 +%42 = OpConstant %1 f32(2) +%43 = OpTypeVector %1 3 +%44 = OpTypePointer StorageClass(Function) %43 +%45 = OpTypeVector %1 4 +%46 = OpTypePointer StorageClass(Function) %45 %5 = OpVariable %4 StorageClass(UniformConstant) %9 = OpVariable %8 StorageClass(UniformConstant) %13 = OpVariable %12 StorageClass(UniformConstant) @@ -326,91 +315,81 @@ fn main() %25 = OpVariable %24 StorageClass(UniformConstant) %29 = OpVariable %28 StorageClass(UniformConstant) %33 = OpVariable %32 StorageClass(UniformConstant) -%37 = OpVariable %36 StorageClass(UniformConstant) -%51 = OpFunction %38 FunctionControl(0) %39 -%52 = OpLabel -%53 = OpVariable %41 StorageClass(Function) -%54 = OpVariable %41 StorageClass(Function) -%55 = OpVariable %45 StorageClass(Function) -%56 = OpVariable %48 StorageClass(Function) -%57 = OpVariable %50 StorageClass(Function) -%58 = OpVariable %50 StorageClass(Function) -%59 = OpVariable %50 StorageClass(Function) -%60 = OpVariable %50 StorageClass(Function) -%61 = OpVariable %50 StorageClass(Function) -%62 = OpVariable %50 StorageClass(Function) -%63 = OpVariable %41 StorageClass(Function) -%64 = OpVariable %41 StorageClass(Function) -%65 = OpVariable %41 StorageClass(Function) - OpStore %53 %40 - OpStore %54 %42 -%66 = OpCompositeConstruct %44 %42 %43 - OpStore %55 %66 -%67 = OpCompositeConstruct %47 %42 %43 %46 - OpStore %56 %67 -%68 = OpLoad %3 %5 -%69 = OpLoad %1 %54 -%70 = OpImageSampleImplicitLod %49 %68 %69 - OpStore %57 %70 -%71 = OpLoad %7 %9 -%72 = OpLoad %44 %55 -%73 = OpImageSampleImplicitLod %49 %71 %72 - OpStore %58 %73 -%74 = OpLoad %11 %13 -%75 = OpLoad %44 %55 -%76 = OpImageSampleImplicitLod %49 %74 %75 - OpStore %59 %76 -%77 = OpLoad %15 %17 -%78 = OpLoad %47 %56 -%79 = OpImageSampleImplicitLod %49 %77 %78 - OpStore %60 %79 -%80 = OpLoad %19 %21 -%81 = OpLoad %47 %56 -%82 = OpImageSampleImplicitLod %49 %80 %81 - OpStore %61 %82 -%83 = OpLoad %23 %25 -%84 = OpLoad %47 %56 -%85 = OpImageSampleImplicitLod %49 %83 %84 - OpStore %62 %85 -%86 = OpLoad %27 %29 -%87 = OpLoad %44 %55 -%88 = OpLoad %1 %53 +%47 = OpFunction %34 FunctionControl(0) %35 +%48 = OpLabel +%49 = OpVariable %37 StorageClass(Function) +%50 = OpVariable %37 StorageClass(Function) +%51 = OpVariable %41 StorageClass(Function) +%52 = OpVariable %44 StorageClass(Function) +%53 = OpVariable %46 StorageClass(Function) +%54 = OpVariable %46 StorageClass(Function) +%55 = OpVariable %46 StorageClass(Function) +%56 = OpVariable %46 StorageClass(Function) +%57 = OpVariable %46 StorageClass(Function) +%58 = OpVariable %37 StorageClass(Function) +%59 = OpVariable %37 StorageClass(Function) +%60 = OpVariable %37 StorageClass(Function) + OpStore %49 %36 + OpStore %50 %38 +%61 = OpCompositeConstruct %40 %38 %39 + OpStore %51 %61 +%62 = OpCompositeConstruct %43 %38 %39 %42 + OpStore %52 %62 +%63 = OpLoad %3 %5 +%64 = OpLoad %1 %50 +%65 = OpImageSampleImplicitLod %45 %63 %64 + OpStore %53 %65 +%66 = OpLoad %7 %9 +%67 = OpLoad %40 %51 +%68 = OpImageSampleImplicitLod %45 %66 %67 + OpStore %54 %68 +%69 = OpLoad %11 %13 +%70 = OpLoad %43 %52 +%71 = OpImageSampleImplicitLod %45 %69 %70 + OpStore %55 %71 +%72 = OpLoad %15 %17 +%73 = OpLoad %43 %52 +%74 = OpImageSampleImplicitLod %45 %72 %73 + OpStore %56 %74 +%75 = OpLoad %19 %21 +%76 = OpLoad %43 %52 +%77 = OpImageSampleImplicitLod %45 %75 %76 + OpStore %57 %77 +%78 = OpLoad %23 %25 +%79 = OpLoad %40 %51 +%80 = OpLoad %1 %49 +%81 = OpImageSampleDrefImplicitLod %1 %78 %79 %80 + OpStore %58 %81 +%82 = OpLoad %27 %29 +%83 = OpLoad %43 %52 +%84 = OpLoad %1 %49 +%85 = OpImageSampleDrefImplicitLod %1 %82 %83 %84 + OpStore %59 %85 +%86 = OpLoad %31 %33 +%87 = OpLoad %43 %52 +%88 = OpLoad %1 %49 %89 = OpImageSampleDrefImplicitLod %1 %86 %87 %88 - OpStore %63 %89 -%90 = OpLoad %31 %33 -%91 = OpLoad %47 %56 -%92 = OpLoad %1 %53 -%93 = OpImageSampleDrefImplicitLod %1 %90 %91 %92 - OpStore %64 %93 -%94 = OpLoad %35 %37 -%95 = OpLoad %47 %56 -%96 = OpLoad %1 %53 -%97 = OpImageSampleDrefImplicitLod %1 %94 %95 %96 - OpStore %65 %97 + OpStore %60 %89 OpReturn OpFunctionEnd)", {}, {}, true); -// See comment inside the test -#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( @group(0) @binding(0) var tex1D: texture_1d; @group(0) @binding(1) var tex1DSampler: sampler; -@group(0) @binding(2) var tex1DArray: texture_1d_array; -@group(0) @binding(3) var tex1DArraySampler: sampler; -@group(0) @binding(4) var tex2D: texture_2d; -@group(0) @binding(5) var tex2DSampler: sampler; -@group(0) @binding(6) var tex2DArray: texture_2d_array; -@group(0) @binding(7) var tex2DArraySampler: sampler; -@group(0) @binding(8) var tex3D: texture_3d; -@group(0) @binding(9) var tex3DSampler: sampler; -@group(0) @binding(10) var texCube: texture_cube; -@group(0) @binding(11) var texCubeSampler: sampler; -@group(0) @binding(12) var tex2DDepth: texture_depth_2d; -@group(0) @binding(13) var tex2DDepthSampler: sampler_comparison; -@group(0) @binding(14) var tex2DArrayDepth: texture_depth_2d_array; -@group(0) @binding(15) var tex2DArrayDepthSampler: sampler_comparison; -@group(0) @binding(16) var texCubeDepth: texture_depth_cube; -@group(0) @binding(17) var texCubeDepthSampler: sampler_comparison; +@group(0) @binding(2) var tex2D: texture_2d; +@group(0) @binding(3) var tex2DSampler: sampler; +@group(0) @binding(4) var tex2DArray: texture_2d_array; +@group(0) @binding(5) var tex2DArraySampler: sampler; +@group(0) @binding(6) var tex3D: texture_3d; +@group(0) @binding(7) var tex3DSampler: sampler; +@group(0) @binding(8) var texCube: texture_cube; +@group(0) @binding(9) var texCubeSampler: sampler; +@group(0) @binding(10) var tex2DDepth: texture_depth_2d; +@group(0) @binding(11) var tex2DDepthSampler: sampler_comparison; +@group(0) @binding(12) var tex2DArrayDepth: texture_depth_2d_array; +@group(0) @binding(13) var tex2DArrayDepthSampler: sampler_comparison; +@group(0) @binding(14) var texCubeDepth: texture_depth_cube; +@group(0) @binding(15) var texCubeDepthSampler: sampler_comparison; @fragment fn main() @@ -420,17 +399,103 @@ fn main() var uv2f: vec2 = vec2(0.0, 1.0); var uv3f: vec3 = vec3(0.0, 1.0, 2.0); var sampleResult1: vec4 = textureSample(tex1D, tex1DSampler, uv1f); - var sampleResult2: vec4 = textureSample(tex1DArray, tex1DArraySampler, uv2f); - var sampleResult3: vec4 = textureSample(tex2D, tex2DSampler, uv2f); - var sampleResult4: vec4 = textureSample(tex2DArray, tex2DArraySampler, uv3f); // texture array needs to take the z element of vector and put it as a function argument https://www.w3.org/TR/WGSL/#texturesample - var sampleResult5: vec4 = textureSample(tex3D, tex3DSampler, uv3f); - var sampleResult6: vec4 = textureSample(texCube, texCubeSampler, uv3f); + var sampleResult2: vec4 = textureSample(tex2D, tex2DSampler, uv2f); + var sampleResult3: vec4 = textureSample(tex2DArray, tex2DArraySampler, uv3f.xy, u32(uv3f.z)); + var sampleResult4: vec4 = textureSample(tex3D, tex3DSampler, uv3f); + var sampleResult5: vec4 = textureSample(texCube, texCubeSampler, uv3f); var depthSampleResult3: f32 = textureSampleCompare(tex2DDepth, tex2DDepthSampler, uv2f, depth); - var depthSampleResult4: f32 = textureSampleCompare(tex2DArrayDepth, tex2DArrayDepthSampler, uv3f, depth); + var depthSampleResult4: f32 = textureSampleCompare(tex2DArrayDepth, tex2DArrayDepthSampler, uv3f.xy, u32(uv3f.z), depth); var depthSampleResult5: f32 = textureSampleCompare(texCubeDepth, texCubeDepthSampler, uv3f, depth); } )"); -#endif + } + + WHEN("testing texture 1d array intrinsics") + { + std::string_view nzslSource = R"( +[nzsl_version("1.1")] +[feature(texture1D)] +module; + +[auto_binding] +external +{ + tex1DArray: sampler1D_array[f32], +} + +[entry(frag)] +fn main() +{ + let sampleResult = tex1DArray.Sample(vec2[f32](0.0, 1.0)); +} +)"; + + nzsl::Ast::ModulePtr shaderModule = nzsl::Parse(nzslSource); + ResolveModule(*shaderModule); + + // sampler1D and sampler1D_array are not supported by GLSL ES + nzsl::GlslWriter::Environment glslEnv; + glslEnv.glES = false; + + ExpectGLSL(*shaderModule, R"( +uniform sampler1DArray tex1DArray; + +void main() +{ + vec4 sampleResult = texture(tex1DArray, vec2(0.0, 1.0)); +} +)", {}, glslEnv); + + ExpectNZSL(*shaderModule, R"( +[auto_binding(true)] +external +{ + [set(0), binding(0)] tex1DArray: sampler1D_array[f32] +} + +[entry(frag)] +fn main() +{ + let sampleResult: vec4[f32] = tex1DArray.Sample(vec2[f32](0.0, 1.0)); +} +)"); + + ExpectSPIRV(*shaderModule, R"( + OpCapability Capability(Shader) + OpCapability Capability(Sampled1D) + OpMemoryModel AddressingModel(Logical) MemoryModel(GLSL450) + OpEntryPoint ExecutionModel(Fragment) %13 "main" + OpExecutionMode %13 ExecutionMode(OriginUpperLeft) + OpSource SourceLanguage(NZSL) 4198400 + OpSourceExtension "Version: 1.1" + OpName %5 "tex1DArray" + OpName %13 "main" + OpDecorate %5 Decoration(Binding) 0 + OpDecorate %5 Decoration(DescriptorSet) 0 + %1 = OpTypeFloat 32 + %2 = OpTypeImage %1 Dim(Dim1D) 0 1 0 1 ImageFormat(Unknown) + %3 = OpTypeSampledImage %2 + %4 = OpTypePointer StorageClass(UniformConstant) %3 + %6 = OpTypeVoid + %7 = OpTypeFunction %6 + %8 = OpConstant %1 f32(0) + %9 = OpConstant %1 f32(1) +%10 = OpTypeVector %1 2 +%11 = OpTypeVector %1 4 +%12 = OpTypePointer StorageClass(Function) %11 + %5 = OpVariable %4 StorageClass(UniformConstant) +%13 = OpFunction %6 FunctionControl(0) %7 +%14 = OpLabel +%15 = OpVariable %12 StorageClass(Function) +%16 = OpLoad %3 %5 +%17 = OpCompositeConstruct %10 %8 %9 +%18 = OpImageSampleImplicitLod %11 %16 %17 + OpStore %15 %18 + OpReturn + OpFunctionEnd)", {}, {}, true); + + nzsl::WgslWriter wgslWriter; + CHECK_THROWS_WITH(wgslWriter.Generate(*shaderModule), "texture 1D array are not supported by WGSL"); } WHEN("testing math intrinsics") From c9a3bfd1212f8729ce1ad1d26d6435bc2393f40c Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 16 Sep 2025 22:03:21 +0200 Subject: [PATCH 29/37] fixing arrays of textures test --- tests/src/Tests/ExternalTests.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tests/src/Tests/ExternalTests.cpp b/tests/src/Tests/ExternalTests.cpp index 4331df4c..e5e6df9a 100644 --- a/tests/src/Tests/ExternalTests.cpp +++ b/tests/src/Tests/ExternalTests.cpp @@ -183,17 +183,15 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); -// Sampler missing ?? -#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( -@group(0) @binding(0) var tex: array, 5>; +@group(0) @binding(0) var tex: binding_array, 5>; +@group(0) @binding(1) var texSampler: sampler; @fragment fn main() { - var value: vec4 = textureSample(tex[2], tex[2]Sampler, vec3(0.0, 0.0, 0.0)); + var value: vec4 = textureSample(tex[2], texSampler, vec3(0.0, 0.0, 0.0)); })"); -#endif } SECTION("Uniform buffers") From be783fd5b8a675c23b084987ce53358d0cbbeec3 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 16 Sep 2025 22:27:32 +0200 Subject: [PATCH 30/37] fixing access member tests --- tests/src/Tests/AccessMemberTests.cpp | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/tests/src/Tests/AccessMemberTests.cpp b/tests/src/Tests/AccessMemberTests.cpp index c10c9204..edca8cee 100644 --- a/tests/src/Tests/AccessMemberTests.cpp +++ b/tests/src/Tests/AccessMemberTests.cpp @@ -4,11 +4,6 @@ #include #include -/** - * Here WGSL tests fail because vertex entrypoints need to return - * at least a builtin position attribute. - */ - TEST_CASE("structure member access", "[Shader]") { SECTION("Nested member loading") @@ -44,7 +39,7 @@ external auto swizzle = nzsl::ShaderBuilder::Swizzle(std::move(secondAccess), { 2u }); auto varDecl = nzsl::ShaderBuilder::DeclareVariable("result", nzsl::Ast::ExpressionType{ nzsl::Ast::PrimitiveType::Float32 }, std::move(swizzle)); - shaderModule->rootNode->statements.push_back(nzsl::ShaderBuilder::DeclareFunction(nzsl::ShaderStageType::Vertex, "main", std::move(varDecl))); + shaderModule->rootNode->statements.push_back(nzsl::ShaderBuilder::DeclareFunction(nzsl::ShaderStageType::Fragment, "main", std::move(varDecl))); ExpectGLSL(*shaderModule, R"( void main() @@ -54,7 +49,7 @@ void main() )"); ExpectNZSL(*shaderModule, R"( -[entry(vert)] +[entry(frag)] fn main() { let result: f32 = ubo.s.field.z; @@ -72,16 +67,13 @@ OpStore OpReturn OpFunctionEnd)"); -// See top file comment -#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( -@vertex +@fragment fn main() { var result: f32 = ubo.s.field.z; } )"); -#endif } SECTION("AccessMember with multiples fields") @@ -92,7 +84,7 @@ fn main() auto swizzle = nzsl::ShaderBuilder::Swizzle(std::move(access), { 2u }); auto varDecl = nzsl::ShaderBuilder::DeclareVariable("result", nzsl::Ast::ExpressionType{ nzsl::Ast::PrimitiveType::Float32 }, std::move(swizzle)); - shaderModule->rootNode->statements.push_back(nzsl::ShaderBuilder::DeclareFunction(nzsl::ShaderStageType::Vertex, "main", std::move(varDecl))); + shaderModule->rootNode->statements.push_back(nzsl::ShaderBuilder::DeclareFunction(nzsl::ShaderStageType::Fragment, "main", std::move(varDecl))); ExpectGLSL(*shaderModule, R"( void main() @@ -102,7 +94,7 @@ void main() )"); ExpectNZSL(*shaderModule, R"( -[entry(vert)] +[entry(frag)] fn main() { let result: f32 = ubo.s.field.z; @@ -120,16 +112,13 @@ OpStore OpReturn OpFunctionEnd)"); -// See top file comment -#ifdef FAILING_WGSL ExpectWGSL(*shaderModule, R"( -@vertex -fn main() -> @builtin(position) vec4 +@fragment +fn main() { var result: f32 = ubo.s.field.z; } )"); -#endif } } } From 67e9430f0977dd1d1f05f4d8c2ed540890d48381 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Wed, 17 Sep 2025 09:45:04 +0200 Subject: [PATCH 31/37] adding matrix inverse helper --- include/NZSL/WgslWriter.hpp | 10 +- src/NZSL/WgslWriter.cpp | 203 +++++++++++++++++++++-------- tests/src/Tests/IntrinsicTests.cpp | 73 ++++++++++- 3 files changed, 227 insertions(+), 59 deletions(-) diff --git a/include/NZSL/WgslWriter.hpp b/include/NZSL/WgslWriter.hpp index 0c4a8fdf..f0740f42 100644 --- a/include/NZSL/WgslWriter.hpp +++ b/include/NZSL/WgslWriter.hpp @@ -53,6 +53,13 @@ namespace nzsl struct PreVisitor; friend PreVisitor; + enum class IntrinsicHelper + { + Infinity, + MatrixInverse, + NaN, + }; + // Attributes struct AutoBindingAttribute; struct AuthorAttribute; @@ -122,8 +129,7 @@ namespace nzsl void AppendAttribute(bool first, WorkgroupAttribute attribute); void AppendComment(std::string_view section); void AppendCommentSection(std::string_view section); - void AppendConstantHelpers(Ast::PrimitiveType type, Ast::TypeConstant constant); - //void AppendInverseMatHelpers(Ast::MatrixType type); + void AppendIntrinsicHelpers(IntrinsicHelper helper, const Ast::ExpressionType& type); void AppendHeader(const Ast::Module::Metadata& metadata); template void AppendIdentifier(const T& map, std::size_t id, bool append_module_prefix = false); void AppendLine(std::string_view txt = {}); diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index cef3aefe..0b47d324 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -146,45 +146,29 @@ namespace nzsl if (node.intrinsic == Ast::IntrinsicType::IsInf) { - assert((IsVectorType(paramType) || IsPrimitiveType(paramType)) && "invalid type found"); + assert((IsVectorType(paramType) || IsPrimitiveType(paramType)) && "expected a vector type or a primitive type"); const Ast::PrimitiveType& type = IsVectorType(paramType) ? std::get(paramType).type : std::get(paramType); - - if (type == Ast::PrimitiveType::Float32) - hasf32Infinity = true; - else if (type == Ast::PrimitiveType::Float64) - hasf64Infinity = true; - else - assert(false && "isinf can only be used on floating types"); + intrinsicHelpers[IntrinsicHelper::Infinity].emplace(type); + } + else if (node.intrinsic == Ast::IntrinsicType::MatrixInverse) + { + assert(IsMatrixType(paramType) && "expected a matrix"); + intrinsicHelpers[IntrinsicHelper::MatrixInverse].emplace(paramType); } } void Visit(Ast::TypeConstantExpression& node) override { - assert(IsPrimitiveType(node.type)); - Ast::PrimitiveType primitiveType = std::get(node.type); - + assert(IsPrimitiveType(node.type) && "expected a primitive type"); if (node.typeConstant == Ast::TypeConstant::Infinity) - { - if (primitiveType == Ast::PrimitiveType::Float32) - hasf32Infinity = true; - if (primitiveType == Ast::PrimitiveType::Float64) - hasf64Infinity = true; - } + intrinsicHelpers[IntrinsicHelper::Infinity].emplace(node.type); else if (node.typeConstant == Ast::TypeConstant::NaN) - { - if (primitiveType == Ast::PrimitiveType::Float32) - hasf32NaN = true; - if (primitiveType == Ast::PrimitiveType::Float64) - hasf64NaN = true; - } + intrinsicHelpers[IntrinsicHelper::NaN].emplace(node.type); } tsl::ordered_set features; + std::unordered_map> intrinsicHelpers; WgslWriter& m_writer; - bool hasf32Infinity = false; - bool hasf32NaN = false; - bool hasf64Infinity = false; - bool hasf64NaN = false; }; struct WgslWriter::AutoBindingAttribute @@ -458,14 +442,11 @@ namespace nzsl m_currentState->moduleNames.push_back(importedModule.identifier); } - if (previsitor.hasf32Infinity) - AppendConstantHelpers(Ast::PrimitiveType::Float32, Ast::TypeConstant::Infinity); - if (previsitor.hasf32NaN) - AppendConstantHelpers(Ast::PrimitiveType::Float32, Ast::TypeConstant::NaN); - if (previsitor.hasf64Infinity) - AppendConstantHelpers(Ast::PrimitiveType::Float64, Ast::TypeConstant::Infinity); - if (previsitor.hasf64NaN) - AppendConstantHelpers(Ast::PrimitiveType::Float64, Ast::TypeConstant::NaN); + for (const auto& [helper, exprTypeSet] : previsitor.intrinsicHelpers) + { + for (const auto& exprType : exprTypeSet) + AppendIntrinsicHelpers(helper, exprType); + } m_currentState->currentModuleIndex = 0; module.rootNode->Visit(*this); @@ -1269,28 +1250,37 @@ namespace nzsl AppendLine(); } - void WgslWriter::AppendConstantHelpers(Ast::PrimitiveType type, Ast::TypeConstant constant) + void WgslWriter::AppendIntrinsicHelpers(IntrinsicHelper helper, const Ast::ExpressionType& type) { using namespace std::string_view_literals; - std::string_view stringType; - switch (type) + Ast::PrimitiveType primitiveType; + if (IsMatrixType(type)) + primitiveType = std::get(type).type; + else if (IsPrimitiveType(type)) + primitiveType = std::get(type); + else + throw std::runtime_error("expected a matrix type or a primitive type"); + + std::string_view stringPrimitiveType; + switch (primitiveType) { - case Ast::PrimitiveType::Float32: stringType = "f32"sv; break; - case Ast::PrimitiveType::Float64: stringType = "f64"sv; break; + case Ast::PrimitiveType::Float32: stringPrimitiveType = "f32"sv; break; + case Ast::PrimitiveType::Float64: stringPrimitiveType = "f64"sv; break; - default: return; + default: + throw std::runtime_error(fmt::format("expected primitive type f32 or f64, got {}", ToString(primitiveType))); } - auto setupRatioFunction = [this, type, stringType]() + auto setupRatioFunction = [this, primitiveType, stringPrimitiveType]() { - if (type == Ast::PrimitiveType::Float32) + if (primitiveType == Ast::PrimitiveType::Float32) { if (m_currentState->hasf32RatioFunction) return; m_currentState->hasf32RatioFunction = true; } - else if (type == Ast::PrimitiveType::Float64) + else if (primitiveType == Ast::PrimitiveType::Float64) { if (m_currentState->hasf64RatioFunction) return; @@ -1302,12 +1292,12 @@ namespace nzsl return n / d; }} -)", stringType)); +)", stringPrimitiveType)); }; - switch (constant) + switch (helper) { - case Ast::TypeConstant::NaN: + case IntrinsicHelper::NaN: { setupRatioFunction(); Append(fmt::format(R"(fn _nzslNaN{0}() -> {0} @@ -1315,10 +1305,10 @@ namespace nzsl return _nzslRatio{0}(0.0, 0.0); }} -)", stringType)); +)", stringPrimitiveType)); break; } - case Ast::TypeConstant::Infinity: + case IntrinsicHelper::Infinity: { setupRatioFunction(); Append(fmt::format(R"(fn _nzslInfinity{0}() -> {0} @@ -1326,11 +1316,106 @@ namespace nzsl return _nzslRatio{0}(1.0, 0.0); }} -)", stringType)); +)", stringPrimitiveType)); break; } - default: break; + case IntrinsicHelper::MatrixInverse: + { + const Ast::MatrixType& matrixType = std::get(type); + assert(matrixType.rowCount == matrixType.columnCount); // Should have been catched before WgslWriter + if (matrixType.columnCount == 2) // mat2x2 + { + Append(fmt::format(R"(fn _nzslMatrixInverse2x2{0}(m: mat2x2<{0}>) -> mat2x2<{0}> +{{ + var adj: mat2x2<{0}>; + adj[0][0] = m[1][1]; + adj[0][1] = -m[0][1]; + adj[1][0] = -m[1][0]; + adj[1][1] = m[0][0]; + + let det: {0} = m[0][0] * m[1][1] - m[1][0] * m[0][1]; + return adj * (1 / det); +}} + +)", stringPrimitiveType)); + } + else if (matrixType.columnCount == 3) // mat3x3 + { + Append(fmt::format(R"(fn _nzslMatrixInverse3x3{0}(m: mat3x3<{0}>) -> mat3x3<{0}> +{{ + var adj: mat3x3<{0}>; + + adj[0][0] = (m[1][1] * m[2][2] - m[2][1] * m[1][2]); + adj[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); + adj[2][0] = (m[1][0] * m[2][1] - m[2][0] * m[1][1]); + adj[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); + adj[1][1] = (m[0][0] * m[2][2] - m[2][0] * m[0][2]); + adj[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); + adj[0][2] = (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + adj[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); + adj[2][2] = (m[0][0] * m[1][1] - m[1][0] * m[0][1]); + + let det: {0} = (m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) + - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) + + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0])); + + return adj * (1 / det); +}} + +)", stringPrimitiveType)); + } + else if (matrixType.columnCount == 4) // mat4x4 + { + Append(fmt::format(R"(fn _nzslMatrixInverse4x4{0}(m: mat4x4<{0}>) -> mat4x4<{0}> +{{ + let sub_factor00: {0} = m[2][2] * m[3][3] - m[3][2] * m[2][3]; + let sub_factor01: {0} = m[2][1] * m[3][3] - m[3][1] * m[2][3]; + let sub_factor02: {0} = m[2][1] * m[3][2] - m[3][1] * m[2][2]; + let sub_factor03: {0} = m[2][0] * m[3][3] - m[3][0] * m[2][3]; + let sub_factor04: {0} = m[2][0] * m[3][2] - m[3][0] * m[2][2]; + let sub_factor05: {0} = m[2][0] * m[3][1] - m[3][0] * m[2][1]; + let sub_factor06: {0} = m[1][2] * m[3][3] - m[3][2] * m[1][3]; + let sub_factor07: {0} = m[1][1] * m[3][3] - m[3][1] * m[1][3]; + let sub_factor08: {0} = m[1][1] * m[3][2] - m[3][1] * m[1][2]; + let sub_factor09: {0} = m[1][0] * m[3][3] - m[3][0] * m[1][3]; + let sub_factor10: {0} = m[1][0] * m[3][2] - m[3][0] * m[1][2]; + let sub_factor11: {0} = m[1][1] * m[3][3] - m[3][1] * m[1][3]; + let sub_factor12: {0} = m[1][0] * m[3][1] - m[3][0] * m[1][1]; + let sub_factor13: {0} = m[1][2] * m[2][3] - m[2][2] * m[1][3]; + let sub_factor14: {0} = m[1][1] * m[2][3] - m[2][1] * m[1][3]; + let sub_factor15: {0} = m[1][1] * m[2][2] - m[2][1] * m[1][2]; + let sub_factor16: {0} = m[1][0] * m[2][3] - m[2][0] * m[1][3]; + let sub_factor17: {0} = m[1][0] * m[2][2] - m[2][0] * m[1][2]; + let sub_factor18: {0} = m[1][0] * m[2][1] - m[2][0] * m[1][1]; + + var adj: mat4x4<{0}>; + adj[0][0] = (m[1][1] * sub_factor00 - m[1][2] * sub_factor01 + m[1][3] * sub_factor02); + adj[1][0] = - (m[1][0] * sub_factor00 - m[1][2] * sub_factor03 + m[1][3] * sub_factor04); + adj[2][0] = (m[1][0] * sub_factor01 - m[1][1] * sub_factor03 + m[1][3] * sub_factor05); + adj[3][0] = - (m[1][0] * sub_factor02 - m[1][1] * sub_factor04 + m[1][2] * sub_factor05); + adj[0][1] = - (m[0][1] * sub_factor00 - m[0][2] * sub_factor01 + m[0][3] * sub_factor02); + adj[1][1] = (m[0][0] * sub_factor00 - m[0][2] * sub_factor03 + m[0][3] * sub_factor04); + adj[2][1] = - (m[0][0] * sub_factor01 - m[0][1] * sub_factor03 + m[0][3] * sub_factor05); + adj[3][1] = (m[0][0] * sub_factor02 - m[0][1] * sub_factor04 + m[0][2] * sub_factor05); + adj[0][2] = (m[0][1] * sub_factor06 - m[0][2] * sub_factor07 + m[0][3] * sub_factor08); + adj[1][2] = - (m[0][0] * sub_factor06 - m[0][2] * sub_factor09 + m[0][3] * sub_factor10); + adj[2][2] = (m[0][0] * sub_factor11 - m[0][1] * sub_factor09 + m[0][3] * sub_factor12); + adj[3][2] = - (m[0][0] * sub_factor08 - m[0][1] * sub_factor10 + m[0][2] * sub_factor12); + adj[0][3] = - (m[0][1] * sub_factor13 - m[0][2] * sub_factor14 + m[0][3] * sub_factor15); + adj[1][3] = (m[0][0] * sub_factor13 - m[0][2] * sub_factor16 + m[0][3] * sub_factor17); + adj[2][3] = - (m[0][0] * sub_factor14 - m[0][1] * sub_factor16 + m[0][3] * sub_factor18); + adj[3][3] = (m[0][0] * sub_factor15 - m[0][1] * sub_factor17 + m[0][2] * sub_factor18); + + let det = (m[0][0] * adj[0][0] + m[0][1] * adj[1][0] + m[0][2] * adj[2][0] + m[0][3] * adj[3][0]); + + return adj * (1 / det); +}} + +)", stringPrimitiveType)); + } + break; + } } } @@ -1831,7 +1916,6 @@ namespace nzsl case Ast::IntrinsicType::Length: case Ast::IntrinsicType::Log: case Ast::IntrinsicType::Log2: - case Ast::IntrinsicType::MatrixInverse: case Ast::IntrinsicType::MatrixTranspose: case Ast::IntrinsicType::Max: case Ast::IntrinsicType::Min: @@ -1899,6 +1983,21 @@ namespace nzsl } case Ast::IntrinsicType::Lerp: Append("mix"); break; + + case Ast::IntrinsicType::MatrixInverse: + { + assert(IsMatrixType(EnsureExpressionType(*node.parameters[0]))); + const Ast::MatrixType& matrixType = std::get(EnsureExpressionType(*node.parameters[0])); + std::string_view stringPrimitiveType = (matrixType.type == Ast::PrimitiveType::Float32) ? "f32" : "f64"; + if (matrixType.columnCount == 2) + Append("_nzslMatrixInverse2x2", stringPrimitiveType); + else if (matrixType.columnCount == 3) + Append("_nzslMatrixInverse3x3", stringPrimitiveType); + else if (matrixType.columnCount == 4) + Append("_nzslMatrixInverse4x4", stringPrimitiveType); + break; + } + case Ast::IntrinsicType::Not: Append("!"); break; case Ast::IntrinsicType::RadToDeg: Append("degrees"); break; case Ast::IntrinsicType::RoundEven: Append("round"); break; diff --git a/tests/src/Tests/IntrinsicTests.cpp b/tests/src/Tests/IntrinsicTests.cpp index 8db18ae9..c6103306 100644 --- a/tests/src/Tests/IntrinsicTests.cpp +++ b/tests/src/Tests/IntrinsicTests.cpp @@ -1556,12 +1556,76 @@ fn main() OpReturn OpFunctionEnd)", {}, {}, true); -// Needs to implement an inverse function in WGSL -#ifdef FAILING_WGSL nzsl::WgslWriter::Environment wgslEnv; wgslEnv.featuresCallback = [](std::string_view) { return true; }; ExpectWGSL(*shaderModule, R"( +fn _nzslMatrixInverse3x3f64(m: mat3x3) -> mat3x3 +{ + var adj: mat3x3; + + adj[0][0] = (m[1][1] * m[2][2] - m[2][1] * m[1][2]); + adj[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); + adj[2][0] = (m[1][0] * m[2][1] - m[2][0] * m[1][1]); + adj[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); + adj[1][1] = (m[0][0] * m[2][2] - m[2][0] * m[0][2]); + adj[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); + adj[0][2] = (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + adj[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); + adj[2][2] = (m[0][0] * m[1][1] - m[1][0] * m[0][1]); + + let det: f64 = (m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) + - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) + + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0])); + + return adj * (1 / det); +} + +fn _nzslMatrixInverse4x4f32(m: mat4x4) -> mat4x4 +{ + let sub_factor00: f32 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; + let sub_factor01: f32 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; + let sub_factor02: f32 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; + let sub_factor03: f32 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; + let sub_factor04: f32 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; + let sub_factor05: f32 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; + let sub_factor06: f32 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; + let sub_factor07: f32 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; + let sub_factor08: f32 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; + let sub_factor09: f32 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; + let sub_factor10: f32 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; + let sub_factor11: f32 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; + let sub_factor12: f32 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; + let sub_factor13: f32 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; + let sub_factor14: f32 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; + let sub_factor15: f32 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; + let sub_factor16: f32 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; + let sub_factor17: f32 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; + let sub_factor18: f32 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; + + var adj: mat4x4; + adj[0][0] = (m[1][1] * sub_factor00 - m[1][2] * sub_factor01 + m[1][3] * sub_factor02); + adj[1][0] = - (m[1][0] * sub_factor00 - m[1][2] * sub_factor03 + m[1][3] * sub_factor04); + adj[2][0] = (m[1][0] * sub_factor01 - m[1][1] * sub_factor03 + m[1][3] * sub_factor05); + adj[3][0] = - (m[1][0] * sub_factor02 - m[1][1] * sub_factor04 + m[1][2] * sub_factor05); + adj[0][1] = - (m[0][1] * sub_factor00 - m[0][2] * sub_factor01 + m[0][3] * sub_factor02); + adj[1][1] = (m[0][0] * sub_factor00 - m[0][2] * sub_factor03 + m[0][3] * sub_factor04); + adj[2][1] = - (m[0][0] * sub_factor01 - m[0][1] * sub_factor03 + m[0][3] * sub_factor05); + adj[3][1] = (m[0][0] * sub_factor02 - m[0][1] * sub_factor04 + m[0][2] * sub_factor05); + adj[0][2] = (m[0][1] * sub_factor06 - m[0][2] * sub_factor07 + m[0][3] * sub_factor08); + adj[1][2] = - (m[0][0] * sub_factor06 - m[0][2] * sub_factor09 + m[0][3] * sub_factor10); + adj[2][2] = (m[0][0] * sub_factor11 - m[0][1] * sub_factor09 + m[0][3] * sub_factor12); + adj[3][2] = - (m[0][0] * sub_factor08 - m[0][1] * sub_factor10 + m[0][2] * sub_factor12); + adj[0][3] = - (m[0][1] * sub_factor13 - m[0][2] * sub_factor14 + m[0][3] * sub_factor15); + adj[1][3] = (m[0][0] * sub_factor13 - m[0][2] * sub_factor16 + m[0][3] * sub_factor17); + adj[2][3] = - (m[0][0] * sub_factor14 - m[0][1] * sub_factor16 + m[0][3] * sub_factor18); + adj[3][3] = (m[0][0] * sub_factor15 - m[0][1] * sub_factor17 + m[0][2] * sub_factor18); + + let det = (m[0][0] * adj[0][0] + m[0][1] * adj[1][0] + m[0][2] * adj[2][0] + m[0][3] * adj[3][0]); + + return adj * (1 / det); +} + @fragment fn main() { @@ -1585,13 +1649,12 @@ fn main() _nzsl_matrix_4[1u] = vec2(2.0, 3.0); _nzsl_matrix_4[2u] = vec2(4.0, 5.0); var m4: mat3x2 = _nzsl_matrix_4; - var inverseResult1: mat4x4 = inverse(m1); - var inverseResult2: mat3x3 = inverse(m3); + var inverseResult1: mat4x4 = _nzslMatrixInverse4x4f32(m1); + var inverseResult2: mat3x3 = _nzslMatrixInverse3x3f64(m3); var transposeResult1: mat3x2 = transpose(m2); var transposeResult2: mat2x3 = transpose(m4); } )", {}, wgslEnv); -#endif } WHEN("testing trigonometry intrinsics") From 61e54b62ce413b9950f5c53308ec9335e21efcbc Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Wed, 17 Sep 2025 10:24:00 +0200 Subject: [PATCH 32/37] fixing desc attributes, adding wgsl to CLI --- src/NZSL/WgslWriter.cpp | 8 +++--- src/ShaderCompiler/Compiler.cpp | 27 +++++++++++++++++++++ src/ShaderCompiler/Compiler.hpp | 1 + tests/src/Tests/ExternalTests.cpp | 2 +- tests/src/Tests/FilesystemResolverTests.cpp | 10 ++++++-- tests/src/Tests/ModuleTests.cpp | 10 ++++++-- 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 0b47d324..6bb7e000 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -964,7 +964,7 @@ namespace nzsl { if (!attribute.HasValue()) return; - Append("// Author ", EscapeString(attribute.author)); + AppendComment("Author " + EscapeString(attribute.author)); } void WgslWriter::AppendAttribute(bool first, BindingAttribute attribute) @@ -1116,9 +1116,11 @@ namespace nzsl // WGSL does not have memory layout management syntax } - void WgslWriter::AppendAttribute(bool /*first*/, LicenseAttribute /*attribute*/) + void WgslWriter::AppendAttribute(bool /*first*/, LicenseAttribute attribute) { - // TODO + if (!attribute.HasValue()) + return; + AppendComment("License: " + EscapeString(attribute.license)); } void WgslWriter::AppendAttribute(bool first, LocationAttribute attribute) diff --git a/src/ShaderCompiler/Compiler.cpp b/src/ShaderCompiler/Compiler.cpp index 0ef47568..54ef1f9b 100644 --- a/src/ShaderCompiler/Compiler.cpp +++ b/src/ShaderCompiler/Compiler.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -226,6 +227,7 @@ namespace nzslc - nzslb : binary NZSL - spv : binary SPIR-V - spv-dis : textual SPIR-V +- wgsl : WGSL Multiple values can be specified using commas (ex: --compile=glsl,nzslb). You can also specify -header as a suffix (ex: --compile=glsl-header) to generate an includable header file. @@ -318,6 +320,8 @@ You can also specify -header as a suffix (ex: --compile=glsl-header) to generate Step("Compile to textual SPIR-V", &Compiler::CompileToSPV, outputFilePath, *targetModule, true); else if (outputType == "glsl") Step("Compile to GLSL", &Compiler::CompileToGLSL, outputFilePath, *targetModule); + else if (outputType == "wgsl") + Step("Compile to WGSL", &Compiler::CompileToWGSL, outputFilePath, *targetModule); else { fmt::print("Unknown format {}, ignoring\n", outputType); @@ -571,6 +575,29 @@ You can also specify -header as a suffix (ex: --compile=glsl-header) to generate } } + void Compiler::CompileToWGSL(std::filesystem::path outputPath, nzsl::Ast::Module& module) + { + // TODO : add a way to validate Wgsl feature usage + nzsl::WgslWriter::Environment env; + + nzsl::WgslWriter wgslWriter; + wgslWriter.SetEnv(env); + + nzsl::BackendParameters states = BuildWriterOptions(); + nzsl::WgslWriter::Output output = wgslWriter.Generate(module, states); + if (m_skipOutput) + return; + + if (m_outputToStdout) + { + OutputToStdout(output.code); + return; + } + + outputPath.replace_extension("wgsl"); + OutputFile(std::move(outputPath), output.code.data(), output.code.size()); + } + nzsl::Ast::ModulePtr Compiler::Deserialize(const std::uint8_t* data, std::size_t size) { nzsl::Deserializer deserializer(data, size); diff --git a/src/ShaderCompiler/Compiler.hpp b/src/ShaderCompiler/Compiler.hpp index 1ea94e85..b008cbfd 100644 --- a/src/ShaderCompiler/Compiler.hpp +++ b/src/ShaderCompiler/Compiler.hpp @@ -58,6 +58,7 @@ namespace nzslc void CompileToNZSL(std::filesystem::path outputPath, const nzsl::Ast::Module& module); void CompileToNZSLB(std::filesystem::path outputPath, const nzsl::Ast::Module& module); void CompileToSPV(std::filesystem::path outputPath, nzsl::Ast::Module& module, bool textual); + void CompileToWGSL(std::filesystem::path outputPath, nzsl::Ast::Module& module); nzsl::Ast::ModulePtr Deserialize(const std::uint8_t* data, std::size_t size); void PrintTime(); void OutputFile(std::filesystem::path filePath, const void* data, std::size_t size, bool disallowHeader = false); diff --git a/tests/src/Tests/ExternalTests.cpp b/tests/src/Tests/ExternalTests.cpp index e5e6df9a..733cf0fc 100644 --- a/tests/src/Tests/ExternalTests.cpp +++ b/tests/src/Tests/ExternalTests.cpp @@ -98,7 +98,7 @@ fn main() } )"); } - + SECTION("Arrays of texture") { std::string_view nzslSource = R"( diff --git a/tests/src/Tests/FilesystemResolverTests.cpp b/tests/src/Tests/FilesystemResolverTests.cpp index eba19e9c..d9cc0b30 100644 --- a/tests/src/Tests/FilesystemResolverTests.cpp +++ b/tests/src/Tests/FilesystemResolverTests.cpp @@ -225,9 +225,15 @@ fn main() -> Output ExpectWGSL(*shaderModule, R"( // This file was generated by NZSL compiler (Nazara Shading Language) -// Author "SirLynix"// Description: "Test module" +// Author "SirLynix" +// Description: "Test module" -// Author "SirLynix"// Description: "Test color module" +// License: "MIT" + +// Author "SirLynix" +// Description: "Test color module" + +// License: "MIT" // Module Color diff --git a/tests/src/Tests/ModuleTests.cpp b/tests/src/Tests/ModuleTests.cpp index e0a7f8b2..16e358a7 100644 --- a/tests/src/Tests/ModuleTests.cpp +++ b/tests/src/Tests/ModuleTests.cpp @@ -283,9 +283,15 @@ OpReturn OpFunctionEnd)"); ExpectWGSL(*shaderModule, R"( -// Author "Sir Lynix"// Description: "Main file" +// Author "Sir Lynix" +// Description: "Main file" -// Author "Lynix"// Description: "Simple \"module\" for testing" +// License: "MIT" + +// Author "Lynix" +// Description: "Simple \"module\" for testing" + +// License: "Public domain" // Module SimpleModule From e68e9621a6f2ab63d055d5713671247ae355f1ae Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Wed, 17 Sep 2025 10:58:19 +0200 Subject: [PATCH 33/37] adding WGSL to readme --- README.md | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index ad376404..83553e72 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # Nazara Shading Language (NZSL) -NZSL is a shader language inspired by Rust and C++ which compiles to GLSL or SPIR-V (without depending on SPIRV-Cross). +NZSL is a shader language inspired by Rust and C++ which compiles to GLSL, WGSL or SPIR-V (without depending on SPIRV-Cross). ### Why a new shader language? @@ -48,9 +48,9 @@ fn main(input: VertOut) -> FragOut You can find precompiled binaries in the [releases](https://github.com/NazaraEngine/ShaderLang/releases). -NZSL is designed to be embedded in a game engine / game / graphics application that uses GLSL / SPIR-V for its shaders. +NZSL is designed to be embedded in a game engine / game / graphics application that uses GLSL / WGSL / SPIR-V for its shaders. -You can use it to generate GLSL, GLSL ES and SPIR-V in two non-exclusive ways: +You can use it to generate GLSL, GLSL ES, WGSL and SPIR-V in two non-exclusive ways: 1) Using the offline NZSL compiler (nzslc) ahead of time, in a way similar to glslang or glslc today. 2) Use NZSL as a library in your application to compile shaders in a dynamic way, just as they're needed (which can be used to benefit from supported extensions to improve generation). @@ -65,6 +65,7 @@ There are two binary tools you can use: - Validating shader: `nzslc file.nzsl` - Compile a shader to GLSL: `nzsl --compile=glsl file.nzsl` +- Compile a shader to WGSL: `nzsl --compile=wgsl file.nzsl` - Compile a shader to SPIR-V: `nzsl --compile=spv file.nzsl` - Compile a shader using modules to both GLSL and SPIR-V header includable version: `nzsl --module module_file.nzsl --module module_folder/ --compile=glsl-header,spv-header file.nzsl` @@ -86,6 +87,7 @@ Run `nzsla -h` to see all supported options. #include #include #include +#include int main() { @@ -98,10 +100,14 @@ int main() nzsl::GlslWriter glslWriter; nzsl::GlslWriter::Output output = glslWriter.Generate(shaderAst); // output.code contains GLSL that can directly be used by OpenGL + + nzsl::WgslWriter wgslWriter; + nzsl::WgslWriter::Output output = wgslWriter.Generate(shaderAst); + // output.code contains WGSL that can directly be used by WebGPU (or any native implementation) } ``` -The library contains a lot of options to customize the generation process (target SPIR-V/GLSL version, GLSL ES, gl_Position.y flipping, gl_Position.z remapping to match Vulkan semantics, supported OpenGL extensions, etc.). +The library contains a lot of options to customize the generation process (target SPIR-V/GLSL version, GLSL ES, gl_Position.y flipping, gl_Position.z remapping to match Vulkan semantics, supported OpenGL extensions, supported WebGPU features, etc.). ## Integration @@ -136,13 +142,11 @@ At one of my previous working place we were using huge HLSL-derived shaders with NZSL is designed to be small, fast and easy to debug, for example NZSL to GLSL retains a lot of the source code information which could be lost during SSA (SPIR-V) translation, even with debug symbols enabled. -## Is there a DXIL/WGSL backend? - -Not yet, as I don't target Direct3D or WebGPU yet. - -DXIL is not very different from SPIR-V and WGSL looks a lot like NZSL so it should be quite easy to add, though. +## Is there a DXIL backend? -See [this issue](https://github.com/NazaraEngine/ShaderLang/issues/13) for WGSL. +Not yet, as I don't target Direct3D yet.\ +DXIL is not very different from SPIR-V so it should be quite easy to add, though.\ +Note that [Shader Model 7 will accept SPIR-V](https://devblogs.microsoft.com/directx/directx-adopting-spir-v/) so NZSL will be usable with Direct3D. ## Are there limitations? From 9f82312da1b7bbd4359a7dd5ff6fc2e65e94908f Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Wed, 17 Sep 2025 17:29:59 +0200 Subject: [PATCH 34/37] removing invalid and unused statements and attributes --- README.md | 4 +- src/NZSL/WgslWriter.cpp | 144 +++++--------------- tests/src/Tests/FilesystemResolverTests.cpp | 2 - tests/src/Tests/ModuleTests.cpp | 2 - 4 files changed, 33 insertions(+), 119 deletions(-) diff --git a/README.md b/README.md index 83553e72..f5723ba1 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ You can use it to generate GLSL, GLSL ES, WGSL and SPIR-V in two non-exclusive w ### Offline compilation There are two binary tools you can use: -- **nzslc**: shader compiler, for compiling nzsl files to binary nzsl or directly to GLSL/SPIR-V. +- **nzslc**: shader compiler, for compiling nzsl files to binary nzsl or directly to GLSL/WGSL/SPIR-V. - **nzsla**: shader archiver, store and compress all your compiled shaders in a single file. **nzslc example usage:** @@ -67,7 +67,7 @@ There are two binary tools you can use: - Compile a shader to GLSL: `nzsl --compile=glsl file.nzsl` - Compile a shader to WGSL: `nzsl --compile=wgsl file.nzsl` - Compile a shader to SPIR-V: `nzsl --compile=spv file.nzsl` -- Compile a shader using modules to both GLSL and SPIR-V header includable version: `nzsl --module module_file.nzsl --module module_folder/ --compile=glsl-header,spv-header file.nzsl` +- Compile a shader using modules to GLSL, WGSL and SPIR-V header includable version: `nzsl --module module_file.nzsl --module module_folder/ --compile=glsl-header,wgsl-header,spv-header file.nzsl` Run `nzslc -h` to see all supported options. diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 6bb7e000..8f90cbea 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -69,22 +70,23 @@ namespace nzsl { std::string_view identifier; WgslFeature requiredFeature; + Ast::ExpressionType type; }; - constexpr auto s_wgslBuiltinMapping = frozen::make_unordered_map({ + const auto s_wgslBuiltinMapping = std::unordered_map({ { Ast::BuiltinEntry::BaseInstance, {} }, { Ast::BuiltinEntry::BaseVertex, {} }, { Ast::BuiltinEntry::DrawIndex, {} }, - { Ast::BuiltinEntry::FragCoord, { "position", WgslFeature::None } }, - { Ast::BuiltinEntry::FragDepth, { "frag_depth", WgslFeature::None } }, - { Ast::BuiltinEntry::GlocalInvocationIndices, { "global_invocation_id", WgslFeature::None } }, - { Ast::BuiltinEntry::InstanceIndex, { "instance_index", WgslFeature::None } }, - { Ast::BuiltinEntry::LocalInvocationIndex, { "local_invocation_index", WgslFeature::None } }, - { Ast::BuiltinEntry::LocalInvocationIndices, { "local_invocation_id", WgslFeature::None } }, - { Ast::BuiltinEntry::VertexIndex, { "vertex_index", WgslFeature::None } }, - { Ast::BuiltinEntry::VertexPosition, { "position", WgslFeature::None } }, - { Ast::BuiltinEntry::WorkgroupCount, { "num_workgroups", WgslFeature::None } }, - { Ast::BuiltinEntry::WorkgroupIndices, { "workgroup_id", WgslFeature::None } } + { Ast::BuiltinEntry::FragCoord, { "position", WgslFeature::None, Ast::VectorType{ .componentCount = 4, .type = Ast::PrimitiveType::Float32 } } }, + { Ast::BuiltinEntry::FragDepth, { "frag_depth", WgslFeature::None, Ast::PrimitiveType::Float32 } }, + { Ast::BuiltinEntry::GlocalInvocationIndices, { "global_invocation_id", WgslFeature::None, Ast::VectorType{ .componentCount = 3, .type = Ast::PrimitiveType::UInt32 } } }, + { Ast::BuiltinEntry::InstanceIndex, { "instance_index", WgslFeature::None, Ast::PrimitiveType::UInt32 } }, + { Ast::BuiltinEntry::LocalInvocationIndex, { "local_invocation_index", WgslFeature::None, Ast::PrimitiveType::UInt32 } }, + { Ast::BuiltinEntry::LocalInvocationIndices, { "local_invocation_id", WgslFeature::None, Ast::VectorType{ .componentCount = 3, .type = Ast::PrimitiveType::UInt32 } } }, + { Ast::BuiltinEntry::VertexIndex, { "vertex_index", WgslFeature::None, Ast::PrimitiveType::UInt32 } }, + { Ast::BuiltinEntry::VertexPosition, { "position", WgslFeature::None, Ast::VectorType{ .componentCount = 4, .type = Ast::PrimitiveType::Float32 } } }, + { Ast::BuiltinEntry::WorkgroupCount, { "num_workgroups", WgslFeature::None, Ast::VectorType{ .componentCount = 3, .type = Ast::PrimitiveType::UInt32 } } }, + { Ast::BuiltinEntry::WorkgroupIndices, { "workgroup_id", WgslFeature::None, Ast::VectorType{ .componentCount = 3, .type = Ast::PrimitiveType::UInt32 } } } }); struct WgslWriter::PreVisitor : Ast::RecursiveVisitor @@ -541,6 +543,7 @@ namespace nzsl return nameChanged; }; + executor.AddPass(); executor.AddPass(); //executor.AddPass(); executor.AddPass(firstIdentifierPassOptions); @@ -958,6 +961,7 @@ namespace nzsl void WgslWriter::AppendAttribute(bool /*first*/, AutoBindingAttribute /*attribute*/) { + // Nothing to do } void WgslWriter::AppendAttribute(bool /*first*/, AuthorAttribute attribute) @@ -999,22 +1003,9 @@ namespace nzsl Append("builtin(", it->second.identifier, ")"); } - void WgslWriter::AppendAttribute(bool first, CondAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, CondAttribute /*attribute*/) { - if (!attribute.HasValue()) - return; - if (!first) - Append(" "); - Append("@"); - - Append("cond("); - - if (attribute.cond.IsResultingValue()) - Append(Ast::ToString(attribute.cond.GetResultingValue())); - else - attribute.cond.GetExpression()->Visit(*this); - - Append(")"); + // Nothing to do } void WgslWriter::AppendAttribute(bool first, DepthWriteAttribute attribute) @@ -1099,9 +1090,7 @@ namespace nzsl return; if (!first) Append(" "); - Append("@"); - - Append("interp("); + Append("@interpolate("); if (attribute.interpQualifier.IsResultingValue()) Append(Parser::ToString(attribute.interpQualifier.GetResultingValue())); @@ -1166,22 +1155,9 @@ namespace nzsl AppendComment("Tag: " + attribute.tag); } - void WgslWriter::AppendAttribute(bool first, UnrollAttribute attribute) + void WgslWriter::AppendAttribute(bool /*first*/, UnrollAttribute /*attribute*/) { - if (!attribute.HasValue()) - return; - if (!first) - Append(" "); - Append("@"); - - Append("unroll("); - - if (attribute.unroll.IsResultingValue()) - Append(Parser::ToString(attribute.unroll.GetResultingValue())); - else - attribute.unroll.GetExpression()->Visit(*this); - - Append(")"); + throw std::runtime_error("unexpected unroll attribute, is the shader sanitized?"); } void WgslWriter::AppendAttribute(bool first, WorkgroupAttribute attribute) @@ -1477,10 +1453,8 @@ namespace nzsl void WgslWriter::AppendModuleAttributes(const Ast::Module::Metadata& metadata) { for (Ast::ModuleFeature feature : metadata.enabledFeatures) - AppendAttributes(true, FeatureAttribute{ feature }); - - AppendAttributes(true, AuthorAttribute{ metadata.author }, DescriptionAttribute{ metadata.description }); - AppendAttributes(true, LicenseAttribute{ metadata.license }); + AppendAttributes(true, FeatureAttribute{ feature }); // Not a real append, it just checks the feature support + AppendAttributes(true, AuthorAttribute{ metadata.author }, DescriptionAttribute{ metadata.description }, LicenseAttribute{ metadata.license }); } void WgslWriter::AppendStatementList(std::vector& statements) @@ -2165,12 +2139,7 @@ namespace nzsl bool first = true; for (const auto& statement : node.condStatements) { - if (first) - { - if (node.isConst) - Append("const "); - } - else + if (!first) Append("else "); Append("if ("); @@ -2195,12 +2164,9 @@ namespace nzsl Append("break;"); } - void WgslWriter::Visit(Ast::ConditionalStatement& node) + void WgslWriter::Visit(Ast::ConditionalStatement& /*node*/) { - Append("[cond("); - node.condition->Visit(*this); - AppendLine(")]"); - node.statement->Visit(*this); + throw std::runtime_error("unexpected conditional statement, is shader sanitized?"); } void WgslWriter::Visit(Ast::ContinueStatement& /*node*/) @@ -2439,8 +2405,8 @@ namespace nzsl AppendAttributes(false, CondAttribute{ member.cond }, LocationAttribute{ member.locationIndex }, InterpAttribute{ member.interp }, BuiltinAttribute{ member.builtin }, TagAttribute{ member.tag }); Append(member.name, ": "); - if (member.builtin.HasValue() && member.builtin.GetResultingValue() == Ast::BuiltinEntry::VertexIndex) - Append("u32"); + if (member.builtin.HasValue()) + Append(s_wgslBuiltinMapping.at(member.builtin.GetResultingValue()).type); else Append(member.type); } @@ -2484,62 +2450,14 @@ namespace nzsl throw std::runtime_error("unexpected for statement, is the shader sanitized?"); } - void WgslWriter::Visit(Ast::ForEachStatement& node) + void WgslWriter::Visit(Ast::ForEachStatement& /*node*/) { - if (node.varIndex) - RegisterVariable(*node.varIndex, node.varName); - - AppendAttributes(true, UnrollAttribute{ node.unroll }); - Append("for ", node.varName, " in "); - node.expression->Visit(*this); - AppendLine(); - - ScopeVisit(*node.statement); + throw std::runtime_error("unexpected for each statement, is the shader sanitized?"); } - void WgslWriter::Visit(Ast::ImportStatement& node) + void WgslWriter::Visit(Ast::ImportStatement& /*node*/) { - Append("import "); - - if (node.identifiers.empty()) - { - // Whole module import - Append(node.moduleName); - - std::string_view defaultIdentifierName; - std::size_t lastSep = node.moduleName.find_last_of('.'); - if (lastSep != std::string::npos) - defaultIdentifierName = std::string_view(node.moduleName).substr(lastSep + 1); - else - defaultIdentifierName = node.moduleName; - - if (node.moduleIdentifier != node.moduleName) - Append(" as ", node.moduleIdentifier); - - AppendLine(";"); - } - else - { - // Module identifier import - bool first = true; - for (const auto& entry : node.identifiers) - { - if (!first) - Append(", "); - - first = false; - - if (!entry.identifier.empty()) - { - Append(entry.identifier); - if (!entry.renamedIdentifier.empty()) - Append(" as ", entry.renamedIdentifier); - } - else - Append("*"); - } - AppendLine(" from ", node.moduleName, ";"); - } + throw std::runtime_error("unexpected import statement, is the shader sanitized?"); } void WgslWriter::Visit(Ast::MultiStatement& node) diff --git a/tests/src/Tests/FilesystemResolverTests.cpp b/tests/src/Tests/FilesystemResolverTests.cpp index d9cc0b30..875e3e60 100644 --- a/tests/src/Tests/FilesystemResolverTests.cpp +++ b/tests/src/Tests/FilesystemResolverTests.cpp @@ -227,12 +227,10 @@ fn main() -> Output // This file was generated by NZSL compiler (Nazara Shading Language) // Author "SirLynix" // Description: "Test module" - // License: "MIT" // Author "SirLynix" // Description: "Test color module" - // License: "MIT" // Module Color diff --git a/tests/src/Tests/ModuleTests.cpp b/tests/src/Tests/ModuleTests.cpp index 16e358a7..a0ba04ba 100644 --- a/tests/src/Tests/ModuleTests.cpp +++ b/tests/src/Tests/ModuleTests.cpp @@ -285,12 +285,10 @@ OpFunctionEnd)"); ExpectWGSL(*shaderModule, R"( // Author "Sir Lynix" // Description: "Main file" - // License: "MIT" // Author "Lynix" // Description: "Simple \"module\" for testing" - // License: "Public domain" // Module SimpleModule From df7cd8eacad3a2774d07072bd2400f6b6a446ffd Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Thu, 18 Sep 2025 18:58:07 +0200 Subject: [PATCH 35/37] begenning builtin emulations --- src/NZSL/WgslWriter.cpp | 37 +++++++++++++++-------- tests/src/Tests/BuiltinAttributeTests.cpp | 2 +- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index 8f90cbea..ebd0670d 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -44,8 +44,6 @@ #include #include -#include - namespace nzsl { constexpr std::string_view s_wgslWriterShaderDrawParametersBaseInstanceName = "_nzslBaseInstance"; @@ -56,6 +54,11 @@ namespace nzsl { None = -1, + + ShaderDrawParametersBaseInstance, // Emulation + ShaderDrawParametersBaseVertex, // Emulation + ShaderDrawParametersDrawIndex, // Emulation + // wgpu native features WgpuBufferBindingArray, WgpuConservativeDepth, @@ -73,10 +76,11 @@ namespace nzsl Ast::ExpressionType type; }; + // TODO: find a way to use frozen::make_unordered_map const auto s_wgslBuiltinMapping = std::unordered_map({ - { Ast::BuiltinEntry::BaseInstance, {} }, - { Ast::BuiltinEntry::BaseVertex, {} }, - { Ast::BuiltinEntry::DrawIndex, {} }, + { Ast::BuiltinEntry::BaseInstance, { s_wgslWriterShaderDrawParametersBaseInstanceName, WgslFeature::ShaderDrawParametersBaseInstance, Ast::PrimitiveType::Int32 } }, + { Ast::BuiltinEntry::BaseVertex, { s_wgslWriterShaderDrawParametersBaseVertexName, WgslFeature::ShaderDrawParametersBaseVertex, Ast::PrimitiveType::Int32 } }, + { Ast::BuiltinEntry::DrawIndex, { s_wgslWriterShaderDrawParametersDrawIndexName, WgslFeature::ShaderDrawParametersDrawIndex, Ast::PrimitiveType::Int32 } }, { Ast::BuiltinEntry::FragCoord, { "position", WgslFeature::None, Ast::VectorType{ .componentCount = 4, .type = Ast::PrimitiveType::Float32 } } }, { Ast::BuiltinEntry::FragDepth, { "frag_depth", WgslFeature::None, Ast::PrimitiveType::Float32 } }, { Ast::BuiltinEntry::GlocalInvocationIndices, { "global_invocation_id", WgslFeature::None, Ast::VectorType{ .componentCount = 3, .type = Ast::PrimitiveType::UInt32 } } }, @@ -338,6 +342,9 @@ namespace nzsl bool isTerminatedScope = false; bool hasf32RatioFunction = false; bool hasf64RatioFunction = false; + bool hasDrawParametersBaseInstanceUniform = false; + bool hasDrawParametersBaseVertexUniform = false; + bool hasDrawParametersDrawIndexUniform = false; }; WgslWriter::Output WgslWriter::Generate(Ast::Module& module, const BackendParameters& parameters) @@ -413,7 +420,7 @@ namespace nzsl auto validateFeature = [&](std::string_view featureName, std::string_view featurePrettyName) { if (!m_environment.featuresCallback || !m_environment.featuresCallback(featureName)) - throw std::runtime_error(fmt::format("WGSL does not support {} feature, wgpu does natively but you need to confirm its usage using feature callback", featurePrettyName)); + throw std::runtime_error(fmt::format("WGSL does not support {} feature, some implementations do natively but you need to confirm its usage using feature callback", featurePrettyName)); }; for (WgslFeature feature : previsitor.features) @@ -422,13 +429,17 @@ namespace nzsl { case WgslFeature::None: break; - case WgslFeature::WgpuBufferBindingArray: validateFeature("WgpuBufferBindingArray", "buffer binding array"); break; - case WgslFeature::WgpuConservativeDepth: validateFeature("WgpuConservativeDepth", "conservative depth"); break; - case WgslFeature::WgpuEarlyFragmentTests: validateFeature("WgpuEarlyFragmentTests", "early fragment depth test"); break; - case WgslFeature::WgpuFloat64: validateFeature("WgpuFloat64", "float 64"); break; - case WgslFeature::WgpuPushConstants: validateFeature("WgpuPushConstants", "push constants"); break; - case WgslFeature::WgpuStorageBindingArray: validateFeature("WgpuStorageBindingArray", "storage resource binding array"); break; - case WgslFeature::WgpuTextureBindingArray: validateFeature("WgpuTextureBindingArray", "texture binding array"); break; + case WgslFeature::ShaderDrawParametersBaseInstance: validateFeature("ShaderDrawParametersBaseInstance", "base instance attribute"); break; + case WgslFeature::ShaderDrawParametersBaseVertex: validateFeature("ShaderDrawParametersBaseVertex", "base vertex attribute"); break; + case WgslFeature::ShaderDrawParametersDrawIndex: validateFeature("ShaderDrawParametersDrawIndex", "draw index attribute"); break; + + case WgslFeature::WgpuBufferBindingArray: validateFeature("WgpuBufferBindingArray", "buffer binding array"); break; + case WgslFeature::WgpuConservativeDepth: validateFeature("WgpuConservativeDepth", "conservative depth"); break; + case WgslFeature::WgpuEarlyFragmentTests: validateFeature("WgpuEarlyFragmentTests", "early fragment depth test"); break; + case WgslFeature::WgpuFloat64: validateFeature("WgpuFloat64", "float 64"); break; + case WgslFeature::WgpuPushConstants: validateFeature("WgpuPushConstants", "push constants"); break; + case WgslFeature::WgpuStorageBindingArray: validateFeature("WgpuStorageBindingArray", "storage resource binding array"); break; + case WgslFeature::WgpuTextureBindingArray: validateFeature("WgpuTextureBindingArray", "texture binding array"); break; } } diff --git a/tests/src/Tests/BuiltinAttributeTests.cpp b/tests/src/Tests/BuiltinAttributeTests.cpp index 3f56071e..8382fdfc 100644 --- a/tests/src/Tests/BuiltinAttributeTests.cpp +++ b/tests/src/Tests/BuiltinAttributeTests.cpp @@ -248,7 +248,7 @@ fn main(input: Input) -> Output } // Needs to emulate draw_index, base_instance and base_vertex -#ifdef FAILING_WGSL +#ifndef FAILING_WGSL ExpectWGSL(*shaderModule, R"( struct Input { From 164dd6485586cd77dec8b5d0d993bf726366d0ac Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Sat, 20 Sep 2025 14:02:51 +0200 Subject: [PATCH 36/37] adding unsupported builtin emulation, fixing interpolate attribute --- src/NZSL/GlslWriter.cpp | 33 +- src/NZSL/Lang/LangData.hpp | 10 +- src/NZSL/WgslWriter.cpp | 223 +++++++++---- tests/src/Tests/ArrayTests.cpp | 83 +++-- tests/src/Tests/BuiltinAttributeTests.cpp | 176 ++++++----- tests/src/Tests/InputOutputTests.cpp | 368 ++++++++++++---------- 6 files changed, 517 insertions(+), 376 deletions(-) diff --git a/src/NZSL/GlslWriter.cpp b/src/NZSL/GlslWriter.cpp index 0d18cade..e9160eb1 100644 --- a/src/NZSL/GlslWriter.cpp +++ b/src/NZSL/GlslWriter.cpp @@ -30,6 +30,8 @@ #include #include #include +#include +#include #include #include #include @@ -652,9 +654,9 @@ namespace nzsl if (m_currentState->hasDrawParametersBaseInstanceUniform) Append(s_glslWriterShaderDrawParametersBaseInstanceName); else if (!m_environment.glES && glVersion >= 460) - Append("gl_BaseInstance"); + Append("uint(gl_BaseInstance)"); else - Append("gl_BaseInstanceARB"); + Append("uint(gl_BaseInstanceARB)"); break; } @@ -663,9 +665,9 @@ namespace nzsl if (m_currentState->hasDrawParametersBaseVertexUniform) Append(s_glslWriterShaderDrawParametersBaseVertexName); else if (!m_environment.glES && glVersion >= 460) - Append("gl_BaseVertex"); + Append("uint(gl_BaseVertex)"); else - Append("gl_BaseVertexARB"); + Append("uint(gl_BaseVertexARB)"); break; } @@ -674,15 +676,15 @@ namespace nzsl if (m_currentState->hasDrawParametersDrawIndexUniform) Append(s_glslWriterShaderDrawParametersDrawIndexName); else if (!m_environment.glES && glVersion >= 460) - Append("gl_DrawID"); + Append("uint(gl_DrawID)"); else - Append("gl_DrawIDARB"); + Append("uint(gl_DrawIDARB)"); break; } case Ast::BuiltinEntry::InstanceIndex: { - Append("(", Ast::BuiltinEntry::BaseInstance, " + gl_InstanceID)"); + Append(Ast::BuiltinEntry::BaseInstance, " + uint(gl_InstanceID)"); break; } @@ -690,7 +692,16 @@ namespace nzsl { auto it = s_glslBuiltinMapping.find(builtin); assert(it != s_glslBuiltinMapping.end()); - Append(it->second.identifier); + const std::array builtinsToCast { + Ast::BuiltinEntry::LocalInvocationIndex, + Ast::BuiltinEntry::VertexIndex, + Ast::BuiltinEntry::WorkgroupCount, + Ast::BuiltinEntry::WorkgroupIndices, + }; + if (std::find(builtinsToCast.begin(), builtinsToCast.end(), it->first) != builtinsToCast.end()) + Append("uint(", it->second.identifier, ')'); + else + Append(it->second.identifier); } } } @@ -1332,13 +1343,13 @@ namespace nzsl if (m_currentState->hasDrawParametersBaseInstanceUniform || m_currentState->hasDrawParametersBaseVertexUniform || m_currentState->hasDrawParametersDrawIndexUniform) { if (m_currentState->hasDrawParametersBaseInstanceUniform) - AppendLine("uniform int ", s_glslWriterShaderDrawParametersBaseInstanceName, ";"); + AppendLine("uniform uint ", s_glslWriterShaderDrawParametersBaseInstanceName, ";"); if (m_currentState->hasDrawParametersBaseVertexUniform) - AppendLine("uniform int ", s_glslWriterShaderDrawParametersBaseVertexName, ";"); + AppendLine("uniform uint ", s_glslWriterShaderDrawParametersBaseVertexName, ";"); if (m_currentState->hasDrawParametersDrawIndexUniform) - AppendLine("uniform int ", s_glslWriterShaderDrawParametersDrawIndexName, ";"); + AppendLine("uniform uint ", s_glslWriterShaderDrawParametersDrawIndexName, ";"); AppendLine(); } diff --git a/src/NZSL/Lang/LangData.hpp b/src/NZSL/Lang/LangData.hpp index d62a6c99..8523b0f1 100644 --- a/src/NZSL/Lang/LangData.hpp +++ b/src/NZSL/Lang/LangData.hpp @@ -54,16 +54,16 @@ namespace nzsl::LangData }; constexpr auto s_builtinData = frozen::make_unordered_map({ - { Ast::BuiltinEntry::BaseInstance, { "base_instance", ShaderStageType::Vertex, Ast::PrimitiveType::Int32 } }, - { Ast::BuiltinEntry::BaseVertex, { "base_vertex", ShaderStageType::Vertex, Ast::PrimitiveType::Int32 } }, - { Ast::BuiltinEntry::DrawIndex, { "draw_index", ShaderStageType::Vertex, Ast::PrimitiveType::Int32 } }, + { Ast::BuiltinEntry::BaseInstance, { "base_instance", ShaderStageType::Vertex, Ast::PrimitiveType::UInt32 } }, + { Ast::BuiltinEntry::BaseVertex, { "base_vertex", ShaderStageType::Vertex, Ast::PrimitiveType::UInt32 } }, + { Ast::BuiltinEntry::DrawIndex, { "draw_index", ShaderStageType::Vertex, Ast::PrimitiveType::UInt32 } }, { Ast::BuiltinEntry::FragCoord, { "frag_coord", ShaderStageType::Fragment, Ast::VectorType { 4, Ast::PrimitiveType::Float32 } } }, { Ast::BuiltinEntry::FragDepth, { "frag_depth", ShaderStageType::Fragment, Ast::PrimitiveType::Float32 } }, { Ast::BuiltinEntry::GlocalInvocationIndices, { "global_invocation_indices", ShaderStageType::Compute, Ast::VectorType { 3, Ast::PrimitiveType::UInt32 } } }, - { Ast::BuiltinEntry::InstanceIndex, { "instance_index", ShaderStageType::Vertex, Ast::PrimitiveType::Int32 } }, + { Ast::BuiltinEntry::InstanceIndex, { "instance_index", ShaderStageType::Vertex, Ast::PrimitiveType::UInt32 } }, { Ast::BuiltinEntry::LocalInvocationIndex, { "local_invocation_index", ShaderStageType::Compute, Ast::PrimitiveType::UInt32 } }, { Ast::BuiltinEntry::LocalInvocationIndices, { "local_invocation_indices", ShaderStageType::Compute, Ast::VectorType { 3, Ast::PrimitiveType::UInt32 } } }, - { Ast::BuiltinEntry::VertexIndex, { "vertex_index", ShaderStageType::Vertex, Ast::PrimitiveType::Int32 } }, + { Ast::BuiltinEntry::VertexIndex, { "vertex_index", ShaderStageType::Vertex, Ast::PrimitiveType::UInt32 } }, { Ast::BuiltinEntry::VertexPosition, { "position", ShaderStageType::Vertex, Ast::VectorType { 4, Ast::PrimitiveType::Float32 } } }, { Ast::BuiltinEntry::WorkgroupCount, { "workgroup_count", ShaderStageType::Compute, Ast::VectorType { 3, Ast::PrimitiveType::UInt32 } } }, { Ast::BuiltinEntry::WorkgroupIndices, { "workgroup_indices", ShaderStageType::Compute, Ast::VectorType { 3, Ast::PrimitiveType::UInt32 } } } diff --git a/src/NZSL/WgslWriter.cpp b/src/NZSL/WgslWriter.cpp index ebd0670d..0c1e9f55 100644 --- a/src/NZSL/WgslWriter.cpp +++ b/src/NZSL/WgslWriter.cpp @@ -46,18 +46,16 @@ namespace nzsl { - constexpr std::string_view s_wgslWriterShaderDrawParametersBaseInstanceName = "_nzslBaseInstance"; - constexpr std::string_view s_wgslWriterShaderDrawParametersBaseVertexName = "_nzslBaseVertex"; - constexpr std::string_view s_wgslWriterShaderDrawParametersDrawIndexName = "_nzslDrawID"; + constexpr std::string_view s_wgslWriterBuiltinEmulationStructName = "_nzslBuiltinEmulation"; enum class WgslFeature { None = -1, - - - ShaderDrawParametersBaseInstance, // Emulation - ShaderDrawParametersBaseVertex, // Emulation - ShaderDrawParametersDrawIndex, // Emulation + + // Emulation + EmulateBaseInstance, + EmulateBaseVertex, + EmulateDrawIndex, // wgpu native features WgpuBufferBindingArray, @@ -73,32 +71,33 @@ namespace nzsl { std::string_view identifier; WgslFeature requiredFeature; - Ast::ExpressionType type; }; - // TODO: find a way to use frozen::make_unordered_map - const auto s_wgslBuiltinMapping = std::unordered_map({ - { Ast::BuiltinEntry::BaseInstance, { s_wgslWriterShaderDrawParametersBaseInstanceName, WgslFeature::ShaderDrawParametersBaseInstance, Ast::PrimitiveType::Int32 } }, - { Ast::BuiltinEntry::BaseVertex, { s_wgslWriterShaderDrawParametersBaseVertexName, WgslFeature::ShaderDrawParametersBaseVertex, Ast::PrimitiveType::Int32 } }, - { Ast::BuiltinEntry::DrawIndex, { s_wgslWriterShaderDrawParametersDrawIndexName, WgslFeature::ShaderDrawParametersDrawIndex, Ast::PrimitiveType::Int32 } }, - { Ast::BuiltinEntry::FragCoord, { "position", WgslFeature::None, Ast::VectorType{ .componentCount = 4, .type = Ast::PrimitiveType::Float32 } } }, - { Ast::BuiltinEntry::FragDepth, { "frag_depth", WgslFeature::None, Ast::PrimitiveType::Float32 } }, - { Ast::BuiltinEntry::GlocalInvocationIndices, { "global_invocation_id", WgslFeature::None, Ast::VectorType{ .componentCount = 3, .type = Ast::PrimitiveType::UInt32 } } }, - { Ast::BuiltinEntry::InstanceIndex, { "instance_index", WgslFeature::None, Ast::PrimitiveType::UInt32 } }, - { Ast::BuiltinEntry::LocalInvocationIndex, { "local_invocation_index", WgslFeature::None, Ast::PrimitiveType::UInt32 } }, - { Ast::BuiltinEntry::LocalInvocationIndices, { "local_invocation_id", WgslFeature::None, Ast::VectorType{ .componentCount = 3, .type = Ast::PrimitiveType::UInt32 } } }, - { Ast::BuiltinEntry::VertexIndex, { "vertex_index", WgslFeature::None, Ast::PrimitiveType::UInt32 } }, - { Ast::BuiltinEntry::VertexPosition, { "position", WgslFeature::None, Ast::VectorType{ .componentCount = 4, .type = Ast::PrimitiveType::Float32 } } }, - { Ast::BuiltinEntry::WorkgroupCount, { "num_workgroups", WgslFeature::None, Ast::VectorType{ .componentCount = 3, .type = Ast::PrimitiveType::UInt32 } } }, - { Ast::BuiltinEntry::WorkgroupIndices, { "workgroup_id", WgslFeature::None, Ast::VectorType{ .componentCount = 3, .type = Ast::PrimitiveType::UInt32 } } } + const auto s_wgslBuiltinMapping = frozen::make_unordered_map({ + { Ast::BuiltinEntry::BaseInstance, { "base_instance", WgslFeature::EmulateBaseInstance } }, + { Ast::BuiltinEntry::BaseVertex, { "base_vertex", WgslFeature::EmulateBaseVertex } }, + { Ast::BuiltinEntry::DrawIndex, { "draw_index", WgslFeature::EmulateDrawIndex } }, + { Ast::BuiltinEntry::FragCoord, { "position", WgslFeature::None } }, + { Ast::BuiltinEntry::FragDepth, { "frag_depth", WgslFeature::None } }, + { Ast::BuiltinEntry::GlocalInvocationIndices, { "global_invocation_id", WgslFeature::None } }, + { Ast::BuiltinEntry::InstanceIndex, { "instance_index", WgslFeature::None } }, + { Ast::BuiltinEntry::LocalInvocationIndex, { "local_invocation_index", WgslFeature::None } }, + { Ast::BuiltinEntry::LocalInvocationIndices, { "local_invocation_id", WgslFeature::None } }, + { Ast::BuiltinEntry::VertexIndex, { "vertex_index", WgslFeature::None } }, + { Ast::BuiltinEntry::VertexPosition, { "position", WgslFeature::None } }, + { Ast::BuiltinEntry::WorkgroupCount, { "num_workgroups", WgslFeature::None } }, + { Ast::BuiltinEntry::WorkgroupIndices, { "workgroup_id", WgslFeature::None } }, }); + const std::array s_wgslBuiltinsToEmulate { + Ast::BuiltinEntry::BaseInstance, + Ast::BuiltinEntry::BaseVertex, + Ast::BuiltinEntry::DrawIndex, + }; + struct WgslWriter::PreVisitor : Ast::RecursiveVisitor { - PreVisitor(WgslWriter& writer) : - m_writer(writer) - { - } + PreVisitor(WgslWriter& writer) : m_writer(writer) {} void Visit(Ast::DeclareFunctionStatement& node) override { @@ -117,6 +116,33 @@ namespace nzsl if (node.earlyFragmentTests.HasValue() && node.earlyFragmentTests.GetResultingValue()) features.insert(WgslFeature::WgpuEarlyFragmentTests); } + + if (!node.parameters.empty()) + { + assert(node.parameters.size() == 1); + auto& parameter = node.parameters.front(); + const auto& parameterType = parameter.type.GetResultingValue(); + + assert(std::holds_alternative(parameterType)); + + std::size_t structIndex = std::get(parameterType).structIndex; + const Ast::StructDescription* structDesc = Nz::Retrieve(structs, structIndex); + + for (const auto& member : structDesc->members) + { + if (member.cond.HasValue() && !member.cond.GetResultingValue()) + continue; + + if (member.builtin.HasValue()) + { + auto it = s_wgslBuiltinMapping.find(member.builtin.GetResultingValue()); + assert(it != s_wgslBuiltinMapping.end()); + + if (it->second.requiredFeature != WgslFeature::None) + features.insert(it->second.requiredFeature); + } + } + } } RecursiveVisitor::Visit(node); @@ -172,8 +198,15 @@ namespace nzsl intrinsicHelpers[IntrinsicHelper::NaN].emplace(node.type); } - tsl::ordered_set features; + void Visit(Ast::DeclareStructStatement& node) override + { + structs[node.structIndex.value()] = &node.description; + RecursiveVisitor::Visit(node); + } + + std::unordered_map structs; std::unordered_map> intrinsicHelpers; + tsl::ordered_set features; WgslWriter& m_writer; }; @@ -333,6 +366,7 @@ namespace nzsl std::unordered_map structs; std::unordered_map variables; std::unordered_map bindingRemap; + std::unordered_set reservedBindings; std::vector externalBlockNames; std::vector moduleNames; const BackendParameters& backendParameters; @@ -420,7 +454,7 @@ namespace nzsl auto validateFeature = [&](std::string_view featureName, std::string_view featurePrettyName) { if (!m_environment.featuresCallback || !m_environment.featuresCallback(featureName)) - throw std::runtime_error(fmt::format("WGSL does not support {} feature, some implementations do natively but you need to confirm its usage using feature callback", featurePrettyName)); + throw std::runtime_error(fmt::format("WGSL does not support {} feature, {}you need to confirm its usage using feature callback", featurePrettyName, (featureName.find("Wgpu") != std::string::npos ? "some implementations do natively but " : ""))); }; for (WgslFeature feature : previsitor.features) @@ -429,20 +463,58 @@ namespace nzsl { case WgslFeature::None: break; - case WgslFeature::ShaderDrawParametersBaseInstance: validateFeature("ShaderDrawParametersBaseInstance", "base instance attribute"); break; - case WgslFeature::ShaderDrawParametersBaseVertex: validateFeature("ShaderDrawParametersBaseVertex", "base vertex attribute"); break; - case WgslFeature::ShaderDrawParametersDrawIndex: validateFeature("ShaderDrawParametersDrawIndex", "draw index attribute"); break; - - case WgslFeature::WgpuBufferBindingArray: validateFeature("WgpuBufferBindingArray", "buffer binding array"); break; - case WgslFeature::WgpuConservativeDepth: validateFeature("WgpuConservativeDepth", "conservative depth"); break; - case WgslFeature::WgpuEarlyFragmentTests: validateFeature("WgpuEarlyFragmentTests", "early fragment depth test"); break; - case WgslFeature::WgpuFloat64: validateFeature("WgpuFloat64", "float 64"); break; - case WgslFeature::WgpuPushConstants: validateFeature("WgpuPushConstants", "push constants"); break; - case WgslFeature::WgpuStorageBindingArray: validateFeature("WgpuStorageBindingArray", "storage resource binding array"); break; - case WgslFeature::WgpuTextureBindingArray: validateFeature("WgpuTextureBindingArray", "texture binding array"); break; + case WgslFeature::EmulateBaseInstance: + { + validateFeature("EmulateBaseInstance", "base instance attribute"); + m_currentState->hasDrawParametersBaseInstanceUniform = true; + break; + } + case WgslFeature::EmulateBaseVertex: + { + validateFeature("EmulateBaseVertex", "base vertex attribute"); + m_currentState->hasDrawParametersBaseVertexUniform = true; + break; + } + case WgslFeature::EmulateDrawIndex: + { + validateFeature("EmulateDrawIndex", "draw index attribute"); + m_currentState->hasDrawParametersDrawIndexUniform = true; + break; + } + + case WgslFeature::WgpuBufferBindingArray: validateFeature("WgpuBufferBindingArray", "buffer binding array"); break; + case WgslFeature::WgpuConservativeDepth: validateFeature("WgpuConservativeDepth", "conservative depth"); break; + case WgslFeature::WgpuEarlyFragmentTests: validateFeature("WgpuEarlyFragmentTests", "early fragment depth test"); break; + case WgslFeature::WgpuFloat64: validateFeature("WgpuFloat64", "float 64"); break; + case WgslFeature::WgpuPushConstants: validateFeature("WgpuPushConstants", "push constants"); break; + case WgslFeature::WgpuStorageBindingArray: validateFeature("WgpuStorageBindingArray", "storage resource binding array"); break; + case WgslFeature::WgpuTextureBindingArray: validateFeature("WgpuTextureBindingArray", "texture binding array"); break; } } + if (m_currentState->hasDrawParametersBaseInstanceUniform || m_currentState->hasDrawParametersBaseVertexUniform || m_currentState->hasDrawParametersDrawIndexUniform) + { + AppendLine("struct ", s_wgslWriterBuiltinEmulationStructName, "Struct"); + EnterScope(); + { + if (m_currentState->hasDrawParametersBaseInstanceUniform) + AppendLine(s_wgslBuiltinMapping.at(Ast::BuiltinEntry::BaseInstance).identifier, ": u32,"); + if (m_currentState->hasDrawParametersBaseVertexUniform) + AppendLine(s_wgslBuiltinMapping.at(Ast::BuiltinEntry::BaseVertex).identifier, ": u32,"); + if (m_currentState->hasDrawParametersDrawIndexUniform) + AppendLine(s_wgslBuiltinMapping.at(Ast::BuiltinEntry::DrawIndex).identifier, ": u32,"); + } + LeaveScope(); + + const std::uint64_t emulationBindingGroup = 0; + std::uint32_t binding = 0; + for (; m_currentState->reservedBindings.count(emulationBindingGroup << 32 | binding); binding++); + m_currentState->reservedBindings.emplace(emulationBindingGroup << 32 | binding); + AppendLine("@group(", emulationBindingGroup, ") @binding(", binding, ") var ", s_wgslWriterBuiltinEmulationStructName, ": ", s_wgslWriterBuiltinEmulationStructName, "Struct;"); + + AppendLine(); + } + // Register imported modules m_currentState->currentModuleIndex = 0; for (const auto& importedModule : module.importedModules) @@ -467,6 +539,9 @@ namespace nzsl Output output; output.code = std::move(state.stream).str(); output.bindingRemap = std::move(state.bindingRemap); + output.usesDrawParameterBaseInstanceUniform = m_currentState->hasDrawParametersBaseInstanceUniform; + output.usesDrawParameterBaseVertexUniform = m_currentState->hasDrawParametersBaseVertexUniform; + output.usesDrawParameterDrawIndexUniform = m_currentState->hasDrawParametersDrawIndexUniform; return output; } @@ -1004,13 +1079,15 @@ namespace nzsl { if (!attribute.HasValue()) return; - if (!first) - Append(" "); - Append("@"); auto it = s_wgslBuiltinMapping.find(attribute.builtin.GetResultingValue()); assert(it != s_wgslBuiltinMapping.end()); if (it->second.identifier.empty()) - throw std::runtime_error("unsupported builtin attribute! (for now)"); + throw std::runtime_error("unsupported builtin attribute!"); + else if (std::find(s_wgslBuiltinsToEmulate.begin(), s_wgslBuiltinsToEmulate.end(), it->first) != s_wgslBuiltinsToEmulate.end()) + return; + if (!first) + Append(" "); + Append("@"); Append("builtin(", it->second.identifier, ")"); } @@ -1103,8 +1180,14 @@ namespace nzsl Append(" "); Append("@interpolate("); + const auto interpQualifierNames = frozen::make_unordered_map({ + { Ast::InterpolationQualifier::Flat, "flat" }, + { Ast::InterpolationQualifier::NoPerspective, "perspective" }, + { Ast::InterpolationQualifier::Smooth, "linear" }, + }); + if (attribute.interpQualifier.IsResultingValue()) - Append(Parser::ToString(attribute.interpQualifier.GetResultingValue())); + Append(interpQualifierNames.at(attribute.interpQualifier.GetResultingValue())); else attribute.interpQualifier.GetExpression()->Visit(*this); @@ -1596,7 +1679,12 @@ namespace nzsl void WgslWriter::Visit(Ast::AccessFieldExpression& node) { - Visit(node.expr, true); + // In this implementation we do not visit struct identifier first + // as if we access an emulated builtin we do not want struct's name + // in front. + // Instead we search for member to access, if it is an emulated builtin + // we append it's uniform name. If not we store the access statement + // in a string, visit struct's name and then append the statement. const Ast::ExpressionType* exprType = GetExpressionType(*node.expr); NazaraUnused(exprType); @@ -1608,6 +1696,8 @@ namespace nzsl const auto& structData = Nz::Retrieve(m_currentState->structs, structIndex); + std::string_view memberName; + std::uint32_t remainingIndices = node.fieldIndex; for (const auto& member : structData.desc->members) { @@ -1616,12 +1706,25 @@ namespace nzsl if (remainingIndices == 0) { - Append(".", member.name); + if (member.builtin.HasValue()) + { + if (std::find(s_wgslBuiltinsToEmulate.begin(), s_wgslBuiltinsToEmulate.end(), member.builtin.GetResultingValue()) != s_wgslBuiltinsToEmulate.end()) + { + auto it = s_wgslBuiltinMapping.find(member.builtin.GetResultingValue()); + assert(it != s_wgslBuiltinMapping.end()); + Append(s_wgslWriterBuiltinEmulationStructName, '.', it->second.identifier); + return; + } + } + memberName = member.name; break; } remainingIndices--; } + + Visit(node.expr, true); + Append('.', memberName); } void WgslWriter::Visit(Ast::AccessIdentifierExpression& node) @@ -2221,8 +2324,6 @@ namespace nzsl AppendLine(); - std::unordered_set reservedBindings; - for (const auto& externalVar : node.externalVars) { if (!externalVar.tag.empty() && m_currentState->backendParameters.debugLevel >= DebugLevel::Minimal) @@ -2233,15 +2334,15 @@ namespace nzsl std::uint32_t binding = 0; std::uint64_t bindingSet = (externalVar.bindingSet.HasValue()) ? externalVar.bindingSet.GetResultingValue() : 0; - // Binding group declaration in WGSL in built like this + // Binding group declaration in WGSL are built like this // @group(G) @binding(B) var name : TYPE; // Binding group handling if (!IsPushConstantType(exprType)) // Push constants don't have set or binding { binding = externalVar.bindingIndex.GetResultingValue(); - for (; reservedBindings.count(bindingSet << 32 | binding); binding++); - reservedBindings.emplace(bindingSet << 32 | binding); + for (; m_currentState->reservedBindings.count(bindingSet << 32 | binding); binding++); + m_currentState->reservedBindings.emplace(bindingSet << 32 | binding); m_currentState->bindingRemap[bindingSet << 32 | externalVar.bindingIndex.GetResultingValue()] = binding; AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding } }); @@ -2295,7 +2396,7 @@ namespace nzsl // WGSL has not (yet?) combined image samplers so we need to split textures and samplers AppendLine(';'); // Closing last line AppendAttributes(false, SetAttribute{ externalVar.bindingSet }, BindingAttribute{ Ast::ExpressionValue{ binding + 1 } }); - reservedBindings.emplace(bindingSet << 32 | binding + 1); + m_currentState->reservedBindings.emplace(bindingSet << 32 | binding + 1); Append("var ", variableName, "Sampler: sampler"); if (std::get(rawOrContainedType).depth) Append("_comparison"); @@ -2409,17 +2510,19 @@ namespace nzsl bool first = true; for (const auto& member : node.description.members) { + // If builtin needs emulation, skip struct declaration as all shader + // input struct members need builtin or location attributes + if (member.builtin.HasValue()) + { + if (std::find(s_wgslBuiltinsToEmulate.begin(), s_wgslBuiltinsToEmulate.end(), member.builtin.GetResultingValue()) != s_wgslBuiltinsToEmulate.end()) + continue; + } if (!first) AppendLine(","); - first = false; AppendAttributes(false, CondAttribute{ member.cond }, LocationAttribute{ member.locationIndex }, InterpAttribute{ member.interp }, BuiltinAttribute{ member.builtin }, TagAttribute{ member.tag }); - Append(member.name, ": "); - if (member.builtin.HasValue()) - Append(s_wgslBuiltinMapping.at(member.builtin.GetResultingValue()).type); - else - Append(member.type); + Append(member.name, ": ", member.type); } } LeaveScope(); diff --git a/tests/src/Tests/ArrayTests.cpp b/tests/src/Tests/ArrayTests.cpp index dfe8461a..de771b19 100644 --- a/tests/src/Tests/ArrayTests.cpp +++ b/tests/src/Tests/ArrayTests.cpp @@ -20,7 +20,7 @@ const vertices = array[vec3[f32]]( struct VertIn { - [builtin(vertex_index)] vert_index: i32 + [builtin(vertex_index)] vert_index: u32 } struct VertOut @@ -32,7 +32,7 @@ struct VertOut fn main(input: VertIn) -> VertOut { let output: VertOut; - if (u32(input.vert_index) < vertices.Size()) + if (input.vert_index < vertices.Size()) output.pos = vec4[f32](vertices[input.vert_index], 1.0); else output.pos = vec4[f32](0.0, 0.0, 0.0, 0.0); @@ -56,7 +56,7 @@ vec3 vertices[3] = vec3[3]( ); struct VertIn { - int vert_index; + uint vert_index; }; struct VertOut @@ -67,10 +67,10 @@ struct VertOut void main() { VertIn input_; - input_.vert_index = gl_VertexID; + input_.vert_index = uint(gl_VertexID); VertOut output_; - if ((uint(input_.vert_index)) < (uint(vertices.length()))) + if (input_.vert_index < (uint(vertices.length()))) { output_.pos = vec4(vertices[input_.vert_index], 1.0); } @@ -90,7 +90,7 @@ const vertices: array[vec3[f32], 3] = array[vec3[f32], 3](vec3[f32](1.0, 2.0, 3. struct VertIn { - [builtin(vertex_index)] vert_index: i32 + [builtin(vertex_index)] vert_index: u32 } struct VertOut @@ -102,7 +102,7 @@ struct VertOut fn main(input: VertIn) -> VertOut { let output: VertOut; - if ((u32(input.vert_index)) < (vertices.Size())) + if (input.vert_index < (vertices.Size())) { output.pos = vec4[f32](vertices[input.vert_index], 1.0); } @@ -137,11 +137,11 @@ fn main(input: VertIn) -> VertOut %19 = OpConstantComposite %5 %10 %14 %18 %21 = OpTypeVoid %22 = OpTypeFunction %21 -%23 = OpTypeInt 32 1 -%24 = OpTypePointer StorageClass(Input) %23 -%26 = OpConstant %23 i32(0) -%27 = OpTypePointer StorageClass(Function) %23 -%28 = OpTypeStruct %23 +%23 = OpTypePointer StorageClass(Input) %3 +%25 = OpTypeInt 32 1 +%26 = OpConstant %25 i32(0) +%27 = OpTypePointer StorageClass(Function) %3 +%28 = OpTypeStruct %3 %29 = OpTypePointer StorageClass(Function) %28 %30 = OpTypeVector %1 4 %31 = OpTypePointer StorageClass(Output) %30 @@ -149,18 +149,18 @@ fn main(input: VertIn) -> VertOut %34 = OpTypePointer StorageClass(Function) %33 %35 = OpTypeBool %36 = OpConstant %1 f32(0) -%37 = OpConstant %23 i32(1) -%38 = OpConstant %23 i32(2) -%39 = OpConstant %23 i32(3) -%40 = OpConstant %23 i32(4) -%41 = OpConstant %23 i32(5) +%37 = OpConstant %25 i32(1) +%38 = OpConstant %25 i32(2) +%39 = OpConstant %25 i32(3) +%40 = OpConstant %25 i32(4) +%41 = OpConstant %25 i32(5) %42 = OpConstant %3 u32(5) -%43 = OpTypeArray %23 %42 +%43 = OpTypeArray %25 %42 %44 = OpTypePointer StorageClass(Function) %43 -%60 = OpTypePointer StorageClass(Private) %2 -%65 = OpTypePointer StorageClass(Function) %30 +%59 = OpTypePointer StorageClass(Private) %2 +%64 = OpTypePointer StorageClass(Function) %30 %20 = OpVariable %6 StorageClass(Private) %19 -%25 = OpVariable %24 StorageClass(Input) +%24 = OpVariable %23 StorageClass(Input) %32 = OpVariable %31 StorageClass(Output) %45 = OpFunction %21 FunctionControl(0) %22 %46 = OpLabel @@ -168,33 +168,32 @@ fn main(input: VertIn) -> VertOut %48 = OpVariable %44 StorageClass(Function) %49 = OpVariable %29 StorageClass(Function) %50 = OpAccessChain %27 %49 %26 - OpCopyMemory %50 %25 + OpCopyMemory %50 %24 %54 = OpAccessChain %27 %49 %26 -%55 = OpLoad %23 %54 -%56 = OpBitcast %3 %55 -%57 = OpULessThan %35 %56 %4 +%55 = OpLoad %3 %54 +%56 = OpULessThan %35 %55 %4 OpSelectionMerge %51 SelectionControl(0) - OpBranchConditional %57 %52 %53 + OpBranchConditional %56 %52 %53 %52 = OpLabel -%58 = OpAccessChain %27 %49 %26 -%59 = OpLoad %23 %58 -%61 = OpAccessChain %60 %20 %59 -%62 = OpLoad %2 %61 -%63 = OpCompositeConstruct %30 %62 %7 -%64 = OpAccessChain %65 %47 %26 - OpStore %64 %63 +%57 = OpAccessChain %27 %49 %26 +%58 = OpLoad %3 %57 +%60 = OpAccessChain %59 %20 %58 +%61 = OpLoad %2 %60 +%62 = OpCompositeConstruct %30 %61 %7 +%63 = OpAccessChain %64 %47 %26 + OpStore %63 %62 OpBranch %51 %53 = OpLabel -%66 = OpCompositeConstruct %30 %36 %36 %36 %36 -%67 = OpAccessChain %65 %47 %26 - OpStore %67 %66 +%65 = OpCompositeConstruct %30 %36 %36 %36 %36 +%66 = OpAccessChain %64 %47 %26 + OpStore %66 %65 OpBranch %51 %51 = OpLabel -%68 = OpCompositeConstruct %43 %37 %38 %39 %40 %41 - OpStore %48 %68 -%69 = OpLoad %33 %47 -%70 = OpCompositeExtract %30 %69 0 - OpStore %32 %70 +%67 = OpCompositeConstruct %43 %37 %38 %39 %40 %41 + OpStore %48 %67 +%68 = OpLoad %33 %47 +%69 = OpCompositeExtract %30 %68 0 + OpStore %32 %69 OpReturn OpFunctionEnd)", {}, {}, true); @@ -219,7 +218,7 @@ struct VertOut fn main(input: VertIn) -> VertOut { var output: VertOut; - if ((u32(input.vert_index)) < (3)) + if (input.vert_index < (3)) { output.pos = vec4(vertices[input.vert_index], 1.0); } diff --git a/tests/src/Tests/BuiltinAttributeTests.cpp b/tests/src/Tests/BuiltinAttributeTests.cpp index 8382fdfc..36b1cf2a 100644 --- a/tests/src/Tests/BuiltinAttributeTests.cpp +++ b/tests/src/Tests/BuiltinAttributeTests.cpp @@ -15,11 +15,11 @@ module; struct Input { - [builtin(base_instance)] base_instance: i32, - [builtin(base_vertex)] base_vertex: i32, - [builtin(draw_index)] draw_index: i32, - [builtin(instance_index)] instance_index: i32, - [builtin(vertex_index)] vertex_index: i32, + [builtin(base_instance)] base_instance: u32, + [builtin(base_vertex)] base_vertex: u32, + [builtin(draw_index)] draw_index: u32, + [builtin(instance_index)] instance_index: u32, + [builtin(vertex_index)] vertex_index: u32, } struct Output @@ -67,11 +67,11 @@ fn main(input: Input) -> Output struct Input { - int base_instance; - int base_vertex; - int draw_index; - int instance_index; - int vertex_index; + uint base_instance; + uint base_vertex; + uint draw_index; + uint instance_index; + uint vertex_index; }; struct Output @@ -82,17 +82,17 @@ struct Output void main() { Input input_; - input_.base_instance = gl_BaseInstanceARB; - input_.base_vertex = gl_BaseVertexARB; - input_.draw_index = gl_DrawIDARB; - input_.instance_index = (gl_BaseInstanceARB + gl_InstanceID); - input_.vertex_index = gl_VertexID; - - int bi = input_.base_instance; - int bv = input_.base_vertex; - int di = input_.draw_index; - int ii = input_.instance_index; - int vi = input_.vertex_index; + input_.base_instance = uint(gl_BaseInstanceARB); + input_.base_vertex = uint(gl_BaseVertexARB); + input_.draw_index = uint(gl_DrawIDARB); + input_.instance_index = uint(gl_BaseInstanceARB) + uint(gl_InstanceID); + input_.vertex_index = uint(gl_VertexID); + + uint bi = input_.base_instance; + uint bv = input_.base_vertex; + uint di = input_.draw_index; + uint ii = input_.instance_index; + uint vi = input_.vertex_index; float color = float((((bi + bv) + di) + ii) + vi); Output output_; output_.position = vec4(color, color, color, color); @@ -112,11 +112,11 @@ void main() ExpectGLSL(*shaderModule, R"( struct Input { - int base_instance; - int base_vertex; - int draw_index; - int instance_index; - int vertex_index; + uint base_instance; + uint base_vertex; + uint draw_index; + uint instance_index; + uint vertex_index; }; struct Output @@ -127,17 +127,17 @@ struct Output void main() { Input input_; - input_.base_instance = gl_BaseInstance; - input_.base_vertex = gl_BaseVertex; - input_.draw_index = gl_DrawID; - input_.instance_index = (gl_BaseInstance + gl_InstanceID); - input_.vertex_index = gl_VertexID; - - int bi = input_.base_instance; - int bv = input_.base_vertex; - int di = input_.draw_index; - int ii = input_.instance_index; - int vi = input_.vertex_index; + input_.base_instance = uint(gl_BaseInstance); + input_.base_vertex = uint(gl_BaseVertex); + input_.draw_index = uint(gl_DrawID); + input_.instance_index = uint(gl_BaseInstance) + uint(gl_InstanceID); + input_.vertex_index = uint(gl_VertexID); + + uint bi = input_.base_instance; + uint bv = input_.base_vertex; + uint di = input_.draw_index; + uint ii = input_.instance_index; + uint vi = input_.vertex_index; float color = float((((bi + bv) + di) + ii) + vi); Output output_; output_.position = vec4(color, color, color, color); @@ -153,19 +153,19 @@ void main() glslEnv.allowDrawParametersUniformsFallback = true; ExpectGLSL(*shaderModule, R"( -uniform int _nzslBaseInstance; -uniform int _nzslBaseVertex; -uniform int _nzslDrawID; +uniform uint _nzslBaseInstance; +uniform uint _nzslBaseVertex; +uniform uint _nzslDrawID; // header end struct Input { - int base_instance; - int base_vertex; - int draw_index; - int instance_index; - int vertex_index; + uint base_instance; + uint base_vertex; + uint draw_index; + uint instance_index; + uint vertex_index; }; struct Output @@ -179,14 +179,14 @@ void main() input_.base_instance = _nzslBaseInstance; input_.base_vertex = _nzslBaseVertex; input_.draw_index = _nzslDrawID; - input_.instance_index = (_nzslBaseInstance + gl_InstanceID); - input_.vertex_index = gl_VertexID; - - int bi = input_.base_instance; - int bv = input_.base_vertex; - int di = input_.draw_index; - int ii = input_.instance_index; - int vi = input_.vertex_index; + input_.instance_index = _nzslBaseInstance + uint(gl_InstanceID); + input_.vertex_index = uint(gl_VertexID); + + uint bi = input_.base_instance; + uint bv = input_.base_vertex; + uint di = input_.draw_index; + uint ii = input_.instance_index; + uint vi = input_.vertex_index; float color = float((((bi + bv) + di) + ii) + vi); Output output_; output_.position = vec4(color, color, color, color); @@ -200,11 +200,11 @@ void main() ExpectNZSL(*shaderModule, R"( struct Input { - [builtin(base_instance)] base_instance: i32, - [builtin(base_vertex)] base_vertex: i32, - [builtin(draw_index)] draw_index: i32, - [builtin(instance_index)] instance_index: i32, - [builtin(vertex_index)] vertex_index: i32 + [builtin(base_instance)] base_instance: u32, + [builtin(base_vertex)] base_vertex: u32, + [builtin(draw_index)] draw_index: u32, + [builtin(instance_index)] instance_index: u32, + [builtin(vertex_index)] vertex_index: u32 } struct Output @@ -215,11 +215,11 @@ struct Output [entry(vert)] fn main(input: Input) -> Output { - let bi: i32 = input.base_instance; - let bv: i32 = input.base_vertex; - let di: i32 = input.draw_index; - let ii: i32 = input.instance_index; - let vi: i32 = input.vertex_index; + let bi: u32 = input.base_instance; + let bv: u32 = input.base_vertex; + let di: u32 = input.draw_index; + let ii: u32 = input.instance_index; + let vi: u32 = input.vertex_index; let color: f32 = f32((((bi + bv) + di) + ii) + vi); let output: Output; output.position = color.xxxx; @@ -240,22 +240,29 @@ fn main(input: Input) -> Output ExpectSPIRV(*shaderModule, R"( OpDecorate %5 Decoration(BuiltIn) BuiltIn(BaseInstance) - OpDecorate %8 Decoration(BuiltIn) BuiltIn(BaseVertex) - OpDecorate %10 Decoration(BuiltIn) BuiltIn(DrawIndex) - OpDecorate %12 Decoration(BuiltIn) BuiltIn(InstanceIndex) - OpDecorate %14 Decoration(BuiltIn) BuiltIn(VertexIndex) - OpDecorate %21 Decoration(BuiltIn) BuiltIn(Position))", {}, spirvEnv, true); + OpDecorate %9 Decoration(BuiltIn) BuiltIn(BaseVertex) + OpDecorate %11 Decoration(BuiltIn) BuiltIn(DrawIndex) + OpDecorate %13 Decoration(BuiltIn) BuiltIn(InstanceIndex) + OpDecorate %15 Decoration(BuiltIn) BuiltIn(VertexIndex) + OpDecorate %22 Decoration(BuiltIn) BuiltIn(Position))", {}, spirvEnv, true); } -// Needs to emulate draw_index, base_instance and base_vertex -#ifndef FAILING_WGSL + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; + ExpectWGSL(*shaderModule, R"( +struct _nzslBuiltinEmulationStruct +{ + base_instance: u32, + base_vertex: u32, + draw_index: u32, + +} +@group(0) @binding(0) var _nzslBuiltinEmulation: _nzslBuiltinEmulationStruct; + struct Input { - @builtin(base_instance) base_instance: i32, - @builtin(base_vertex) base_vertex: i32, - @builtin(draw_index) draw_index: i32, - @builtin(instance_index) instance_index: i32, + @builtin(instance_index) instance_index: u32, @builtin(vertex_index) vertex_index: u32 } @@ -267,18 +274,17 @@ struct Output @vertex fn main(input: Input) -> Output { - var bi: i32 = input.base_instance; - var bv: i32 = input.base_vertex; - var di: i32 = input.draw_index; - var ii: i32 = input.instance_index; + var bi: u32 = _nzslBuiltinEmulation.base_instance; + var bv: u32 = _nzslBuiltinEmulation.base_vertex; + var di: u32 = _nzslBuiltinEmulation.draw_index; + var ii: u32 = input.instance_index; var vi: u32 = input.vertex_index; var color: f32 = f32((((bi + bv) + di) + ii) + vi); var output: Output; - output.position = color.xxxx; + output.position = vec4(color, color, color, color); return output; } -)"); -#endif +)", {}, wgslEnv); } SECTION("vertex index") @@ -289,7 +295,7 @@ module; struct Input { - [builtin(vertex_index)] vert_index: i32 + [builtin(vertex_index)] vert_index: u32 } struct Output @@ -314,7 +320,7 @@ fn main(input: Input) -> Output ExpectGLSL(*shaderModule, R"( struct Input { - int vert_index; + uint vert_index; }; struct Output @@ -325,7 +331,7 @@ struct Output void main() { Input input_; - input_.vert_index = gl_VertexID; + input_.vert_index = uint(gl_VertexID); float color = float(input_.vert_index); Output output_; @@ -339,7 +345,7 @@ void main() ExpectNZSL(*shaderModule, R"( struct Input { - [builtin(vertex_index)] vert_index: i32 + [builtin(vertex_index)] vert_index: u32 } struct Output diff --git a/tests/src/Tests/InputOutputTests.cpp b/tests/src/Tests/InputOutputTests.cpp index e284cd84..35031a56 100644 --- a/tests/src/Tests/InputOutputTests.cpp +++ b/tests/src/Tests/InputOutputTests.cpp @@ -25,16 +25,17 @@ external struct VertIn { - [builtin(instance_index)] instance_index: i32, - [builtin(draw_index)] draw_index: i32, - [builtin(vertex_index)] vertex_index: i32 + [builtin(instance_index)] instance_index: u32, + [builtin(draw_index)] draw_index: u32, + [builtin(vertex_index)] vertex_index: u32 } struct VertOut { - [location(0), interp(flat)] instance_index: i32, + [location(0), interp(flat)] instance_index: u32, [location(1), interp(no_perspective)] x: f32, [location(2), interp(smooth)] y: f32, + [builtin(position)] position: vec4[f32], } struct FragOut @@ -58,6 +59,7 @@ fn main(input: VertIn) -> VertOut output.instance_index = input.instance_index; output.x = f32(input.draw_index); output.y = f32(input.vertex_index); + output.position = vec4[f32](0.0, 0.0, 0.0, 1.0); return output; } @@ -79,16 +81,17 @@ layout(std430) buffer _nzslBindingdata struct VertIn { - int instance_index; - int draw_index; - int vertex_index; + uint instance_index; + uint draw_index; + uint vertex_index; }; struct VertOut { - int instance_index; + uint instance_index; float x; float y; + vec4 position; }; struct FragOut @@ -97,25 +100,27 @@ struct FragOut }; /*************** Outputs ***************/ -layout(location = 0) flat out int _nzslOutinstance_index; +layout(location = 0) flat out uint _nzslOutinstance_index; layout(location = 1) noperspective out float _nzslOutx; layout(location = 2) smooth out float _nzslOuty; void main() { VertIn input_; - input_.instance_index = (gl_BaseInstance + gl_InstanceID); - input_.draw_index = gl_DrawID; - input_.vertex_index = gl_VertexID; + input_.instance_index = uint(gl_BaseInstance) + uint(gl_InstanceID); + input_.draw_index = uint(gl_DrawID); + input_.vertex_index = uint(gl_VertexID); VertOut output_; output_.instance_index = input_.instance_index; output_.x = float(input_.draw_index); output_.y = float(input_.vertex_index); + output_.position = vec4(0.0, 0.0, 0.0, 1.0); _nzslOutinstance_index = output_.instance_index; _nzslOutx = output_.x; _nzslOuty = output_.y; + gl_Position = output_.position; return; } )", {}, glslEnv); @@ -128,16 +133,17 @@ layout(std430) buffer _nzslBindingdata struct VertIn { - int instance_index; - int draw_index; - int vertex_index; + uint instance_index; + uint draw_index; + uint vertex_index; }; struct VertOut { - int instance_index; + uint instance_index; float x; float y; + vec4 position; }; struct FragOut @@ -146,7 +152,7 @@ struct FragOut }; /**************** Inputs ****************/ -layout(location = 0) flat in int _nzslIninstance_index; +layout(location = 0) flat in uint _nzslIninstance_index; layout(location = 1) noperspective in float _nzslInx; layout(location = 2) smooth in float _nzslIny; @@ -185,16 +191,17 @@ external struct VertIn { - [builtin(instance_index)] instance_index: i32, - [builtin(draw_index)] draw_index: i32, - [builtin(vertex_index)] vertex_index: i32 + [builtin(instance_index)] instance_index: u32, + [builtin(draw_index)] draw_index: u32, + [builtin(vertex_index)] vertex_index: u32 } struct VertOut { - [location(0), interp(flat)] instance_index: i32, + [location(0), interp(flat)] instance_index: u32, [location(1), interp(no_perspective)] x: f32, - [location(2), interp(smooth)] y: f32 + [location(2), interp(smooth)] y: f32, + [builtin(position)] position: vec4[f32] } struct FragOut @@ -217,6 +224,7 @@ fn main(input: VertIn) -> VertOut output.instance_index = input.instance_index; output.x = f32(input.draw_index); output.y = f32(input.vertex_index); + output.position = vec4[f32](0.0, 0.0, 0.0, 1.0); return output; } )"); @@ -226,65 +234,68 @@ fn main(input: VertIn) -> VertOut spirvEnv.spvMinorVersion = 3; ExpectSPIRV(*shaderModule, R"( - OpCapability Capability(Shader) OpCapability Capability(DrawParameters) OpMemoryModel AddressingModel(Logical) MemoryModel(GLSL450) - OpEntryPoint ExecutionModel(Fragment) %37 "main" %11 %15 %18 %23 - OpEntryPoint ExecutionModel(Vertex) %38 "main" %27 %28 %29 %33 %35 %36 - OpExecutionMode %37 ExecutionMode(OriginUpperLeft) + OpEntryPoint ExecutionModel(Fragment) %42 "main" %11 %16 %19 %24 + OpEntryPoint ExecutionModel(Vertex) %43 "main" %28 %29 %30 %34 %36 %37 %38 + OpExecutionMode %42 ExecutionMode(OriginUpperLeft) OpSource SourceLanguage(NZSL) 4198400 OpSourceExtension "Version: 1.1" OpName %4 "ColorData" OpMemberName %4 0 "colors" - OpName %20 "VertOut" - OpMemberName %20 0 "instance_index" - OpMemberName %20 1 "x" - OpMemberName %20 2 "y" - OpName %24 "FragOut" - OpMemberName %24 0 "color" - OpName %30 "VertIn" - OpMemberName %30 0 "instance_index" - OpMemberName %30 1 "draw_index" - OpMemberName %30 2 "vertex_index" + OpName %21 "VertOut" + OpMemberName %21 0 "instance_index" + OpMemberName %21 1 "x" + OpMemberName %21 2 "y" + OpMemberName %21 3 "position" + OpName %25 "FragOut" + OpMemberName %25 0 "color" + OpName %31 "VertIn" + OpMemberName %31 0 "instance_index" + OpMemberName %31 1 "draw_index" + OpMemberName %31 2 "vertex_index" OpName %6 "data" OpName %11 "instance_index" - OpName %15 "x" - OpName %18 "y" - OpName %23 "color" - OpName %27 "instance_index" - OpName %28 "draw_index" - OpName %29 "vertex_index" - OpName %33 "instance_index" - OpName %35 "x" - OpName %36 "y" - OpName %37 "main" - OpName %38 "main" + OpName %16 "x" + OpName %19 "y" + OpName %24 "color" + OpName %28 "instance_index" + OpName %29 "draw_index" + OpName %30 "vertex_index" + OpName %34 "instance_index" + OpName %36 "x" + OpName %37 "y" + OpName %38 "position" + OpName %42 "main" + OpName %43 "main" OpDecorate %6 Decoration(Binding) 0 OpDecorate %6 Decoration(DescriptorSet) 0 - OpDecorate %27 Decoration(BuiltIn) BuiltIn(InstanceIndex) - OpDecorate %28 Decoration(BuiltIn) BuiltIn(DrawIndex) - OpDecorate %29 Decoration(BuiltIn) BuiltIn(VertexIndex) + OpDecorate %28 Decoration(BuiltIn) BuiltIn(InstanceIndex) + OpDecorate %29 Decoration(BuiltIn) BuiltIn(DrawIndex) + OpDecorate %30 Decoration(BuiltIn) BuiltIn(VertexIndex) + OpDecorate %38 Decoration(BuiltIn) BuiltIn(Position) OpDecorate %11 Decoration(Location) 0 - OpDecorate %15 Decoration(Location) 1 - OpDecorate %18 Decoration(Location) 2 - OpDecorate %23 Decoration(Location) 0 - OpDecorate %33 Decoration(Location) 0 - OpDecorate %35 Decoration(Location) 1 - OpDecorate %36 Decoration(Location) 2 + OpDecorate %16 Decoration(Location) 1 + OpDecorate %19 Decoration(Location) 2 + OpDecorate %24 Decoration(Location) 0 + OpDecorate %34 Decoration(Location) 0 + OpDecorate %36 Decoration(Location) 1 + OpDecorate %37 Decoration(Location) 2 OpDecorate %11 Decoration(Flat) - OpDecorate %15 Decoration(NoPerspective) - OpDecorate %33 Decoration(Flat) - OpDecorate %35 Decoration(NoPerspective) + OpDecorate %16 Decoration(NoPerspective) + OpDecorate %34 Decoration(Flat) + OpDecorate %36 Decoration(NoPerspective) OpDecorate %3 Decoration(ArrayStride) 16 OpDecorate %4 Decoration(Block) OpMemberDecorate %4 0 Decoration(Offset) 0 - OpMemberDecorate %20 0 Decoration(Offset) 0 - OpMemberDecorate %20 1 Decoration(Offset) 4 - OpMemberDecorate %20 2 Decoration(Offset) 8 - OpMemberDecorate %24 0 Decoration(Offset) 0 - OpMemberDecorate %30 0 Decoration(Offset) 0 - OpMemberDecorate %30 1 Decoration(Offset) 4 - OpMemberDecorate %30 2 Decoration(Offset) 8 + OpMemberDecorate %21 0 Decoration(Offset) 0 + OpMemberDecorate %21 1 Decoration(Offset) 4 + OpMemberDecorate %21 2 Decoration(Offset) 8 + OpMemberDecorate %21 3 Decoration(Offset) 16 + OpMemberDecorate %25 0 Decoration(Offset) 0 + OpMemberDecorate %31 0 Decoration(Offset) 0 + OpMemberDecorate %31 1 Decoration(Offset) 4 + OpMemberDecorate %31 2 Decoration(Offset) 8 %1 = OpTypeFloat 32 %2 = OpTypeVector %1 4 %3 = OpTypeRuntimeArray %2 @@ -292,152 +303,163 @@ fn main(input: VertIn) -> VertOut %5 = OpTypePointer StorageClass(StorageBuffer) %4 %7 = OpTypeVoid %8 = OpTypeFunction %7 - %9 = OpTypeInt 32 1 + %9 = OpTypeInt 32 0 %10 = OpTypePointer StorageClass(Input) %9 -%12 = OpConstant %9 i32(0) -%13 = OpTypePointer StorageClass(Function) %9 -%14 = OpTypePointer StorageClass(Input) %1 -%16 = OpConstant %9 i32(1) -%17 = OpTypePointer StorageClass(Function) %1 -%19 = OpConstant %9 i32(2) -%20 = OpTypeStruct %9 %1 %1 -%21 = OpTypePointer StorageClass(Function) %20 -%22 = OpTypePointer StorageClass(Output) %2 -%24 = OpTypeStruct %2 -%25 = OpTypePointer StorageClass(Function) %24 -%26 = OpTypeRuntimeArray %2 -%30 = OpTypeStruct %9 %9 %9 -%31 = OpTypePointer StorageClass(Function) %30 -%32 = OpTypePointer StorageClass(Output) %9 -%34 = OpTypePointer StorageClass(Output) %1 -%47 = OpTypePointer StorageClass(StorageBuffer) %2 -%57 = OpTypePointer StorageClass(Function) %2 +%12 = OpTypeInt 32 1 +%13 = OpConstant %12 i32(0) +%14 = OpTypePointer StorageClass(Function) %9 +%15 = OpTypePointer StorageClass(Input) %1 +%17 = OpConstant %12 i32(1) +%18 = OpTypePointer StorageClass(Function) %1 +%20 = OpConstant %12 i32(2) +%21 = OpTypeStruct %9 %1 %1 %2 +%22 = OpTypePointer StorageClass(Function) %21 +%23 = OpTypePointer StorageClass(Output) %2 +%25 = OpTypeStruct %2 +%26 = OpTypePointer StorageClass(Function) %25 +%27 = OpTypeRuntimeArray %2 +%31 = OpTypeStruct %9 %9 %9 +%32 = OpTypePointer StorageClass(Function) %31 +%33 = OpTypePointer StorageClass(Output) %9 +%35 = OpTypePointer StorageClass(Output) %1 +%39 = OpConstant %12 i32(3) +%40 = OpConstant %1 f32(0) +%41 = OpConstant %1 f32(1) +%52 = OpTypePointer StorageClass(StorageBuffer) %2 +%62 = OpTypePointer StorageClass(Function) %2 %6 = OpVariable %5 StorageClass(StorageBuffer) %11 = OpVariable %10 StorageClass(Input) -%15 = OpVariable %14 StorageClass(Input) -%18 = OpVariable %14 StorageClass(Input) -%23 = OpVariable %22 StorageClass(Output) -%27 = OpVariable %10 StorageClass(Input) +%16 = OpVariable %15 StorageClass(Input) +%19 = OpVariable %15 StorageClass(Input) +%24 = OpVariable %23 StorageClass(Output) %28 = OpVariable %10 StorageClass(Input) %29 = OpVariable %10 StorageClass(Input) -%33 = OpVariable %32 StorageClass(Output) -%35 = OpVariable %34 StorageClass(Output) -%36 = OpVariable %34 StorageClass(Output) -%37 = OpFunction %7 FunctionControl(0) %8 -%39 = OpLabel -%40 = OpVariable %25 StorageClass(Function) -%41 = OpVariable %21 StorageClass(Function) -%42 = OpAccessChain %13 %41 %12 - OpCopyMemory %42 %11 -%43 = OpAccessChain %17 %41 %16 - OpCopyMemory %43 %15 -%44 = OpAccessChain %17 %41 %19 - OpCopyMemory %44 %18 -%45 = OpAccessChain %13 %41 %12 -%46 = OpLoad %9 %45 -%48 = OpAccessChain %47 %6 %12 %46 -%49 = OpLoad %2 %48 -%50 = OpAccessChain %17 %41 %16 -%51 = OpLoad %1 %50 -%52 = OpVectorTimesScalar %2 %49 %51 -%53 = OpAccessChain %17 %41 %19 -%54 = OpLoad %1 %53 -%55 = OpVectorTimesScalar %2 %52 %54 -%56 = OpAccessChain %57 %40 %12 - OpStore %56 %55 -%58 = OpLoad %24 %40 -%59 = OpCompositeExtract %2 %58 0 - OpStore %23 %59 +%30 = OpVariable %10 StorageClass(Input) +%34 = OpVariable %33 StorageClass(Output) +%36 = OpVariable %35 StorageClass(Output) +%37 = OpVariable %35 StorageClass(Output) +%38 = OpVariable %23 StorageClass(Output) +%42 = OpFunction %7 FunctionControl(0) %8 +%44 = OpLabel +%45 = OpVariable %26 StorageClass(Function) +%46 = OpVariable %22 StorageClass(Function) +%47 = OpAccessChain %14 %46 %13 + OpCopyMemory %47 %11 +%48 = OpAccessChain %18 %46 %17 + OpCopyMemory %48 %16 +%49 = OpAccessChain %18 %46 %20 + OpCopyMemory %49 %19 +%50 = OpAccessChain %14 %46 %13 +%51 = OpLoad %9 %50 +%53 = OpAccessChain %52 %6 %13 %51 +%54 = OpLoad %2 %53 +%55 = OpAccessChain %18 %46 %17 +%56 = OpLoad %1 %55 +%57 = OpVectorTimesScalar %2 %54 %56 +%58 = OpAccessChain %18 %46 %20 +%59 = OpLoad %1 %58 +%60 = OpVectorTimesScalar %2 %57 %59 +%61 = OpAccessChain %62 %45 %13 + OpStore %61 %60 +%63 = OpLoad %25 %45 +%64 = OpCompositeExtract %2 %63 0 + OpStore %24 %64 OpReturn OpFunctionEnd -%38 = OpFunction %7 FunctionControl(0) %8 -%60 = OpLabel -%61 = OpVariable %21 StorageClass(Function) -%62 = OpVariable %31 StorageClass(Function) -%63 = OpAccessChain %13 %62 %12 - OpCopyMemory %63 %27 -%64 = OpAccessChain %13 %62 %16 - OpCopyMemory %64 %28 -%65 = OpAccessChain %13 %62 %19 - OpCopyMemory %65 %29 -%66 = OpAccessChain %13 %62 %12 -%67 = OpLoad %9 %66 -%68 = OpAccessChain %13 %61 %12 - OpStore %68 %67 -%69 = OpAccessChain %13 %62 %16 -%70 = OpLoad %9 %69 -%71 = OpConvertSToF %1 %70 -%72 = OpAccessChain %17 %61 %16 - OpStore %72 %71 -%73 = OpAccessChain %13 %62 %19 -%74 = OpLoad %9 %73 -%75 = OpConvertSToF %1 %74 -%76 = OpAccessChain %17 %61 %19 - OpStore %76 %75 -%77 = OpLoad %20 %61 -%78 = OpCompositeExtract %9 %77 0 - OpStore %33 %78 -%79 = OpCompositeExtract %1 %77 1 - OpStore %35 %79 -%80 = OpCompositeExtract %1 %77 2 - OpStore %36 %80 +%43 = OpFunction %7 FunctionControl(0) %8 +%65 = OpLabel +%66 = OpVariable %22 StorageClass(Function) +%67 = OpVariable %32 StorageClass(Function) +%68 = OpAccessChain %14 %67 %13 + OpCopyMemory %68 %28 +%69 = OpAccessChain %14 %67 %17 + OpCopyMemory %69 %29 +%70 = OpAccessChain %14 %67 %20 + OpCopyMemory %70 %30 +%71 = OpAccessChain %14 %67 %13 +%72 = OpLoad %9 %71 +%73 = OpAccessChain %14 %66 %13 + OpStore %73 %72 +%74 = OpAccessChain %14 %67 %17 +%75 = OpLoad %9 %74 +%76 = OpConvertUToF %1 %75 +%77 = OpAccessChain %18 %66 %17 + OpStore %77 %76 +%78 = OpAccessChain %14 %67 %20 +%79 = OpLoad %9 %78 +%80 = OpConvertUToF %1 %79 +%81 = OpAccessChain %18 %66 %20 + OpStore %81 %80 +%82 = OpCompositeConstruct %2 %40 %40 %40 %41 +%83 = OpAccessChain %62 %66 %39 + OpStore %83 %82 +%84 = OpLoad %21 %66 +%85 = OpCompositeExtract %9 %84 0 + OpStore %34 %85 +%86 = OpCompositeExtract %1 %84 1 + OpStore %36 %86 +%87 = OpCompositeExtract %1 %84 2 + OpStore %37 %87 +%88 = OpCompositeExtract %2 %84 3 + OpStore %38 %88 OpReturn OpFunctionEnd)", {}, spirvEnv, true); -// Need emulation of unsupported builtin attribute -#ifdef FAILING_WGSL - ExpectWGSL(*shaderModule, R"( -[nzsl_version("1.1")] -module; + nzsl::WgslWriter::Environment wgslEnv; + wgslEnv.featuresCallback = [](std::string_view) { return true; }; -[layout(std430)] -struct ColorData + ExpectWGSL(*shaderModule, R"( +struct _nzslBuiltinEmulationStruct { - colors: dyn_array[vec4[f32]] + draw_index: u32, + } +@group(0) @binding(0) var _nzslBuiltinEmulation: _nzslBuiltinEmulationStruct; -external +struct ColorData { - [set(0), binding(0)] data: storage[ColorData] + colors: array> } +@group(0) @binding(1) var data: ColorData; + struct VertIn { - [builtin(instance_index)] instance_index: i32, - [builtin(draw_index)] draw_index: i32, - [builtin(vertex_index)] vertex_index: i32 + @builtin(instance_index) instance_index: u32, + @builtin(vertex_index) vertex_index: u32 } struct VertOut { - [location(0), interp(flat)] instance_index: i32, - [location(1), interp(no_perspective)] x: f32, - [location(2), interp(smooth)] y: f32 + @location(0) @interpolate(flat) instance_index: u32, + @location(1) @interpolate(perspective) x: f32, + @location(2) @interpolate(linear) y: f32, + @builtin(position) position: vec4 } struct FragOut { - [location(0)] color: vec4[f32] + @location(0) color: vec4 } -[entry(frag)] +@fragment fn main(input: VertOut) -> FragOut { - let output: FragOut; + var output: FragOut; output.color = (data.colors[input.instance_index] * input.x) * input.y; return output; } -[entry(vert)] -fn main(input: VertIn) -> VertOut +@vertex +fn main_2(input: VertIn) -> VertOut { - let output: VertOut; + var output: VertOut; output.instance_index = input.instance_index; - output.x = f32(input.draw_index); + output.x = f32(_nzslBuiltinEmulation.draw_index); output.y = f32(input.vertex_index); + output.position = vec4(0.0, 0.0, 0.0, 1.0); return output; } -)"); -#endif +)", {}, wgslEnv); } } From e907419ea71a1fb4e02e3e7a93d036a10f76762a Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Sat, 20 Sep 2025 14:15:12 +0200 Subject: [PATCH 37/37] fixing intrinsic test --- tests/src/Tests/IntrinsicTests.cpp | 66 ------------------------------ 1 file changed, 66 deletions(-) diff --git a/tests/src/Tests/IntrinsicTests.cpp b/tests/src/Tests/IntrinsicTests.cpp index c6103306..91e3860a 100644 --- a/tests/src/Tests/IntrinsicTests.cpp +++ b/tests/src/Tests/IntrinsicTests.cpp @@ -1560,72 +1560,6 @@ fn main() wgslEnv.featuresCallback = [](std::string_view) { return true; }; ExpectWGSL(*shaderModule, R"( -fn _nzslMatrixInverse3x3f64(m: mat3x3) -> mat3x3 -{ - var adj: mat3x3; - - adj[0][0] = (m[1][1] * m[2][2] - m[2][1] * m[1][2]); - adj[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); - adj[2][0] = (m[1][0] * m[2][1] - m[2][0] * m[1][1]); - adj[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); - adj[1][1] = (m[0][0] * m[2][2] - m[2][0] * m[0][2]); - adj[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); - adj[0][2] = (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - adj[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); - adj[2][2] = (m[0][0] * m[1][1] - m[1][0] * m[0][1]); - - let det: f64 = (m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) - - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) - + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0])); - - return adj * (1 / det); -} - -fn _nzslMatrixInverse4x4f32(m: mat4x4) -> mat4x4 -{ - let sub_factor00: f32 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - let sub_factor01: f32 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - let sub_factor02: f32 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - let sub_factor03: f32 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - let sub_factor04: f32 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - let sub_factor05: f32 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - let sub_factor06: f32 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - let sub_factor07: f32 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - let sub_factor08: f32 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - let sub_factor09: f32 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - let sub_factor10: f32 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - let sub_factor11: f32 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - let sub_factor12: f32 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - let sub_factor13: f32 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - let sub_factor14: f32 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - let sub_factor15: f32 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - let sub_factor16: f32 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - let sub_factor17: f32 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - let sub_factor18: f32 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - var adj: mat4x4; - adj[0][0] = (m[1][1] * sub_factor00 - m[1][2] * sub_factor01 + m[1][3] * sub_factor02); - adj[1][0] = - (m[1][0] * sub_factor00 - m[1][2] * sub_factor03 + m[1][3] * sub_factor04); - adj[2][0] = (m[1][0] * sub_factor01 - m[1][1] * sub_factor03 + m[1][3] * sub_factor05); - adj[3][0] = - (m[1][0] * sub_factor02 - m[1][1] * sub_factor04 + m[1][2] * sub_factor05); - adj[0][1] = - (m[0][1] * sub_factor00 - m[0][2] * sub_factor01 + m[0][3] * sub_factor02); - adj[1][1] = (m[0][0] * sub_factor00 - m[0][2] * sub_factor03 + m[0][3] * sub_factor04); - adj[2][1] = - (m[0][0] * sub_factor01 - m[0][1] * sub_factor03 + m[0][3] * sub_factor05); - adj[3][1] = (m[0][0] * sub_factor02 - m[0][1] * sub_factor04 + m[0][2] * sub_factor05); - adj[0][2] = (m[0][1] * sub_factor06 - m[0][2] * sub_factor07 + m[0][3] * sub_factor08); - adj[1][2] = - (m[0][0] * sub_factor06 - m[0][2] * sub_factor09 + m[0][3] * sub_factor10); - adj[2][2] = (m[0][0] * sub_factor11 - m[0][1] * sub_factor09 + m[0][3] * sub_factor12); - adj[3][2] = - (m[0][0] * sub_factor08 - m[0][1] * sub_factor10 + m[0][2] * sub_factor12); - adj[0][3] = - (m[0][1] * sub_factor13 - m[0][2] * sub_factor14 + m[0][3] * sub_factor15); - adj[1][3] = (m[0][0] * sub_factor13 - m[0][2] * sub_factor16 + m[0][3] * sub_factor17); - adj[2][3] = - (m[0][0] * sub_factor14 - m[0][1] * sub_factor16 + m[0][3] * sub_factor18); - adj[3][3] = (m[0][0] * sub_factor15 - m[0][1] * sub_factor17 + m[0][2] * sub_factor18); - - let det = (m[0][0] * adj[0][0] + m[0][1] * adj[1][0] + m[0][2] * adj[2][0] + m[0][3] * adj[3][0]); - - return adj * (1 / det); -} - @fragment fn main() {

pxz@Ub$;{NVu;OBFLd=YA7 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 diff --git a/.cache/clangd/index/Errors.cpp.53872D8B941817E7.idx b/.cache/clangd/index/Errors.cpp.53872D8B941817E7.idx deleted file mode 100644 index ddd3be0d4b6de0f3be3f6ebb8afe0cb1822f8c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11556 zcmZvg2|QKJ|HtpKTuWED=vr>}EnD`Z$i9nYDTzpytYrzMLbh8<D42vbK=+MOsPzb3DJ{{$H>0s(Ib-ocDZYzVn^=o;l-UXKhVaCy^}t?c&1&VzzRS zNF-tKKRPBVIEtG@ij*ah;)^a6%Xy-*^ZO7^TysM)xEpeC#N6Ysvf z@A>!S*?$&3+0^~qVdKn=rv^UK$xp_MOWf8|69dDJ26b)QHaqspr1+hoOpB->kAp^R zV#=33pBo-r{>_=vp&OpM<(f5YzrZ`|*W|h3-S^2KZ^pxaMwwhum;Bh(*Z*QBCRV3a zYSV>;-(@{Zs8XLds~OdNW7d1l*?CY?p33?aq_+EqHEppIcosDHcaZRNwTk-A<_)%E zCmI4WFV^R%SgjJl^i#iD=%qioxBRuKa z<;TZ**xSvX@1%{!4js6_m2=iWaqs&59-bHKK6$D~G;wqq2}(BZRWTk?l{_$OJQv^E zFogZE_3c)bZ4V3;ACx(`>XO`xwp@kIW|~0r*QvxEBThrXaqp8JT*6~%e9Ii>F8z3u z8y)PfyTjtkQZ6gsTe721oQA>;n};H=raZ8s-MRKIc6zqPA&AuZX4g#HeWz0`vGp2? zN0uZA+7CtUw5|O>G3ss;{aNgE@zpV`z~^g`u>tAhv)FEuZe0hoz2|6 zW9OsIl!v@2W*1-i==b(~UqC)$%qw^Y$4F^2cZQ6!QPv+|}yT|0a%{ zKegq;#O99ywGl^K_`kpIQ%blhTa|DibhxNdD?LoaFLwH`uAt%XXYMrQdOV4~r+u;h z&t2me&!(ppkN=b@FP*YHaOkOzs^hIx^05X(#oM)mU)pEole7d17%9#Q-fmAf{1qfu zV&CZZa`x~I_WPq%wX<$tFm^GscX)R9KV$OTDxU)P9?I?Dd63sKGBGuGhP^c6u;}ry z4SQKly0+~IC_Wpr{kvw=Q%wtJ zv27_$rI^>ycYgkpZh;+Ew*Cq3{rBs){cbbtywMOXT$nXs)UkGO%ju)PZObS5dw=FJ zL_6m$u9XllF+DlmqHxU3y7I;O6Uq6ZJH2`Wvx=`c3%Qi5sKhO+{q=3v_X71cj??_! za-KW^a+~8XpbnZ0Pcs*)+_-#<-Etq5Y!dSDj<`R<`TB zJ!1~;t_;`ax-UAvbDW3o-pG+o7J9F7c>Lq24cD0^o@I)m{Bj!OcAHnHS6UjYr_(cY zTgdG>T2!X)c{|ft!DV!6XyNq0M0WioHhw5HJLCMFt3%f2?(RizxV>z6RMMT2Y$7!I z^dEnpx#=sBtQ47}ds9x*T6EnD#Zr0WXZP0YmJ0aeSo2>smrSpZUMF{otsI~*4^iv; zOw&HmyDBc7F&h^=ZrR%uVPDBM{fmFat&Y)cJj<=Cgj6@(?ow=dz3=LoCBbY#MeFLe zoA6(+GdSob{W{E0ICZxwg(2!NU3uGJYY9_aZC&`0K%df?KYcx}{6}ro{*8O^@W;ar zt^RoN%Jtg^DlDic-|snm%1nw|d+;6LH;*!AqH&#S<)l##wT-)=N9&oeC6iIC4As z+UcosiI8O9CUbLx0SlG)8=W@Q&ko-_pgmHz#6h_4--KOeC1Sxj_65}zbrs?1V@2`` z$>)CDiuoLK+M7JCIlb>|TJJ=SRrKY%3L(uI)S9mEcOr$cr?1_zuC&OFRtx`{7Lzet zX0$e$$s6*+`+%nXS_R9MYJ3{>I>F*eYiY@dr4|n#sQPpYc9c2GnJ7Ex#(Zh84VF`F z-7nPP_h3d-Y-@d)olcN^rGTHU^FRK^We27X6yQSNzLl&{)jRoC$9JTsddc~_y6!m} zRW{=3jdAuSQSAGxPCQ88eEj1&jylDxb@r=@DP2!J@@f^QWjg-Gd7p{=GZAd9U&lE` zq0rV^RG)Vie!2Vb3&Xc>C?&jW%WaJ|QCnY^&_Z0i&dLeMx0Hug$Cf|;7$-2?Q<0&* zKfR~-oAFh4rP}!?dWxlnhI?STAhjhQ_9o#tMS$BNz zc)|4`#_qbuc>x9C*L6mM%;#i7xXnzzrG;PFZ=e58Exo%+E9`sn89N8}WUiaBujDJ_ zEo%-co(nq^ME?4Reb3m|{meIxLT}>+R|;wO>x=1B2>krj5q@(`lvB_>nz0|7l7F|* z`41j%XUUanV~!zz8%gMDeWf(3C>M%Nb4XUweEGJ{N^cP_zI(KL`{S0NOrtNI54zti zNeJ3|t5-yq`l>c1O0Bi8SB6ie@z{EMA+2Gty>e%Sxp%v`FCW(I%V}15T&Hr8_ngzx z=<57<@AWT_x7_AQkxCK?~C`g-VeH&_2HPTLWa9UUNsw2 z#>4v>+PgmLz}X-7-4$m(Jg*b1h^~6~ ziM!`V!ruYyf?o2~H0wEo?^$v&7oA_t+WhW#U!kojbk*@pl3xVprH^Zlf2i4Y=lUV0 z*w^uf@tjL`j$!^W5j{IvYKl3`t;fwOR(M2JxFi?p?M{DXQ}p}e@b>%$)7i(lksgdB zkCeF`Pr`prV#*dFE|p@f+l&KwJ)dq}G5hYZ+&_6idmIX)ZXPX9+~+;*&Kx|?X#B%v zJ9l@` zHb~%V>>Z)>E(Hz%>_7q$8M^{9O56z`8QsUg2FpFY$+cuabfJl@`7gfo2uAP#A{N<6 z6_2}PozXNe03wkue!Zt%4YmsfF10oSQpDG-DL$P%e%K?y!mY5k` zzVpwDGATebqKUmsvCT!hen|tO6-}s44+$CjGGzd95KZuE&-`{P=#~e>Cgebc1L__3 z%bF?zpcpN&o+l>i-HT5I;f|Ehh#HVy7Cf{907uXgY<3+vx*2tW(T673H$=*1xe40=A`t29 zd->kt?F}vja1<@^hPmgQm{15ogdin~Tt;?X8yB+&fIkvY_FtYN*jVNafEXn3ujQ-v zKSvL(2f$7w;L3bxwNi)d3V;#xDA(4x)3m9)1aSvV*dF{d@XP9u8%TU+B;1^APMI&@ z9=SgdbJ_U8*Np;f&#+rSAqNxA!9?}+`Spe1D^vNPh8NctEf3JgA#@*}HKjHpDh`_g z@eoZ&%VZxO+#5j<0Z3Qdvun)bUtm4}$U;j9w4S=b91igXge_9SwOVmiQka830Lsu3 z;YLBLx!&XxL<5>g-Fo|UzhrFyAX?BwZM|eshWKa@m``I8E>D)H%olJzsak&bl=Ff@ zfPf2flr2kw&U7)H!U1p<-NSJW->uQpHW7f>fRyka@^$U{m`VWG&=PbH?O6ZQvXK;$ zrWFbIpn8bwDM%>Dk$BiK(o;+u)8q7v^_JJ&zke6d@J4nLGkEm5`S{7*L~d2WX%w2s zd;$H;vlivQEg!NMw7-rXgGGB<*PTZhiGWBz_HfgEms-|9a54bu&=R5(YtLD+e<6rH zNQo=kxhpUG9z6hnGiV9B2DXVt1A}xx+(#4FrXT(O{h^Q`E~AOh4_`GgC-wk0U#O)eD*cl=f?Gx0M;RaNaIbD zngW4G0q`%{4YxI0sv2#TvH@`eO{{szJM3s(@fRSRke%pwR9!n%P?iUPTC@axLs;1r zm6m(~wv|LW*)6eKLr-U!&I*`J#!^n1j?>al0EH)Lg^`i>Csth&EC9qValx z8F4rGX`KS?Z=!o}kS@Np-f=5IxFLJsH|k1`jagADz@|Y=RHQ_tik{XoEd@AHmk(Xt z?86v24FonK1)58x)k}}wJ40+xHQbTnC^BEbAuc_U=&ZZEyd1Q5M7H-Ed1)P~#Zv)* zLbMMNDSb*Oyt*og9#-J06jhP=0`?I9hq+T+cB&Ex}@tX6^&hF>_OG5$F0C7D< z2}O{GIN1J|h8$xI@A^h9o^=Y}HkWu60KrJWy3LzjuYdU(0Jb23whw8V!uO^L;4XR) zt$r`#(lXY!0U`(~FfT%$ew=KOR_P<>I z9uO&L!c9`<+DpBU1aS^c6mFazlS{Yy0Ei(p@w|GX{d9}oS3ne?39maR-|&{F5=1we zQ0Nz`UYl9{4G=|WVoIQ_Wxsgi4?x%klF=so;7PJ(2kWrlm;w^XU97 zZa+c$9CQ!S_o{rd&mSa+duYN!{)o&b++Z3I7tn;g&nNr(N67?{geHWo3e)c@pPKj-!1rtlbWZ^NFf~R63saW))osRjZW8sT71M^{E+o7%UygYWY(`G3~!L8Y>|92-% zBIO-nyH(BmYAHJf*Q4txzzBdlN-+ajcy&p^10(|E;h757V&d}`nXt*vU_VZ|;(k#! z3Qm)usl%^0aNv;?SAplCKx*p1H?D_DWMSM()k_n8Eehk_s@?{R))v(*I*XQ%s*moX z<;UZvuxLf_M99E_{jKfu_PsH-0;A(G!Z8Z)oD1*jFy8q)y27hU>K=UA_cuJ6@Jz|@ zRs)_#lcR+pO~GT>V+0qiSe{rKv{J7xDGfQXb0uh!ie1N2v2F}bF9lD-jMFfiMLQiU z!P2qH1>$9r+e?RE4kly@o8v&b<7BYfnHWbVwrr8l!g#VU z325JrPnVK1TxtR0>_zhuhchKwnQ$s{h-Qfif8?h4C0_j1Zh`VKB#{shAiXs4$+6iKesK3`~^4YG-1!Ol)Cd;r$Zm?Z2y~J^f~e z8GoNHdcxC`-HsJ)1v9jTwq-f=175EHp150qN2E=u!g720jkg2Zhvp**X`7FOE+ZS6 zp=@+KS|nN=4w{Z9h$TqEAww8In#!7*a5lx~??uM{oZBoV)!Ff_YE`Rl$VlW;3eKm^ zX9$nu6r9RKrNXa4u&1V2vKlb9$P959|d<@;iwHi0x7r)j|&whyc2)r zWURAJh$Eaa;X&M2N{h|hEHSB839QFRp<E7VraRvUU2y+?_e!%a^ms&#B}SZ(t8yN<-3W2qc;u)m~IF@=T23ig*& zI;+jVq!_GrCMKDQ$wS_i$EqznKp+duP9!Cg3U>en-%Z&~g;0^rR7jXwcn*MMWMniJ z<0>yHuL|SZQ?1)N?3t4bt~&N{?PJM=Nf>w1;)bSx%q5hJ$w6)6jmVwC`aA_wOu_UQ zpQmD*Qn6rGdsix!wvdsDEPfPZ@l*e=<^rf`W2s5Q_|mZDiy~DV?_ zdq+B!$Z8(}?}1_#MF!@?z_u(B3@n6!?Sb}Fj_ZZ{ibL|iTa2ntHHPbqrlWf6@lnHk zkiZi~5~U!WVRX1?U9D|Cpy~Q_W4MjrV>a>mi!hk_=y)#1lZ(+|ZiMyVg%&9sDaH~* z;oS>~mjd!9Uk*lvjZSpEs*;)UD+V!5!N5Ob*cmaO>0tJbEcgls4{|DTlLdDW?1xi) z{`Luuf>@D{LHm~r?df1mHUrJuEHw-)4`X0wS!yydt4z!djsoswupx=7DYzla`me52 zEMb%bS3Srcf-p6MqYXJg5S}0?cp^`tFjRt>1}G6%P*4fNAgixdUabkUj5tnQGr_D5 z0|7iIZhc^usK^^W&_6a(4~}!G*j?Z&bHNV^@bw(77z%Mc1iga60NxRoKF~X#1b5137sD1H znS_ZYv9A1NOgHxv zbsa2LMSVqMSbd*&O7FIpQ#b<@c5j` za}MH6qL_*~zz4*cL@^z+TC^FMA_FsBv@+g!G2+Z7Ur^$ZtWli?WL*47xlu z)r6Om=L5+8-ZXDnxZK<3jI`ft6;1*=7n91xu-8BR=t9$g-8x zrFb37X68?*0?C*loJ80TtY6|w3NG@ffUvD`;EM{LpGa`sEL6Zvw@?9_E>yt1uuuUv z#X<#KUkep*^rYyhZPC8O7o84K{P(8^e~>UdR3wMy@ACaPx1PR%&Z^bAx+H^zrzG9Q zpQ{&tu3G%5zwmQgxPO=uu;dgJmhp*;EfuCL=UqbP;ufXx$nZ$?A{kqz<-}ZgqmD0X1Xr(t zzqt6=wKXgx60N zmg!RN`|XFRy`it24+j61E+;eebn&Dl%H$;8m0mhEb=#!4o!^CGATKN>nPX!5d+2q} z0p41}ih#nl#m@%zsdyKfi^~hx7yjAU8+^!_|Gj_balTyvS^{?VLQmYjO(*W|oIUi? zv1*xIN?Md&p1S?Z!8kj0?UtTKk6^8Bd2GX69?{2*l#C;PM#Sd#aaBH?dG}0j_>PCe z4?X>v=otvt#q4$S;Y1p?@u}AI-P|l_N(*HBsA$rHsINa`(N0&yo zD@*9JAsv2p$Kv8wVkw1wSrQK0B6N@L=BoHneBHa%kq`ES9@P<-N*T9$+OOxBdtlNHjzY?t6 za))Vul|g#1p~Gp00p>Exqho?8aob$>_fwKi^qU?3w&yWJsiM>k#tRdcVzd=QAt!6D zJp9bvZJHjJ65~{<{N~u7J+Y$0i#WdtZ7|lhqdZGZB$q_%XPbT2 zJIXzHAwoplw3A6-^1Q;D#GI5J4TpNSX*?B?-=OG_bCe~|EW>{0yJs_-*wbXqtkH+* z0n6ewDs@&pjC`(gt-GF8)oq$_e1Fxp)@U;sLp9l5j_-O>pK|OLn6&-i9j%%p8|xai zMr^`*g$P6 zV|za|?O>cJHPocs2^`X4`p}SNRm7`u)_Tg!H}J%PPOESc&zIwO*$%~3-wNLAo-5r( zwT+T&$~~Uip6thbJMBf`kAnUz5#{W{PpTgszrQCNYB{+Mq<)&bbztJ^n03-OS4CaH zD7}}7Oy@Uw92IVt-9B2UqkA^TFSLH@UCGRrFThpY;7jMgmceu zzU^nWjiF&r4j4Qf;k?7mt2=8*K5s)gonMt6!`{uvvsV0?*S50-m(PuT$u^j&J5fnh zmt^)y5!3%Pv!7P-)vWb{ZI;THlOEYqm_F7xbe_A{(G zH?&`Rm)zVbL=Nik?RxR~WbzdjO(Sd7x0fhIkS%#=@GJV1KTsQlE*XzyoPkF`j>TbCKF>)JY?>e>5Qy*6M6Qm-Md2H&??G$UcE2A{3O|LOHf#<)ulJ} z_F+vS1=sq=ynE}s!pa{nGE|+t$ah2PDaChw(@`UxfIFd zKW=%bd_mBw{$pM2(hhu*pA-@)70x%Q1%2}?(QJ5LAG|SQOvG=3+y4}<5HIptUwq0>-eJyXF85(-Y-%I|S z=92?|VxzyC@T8S{k>WP43!GFWk?abGzUa@=NL*yrI}G5720pa4oNFaWZ2$ccP4lfY z=2jsCUG+cmj~sDCW9gaAzsMY9#b6RGLL@?d?f|W?CbaTqw8%06>y;SmsLTx^naA7- zc`ZhkIVCTyyfuy)IKRw*@!suWx#?+YH4895kBhxninN7&89N)WUxqQyTbM1kAcZ21<0Nl*{dRD@}}!+DsWzpi#;!!e7lPBfrFVu zRVLBIsA7xe4kY$DUko(niWQS4zb$Jxf&XBP|ABGAHHqzHE+Fs0^+3EctX{`7;`HD)Hid4XJsGdHUKz4FCfM?Rou;&i$Eiup)dE0XkC9dF zDyEYHxCMcH4;TBCWt(hveUl()T?-Rj{DPcCKS%EovNuL<8|Cr1y{D6qYjCj}cs4Y? z-;g8(T93vAr!*r!reG^94CGt5;3mwO*079qhyeXCPXF3LQ~CLvMHDo@7!#dsrYb|d z)J0KX9*Sw5@2PS2SiUF?SSMnv)6J|}_|j?!*$^WuF)i#(IRBmooNvZBXD=<=ubXy3 z3|PBhtY==)qGuJ$#DR4Yu4mi~$-AN|N5p~oZrs2ocL;eGZJ3e(_GLJG<>_8t)xt_(0Y!W1KxMwf_G+*kNy1aE1@sNw60XqSASmVH{sq6(|U1Gi4qf=x;&6; zajlPz*$0J=CMW=14`be@<^O5em_ZRVei{a6Bw(Zf@A7J~-4gt3dkK95COEQP(>|Td z^U6TB!^j>_-g|A&^i|;?%K`5+Qvp-ixdZgx#9;8GMwed=1Q&q`Zl`gxwA>;+HQ@aS z4DRm-Sc6sfbb`=rLNCGT59AbfFR$ID&QE4HB8f>0ODoZqQUz{yvs&ie#&u4l#ul?azyzx@rrM!2ssDWbNh8Y=W4Z{>4C<<6xdoiTDq@A9pkMb8QO6wZ5dQiiy=A%_JgiTNzh z`N{mubBDR5&lv_mu=c6eIa&L$;*t&MKon;D1%fu*tzJX11uZyY0?;Vfm}He8ZVRk$ z;JVKm#PUfg;s;@V4HqDzM~w7dH$FRHzYNp*u*}n=VYM!VoQRQ!IyO}b@rDz!3r5yS z;+k$2;<0BYEdc92J}RHk++lv*SLE_?L&JcOJ+KD}C*t$Zf_rWFR`*)pw+`MhUdMKo*sav;ZJWQAbbcJ7O1D?sBun8vk}t}ni__{$1losMh# zx#fr9$yZsF;u8lxK1+yQ>+A9Tmp89y3Z$wh7>PWUeXJx)Ddc!I(%H6PaR znyWy7v6%Qc^8$Di!hKeO_ET~3N$QE@n)3t`dJ|6fEE22xmCoS_^a7mT^omhXDoBvf zV=?_3YI!jf^-;+i$lx(bKRjNikJ~I#a_|PxgD=&8z5DwyoG?;-?p(2pH!GPP%zH;x zM}fJ+{JfWt%-z$I97Q;A!q`_eeSQ@kJ3_Rti)r37D^0;yc8w2^)iAPxbwl3lf*@ZY zZ^uR7n0wkh=^cYVXgmSaIM=n}n;m`O0YFy6$X)E0avK?nR&$bgh&!4fS&(h+@Yfyf z>dCR8MXfb~Ab@C0e6Ce;2HPSXfTnk*3<6LauRPxx6(M;$ka5|4>;C+R>&~Ol<0jB=} zBhztX_kAOQxf>?H`URn-EjyR31Jn#9h?Kzhg^1fGYkthc6Y$K7LrgE)+X9LE699`<$dKnCjp`s)+C#=Y68Y&W5s zVPvlaUm2aPTQ`94tuWEsknU_f>Cc@2taswPtG#v%w|eq{&_SkwzIC?uK8Cu#q?5pd z{yrF71%3r7nm5Ip9}cd%`K^%)))pIq{V|+<;o0mx7lpD2-3sI0GD@lHX5+z4K+eLM z?>`;$>Y`HM=KroOO@&c~ZSDY@&$AZfY?cX62EDJqUA*7D_oki7hmwJRFHG~Ft9FI> zIzQM7WF3rb(YT|f^+{$5@E(L2+gt7%RQ7hSO$Bm3u5rQlj+Iu7-w8bsV;bVQeSs0&;-P3Wjd(^Uqynfo)^5 zq;Mm#KlHXs{*UtbBK!T3mLBsTuU%$Q-5PC6Ar^)TO)*L{| z1o49#5B=2n_Bd*wbuu;+*t=rfKeQ>T>c42Q6UbT^`DfMIpEudp?gZX%cN89bw!Ek3pvm}le6{g1N0Imc+IN71tOVvg z&78+vYVH81ZPCo?;Aj3LKv#^ym@gfq^f_5q90bwnVuI6Nb*drjNLe0`58;Am+npFI z74CEhcwd6?-YMXDqgHW-kim;BecwbqBFnBQ)gR^}bAjOh8yjtYZABQobsg_<#ouQ6 zz3~2+K8OxX`v1)TUWY9+|2A@8_AOx^iZOrrayZ}M0{0PM?u)VJb#?sl zD~az2ur|k7pLb%=Hmtf#SbJcsr&3Bh&wn^j0IZWR)|Tw&8)CfDih%V&T3%`z4LIF2k}Yan=gL#xeWVppr6C(%4~ibYhQ{HdKpgVG-^prh*vz$Mdm>BN|Rqx7S5}>tgGJs zJ71Q7@Juk_8OIj-K9m_K1@4_N(Zvg_I_*8GQwC&^yrqxcW>Llo^8qhH2M;=W-Kl-D zaS30>305*MxVA2=EwBy(nF}-r&03@^M9dP8Qtk9vAmxJ(iFyRNj9JG$n zWUl~n8t&pG&2~f!OZ_+r^c0M_ZP{d?Pmk~^(7Fev@x{WY&s<*NUisGwPEJG)tl*f) z|6jqKJ5*KcRWDt|N#Y}x$RcDB=DEXPOXS9ay9(>$`A>6^If+O^Z(p?Zi37 z8{Q8basfJPHLeR!YK?chzwtc{VywfB&~d4-jEJ)2Gr%6`bDw|i**qt`)GHQrodr5r z=h5p{cTS}ad^lYV{F`9Lpdzm?t+W4S4F_4CxanFfv=E#-!1?vdgJT0*pLZ=VZ^4Bp zAanW>6|8Gb_u%!Petx8eA6qfHPrVM9 zgC`oj`#ODwBQX?%I$-aPF&EIx`na#ut{%vnF!IH|bK(~aR@MXWU=2&}ecQDoD@OCT z5xOZxriR{j4$j|0cwdF_e)7b!bwPhpt^#XkjP;74%lBQV-B*EiIL3MzPhXev`p?&Z z3~sCRBV&EtSF}d2t^s(r#(2N}Wrqge{b@qJfa}_|z`?{FnaE`$86(p8(3e&c`r=zXW;ll1f@-1ZoUU}u*XWT2S+~+%}U6+2fDrnGjQuH6U^NuAKnM%>oC?9 zG6ye-&RRbJ)+re4JD<;K4c2l#1lHjgYkn4)PwG=L4}tY{+_2lkyA~`FtbfQ#W&uwN zYgTK{xx@U^BAM(`7|-~;4LAVLV)|L3^hvK|x$Fd?Cu3yN)J-EZ-P}hYJkUP<*i@)- z$^HDi?-4NHf-yfdRi=FR978*hkK$UN>H6aQyj1lu(7|gFeRTY73|>Nk+X+1nrwe`Y z`f2FB^a%(r853Qq!jH%cyuS%K0~h_M|E%tZk>yW;`wf`ZD+^2ZocvMn446k^yl-u_ zb6qM`(*fjMocF0F`v$5U%L|}`MHcXFM+3^ z>LOJMnmfgP5qymF6&R|RWoq>R^EDWAf!Mp>*iv^BvNlFOyt_1aq`Q%jS72n<#4i@E z&yVy1*&QQ4U2Irx@w%cH44eaI;8H$Os{MYwC#+B5dM@;BmDIUf(>|bY$LT3UZ^D#b zxc33~YccNc@kc1R?EOi|kr>&6MCl-2xN4<&dY=Qs?%Uz}g>U?OA?Gf<>_Z z6|gqPSg$c+*i)`G`U+Ts9VPl1JNRd&m+#=2*Faar$j(VE>Me^S-td!IG)ZD&JYvE$ zJBl4jBN$%UT35ua{th(07}NOClt+8a`VSJaB}O(cWqiEFPoN*jDj0dw5zd`gWRnJf z?2nPVJeG%dm{bn}c^B@YxLFJiZD|}F1U<9B^voz%Hp--n`T@u)7+GhbuBhUT-VeY# zShUZ5{<#ScvWHy}V_^OW%t2z3eq2>ACl1?mR1E=pkYu2@FOqnb_=7S)=%C7oUe9NG z@kYtR;4=qVmROXTahplZ9pJZVvhYNyMoj|H6~VHYzWu;$wT^m}bV858$ceJ+cHZ5S z{TVb5HbUu}Z?^P}+B!%Z26_ZWKJNJG%&Ri<;s2-RR2fy-Xv6_V$F^j|>gW&cZK~V*L^D;c?CKP7&FCdRgEV>2A0t@F3e=WKTR!;XzXIOm!F2Jgk z-bMEW`!#ZU^9TrG1tx;17@g=mb*8UC2De)J2=_6vEoA(X{tf8hW=XHVu`R#$MWk&M z=&l&KdAHv^ZQuRhfehAO^yVpY)w#M$s|Y;=BfqVB-&j(wI|e!jwv6aI=hIp^L@7@v zbWo~9uP?q{vOw9~dK|d7!MK<0`qRKac*xTGxA*^QU-KlD(8Dk?t+CudQEkZ#%#9jQ40ve70Zv{%tAdPs z3YFjlR_(E zmxM~wqG<8L*HtRbg3*Es-~OmHJ1sjyc)zF8mM>Xu0V`~%G2CKn*{B@4wFd7zI&_2pFJuIa5P)A48*V?i9v`))FHvd5UeBuXA@OK z5X1Jt*+gXz+=+y>IRFzSIq+;)yaAjLg&PpVss(_FiUqih5C3JR%x&Y(51*`ztR~vn zp((2?8_f@&21P>v=H{t1Ge$Emc%O#5$P7Gld&jVGxOWUfC3cJ(3Y>6w;eICQE3uae`v|xBKy$4PaG#Dz$c9lWE-G(UOGKMWi4z>hG2%Jr9dBGmQSphJyQv|>2a4UyF zcy0#=`gZ7(x}d(cU^DO?#TF$AeZvt3PKZqpcsAVB07Fb{WkBr8ZgqWK2-jX_Dov9^ zlMiOgs5EU3Z9bTjrP7SJjQHW~qtZ;cO!(n^q0&sbO!?sygehnc6On#~tw2X0CL*T` zG5nX4GMCYW!$AFK2&w;c8vMnn!Uso$I``a!ZopscsvPj?N~NhWsj<&%`i%N)a1f|8 zePMm^`M(Sp4cOqFjY>1%GZ32p%UZ}<48C|#X^xVPa&Z1pX)dBJk}!owrLCf^l7iO^ z4kYL?k!^%wz>~pTB9eXcJto%rP%P`bx?Jwq&T=xCx}37YaI%1@%PA)e?@jPu&;XHh zgP!1g1Q&ovw!z5??^@t&BDV&^fwwPkHj%i3_@Ybuz%>i5CV*MlSViH?QfM1g7rmiz zhZS5PE@d$|<*76sE*&v=TcOg-8O^!jJOKAaUOUOZ?u#PJ72$me+!y)XW&XM^3V6%H zZvY%{Fiym4F6j*Ber$f|<_Q}D zL-6-t!`J}++c&&30Vl-j5&DLc3w#xc6&u8G#RbkLR$Fk?;bZ{4ARg57z4-gvZByf` zyXL<16tG>-wq6+$5rEsK2*8a>1mM;m0&uer0l2$|0NhJM0B(*U z0C&R>fcsMjzzrz`;1&}Ca90QcxDA8=+}S|@ZpI)0w_gx|`z;8-9TEiKo(2MNmjVH} zFM$Bui9i7EJs<#g8xVl|3kbjs1q9$00Rk}Vj{wZGBLFko2*6x60x&y`0L(`t029y% zz>G5jFo%o)%o-yA^TY_i%rF8l*^2xn2*7M60x*Ax z08BX|0CR{4z@#ApFpY-*%-bOVGi?aKycq&8*MtB}E+GKZMF_zB5CSkGgaFI|Apny$ z2*4~20x<1@08FHCrx@;eRA6ez0AHrz+Y4z({aDOx{UkC1E_I2g2AFJ_5jd>0wMJ@j z2nzxt*$wgTzmw;Ijr7a!o3i*R=nUtYW6B?#X!D?Zq`Tx$@x=w`jNpyM!#OLjaU!5L zuw5-P=n*#pQ^)oivCQ7&L!d*vhAb)bP6z=J{ivh1Irl^m@P5o!GSMg?iog$wNzRCF z6Agj$Ubn89cvjGB{3$1iY zQ$Ejwnbf>Cy<+u|S1U!DZYY&_^T8Ti|u}eOcO5UpwIAH16!x}Q+g}@)yj>zK|-Fy*vQ5B}~{dkW* z0^vrUO&_n<1|x9Rzs(`RabzA;s$1;h;!F!cXY~8>m@B4zp9jNZFT^ui8A8z+scr?` zeTR>RA;9lv-0!b59*%&A>JNu|$Fn04`1R~hT1Sy*Bm$F{CaYpEJe~&=3zDCw6%Wh< zft19+%}r+Ok;x0b96uUwK`a990}*Aj{u5ge=;Uu?UNd=oD*`Qsw0@tNXDJBW)bLqw z`ooS?1hh^6cgG4RY{anRYREwY^t3S4!yf*7Xm{&(>d=&e3}O=KF{5~QobET zXGFVLUvm96J`cj#&wEDYDHozMe)y)gd;4yi2h&265BHVaDn@58uFc_epA9*VK(lL-7Q+0ZKT;P@#7l2);*-TO6L zi9ktRcT=%~_8A0H1f;fj=vdVtU=;bOsL|#5Joqj7J@o0MVjVi8V!z7z%^OzCgSYz+ zr8zKE&jZm8C%K6U|0~F3@EG6Q)aRlN2-uFDJxN+!dL4mL@1-#rkzzLx5Kq5xVI8|e z69OYX1L{+@%jZGT4h|oVFAHy@Go(w(sHN>4tq5>`)zSJB>+}$T?t>oPO|?(w!MWn7 zOG6DckI)&FR*Uy8|Dn;2z(mWU-dQ=brwBYd`ts-R=ZVh|7Ausy=0Sf^`lG%byI-R-ZXFTk6_GJ~gMh!Dy>WK2!TLby3D4+cN~G+Uj~{g z!?WjsN3qHHl|8p+&>10}i9fmfuKh+}EL>}PMcukTFfT)b3IZ^jhX71lApp}u@Jy2V zdxmp)1>M>RyjXXDQ>UO}H3CEZ9@FpoS0o@XmYflo_-ofZcyZI1?ehD~40OiLUnc6l zf4Eu@uzw!3&Wdq(1ja*3no?eRA^#%@f$#w1Ujfe3QV4u4=$x^06H`H8tA#+`y-{B? z1X@iZ&1`-2HzBa?rc3EYDZZ@;EMz~<*L{Qe00J3B>e9X376%cqx4UrH(WM3w zg4sh7ydLm!kQh@wWmzYBF(IIRtt&DoIdC2vT4-FhFhG$5o$*fXtiia`3K{}7=6A{7 z<1zXOEE(6@7Jb6O5`mH5XPNI5ZFfdsqd=GD3U*oq0{1=dJHKVQ7>mG>g_}AzExSDr zCIqf`ijLaFp))2v)1GpDEh$HUW91d0Ma@R15%?lN3AZWYX+c1*hkSqKAm3dCy1RLs z<;I%lfsjJPlkBpRhv|S8$aSwHb;O-qKs_?*~T0YTe1}0 z9}6SsMob{;!U&1kvgqO_2II_rWhsd64>9`3hR)%}LN+%ElPsCT%_Vzl^4d0O+WVgG zec$JKzURBf$oB2UEJfAqi6pu@dZSqsMcLsS?~Qeyh2I{Uq7vh$ho{JNP^$g+vFBS? ze4lsP&8mU@e|kf$KfE}W8zJXk=;;c7^m269XxZ%aGm~WB(zg5kO-tuS8jkEJTwYgn z{PLlV_bcCOzq?}8-TA7z>eY8-=I+fo_wAvZW7FbP@ZQA0Wd7>uBG*rM7XO;9 zEKz=56Fd3la=fprZ55bbF4BkU&%SNS3?ooPb85wWJ*jt69ANMX{8p>osvazr7&ez8 z$_8ZqI{vRDwFf$+2(ro?iK5iOB}oR$$w}m)c7U5uT&6{+kLMxFItZ zks^MFzmVTab~+GlNL(^6mF-=S89Ij|s#SIJ5fZT?9P4-~z7>w~*kR_vDRNt61!8Hi z>_$NXv2nJw$Uq=!xmtrA1)|kyO=z4z^lJSnR4Nev6aENN!#%X~p|h|5F>&V1@x~T3 z6_!(u?!R7Daq!Cf;};Wy9#4f>Lkq+c@`Q0*I3fLWvA|lFVi>kmr5TEx=s*jh#OpD! zL?Aw|&&25hF}#MEW*G1WOk{|Z7!bv2O1dPK1O#vJpAIMK@hA`rgaTz)yKBI%y^&Y> z3M?BTV>1pwg4xc8fk1U`;-Nh(GISFk?PGDAn;5jgVgok`&;b^w;3}Av3ef1xh-duW z-&avMET@8lQ)W+vzntGaas>47G`|+P2*k-d3($Am%!8wxB{#h(6<`DfBFdr*$3Pye zw)}J+6jjl%9eAIi47|@!2G(RK1OGCV?YO#{EVmDS2weS~--d$W39^hJjs%^l8-VOi z9GmaIzIbaAY6(q*v;+t5uwzYi@(XXQ;NbaeH{tVn7jA-+5Ij=GNeDhE<0J$_LeJqO zgn)#^^eexZ?yrM0sUSKm8nzRNA}a2*8LCS)usNivMB9SR;i_nQ2%Ce>_5Mdee6qJ` ztX%nQ76hrB`iLDo!OcYwnSdFY9^o`t&fGnkHMdaQyk!Ymax^EU`AWQ`;KBN=1CNtz wei=gS3;DJpRg4+b>YQ#*bI#0QtmCz4>LnSEwa0T(f5=ty=|kP@gLaDgA1{Xb82|tP diff --git a/.cache/clangd/index/ExportVisitor.cpp.5FF2E0C23B31D487.idx b/.cache/clangd/index/ExportVisitor.cpp.5FF2E0C23B31D487.idx deleted file mode 100644 index 0071b33dee76cabed20707d41b2facddc694857a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1702 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 RpD|;{ji0t;`j9V7{vQv;+a>@2 diff --git a/.cache/clangd/index/ExpressionType.hpp.5B1B722F2FDC0A6C.idx b/.cache/clangd/index/ExpressionType.hpp.5B1B722F2FDC0A6C.idx deleted file mode 100644 index 63bc6002bd25ac8cef70b677a864e48b208b0d58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21966 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%0ADYa1=sReuiRTg5JYvM+5WysPUqg~kIz9=#Jul}r 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 diff --git a/.cache/clangd/index/FieldOffsets.hpp.291159D8401AE223.idx b/.cache/clangd/index/FieldOffsets.hpp.291159D8401AE223.idx deleted file mode 100644 index 338169ed2c6db82c55f54f081a491706f96f2a5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2312 zcmY+E4NMbf7{~99YHPi=FIQ^s+CodO*Ot+iFF^t4rYIjXFot9!egv4>jR|IaD`KMP zL{OrWY2xNKgVD*R&d&_L=11^j!$dZnad9#o$d+x)=@vE4=$dAG6#n!9)0yk5CgJhFYVYsM!(My}rz+1|Q8tEKh*;{4PsL(sqtU-`4nWQ}z1O?H+d1#xstEw^vzzc>B!7cdX{#d{1xl?ZKp+3`0ur z1AkXx5p${}`OL59uiQ9wVyJ)j{ruUh^NWY>eBV^Jjh&m(MwK;~X8v*eM8(Dn@5Z#2 z+Tu#?mvr1W-+QG$@@7rr)4|xbS=-GQ3H27Ok2 zO8Uti6Ss_anjYIWZ#n)#Pk-H`rouyFnq~Jf>F2kK2i1KEx6-NVB^7V}4PE%@?&Z|4 z7EKiOjFG2EtRdE|1WE(lf-BeeZ9!7+*B-)*=Be-^sVIrq1e*tKwra+`xbwfoaf}Y^ ztF&~L_7ShcJ3OFa`qsRu2a;3Fj0GNV3Nxvcfb}&Udvjl}??@p`7}Up0@c|+Tf)nlJ zDMQ`Y#(Jf)ddFd`-`k_3KVfeP&1K zA_O7_v~P`HF>BY+!YslFQ0=n1L?xj8pk(EwO8RULVN~$$Nz$YwVi7FE3rk&iq3qG_ zuvZDgfbEbRiG&w;H&&;2J&v*+)XpZ12JAYiE{Q}5QNz`2?WLC2KD$%FF(9!|g zPdpBf7weC%yP2RVdR#>q8U}C@=O<>t9F4ZR`Q8&%PgyO;i~)N&EiI=LiQD1!PZU%G@aqhLU`lpP>e!8+X7LwVC)EGU@SK$Lx3DlPSqXd&8x)y3h9f}2nL1Gd~6 z(JG2cKs&I(**@)D#z%x<;o+6;$~fY%I7GBNul&AYihu6MO5ek^f>t7&jvMa#j^Gmh zRC@A$J!680`wTw260rLE^f?`C_gy-uX4Gbi7}N%%66Dhi7fnVT?Emgsuk}%%o*4)A zeuLkn1g!T5cMgqyW9$Px69IOB1b8K&U9})s{ULk~kb7FI@Q!aq-f2PM9A)GjWSMT1 zk#3q(s74v7hS4(3C?m}v%M_!G6w?-kUX+nukY#F7Mrz@eGO{Qmt?+D_Qk0QWkYzei zMmj;3sYDs61X*SgWuK}iqvdJlB50LbqjoC$009w&(K4Di8qow<1`=fi5@Z=flo3Rb zWdKn|0AZCfeJCS%Fj@uSFpqyV@)2hDFItrXd6VG zC?Hxa5o5&(q0FUo33#|z;*wkmn3?|DcjRGXW0wjhY~kEU8%rEIhk!`J&IR0Qp(X{w z0tWmP;Z8tXX5^&lJj43(8C7Gge(SuR2}6(aYi4WxyMX;zGBCK0EO6a$Ct> MmEORGQ{f@!f73C^KL7v# diff --git a/.cache/clangd/index/FieldOffsets.inl.BD4AECEB917E1B85.idx b/.cache/clangd/index/FieldOffsets.inl.BD4AECEB917E1B85.idx deleted file mode 100644 index 03e41ca30d5bf76bbe5af00921937c0f4558dc69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5768 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 Z!o@;i!CELS+=8r diff --git a/.cache/clangd/index/FilesystemModuleResolver.h.D815F057EFBA2404.idx b/.cache/clangd/index/FilesystemModuleResolver.h.D815F057EFBA2404.idx deleted file mode 100644 index d2c320dca2eddebdfd52045153540479353447ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1254 zcmWIYbaT7M!oc91;#rZKT9OE4GKc_iaY<2T4kH7@HC6_OiaA>+-_Jf|Akgr8`ImzS zMP6opH~OWrx>*0NK<(}BBVTfwGmR!~S+MDU?Mwcf0pZU=G<`K)vc>nF2KhNS!RLxeWuG8@A z^j!VKdBIIF@ne7c+%?u+e-SddTY5^U>FaNsUg^|+vn*!Z_DC(~zO9_gecL$)mmVt$ zXTO$K``=Lh{Fc`j7F?G+>z=!Al4RSrSPT377i)Cn8632XTfP?Uu3+i+_Oi&}R_JI- zogk>oS|hMajWcV(oDP+|zE=AWZTA=~qOS>lU_Zd}w6bS`ugv39-u_!9y=SFs^t1&; zne6#I{|)o!DMwZ;3fi*0CI9{B6G2HwC%xWLH~UiQo2{33MTuY9_w!oGiU|@quE$pN zPMRI|jMdj=OJ$hXw)pfm&dq_QXO; zP+Xat!~qO*(;SUgN;9oBco?LBF#!TXGW;^;44hod46=NTLadG14wteS9_w?1qDn|q zN7MsMFmQqu0~NTtWOtNz=4SFRh=GNGs>C(Ky%;#z*ce24fC~KI>WCLkNGjuD5Qiy{ z;FmCB;N)O}SaGXrxzGE?`~y4;(l73wCZLL3ARa){h@(79Yi)zDsZ(@6d>qcdi2s4k6bOWPw8zbC6A(?8KMn-rr z3duDy%5^fr90U_*l!OE;)N+`y99)pVgbMQriF1jo!2?uC!dSu|9(qEOu9AuHkPwo# zm5xMmgoR89%q|`wSu5Evc%TZ&xyU8J+>?^^C|JRLX&fV$5GMzx7Svt_n3X_hg5wS< z4zn954306Vu+qg9ffj#%PGSeTmq8qo5P(uVLJ|xTNIXdfNhF>$gESIPhCv32C(9s< z#FJx?gY#g%0J;F2B%m&U1p`nRoDiVGFkb?N!O;&D)@i)BRwdN;Auvv5vt>(RX2L=b ws2ZFWpsI^fa}q(!;-chYeGo$cL_mNbi~&sKf-Fh)SquA2m<5Fe7=#fL0I?}+R{#J2 diff --git a/.cache/clangd/index/FilesystemModuleResolver.hpp.1253354BC2EFE659.idx b/.cache/clangd/index/FilesystemModuleResolver.hpp.1253354BC2EFE659.idx deleted file mode 100644 index baca8661698269c92421d221252dc010f9fff2a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2648 zcmYjT2~ZSA6rGt}*a1cudR=yxVcA(>b~*L}cNc>Z5d(rT5#m8qJW%n1RRmOsp%kcS zM9LF$VDNxwX-QBc1~p|oLex~^SrsFRH^d_%YNAPu(Mr$YXWT0O^nb7WclYoAe(_F5 zT3V(*K@6RqQR>Yr$yE{r(HH*}mlVw|BMD+821-BMKWbwBacAGto7?lJ)u+aG9b0`r zqjl@4DGuSSxxbz>M`w(03VL>b<@jAS-@jkTrk}b0n&q}9$93M-;oh=v$<^^|mc_2v zo`bGfHM^=;{%%#&ZN3rUIO;l4IRIr(8J$&?Hh96jqLKAZ-=;y1F<0uddHcET)7uhT zDr*Pkmsgh_FK(_Fzinglm)Q%hm%8UPZfPs$rq%Qph})0sp}F&7(*qAgx-8K;>)yzL z4HiW$m zABnY_0li_`joCA0|dHk1J0-?s|4`(tvd%O5d~W%isOv+Fv;# zi}oDJp3!*MSa$b=1$iafs;_3eIC^h!(%Xs8Z3S85E?rG=jV=E4>hY$}FEqzaS<4IP z{G>mISWjOjs?)>j>O9XpZ%*CU+>+^fuyjb#%<4x6t~5Va56cv0-8|9lS3c43Y@YYw zk_Mu<%sVwvK@b~#+9QgTLzOHQU?emg&pD8RHfRYNzY_kfiR)_0+EDAOrA(MsbLud} zDL5t2A&Z}@$_`)Au#^hZ$4LGd8H;SRO$`$Uc3zw3Io+UDQDk^eM5I=!0|`ILA(2l( z?B4!W``;5-DiBAgBl$Ygj(D06fe7Z}8Q*22f@qfNgD1@5XIYVvHueQNYgM0(Uw5sy zvXnojpOXAj(uSP0Qv(xDI@wAhts+rFQAPqq@lj660R3Ogz#O!Y$4Lh0 zcgGAr(p_Sj#!?IpZ{@9VD4Y)01Kp-QS(22oe5Q)>2`7+-)kH}~zTR3CHKM4heKt$+ zIK0_l79<1fTWmJn_by{Dt#-4i~Bj<&bEARu0w%Cgs-D z2T}&S+SA|jx@3SJAqxopJWMKWM*&)|6yOIyFlpkJyf#fgX%-d;uZ|1+5j=QbU%mWZ zPvtd|d?T(r6K(3PJV#;DkJkp&{@Ig#y+Y3+(ZKqmycxx9xPNsl&)>Ns>k9?NAUEyS zz^NJJp*qWmNgb-vg+!Dwtd#vntuL4X}V zPggB+0V>3&6x9c_ z;TzyDsZP#^C}SWQ>Cs;C`sowlWf@6MG8Y;a>H^I%h*NT5GAAem4hoh*f=x)3J+s2h zfzladwwMQl2VW9Nx`%L}dz?s7^Z>_gxS6ile8-DRDLgLR4cBIn(Q0(U3&H_$>cnOM zYe)H|9`@$3tCTqHLPV^bb~ooX$wldoa@%Fk!+A{bB=E&&5?cwxZT$JrNb{x-w*@eW z592LRUJSD7ZIMu@*mK*GWzWvp&CnkhWKXcC$eu&*h=kU_AcxzL{EC<9m>_#j&S{1M zWsoz$nIe1f5%G4A_z3UTJwKiB?!Z;!qFq|u%fuNVpCTBDOr34QI!&*ysR;O2JhiHaLLc9dK;1yY<2^&yQiT zs{stR#j(XU1~8}%!(#ISxK-JDscoaN3+E(3l@JWMfXc_kBla?wU6fal+aKQzbWZ@W zqm%rtJZk1#5;|46$>Db^wfh7KX(Wn^rWNOldC^012m%#Gs}~hk2$eJ&+&4t4)2j(q ZW`pIS_|M?WpBe@Pp_PXr@=zxa{|EIw1u6gl diff --git a/.cache/clangd/index/FilesystemModuleResolver.hpp.3592EC8F444D6908.idx b/.cache/clangd/index/FilesystemModuleResolver.hpp.3592EC8F444D6908.idx deleted file mode 100644 index 887826b1014b2cfe08159e53d2d4533a347cebe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmWIYbaNA8VqkDi@vO*AElFfyU||KTFTeBCI-)f1F^$X?PoiQQM=9aDL!3Tn^XJjp3wmJS?Dt;}%=I+$z z3zRLhl{xC?y_{|us}?z_$<^EDoZ`{q_fe@?AEVQfo~jw%e^x)Oa@~)!whYtv)!bz$ zuFOq}2fCNp*7~DWr6oTb6B`2q6E8cjGMHfC1j;cmFfy@De7id(^rUPn9}_D(1Cs!+ zfEbuy-~cONm^oA8@QjudZ~2%wfYSVi{FYz>Ce2WknpV6JsPqJz$2)zWx7>_8O#E#8 z0x)eb>lwKq)EUmvFWXu&G4;@PR0K-KIV>?Tmf3@|4Gg+cCv znHkLKx;Hmfpbuz>0Gj|0Ocl&9plXnFVXA>H%}E5ASX`7`tPf%UV-g0KT5fX2eEp^+ S!pz9R%m9jWC}4&$7#IKrKb^b) diff --git a/.cache/clangd/index/FilesystemModuleResolver.inl.FE9654978E01FD02.idx b/.cache/clangd/index/FilesystemModuleResolver.inl.FE9654978E01FD02.idx deleted file mode 100644 index 01b22556358b7f534451ad17f340eef9746161c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmWIYbaPw7z`)>~;#rZKT9U{DWQzcCaY<2T29Qnw;)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582Sa zPx?a3qf?J2U5UB>XUe5HR~B4(^k>edD@uFM?2%z(5DQU^F0RZ?0$RmTl$uryp>q;J Xba7E~F*k_8XwaFnP(1Paas~zfXmw0G diff --git a/.cache/clangd/index/GlslOutput.hpp.F4B2DA50D5F7A96A.idx b/.cache/clangd/index/GlslOutput.hpp.F4B2DA50D5F7A96A.idx deleted file mode 100644 index edc3bcd0961fa0f20711d9487f3617ceba470b80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmWIYbaRViWMFVk@vO*AElFfyU|QMrd&~)e`HU|-!prj%n4dBB|cx_*@fyW$ZB z21#MN_YB3Axk-vZ7f8IDIaA=pJO(xIrp1f8evW8Wfk%x&}i`xKZO_@%~>b)s( sZVi}lQEE=2AW$nz7u;D4#YM@*;vhqrCT3mR{`Ewn8Y3eEFjQdx0RHD|)&Kwi diff --git a/.cache/clangd/index/GlslWriter.cpp.0C022627AA6639D2.idx b/.cache/clangd/index/GlslWriter.cpp.0C022627AA6639D2.idx deleted file mode 100644 index c2a6df6d7fb36fb6a5806ea597f146aa124761a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5130 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 diff --git a/.cache/clangd/index/GlslWriter.cpp.EA19CDFEEB3C33B1.idx b/.cache/clangd/index/GlslWriter.cpp.EA19CDFEEB3C33B1.idx deleted file mode 100644 index 3a99da3314d45e02a81a5bdb1f38a7310222c382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81954 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 RCCJUg%f~MsBEhJ@007Lu`z8PY diff --git a/.cache/clangd/index/GlslWriter.h.F52557D537D619A1.idx b/.cache/clangd/index/GlslWriter.h.F52557D537D619A1.idx deleted file mode 100644 index 2b4d3026d9a7426e365a063d07be389178e14268..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3382 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 G{rG>~^C3|H diff --git a/.cache/clangd/index/GlslWriter.hpp.AA1AA90F1F5BC592.idx b/.cache/clangd/index/GlslWriter.hpp.AA1AA90F1F5BC592.idx deleted file mode 100644 index 52e1ae37078b2192f996107c304840b8dbdcfc52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmWIYbaVU0$iU#7;#rZKT9U}Zz`!5^#Kk2=nTvsR2vDwK&eF3Rxeht-usx`jyxu0p zzSDR0j*#hmP2E?rbNZK+tL}7uaXC6fghjkn=l}cmLPYQwpJIbpw(BM$^Iy{VDqoLnYx<^O|eEqpo5pWZLn(D-NF z)W*d#_4cm_{PFd!&D@fCDV|(HH+H!NswN(O6S*_+#n~E{wO7AhywAXOwm62NxH2~> z9_Ut^7ydg1nd4`$F|jc)F!QqWih>CSPM{nE10yqQ^YeE+HMwnv`IuPQ8JPKb`NhBl z0|!_E1J5;qXXPQi=lPg8fYJg&0uo>XCe2WknpWHeRQe%HdcumYlO-9snAthlRUn!f z7|L`?R_{%TD`(_k7GM_;gqar1>AE*JRiF07V}ZFqbo5WLE!VznGbkiG_g)CJYP+1QP&lahQ|< diff --git a/.cache/clangd/index/GlslWriter.inl.E50041BDF108763C.idx b/.cache/clangd/index/GlslWriter.inl.E50041BDF108763C.idx deleted file mode 100644 index 24a6edb1c26fb2efa231963cf9c21ca1a2de2b3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmWIYbaNA7VqkDi@vO*AElFfyU|@^h#>R%;|?Ggon;aPHh#~vMCAZmRGJ~ z#g(~9c0jw|+I0HN->s14CC~5u*$XFDI`cOt|4Cm)fHf-_3!l*%{gSVOGPW8KuC^E7K`iy*DMUJientN31ca z0H~T*oL3H}3MS3W!@|bFCImAC$OF0^CJA&7FSj^MOYNnlg?FD?&jqlOZ8kVUPUh+WurC-GDW$M!qaN zZ_55!ux4I|yKH>H#UIx${#@oZr{-gL+0=^cVzGKwZs`+CmuZ<_KD)K*;u_|!!PDyI zbpL0oZ%P!X+-k?aA+)i$GB?Qq=#th?AC;^2eVon4#LU3J#Ldnv4<;BmfpQECj7+R% zIkWX*|F2%g$HdCQz{D%Zs{tk$IKT=Ric-^xi-AlX2O-nV(elEKJWRa8ys|J|yPT?& z0_XiRXXIjH=U~@^=wVQ)My6c`y9fH43A0O9p~djJ3c diff --git a/.cache/clangd/index/IndexRemapperVisitor.cpp.3FDA3F0181419558.idx b/.cache/clangd/index/IndexRemapperVisitor.cpp.3FDA3F0181419558.idx deleted file mode 100644 index 86835f7390417a3f0372e5595c8d35ce0126135e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15904 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 QY&D`*XYJ_c1nw692j?!mcmMzZ diff --git a/.cache/clangd/index/IndexRemapperVisitor.hpp.5A1F3D267CF83316.idx b/.cache/clangd/index/IndexRemapperVisitor.hpp.5A1F3D267CF83316.idx deleted file mode 100644 index b3d7550816eb8f6a85df9a1b0ac225153f69758c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4748 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 Laoh9qN(Kf1`zO%v diff --git a/.cache/clangd/index/LangData.hpp.AC8ACDF1204F2BD1.idx b/.cache/clangd/index/LangData.hpp.AC8ACDF1204F2BD1.idx deleted file mode 100644 index a1648278ded248181957026a26550e0a8902b94e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21138 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 HP5AkL;(}BM diff --git a/.cache/clangd/index/LangOutput.hpp.0EC4C5E10F5E3E53.idx b/.cache/clangd/index/LangOutput.hpp.0EC4C5E10F5E3E53.idx deleted file mode 100644 index 3b470ace24f38d88185c492be93fff32fc65ac53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 378 zcmWIYbaN|WWMFVk@vO*AElFfyU|YvXND3G`F@oxWsIlUDY`6>+3;myx$cgq%Z9a+t})xnf0 z%UmXU!CRBrHhzhYCs|7Oy%OA&w#;qcbMEU$wr8-`>XP#9ztOt>gDClSOhE=n#I2Qip7l{C17_VB4NGBYrP H1RwwaJuhy7 diff --git a/.cache/clangd/index/LangWriter.cpp.2A5F975395A1A129.idx b/.cache/clangd/index/LangWriter.cpp.2A5F975395A1A129.idx deleted file mode 100644 index e931765b54e6f325e0260c8ef4e623105b9cd6f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2242 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 J+PTM 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 sIf)G84|N_JWPW)T(@6JiiX$cQ4C04KwlcK`qY diff --git a/.cache/clangd/index/LangWriter.hpp.581750B186F7B47C.idx b/.cache/clangd/index/LangWriter.hpp.581750B186F7B47C.idx deleted file mode 100644 index 8285004741a78256cdf0870f2655f6e2e64dbc2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11960 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 diff --git a/.cache/clangd/index/LangWriter.hpp.5CAA92D4F544B759.idx b/.cache/clangd/index/LangWriter.hpp.5CAA92D4F544B759.idx deleted file mode 100644 index b6a43a5bea5e17d84334def2781c87430482eb43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmWIYbaVT{$iU#7;#rZKT9U}Zz`!5^#Kk2=nG1n*2vDwK&eF5?+=mPVSU=QAUboZY zyX3n%y7Z;O4iDe+W;4{D>N&nxzWtx0V?p4Kr}wPumirwGVq5T4_F;_-U-6nfeX=_h zPSpCIP`~`tLgV%-H9f8C2P|?QN92A_ZER)9sgc!H&Aq?+|H0@@$-*7=?5(Dsc89U` zRqgq+$nD|v^1mgQB8_~5JQ5yDrD}6#r=35=n{@xo@mZ;_KAl+q)vj2Ep|~qzkrZ{1ek#7XDCWdEA9d+uD>@UWx9Kg1S1c#0K0%7OdHI4MlP_m zFzaA6P#9z<*fJmi(*+a;*#uJ+%;~x}H&vhyXf{6^KM%~z((hk1s*O`80adeeu&clf sDN4;r1hI>Yl8g003})Ar(tD50VXkLpWMW}p0trC?C|02W7@sfz02uL{$N&HU diff --git a/.cache/clangd/index/LangWriter.inl.EF43BAFD9DD11C89.idx b/.cache/clangd/index/LangWriter.inl.EF43BAFD9DD11C89.idx deleted file mode 100644 index 30000ee14544f7c731d6f88c5dc126555e123009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmWIYbaPWOS5Qr=0B!BQca1H z&#jlPUq651yzkZXeyh5+UnoE6uXon>thVO0@^k*4SIfgpiJcN2R}>|(CnNnrrBnZ|&O5=t F000xYZcYFI diff --git a/.cache/clangd/index/Lexer.cpp.D91296467F304958.idx b/.cache/clangd/index/Lexer.cpp.D91296467F304958.idx deleted file mode 100644 index fa291da021129d1cb1576041196b732f5555061e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10156 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 XXdBv=R@2sfr6!Eb)Y8>T*Fp4u;&?Cc diff --git a/.cache/clangd/index/Lexer.hpp.DAF366F8B15496D8.idx b/.cache/clangd/index/Lexer.hpp.DAF366F8B15496D8.idx deleted file mode 100644 index 750aca7ab33c65dd8f34cd5a4e8a6988962680d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1478 zcmWIYbaUIs%D~{9;#rZKT9U}Zz`!5^#Kk2=nNt}V7#0BqD(0-6azFc!fxz+4%UPbK zOip}p!UGe?X{oXfyUt4#% zm+_@-(QABs?$^###U*P#p0M?MRKdx$wwkM;e>?N5@)!jhtK77kL5Ibc?yxFznYCwm z$on5RZZ%Ek6S)3o=Hk__wj{f5dy$?h=r@r)b+$yle<|a8p<*xF5A~O?+}|@vbxGnG zx3c^Te{R%;_AWI)5OT+>jWhFt_30~FqOP8^dX`?-%66#^|GQdtvYOU(J!f^(U;7y& zMZ!F92^Yz)SmwDocyGh3Ui}lItK`r7F7DZ6EtuI7di`rfyRV8@n7);m(~~mBB)fYl z{g1A$%3@^O`{Fid$G@+CxowrsK4rP%Fl*)oH&M~nHu;wg3dUDA=fzDE7vP?ECCu;O zf_eM4J)3kYaWdPj$4gxjS>G*+x+PM*_SA0MMcZy(bpF0ix|3CBP4s-{AoBxWj-AgB zF5G-xVfv-a%yUAyv!;sP{+v>J_}Is9!hS7o?B;!c|4SOI(Z8Xuo8NPsp|~?511Oks8wYAM(6GdAS%Tn#S11FIKirc3XGrfq-?9vY2#twfSI5url`cg$;J#Z zA>&WU`4wlG!?OZ3b8Pm}G#`GJ-OaU;-|ko2>7f#r6uxiz;F& zKrgZ|G6?Vk?Pn-TO)CyzVqggI6H`@q3FZo*0b$H{4U`D}G6EFxsNeN~okEkq@EH^AA@rbI(t7wElQ-;Rbr}{Gc z42}S;lVOq(fTbsxVqheJ(;PIWVbVZha9V>2Lk$CZ1(dvC_7 zolqbRV=yoXA(#>fCOo|`FbE?=MH`auEac+f!^SBjEG{7_B`qSxAcc^YL@>n>OaPax B&~;#rZKT9U{DWQzcCaY<2T7?Ab_;)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582Sa z&p*pGYhqkl93L~o^*xex#g(~9K!X{IQqzhdbWS3OE-p$g<_0ks4LWlciYH!Q&cFZw DRRul= diff --git a/.cache/clangd/index/Module.cpp.E3358329D8511CD9.idx b/.cache/clangd/index/Module.cpp.E3358329D8511CD9.idx deleted file mode 100644 index 49bb40d3504b462d0aaf9d89a0226871f83ad0bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208 zcmWIYbaUIl!oc91;#rZKT9OE4GKc_iaY<3;9wr8cC#(z%6?2w`Bxc_>5V-pMA6M;* z1n&u==6+G)Tz4`|zLGgpQkuiM{QZ|NpGxeC zt}Ond%;JBTDMPVl!Gk%aTUg#7m08j5u(@6RO4tLJ3)e0r7_PR}UAv0g;+5j%RMj~e z<&sq|6|S7C$a=LXfiY%fFUNvy=|3K9nJKI@$Kt@A<%a?^R)26fdrN%&JjFb-ngWK9 zl2ZZQ9ADxpZq4g#UyzgCaI0pqoTQC~|L0pL-1gf${Q31GyhcxuJN8*z_rJQ!kJ<%e z&gZ(k2$*DeXr0>p`ZLS6zuy<@zrO6^n`dv&eq}kl_l4ASvrQ{RALzeVNsMP}sa@;) z*3t0cvr@oM9rcGP;J2nPY_xBm^b_ppu#3a@Jt{$V!lZu5@h(+ZoI0z^)oeVTPNL3QD+AN`$q2I^~M z)LSAC$y7vJbNXbK9~9rlQa62V{`rcK2u-ec;)fW`y<UA^Xc4;*A0*U|M7jQOm#=TRp0itk|$Rw?fKT1errqL z#5LDiA5A=4w`ixY_~O~i;yzxz`J-%30c&LK42?}L^S<}#r%(6adq3q7r`_}=f5TMb zRNhXE5idCR)B9BX+&zb{hVCy-`~TqR{zBQ3NA@$*4qg?~mY-TGA>A$i^t7(~92fP# zGfO{MEMDs+Wpwte~Pew{rzmWiuY>KpUg82fAJPq<|ZWr({iGt z$+n%fKR9?83>g@7xx~5DbtJ_k)fgn%*q9777u8xM7 zh7N-yI}4+>CQ!je!7YsqI-HMr7>s}l_yzbCbrkp&6c{8qSeZ?Pq*v8r%ps={0xD?DCN*7lITKxSviJ3>2 zi;;^9rkY2WpOGJlC&DNK=fSiB?FG3XrbVam;#!qZ--j$fleoD=;US^R!^%je}D`FyI2Qv>Q3N#nwZJ4=x|JxY7F`V_0QASr>T3i99x+pa#5u~KJD7jc4NHgkQ zsSCL6U@rfFSw~Nw0VD(kdN2k9gARh3oSTvZvO`5)O-fKsR!BlXk&mB?n@2{PSBY0y QQdmS(Ok7@Ffm4+M0PEz*nE(I) diff --git a/.cache/clangd/index/Module.h.D1A2ED2858B94A88.idx b/.cache/clangd/index/Module.h.D1A2ED2858B94A88.idx deleted file mode 100644 index da2387ae01df61bbe52b5a26cbab43918fc554d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmWIYbaVT`#K7R3;#rZKT9U}Zz`!5^#Kk2=nbwR943mL!6?4{3viCo1AaK<9d+?nA zl@6A$nE}f?L?XDn&BdOmO+Rv|ev$R^6|ObqdMttbZ`)ELKUF`!Z+m+B*`fyZ9-fWP z8)hjh1S%AqSQE{1jN|s-i@dgz`qU~q977I2aI%e<^VCVJ%JaR8jW*5lYxeee zoU4%C`0wq(i9PwonmU}W=@;ZKd@bbvci`Jko{BvmJUSLkHafXTxhA7+<#LmWHx4Sd zJX7B*Akn!{vc~k;bKwW4e?Cu&>=X|!vfCLSKDqwZ#L{<*B9hEtK%9e*Ml#=;%Vik|+s!xx;#Z9|avdb+h`@Ys=ZR?(E zr(dV(hVC-$}PjpmvSlb*c%J?Ze5wVfNBetzEIFEVrQ)-zWRTL|3Ln_=~vEx`Zb zZieE@+@uy@SSC7}Y};A;gM)`b5Xb`oK1nf2H3msGHYNd1Mm|=}cE!^Nwl2QH!ypWi zXW-Ki)6ij%WM^UI;Q}hqX}q{rCDivJHv>OVvyhaK3YcKv1S#s5sC%E=duXTY=UoDrm#K$fsefVGFYcCJM9;>|vO}MX5Q7Aa-$4ap%+9^+^Rk=t*L%L-J>UIa zzthetDkxZwDQfECqQ?4~Rh24=qKxDdUDdFRQ&7|hqNv99quVY{R|dI_f7G0NaJ_#r zKjH2n=gALCAKi)kw754eWp~Xs&ETERJ!fzAPtn;0pz`bYvXXnn*4*XVe{zb=g&)%y;^UCI)$eoeA_hZAwiV~OppLkck^VQ}# zYc{NS|Jbo>m){u)J8ZsBONP%Kv3!Tm6PXts+X-MtJwUcB2eAjZ>GDqOtCEYg`MoW`XkN&s}*#(kSdqWqH4vO1Mcj70!?Xkm5Lf<4S~ z7R3_he$H=|0O+}O!KUc+wGAxdNN8b4*e3zdOQ#jDXn7;BnnM;syR~kE1VFFN>^+s- zy>IPkSu~u6$2QvbvMlLoo6n<^)2%ErkjTBP*C+w(o~kbEUO2F|Efyi-JcG{AO91p> zdgg%*@mD)oq$ZJPIkJ2b0KMZz(v91>k)te%Cv<=dm?QxD&{vx`g@&4rs*#ekG(nvZ zCxP73M_Zna@0;?=52LAhv>pQ%0rr;%PM5x(-1TBKH4|szv7NTROs%1&HabWS2AFw8 zqBQI9*4Z=lsdrl^#Hbi7OcDxUd>Cw>Z?6K^49>z?I!KejVNIBYeq4^7_P}5KmzFp% zm<>rVpu`<7ILEl-?M~TUwkBH-vj%D-fr%=Ez(8dRT2dFZ0MtdyqO`yas*1tbOq8waBWK`1PeAYm^ElDtV&BbcE$#4M^1%pgEw7S#vYgYbx1R2>up z1V<_>3Jsiq(8$xG%D@TaPRydZ;As#R$yrntm_bk^9Z^VN-f7yzPhM|auP|cU4BJe2 zstiZIt*_y>su^qx+w#CnR;9K%@+u9d=^z&d`>;<3?Pjna`*jdGg9A9A16?sVh=V$q zm-fOZZ`Ebgw<^fca#;clEwq7TC(0X21j&=RvCtMhq(SB;Rq#X0h!|4setB-h13-Q< z+mh{qc9qwjt45brb|A7P*Io=;7@VWbF+!^$Boc~vRzL`l4l#>o1eoDP9LDkL_&9mE z3~qxLCXbem44D&u(qJPg@|XsZ%*fAy%!x;Zyc#P&20J(h59(z8H$r4ZJ2{vy2D?-) zTK3{rx-pCmgWXoQOI~@D9t;N>gFOizE3Dv~44Qbnfx9gS+HNghcdri_v9Lr~3OzAm z`+Ev|vjR#C-(()grqobVS1GDD+E5)W6K}L4j9zhYLs5);OUt*ceEZ)&1JQu{ynk;v PGV*g*EThrJu{8BB3hBu! diff --git a/.cache/clangd/index/Module.hpp.564F7E14559C4586.idx b/.cache/clangd/index/Module.hpp.564F7E14559C4586.idx deleted file mode 100644 index fe15eb17846bc201132b1b9654bb0b686e4a3b02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmWIYbaT7M$iU#7;#rZKT9U}Zz`!5^#Kk2=nbU#vcOb5qGq=~4zsW$N<#&3_P6rvD z*^8t%Y}h#?N-Osbd*%JIhu6J33Jv_!%wvkm&v&+$?qW+=biLx<^xKTjS8TejXgJFv z%VhVfEnLkL7cUEI<22KletpG$KHa`K7mgZQ$Ihq}t7n`kGOO22-2Lj z9}_E3noo>R228-D8H!TVio1YHZ%*5?vn{^UmXU{vkB3hbrVVC2BNxP4h@lKHOM${5 z8)2$~IbHYWrV8`{4dG|w=Ygq$83t4hasW)VdCvj;nQEMOfx_$@>Y fl8co=3}z4k0Zc8I_>Z;Kt!-jrWM%-yDhvPsf#8%0 diff --git a/.cache/clangd/index/Module.inl.C69C9779A67C2D0A.idx b/.cache/clangd/index/Module.inl.C69C9779A67C2D0A.idx deleted file mode 100644 index 193457f4b09bf10110bbe39636e0ef96e8d3a200..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1220 zcmWIYbaUIo!oc91;#rZKT9OE4GKc_iaY<2T9gr4cWMHV6llpEQexdxNzusBjv)Y>1%Fp?GUM&wZEn-so`=IB@lq*W}kL)S=duGp* zIYA4i#D{F?-&=Nhs~*W{YcFsO3lo^V zW{m`cz5lSfDFb8|}!MX5?-!#>B|Vz$_#nB*rAmB`d(d0h9xRD&1S#RBz0y zf=F`+aELLLk)HW_^a;z2ay&R5Eo;Tq%DT0YIN`V7u)%vb>qwfuCTfVin%x3%I3e?Nb#Loq@mj}ghVqE8p zzF$pn11jQU;zLp-!6*UuK}yToX%Q?XUW_u#TvA-BFq6a{@*J3Hk>w5aFF!Xw4@@{V zO-zn2;D8U%zdZar3NT?_M!m4t9AAAw{^bznhB;b<8QCUPgT3>^lvaiVjpUZ%mWJt# z$}wyx_NpoZ8i^b_fisos9$ffQ0`j2@zZOh253{h2uocV#m?$uGKxqUPI$6q^MoX?N zX$3lmUyENGrV8jdD`9Jx-e6AGy}79ZeL#CTY&o1^ik#VlZ^V7+o5sw;%%#Sq2NMRy zk*<&_OfN8wbj3|!aTJ=iCz=K>;(bbN%1&Z~wd*Sr`CeXpwIK diff --git a/.cache/clangd/index/ModuleResolver.cpp.EA91DAACA2896EF6.idx b/.cache/clangd/index/ModuleResolver.cpp.EA91DAACA2896EF6.idx deleted file mode 100644 index 9bcf6786eb2fd54c981b10964c8d53e163208993..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmWIYbaPW+W?*nm@vO*AElFfyU|6V|GnQAv~l@{66t1H{Omoxq4oQ#cY6>esp=&t>C^7UaU4Mm=oCA%lr{dr%KG{?B^ z@6+dx%6>jPe)jFx%^yEre)O+$|BmYV^5UaEd}X#>f19E4uIYMDy|3hdvv0`?hcB)_ z*7r-%psqhxI{nkVpQkI1em&Txc&sAbdBfkX-LX8kIKPx+c^h81d06C4(ihbSCwulD zeEDwU?Mml=NBQ{6F1$W@hhOgTE$e>{J09+4d_8T^3XSa-f7>qKyX?>Qih{N_9>(5-? zbmo$aisqJWbzdCBxW(9tSL*Azoa{UCo6r0Uzl(!!1;fM>E)71e%PvK_MWh?)cC8ZW z3V0GZae8K>(7gLkMK(4rlXmFP@N5c*Ix*8IbJlYq(QBJyL{vJKXnpmW=lkWILv6^+ zqb4h-R8IB^%+^`rwyNjSvI{d$_8i%BDc!L8#m5G@;|I4fmTjz=7^4}vJVoR9s?I;l z&Rx~X4_VU`RGD{b^9jCx+jwTCw%_iwvF)7@veY7bmdMnQsYfoE1f?knyRJHARX@4r z?U&@$ho>5|go}%Bh)7Pkf6UzOzseDNmdoPJ=g;-%*7nC)&QNVaKm}8!nVTdJOj9eKFg~r-NY4{zQd4D6;Sl5yQkLPC z;bGta%7H*pYFe=kkiI6BEiW4OT9=7Og@ciUAEph+6XH;SNy0=Kg}^4kgo{#h5qgBZ#n0t^^cu8Vw`b^KRbDWft&a&AhFI#5_%RZ)mjOq5H2Lz0c1iJ3)2m{pcl XnpK8Xj#WyKn}?T=UtCFoQGo#f{pDc~ diff --git a/.cache/clangd/index/ModuleResolver.hpp.9290CB3A27FCDCAC.idx b/.cache/clangd/index/ModuleResolver.hpp.9290CB3A27FCDCAC.idx deleted file mode 100644 index c73991de7f97a4863cf39b0cb7264e70c3c14cad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1380 zcmWIYbaRVgWngel@vO*AElFfyU|9;>PV&ufHsERdoL+YH zLZjD&vKu!x{=N{QzuTu#qJx9eiz&+T&31m#BUiH8<*YO($-b_YKVEcV^0U21!qZR8 z*}L#+k%M#Gm6#jlb1a`c|Nh;%JwbRO3s{Ajta0Mz5|N&n zxL5enA%Tj0&z*e^-*N8~>^^O9;N;xk$um9fPi?chu3}0T2 z{T_bbJ@$*PR=VQV$%cDx+W4?z5lNMP7p`DOF$4bMwXZYCB122N#WWqvThzyl0FAei!f*&!2C zTV63HCZM!5v$PK5%sEyz$D=O>5{0{RE6BjrQ$bV8w=w0BN#KS2kASVfn zL|9S)dKQ!fU@j1Nm#6FA!x|3^8ZmY;en=`{U^sUC&l2&rH<^rFoa`Lz@-Sgof?*T{ zClr_=|J98)>zLX#0}TPCahU30PS?G;sRDgWK$qys8N*xxROF=`0CW7R^> diff --git a/.cache/clangd/index/ModuleResolver.inl.DAA39B156E800304.idx b/.cache/clangd/index/ModuleResolver.inl.DAA39B156E800304.idx deleted file mode 100644 index 4396dd846370910a467050e14ceabd65064185e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmWIYbaPw6z`)>~;#rZKT9U{DWQzcCaY<2TJdh3p;)*%R9;eTEZoPE<`uP**eXpMP zTh+DwLitI5y|cb&wKcDmpY!*;S{`Ov#H951LC=vXSCr--*;DfO%$_H6f)-4P582Sa zFTc(!(=RI^tFX>5GHYU7S{xrU!uZxk*4P7>ZKUiXn7PB8V<7N-pLGF&GUx Na~6sxUSH0@001NvLBRk3 diff --git a/.cache/clangd/index/NodeList.hpp.AD6E957801D54B72.idx b/.cache/clangd/index/NodeList.hpp.AD6E957801D54B72.idx deleted file mode 100644 index 140cf7d602987305591a98c636cce275c7edfd4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10368 zcmeHNd035W*MEB2nw}C;?OimeG?xa+RLV)p!6}&?LzKBFIh2T(aLgh?h9sR1QIyCW zk$EVR>5%CyM~09{?^@5^%f0t^UEg$iV<-NRb<8tyGLs863cb{yAx zLeQM)5wpfgIF4%ze`9CGOrE92ak~MSvu%G$*_4t_t&%^upBQpu&^u>GN&bdo{daA0 zU)M2jS%>H$o*<_l&b1^)JxT zPaEsmV7NI+wkCSy*8GKqy)LY5J?vh&?#i!~jlZ{=tu0&RmNM4nLZ)ZazANiY_r|>G zYIV&a(S>`FyVfi2j>oV!250hSoE_kLJBFWX+Uei!{*#m5hK~;_DtFYbR=0ZY@%Zqy zKi3ydtF!MsXzlsYjuv`TQ~Kwgkc4V~?KxwS?dsCC)4S%^7Z*KF_&oDibo)Jr1~{h_ zj=t=aU-DcdcJHDxqt5!taiIxn31R8g>ebI&t_~}T*lK;egJy95>^)Q63TkT_?&n?A z$UgP)-x~&g?DD#)uC9D~&Wt7>ll18`4E$^sPkLZ>J}R*>-pIS8acPQgYkE zCnKtt<<-+sOA2o-wsZEWO?#DKv_k5Ad%OA8!ln!BzlUDme*BM|i#a);)yq4avyGiQ zJ$zpaj{Cgi<*D@5L$n3n(Uo)d;5=mF!0CZ~I8M!_#m(LCFQu;Q&|2VI0>PHEm5Bo* z?ETy7&N=rJQi0b6LKm)!R2&##jCO5py0wE$;H5z5#r2Yk10zHqjt&mW+GsBDMnLf4 ze5B&Q2#+?GUH;yD*HYkH0HFidK_(82Fd^gG%^^oVx(mDv2)()9QgL7e@2+oG?!VE? zOW+NG(39&a6$eJ>U9FQlH0n?ffma8D1!o}>2S%7MrTg@Wo`d=cydDtjI6Ij*FhbF9 zAyEPRaUiq>LJzKoR2&##*o~hgfBhW%i@;k0p%2$bDh`Y=MWba=$6b%Y1YR2m)||CW z92j9~&6}O?>=MQbya0rbTt}HWFoNu~dqY4~=cxj(0ff$6XQ?L@@Z;EbtaUaORw4 z;=l;;w=K=g`x>VSygm@@IeVEnFv9HFF@DkB-_r$N3kX)6l}sEMp=Ctv+N9;Lb_skN zAavupNyUK?21gzr&!3&STi`nYA%F{ziUT7o=*RCKdsLby@b*A(=iFuDzzEi+ulvRC z%P181c0h389Ax64L~uXS=rC%-F@ZM#LU*paR2&%La8^y;%-bFp1>P74zMQXA92lYM z@8-a{_d|ft3JBhuw^SS$L1xl3HZr5*J%R5CguYx~sW>n~i-6+qlVu}-U(Iptd|O!Xof45Nv=D$OTHpfe~_7j>ydYl>b@a zErH;|xyZzU5p*`pu%73(^ozhd0Kt>o#_vuH2 zcJ3)`5_ky^EICV=I50v?L}aXiCCBORod3K$O_NiTi2ktT@y``Lb#wQonpbjD{q@z< zT8qbH*IwhiZ2lzkO$TEwJ>Tz92R23wiXm6jnxfit%#;9(WFm#{-ajknm7MgD}eFt5lpEB zbR(N|yNycK%bPT=HLx*a(MtCJGUdUzhq?wZC0;+8GIzaHpn- z!4{Fj%mBv3M=+&CSP8Ui#`C6}F}2`y@~iVRYyn0SlhGQo4INH@Icf{K@nFdewJ+Oi+nCzh0gRic zGs#?fd6CiLK~A6qQv)T7Xh&(y!sdD>BVA{W!5Y)W+5!e$XCo~m3nt-mn1q3!Nw_g4 zVIX1>rYR<2sAUocJtkpVW)ju`Ou~a^5?Y!`Xfh^Y&SDa7lu1~8FbS_YlQ70J3D1p5 z7;~6}u1(T`*)>U)IT_AyrnphMAEEnGvUasQ;{q1Ib0edtS!tHvPnhirYz%~CMoFcN zE9`09NlnLD&=O2Z_n`ul*bujooq&x~QZP^KdbWAv(eCb`8%shmI+a=Aez;9?KhuXT zIC}$AFHnMhMpIJF1#CQMVrL#U(VchLp$o7v8Blsq3$*nZSlz`NrbL*g+&XdNpnsie z?hb5>sT5_YTm#*B$w;@>)!d^&bzVJzjW(jA+Puf>dQp9`qf#7RvwsmQJFRm}Z=gqvj&CIu#8@xvs{@JzxS#3U^Cn1mK) z5_%q!FbpyY^9Pf#8e&#@Ri%yq=M0pK;baw_C* z9a%iiss7YJfHD41bw-^7m{1J13KP~hXWgAzcl#G$qbcZ4*txE%2sw5&1g6CBLvH43GvoiKngE>b?C76n#}3P?Xbu4-7y&3Cl%_uDzQIRt2(S?*cD(<93_jm$7{F*-f-@R@ zcdQyE@>J8Yz&>W%R?8QoC{m_aU{SPmq|(DwWlL>FMb;XO3*iG zmsAYFcF^%?JGRqajdH)J5pJmCY^-H$LAKPDH&Y5xSKgHTkpBNBsK9>T9;URlo&bl7 zhd`cXaKq8k@b75nW6DCikk$mSWPKv##53Q%f|G~ z$pGV3C${eS;A6(Gk4*;M7;(r~LQ|&PxIFqK!gvYkPJTGsu;Y701HxD&&`M(cF4mR2 z8Z`xA)J;83X^7jKU!xMH{1bJ5L`YqEJNV-s{a-{~s%ha~V{JtDnqEHu#;ilI(~gfW zRWFxJ16yI5rIvTm)$iNv{3b?&dtihi_t>+t)fQ*(N`x^95KIpzpc|_+(rsaICf?@6 z^_jp%XCij*`89p4$B&2u81oUqPhRUtY!{@>{-;jBRf(}wswFMW+L z<~@oDJtjP<`R%oRJSf3>lY$mKfx$||$fwBH^za3+$X3AGqpA-rH|&uBy0MNR-A)I4 zY1MYroCmtmS!vzI_S(@~-p0)XHda;i3`K8dpd0%p+I(<}@VMaMT?;`8Ix8umRuI@& zl@L3(YUsz|h1rWiH&%1>Ad!AcnA54baxo}DHXYT~`m)8Nyz`QQjZ@MJ+TRyW>gL}~ z=Ap3E)39Kc)6vrT(RaLgojY;MvrS7CGtr(C=cJX5 zg?910Q;T{{ed85Qs{O6J@u4>%)!ImPV-hh-P*bgXpmIY~y(1BAK=DKMB}M-BL5~~q zq(LRRL@Z_KF;TVHlb0g&G^JYINW_iOE2X>QjKKLFHMUGOuckl((c5`&6wa5nCK<#S^4Nyk^vls1}5(HKuCqD^IKRG9&Nn=pv~; zGDyTui+WUfVL*>=67gx3UR+f(xI_%^^a7~b2+M0_y3d+#Q%jcbD{|u4#&QS-361BYhTs3Il03zrgG;icR2PL zW@sj1m}C-0873*mGr7aD&oD7lwIp{qCMlPZa))D|DZhcp9gcm5JvEast}_W+4JKh7 z$Ry<#P}Mq4^&vs-aO`{7+A~SH5|uj~`wUA)CSej|l5!cW+MHEfdMK>C_-qBlLp(~l zyGxJH>)`8qb|u6^oRb2wUiN2a-I7bIfQ@02qDN`|3XNrU#jAmh_9u3IQd9phU(L0^ z#%<8OnYH?BbXJMwdSHuhpo&`Are&e6wpJs;=!&Fd%$=g?>N9(!fD(Kgpr9Kyd|{?} z+XEW_##WBvAN6jKcCeMBv@_-4`heRF)~TQyVG8fTul?_S{dIEc|CmU&FA4p%Mc57e zu9)`}%dPq_zT|!SZG^EKCzaf=zf!|AQ#JvNmyO`6^A+RvB$#am7;h`Vbbzp2JWpCK z?FL}n9Ko}aO163tq!5-z{Yjcc|N_j z#eApxtaM;wBTY$#vOG+QA%mvuJ9p9t4UMMlz*hGBrdd`FQ@1VM1u)jLr-rpQZlSWY||7qjCtAa5)=Dg zyMc{UQXxbE7ufjrN$bA(W^l#>_0&vQ32vSisPFwp&~TS6dq4?po>p>k^!C>Ko*c~r zHWosZgtrW>4t0I@Gz-}1HFScVOP^+ygp}`9uqoaooNNW3)4Lt4 z1QRW-q}q1wna>_UMW6&dmZqdq2-tXCiTz?;wBhpMM~{JSAcA>$111&1%SoYRssL?d3@b-zZDliHwHYq#V<0oc37C+ zxd6X3=xga)ka_7X6E=@#pv_aW4X_wE6!D}*b55@RyTO-XN^G0S42Hr~=g_rkS9l#~ zQ!P^)(yc519|j6BFl29=gBd|r;k#%Q`tHaubu;zio!09 z{Pszt-{M#)_UCqwsKt&xA3Xw$Q(%}urZYpJLiMzi|+F(DuInB zL=6Z1f&=G?Wd$Ack6&4M(U}NtPF@+wW^Oko> z40OHl3Si9R1kWwLpMEj2PYu8rE;4CR(=^7ARg`#UC)B$ily0hr zmEd(Ghfu4{abD7H@+V-UZkmcR9q7iyN4lF1cDYhAM!x}+;3Xj?zi$8Vbp6hi4WI-a znHnwbnB)F&)$0+)%~K$wU*kYGx+dwSLjV}hgkbZeB^HgX{`v+=Fh0|nJRTK$H%Ra0 zH&_YQxU>>_d;ld_laZ1I59;0ex4ZHklqfe(Tuj8Yad`h@W5&k{_z&ko^J3#-U*AU@ F_a90+Z`uF= diff --git a/.cache/clangd/index/Nodes.cpp.1C5DD9F7FE6C5283.idx b/.cache/clangd/index/Nodes.cpp.1C5DD9F7FE6C5283.idx deleted file mode 100644 index 64ec5f8afa847e2e6541d4ecd2d275e353e1594e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4818 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 diff --git a/.cache/clangd/index/Nodes.hpp.204926A98A922049.idx b/.cache/clangd/index/Nodes.hpp.204926A98A922049.idx deleted file mode 100644 index 5f1a0bcd9d8933a673314348b3a025f55b8476e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28364 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༗sC?a-N* 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 A#{d8T diff --git a/.cache/clangd/index/Nodes.inl.BC11D985D6F3104F.idx b/.cache/clangd/index/Nodes.inl.BC11D985D6F3104F.idx deleted file mode 100644 index 6b9efde2b4ffa26a2e091ffdaeb162ff9f8a8d12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1002 zcmWIYbaQ*e%)sEB;#rZKT9U}Zz`!5^#Kk2=nH7u-4Ebyf3>9K&v&k}c(Uu~ zz0S7Tmm0P@tv)9D<9WZ>&Cf3B2DhhO2xxEDKe%<%4GvxFRJp4`Hr(u6PE33gzU8Fw zgYqzS;r5i2{xkcRoDkp&@OT#GeQ0r+v0qYm3u8BdN?Eus^6 z%{kl*Z%&@Io+T@4TR~5S@;`p8E&ikbMnfr3Bp6|2#e)j(FG(SJ~JBf32TUt7TX1!*5k+rXS_hRO= zv8JnZ-v0jS@q7Aq+xm+p>5?-HgT1vxrk`8=#8fu;ziE{3m5m!JCQpBA?{=&Hys+1# zS5p?9*sP&6zjBXLe{p4QQV%d5wz1~Ez4iOA9S;Mi2!k+>1doo;QWlA&EIJIFEQ}27 zyo^Gu_1=lxlP}~a@i1@zm9WdP>kBPmkz2x|&%nvX%pkxARML9i=c?WN%H=!^TtFp) zyn>QK%UF1qu}Cs-vNAF7@B@_`;JP^dui4YrJPh1GC9=G-5<<&ac$c$CAe0oPrWN;s z(uB6etH%FdbQrmW6*&|YfUX3C^$$8)U)(h_V-gYO{Lko`Q%K6OS;v8M^~Q3y&_3 zIZP3ZW|RU4nfxcEgx&?NN$2^slJ`8}^#wXyltWYz=J5G9H*6_OQjG-}$;U2(WF!ZV z7|bY`D9}hy5W|dQ|1j-v=bDq^OtsJHPkB!b=luq%=5*q8hq;HLC^aV$*0ldmud3Ni?SM8E(5nt*en diff --git a/.cache/clangd/index/Option.hpp.4BBA65DC50E43052.idx b/.cache/clangd/index/Option.hpp.4BBA65DC50E43052.idx deleted file mode 100644 index efb215e55f03ee7ec5c22f45852b4712ffc81386..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmWIYbaPw5#K7R3;#rZKT9U}Zz`!5^#Kk2=nYxS&45C1}iaBd1_~sun;A#6DtaaqV zi~t`=Q4{lHe6vGx*|(h5)9}4)rlb=3$S+v%e=Vcgx5_ypC%;MCuTPzP`k!7Jclgf? zg9nNMUf-RILRwAblmm;!V=GI32VS}FJL7nh;d-l`$2`1)6Kh}me<#o)|3Tx|S>BVf z-@hg|pOTuSIi)Y#-|y?gc8)TCucfNY4Y%@Cb3WzSvj5ukRGO1lTsqE^pN;4Jj>o!M zZy%~IOSWpOv^sly(*(}>(=S`-e^%M+cdA5edFCvYqdZdtcj>Cw$lP46Ts_0<^|GJY zuhxpb4U_t^VGCn)oKN1N=Fqd;FOBk6`5%8C%EsMa5cTvw@6?Owhp+7}o?o%OV|j^F zvcSV9rxXn5UhiR@w{iW?<42pbW=~jHy7%5KGmm===KbsC7>X-%lbV2`Cq6Z=U7>4# z9TO89FOUlaTteJJ!VH`cj`yYG?_W(}Xy##HLh&%%)3lqeI zqSUnFexPkIs~9E0R>*%+O6XnSn&h^p^$Q85m&FjDlc?!2*P#C^aV$q^7tixmX{> g-~ka301X`whwDqxJiRGgs;8MbdAJ$4p$dQ$0Iyc&fB*mh diff --git a/.cache/clangd/index/Option.inl.CFF0523FAF2DCDA2.idx b/.cache/clangd/index/Option.inl.CFF0523FAF2DCDA2.idx deleted file mode 100644 index a9cd3a0c5235600d8b9609c0f9c9254b68aa2545..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmWIYbaU%qVqkDi@vO*AElFfyU|UoQwPtjI`_n_RW9a2UHqcA z*Vi?Q8pgO~&%X4ZZ`T7?iId7=9Tjh-kE?0>w;l_TIc_s^i{VBK#+4H*Sc)rilbnD) z^S*Ta{i`Vq%{&aOTnwD-V(bbW0)_(C44ll23~cO-9ISagD@@;t9{9q;z{AbJ$tTVy z&mkf%BG16d!UR!Jl$us-01ThYZIU0)-8GSBl;Py$R$;PDPj@Fq%mU>_qubN(sFST$5xt1-Jx6V0!xw z-_}^N`TcA(o80!azRP)&HlLA)lh20F38s4S^!GiBHXISLoVbS0m0`JCpg}H#9#L drRF38BY>f}D7ly$#NaIXWP8s}z|on30RWW8`~Ls{ diff --git a/.cache/clangd/index/Parser.cpp.0F0BDD9A80646B86.idx b/.cache/clangd/index/Parser.cpp.0F0BDD9A80646B86.idx deleted file mode 100644 index 7539f527019a1c3c792eef9090b35e46117b6206..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1918 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