blob: e622ba54535caed5c8b693f4dc98e8148338f812 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// 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_compute_pipeline.h"
#include "third_party/blink/renderer/modules/webgpu/dawn_conversions.h"
#include "third_party/blink/renderer/modules/webgpu/gpu_compute_pipeline_descriptor.h"
#include "third_party/blink/renderer/modules/webgpu/gpu_device.h"
#include "third_party/blink/renderer/modules/webgpu/gpu_pipeline_layout.h"
#include "third_party/blink/renderer/modules/webgpu/gpu_pipeline_stage_descriptor.h"
#include "third_party/blink/renderer/modules/webgpu/gpu_shader_module.h"
namespace blink {
// static
GPUComputePipeline* GPUComputePipeline::Create(
GPUDevice* device,
const GPUComputePipelineDescriptor* webgpu_desc) {
DCHECK(device);
DCHECK(webgpu_desc);
DawnComputePipelineDescriptor dawn_desc = {};
dawn_desc.nextInChain = nullptr;
dawn_desc.layout = AsDawnType(webgpu_desc->layout());
if (webgpu_desc->hasLabel()) {
dawn_desc.label = webgpu_desc->label().Utf8().data();
}
auto compute_stage = AsDawnType(webgpu_desc->computeStage());
dawn_desc.computeStage = std::get<0>(compute_stage);
return MakeGarbageCollected<GPUComputePipeline>(
device, device->GetProcs().deviceCreateComputePipeline(
device->GetHandle(), &dawn_desc));
}
GPUComputePipeline::GPUComputePipeline(GPUDevice* device,
DawnComputePipeline compute_pipeline)
: DawnObject<DawnComputePipeline>(device, compute_pipeline) {}
GPUComputePipeline::~GPUComputePipeline() {
if (IsDawnControlClientDestroyed()) {
return;
}
GetProcs().computePipelineRelease(GetHandle());
}
} // namespace blink