dawn/node: Update for latest WebGPU IDL Most new APIs have just been stubbed with `UNIMPLEMENTED()`. We'll need to flesh these out. This unblocks the Tint team for now though. Bug: dawn:1123 Change-Id: I484559278a21e187ba496e01401316ac91be7d26 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/92941 Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/DEPS b/DEPS index 6159c7a..ee3831b 100644 --- a/DEPS +++ b/DEPS
@@ -169,7 +169,7 @@ 'condition': 'dawn_node', }, 'third_party/gpuweb': { - 'url': '{github_git}/gpuweb/gpuweb.git@16df823c91c9045b7cdf9bd0f2c0ef6d43ac95e7', + 'url': '{github_git}/gpuweb/gpuweb.git@3c4734b09c68eb800b15da5e9ecefeca735fa7df', 'condition': 'dawn_node', },
diff --git a/src/dawn/node/binding/Converter.cpp b/src/dawn/node/binding/Converter.cpp index 65c59a5..cad53f6 100644 --- a/src/dawn/node/binding/Converter.cpp +++ b/src/dawn/node/binding/Converter.cpp
@@ -295,9 +295,6 @@ case interop::GPUTextureFormat::kDepth32Float: out = wgpu::TextureFormat::Depth32Float; return true; - case interop::GPUTextureFormat::kDepth24UnormStencil8: - out = wgpu::TextureFormat::Depth24UnormStencil8; - return true; case interop::GPUTextureFormat::kDepth32FloatStencil8: out = wgpu::TextureFormat::Depth32FloatStencil8; return true; @@ -1217,4 +1214,9 @@ Convert(out.fragment, in.fragment); } +bool Converter::Convert(wgpu::PipelineLayout& out, const interop::GPUAutoLayoutMode& in) { + out = nullptr; + return true; +} + } // namespace wgpu::binding
diff --git a/src/dawn/node/binding/Converter.h b/src/dawn/node/binding/Converter.h index fb94598..e0ef58c 100644 --- a/src/dawn/node/binding/Converter.h +++ b/src/dawn/node/binding/Converter.h
@@ -243,6 +243,8 @@ [[nodiscard]] bool Convert(wgpu::RenderPipelineDescriptor& out, const interop::GPURenderPipelineDescriptor& in); + [[nodiscard]] bool Convert(wgpu::PipelineLayout& out, const interop::GPUAutoLayoutMode& in); + // std::string to C string inline bool Convert(const char*& out, const std::string& in) { out = in.c_str();
diff --git a/src/dawn/node/binding/GPU.cpp b/src/dawn/node/binding/GPU.cpp index 1b147ed..beeaa83 100644 --- a/src/dawn/node/binding/GPU.cpp +++ b/src/dawn/node/binding/GPU.cpp
@@ -165,4 +165,8 @@ return promise; } +interop::GPUTextureFormat GPU::getPreferredCanvasFormat(Napi::Env) { + UNIMPLEMENTED(); +} + } // namespace wgpu::binding
diff --git a/src/dawn/node/binding/GPU.h b/src/dawn/node/binding/GPU.h index 8ccafff..aa6956e 100644 --- a/src/dawn/node/binding/GPU.h +++ b/src/dawn/node/binding/GPU.h
@@ -32,6 +32,7 @@ interop::Promise<std::optional<interop::Interface<interop::GPUAdapter>>> requestAdapter( Napi::Env env, interop::GPURequestAdapterOptions options) override; + interop::GPUTextureFormat getPreferredCanvasFormat(Napi::Env) override; private: const Flags flags_;
diff --git a/src/dawn/node/binding/GPUAdapter.cpp b/src/dawn/node/binding/GPUAdapter.cpp index be3864c..511225e 100644 --- a/src/dawn/node/binding/GPUAdapter.cpp +++ b/src/dawn/node/binding/GPUAdapter.cpp
@@ -92,9 +92,6 @@ class Features : public interop::GPUSupportedFeatures { public: explicit Features(WGPUDeviceProperties properties) { - if (properties.depth24UnormStencil8) { - enabled_.emplace(interop::GPUFeatureName::kDepth24UnormStencil8); - } if (properties.depth32FloatStencil8) { enabled_.emplace(interop::GPUFeatureName::kDepth32FloatStencil8); } @@ -115,8 +112,10 @@ } // TODO(dawn:1123) add support for these extensions when possible. - // wgpu::interop::GPUFeatureName::kIndirectFirstInstance // wgpu::interop::GPUFeatureName::kDepthClipControl + // wgpu::interop::GPUFeatureName::kIndirectFirstInstance + // wgpu::interop::GPUFeatureName::kShaderF16 + // wgpu::interop::GPUFeatureName::kBgra8UnormStorage } bool has(interop::GPUFeatureName feature) { return enabled_.count(feature) != 0; } @@ -148,18 +147,10 @@ // wgpu::bindings::GPUAdapter // TODO(crbug.com/dawn/1133): This is a stub implementation. Properly implement. //////////////////////////////////////////////////////////////////////////////// -GPUAdapter::GPUAdapter(dawn::native::Adapter a, const Flags& flags) : adapter_(a), flags_(flags) { - wgpu::AdapterProperties props; - adapter_.GetProperties(&props); - name_ = props.name; -} +GPUAdapter::GPUAdapter(dawn::native::Adapter a, const Flags& flags) : adapter_(a), flags_(flags) {} // TODO(dawn:1133): Avoid the extra copy by making the generator make a virtual method with const // std::string& -std::string GPUAdapter::getName(Napi::Env) { - return name_; -} - interop::Interface<interop::GPUSupportedFeatures> GPUAdapter::getFeatures(Napi::Env env) { return interop::GPUSupportedFeatures::Create<Features>(env, adapter_.GetAdapterProperties()); } @@ -205,15 +196,13 @@ case interop::GPUFeatureName::kTimestampQuery: requiredFeatures.emplace_back(wgpu::FeatureName::TimestampQuery); continue; - case interop::GPUFeatureName::kDepth24UnormStencil8: - requiredFeatures.emplace_back(wgpu::FeatureName::Depth24UnormStencil8); - continue; case interop::GPUFeatureName::kDepth32FloatStencil8: requiredFeatures.emplace_back(wgpu::FeatureName::Depth32FloatStencil8); continue; case interop::GPUFeatureName::kDepthClipControl: - case interop::GPUFeatureName::kIndirectFirstInstance: case interop::GPUFeatureName::kShaderF16: + case interop::GPUFeatureName::kIndirectFirstInstance: + case interop::GPUFeatureName::kBgra8UnormStorage: // TODO(dawn:1123) Add support for these extensions when possible. continue; } @@ -274,4 +263,11 @@ } return promise; } + +interop::Promise<interop::Interface<interop::GPUAdapterInfo>> GPUAdapter::requestAdapterInfo( + Napi::Env, + std::vector<std::string> unmaskHints) { + UNIMPLEMENTED(); +} + } // namespace wgpu::binding
diff --git a/src/dawn/node/binding/GPUAdapter.h b/src/dawn/node/binding/GPUAdapter.h index c8c8cb3..60b8436 100644 --- a/src/dawn/node/binding/GPUAdapter.h +++ b/src/dawn/node/binding/GPUAdapter.h
@@ -16,6 +16,7 @@ #define SRC_DAWN_NODE_BINDING_GPUADAPTER_H_ #include <string> +#include <vector> #include "dawn/native/DawnNative.h" #include "dawn/webgpu_cpp.h" @@ -31,18 +32,19 @@ GPUAdapter(dawn::native::Adapter a, const Flags& flags); // interop::GPUAdapter interface compliance - std::string getName(Napi::Env) override; - interop::Interface<interop::GPUSupportedFeatures> getFeatures(Napi::Env) override; - interop::Interface<interop::GPUSupportedLimits> getLimits(Napi::Env) override; - bool getIsFallbackAdapter(Napi::Env) override; interop::Promise<interop::Interface<interop::GPUDevice>> requestDevice( Napi::Env env, interop::GPUDeviceDescriptor descriptor) override; + interop::Promise<interop::Interface<interop::GPUAdapterInfo>> requestAdapterInfo( + Napi::Env, + std::vector<std::string> unmaskHints) override; + interop::Interface<interop::GPUSupportedFeatures> getFeatures(Napi::Env) override; + interop::Interface<interop::GPUSupportedLimits> getLimits(Napi::Env) override; + bool getIsFallbackAdapter(Napi::Env) override; private: dawn::native::Adapter adapter_; const Flags& flags_; - std::string name_; }; } // namespace wgpu::binding
diff --git a/src/dawn/node/binding/GPUBuffer.cpp b/src/dawn/node/binding/GPUBuffer.cpp index 4c2a90e..afe0735 100644 --- a/src/dawn/node/binding/GPUBuffer.cpp +++ b/src/dawn/node/binding/GPUBuffer.cpp
@@ -162,6 +162,14 @@ state_ = State::Destroyed; } +interop::GPUSize64 GPUBuffer::getSize(Napi::Env) { + UNIMPLEMENTED(); +} + +interop::GPUBufferUsageFlags GPUBuffer::getUsage(Napi::Env) { + UNIMPLEMENTED(); +} + void GPUBuffer::DetachMappings() { for (auto& mapping : mapped_) { mapping.buffer.Value().Detach();
diff --git a/src/dawn/node/binding/GPUBuffer.h b/src/dawn/node/binding/GPUBuffer.h index f4e1b30..250f41b 100644 --- a/src/dawn/node/binding/GPUBuffer.h +++ b/src/dawn/node/binding/GPUBuffer.h
@@ -51,6 +51,8 @@ std::optional<interop::GPUSize64> size) override; void unmap(Napi::Env) override; void destroy(Napi::Env) override; + interop::GPUSize64 getSize(Napi::Env) override; + interop::GPUBufferUsageFlags getUsage(Napi::Env) override; std::string getLabel(Napi::Env) override; void setLabel(Napi::Env, std::string value) override;
diff --git a/src/dawn/node/binding/GPUDevice.cpp b/src/dawn/node/binding/GPUDevice.cpp index 45ab83b..5239ce1 100644 --- a/src/dawn/node/binding/GPUDevice.cpp +++ b/src/dawn/node/binding/GPUDevice.cpp
@@ -56,7 +56,16 @@ std::string message_; }; -class OOMError : public interop::GPUOutOfMemoryError {}; +class OOMError : public interop::GPUOutOfMemoryError { + public: + explicit OOMError(std::string message) : message_(std::move(message)) {} + + std::string getMessage(Napi::Env) override { return message_; }; + + private: + std::string message_; +}; + class ValidationError : public interop::GPUValidationError { public: explicit ValidationError(std::string message) : message_(std::move(message)) {} @@ -436,8 +445,9 @@ device_.PushErrorScope(f); } -interop::Promise<std::optional<interop::GPUError>> GPUDevice::popErrorScope(Napi::Env env) { - using Promise = interop::Promise<std::optional<interop::GPUError>>; +interop::Promise<std::optional<interop::Interface<interop::GPUError>>> GPUDevice::popErrorScope( + Napi::Env env) { + using Promise = interop::Promise<std::optional<interop::Interface<interop::GPUError>>>; struct Context { Napi::Env env; Promise promise; @@ -454,13 +464,18 @@ case WGPUErrorType::WGPUErrorType_NoError: c->promise.Resolve({}); break; - case WGPUErrorType::WGPUErrorType_OutOfMemory: - c->promise.Resolve(interop::GPUOutOfMemoryError::Create<OOMError>(env)); + case WGPUErrorType::WGPUErrorType_OutOfMemory: { + interop::Interface<interop::GPUError> err{ + interop::GPUOutOfMemoryError::Create<OOMError>(env, message)}; + c->promise.Resolve(err); break; - case WGPUErrorType::WGPUErrorType_Validation: - c->promise.Resolve( - interop::GPUValidationError::Create<ValidationError>(env, message)); + } + case WGPUErrorType::WGPUErrorType_Validation: { + interop::Interface<interop::GPUError> err{ + interop::GPUValidationError::Create<ValidationError>(env, message)}; + c->promise.Resolve(err); break; + } case WGPUErrorType::WGPUErrorType_Unknown: case WGPUErrorType::WGPUErrorType_DeviceLost: c->promise.Reject(Errors::OperationError(env, message));
diff --git a/src/dawn/node/binding/GPUDevice.h b/src/dawn/node/binding/GPUDevice.h index 57a4c2c..02a2ea8 100644 --- a/src/dawn/node/binding/GPUDevice.h +++ b/src/dawn/node/binding/GPUDevice.h
@@ -83,7 +83,8 @@ interop::Promise<interop::Interface<interop::GPUDeviceLostInfo>> getLost( Napi::Env env) override; void pushErrorScope(Napi::Env, interop::GPUErrorFilter filter) override; - interop::Promise<std::optional<interop::GPUError>> popErrorScope(Napi::Env env) override; + interop::Promise<std::optional<interop::Interface<interop::GPUError>>> popErrorScope( + Napi::Env env) override; std::string getLabel(Napi::Env) override; void setLabel(Napi::Env, std::string value) override; interop::Interface<interop::EventHandler> getOnuncapturederror(Napi::Env) override;
diff --git a/src/dawn/node/binding/GPUQuerySet.cpp b/src/dawn/node/binding/GPUQuerySet.cpp index 3197d98..08a8a47 100644 --- a/src/dawn/node/binding/GPUQuerySet.cpp +++ b/src/dawn/node/binding/GPUQuerySet.cpp
@@ -29,6 +29,14 @@ query_set_.Destroy(); } +interop::GPUQueryType GPUQuerySet::getType(Napi::Env) { + UNIMPLEMENTED(); +} + +interop::GPUSize32 GPUQuerySet::getCount(Napi::Env) { + UNIMPLEMENTED(); +} + std::string GPUQuerySet::getLabel(Napi::Env) { UNIMPLEMENTED(); }
diff --git a/src/dawn/node/binding/GPUQuerySet.h b/src/dawn/node/binding/GPUQuerySet.h index 7c0e9dd..d2bced1 100644 --- a/src/dawn/node/binding/GPUQuerySet.h +++ b/src/dawn/node/binding/GPUQuerySet.h
@@ -34,6 +34,8 @@ // interop::GPUQuerySet interface compliance void destroy(Napi::Env) override; + interop::GPUQueryType getType(Napi::Env) override; + interop::GPUSize32 getCount(Napi::Env) override; std::string getLabel(Napi::Env) override; void setLabel(Napi::Env, std::string value) override;
diff --git a/src/dawn/node/binding/GPUSupportedLimits.cpp b/src/dawn/node/binding/GPUSupportedLimits.cpp index 341385f..83a5cb2 100644 --- a/src/dawn/node/binding/GPUSupportedLimits.cpp +++ b/src/dawn/node/binding/GPUSupportedLimits.cpp
@@ -104,6 +104,11 @@ return limits_.limits.maxInterStageShaderComponents; } +uint32_t GPUSupportedLimits::getMaxInterStageShaderVariables(Napi::Env) { + UNIMPLEMENTED(); + // return limits_.limits.maxInterStageShaderVariables; +} + uint32_t GPUSupportedLimits::getMaxComputeWorkgroupStorageSize(Napi::Env) { return limits_.limits.maxComputeWorkgroupStorageSize; }
diff --git a/src/dawn/node/binding/GPUSupportedLimits.h b/src/dawn/node/binding/GPUSupportedLimits.h index 337db00..246da4d 100644 --- a/src/dawn/node/binding/GPUSupportedLimits.h +++ b/src/dawn/node/binding/GPUSupportedLimits.h
@@ -49,6 +49,7 @@ uint32_t getMaxVertexAttributes(Napi::Env) override; uint32_t getMaxVertexBufferArrayStride(Napi::Env) override; uint32_t getMaxInterStageShaderComponents(Napi::Env) override; + uint32_t getMaxInterStageShaderVariables(Napi::Env) override; uint32_t getMaxComputeWorkgroupStorageSize(Napi::Env) override; uint32_t getMaxComputeInvocationsPerWorkgroup(Napi::Env) override; uint32_t getMaxComputeWorkgroupSizeX(Napi::Env) override;
diff --git a/src/dawn/node/binding/GPUTexture.cpp b/src/dawn/node/binding/GPUTexture.cpp index 61ca716..38aaac5 100644 --- a/src/dawn/node/binding/GPUTexture.cpp +++ b/src/dawn/node/binding/GPUTexture.cpp
@@ -54,6 +54,38 @@ texture_.Destroy(); } +interop::GPUIntegerCoordinate GPUTexture::getWidth(Napi::Env) { + UNIMPLEMENTED(); +} + +interop::GPUIntegerCoordinate GPUTexture::getHeight(Napi::Env) { + UNIMPLEMENTED(); +} + +interop::GPUIntegerCoordinate GPUTexture::getDepthOrArrayLayers(Napi::Env) { + UNIMPLEMENTED(); +} + +interop::GPUIntegerCoordinate GPUTexture::getMipLevelCount(Napi::Env) { + UNIMPLEMENTED(); +} + +interop::GPUSize32 GPUTexture::getSampleCount(Napi::Env) { + UNIMPLEMENTED(); +} + +interop::GPUTextureDimension GPUTexture::getDimension(Napi::Env) { + UNIMPLEMENTED(); +} + +interop::GPUTextureFormat GPUTexture::getFormat(Napi::Env) { + UNIMPLEMENTED(); +} + +interop::GPUTextureUsageFlags GPUTexture::getUsage(Napi::Env) { + UNIMPLEMENTED(); +} + std::string GPUTexture::getLabel(Napi::Env) { UNIMPLEMENTED(); }
diff --git a/src/dawn/node/binding/GPUTexture.h b/src/dawn/node/binding/GPUTexture.h index edc96d1..e108d78 100644 --- a/src/dawn/node/binding/GPUTexture.h +++ b/src/dawn/node/binding/GPUTexture.h
@@ -37,6 +37,14 @@ Napi::Env, interop::GPUTextureViewDescriptor descriptor) override; void destroy(Napi::Env) override; + interop::GPUIntegerCoordinate getWidth(Napi::Env) override; + interop::GPUIntegerCoordinate getHeight(Napi::Env) override; + interop::GPUIntegerCoordinate getDepthOrArrayLayers(Napi::Env) override; + interop::GPUIntegerCoordinate getMipLevelCount(Napi::Env) override; + interop::GPUSize32 getSampleCount(Napi::Env) override; + interop::GPUTextureDimension getDimension(Napi::Env) override; + interop::GPUTextureFormat getFormat(Napi::Env) override; + interop::GPUTextureUsageFlags getUsage(Napi::Env) override; std::string getLabel(Napi::Env) override; void setLabel(Napi::Env, std::string value) override;
diff --git a/src/dawn/node/interop/Browser.idl b/src/dawn/node/interop/Browser.idl index b36c667..44638f6 100644 --- a/src/dawn/node/interop/Browser.idl +++ b/src/dawn/node/interop/Browser.idl
@@ -86,3 +86,5 @@ }; [LegacyNoInterfaceObject] interface EventHandler{}; + +enum PredefinedColorSpace { "srgb", "display-p3" };