blob: a3e8ffe6ac9883affea5a6c3ae0703248a9d0a2a [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/webgpu/gpu_sampler.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_gpu_sampler_descriptor.h"
#include "third_party/blink/renderer/modules/webgpu/dawn_conversions.h"
#include "third_party/blink/renderer/modules/webgpu/gpu_device.h"
namespace blink {
namespace {
wgpu::SamplerDescriptor AsDawnType(const GPUSamplerDescriptor* webgpu_desc,
std::string* label) {
DCHECK(webgpu_desc);
DCHECK(label);
wgpu::SamplerDescriptor dawn_desc = {
.addressModeU = AsDawnEnum(webgpu_desc->addressModeU()),
.addressModeV = AsDawnEnum(webgpu_desc->addressModeV()),
.addressModeW = AsDawnEnum(webgpu_desc->addressModeW()),
.magFilter = AsDawnEnum(webgpu_desc->magFilter()),
.minFilter = AsDawnEnum(webgpu_desc->minFilter()),
.mipmapFilter = AsDawnEnum(webgpu_desc->mipmapFilter()),
.lodMinClamp = webgpu_desc->lodMinClamp(),
.lodMaxClamp = webgpu_desc->lodMaxClamp(),
.maxAnisotropy = webgpu_desc->maxAnisotropy(),
};
if (webgpu_desc->hasCompare()) {
dawn_desc.compare = AsDawnEnum(webgpu_desc->compare());
}
*label = webgpu_desc->label().Utf8();
if (!label->empty()) {
dawn_desc.label = label->c_str();
}
return dawn_desc;
}
} // anonymous namespace
// static
GPUSampler* GPUSampler::Create(GPUDevice* device,
const GPUSamplerDescriptor* webgpu_desc) {
DCHECK(device);
DCHECK(webgpu_desc);
std::string label;
wgpu::SamplerDescriptor dawn_desc = AsDawnType(webgpu_desc, &label);
GPUSampler* sampler = MakeGarbageCollected<GPUSampler>(
device, device->GetHandle().CreateSampler(&dawn_desc),
webgpu_desc->label());
return sampler;
}
GPUSampler::GPUSampler(GPUDevice* device,
wgpu::Sampler sampler,
const String& label)
: DawnObject<wgpu::Sampler>(device, std::move(sampler), label) {}
} // namespace blink