diff --git a/include/slang-gfx.h b/include/slang-gfx.h index d273ce4276..207b3e1361 100644 --- a/include/slang-gfx.h +++ b/include/slang-gfx.h @@ -92,6 +92,7 @@ enum class DeviceType Metal, CPU, CUDA, + WebGPU, CountOf, }; diff --git a/source/core/slang-render-api-util.cpp b/source/core/slang-render-api-util.cpp index 0a303b6659..359ed9c96e 100644 --- a/source/core/slang-render-api-util.cpp +++ b/source/core/slang-render-api-util.cpp @@ -19,6 +19,7 @@ namespace Slang { { RenderApiType::Metal, "mtl,metal", ""}, { RenderApiType::CPU, "cpu", ""}, { RenderApiType::CUDA, "cuda", "cuda,ptx"}, + { RenderApiType::WebGPU, "wgpu,webgpu", "wgsl"}, }; static int _calcAvailableApis() @@ -265,6 +266,11 @@ static bool _canLoadSharedLibrary(const char* libName) { #if SLANG_WINDOWS_FAMILY case RenderApiType::Vulkan: return _canLoadSharedLibrary("vulkan-1") || _canLoadSharedLibrary("vk_swiftshader"); + case RenderApiType::WebGPU: + return + _canLoadSharedLibrary("webgpu_dawn") && + _canLoadSharedLibrary("dxcompiler") && + _canLoadSharedLibrary("dxil"); #elif SLANG_APPLE_FAMILY case RenderApiType::Vulkan: return true; case RenderApiType::Metal: return true; diff --git a/source/core/slang-render-api-util.h b/source/core/slang-render-api-util.h index 224fe6996c..f1be930cc0 100644 --- a/source/core/slang-render-api-util.h +++ b/source/core/slang-render-api-util.h @@ -17,6 +17,7 @@ enum class RenderApiType Metal, CPU, CUDA, + WebGPU, CountOf, }; @@ -31,6 +32,7 @@ struct RenderApiFlag Metal = 1 << int(RenderApiType::Metal), CPU = 1 << int(RenderApiType::CPU), CUDA = 1 << int(RenderApiType::CUDA), + WebGPU = 1 << int(RenderApiType::WebGPU), AllOf = (1 << int(RenderApiType::CountOf)) - 1 ///< All bits set }; }; diff --git a/tools/render-test/options.cpp b/tools/render-test/options.cpp index dc1850d379..07e8b0e2af 100644 --- a/tools/render-test/options.cpp +++ b/tools/render-test/options.cpp @@ -33,6 +33,7 @@ static rhi::DeviceType _toRenderType(Slang::RenderApiType apiType) case RenderApiType::Metal: return rhi::DeviceType::Metal; case RenderApiType::CPU: return rhi::DeviceType::CPU; case RenderApiType::CUDA: return rhi::DeviceType::CUDA; + case RenderApiType::WebGPU: return rhi::DeviceType::WGPU; default: return rhi::DeviceType::Default; } diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp index 5f0e51da3f..4835c3affd 100644 --- a/tools/render-test/render-test-main.cpp +++ b/tools/render-test/render-test-main.cpp @@ -1229,6 +1229,12 @@ static SlangResult _innerMain(Slang::StdWriters* stdWriters, SlangSession* sessi input.profile = ""; nativeLanguage = SLANG_SOURCE_LANGUAGE_CUDA; slangPassThrough = SLANG_PASS_THROUGH_NVRTC; + break; + case DeviceType::WGPU: + input.target = SLANG_WGSL; + input.profile = ""; + nativeLanguage = SLANG_SOURCE_LANGUAGE_WGSL; + slangPassThrough = SLANG_PASS_THROUGH_NONE; break; default: diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 8c50d2ee21..7929857075 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -1122,6 +1122,10 @@ static SlangResult _extractRenderTestRequirements(const CommandLine& cmdLine, Te nativeLanguage = SLANG_SOURCE_LANGUAGE_CUDA; passThru = SLANG_PASS_THROUGH_NVRTC; break; + case RenderApiType::WebGPU: + target = SLANG_WGSL; + SLANG_ASSERT(!usePassthru); + break; } SlangSourceLanguage sourceLanguage = nativeLanguage;