Closed yyc-git closed 4 years ago
Hello! Any Solution??? @maierfelix Thanks very much!!!
Dawn shouldn't be dependent on the Vulkan SDK so that shouldn't be connected to the error. Did you run gclient sync
without any errors? Also please try deleting out/YourBuildName
and make a fresh build.
If you can give me an error log in English, that'd be very useful :)
Dawn shouldn't be dependent on the Vulkan SDK so that shouldn't be connected to the error. Did you run
gclient sync
without any errors? Also please try deletingout/YourBuildName
and make a fresh build.If you can give me an error log in English, that'd be very useful :)
yes, I run "gclient sync" success, and already delete out/Shared folder.
where is error log?
the compile error you get, I need it in English
D:\Github\dawn-ray-tracing\src\include\dawn/dawn_wsi.h(62): error C2220: The following warning is considered an error
D:\Github\dawn-ray-tracing\src\include\dawn/dawn_wsi.h(62): warning C5208: Unnamed classes used in typedef names cannot declare non-static data members, member enumerations, or members other than member classes
D:\Github\dawn-ray-tracing\src\include\dawn/dawn_wsi.h(62): note: To simplify migration, consider temporarily using the /Wv:18 flag for the compiler version used for generation without raising a warning
Note: include files: D:\Github\dawn-ray-tracing\src\dawn_native/d3d12/ResidencyManagerD3D12.h
ninja: build stopped: subcommand failed.
I have run:
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
then run:
gn gen out/Shared --ide=vs --target_cpu="x64" --args="is_component_build=true is_debug=false is_clang=false"
and run:
ninja -C out/Shared
then interrupt
I cannot help a lot here, but I suggest to try a different version of MSVC, yours might be too old or new. Please try a different version as shown here.
Edit: So what you have to do is:
gn gen ...
command.sln
fileI cannot help a lot here, but I suggest to try a different version of MSVC, yours might be too old or new. Please try a different version as shown here.
Edit: So what you have to do is:
- Delete out/Shared
- Run the
gn gen ...
command- Open the generated
.sln
file- Switch platform toolset in settings
- Compile and pray
Do you have the already builded dawn-ray-tracing project? So I can directly use it and not build!!!
You can use the files that come with the webgpu module.
Edit: For windows the binaries are contained in: node_modules/webgpu/generated/0.0.1/win32/build/Release
and you need the following DLLs to be able to run dawn-RT:
dawn_native.dll
dawn_proc.dll
dawn_wire.dll
dxcompiler.dll
dxil.dll
glfw3.dll
libshaderc.dll
libshaderc_spvc.dll
You can use the files that come with the webgpu module.
Edit: For windows the binaries are contained in:
node_modules/webgpu/generated/0.0.1/win32/build/Release
and you need the following DLLs to be able to run dawn-RT:dawn_native.dll dawn_proc.dll dawn_wire.dll dxcompiler.dll dxil.dll glfw3.dll libshaderc.dll libshaderc_spvc.dll
where to get the DLLs(e.g. dawn_native.dll)??? How to use binaries???
Thank you!~
If I might ask, what is the goal you want to achieve?
If I might ask, what is the goal you want to achieve?
I want to use this project(webgpu node) to run the ray tracing example!!!
Edit:
I have build dawn-ray-tracing and webgpu node successfully in 2020 march, but now I build it fail!
MSVC
I have found the all.sln in Out/Shared/ folder. its content is:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2019
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(dawn-ray-tracing)", "../../../dawn-ray-tracing", "{DD82E062-7A38-2EC4-194B-A5DBC6C8D427}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(build)", "../../build", "{EEB08EE1-97DB-63D6-00CE-19D1E5F5ABD5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(config)", "../../build/config", "{C12F29D0-F6A2-507A-EC27-16C4CDBC12A3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(sanitizers)", "../../build/config/sanitizers", "{F784D0B3-E697-4800-BF70-29180377C4C8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(win)", "../../build/win", "{263CAC22-ED4B-D00F-2D8B-B303D9B6710F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(examples)", "../../examples", "{94910060-9EC5-4EA5-7A78-7A5ED127D1FB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(src)", "../../src", "{6E399C1D-8D56-6A08-EE1E-017CDE474224}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(common)", "../../src/common", "{6C777B51-6907-6FEF-176C-3BBE8C4D525B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(dawn)", "../../src/dawn", "{B88E6219-3373-D2DF-CA67-447D0A6EC98C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(dawn_native)", "../../src/dawn_native", "{61EA8837-A054-1AC3-AAC2-8C0DDF9B2E05}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(dawn_platform)", "../../src/dawn_platform", "{01FA78C2-A1C3-40DD-3942-D83FB33E18C7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(dawn_wire)", "../../src/dawn_wire", "{5FA512E4-54D4-0CEF-65BA-1BF9182A5EFF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(fuzzers)", "../../src/fuzzers", "{76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(tests)", "../../src/tests", "{6EB7DC50-15B0-4A74-79EA-D0F828478F95}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(utils)", "../../src/utils", "{0846C395-F34D-8BC3-F5AB-85710B7BBB21}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(third_party)", "../../third_party", "{762615FE-DC81-6D52-F437-9B04DD7B651F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(SPIRV-Tools)", "../../third_party/SPIRV-Tools", "{4327B486-10B8-0BC4-86F6-79AD54B06938}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(glslang)", "../../third_party/glslang", "{E9B866E7-A66B-47DC-A0A4-359E9791D599}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(gn)", "../../third_party/gn", "{199B998B-6422-C007-6D7A-6DE646EA88C1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(glfw)", "../../third_party/gn/glfw", "{88F499EC-F8F4-7908-11E5-E3D830348863}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(glm)", "../../third_party/gn/glm", "{331BAC73-6CBA-9C6B-E053-7707008CCADF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(khronos)", "../../third_party/khronos", "{B56CB57E-7A8F-2B6A-9B82-658921CFD7B1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(shaderc)", "../../third_party/shaderc", "{C7934938-6A8E-25C5-8E78-1DBEA740C8F5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(spirv-headers)", "../../third_party/spirv-headers", "{9CCDD176-2EF5-4F56-AFDA-240E52EEDFC7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(vulkan-headers)", "../../third_party/vulkan-headers", "{FE8EFA34-D39E-26E8-46B0-8FC6CDE5F7C7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "(vulkan-validation-layers)", "../../third_party/vulkan-validation-layers", "{9EF1869C-EC93-3599-6FB7-6EEEE1332293}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "all", "obj/all.vcxproj", "{5B79B3FC-F049-8624-82A9-FBE6254EE619}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_deps", "obj/build/config/common_deps.vcxproj", "{D0BAA9AC-DB37-3310-7D56-AB41AFB88530}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "executable_deps", "obj/build/config/executable_deps.vcxproj", "{97180920-0121-77BF-24E2-ADE2CC5FD3B9}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "loadable_module_deps", "obj/build/config/loadable_module_deps.vcxproj", "{57602616-2B57-1AEB-B25E-5B60E19128C3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deps", "obj/build/config/sanitizers/deps.vcxproj", "{C3DE6ADF-85B3-FA15-7FB4-BECC6F31A1EE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "options_sources", "obj/build/config/sanitizers/options_sources.vcxproj", "{29FE5126-6ED8-5DA2-3713-E820C6AE3E96}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shared_library_deps", "obj/build/config/shared_library_deps.vcxproj", "{C9198B5B-7259-D089-C001-5C3FC5AD59CD}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "default_exe_manifest", "obj/build/win/default_exe_manifest.vcxproj", "{B76E7BDB-3494-CD7A-BA3B-14EF1E94C41B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "runtime_libs", "obj/build/win/runtime_libs.vcxproj", "{12C9684F-D602-47FD-F9C9-5AB3D6C7B21A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Animometer", "obj/examples/Animometer.vcxproj", "{3C4BE06C-41AB-73FA-FD92-EB8CF1C69776}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CHelloTriangle", "obj/examples/CHelloTriangle.vcxproj", "{EB345E55-2F9F-5F88-125F-A187F40BFD58}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ComputeBoids", "obj/examples/ComputeBoids.vcxproj", "{A73CA760-1E6F-E867-69C6-191E90AB205A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CppHelloTriangle", "obj/examples/CppHelloTriangle.vcxproj", "{B127D07F-CE16-FB2D-2C16-B5D847B59800}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CubeReflection", "obj/examples/CubeReflection.vcxproj", "{70643BE0-BB6C-1F3F-6011-8C27CA2EBB0C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ManualSwapChainTest", "obj/examples/ManualSwapChainTest.vcxproj", "{E507FD2F-64EF-BDCB-CF93-6E61527A344B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RayTracing", "obj/examples/RayTracing.vcxproj", "{4BA911B8-6B46-8F22-AEDF-9128726E4919}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_sample_utils", "obj/examples/dawn_sample_utils.vcxproj", "{120DFDBA-781B-C3A6-A6E0-3B33A43F2E36}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_samples", "obj/examples/dawn_samples.vcxproj", "{117B6523-505E-FC5B-E8E5-98FB32B1975B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "obj/src/common/common.vcxproj", "{A8F864A2-1412-0F1F-69CB-C27E602E8AC3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_headers", "obj/src/dawn/dawn_headers.vcxproj", "{E9CD2A68-51BA-CE02-7CC7-2C5FA129D6AE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_proc", "obj/src/dawn/dawn_proc.vcxproj", "{E414FD24-A30B-8414-E006-82CDC1FDB3DF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_proc_shared", "obj/src/dawn/dawn_proc_shared.vcxproj", "{75D2564A-0232-E610-A042-FF86181BE63B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_proc_static", "obj/src/dawn/dawn_proc_static.vcxproj", "{FB8ECED2-8A37-CCE5-3F01-CF68364729C3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawncpp", "obj/src/dawn/dawncpp.vcxproj", "{BE1A9A70-DB5B-FEC6-D799-87ED9D6604D3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawncpp_headers", "obj/src/dawn/dawncpp_headers.vcxproj", "{91DA3E4B-BB06-639C-F208-B56BA86DABDF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_native", "obj/src/dawn_native/dawn_native.vcxproj", "{60981381-78F0-FC6D-6082-40D8814D4604}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_native_headers", "obj/src/dawn_native/dawn_native_headers.vcxproj", "{BEFD5EBF-67C1-9BB0-4F10-E0CD43879971}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_native_shared", "obj/src/dawn_native/dawn_native_shared.vcxproj", "{2828337A-FB39-838F-805B-7497D7A6D5A2}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_native_sources", "obj/src/dawn_native/dawn_native_sources.vcxproj", "{FAF0426E-24FE-F1AE-9295-D54AB8B4AE77}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_native_static", "obj/src/dawn_native/dawn_native_static.vcxproj", "{214B3F0A-7F10-65E3-D1EC-9FCAD9CDD6CC}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_platform", "obj/src/dawn_platform/dawn_platform.vcxproj", "{52456493-915E-DA08-F36E-07F004F6F87F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_wire", "obj/src/dawn_wire/dawn_wire.vcxproj", "{3A0B1A66-AF81-0EBA-15F7-4136327445F0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_wire_headers", "obj/src/dawn_wire/dawn_wire_headers.vcxproj", "{738C41A2-F8CD-655E-7400-592BF5651E4C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_wire_shared", "obj/src/dawn_wire/dawn_wire_shared.vcxproj", "{6B0CF89B-65B5-C968-26AB-7299C93AFD6B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_wire_static", "obj/src/dawn_wire/dawn_wire_static.vcxproj", "{7FEAEE2F-7CC3-C333-503C-92ABB87861F8}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_fuzzers", "obj/src/fuzzers/dawn_fuzzers.vcxproj", "{87B6F203-3110-1ABF-E358-33B90F61FEBE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_spirv_cross_fuzzer_common", "obj/src/fuzzers/dawn_spirv_cross_fuzzer_common.vcxproj", "{7C5F8A8A-244D-6A79-F39E-E6BD882F3647}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_spirv_cross_glsl_fast_fuzzer", "obj/src/fuzzers/dawn_spirv_cross_glsl_fast_fuzzer.vcxproj", "{5D445375-0A46-7E73-36AC-E68EC737ACB0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_spirv_cross_hlsl_fast_fuzzer", "obj/src/fuzzers/dawn_spirv_cross_hlsl_fast_fuzzer.vcxproj", "{EF0C0743-A34E-0493-1C98-70E5ED8079FB}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_spirv_cross_msl_fast_fuzzer", "obj/src/fuzzers/dawn_spirv_cross_msl_fast_fuzzer.vcxproj", "{A7BD0BC9-7850-ABC0-AD52-2E92A2F547D4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_spvc_glsl_fast_fuzzer", "obj/src/fuzzers/dawn_spvc_glsl_fast_fuzzer.vcxproj", "{C802E4E2-77C8-C71A-BDDF-20989C552592}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_spvc_hlsl_fast_fuzzer", "obj/src/fuzzers/dawn_spvc_hlsl_fast_fuzzer.vcxproj", "{70A18606-3DCB-AD78-977B-EDEC47E1D940}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_spvc_msl_fast_fuzzer", "obj/src/fuzzers/dawn_spvc_msl_fast_fuzzer.vcxproj", "{90AB10B7-1FDC-201D-19D1-42AADA1F94FB}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_wire_server_and_frontend_fuzzer", "obj/src/fuzzers/dawn_wire_server_and_frontend_fuzzer.vcxproj", "{DFDC9AD9-81C4-598E-3EAB-CA87D100D3FB}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_wire_server_and_vulkan_backend_fuzzer", "obj/src/fuzzers/dawn_wire_server_and_vulkan_backend_fuzzer.vcxproj", "{D25A56F4-7DB9-806A-82E1-0BF4738D17B3}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_wire_server_fuzzer_common", "obj/src/fuzzers/dawn_wire_server_fuzzer_common.vcxproj", "{BC5170BC-BD19-82CF-FA7C-E1B85B0CD5DF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_end2end_tests", "obj/src/tests/dawn_end2end_tests.vcxproj", "{9C025584-C61B-1EC8-4111-EA6B5BE9F52E}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_end2end_tests_sources", "obj/src/tests/dawn_end2end_tests_sources.vcxproj", "{C6E7F975-9630-362A-520F-CED4693D434D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_perf_tests", "obj/src/tests/dawn_perf_tests.vcxproj", "{AC3B5A1E-9248-CCC4-A747-D3338401AB36}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_tests", "obj/src/tests/dawn_tests.vcxproj", "{DF55D64E-440D-CBA7-64C9-E21AF54E0511}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_unittests", "obj/src/tests/dawn_unittests.vcxproj", "{AA464E9A-5000-4DAC-57A1-8F902F5D08BE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_white_box_tests_sources", "obj/src/tests/dawn_white_box_tests_sources.vcxproj", "{EBDD09A4-2312-BADB-2732-DC92249DEC54}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gmock", "obj/src/tests/gmock.vcxproj", "{5B76CFE1-05A4-61BB-B463-C99E70186D94}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gmock_and_gtest", "obj/src/tests/gmock_and_gtest.vcxproj", "{3283873C-4349-DB4C-40F3-FC94A4914F9F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "obj/src/tests/gtest.vcxproj", "{EE821FB7-A16A-BF55-F02D-24BEA4845FFE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_bindings", "obj/src/utils/dawn_bindings.vcxproj", "{B35EA0FC-9146-FAC7-5987-C8D9E25A4295}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_glfw", "obj/src/utils/dawn_glfw.vcxproj", "{896774BC-9EAA-3531-D3DB-79020269DCD1}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dawn_utils", "obj/src/utils/dawn_utils.vcxproj", "{E50B67CE-C24C-279D-A2CF-B748134675D4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SPIRV-Tools", "obj/third_party/SPIRV-Tools/SPIRV-Tools.vcxproj", "{1811D21F-2B71-A731-ABA5-10F2B717F416}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "all_spirv_tools", "obj/third_party/SPIRV-Tools/all_spirv_tools.vcxproj", "{DF41D74B-900F-4824-9339-7450176B2836}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv-as", "obj/third_party/SPIRV-Tools/spirv-as.vcxproj", "{D5D28626-9904-E1C9-C177-8A8F7239B136}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv-cfg", "obj/third_party/SPIRV-Tools/spirv-cfg.vcxproj", "{DC510D12-9200-4F98-9433-D841AB5E4260}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv-dis", "obj/third_party/SPIRV-Tools/spirv-dis.vcxproj", "{ADC90E85-B6ED-F725-78CE-4A7F16DC9E7A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv-link", "obj/third_party/SPIRV-Tools/spirv-link.vcxproj", "{6841FEC7-6913-DF79-30AC-D54674EC6AD4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv-opt", "obj/third_party/SPIRV-Tools/spirv-opt.vcxproj", "{B395AB7D-349D-0882-9970-B784C6E99302}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv-reduce", "obj/third_party/SPIRV-Tools/spirv-reduce.vcxproj", "{F5999F1F-E4AD-DC3B-5A06-89F06B28C0BD}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv-val", "obj/third_party/SPIRV-Tools/spirv-val.vcxproj", "{F52E7FDF-C5D7-F625-8D16-871F9E15C9CF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spvtools", "obj/third_party/SPIRV-Tools/spvtools.vcxproj", "{64362B70-EAD2-D371-BEA9-B7B42BF2A2B4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spvtools_headers", "obj/third_party/SPIRV-Tools/spvtools_headers.vcxproj", "{5FA55F7D-E647-AF1A-4C17-D8A3BDC53C50}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spvtools_link", "obj/third_party/SPIRV-Tools/spvtools_link.vcxproj", "{443085DB-9B44-8CFB-D460-352A5124CDC4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spvtools_opt", "obj/third_party/SPIRV-Tools/spvtools_opt.vcxproj", "{559346FD-241A-90F2-1E42-AB794A70CE19}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spvtools_reduce", "obj/third_party/SPIRV-Tools/spvtools_reduce.vcxproj", "{D1938D15-6F4A-6209-C15B-4F096F52BE00}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spvtools_software_version", "obj/third_party/SPIRV-Tools/spvtools_software_version.vcxproj", "{7268155C-976A-19E5-4852-B9C05504CDFC}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spvtools_util_cli_consumer", "obj/third_party/SPIRV-Tools/spvtools_util_cli_consumer.vcxproj", "{86674088-DFE0-024C-476E-5A0C98F73A9A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spvtools_val", "obj/third_party/SPIRV-Tools/spvtools_val.vcxproj", "{0E7BC0C2-A44F-BF61-8226-721FFF0767C0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glslang_default_resource_limits_sources", "obj/third_party/glslang/glslang_default_resource_limits_sources.vcxproj", "{48A71B5D-5CDF-9D8B-8906-DAAB78004171}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glslang_sources", "obj/third_party/glslang/glslang_sources.vcxproj", "{A7721D6B-DC5F-4902-FA84-5FD49F17473D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glslang_validator", "obj/third_party/glslang/glslang_validator.vcxproj", "{4A0513BA-56A2-693B-8F7A-38D0154401DE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv-remap", "obj/third_party/glslang/spirv-remap.vcxproj", "{CE8203EF-B79E-A432-2B72-88629EFF3B85}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glfw", "obj/third_party/gn/glfw/glfw.vcxproj", "{480BF620-A7F3-6CE6-ED34-8870F93A5A54}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glm", "obj/third_party/gn/glm/glm.vcxproj", "{1E207ED7-1DC3-FF95-95E3-9754F3EA7670}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "khronos_platform", "obj/third_party/khronos/khronos_platform.vcxproj", "{E43F6978-D80B-6660-D5FC-3BEA5864FF71}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vulkan_headers", "obj/third_party/khronos/vulkan_headers.vcxproj", "{B6969B07-F992-C5D8-E18F-36E5A350D715}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshaderc", "obj/third_party/shaderc/libshaderc.vcxproj", "{B62C8E59-3769-F9B2-3B8B-C57820518B44}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshaderc_spvc", "obj/third_party/shaderc/libshaderc_spvc.vcxproj", "{E7E61E44-CB5E-2C8F-AD76-E1B58F5BA2C7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshaderc_spvc_sources", "obj/third_party/shaderc/libshaderc_spvc_sources.vcxproj", "{62A3B73A-F86B-A47B-A7D5-602616A28BE4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shaderc_util_sources", "obj/third_party/shaderc/shaderc_util_sources.vcxproj", "{B2A3E396-C800-EEBB-AFE9-6979244CB327}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spirv_cross", "obj/third_party/shaderc/spirv_cross.vcxproj", "{AC9538E2-F9B8-20D6-B6DE-AF451641471C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spv_headers", "obj/third_party/spirv-headers/spv_headers.vcxproj", "{FB7887E2-337D-0C72-7ED1-57B6E3F38E0A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vulkan_headers", "obj/third_party/vulkan-headers/vulkan_headers.vcxproj", "{39E4ADEF-3407-F0C0-4374-433638CA31ED}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VkLayer_khronos_validation", "obj/third_party/vulkan-validation-layers/VkLayer_khronos_validation.vcxproj", "{0FCED3E2-8AAA-A943-15C9-CCC9040C2896}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vulkan_core_validation_glslang", "obj/third_party/vulkan-validation-layers/vulkan_core_validation_glslang.vcxproj", "{EFC5386A-D989-FA9F-C57F-07D2670DF484}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vulkan_layer_utils", "obj/third_party/vulkan-validation-layers/vulkan_layer_utils.vcxproj", "{995DBBF0-B695-2DBB-75AB-8C56FC3AD7EB}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vulkan_validation_layers", "obj/third_party/vulkan-validation-layers/vulkan_validation_layers.vcxproj", "{C09051DA-DB0B-5EDE-5AAA-CE7CFA4A0864}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
GN|x64 = GN|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5B79B3FC-F049-8624-82A9-FBE6254EE619}.GN|x64.ActiveCfg = GN|x64
{5B79B3FC-F049-8624-82A9-FBE6254EE619}.GN|x64.Build.0 = GN|x64
{D0BAA9AC-DB37-3310-7D56-AB41AFB88530}.GN|x64.ActiveCfg = GN|x64
{D0BAA9AC-DB37-3310-7D56-AB41AFB88530}.GN|x64.Build.0 = GN|x64
{97180920-0121-77BF-24E2-ADE2CC5FD3B9}.GN|x64.ActiveCfg = GN|x64
{97180920-0121-77BF-24E2-ADE2CC5FD3B9}.GN|x64.Build.0 = GN|x64
{57602616-2B57-1AEB-B25E-5B60E19128C3}.GN|x64.ActiveCfg = GN|x64
{57602616-2B57-1AEB-B25E-5B60E19128C3}.GN|x64.Build.0 = GN|x64
{C3DE6ADF-85B3-FA15-7FB4-BECC6F31A1EE}.GN|x64.ActiveCfg = GN|x64
{C3DE6ADF-85B3-FA15-7FB4-BECC6F31A1EE}.GN|x64.Build.0 = GN|x64
{29FE5126-6ED8-5DA2-3713-E820C6AE3E96}.GN|x64.ActiveCfg = GN|x64
{29FE5126-6ED8-5DA2-3713-E820C6AE3E96}.GN|x64.Build.0 = GN|x64
{C9198B5B-7259-D089-C001-5C3FC5AD59CD}.GN|x64.ActiveCfg = GN|x64
{C9198B5B-7259-D089-C001-5C3FC5AD59CD}.GN|x64.Build.0 = GN|x64
{B76E7BDB-3494-CD7A-BA3B-14EF1E94C41B}.GN|x64.ActiveCfg = GN|x64
{B76E7BDB-3494-CD7A-BA3B-14EF1E94C41B}.GN|x64.Build.0 = GN|x64
{12C9684F-D602-47FD-F9C9-5AB3D6C7B21A}.GN|x64.ActiveCfg = GN|x64
{12C9684F-D602-47FD-F9C9-5AB3D6C7B21A}.GN|x64.Build.0 = GN|x64
{3C4BE06C-41AB-73FA-FD92-EB8CF1C69776}.GN|x64.ActiveCfg = GN|x64
{3C4BE06C-41AB-73FA-FD92-EB8CF1C69776}.GN|x64.Build.0 = GN|x64
{EB345E55-2F9F-5F88-125F-A187F40BFD58}.GN|x64.ActiveCfg = GN|x64
{EB345E55-2F9F-5F88-125F-A187F40BFD58}.GN|x64.Build.0 = GN|x64
{A73CA760-1E6F-E867-69C6-191E90AB205A}.GN|x64.ActiveCfg = GN|x64
{A73CA760-1E6F-E867-69C6-191E90AB205A}.GN|x64.Build.0 = GN|x64
{B127D07F-CE16-FB2D-2C16-B5D847B59800}.GN|x64.ActiveCfg = GN|x64
{B127D07F-CE16-FB2D-2C16-B5D847B59800}.GN|x64.Build.0 = GN|x64
{70643BE0-BB6C-1F3F-6011-8C27CA2EBB0C}.GN|x64.ActiveCfg = GN|x64
{70643BE0-BB6C-1F3F-6011-8C27CA2EBB0C}.GN|x64.Build.0 = GN|x64
{E507FD2F-64EF-BDCB-CF93-6E61527A344B}.GN|x64.ActiveCfg = GN|x64
{E507FD2F-64EF-BDCB-CF93-6E61527A344B}.GN|x64.Build.0 = GN|x64
{4BA911B8-6B46-8F22-AEDF-9128726E4919}.GN|x64.ActiveCfg = GN|x64
{4BA911B8-6B46-8F22-AEDF-9128726E4919}.GN|x64.Build.0 = GN|x64
{120DFDBA-781B-C3A6-A6E0-3B33A43F2E36}.GN|x64.ActiveCfg = GN|x64
{120DFDBA-781B-C3A6-A6E0-3B33A43F2E36}.GN|x64.Build.0 = GN|x64
{117B6523-505E-FC5B-E8E5-98FB32B1975B}.GN|x64.ActiveCfg = GN|x64
{117B6523-505E-FC5B-E8E5-98FB32B1975B}.GN|x64.Build.0 = GN|x64
{A8F864A2-1412-0F1F-69CB-C27E602E8AC3}.GN|x64.ActiveCfg = GN|x64
{A8F864A2-1412-0F1F-69CB-C27E602E8AC3}.GN|x64.Build.0 = GN|x64
{E9CD2A68-51BA-CE02-7CC7-2C5FA129D6AE}.GN|x64.ActiveCfg = GN|x64
{E9CD2A68-51BA-CE02-7CC7-2C5FA129D6AE}.GN|x64.Build.0 = GN|x64
{E414FD24-A30B-8414-E006-82CDC1FDB3DF}.GN|x64.ActiveCfg = GN|x64
{E414FD24-A30B-8414-E006-82CDC1FDB3DF}.GN|x64.Build.0 = GN|x64
{75D2564A-0232-E610-A042-FF86181BE63B}.GN|x64.ActiveCfg = GN|x64
{75D2564A-0232-E610-A042-FF86181BE63B}.GN|x64.Build.0 = GN|x64
{FB8ECED2-8A37-CCE5-3F01-CF68364729C3}.GN|x64.ActiveCfg = GN|x64
{FB8ECED2-8A37-CCE5-3F01-CF68364729C3}.GN|x64.Build.0 = GN|x64
{BE1A9A70-DB5B-FEC6-D799-87ED9D6604D3}.GN|x64.ActiveCfg = GN|x64
{BE1A9A70-DB5B-FEC6-D799-87ED9D6604D3}.GN|x64.Build.0 = GN|x64
{91DA3E4B-BB06-639C-F208-B56BA86DABDF}.GN|x64.ActiveCfg = GN|x64
{91DA3E4B-BB06-639C-F208-B56BA86DABDF}.GN|x64.Build.0 = GN|x64
{60981381-78F0-FC6D-6082-40D8814D4604}.GN|x64.ActiveCfg = GN|x64
{60981381-78F0-FC6D-6082-40D8814D4604}.GN|x64.Build.0 = GN|x64
{BEFD5EBF-67C1-9BB0-4F10-E0CD43879971}.GN|x64.ActiveCfg = GN|x64
{BEFD5EBF-67C1-9BB0-4F10-E0CD43879971}.GN|x64.Build.0 = GN|x64
{2828337A-FB39-838F-805B-7497D7A6D5A2}.GN|x64.ActiveCfg = GN|x64
{2828337A-FB39-838F-805B-7497D7A6D5A2}.GN|x64.Build.0 = GN|x64
{FAF0426E-24FE-F1AE-9295-D54AB8B4AE77}.GN|x64.ActiveCfg = GN|x64
{FAF0426E-24FE-F1AE-9295-D54AB8B4AE77}.GN|x64.Build.0 = GN|x64
{214B3F0A-7F10-65E3-D1EC-9FCAD9CDD6CC}.GN|x64.ActiveCfg = GN|x64
{214B3F0A-7F10-65E3-D1EC-9FCAD9CDD6CC}.GN|x64.Build.0 = GN|x64
{52456493-915E-DA08-F36E-07F004F6F87F}.GN|x64.ActiveCfg = GN|x64
{52456493-915E-DA08-F36E-07F004F6F87F}.GN|x64.Build.0 = GN|x64
{3A0B1A66-AF81-0EBA-15F7-4136327445F0}.GN|x64.ActiveCfg = GN|x64
{3A0B1A66-AF81-0EBA-15F7-4136327445F0}.GN|x64.Build.0 = GN|x64
{738C41A2-F8CD-655E-7400-592BF5651E4C}.GN|x64.ActiveCfg = GN|x64
{738C41A2-F8CD-655E-7400-592BF5651E4C}.GN|x64.Build.0 = GN|x64
{6B0CF89B-65B5-C968-26AB-7299C93AFD6B}.GN|x64.ActiveCfg = GN|x64
{6B0CF89B-65B5-C968-26AB-7299C93AFD6B}.GN|x64.Build.0 = GN|x64
{7FEAEE2F-7CC3-C333-503C-92ABB87861F8}.GN|x64.ActiveCfg = GN|x64
{7FEAEE2F-7CC3-C333-503C-92ABB87861F8}.GN|x64.Build.0 = GN|x64
{87B6F203-3110-1ABF-E358-33B90F61FEBE}.GN|x64.ActiveCfg = GN|x64
{87B6F203-3110-1ABF-E358-33B90F61FEBE}.GN|x64.Build.0 = GN|x64
{7C5F8A8A-244D-6A79-F39E-E6BD882F3647}.GN|x64.ActiveCfg = GN|x64
{7C5F8A8A-244D-6A79-F39E-E6BD882F3647}.GN|x64.Build.0 = GN|x64
{5D445375-0A46-7E73-36AC-E68EC737ACB0}.GN|x64.ActiveCfg = GN|x64
{5D445375-0A46-7E73-36AC-E68EC737ACB0}.GN|x64.Build.0 = GN|x64
{EF0C0743-A34E-0493-1C98-70E5ED8079FB}.GN|x64.ActiveCfg = GN|x64
{EF0C0743-A34E-0493-1C98-70E5ED8079FB}.GN|x64.Build.0 = GN|x64
{A7BD0BC9-7850-ABC0-AD52-2E92A2F547D4}.GN|x64.ActiveCfg = GN|x64
{A7BD0BC9-7850-ABC0-AD52-2E92A2F547D4}.GN|x64.Build.0 = GN|x64
{C802E4E2-77C8-C71A-BDDF-20989C552592}.GN|x64.ActiveCfg = GN|x64
{C802E4E2-77C8-C71A-BDDF-20989C552592}.GN|x64.Build.0 = GN|x64
{70A18606-3DCB-AD78-977B-EDEC47E1D940}.GN|x64.ActiveCfg = GN|x64
{70A18606-3DCB-AD78-977B-EDEC47E1D940}.GN|x64.Build.0 = GN|x64
{90AB10B7-1FDC-201D-19D1-42AADA1F94FB}.GN|x64.ActiveCfg = GN|x64
{90AB10B7-1FDC-201D-19D1-42AADA1F94FB}.GN|x64.Build.0 = GN|x64
{DFDC9AD9-81C4-598E-3EAB-CA87D100D3FB}.GN|x64.ActiveCfg = GN|x64
{DFDC9AD9-81C4-598E-3EAB-CA87D100D3FB}.GN|x64.Build.0 = GN|x64
{D25A56F4-7DB9-806A-82E1-0BF4738D17B3}.GN|x64.ActiveCfg = GN|x64
{D25A56F4-7DB9-806A-82E1-0BF4738D17B3}.GN|x64.Build.0 = GN|x64
{BC5170BC-BD19-82CF-FA7C-E1B85B0CD5DF}.GN|x64.ActiveCfg = GN|x64
{BC5170BC-BD19-82CF-FA7C-E1B85B0CD5DF}.GN|x64.Build.0 = GN|x64
{9C025584-C61B-1EC8-4111-EA6B5BE9F52E}.GN|x64.ActiveCfg = GN|x64
{9C025584-C61B-1EC8-4111-EA6B5BE9F52E}.GN|x64.Build.0 = GN|x64
{C6E7F975-9630-362A-520F-CED4693D434D}.GN|x64.ActiveCfg = GN|x64
{C6E7F975-9630-362A-520F-CED4693D434D}.GN|x64.Build.0 = GN|x64
{AC3B5A1E-9248-CCC4-A747-D3338401AB36}.GN|x64.ActiveCfg = GN|x64
{AC3B5A1E-9248-CCC4-A747-D3338401AB36}.GN|x64.Build.0 = GN|x64
{DF55D64E-440D-CBA7-64C9-E21AF54E0511}.GN|x64.ActiveCfg = GN|x64
{DF55D64E-440D-CBA7-64C9-E21AF54E0511}.GN|x64.Build.0 = GN|x64
{AA464E9A-5000-4DAC-57A1-8F902F5D08BE}.GN|x64.ActiveCfg = GN|x64
{AA464E9A-5000-4DAC-57A1-8F902F5D08BE}.GN|x64.Build.0 = GN|x64
{EBDD09A4-2312-BADB-2732-DC92249DEC54}.GN|x64.ActiveCfg = GN|x64
{EBDD09A4-2312-BADB-2732-DC92249DEC54}.GN|x64.Build.0 = GN|x64
{5B76CFE1-05A4-61BB-B463-C99E70186D94}.GN|x64.ActiveCfg = GN|x64
{5B76CFE1-05A4-61BB-B463-C99E70186D94}.GN|x64.Build.0 = GN|x64
{3283873C-4349-DB4C-40F3-FC94A4914F9F}.GN|x64.ActiveCfg = GN|x64
{3283873C-4349-DB4C-40F3-FC94A4914F9F}.GN|x64.Build.0 = GN|x64
{EE821FB7-A16A-BF55-F02D-24BEA4845FFE}.GN|x64.ActiveCfg = GN|x64
{EE821FB7-A16A-BF55-F02D-24BEA4845FFE}.GN|x64.Build.0 = GN|x64
{B35EA0FC-9146-FAC7-5987-C8D9E25A4295}.GN|x64.ActiveCfg = GN|x64
{B35EA0FC-9146-FAC7-5987-C8D9E25A4295}.GN|x64.Build.0 = GN|x64
{896774BC-9EAA-3531-D3DB-79020269DCD1}.GN|x64.ActiveCfg = GN|x64
{896774BC-9EAA-3531-D3DB-79020269DCD1}.GN|x64.Build.0 = GN|x64
{E50B67CE-C24C-279D-A2CF-B748134675D4}.GN|x64.ActiveCfg = GN|x64
{E50B67CE-C24C-279D-A2CF-B748134675D4}.GN|x64.Build.0 = GN|x64
{1811D21F-2B71-A731-ABA5-10F2B717F416}.GN|x64.ActiveCfg = GN|x64
{1811D21F-2B71-A731-ABA5-10F2B717F416}.GN|x64.Build.0 = GN|x64
{DF41D74B-900F-4824-9339-7450176B2836}.GN|x64.ActiveCfg = GN|x64
{DF41D74B-900F-4824-9339-7450176B2836}.GN|x64.Build.0 = GN|x64
{D5D28626-9904-E1C9-C177-8A8F7239B136}.GN|x64.ActiveCfg = GN|x64
{D5D28626-9904-E1C9-C177-8A8F7239B136}.GN|x64.Build.0 = GN|x64
{DC510D12-9200-4F98-9433-D841AB5E4260}.GN|x64.ActiveCfg = GN|x64
{DC510D12-9200-4F98-9433-D841AB5E4260}.GN|x64.Build.0 = GN|x64
{ADC90E85-B6ED-F725-78CE-4A7F16DC9E7A}.GN|x64.ActiveCfg = GN|x64
{ADC90E85-B6ED-F725-78CE-4A7F16DC9E7A}.GN|x64.Build.0 = GN|x64
{6841FEC7-6913-DF79-30AC-D54674EC6AD4}.GN|x64.ActiveCfg = GN|x64
{6841FEC7-6913-DF79-30AC-D54674EC6AD4}.GN|x64.Build.0 = GN|x64
{B395AB7D-349D-0882-9970-B784C6E99302}.GN|x64.ActiveCfg = GN|x64
{B395AB7D-349D-0882-9970-B784C6E99302}.GN|x64.Build.0 = GN|x64
{F5999F1F-E4AD-DC3B-5A06-89F06B28C0BD}.GN|x64.ActiveCfg = GN|x64
{F5999F1F-E4AD-DC3B-5A06-89F06B28C0BD}.GN|x64.Build.0 = GN|x64
{F52E7FDF-C5D7-F625-8D16-871F9E15C9CF}.GN|x64.ActiveCfg = GN|x64
{F52E7FDF-C5D7-F625-8D16-871F9E15C9CF}.GN|x64.Build.0 = GN|x64
{64362B70-EAD2-D371-BEA9-B7B42BF2A2B4}.GN|x64.ActiveCfg = GN|x64
{64362B70-EAD2-D371-BEA9-B7B42BF2A2B4}.GN|x64.Build.0 = GN|x64
{5FA55F7D-E647-AF1A-4C17-D8A3BDC53C50}.GN|x64.ActiveCfg = GN|x64
{5FA55F7D-E647-AF1A-4C17-D8A3BDC53C50}.GN|x64.Build.0 = GN|x64
{443085DB-9B44-8CFB-D460-352A5124CDC4}.GN|x64.ActiveCfg = GN|x64
{443085DB-9B44-8CFB-D460-352A5124CDC4}.GN|x64.Build.0 = GN|x64
{559346FD-241A-90F2-1E42-AB794A70CE19}.GN|x64.ActiveCfg = GN|x64
{559346FD-241A-90F2-1E42-AB794A70CE19}.GN|x64.Build.0 = GN|x64
{D1938D15-6F4A-6209-C15B-4F096F52BE00}.GN|x64.ActiveCfg = GN|x64
{D1938D15-6F4A-6209-C15B-4F096F52BE00}.GN|x64.Build.0 = GN|x64
{7268155C-976A-19E5-4852-B9C05504CDFC}.GN|x64.ActiveCfg = GN|x64
{7268155C-976A-19E5-4852-B9C05504CDFC}.GN|x64.Build.0 = GN|x64
{86674088-DFE0-024C-476E-5A0C98F73A9A}.GN|x64.ActiveCfg = GN|x64
{86674088-DFE0-024C-476E-5A0C98F73A9A}.GN|x64.Build.0 = GN|x64
{0E7BC0C2-A44F-BF61-8226-721FFF0767C0}.GN|x64.ActiveCfg = GN|x64
{0E7BC0C2-A44F-BF61-8226-721FFF0767C0}.GN|x64.Build.0 = GN|x64
{48A71B5D-5CDF-9D8B-8906-DAAB78004171}.GN|x64.ActiveCfg = GN|x64
{48A71B5D-5CDF-9D8B-8906-DAAB78004171}.GN|x64.Build.0 = GN|x64
{A7721D6B-DC5F-4902-FA84-5FD49F17473D}.GN|x64.ActiveCfg = GN|x64
{A7721D6B-DC5F-4902-FA84-5FD49F17473D}.GN|x64.Build.0 = GN|x64
{4A0513BA-56A2-693B-8F7A-38D0154401DE}.GN|x64.ActiveCfg = GN|x64
{4A0513BA-56A2-693B-8F7A-38D0154401DE}.GN|x64.Build.0 = GN|x64
{CE8203EF-B79E-A432-2B72-88629EFF3B85}.GN|x64.ActiveCfg = GN|x64
{CE8203EF-B79E-A432-2B72-88629EFF3B85}.GN|x64.Build.0 = GN|x64
{480BF620-A7F3-6CE6-ED34-8870F93A5A54}.GN|x64.ActiveCfg = GN|x64
{480BF620-A7F3-6CE6-ED34-8870F93A5A54}.GN|x64.Build.0 = GN|x64
{1E207ED7-1DC3-FF95-95E3-9754F3EA7670}.GN|x64.ActiveCfg = GN|x64
{1E207ED7-1DC3-FF95-95E3-9754F3EA7670}.GN|x64.Build.0 = GN|x64
{E43F6978-D80B-6660-D5FC-3BEA5864FF71}.GN|x64.ActiveCfg = GN|x64
{E43F6978-D80B-6660-D5FC-3BEA5864FF71}.GN|x64.Build.0 = GN|x64
{B6969B07-F992-C5D8-E18F-36E5A350D715}.GN|x64.ActiveCfg = GN|x64
{B6969B07-F992-C5D8-E18F-36E5A350D715}.GN|x64.Build.0 = GN|x64
{B62C8E59-3769-F9B2-3B8B-C57820518B44}.GN|x64.ActiveCfg = GN|x64
{B62C8E59-3769-F9B2-3B8B-C57820518B44}.GN|x64.Build.0 = GN|x64
{E7E61E44-CB5E-2C8F-AD76-E1B58F5BA2C7}.GN|x64.ActiveCfg = GN|x64
{E7E61E44-CB5E-2C8F-AD76-E1B58F5BA2C7}.GN|x64.Build.0 = GN|x64
{62A3B73A-F86B-A47B-A7D5-602616A28BE4}.GN|x64.ActiveCfg = GN|x64
{62A3B73A-F86B-A47B-A7D5-602616A28BE4}.GN|x64.Build.0 = GN|x64
{B2A3E396-C800-EEBB-AFE9-6979244CB327}.GN|x64.ActiveCfg = GN|x64
{B2A3E396-C800-EEBB-AFE9-6979244CB327}.GN|x64.Build.0 = GN|x64
{AC9538E2-F9B8-20D6-B6DE-AF451641471C}.GN|x64.ActiveCfg = GN|x64
{AC9538E2-F9B8-20D6-B6DE-AF451641471C}.GN|x64.Build.0 = GN|x64
{FB7887E2-337D-0C72-7ED1-57B6E3F38E0A}.GN|x64.ActiveCfg = GN|x64
{FB7887E2-337D-0C72-7ED1-57B6E3F38E0A}.GN|x64.Build.0 = GN|x64
{39E4ADEF-3407-F0C0-4374-433638CA31ED}.GN|x64.ActiveCfg = GN|x64
{39E4ADEF-3407-F0C0-4374-433638CA31ED}.GN|x64.Build.0 = GN|x64
{0FCED3E2-8AAA-A943-15C9-CCC9040C2896}.GN|x64.ActiveCfg = GN|x64
{0FCED3E2-8AAA-A943-15C9-CCC9040C2896}.GN|x64.Build.0 = GN|x64
{EFC5386A-D989-FA9F-C57F-07D2670DF484}.GN|x64.ActiveCfg = GN|x64
{EFC5386A-D989-FA9F-C57F-07D2670DF484}.GN|x64.Build.0 = GN|x64
{995DBBF0-B695-2DBB-75AB-8C56FC3AD7EB}.GN|x64.ActiveCfg = GN|x64
{995DBBF0-B695-2DBB-75AB-8C56FC3AD7EB}.GN|x64.Build.0 = GN|x64
{C09051DA-DB0B-5EDE-5AAA-CE7CFA4A0864}.GN|x64.ActiveCfg = GN|x64
{C09051DA-DB0B-5EDE-5AAA-CE7CFA4A0864}.GN|x64.Build.0 = GN|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{EEB08EE1-97DB-63D6-00CE-19D1E5F5ABD5} = {DD82E062-7A38-2EC4-194B-A5DBC6C8D427}
{C12F29D0-F6A2-507A-EC27-16C4CDBC12A3} = {EEB08EE1-97DB-63D6-00CE-19D1E5F5ABD5}
{F784D0B3-E697-4800-BF70-29180377C4C8} = {C12F29D0-F6A2-507A-EC27-16C4CDBC12A3}
{263CAC22-ED4B-D00F-2D8B-B303D9B6710F} = {EEB08EE1-97DB-63D6-00CE-19D1E5F5ABD5}
{94910060-9EC5-4EA5-7A78-7A5ED127D1FB} = {DD82E062-7A38-2EC4-194B-A5DBC6C8D427}
{6E399C1D-8D56-6A08-EE1E-017CDE474224} = {DD82E062-7A38-2EC4-194B-A5DBC6C8D427}
{6C777B51-6907-6FEF-176C-3BBE8C4D525B} = {6E399C1D-8D56-6A08-EE1E-017CDE474224}
{B88E6219-3373-D2DF-CA67-447D0A6EC98C} = {6E399C1D-8D56-6A08-EE1E-017CDE474224}
{61EA8837-A054-1AC3-AAC2-8C0DDF9B2E05} = {B88E6219-3373-D2DF-CA67-447D0A6EC98C}
{01FA78C2-A1C3-40DD-3942-D83FB33E18C7} = {B88E6219-3373-D2DF-CA67-447D0A6EC98C}
{5FA512E4-54D4-0CEF-65BA-1BF9182A5EFF} = {B88E6219-3373-D2DF-CA67-447D0A6EC98C}
{76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F} = {6E399C1D-8D56-6A08-EE1E-017CDE474224}
{6EB7DC50-15B0-4A74-79EA-D0F828478F95} = {6E399C1D-8D56-6A08-EE1E-017CDE474224}
{0846C395-F34D-8BC3-F5AB-85710B7BBB21} = {6E399C1D-8D56-6A08-EE1E-017CDE474224}
{762615FE-DC81-6D52-F437-9B04DD7B651F} = {DD82E062-7A38-2EC4-194B-A5DBC6C8D427}
{4327B486-10B8-0BC4-86F6-79AD54B06938} = {762615FE-DC81-6D52-F437-9B04DD7B651F}
{E9B866E7-A66B-47DC-A0A4-359E9791D599} = {762615FE-DC81-6D52-F437-9B04DD7B651F}
{199B998B-6422-C007-6D7A-6DE646EA88C1} = {762615FE-DC81-6D52-F437-9B04DD7B651F}
{88F499EC-F8F4-7908-11E5-E3D830348863} = {199B998B-6422-C007-6D7A-6DE646EA88C1}
{331BAC73-6CBA-9C6B-E053-7707008CCADF} = {199B998B-6422-C007-6D7A-6DE646EA88C1}
{B56CB57E-7A8F-2B6A-9B82-658921CFD7B1} = {762615FE-DC81-6D52-F437-9B04DD7B651F}
{C7934938-6A8E-25C5-8E78-1DBEA740C8F5} = {762615FE-DC81-6D52-F437-9B04DD7B651F}
{9CCDD176-2EF5-4F56-AFDA-240E52EEDFC7} = {762615FE-DC81-6D52-F437-9B04DD7B651F}
{FE8EFA34-D39E-26E8-46B0-8FC6CDE5F7C7} = {762615FE-DC81-6D52-F437-9B04DD7B651F}
{9EF1869C-EC93-3599-6FB7-6EEEE1332293} = {762615FE-DC81-6D52-F437-9B04DD7B651F}
{5B79B3FC-F049-8624-82A9-FBE6254EE619} = {DD82E062-7A38-2EC4-194B-A5DBC6C8D427}
{D0BAA9AC-DB37-3310-7D56-AB41AFB88530} = {C12F29D0-F6A2-507A-EC27-16C4CDBC12A3}
{97180920-0121-77BF-24E2-ADE2CC5FD3B9} = {C12F29D0-F6A2-507A-EC27-16C4CDBC12A3}
{57602616-2B57-1AEB-B25E-5B60E19128C3} = {C12F29D0-F6A2-507A-EC27-16C4CDBC12A3}
{C3DE6ADF-85B3-FA15-7FB4-BECC6F31A1EE} = {F784D0B3-E697-4800-BF70-29180377C4C8}
{29FE5126-6ED8-5DA2-3713-E820C6AE3E96} = {F784D0B3-E697-4800-BF70-29180377C4C8}
{C9198B5B-7259-D089-C001-5C3FC5AD59CD} = {C12F29D0-F6A2-507A-EC27-16C4CDBC12A3}
{B76E7BDB-3494-CD7A-BA3B-14EF1E94C41B} = {263CAC22-ED4B-D00F-2D8B-B303D9B6710F}
{12C9684F-D602-47FD-F9C9-5AB3D6C7B21A} = {263CAC22-ED4B-D00F-2D8B-B303D9B6710F}
{3C4BE06C-41AB-73FA-FD92-EB8CF1C69776} = {94910060-9EC5-4EA5-7A78-7A5ED127D1FB}
{EB345E55-2F9F-5F88-125F-A187F40BFD58} = {94910060-9EC5-4EA5-7A78-7A5ED127D1FB}
{A73CA760-1E6F-E867-69C6-191E90AB205A} = {94910060-9EC5-4EA5-7A78-7A5ED127D1FB}
{B127D07F-CE16-FB2D-2C16-B5D847B59800} = {94910060-9EC5-4EA5-7A78-7A5ED127D1FB}
{70643BE0-BB6C-1F3F-6011-8C27CA2EBB0C} = {94910060-9EC5-4EA5-7A78-7A5ED127D1FB}
{E507FD2F-64EF-BDCB-CF93-6E61527A344B} = {94910060-9EC5-4EA5-7A78-7A5ED127D1FB}
{4BA911B8-6B46-8F22-AEDF-9128726E4919} = {94910060-9EC5-4EA5-7A78-7A5ED127D1FB}
{120DFDBA-781B-C3A6-A6E0-3B33A43F2E36} = {94910060-9EC5-4EA5-7A78-7A5ED127D1FB}
{117B6523-505E-FC5B-E8E5-98FB32B1975B} = {94910060-9EC5-4EA5-7A78-7A5ED127D1FB}
{A8F864A2-1412-0F1F-69CB-C27E602E8AC3} = {6C777B51-6907-6FEF-176C-3BBE8C4D525B}
{E9CD2A68-51BA-CE02-7CC7-2C5FA129D6AE} = {B88E6219-3373-D2DF-CA67-447D0A6EC98C}
{E414FD24-A30B-8414-E006-82CDC1FDB3DF} = {B88E6219-3373-D2DF-CA67-447D0A6EC98C}
{75D2564A-0232-E610-A042-FF86181BE63B} = {B88E6219-3373-D2DF-CA67-447D0A6EC98C}
{FB8ECED2-8A37-CCE5-3F01-CF68364729C3} = {B88E6219-3373-D2DF-CA67-447D0A6EC98C}
{BE1A9A70-DB5B-FEC6-D799-87ED9D6604D3} = {B88E6219-3373-D2DF-CA67-447D0A6EC98C}
{91DA3E4B-BB06-639C-F208-B56BA86DABDF} = {B88E6219-3373-D2DF-CA67-447D0A6EC98C}
{60981381-78F0-FC6D-6082-40D8814D4604} = {61EA8837-A054-1AC3-AAC2-8C0DDF9B2E05}
{BEFD5EBF-67C1-9BB0-4F10-E0CD43879971} = {61EA8837-A054-1AC3-AAC2-8C0DDF9B2E05}
{2828337A-FB39-838F-805B-7497D7A6D5A2} = {61EA8837-A054-1AC3-AAC2-8C0DDF9B2E05}
{FAF0426E-24FE-F1AE-9295-D54AB8B4AE77} = {61EA8837-A054-1AC3-AAC2-8C0DDF9B2E05}
{214B3F0A-7F10-65E3-D1EC-9FCAD9CDD6CC} = {61EA8837-A054-1AC3-AAC2-8C0DDF9B2E05}
{52456493-915E-DA08-F36E-07F004F6F87F} = {01FA78C2-A1C3-40DD-3942-D83FB33E18C7}
{3A0B1A66-AF81-0EBA-15F7-4136327445F0} = {5FA512E4-54D4-0CEF-65BA-1BF9182A5EFF}
{738C41A2-F8CD-655E-7400-592BF5651E4C} = {5FA512E4-54D4-0CEF-65BA-1BF9182A5EFF}
{6B0CF89B-65B5-C968-26AB-7299C93AFD6B} = {5FA512E4-54D4-0CEF-65BA-1BF9182A5EFF}
{7FEAEE2F-7CC3-C333-503C-92ABB87861F8} = {5FA512E4-54D4-0CEF-65BA-1BF9182A5EFF}
{87B6F203-3110-1ABF-E358-33B90F61FEBE} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{7C5F8A8A-244D-6A79-F39E-E6BD882F3647} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{5D445375-0A46-7E73-36AC-E68EC737ACB0} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{EF0C0743-A34E-0493-1C98-70E5ED8079FB} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{A7BD0BC9-7850-ABC0-AD52-2E92A2F547D4} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{C802E4E2-77C8-C71A-BDDF-20989C552592} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{70A18606-3DCB-AD78-977B-EDEC47E1D940} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{90AB10B7-1FDC-201D-19D1-42AADA1F94FB} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{DFDC9AD9-81C4-598E-3EAB-CA87D100D3FB} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{D25A56F4-7DB9-806A-82E1-0BF4738D17B3} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{BC5170BC-BD19-82CF-FA7C-E1B85B0CD5DF} = {76EF2AAD-B44C-8C53-A22D-C4E866C1CB1F}
{9C025584-C61B-1EC8-4111-EA6B5BE9F52E} = {6EB7DC50-15B0-4A74-79EA-D0F828478F95}
{C6E7F975-9630-362A-520F-CED4693D434D} = {6EB7DC50-15B0-4A74-79EA-D0F828478F95}
{AC3B5A1E-9248-CCC4-A747-D3338401AB36} = {6EB7DC50-15B0-4A74-79EA-D0F828478F95}
{DF55D64E-440D-CBA7-64C9-E21AF54E0511} = {6EB7DC50-15B0-4A74-79EA-D0F828478F95}
{AA464E9A-5000-4DAC-57A1-8F902F5D08BE} = {6EB7DC50-15B0-4A74-79EA-D0F828478F95}
{EBDD09A4-2312-BADB-2732-DC92249DEC54} = {6EB7DC50-15B0-4A74-79EA-D0F828478F95}
{5B76CFE1-05A4-61BB-B463-C99E70186D94} = {6EB7DC50-15B0-4A74-79EA-D0F828478F95}
{3283873C-4349-DB4C-40F3-FC94A4914F9F} = {6EB7DC50-15B0-4A74-79EA-D0F828478F95}
{EE821FB7-A16A-BF55-F02D-24BEA4845FFE} = {6EB7DC50-15B0-4A74-79EA-D0F828478F95}
{B35EA0FC-9146-FAC7-5987-C8D9E25A4295} = {0846C395-F34D-8BC3-F5AB-85710B7BBB21}
{896774BC-9EAA-3531-D3DB-79020269DCD1} = {0846C395-F34D-8BC3-F5AB-85710B7BBB21}
{E50B67CE-C24C-279D-A2CF-B748134675D4} = {0846C395-F34D-8BC3-F5AB-85710B7BBB21}
{1811D21F-2B71-A731-ABA5-10F2B717F416} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{DF41D74B-900F-4824-9339-7450176B2836} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{D5D28626-9904-E1C9-C177-8A8F7239B136} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{DC510D12-9200-4F98-9433-D841AB5E4260} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{ADC90E85-B6ED-F725-78CE-4A7F16DC9E7A} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{6841FEC7-6913-DF79-30AC-D54674EC6AD4} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{B395AB7D-349D-0882-9970-B784C6E99302} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{F5999F1F-E4AD-DC3B-5A06-89F06B28C0BD} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{F52E7FDF-C5D7-F625-8D16-871F9E15C9CF} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{64362B70-EAD2-D371-BEA9-B7B42BF2A2B4} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{5FA55F7D-E647-AF1A-4C17-D8A3BDC53C50} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{443085DB-9B44-8CFB-D460-352A5124CDC4} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{559346FD-241A-90F2-1E42-AB794A70CE19} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{D1938D15-6F4A-6209-C15B-4F096F52BE00} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{7268155C-976A-19E5-4852-B9C05504CDFC} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{86674088-DFE0-024C-476E-5A0C98F73A9A} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{0E7BC0C2-A44F-BF61-8226-721FFF0767C0} = {4327B486-10B8-0BC4-86F6-79AD54B06938}
{48A71B5D-5CDF-9D8B-8906-DAAB78004171} = {E9B866E7-A66B-47DC-A0A4-359E9791D599}
{A7721D6B-DC5F-4902-FA84-5FD49F17473D} = {E9B866E7-A66B-47DC-A0A4-359E9791D599}
{4A0513BA-56A2-693B-8F7A-38D0154401DE} = {E9B866E7-A66B-47DC-A0A4-359E9791D599}
{CE8203EF-B79E-A432-2B72-88629EFF3B85} = {E9B866E7-A66B-47DC-A0A4-359E9791D599}
{480BF620-A7F3-6CE6-ED34-8870F93A5A54} = {88F499EC-F8F4-7908-11E5-E3D830348863}
{1E207ED7-1DC3-FF95-95E3-9754F3EA7670} = {331BAC73-6CBA-9C6B-E053-7707008CCADF}
{E43F6978-D80B-6660-D5FC-3BEA5864FF71} = {B56CB57E-7A8F-2B6A-9B82-658921CFD7B1}
{B6969B07-F992-C5D8-E18F-36E5A350D715} = {B56CB57E-7A8F-2B6A-9B82-658921CFD7B1}
{B62C8E59-3769-F9B2-3B8B-C57820518B44} = {C7934938-6A8E-25C5-8E78-1DBEA740C8F5}
{E7E61E44-CB5E-2C8F-AD76-E1B58F5BA2C7} = {C7934938-6A8E-25C5-8E78-1DBEA740C8F5}
{62A3B73A-F86B-A47B-A7D5-602616A28BE4} = {C7934938-6A8E-25C5-8E78-1DBEA740C8F5}
{B2A3E396-C800-EEBB-AFE9-6979244CB327} = {C7934938-6A8E-25C5-8E78-1DBEA740C8F5}
{AC9538E2-F9B8-20D6-B6DE-AF451641471C} = {C7934938-6A8E-25C5-8E78-1DBEA740C8F5}
{FB7887E2-337D-0C72-7ED1-57B6E3F38E0A} = {9CCDD176-2EF5-4F56-AFDA-240E52EEDFC7}
{39E4ADEF-3407-F0C0-4374-433638CA31ED} = {FE8EFA34-D39E-26E8-46B0-8FC6CDE5F7C7}
{0FCED3E2-8AAA-A943-15C9-CCC9040C2896} = {9EF1869C-EC93-3599-6FB7-6EEEE1332293}
{EFC5386A-D989-FA9F-C57F-07D2670DF484} = {9EF1869C-EC93-3599-6FB7-6EEEE1332293}
{995DBBF0-B695-2DBB-75AB-8C56FC3AD7EB} = {9EF1869C-EC93-3599-6FB7-6EEEE1332293}
{C09051DA-DB0B-5EDE-5AAA-CE7CFA4A0864} = {9EF1869C-EC93-3599-6FB7-6EEEE1332293}
EndGlobalSection
EndGlobal
How to Switch platform toolset in settings???
You don't have to build dawn-RT yourself, dawn-RT is already part of node-webgpu. Just clone https://github.com/maierfelix/webgpu-examples
and follow the README to run RT example
You don't have to build dawn-RT yourself, dawn-RT is already part of node-webgpu. Just clone
https://github.com/maierfelix/webgpu-examples
and follow the README to run RT example
wow~I will try it now!
Yes!!! It work! Thanks very much!!! I will update my project to use the newest webgpu node and see whether it can work or not!
I checked your project WebGPU-RTX
, the new RT API has little changes. Most importantly you now need to define GPURayTracingStateDescriptor.maxPayloadSize, which is the total byte size of the maximum payload used in RT shaders. It is important that you define the correct byte size, otherwise you might get a crash.
OK, I see, Thanks for your suggestion!
Which GLSL linter should I choose to lint the shader??? I install the shaderc, and try validate the .rgen in webgpu-examples -> ray-tracing/shaders/ :
not support 'GL_EXT_ray_tracing' !!!
I use cadenas.vscode-glsllint
in visual studio code, in general you can use glslangValidator
Thanks~ I have set the lint successfully.
@maierfelix I have find a bug, need your help:
if run the ray tracing example with these code, it will cause the os system(win10) collapse:
.rgen
#version 460
#extension GL_EXT_ray_tracing : require
#extension GL_EXT_nonuniform_qualifier : enable
#extension GL_EXT_scalar_block_layout : enable
#pragma shader_stage(raygen)
layout(location = 0) rayPayloadEXT vec3 hitValue;
layout(set = 1, binding = 0) uniform accelerationStructureEXT topLevelAS;
layout(std140, set = 1, binding = 1) buffer PixelBuffer { vec4 pixels[]; }
pixelBuffer;
void main() {
const float tMin = 0.1;
float tMax = 1.0e38f;
uint flags = gl_RayFlagsNoneEXT;
vec3 origin = vec3(0.0);
// vec3 rayDir = vec3(0.0);
vec3 rayDir = vec3(0.2);
traceRayEXT(topLevelAS, // acceleration structure
flags, // rayFlags
0xFF, // cullMask
0, // sbtRecordOffset
0, // sbtRecordStride
0, // missIndex
origin, // ray origin
tMin, // ray min range
rayDir, // ray direction
tMax, // ray max range
0 // payload (location = 0)
);
const uint pixelIndex =
gl_LaunchIDEXT.y * gl_LaunchSizeEXT.x + gl_LaunchIDEXT.x;
pixelBuffer.pixels[pixelIndex] = vec4(hitValue, 1.0);
}
.rchit
#version 460
#extension GL_EXT_ray_tracing : enable
#extension GL_EXT_nonuniform_qualifier : enable
#extension GL_EXT_scalar_block_layout : enable
#pragma shader_stage(closest)
layout(location = 0) rayPayloadEXT vec3 hitValue;
layout(location = 1) rayPayloadEXT bool isShadowed;
layout(set = 1, binding = 0) uniform accelerationStructureEXT topLevelAS;
void main() {
const float tMin = 0.1;
float tMax = 100000.0;
vec3 origin = vec3(0.0);
vec3 rayDir = vec3(0.1);
uint flags = gl_RayFlagsTerminateOnFirstHitEXT | gl_RayFlagsOpaqueEXT |
gl_RayFlagsSkipClosestHitShaderEXT;
isShadowed = true;
traceRayEXT(topLevelAS, // acceleration structure
flags, // rayFlags
0xFF, // cullMask
0, // sbtRecordOffset
0, // sbtRecordStride
1, // missIndex
origin, // ray origin
tMin, // ray min range
rayDir, // ray direction
tMax, // ray max range
1 // payload (location = 1)
);
hitValue = vec3(0.2);
}
.rmiss
#version 460
#extension GL_EXT_ray_tracing : enable
#pragma shader_stage(miss)
layout(location = 0) rayPayloadInEXT vec3 hitValue;
void main() {
hitValue = vec3(0.15);
}
shadow.rmiss
#version 460
#extension GL_EXT_ray_tracing : enable
#pragma shader_stage(miss)
layout(location = 1) rayPayloadInEXT bool isShadowed;
void main() { isShadowed = false; }
index.mjs(the difference from the source code: add ray miss shader module to shader table; change the instanceContainer->transform;)
import WebGPU from "webgpu";
import fs from "fs";
import glMatrix from "gl-matrix";
Object.assign(global, WebGPU);
Object.assign(global, glMatrix);
(async function main() {
let window = new WebGPUWindow({
width: 640,
height: 480,
title: "WebGPU",
resizable: false
});
let adapter = await GPU.requestAdapter({ window });
let device = await adapter.requestDevice({
extensions: ["ray_tracing"]
});
let queue = device.getQueue();
let context = window.getContext("webgpu");
let swapChainFormat = await context.getSwapChainPreferredFormat(device);
let swapChain = context.configureSwapChain({
device: device,
format: swapChainFormat
});
let aspect = Math.abs(window.width / window.height);
let mView = mat4.create();
let mProjection = mat4.create();
mat4.perspective(mProjection, (2 * Math.PI) / 5, -aspect, 0.1, 4096.0);
mat4.translate(mView, mView, vec3.fromValues(0, 0, -2));
// invert
mat4.invert(mView, mView);
mat4.invert(mProjection, mProjection);
mProjection[5] *= -1.0;
let baseShaderPath = `ray-tracing/shaders`;
// rasterization shaders
let vertexShaderModule = device.createShaderModule({
code: fs.readFileSync(`${baseShaderPath}/screen.vert`, "utf-8")
});
let fragmentShaderModule = device.createShaderModule({
code: fs.readFileSync(`${baseShaderPath}/screen.frag`, "utf-8")
});
// ray-tracing shaders
let rayGenShaderModule = device.createShaderModule({
code: fs.readFileSync(`${baseShaderPath}/ray-generation.rgen`, "utf-8")
});
let rayCHitShaderModule = device.createShaderModule({
code: fs.readFileSync(`${baseShaderPath}/ray-closest-hit.rchit`, "utf-8")
});
let rayMissShaderModule = device.createShaderModule({
code: fs.readFileSync(`${baseShaderPath}/ray-miss.rmiss`, "utf-8")
});
let rayShadowMissShaderModule = device.createShaderModule({
code: fs.readFileSync(`${baseShaderPath}/ray-miss-shadow.rmiss`, "utf-8")
});
// this storage buffer is used as a pixel buffer
// the result of the ray tracing pass gets written into it
// and it gets copied to the screen in the rasterization pass
let pixelBufferSize = window.width * window.height * 4 * Float32Array.BYTES_PER_ELEMENT;
let pixelBuffer = device.createBuffer({
size: pixelBufferSize,
usage: GPUBufferUsage.STORAGE
});
let triangleVertices = new Float32Array([
1.0, 1.0, 0.0,
-1.0, 1.0, 0.0,
0.0, -1.0, 0.0
]);
let triangleVertexBuffer = device.createBuffer({
size: triangleVertices.byteLength,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.RAY_TRACING
});
triangleVertexBuffer.setSubData(0, triangleVertices);
let triangleIndices = new Uint32Array([
0, 1, 2
]);
let triangleIndexBuffer = device.createBuffer({
size: triangleIndices.byteLength,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.RAY_TRACING
});
triangleIndexBuffer.setSubData(0, triangleIndices);
// create a geometry container
// which holds references to our geometry buffers
let geometryContainer = device.createRayTracingAccelerationContainer({
level: "bottom",
usage: GPURayTracingAccelerationContainerUsage.PREFER_FAST_TRACE,
geometries: [
{
usage: GPURayTracingAccelerationGeometryUsage.OPAQUE,
type: "triangles",
vertex: {
buffer: triangleVertexBuffer,
format: "float3",
stride: 3 * Float32Array.BYTES_PER_ELEMENT,
count: triangleVertices.length
},
index: {
buffer: triangleIndexBuffer,
format: "uint32",
count: triangleIndices.length
}
}
]
});
// create an instance container
// which contains object instances with transforms
// and links to a geometry container to be used
let instanceContainer = device.createRayTracingAccelerationContainer({
level: "top",
usage: GPURayTracingAccelerationContainerUsage.PREFER_FAST_TRACE,
instances: [
{
usage: GPURayTracingAccelerationInstanceUsage.TRIANGLE_CULL_DISABLE,
mask: 0xFF,
instanceId: 0,
instanceOffset: 0x0,
transform: {
// translation: { x: 0, y: 0, z: 0 },
// rotation: { x: 0, y: 0, z: 0 },
// scale: { x: 1, y: 1, z: 1 }
translation: { x: 1, y: 1, z: 1 },
rotation: { x: 1, y: 1, z: 1 },
scale: { x: 1, y: 1, z: 1 }
},
geometryContainer: geometryContainer
}
]
});
// first build all bottom-level containers
{
let commandEncoder = device.createCommandEncoder({});
commandEncoder.buildRayTracingAccelerationContainer(geometryContainer);
queue.submit([commandEncoder.finish()]);
}
// now we can build the top-level containers
// building them in separate passes is important
{
let commandEncoder = device.createCommandEncoder({});
commandEncoder.buildRayTracingAccelerationContainer(instanceContainer);
queue.submit([commandEncoder.finish()]);
}
// a collection of shader modules which get dynamically
// invoked, for example when calling traceNV
let shaderBindingTable = device.createRayTracingShaderBindingTable({
// stages are a collection of shaders
// which get indexed in groups
stages: [
{
module: rayGenShaderModule,
stage: GPUShaderStage.RAY_GENERATION
},
{
module: rayCHitShaderModule,
stage: GPUShaderStage.RAY_CLOSEST_HIT
},
{
module: rayMissShaderModule,
stage: GPUShaderStage.RAY_MISS
},
{
module: rayShadowMissShaderModule,
stage: GPUShaderStage.RAY_MISS
},
],
// groups can index the shaders in stages
// generalIndex: ray generation or ray miss stage index
// anyHitIndex: ray any-hit stage index
// closestHitIndex: ray closest-hit stage index
// intersectionIndex: ray intersection stage index
groups: [
// generation group
{
type: "general",
generalIndex: 0, // ray generation shader index
anyHitIndex: -1,
closestHitIndex: -1,
intersectionIndex: -1
},
// hit group
{
type: "triangles-hit-group",
generalIndex: -1,
anyHitIndex: -1,
closestHitIndex: 1, // ray closest-hit shader index
intersectionIndex: -1
},
// miss group
{
type: "general",
generalIndex: 2, // ray miss shader index
anyHitIndex: -1,
closestHitIndex: -1,
intersectionIndex: -1
},
{
type: "general",
generalIndex: 3, // ray miss shader index
anyHitIndex: -1,
closestHitIndex: -1,
intersectionIndex: -1
},
]
});
let rtBindGroupLayout = device.createBindGroupLayout({
entries: [
{
binding: 0,
visibility: GPUShaderStage.RAY_GENERATION,
type: "acceleration-container"
},
{
binding: 1,
visibility: GPUShaderStage.RAY_GENERATION,
type: "storage-buffer"
},
{
binding: 2,
visibility: GPUShaderStage.RAY_GENERATION,
type: "uniform-buffer"
}
]
});
let cameraData = new Float32Array(
// (mat4) view
mView.byteLength +
// (mat4) projection
mProjection.byteLength
);
let cameraUniformBuffer = device.createBuffer({
size: cameraData.byteLength,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM
});
// fill in the data
{
let offset = 0x0;
cameraData.set(mView, offset);
offset += mView.length;
cameraData.set(mProjection, offset);
offset += mProjection.length;
}
cameraUniformBuffer.setSubData(0, cameraData);
let rtBindGroup = device.createBindGroup({
layout: rtBindGroupLayout,
entries: [
{
binding: 0,
accelerationContainer: instanceContainer,
offset: 0,
size: 0
},
{
binding: 1,
buffer: pixelBuffer,
offset: 0,
size: pixelBufferSize
},
{
binding: 2,
buffer: cameraUniformBuffer,
offset: 0,
size: cameraData.byteLength
}
]
});
let rtPipeline = device.createRayTracingPipeline({
layout: device.createPipelineLayout({
bindGroupLayouts: [rtBindGroupLayout]
}),
rayTracingState: {
shaderBindingTable,
maxRecursionDepth: 1,
maxPayloadSize: 4 * Float32Array.BYTES_PER_ELEMENT
}
});
let resolutionData = new Float32Array([
window.width, window.height
]);
let resolutionUniformBuffer = device.createBuffer({
size: resolutionData.byteLength,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM
});
resolutionUniformBuffer.setSubData(0, resolutionData);
let renderBindGroupLayout = device.createBindGroupLayout({
entries: [
{
binding: 0,
visibility: GPUShaderStage.FRAGMENT,
type: "storage-buffer"
},
{
binding: 1,
visibility: GPUShaderStage.FRAGMENT,
type: "uniform-buffer"
}
]
});
let renderBindGroup = device.createBindGroup({
layout: renderBindGroupLayout,
entries: [
{
binding: 0,
buffer: pixelBuffer,
offset: 0,
size: pixelBufferSize
},
{
binding: 1,
buffer: resolutionUniformBuffer,
offset: 0,
size: resolutionData.byteLength
}
]
});
let renderPipeline = device.createRenderPipeline({
layout: device.createPipelineLayout({
bindGroupLayouts: [renderBindGroupLayout]
}),
sampleCount: 1,
vertexStage: {
module: vertexShaderModule,
entryPoint: "main"
},
fragmentStage: {
module: fragmentShaderModule,
entryPoint: "main"
},
primitiveTopology: "triangle-list",
vertexState: {
indexFormat: "uint32",
vertexBuffers: []
},
rasterizationState: {
frontFace: "CCW",
cullMode: "none"
},
colorStates: [{
format: swapChainFormat,
alphaBlend: {},
colorBlend: {}
}]
});
function onFrame() {
if (!window.shouldClose()) setTimeout(onFrame, 1e3 / 60);
let backBufferView = swapChain.getCurrentTextureView();
// ray tracing pass
{
let commandEncoder = device.createCommandEncoder({});
let passEncoder = commandEncoder.beginRayTracingPass({});
passEncoder.setPipeline(rtPipeline);
passEncoder.setBindGroup(0, rtBindGroup);
passEncoder.traceRays(
0, // sbt ray-generation offset
1, // sbt ray-hit offset
2, // sbt ray-miss offset
window.width, // query width dimension
window.height, // query height dimension
1 // query depth dimension
);
passEncoder.endPass();
queue.submit([commandEncoder.finish()]);
}
// rasterization pass
// the rasterization's pass only use right now,
// is to bring the pixel buffer we write into from the
// ray tracing pass, to the screen
{
let commandEncoder = device.createCommandEncoder({});
let passEncoder = commandEncoder.beginRenderPass({
colorAttachments: [{
clearColor: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 },
loadOp: "clear",
storeOp: "store",
attachment: backBufferView
}]
});
passEncoder.setPipeline(renderPipeline);
passEncoder.setBindGroup(0, renderBindGroup);
passEncoder.draw(3, 1, 0, 0);
passEncoder.endPass();
queue.submit([commandEncoder.finish()]);
}
swapChain.present();
window.pollEvents();
};
setTimeout(onFrame, 1e3 / 60);
})();
Edit:
if I set the .rgen->rayDir to vec3(0.0), the run successfully!!!
or if I change index.mjs->instanceContainer ->transform to the commented code, then event if the the .rgen->rayDir is vec3(0.2), it can run successfully!!!
How to fix this??? Thanks very much!
So the errors shows that the D3D12 backend is used, please try enabling the Vulkan backend and see if it works there.
This is how you switch between D3D12 and Vulkan backend:
let adapter = await GPU.requestAdapter({
window,
preferredBackend: "D3D12" // "D3D12" or "Vulkan"
});
Also make sure that you have set the correct payload byte size here. In your case, this is 4 * 4
bytes now.
The maxPayloadSize
property is currently the only "unstable" part in the RT spec that doesn't get validated at all since there is a bug in SPIRV-cross which makes it not possible for me to validate or calculate this value automatically.
use Vulkan backend error:
Info: One or more requested extensions are not supported
I have update the bug info: https://github.com/maierfelix/webgpu/issues/24#issuecomment-652968531
the maxPayloadSize is already set to 4 * 4
How to fix it??? Thanks very much!!!
Please install the Vulkan beta driver from here and try again with the Vulkan backend enabled.
If you get an error with both backends, then you have a bug in your code.
Make sure that the shader binding table is correct, and that the traceRays
call and traceRayEXT
offsets are correct
Thanks~ I will try it now!
Your offsets are wrong, what you need to do:
// trace shadow ray
traceRayEXT(
...
1, // sbtRecordOffset
0, // sbtRecordStride
1, // missIndex
...
)
traceRays
should be:
rtPass.traceRays(
0, // sbt ray-generation offset
1, // sbt ray-hit offset
3, // sbt ray-miss offset
...
);
Your SBT groups should be structured like this:
{
type: "general",
generalIndex: 0
}, {
type: "triangles-hit-group",
closestHitIndex: 1
}, {
type: "triangles-hit-group", // shadow hit
closestHitIndex: 2
}, {
type: "general",
generalIndex: 3
}, {
type: "general", // shadow miss
generalIndex: 4
}
I don't need shadow hit shader.
I read from gbuffer in .rgen to get the direct light(not show in the code);
I trace indirect ray in .rgen to compute the indirect light;
I trace shadow ray in .rchit to compute the indirect light's direct light's shadow
Yes you don't need shadow hit shader, but try it like this and see if it fixes it
OK, I will try it! Thanks very much!
now I can use Vulkan!
but still fail and collapse!!!
then I add a empty ray-closest-hit-shadow.rchit
#version 460
#extension GL_EXT_ray_tracing : enable
#pragma shader_stage(closest)
void main() {
return;
}
index.mjs
...
let rayShadowCHitShaderModule = device.createShaderModule({
code: fs.readFileSync(`${baseShaderPath}/ray-closest-hit-shadow.rchit`, "utf-8")
});
...
// a collection of shader modules which get dynamically
// invoked, for example when calling traceNV
let shaderBindingTable = device.createRayTracingShaderBindingTable({
// stages are a collection of shaders
// which get indexed in groups
stages: [
{
module: rayGenShaderModule,
stage: GPUShaderStage.RAY_GENERATION
},
{
module: rayCHitShaderModule,
stage: GPUShaderStage.RAY_CLOSEST_HIT
},
{
module: rayShadowCHitShaderModule,
stage: GPUShaderStage.RAY_CLOSEST_HIT
},
{
module: rayMissShaderModule,
stage: GPUShaderStage.RAY_MISS
},
{
module: rayShadowMissShaderModule,
stage: GPUShaderStage.RAY_MISS
},
],
// groups can index the shaders in stages
// generalIndex: ray generation or ray miss stage index
// anyHitIndex: ray any-hit stage index
// closestHitIndex: ray closest-hit stage index
// intersectionIndex: ray intersection stage index
groups: [
// generation group
{
type: "general",
generalIndex: 0, // ray generation shader index
anyHitIndex: -1,
closestHitIndex: -1,
intersectionIndex: -1
},
// hit group
{
type: "triangles-hit-group",
generalIndex: -1,
anyHitIndex: -1,
closestHitIndex: 1, // ray closest-hit shader index
intersectionIndex: -1
},
// hit group
{
type: "triangles-hit-group",
generalIndex: -1,
anyHitIndex: -1,
closestHitIndex: 2, // ray closest-hit shader index
intersectionIndex: -1
},
// miss group
{
type: "general",
generalIndex: 3, // ray miss shader index
anyHitIndex: -1,
closestHitIndex: -1,
intersectionIndex: -1
},
{
type: "general",
generalIndex: 4, // ray miss shader index
anyHitIndex: -1,
closestHitIndex: -1,
intersectionIndex: -1
},
]
});
other change is like your fix, but still fail and collapse!!!
I don't see problem in the code, weird
You can see the code: https://github.com/yyc-git/webgpu-examples
I fork your project and change the ray-tracing code
I think you have typo here, should be rayPayloadInEXT
.
Aside from that, I have a project with shadow rays too and I do the same as you but it doesn't crash, so it's probably a small bug/typo somewhere
still not work!!!
I have update the project! you can run it.
does your project work with the newest webgpu node? can you send your project code to me? I will check it.Thank you
Yes it works with latest node-webgpu and with D3D12 and Vulkan backend. I sent you a mail with the code
Thank you!!! I will check it!
@maierfelix I have reproduce the bug based on your code!!! still can run only a little frames(4-5), then collapse!!!
I have send the edited code to your email, please check and run it to see the bug!
and I have update the https://github.com/yyc-git/webgpu-examples, you can run it and see the bug!!!
How to fix it??? Thanks very much!!!
I can run the code you sent me with the D3D12 backend, I can't test the Vulkan backend as I don't have the beta driver installed right now
Thanks~ I will test it soon~
@maierfelix I already use D3D12 backend in the fail test! can you run the https://github.com/yyc-git/webgpu-examples successfully??? Are your os win10???
@maierfelix Hello~ Any solution to fix it??? Thanks very much~
Sorry I don't what's causing this bug, I'm currently limited in my time for this project
Thanks, I will try to fix it.
@maierfelix Hello! I have found that if the rayDir in .rgen is negative(e.g. vec3 rayDir = vec3(-0.2, -0.3, -0.1); ), it will collapse too!!!
I have update the https://github.com/yyc-git/webgpu-examples , you can run it and see whether it will collapse or not!!!
How to fix it?????? Thanks very much!!!
@maierfelix if you don't want to fix it, can you send me the builded webgpu node code with the vulkan 1.0 version(just the same code version as I have used successfully at the march this year)??? Thanks very much!!!
You can just install an older version of the webgpu npm package, for example version 0.1.4
or 0.1.10
I have clone the webgpu-example project, then do these operation in the project's root:
change package.json->webgpu's version to 0.1.10;
npm install
node .\hello-triangle.mjs
error on this line:
const adapter = await GPU.requestAdapter({ window });
error info:
Info: vkEnumerateInstanceExtensionProperties
(node:21864) UnhandledPromiseRejectionWarning: Error: Unknown failure
at main (file:///D:/Github/webgpu-examples/hello-triangle.mjs:35:29)
at file:///D:/Github/webgpu-examples/hello-triangle.mjs:108:3
at ModuleJob.run (internal/modules/esm/module_job.js:140:23)
at async Loader.import (internal/modules/esm/loader.js:162:24)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:21864) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:21864) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
if I change package.json->webgpu's version to 0.1.4, still has this error!!!
@maierfelix How to do? Thanks very much~
Follow dawn-ray-tracing's(not dawn!!!!!!!!) initial setup instructions, but instead of the standard build, do the following:
To build the project run:
after build some files, it interrupt:
my os is win10, vulkan sdk is 1.1.126