maierfelix / webgpu

WebGPU for Node [Deprecated, Unmaintained]
MIT License
243 stars 17 forks source link

Dawn Ray Tracing #24

Closed yyc-git closed 4 years ago

yyc-git commented 4 years ago

Follow dawn-ray-tracing's(not dawn!!!!!!!!) initial setup instructions, but instead of the standard build, do the following:

gn gen out/Shared --ide=vs --target_cpu="x64" --args="is_component_build=true is_debug=false is_clang=false"

To build the project run:

ninja -C out/Shared

after build some files, it interrupt:

my os is win10, vulkan sdk is 1.1.126

yyc-git commented 4 years ago

Hello! Any Solution??? @maierfelix Thanks very much!!!

maierfelix commented 4 years ago

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 :)

yyc-git commented 4 years ago

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 :)

yes, I run "gclient sync" success, and already delete out/Shared folder.

yyc-git commented 4 years ago

where is error log?

maierfelix commented 4 years ago

the compile error you get, I need it in English

yyc-git commented 4 years ago
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.
yyc-git commented 4 years ago

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

maierfelix commented 4 years ago

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:

yyc-git commented 4 years ago

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:

  • 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!!!

maierfelix commented 4 years ago

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
yyc-git commented 4 years ago

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

maierfelix commented 4 years ago

If I might ask, what is the goal you want to achieve?

yyc-git commented 4 years ago

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!

yyc-git commented 4 years ago

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???

maierfelix commented 4 years ago

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

yyc-git commented 4 years ago

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!

yyc-git commented 4 years ago

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!

maierfelix commented 4 years ago

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.

yyc-git commented 4 years ago

OK, I see, Thanks for your suggestion!

yyc-git commented 4 years ago

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' !!!

maierfelix commented 4 years ago

I use cadenas.vscode-glsllint in visual studio code, in general you can use glslangValidator

yyc-git commented 4 years ago

Thanks~ I have set the lint successfully.

yyc-git commented 4 years ago

@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!

maierfelix commented 4 years ago

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.

yyc-git commented 4 years ago

use Vulkan backend error:

Info: One or more requested extensions are not supported
yyc-git commented 4 years ago

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!!!

maierfelix commented 4 years ago

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

yyc-git commented 4 years ago

Thanks~ I will try it now!

maierfelix commented 4 years ago

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
}
yyc-git commented 4 years ago

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

maierfelix commented 4 years ago

Yes you don't need shadow hit shader, but try it like this and see if it fixes it

yyc-git commented 4 years ago

OK, I will try it! Thanks very much!

yyc-git commented 4 years ago

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!!!

maierfelix commented 4 years ago

I don't see problem in the code, weird

yyc-git commented 4 years ago

You can see the code: https://github.com/yyc-git/webgpu-examples

I fork your project and change the ray-tracing code

maierfelix commented 4 years ago

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

yyc-git commented 4 years ago

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

maierfelix commented 4 years ago

Yes it works with latest node-webgpu and with D3D12 and Vulkan backend. I sent you a mail with the code

yyc-git commented 4 years ago

Thank you!!! I will check it!

yyc-git commented 4 years ago

@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!!!

maierfelix commented 4 years ago

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

yyc-git commented 4 years ago

Thanks~ I will test it soon~

yyc-git commented 4 years ago

@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???

yyc-git commented 4 years ago

@maierfelix Hello~ Any solution to fix it??? Thanks very much~

maierfelix commented 4 years ago

Sorry I don't what's causing this bug, I'm currently limited in my time for this project

yyc-git commented 4 years ago

Thanks, I will try to fix it.

yyc-git commented 4 years ago

@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!!!

yyc-git commented 4 years ago

@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!!!

maierfelix commented 4 years ago

You can just install an older version of the webgpu npm package, for example version 0.1.4 or 0.1.10

yyc-git commented 4 years ago

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~