mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-05-15 03:41:34 +00:00
wgpu::TextureFormat::Depth24UnormStencil8 was removed in https://dawn-review.googlesource.com/c/dawn/+/93421 Bug: dawn:1459 Change-Id: I57454df19b4cc5b901aaace64c54f2930ddd25b2 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/93781 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Ben Clayton <bclayton@chromium.org>
1556 lines
61 KiB
C++
1556 lines
61 KiB
C++
// Copyright 2021 The Dawn Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "src/dawn/node/binding/Converter.h"
|
|
|
|
#include "src/dawn/node/binding/GPUBuffer.h"
|
|
#include "src/dawn/node/binding/GPUPipelineLayout.h"
|
|
#include "src/dawn/node/binding/GPUSampler.h"
|
|
#include "src/dawn/node/binding/GPUShaderModule.h"
|
|
#include "src/dawn/node/binding/GPUTexture.h"
|
|
#include "src/dawn/node/binding/GPUTextureView.h"
|
|
#include "src/dawn/node/utils/Debug.h"
|
|
|
|
namespace wgpu::binding {
|
|
|
|
Converter::~Converter() {
|
|
for (auto& free : free_) {
|
|
free();
|
|
}
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::Extent3D& out, const interop::GPUExtent3D& in) {
|
|
out = {};
|
|
if (auto* dict = std::get_if<interop::GPUExtent3DDict>(&in)) {
|
|
out.depthOrArrayLayers = dict->depthOrArrayLayers;
|
|
out.width = dict->width;
|
|
out.height = dict->height;
|
|
return true;
|
|
}
|
|
if (auto* vec = std::get_if<std::vector<interop::GPUIntegerCoordinate>>(&in)) {
|
|
switch (vec->size()) {
|
|
default:
|
|
case 3:
|
|
out.depthOrArrayLayers = (*vec)[2];
|
|
case 2: // fallthrough
|
|
out.height = (*vec)[1];
|
|
case 1: // fallthrough
|
|
out.width = (*vec)[0];
|
|
return true;
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUExtent3D").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::Origin3D& out, const interop::GPUOrigin3DDict& in) {
|
|
out = {};
|
|
out.x = in.x;
|
|
out.y = in.y;
|
|
out.z = in.z;
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::Color& out, const interop::GPUColor& in) {
|
|
out = {};
|
|
if (auto* dict = std::get_if<interop::GPUColorDict>(&in)) {
|
|
out.r = dict->r;
|
|
out.g = dict->g;
|
|
out.b = dict->b;
|
|
out.a = dict->a;
|
|
return true;
|
|
}
|
|
if (auto* vec = std::get_if<std::vector<double>>(&in)) {
|
|
switch (vec->size()) {
|
|
default:
|
|
case 4:
|
|
out.a = (*vec)[3];
|
|
case 3: // fallthrough
|
|
out.b = (*vec)[2];
|
|
case 2: // fallthrough
|
|
out.g = (*vec)[1];
|
|
case 1: // fallthrough
|
|
out.r = (*vec)[0];
|
|
return true;
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUColor").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::Origin3D& out, const std::vector<interop::GPUIntegerCoordinate>& in) {
|
|
out = {};
|
|
switch (in.size()) {
|
|
default:
|
|
case 3:
|
|
out.z = in[2];
|
|
case 2: // fallthrough
|
|
out.y = in[1];
|
|
case 1: // fallthrough
|
|
out.x = in[0];
|
|
case 0:
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::TextureAspect& out, const interop::GPUTextureAspect& in) {
|
|
out = wgpu::TextureAspect::All;
|
|
switch (in) {
|
|
case interop::GPUTextureAspect::kAll:
|
|
out = wgpu::TextureAspect::All;
|
|
return true;
|
|
case interop::GPUTextureAspect::kStencilOnly:
|
|
out = wgpu::TextureAspect::StencilOnly;
|
|
return true;
|
|
case interop::GPUTextureAspect::kDepthOnly:
|
|
out = wgpu::TextureAspect::DepthOnly;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUTextureAspect").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::ImageCopyTexture& out, const interop::GPUImageCopyTexture& in) {
|
|
out = {};
|
|
return Convert(out.texture, in.texture) && Convert(out.mipLevel, in.mipLevel) &&
|
|
Convert(out.origin, in.origin) && Convert(out.aspect, in.aspect);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::ImageCopyBuffer& out, const interop::GPUImageCopyBuffer& in) {
|
|
out = {};
|
|
out.buffer = *in.buffer.As<GPUBuffer>();
|
|
return Convert(out.layout.offset, in.offset) &&
|
|
Convert(out.layout.bytesPerRow, in.bytesPerRow) &&
|
|
Convert(out.layout.rowsPerImage, in.rowsPerImage);
|
|
}
|
|
|
|
bool Converter::Convert(BufferSource& out, interop::BufferSource in) {
|
|
out = {};
|
|
if (auto* view = std::get_if<interop::ArrayBufferView>(&in)) {
|
|
std::visit(
|
|
[&](auto&& v) {
|
|
auto arr = v.ArrayBuffer();
|
|
out.data = arr.Data();
|
|
out.size = arr.ByteLength();
|
|
out.bytesPerElement = v.ElementSize();
|
|
},
|
|
*view);
|
|
return true;
|
|
}
|
|
if (auto* arr = std::get_if<interop::ArrayBuffer>(&in)) {
|
|
out.data = arr->Data();
|
|
out.size = arr->ByteLength();
|
|
out.bytesPerElement = 1;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for BufferSource").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::TextureDataLayout& out, const interop::GPUImageDataLayout& in) {
|
|
out = {};
|
|
return Convert(out.bytesPerRow, in.bytesPerRow) && Convert(out.offset, in.offset) &&
|
|
Convert(out.rowsPerImage, in.rowsPerImage);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::TextureFormat& out, const interop::GPUTextureFormat& in) {
|
|
out = wgpu::TextureFormat::Undefined;
|
|
switch (in) {
|
|
case interop::GPUTextureFormat::kR8Unorm:
|
|
out = wgpu::TextureFormat::R8Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kR8Snorm:
|
|
out = wgpu::TextureFormat::R8Snorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kR8Uint:
|
|
out = wgpu::TextureFormat::R8Uint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kR8Sint:
|
|
out = wgpu::TextureFormat::R8Sint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kR16Uint:
|
|
out = wgpu::TextureFormat::R16Uint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kR16Sint:
|
|
out = wgpu::TextureFormat::R16Sint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kR16Float:
|
|
out = wgpu::TextureFormat::R16Float;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg8Unorm:
|
|
out = wgpu::TextureFormat::RG8Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg8Snorm:
|
|
out = wgpu::TextureFormat::RG8Snorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg8Uint:
|
|
out = wgpu::TextureFormat::RG8Uint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg8Sint:
|
|
out = wgpu::TextureFormat::RG8Sint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kR32Uint:
|
|
out = wgpu::TextureFormat::R32Uint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kR32Sint:
|
|
out = wgpu::TextureFormat::R32Sint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kR32Float:
|
|
out = wgpu::TextureFormat::R32Float;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg16Uint:
|
|
out = wgpu::TextureFormat::RG16Uint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg16Sint:
|
|
out = wgpu::TextureFormat::RG16Sint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg16Float:
|
|
out = wgpu::TextureFormat::RG16Float;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba8Unorm:
|
|
out = wgpu::TextureFormat::RGBA8Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba8UnormSrgb:
|
|
out = wgpu::TextureFormat::RGBA8UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba8Snorm:
|
|
out = wgpu::TextureFormat::RGBA8Snorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba8Uint:
|
|
out = wgpu::TextureFormat::RGBA8Uint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba8Sint:
|
|
out = wgpu::TextureFormat::RGBA8Sint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBgra8Unorm:
|
|
out = wgpu::TextureFormat::BGRA8Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBgra8UnormSrgb:
|
|
out = wgpu::TextureFormat::BGRA8UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgb9E5Ufloat:
|
|
out = wgpu::TextureFormat::RGB9E5Ufloat;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgb10A2Unorm:
|
|
out = wgpu::TextureFormat::RGB10A2Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg11B10Ufloat:
|
|
out = wgpu::TextureFormat::RG11B10Ufloat;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg32Uint:
|
|
out = wgpu::TextureFormat::RG32Uint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg32Sint:
|
|
out = wgpu::TextureFormat::RG32Sint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRg32Float:
|
|
out = wgpu::TextureFormat::RG32Float;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba16Uint:
|
|
out = wgpu::TextureFormat::RGBA16Uint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba16Sint:
|
|
out = wgpu::TextureFormat::RGBA16Sint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba16Float:
|
|
out = wgpu::TextureFormat::RGBA16Float;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba32Uint:
|
|
out = wgpu::TextureFormat::RGBA32Uint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba32Sint:
|
|
out = wgpu::TextureFormat::RGBA32Sint;
|
|
return true;
|
|
case interop::GPUTextureFormat::kRgba32Float:
|
|
out = wgpu::TextureFormat::RGBA32Float;
|
|
return true;
|
|
case interop::GPUTextureFormat::kStencil8:
|
|
out = wgpu::TextureFormat::Stencil8;
|
|
return true;
|
|
case interop::GPUTextureFormat::kDepth16Unorm:
|
|
out = wgpu::TextureFormat::Depth16Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kDepth24Plus:
|
|
out = wgpu::TextureFormat::Depth24Plus;
|
|
return true;
|
|
case interop::GPUTextureFormat::kDepth24PlusStencil8:
|
|
out = wgpu::TextureFormat::Depth24PlusStencil8;
|
|
return true;
|
|
case interop::GPUTextureFormat::kDepth32Float:
|
|
out = wgpu::TextureFormat::Depth32Float;
|
|
return true;
|
|
case interop::GPUTextureFormat::kDepth32FloatStencil8:
|
|
out = wgpu::TextureFormat::Depth32FloatStencil8;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc1RgbaUnorm:
|
|
out = wgpu::TextureFormat::BC1RGBAUnorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc1RgbaUnormSrgb:
|
|
out = wgpu::TextureFormat::BC1RGBAUnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc2RgbaUnorm:
|
|
out = wgpu::TextureFormat::BC2RGBAUnorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc2RgbaUnormSrgb:
|
|
out = wgpu::TextureFormat::BC2RGBAUnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc3RgbaUnorm:
|
|
out = wgpu::TextureFormat::BC3RGBAUnorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc3RgbaUnormSrgb:
|
|
out = wgpu::TextureFormat::BC3RGBAUnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc4RUnorm:
|
|
out = wgpu::TextureFormat::BC4RUnorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc4RSnorm:
|
|
out = wgpu::TextureFormat::BC4RSnorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc5RgUnorm:
|
|
out = wgpu::TextureFormat::BC5RGUnorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc5RgSnorm:
|
|
out = wgpu::TextureFormat::BC5RGSnorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc6HRgbUfloat:
|
|
out = wgpu::TextureFormat::BC6HRGBUfloat;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc6HRgbFloat:
|
|
out = wgpu::TextureFormat::BC6HRGBFloat;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc7RgbaUnorm:
|
|
out = wgpu::TextureFormat::BC7RGBAUnorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kBc7RgbaUnormSrgb:
|
|
out = wgpu::TextureFormat::BC7RGBAUnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEtc2Rgb8Unorm:
|
|
out = wgpu::TextureFormat::ETC2RGB8Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEtc2Rgb8UnormSrgb:
|
|
out = wgpu::TextureFormat::ETC2RGB8UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEtc2Rgb8A1Unorm:
|
|
out = wgpu::TextureFormat::ETC2RGB8A1Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEtc2Rgb8A1UnormSrgb:
|
|
out = wgpu::TextureFormat::ETC2RGB8A1UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEtc2Rgba8Unorm:
|
|
out = wgpu::TextureFormat::ETC2RGBA8Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEtc2Rgba8UnormSrgb:
|
|
out = wgpu::TextureFormat::ETC2RGBA8UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEacR11Unorm:
|
|
out = wgpu::TextureFormat::EACR11Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEacR11Snorm:
|
|
out = wgpu::TextureFormat::EACR11Snorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEacRg11Unorm:
|
|
out = wgpu::TextureFormat::EACRG11Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kEacRg11Snorm:
|
|
out = wgpu::TextureFormat::EACRG11Snorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc4X4Unorm:
|
|
out = wgpu::TextureFormat::ASTC4x4Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc4X4UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC4x4UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc5X4Unorm:
|
|
out = wgpu::TextureFormat::ASTC5x4Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc5X4UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC5x4UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc5X5Unorm:
|
|
out = wgpu::TextureFormat::ASTC5x5Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc5X5UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC5x5UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc6X5Unorm:
|
|
out = wgpu::TextureFormat::ASTC6x5Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc6X5UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC6x5UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc6X6Unorm:
|
|
out = wgpu::TextureFormat::ASTC6x6Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc6X6UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC6x6UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc8X5Unorm:
|
|
out = wgpu::TextureFormat::ASTC8x5Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc8X5UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC8x5UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc8X6Unorm:
|
|
out = wgpu::TextureFormat::ASTC8x6Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc8X6UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC8x6UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc8X8Unorm:
|
|
out = wgpu::TextureFormat::ASTC8x8Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc8X8UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC8x8UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc10X5Unorm:
|
|
out = wgpu::TextureFormat::ASTC10x5Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc10X5UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC10x5UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc10X6Unorm:
|
|
out = wgpu::TextureFormat::ASTC10x6Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc10X6UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC10x6UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc10X8Unorm:
|
|
out = wgpu::TextureFormat::ASTC10x8Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc10X8UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC10x8UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc10X10Unorm:
|
|
out = wgpu::TextureFormat::ASTC10x10Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc10X10UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC10x10UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc12X10Unorm:
|
|
out = wgpu::TextureFormat::ASTC12x10Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc12X10UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC12x10UnormSrgb;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc12X12Unorm:
|
|
out = wgpu::TextureFormat::ASTC12x12Unorm;
|
|
return true;
|
|
case interop::GPUTextureFormat::kAstc12X12UnormSrgb:
|
|
out = wgpu::TextureFormat::ASTC12x12UnormSrgb;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUTextureFormat").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(interop::GPUTextureFormat& out, wgpu::TextureFormat in) {
|
|
switch (in) {
|
|
case wgpu::TextureFormat::R8Unorm:
|
|
out = interop::GPUTextureFormat::kR8Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::R8Snorm:
|
|
out = interop::GPUTextureFormat::kR8Snorm;
|
|
return true;
|
|
case wgpu::TextureFormat::R8Uint:
|
|
out = interop::GPUTextureFormat::kR8Uint;
|
|
return true;
|
|
case wgpu::TextureFormat::R8Sint:
|
|
out = interop::GPUTextureFormat::kR8Sint;
|
|
return true;
|
|
case wgpu::TextureFormat::R16Uint:
|
|
out = interop::GPUTextureFormat::kR16Uint;
|
|
return true;
|
|
case wgpu::TextureFormat::R16Sint:
|
|
out = interop::GPUTextureFormat::kR16Sint;
|
|
return true;
|
|
case wgpu::TextureFormat::R16Float:
|
|
out = interop::GPUTextureFormat::kR16Float;
|
|
return true;
|
|
case wgpu::TextureFormat::RG8Unorm:
|
|
out = interop::GPUTextureFormat::kRg8Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::RG8Snorm:
|
|
out = interop::GPUTextureFormat::kRg8Snorm;
|
|
return true;
|
|
case wgpu::TextureFormat::RG8Uint:
|
|
out = interop::GPUTextureFormat::kRg8Uint;
|
|
return true;
|
|
case wgpu::TextureFormat::RG8Sint:
|
|
out = interop::GPUTextureFormat::kRg8Sint;
|
|
return true;
|
|
case wgpu::TextureFormat::R32Uint:
|
|
out = interop::GPUTextureFormat::kR32Uint;
|
|
return true;
|
|
case wgpu::TextureFormat::R32Sint:
|
|
out = interop::GPUTextureFormat::kR32Sint;
|
|
return true;
|
|
case wgpu::TextureFormat::R32Float:
|
|
out = interop::GPUTextureFormat::kR32Float;
|
|
return true;
|
|
case wgpu::TextureFormat::RG16Uint:
|
|
out = interop::GPUTextureFormat::kRg16Uint;
|
|
return true;
|
|
case wgpu::TextureFormat::RG16Sint:
|
|
out = interop::GPUTextureFormat::kRg16Sint;
|
|
return true;
|
|
case wgpu::TextureFormat::RG16Float:
|
|
out = interop::GPUTextureFormat::kRg16Float;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA8Unorm:
|
|
out = interop::GPUTextureFormat::kRgba8Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA8UnormSrgb:
|
|
out = interop::GPUTextureFormat::kRgba8UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA8Snorm:
|
|
out = interop::GPUTextureFormat::kRgba8Snorm;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA8Uint:
|
|
out = interop::GPUTextureFormat::kRgba8Uint;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA8Sint:
|
|
out = interop::GPUTextureFormat::kRgba8Sint;
|
|
return true;
|
|
case wgpu::TextureFormat::BGRA8Unorm:
|
|
out = interop::GPUTextureFormat::kBgra8Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::BGRA8UnormSrgb:
|
|
out = interop::GPUTextureFormat::kBgra8UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::RGB9E5Ufloat:
|
|
out = interop::GPUTextureFormat::kRgb9E5Ufloat;
|
|
return true;
|
|
case wgpu::TextureFormat::RGB10A2Unorm:
|
|
out = interop::GPUTextureFormat::kRgb10A2Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::RG11B10Ufloat:
|
|
out = interop::GPUTextureFormat::kRg11B10Ufloat;
|
|
return true;
|
|
case wgpu::TextureFormat::RG32Uint:
|
|
out = interop::GPUTextureFormat::kRg32Uint;
|
|
return true;
|
|
case wgpu::TextureFormat::RG32Sint:
|
|
out = interop::GPUTextureFormat::kRg32Sint;
|
|
return true;
|
|
case wgpu::TextureFormat::RG32Float:
|
|
out = interop::GPUTextureFormat::kRg32Float;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA16Uint:
|
|
out = interop::GPUTextureFormat::kRgba16Uint;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA16Sint:
|
|
out = interop::GPUTextureFormat::kRgba16Sint;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA16Float:
|
|
out = interop::GPUTextureFormat::kRgba16Float;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA32Uint:
|
|
out = interop::GPUTextureFormat::kRgba32Uint;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA32Sint:
|
|
out = interop::GPUTextureFormat::kRgba32Sint;
|
|
return true;
|
|
case wgpu::TextureFormat::RGBA32Float:
|
|
out = interop::GPUTextureFormat::kRgba32Float;
|
|
return true;
|
|
case wgpu::TextureFormat::Stencil8:
|
|
out = interop::GPUTextureFormat::kStencil8;
|
|
return true;
|
|
case wgpu::TextureFormat::Depth16Unorm:
|
|
out = interop::GPUTextureFormat::kDepth16Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::Depth24Plus:
|
|
out = interop::GPUTextureFormat::kDepth24Plus;
|
|
return true;
|
|
case wgpu::TextureFormat::Depth24PlusStencil8:
|
|
out = interop::GPUTextureFormat::kDepth24PlusStencil8;
|
|
return true;
|
|
case wgpu::TextureFormat::Depth32Float:
|
|
out = interop::GPUTextureFormat::kDepth32Float;
|
|
return true;
|
|
case wgpu::TextureFormat::Depth32FloatStencil8:
|
|
out = interop::GPUTextureFormat::kDepth32FloatStencil8;
|
|
return true;
|
|
case wgpu::TextureFormat::BC1RGBAUnorm:
|
|
out = interop::GPUTextureFormat::kBc1RgbaUnorm;
|
|
return true;
|
|
case wgpu::TextureFormat::BC1RGBAUnormSrgb:
|
|
out = interop::GPUTextureFormat::kBc1RgbaUnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::BC2RGBAUnorm:
|
|
out = interop::GPUTextureFormat::kBc2RgbaUnorm;
|
|
return true;
|
|
case wgpu::TextureFormat::BC2RGBAUnormSrgb:
|
|
out = interop::GPUTextureFormat::kBc2RgbaUnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::BC3RGBAUnorm:
|
|
out = interop::GPUTextureFormat::kBc3RgbaUnorm;
|
|
return true;
|
|
case wgpu::TextureFormat::BC3RGBAUnormSrgb:
|
|
out = interop::GPUTextureFormat::kBc3RgbaUnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::BC4RUnorm:
|
|
out = interop::GPUTextureFormat::kBc4RUnorm;
|
|
return true;
|
|
case wgpu::TextureFormat::BC4RSnorm:
|
|
out = interop::GPUTextureFormat::kBc4RSnorm;
|
|
return true;
|
|
case wgpu::TextureFormat::BC5RGUnorm:
|
|
out = interop::GPUTextureFormat::kBc5RgUnorm;
|
|
return true;
|
|
case wgpu::TextureFormat::BC5RGSnorm:
|
|
out = interop::GPUTextureFormat::kBc5RgSnorm;
|
|
return true;
|
|
case wgpu::TextureFormat::BC6HRGBUfloat:
|
|
out = interop::GPUTextureFormat::kBc6HRgbUfloat;
|
|
return true;
|
|
case wgpu::TextureFormat::BC6HRGBFloat:
|
|
out = interop::GPUTextureFormat::kBc6HRgbFloat;
|
|
return true;
|
|
case wgpu::TextureFormat::BC7RGBAUnorm:
|
|
out = interop::GPUTextureFormat::kBc7RgbaUnorm;
|
|
return true;
|
|
case wgpu::TextureFormat::BC7RGBAUnormSrgb:
|
|
out = interop::GPUTextureFormat::kBc7RgbaUnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ETC2RGB8Unorm:
|
|
out = interop::GPUTextureFormat::kEtc2Rgb8Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ETC2RGB8UnormSrgb:
|
|
out = interop::GPUTextureFormat::kEtc2Rgb8UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ETC2RGB8A1Unorm:
|
|
out = interop::GPUTextureFormat::kEtc2Rgb8A1Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ETC2RGB8A1UnormSrgb:
|
|
out = interop::GPUTextureFormat::kEtc2Rgb8A1UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ETC2RGBA8Unorm:
|
|
out = interop::GPUTextureFormat::kEtc2Rgba8Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ETC2RGBA8UnormSrgb:
|
|
out = interop::GPUTextureFormat::kEtc2Rgba8UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::EACR11Unorm:
|
|
out = interop::GPUTextureFormat::kEacR11Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::EACR11Snorm:
|
|
out = interop::GPUTextureFormat::kEacR11Snorm;
|
|
return true;
|
|
case wgpu::TextureFormat::EACRG11Unorm:
|
|
out = interop::GPUTextureFormat::kEacRg11Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::EACRG11Snorm:
|
|
out = interop::GPUTextureFormat::kEacRg11Snorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC4x4Unorm:
|
|
out = interop::GPUTextureFormat::kAstc4X4Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC4x4UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc4X4UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC5x4Unorm:
|
|
out = interop::GPUTextureFormat::kAstc5X4Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC5x4UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc5X4UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC5x5Unorm:
|
|
out = interop::GPUTextureFormat::kAstc5X5Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC5x5UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc5X5UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC6x5Unorm:
|
|
out = interop::GPUTextureFormat::kAstc6X5Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC6x5UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc6X5UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC6x6Unorm:
|
|
out = interop::GPUTextureFormat::kAstc6X6Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC6x6UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc6X6UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC8x5Unorm:
|
|
out = interop::GPUTextureFormat::kAstc8X5Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC8x5UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc8X5UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC8x6Unorm:
|
|
out = interop::GPUTextureFormat::kAstc8X6Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC8x6UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc8X6UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC8x8Unorm:
|
|
out = interop::GPUTextureFormat::kAstc8X8Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC8x8UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc8X8UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC10x5Unorm:
|
|
out = interop::GPUTextureFormat::kAstc10X5Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC10x5UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc10X5UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC10x6Unorm:
|
|
out = interop::GPUTextureFormat::kAstc10X6Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC10x6UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc10X6UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC10x8Unorm:
|
|
out = interop::GPUTextureFormat::kAstc10X8Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC10x8UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc10X8UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC10x10Unorm:
|
|
out = interop::GPUTextureFormat::kAstc10X10Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC10x10UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc10X10UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC12x10Unorm:
|
|
out = interop::GPUTextureFormat::kAstc12X10Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC12x10UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc12X10UnormSrgb;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC12x12Unorm:
|
|
out = interop::GPUTextureFormat::kAstc12X12Unorm;
|
|
return true;
|
|
case wgpu::TextureFormat::ASTC12x12UnormSrgb:
|
|
out = interop::GPUTextureFormat::kAstc12X12UnormSrgb;
|
|
return true;
|
|
|
|
case wgpu::TextureFormat::Undefined:
|
|
case wgpu::TextureFormat::R8BG8Biplanar420Unorm:
|
|
return false;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::TextureUsage& out, const interop::GPUTextureUsageFlags& in) {
|
|
out = static_cast<wgpu::TextureUsage>(in.value);
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(interop::GPUTextureUsageFlags& out, wgpu::TextureUsage in) {
|
|
out = interop::GPUTextureUsageFlags(static_cast<uint32_t>(out));
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::ColorWriteMask& out, const interop::GPUColorWriteFlags& in) {
|
|
out = static_cast<wgpu::ColorWriteMask>(in.value);
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::BufferUsage& out, const interop::GPUBufferUsageFlags& in) {
|
|
out = static_cast<wgpu::BufferUsage>(in.value);
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(interop::GPUBufferUsageFlags& out, wgpu::BufferUsage in) {
|
|
out = interop::GPUBufferUsageFlags(static_cast<uint32_t>(out));
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::MapMode& out, const interop::GPUMapModeFlags& in) {
|
|
out = static_cast<wgpu::MapMode>(in.value);
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::ShaderStage& out, const interop::GPUShaderStageFlags& in) {
|
|
out = static_cast<wgpu::ShaderStage>(in.value);
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::TextureDimension& out, const interop::GPUTextureDimension& in) {
|
|
out = wgpu::TextureDimension::e1D;
|
|
switch (in) {
|
|
case interop::GPUTextureDimension::k1D:
|
|
out = wgpu::TextureDimension::e1D;
|
|
return true;
|
|
case interop::GPUTextureDimension::k2D:
|
|
out = wgpu::TextureDimension::e2D;
|
|
return true;
|
|
case interop::GPUTextureDimension::k3D:
|
|
out = wgpu::TextureDimension::e3D;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUTextureDimension").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(interop::GPUTextureDimension& out, wgpu::TextureDimension in) {
|
|
switch (in) {
|
|
case wgpu::TextureDimension::e1D:
|
|
out = interop::GPUTextureDimension::k1D;
|
|
return true;
|
|
case wgpu::TextureDimension::e2D:
|
|
out = interop::GPUTextureDimension::k2D;
|
|
return true;
|
|
case wgpu::TextureDimension::e3D:
|
|
out = interop::GPUTextureDimension::k3D;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::TextureViewDimension& out,
|
|
const interop::GPUTextureViewDimension& in) {
|
|
out = wgpu::TextureViewDimension::Undefined;
|
|
switch (in) {
|
|
case interop::GPUTextureViewDimension::k1D:
|
|
out = wgpu::TextureViewDimension::e1D;
|
|
return true;
|
|
case interop::GPUTextureViewDimension::k2D:
|
|
out = wgpu::TextureViewDimension::e2D;
|
|
return true;
|
|
case interop::GPUTextureViewDimension::k2DArray:
|
|
out = wgpu::TextureViewDimension::e2DArray;
|
|
return true;
|
|
case interop::GPUTextureViewDimension::kCube:
|
|
out = wgpu::TextureViewDimension::Cube;
|
|
return true;
|
|
case interop::GPUTextureViewDimension::kCubeArray:
|
|
out = wgpu::TextureViewDimension::CubeArray;
|
|
return true;
|
|
case interop::GPUTextureViewDimension::k3D:
|
|
out = wgpu::TextureViewDimension::e3D;
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUTextureViewDimension").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::ProgrammableStageDescriptor& out,
|
|
const interop::GPUProgrammableStage& in) {
|
|
out = {};
|
|
out.module = *in.module.As<GPUShaderModule>();
|
|
|
|
// Replace nulls in the entryPoint name with another character that's disallowed in
|
|
// identifiers. This is so that using "main\0" doesn't match an entryPoint named "main".
|
|
// TODO(dawn:1345): Replace with a way to size strings explicitly in webgpu.h
|
|
char* entryPoint = Allocate<char>(in.entryPoint.size() + 1);
|
|
entryPoint[in.entryPoint.size()] = '\0';
|
|
for (size_t i = 0; i < in.entryPoint.size(); i++) {
|
|
if (in.entryPoint[i] == '\0') {
|
|
entryPoint[i] = '#';
|
|
} else {
|
|
entryPoint[i] = in.entryPoint[i];
|
|
}
|
|
}
|
|
out.entryPoint = entryPoint;
|
|
|
|
return Convert(out.constants, out.constantCount, in.constants);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::ConstantEntry& out,
|
|
const std::string& in_name,
|
|
wgpu::interop::GPUPipelineConstantValue in_value) {
|
|
out.key = in_name.c_str();
|
|
out.value = in_value;
|
|
return true;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::BlendComponent& out, const interop::GPUBlendComponent& in) {
|
|
out = {};
|
|
return Convert(out.operation, in.operation) && Convert(out.dstFactor, in.dstFactor) &&
|
|
Convert(out.srcFactor, in.srcFactor);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::BlendFactor& out, const interop::GPUBlendFactor& in) {
|
|
out = wgpu::BlendFactor::Zero;
|
|
switch (in) {
|
|
case interop::GPUBlendFactor::kZero:
|
|
out = wgpu::BlendFactor::Zero;
|
|
return true;
|
|
case interop::GPUBlendFactor::kOne:
|
|
out = wgpu::BlendFactor::One;
|
|
return true;
|
|
case interop::GPUBlendFactor::kSrc:
|
|
out = wgpu::BlendFactor::Src;
|
|
return true;
|
|
case interop::GPUBlendFactor::kOneMinusSrc:
|
|
out = wgpu::BlendFactor::OneMinusSrc;
|
|
return true;
|
|
case interop::GPUBlendFactor::kSrcAlpha:
|
|
out = wgpu::BlendFactor::SrcAlpha;
|
|
return true;
|
|
case interop::GPUBlendFactor::kOneMinusSrcAlpha:
|
|
out = wgpu::BlendFactor::OneMinusSrcAlpha;
|
|
return true;
|
|
case interop::GPUBlendFactor::kDst:
|
|
out = wgpu::BlendFactor::Dst;
|
|
return true;
|
|
case interop::GPUBlendFactor::kOneMinusDst:
|
|
out = wgpu::BlendFactor::OneMinusDst;
|
|
return true;
|
|
case interop::GPUBlendFactor::kDstAlpha:
|
|
out = wgpu::BlendFactor::DstAlpha;
|
|
return true;
|
|
case interop::GPUBlendFactor::kOneMinusDstAlpha:
|
|
out = wgpu::BlendFactor::OneMinusDstAlpha;
|
|
return true;
|
|
case interop::GPUBlendFactor::kSrcAlphaSaturated:
|
|
out = wgpu::BlendFactor::SrcAlphaSaturated;
|
|
return true;
|
|
case interop::GPUBlendFactor::kConstant:
|
|
out = wgpu::BlendFactor::Constant;
|
|
return true;
|
|
case interop::GPUBlendFactor::kOneMinusConstant:
|
|
out = wgpu::BlendFactor::OneMinusConstant;
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUBlendFactor").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::BlendOperation& out, const interop::GPUBlendOperation& in) {
|
|
out = wgpu::BlendOperation::Add;
|
|
switch (in) {
|
|
case interop::GPUBlendOperation::kAdd:
|
|
out = wgpu::BlendOperation::Add;
|
|
return true;
|
|
case interop::GPUBlendOperation::kSubtract:
|
|
out = wgpu::BlendOperation::Subtract;
|
|
return true;
|
|
case interop::GPUBlendOperation::kReverseSubtract:
|
|
out = wgpu::BlendOperation::ReverseSubtract;
|
|
return true;
|
|
case interop::GPUBlendOperation::kMin:
|
|
out = wgpu::BlendOperation::Min;
|
|
return true;
|
|
case interop::GPUBlendOperation::kMax:
|
|
out = wgpu::BlendOperation::Max;
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUBlendOperation").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::BlendState& out, const interop::GPUBlendState& in) {
|
|
out = {};
|
|
return Convert(out.alpha, in.alpha) && Convert(out.color, in.color);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::PrimitiveState& out, const interop::GPUPrimitiveState& in) {
|
|
out = {};
|
|
return Convert(out.topology, in.topology) &&
|
|
Convert(out.stripIndexFormat, in.stripIndexFormat) &&
|
|
Convert(out.frontFace, in.frontFace) && Convert(out.cullMode, in.cullMode);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::ColorTargetState& out, const interop::GPUColorTargetState& in) {
|
|
out = {};
|
|
return Convert(out.format, in.format) && Convert(out.blend, in.blend) &&
|
|
Convert(out.writeMask, in.writeMask);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::DepthStencilState& out, const interop::GPUDepthStencilState& in) {
|
|
out = {};
|
|
return Convert(out.format, in.format) && Convert(out.depthWriteEnabled, in.depthWriteEnabled) &&
|
|
Convert(out.depthCompare, in.depthCompare) &&
|
|
Convert(out.stencilFront, in.stencilFront) && Convert(out.stencilBack, in.stencilBack) &&
|
|
Convert(out.stencilReadMask, in.stencilReadMask) &&
|
|
Convert(out.stencilWriteMask, in.stencilWriteMask) &&
|
|
Convert(out.depthBias, in.depthBias) &&
|
|
Convert(out.depthBiasSlopeScale, in.depthBiasSlopeScale) &&
|
|
Convert(out.depthBiasClamp, in.depthBiasClamp);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::MultisampleState& out, const interop::GPUMultisampleState& in) {
|
|
out = {};
|
|
return Convert(out.count, in.count) && Convert(out.mask, in.mask) &&
|
|
Convert(out.alphaToCoverageEnabled, in.alphaToCoverageEnabled);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::FragmentState& out, const interop::GPUFragmentState& in) {
|
|
out = {};
|
|
return Convert(out.targets, out.targetCount, in.targets) && //
|
|
Convert(out.module, in.module) && //
|
|
Convert(out.entryPoint, in.entryPoint) && //
|
|
Convert(out.constants, out.constantCount, in.constants);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::PrimitiveTopology& out, const interop::GPUPrimitiveTopology& in) {
|
|
out = wgpu::PrimitiveTopology::LineList;
|
|
switch (in) {
|
|
case interop::GPUPrimitiveTopology::kPointList:
|
|
out = wgpu::PrimitiveTopology::PointList;
|
|
return true;
|
|
case interop::GPUPrimitiveTopology::kLineList:
|
|
out = wgpu::PrimitiveTopology::LineList;
|
|
return true;
|
|
case interop::GPUPrimitiveTopology::kLineStrip:
|
|
out = wgpu::PrimitiveTopology::LineStrip;
|
|
return true;
|
|
case interop::GPUPrimitiveTopology::kTriangleList:
|
|
out = wgpu::PrimitiveTopology::TriangleList;
|
|
return true;
|
|
case interop::GPUPrimitiveTopology::kTriangleStrip:
|
|
out = wgpu::PrimitiveTopology::TriangleStrip;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUPrimitiveTopology").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::FrontFace& out, const interop::GPUFrontFace& in) {
|
|
out = wgpu::FrontFace::CW;
|
|
switch (in) {
|
|
case interop::GPUFrontFace::kCw:
|
|
out = wgpu::FrontFace::CW;
|
|
return true;
|
|
case interop::GPUFrontFace::kCcw:
|
|
out = wgpu::FrontFace::CCW;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUFrontFace").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::CullMode& out, const interop::GPUCullMode& in) {
|
|
out = wgpu::CullMode::None;
|
|
switch (in) {
|
|
case interop::GPUCullMode::kNone:
|
|
out = wgpu::CullMode::None;
|
|
return true;
|
|
case interop::GPUCullMode::kFront:
|
|
out = wgpu::CullMode::Front;
|
|
return true;
|
|
case interop::GPUCullMode::kBack:
|
|
out = wgpu::CullMode::Back;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUCullMode").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::CompareFunction& out, const interop::GPUCompareFunction& in) {
|
|
out = wgpu::CompareFunction::Undefined;
|
|
switch (in) {
|
|
case interop::GPUCompareFunction::kNever:
|
|
out = wgpu::CompareFunction::Never;
|
|
return true;
|
|
case interop::GPUCompareFunction::kLess:
|
|
out = wgpu::CompareFunction::Less;
|
|
return true;
|
|
case interop::GPUCompareFunction::kLessEqual:
|
|
out = wgpu::CompareFunction::LessEqual;
|
|
return true;
|
|
case interop::GPUCompareFunction::kGreater:
|
|
out = wgpu::CompareFunction::Greater;
|
|
return true;
|
|
case interop::GPUCompareFunction::kGreaterEqual:
|
|
out = wgpu::CompareFunction::GreaterEqual;
|
|
return true;
|
|
case interop::GPUCompareFunction::kEqual:
|
|
out = wgpu::CompareFunction::Equal;
|
|
return true;
|
|
case interop::GPUCompareFunction::kNotEqual:
|
|
out = wgpu::CompareFunction::NotEqual;
|
|
return true;
|
|
case interop::GPUCompareFunction::kAlways:
|
|
out = wgpu::CompareFunction::Always;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUCompareFunction").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::IndexFormat& out, const interop::GPUIndexFormat& in) {
|
|
out = wgpu::IndexFormat::Undefined;
|
|
switch (in) {
|
|
case interop::GPUIndexFormat::kUint16:
|
|
out = wgpu::IndexFormat::Uint16;
|
|
return true;
|
|
case interop::GPUIndexFormat::kUint32:
|
|
out = wgpu::IndexFormat::Uint32;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUIndexFormat").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::StencilOperation& out, const interop::GPUStencilOperation& in) {
|
|
out = wgpu::StencilOperation::Zero;
|
|
switch (in) {
|
|
case interop::GPUStencilOperation::kKeep:
|
|
out = wgpu::StencilOperation::Keep;
|
|
return true;
|
|
case interop::GPUStencilOperation::kZero:
|
|
out = wgpu::StencilOperation::Zero;
|
|
return true;
|
|
case interop::GPUStencilOperation::kReplace:
|
|
out = wgpu::StencilOperation::Replace;
|
|
return true;
|
|
case interop::GPUStencilOperation::kInvert:
|
|
out = wgpu::StencilOperation::Invert;
|
|
return true;
|
|
case interop::GPUStencilOperation::kIncrementClamp:
|
|
out = wgpu::StencilOperation::IncrementClamp;
|
|
return true;
|
|
case interop::GPUStencilOperation::kDecrementClamp:
|
|
out = wgpu::StencilOperation::DecrementClamp;
|
|
return true;
|
|
case interop::GPUStencilOperation::kIncrementWrap:
|
|
out = wgpu::StencilOperation::IncrementWrap;
|
|
return true;
|
|
case interop::GPUStencilOperation::kDecrementWrap:
|
|
out = wgpu::StencilOperation::DecrementWrap;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUStencilOperation").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::StencilFaceState& out, const interop::GPUStencilFaceState& in) {
|
|
return Convert(out.compare, in.compare) && Convert(out.failOp, in.failOp) &&
|
|
Convert(out.depthFailOp, in.depthFailOp) && Convert(out.passOp, in.passOp);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::VertexBufferLayout& out, const interop::GPUVertexBufferLayout& in) {
|
|
out = {};
|
|
return Convert(out.attributes, out.attributeCount, in.attributes) &&
|
|
Convert(out.arrayStride, in.arrayStride) && Convert(out.stepMode, in.stepMode);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::VertexState& out, const interop::GPUVertexState& in) {
|
|
out = {};
|
|
return Convert(out.module, in.module) && Convert(out.buffers, out.bufferCount, in.buffers) &&
|
|
Convert(out.entryPoint, in.entryPoint) &&
|
|
Convert(out.constants, out.constantCount, in.constants);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::VertexStepMode& out, const interop::GPUVertexStepMode& in) {
|
|
out = wgpu::VertexStepMode::Instance;
|
|
switch (in) {
|
|
case interop::GPUVertexStepMode::kInstance:
|
|
out = wgpu::VertexStepMode::Instance;
|
|
return true;
|
|
case interop::GPUVertexStepMode::kVertex:
|
|
out = wgpu::VertexStepMode::Vertex;
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUVertexStepMode").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::VertexAttribute& out, const interop::GPUVertexAttribute& in) {
|
|
return Convert(out.format, in.format) && Convert(out.offset, in.offset) &&
|
|
Convert(out.shaderLocation, in.shaderLocation);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::VertexFormat& out, const interop::GPUVertexFormat& in) {
|
|
out = wgpu::VertexFormat::Undefined;
|
|
switch (in) {
|
|
case interop::GPUVertexFormat::kUint8X2:
|
|
out = wgpu::VertexFormat::Uint8x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUint8X4:
|
|
out = wgpu::VertexFormat::Uint8x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSint8X2:
|
|
out = wgpu::VertexFormat::Sint8x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSint8X4:
|
|
out = wgpu::VertexFormat::Sint8x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUnorm8X2:
|
|
out = wgpu::VertexFormat::Unorm8x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUnorm8X4:
|
|
out = wgpu::VertexFormat::Unorm8x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSnorm8X2:
|
|
out = wgpu::VertexFormat::Snorm8x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSnorm8X4:
|
|
out = wgpu::VertexFormat::Snorm8x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUint16X2:
|
|
out = wgpu::VertexFormat::Uint16x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUint16X4:
|
|
out = wgpu::VertexFormat::Uint16x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSint16X2:
|
|
out = wgpu::VertexFormat::Sint16x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSint16X4:
|
|
out = wgpu::VertexFormat::Sint16x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUnorm16X2:
|
|
out = wgpu::VertexFormat::Unorm16x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUnorm16X4:
|
|
out = wgpu::VertexFormat::Unorm16x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSnorm16X2:
|
|
out = wgpu::VertexFormat::Snorm16x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSnorm16X4:
|
|
out = wgpu::VertexFormat::Snorm16x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kFloat16X2:
|
|
out = wgpu::VertexFormat::Float16x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kFloat16X4:
|
|
out = wgpu::VertexFormat::Float16x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kFloat32:
|
|
out = wgpu::VertexFormat::Float32;
|
|
return true;
|
|
case interop::GPUVertexFormat::kFloat32X2:
|
|
out = wgpu::VertexFormat::Float32x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kFloat32X3:
|
|
out = wgpu::VertexFormat::Float32x3;
|
|
return true;
|
|
case interop::GPUVertexFormat::kFloat32X4:
|
|
out = wgpu::VertexFormat::Float32x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUint32:
|
|
out = wgpu::VertexFormat::Uint32;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUint32X2:
|
|
out = wgpu::VertexFormat::Uint32x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUint32X3:
|
|
out = wgpu::VertexFormat::Uint32x3;
|
|
return true;
|
|
case interop::GPUVertexFormat::kUint32X4:
|
|
out = wgpu::VertexFormat::Uint32x4;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSint32:
|
|
out = wgpu::VertexFormat::Sint32;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSint32X2:
|
|
out = wgpu::VertexFormat::Sint32x2;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSint32X3:
|
|
out = wgpu::VertexFormat::Sint32x3;
|
|
return true;
|
|
case interop::GPUVertexFormat::kSint32X4:
|
|
out = wgpu::VertexFormat::Sint32x4;
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUVertexFormat").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::RenderPassColorAttachment& out,
|
|
const interop::GPURenderPassColorAttachment& in) {
|
|
out = {};
|
|
return Convert(out.view, in.view) && //
|
|
Convert(out.resolveTarget, in.resolveTarget) && //
|
|
Convert(out.clearValue, in.clearValue) && //
|
|
Convert(out.loadOp, in.loadOp) && //
|
|
Convert(out.storeOp, in.storeOp);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::RenderPassDepthStencilAttachment& out,
|
|
const interop::GPURenderPassDepthStencilAttachment& in) {
|
|
out = {};
|
|
return Convert(out.view, in.view) && //
|
|
Convert(out.depthClearValue, in.depthClearValue) && //
|
|
Convert(out.depthLoadOp, in.depthLoadOp) && //
|
|
Convert(out.depthStoreOp, in.depthStoreOp) && //
|
|
Convert(out.depthReadOnly, in.depthReadOnly) && //
|
|
Convert(out.stencilClearValue, in.stencilClearValue) && //
|
|
Convert(out.stencilLoadOp, in.stencilLoadOp) && //
|
|
Convert(out.stencilStoreOp, in.stencilStoreOp) && //
|
|
Convert(out.stencilReadOnly, in.stencilReadOnly);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::LoadOp& out, const interop::GPULoadOp& in) {
|
|
out = wgpu::LoadOp::Clear;
|
|
switch (in) {
|
|
case interop::GPULoadOp::kLoad:
|
|
out = wgpu::LoadOp::Load;
|
|
return true;
|
|
case interop::GPULoadOp::kClear:
|
|
out = wgpu::LoadOp::Clear;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPULoadOp").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::StoreOp& out, const interop::GPUStoreOp& in) {
|
|
out = wgpu::StoreOp::Store;
|
|
switch (in) {
|
|
case interop::GPUStoreOp::kStore:
|
|
out = wgpu::StoreOp::Store;
|
|
return true;
|
|
case interop::GPUStoreOp::kDiscard:
|
|
out = wgpu::StoreOp::Discard;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUStoreOp").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::BindGroupEntry& out, const interop::GPUBindGroupEntry& in) {
|
|
out = {};
|
|
if (!Convert(out.binding, in.binding)) {
|
|
return false;
|
|
}
|
|
|
|
if (auto* res = std::get_if<interop::Interface<interop::GPUSampler>>(&in.resource)) {
|
|
return Convert(out.sampler, *res);
|
|
}
|
|
if (auto* res = std::get_if<interop::Interface<interop::GPUTextureView>>(&in.resource)) {
|
|
return Convert(out.textureView, *res);
|
|
}
|
|
if (auto* res = std::get_if<interop::GPUBufferBinding>(&in.resource)) {
|
|
auto buffer = res->buffer.As<GPUBuffer>();
|
|
out.size = wgpu::kWholeSize;
|
|
if (!buffer || !Convert(out.offset, res->offset) || !Convert(out.size, res->size)) {
|
|
return false;
|
|
}
|
|
out.buffer = *buffer;
|
|
return true;
|
|
}
|
|
if (auto* res = std::get_if<interop::Interface<interop::GPUExternalTexture>>(&in.resource)) {
|
|
// TODO(crbug.com/dawn/1129): External textures
|
|
UNIMPLEMENTED();
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUBindGroupEntry.resource")
|
|
.ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::BindGroupLayoutEntry& out,
|
|
const interop::GPUBindGroupLayoutEntry& in) {
|
|
// TODO(crbug.com/dawn/1129): External textures
|
|
return Convert(out.binding, in.binding) && Convert(out.visibility, in.visibility) &&
|
|
Convert(out.buffer, in.buffer) && Convert(out.sampler, in.sampler) &&
|
|
Convert(out.texture, in.texture) && Convert(out.storageTexture, in.storageTexture);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::BufferBindingLayout& out, const interop::GPUBufferBindingLayout& in) {
|
|
return Convert(out.type, in.type) && Convert(out.hasDynamicOffset, in.hasDynamicOffset) &&
|
|
Convert(out.minBindingSize, in.minBindingSize);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::SamplerBindingLayout& out,
|
|
const interop::GPUSamplerBindingLayout& in) {
|
|
return Convert(out.type, in.type);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::TextureBindingLayout& out,
|
|
const interop::GPUTextureBindingLayout& in) {
|
|
return Convert(out.sampleType, in.sampleType) && Convert(out.viewDimension, in.viewDimension) &&
|
|
Convert(out.multisampled, in.multisampled);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::StorageTextureBindingLayout& out,
|
|
const interop::GPUStorageTextureBindingLayout& in) {
|
|
return Convert(out.access, in.access) && Convert(out.format, in.format) &&
|
|
Convert(out.viewDimension, in.viewDimension);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::BufferBindingType& out, const interop::GPUBufferBindingType& in) {
|
|
out = wgpu::BufferBindingType::Undefined;
|
|
switch (in) {
|
|
case interop::GPUBufferBindingType::kUniform:
|
|
out = wgpu::BufferBindingType::Uniform;
|
|
return true;
|
|
case interop::GPUBufferBindingType::kStorage:
|
|
out = wgpu::BufferBindingType::Storage;
|
|
return true;
|
|
case interop::GPUBufferBindingType::kReadOnlyStorage:
|
|
out = wgpu::BufferBindingType::ReadOnlyStorage;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUBufferBindingType").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::TextureSampleType& out, const interop::GPUTextureSampleType& in) {
|
|
out = wgpu::TextureSampleType::Undefined;
|
|
switch (in) {
|
|
case interop::GPUTextureSampleType::kFloat:
|
|
out = wgpu::TextureSampleType::Float;
|
|
return true;
|
|
case interop::GPUTextureSampleType::kUnfilterableFloat:
|
|
out = wgpu::TextureSampleType::UnfilterableFloat;
|
|
return true;
|
|
case interop::GPUTextureSampleType::kDepth:
|
|
out = wgpu::TextureSampleType::Depth;
|
|
return true;
|
|
case interop::GPUTextureSampleType::kSint:
|
|
out = wgpu::TextureSampleType::Sint;
|
|
return true;
|
|
case interop::GPUTextureSampleType::kUint:
|
|
out = wgpu::TextureSampleType::Uint;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUTextureSampleType").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::SamplerBindingType& out, const interop::GPUSamplerBindingType& in) {
|
|
out = wgpu::SamplerBindingType::Undefined;
|
|
switch (in) {
|
|
case interop::GPUSamplerBindingType::kFiltering:
|
|
out = wgpu::SamplerBindingType::Filtering;
|
|
return true;
|
|
case interop::GPUSamplerBindingType::kNonFiltering:
|
|
out = wgpu::SamplerBindingType::NonFiltering;
|
|
return true;
|
|
case interop::GPUSamplerBindingType::kComparison:
|
|
out = wgpu::SamplerBindingType::Comparison;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUSamplerBindingType").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::StorageTextureAccess& out,
|
|
const interop::GPUStorageTextureAccess& in) {
|
|
out = wgpu::StorageTextureAccess::Undefined;
|
|
switch (in) {
|
|
case interop::GPUStorageTextureAccess::kWriteOnly:
|
|
out = wgpu::StorageTextureAccess::WriteOnly;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUStorageTextureAccess").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::QueryType& out, const interop::GPUQueryType& in) {
|
|
out = wgpu::QueryType::Occlusion;
|
|
switch (in) {
|
|
case interop::GPUQueryType::kOcclusion:
|
|
out = wgpu::QueryType::Occlusion;
|
|
return true;
|
|
case interop::GPUQueryType::kTimestamp:
|
|
out = wgpu::QueryType::Timestamp;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUQueryType").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(interop::GPUQueryType& out, wgpu::QueryType in) {
|
|
switch (in) {
|
|
case wgpu::QueryType::Occlusion:
|
|
out = interop::GPUQueryType::kOcclusion;
|
|
return true;
|
|
case wgpu::QueryType::Timestamp:
|
|
out = interop::GPUQueryType::kTimestamp;
|
|
return true;
|
|
case wgpu::QueryType::PipelineStatistics:
|
|
// TODO(dawn:1123): Add support for pipeline statistics if they are in WebGPU one day.
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::AddressMode& out, const interop::GPUAddressMode& in) {
|
|
out = wgpu::AddressMode::Repeat;
|
|
switch (in) {
|
|
case interop::GPUAddressMode::kClampToEdge:
|
|
out = wgpu::AddressMode::ClampToEdge;
|
|
return true;
|
|
case interop::GPUAddressMode::kRepeat:
|
|
out = wgpu::AddressMode::Repeat;
|
|
return true;
|
|
case interop::GPUAddressMode::kMirrorRepeat:
|
|
out = wgpu::AddressMode::MirrorRepeat;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUAddressMode").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::FilterMode& out, const interop::GPUFilterMode& in) {
|
|
out = wgpu::FilterMode::Nearest;
|
|
switch (in) {
|
|
case interop::GPUFilterMode::kNearest:
|
|
out = wgpu::FilterMode::Nearest;
|
|
return true;
|
|
case interop::GPUFilterMode::kLinear:
|
|
out = wgpu::FilterMode::Linear;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUFilterMode").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::FilterMode& out, const interop::GPUMipmapFilterMode& in) {
|
|
out = wgpu::FilterMode::Nearest;
|
|
switch (in) {
|
|
case interop::GPUMipmapFilterMode::kNearest:
|
|
out = wgpu::FilterMode::Nearest;
|
|
return true;
|
|
case interop::GPUMipmapFilterMode::kLinear:
|
|
out = wgpu::FilterMode::Linear;
|
|
return true;
|
|
}
|
|
Napi::Error::New(env, "invalid value for GPUFilterMode").ThrowAsJavaScriptException();
|
|
return false;
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::ComputePipelineDescriptor& out,
|
|
const interop::GPUComputePipelineDescriptor& in) {
|
|
return Convert(out.label, in.label) && //
|
|
Convert(out.layout, in.layout) && //
|
|
Convert(out.compute, in.compute);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::RenderPipelineDescriptor& out,
|
|
const interop::GPURenderPipelineDescriptor& in) {
|
|
wgpu::RenderPipelineDescriptor desc{};
|
|
return Convert(out.label, in.label) && //
|
|
Convert(out.layout, in.layout) && //
|
|
Convert(out.vertex, in.vertex) && //
|
|
Convert(out.primitive, in.primitive) && //
|
|
Convert(out.depthStencil, in.depthStencil) && //
|
|
Convert(out.multisample, in.multisample) && //
|
|
Convert(out.fragment, in.fragment);
|
|
}
|
|
|
|
bool Converter::Convert(wgpu::PipelineLayout& out, const interop::GPUAutoLayoutMode& in) {
|
|
out = nullptr;
|
|
return true;
|
|
}
|
|
|
|
} // namespace wgpu::binding
|