Diff
Modified: trunk/Source/WebGPU/ChangeLog (290263 => 290264)
--- trunk/Source/WebGPU/ChangeLog 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/ChangeLog 2022-02-21 21:27:46 UTC (rev 290264)
@@ -1,5 +1,59 @@
2022-02-21 Myles C. Maxfield <[email protected]>
+ [WebGPU] Tracer bullet part 9: Basic implementation of bindings
+ https://bugs.webkit.org/show_bug.cgi?id=236903
+
+ Reviewed by Dean Jackson.
+
+ This is a basic implementation of the BindGroup, BindGroupLayout, and PipelineLayout methods.
+ Eventually we'll want to suballocate multiple BindGroups so they coexist within the same Buffer,
+ but this is an initial simple implementation that doesn't do that.
+
+ * WebGPU/BindGroup.h:
+ (WebGPU::BindGroup::vertexArgumentBuffer const):
+ (WebGPU::BindGroup::fragmentArgumentBuffer const):
+ (WebGPU::BindGroup::computeArgumentBuffer const):
+ * WebGPU/BindGroup.mm:
+ (WebGPU::bufferIsPresent):
+ (WebGPU::samplerIsPresent):
+ (WebGPU::textureViewIsPresent):
+ (WebGPU::Device::createBindGroup):
+ (WebGPU::BindGroup::BindGroup):
+ (WebGPU::BindGroup::setLabel):
+ * WebGPU/BindGroupLayout.h:
+ (WebGPU::BindGroupLayout::vertexArgumentEncoder const):
+ (WebGPU::BindGroupLayout::fragmentArgumentEncoder const):
+ (WebGPU::BindGroupLayout::computeArgumentEncoder const):
+ * WebGPU/BindGroupLayout.mm:
+ (WebGPU::isPresent):
+ (WebGPU::createArgumentDescriptor):
+ (WebGPU::Device::createBindGroupLayout):
+ (WebGPU::BindGroupLayout::BindGroupLayout):
+ (WebGPU::BindGroupLayout::setLabel):
+ (WebGPU::BindGroupLayout::encodedLength const):
+ * WebGPU/Buffer.h:
+ (WebGPU::Buffer::buffer const):
+ * WebGPU/Buffer.mm:
+ (WebGPU::Buffer::Buffer):
+ * WebGPU/PipelineLayout.h:
+ (WebGPU::PipelineLayout::create):
+ (WebGPU::PipelineLayout::numberOfBindGroupLayouts const):
+ (WebGPU::PipelineLayout::bindGroupLayout const):
+ * WebGPU/PipelineLayout.mm:
+ (WebGPU::Device::createPipelineLayout):
+ (WebGPU::PipelineLayout::PipelineLayout):
+ (WebGPU::PipelineLayout::setLabel):
+ * WebGPU/Sampler.h:
+ (WebGPU::Sampler::samplerState const):
+ * WebGPU/Sampler.mm:
+ (WebGPU::Sampler::Sampler):
+ * WebGPU/TextureView.h:
+ (WebGPU::TextureView::texture const):
+ * WebGPU/TextureView.mm:
+ (WebGPU::TextureView::TextureView):
+
+2022-02-21 Myles C. Maxfield <[email protected]>
+
[WebGPU] Tracer bullet part 8: Basic implementation of device creation routines
https://bugs.webkit.org/show_bug.cgi?id=236902
Modified: trunk/Source/WebGPU/WebGPU/BindGroup.h (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/BindGroup.h 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/BindGroup.h 2022-02-21 21:27:46 UTC (rev 290264)
@@ -43,6 +43,10 @@
void setLabel(const char*);
+ id <MTLBuffer> vertexArgumentBuffer() const { return m_vertexArgumentBuffer; }
+ id <MTLBuffer> fragmentArgumentBuffer() const { return m_fragmentArgumentBuffer; }
+ id <MTLBuffer> computeArgumentBuffer() const { return m_computeArgumentBuffer; }
+
private:
BindGroup(id <MTLBuffer> vertexArgumentBuffer, id <MTLBuffer> fragmentArgumentBuffer, id <MTLBuffer> computeArgumentBuffer);
Modified: trunk/Source/WebGPU/WebGPU/BindGroup.mm (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/BindGroup.mm 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/BindGroup.mm 2022-02-21 21:27:46 UTC (rev 290264)
@@ -26,14 +26,90 @@
#import "config.h"
#import "BindGroup.h"
+#import "BindGroupLayout.h"
+#import "Buffer.h"
#import "Device.h"
+#import "Sampler.h"
+#import "TextureView.h"
namespace WebGPU {
+static bool bufferIsPresent(const WGPUBindGroupEntry& entry)
+{
+ return entry.buffer;
+}
+
+static bool samplerIsPresent(const WGPUBindGroupEntry& entry)
+{
+ return entry.sampler;
+}
+
+static bool textureViewIsPresent(const WGPUBindGroupEntry& entry)
+{
+ return entry.textureView;
+}
+
RefPtr<BindGroup> Device::createBindGroup(const WGPUBindGroupDescriptor* descriptor)
{
- UNUSED_PARAM(descriptor);
- return BindGroup::create(nil, nil, nil);
+ if (descriptor->nextInChain)
+ return nullptr;
+
+ const BindGroupLayout& bindGroupLayout = descriptor->layout->bindGroupLayout;
+
+ // FIXME: Don't allocate 3 new buffers for every bind group.
+ // In fact, don't even allocate a single new buffer for every bind group.
+ id <MTLBuffer> vertexArgumentBuffer = [m_device newBufferWithLength:bindGroupLayout.encodedLength() options:MTLResourceStorageModeShared];
+ id <MTLBuffer> fragmentArgumentBuffer = [m_device newBufferWithLength:bindGroupLayout.encodedLength() options:MTLResourceStorageModeShared];
+ id <MTLBuffer> computeArgumentBuffer = [m_device newBufferWithLength:bindGroupLayout.encodedLength() options:MTLResourceStorageModeShared];
+ if (!vertexArgumentBuffer || !fragmentArgumentBuffer || !computeArgumentBuffer)
+ return nullptr;
+
+ auto label = [NSString stringWithCString:descriptor->label encoding:NSUTF8StringEncoding];
+ vertexArgumentBuffer.label = label;
+ fragmentArgumentBuffer.label = label;
+ computeArgumentBuffer.label = label;
+
+ id <MTLArgumentEncoder> vertexArgumentEncoder = bindGroupLayout.vertexArgumentEncoder();
+ id <MTLArgumentEncoder> fragmentArgumentEncoder = bindGroupLayout.fragmentArgumentEncoder();
+ id <MTLArgumentEncoder> computeArgumentEncoder = bindGroupLayout.computeArgumentEncoder();
+ [vertexArgumentEncoder setArgumentBuffer:vertexArgumentBuffer offset:0];
+ [fragmentArgumentEncoder setArgumentBuffer:fragmentArgumentBuffer offset:0];
+ [computeArgumentEncoder setArgumentBuffer:computeArgumentBuffer offset:0];
+
+ for (uint32_t i = 0; i < descriptor->entryCount; ++i) {
+ const WGPUBindGroupEntry& entry = descriptor->entries[i];
+
+ if (entry.nextInChain)
+ return nullptr;
+
+ bool bufferIsPresent = WebGPU::bufferIsPresent(entry);
+ bool samplerIsPresent = WebGPU::samplerIsPresent(entry);
+ bool textureViewIsPresent = WebGPU::textureViewIsPresent(entry);
+ if (static_cast<int>(bufferIsPresent) + static_cast<int>(samplerIsPresent) + static_cast<int>(textureViewIsPresent) != 1)
+ return nullptr;
+
+ if (bufferIsPresent) {
+ id <MTLBuffer> buffer = entry.buffer->buffer->buffer();
+ [vertexArgumentEncoder setBuffer:buffer offset:entry.offset atIndex:entry.binding];
+ [fragmentArgumentEncoder setBuffer:buffer offset:entry.offset atIndex:entry.binding];
+ [computeArgumentEncoder setBuffer:buffer offset:entry.offset atIndex:entry.binding];
+ } else if (samplerIsPresent) {
+ id <MTLSamplerState> sampler = entry.sampler->sampler->samplerState();
+ [vertexArgumentEncoder setSamplerState:sampler atIndex:entry.binding];
+ [fragmentArgumentEncoder setSamplerState:sampler atIndex:entry.binding];
+ [computeArgumentEncoder setSamplerState:sampler atIndex:entry.binding];
+ } else if (textureViewIsPresent) {
+ id <MTLTexture> texture = entry.textureView->textureView->texture();
+ [vertexArgumentEncoder setTexture:texture atIndex:entry.binding];
+ [fragmentArgumentEncoder setTexture:texture atIndex:entry.binding];
+ [computeArgumentEncoder setTexture:texture atIndex:entry.binding];
+ } else {
+ ASSERT_NOT_REACHED();
+ return nullptr;
+ }
+ }
+
+ return BindGroup::create(vertexArgumentBuffer, fragmentArgumentBuffer, computeArgumentBuffer);
}
BindGroup::BindGroup(id <MTLBuffer> vertexArgumentBuffer, id <MTLBuffer> fragmentArgumentBuffer, id <MTLBuffer> computeArgumentBuffer)
@@ -41,9 +117,6 @@
, m_fragmentArgumentBuffer(fragmentArgumentBuffer)
, m_computeArgumentBuffer(computeArgumentBuffer)
{
- UNUSED_VARIABLE(m_vertexArgumentBuffer);
- UNUSED_VARIABLE(m_fragmentArgumentBuffer);
- UNUSED_VARIABLE(m_computeArgumentBuffer);
}
BindGroup::~BindGroup() = default;
@@ -50,7 +123,10 @@
void BindGroup::setLabel(const char* label)
{
- UNUSED_PARAM(label);
+ auto labelString = [NSString stringWithCString:label encoding:NSUTF8StringEncoding];
+ m_vertexArgumentBuffer.label = labelString;
+ m_fragmentArgumentBuffer.label = labelString;
+ m_computeArgumentBuffer.label = labelString;
}
}
Modified: trunk/Source/WebGPU/WebGPU/BindGroupLayout.h (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/BindGroupLayout.h 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/BindGroupLayout.h 2022-02-21 21:27:46 UTC (rev 290264)
@@ -43,6 +43,12 @@
void setLabel(const char*);
+ NSUInteger encodedLength() const;
+
+ id <MTLArgumentEncoder> vertexArgumentEncoder() const { return m_vertexArgumentEncoder; }
+ id <MTLArgumentEncoder> fragmentArgumentEncoder() const { return m_fragmentArgumentEncoder; }
+ id <MTLArgumentEncoder> computeArgumentEncoder() const { return m_computeArgumentEncoder; }
+
private:
BindGroupLayout(id <MTLArgumentEncoder> vertexArgumentEncoder, id <MTLArgumentEncoder> fragmentArgumentEncoder, id <MTLArgumentEncoder> computeArgumentEncoder);
Modified: trunk/Source/WebGPU/WebGPU/BindGroupLayout.mm (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/BindGroupLayout.mm 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/BindGroupLayout.mm 2022-02-21 21:27:46 UTC (rev 290264)
@@ -30,10 +30,187 @@
namespace WebGPU {
+static bool isPresent(const WGPUBufferBindingLayout& buffer)
+{
+ return buffer.type != WGPUBufferBindingType_Undefined;
+}
+
+static MTLArgumentDescriptor *createArgumentDescriptor(const WGPUBufferBindingLayout& buffer)
+{
+ if (buffer.nextInChain)
+ return nil;
+
+ auto descriptor = [MTLArgumentDescriptor new];
+ descriptor.dataType = MTLDataTypePointer;
+ // FIXME: Handle hasDynamicOffset.
+ // FIXME: Handle minBindingSize.
+ switch (buffer.type) {
+ case WGPUBufferBindingType_Uniform:
+ case WGPUBufferBindingType_ReadOnlyStorage:
+ descriptor.access = MTLArgumentAccessReadOnly;
+ break;
+ case WGPUBufferBindingType_Storage:
+ descriptor.access = MTLArgumentAccessReadWrite;
+ break;
+ default:
+ return nil;
+ }
+ return descriptor;
+}
+
+static bool isPresent(const WGPUSamplerBindingLayout& sampler)
+{
+ return sampler.type != WGPUSamplerBindingType_Undefined;
+}
+
+static MTLArgumentDescriptor *createArgumentDescriptor(const WGPUSamplerBindingLayout& sampler)
+{
+ if (sampler.nextInChain)
+ return nil;
+
+ UNUSED_PARAM(sampler);
+ auto descriptor = [MTLArgumentDescriptor new];
+ descriptor.dataType = MTLDataTypeSampler;
+ // FIXME: Implement this.
+ return descriptor;
+}
+
+static bool isPresent(const WGPUTextureBindingLayout& texture)
+{
+ return texture.sampleType != WGPUTextureSampleType_Undefined
+ && texture.viewDimension != WGPUTextureViewDimension_Undefined;
+}
+
+static MTLArgumentDescriptor *createArgumentDescriptor(const WGPUTextureBindingLayout& texture)
+{
+ if (texture.nextInChain)
+ return nil;
+
+ UNUSED_PARAM(texture);
+ auto descriptor = [MTLArgumentDescriptor new];
+ descriptor.dataType = MTLDataTypeTexture;
+ // FIXME: Implement this.
+ return descriptor;
+}
+
+static bool isPresent(const WGPUStorageTextureBindingLayout& storageTexture)
+{
+ return storageTexture.access != WGPUStorageTextureAccess_Undefined
+ && storageTexture.format != WGPUTextureFormat_Undefined
+ && storageTexture.viewDimension != WGPUTextureViewDimension_Undefined;
+}
+
+static MTLArgumentDescriptor *createArgumentDescriptor(const WGPUStorageTextureBindingLayout& storageTexture)
+{
+ if (storageTexture.nextInChain)
+ return nil;
+
+ UNUSED_PARAM(storageTexture);
+ auto descriptor = [MTLArgumentDescriptor new];
+ descriptor.dataType = MTLDataTypeTexture;
+ // FIXME: Implement this.
+ return descriptor;
+}
+
RefPtr<BindGroupLayout> Device::createBindGroupLayout(const WGPUBindGroupLayoutDescriptor* descriptor)
{
- UNUSED_PARAM(descriptor);
- return BindGroupLayout::create(nil, nil, nil);
+ if (descriptor->nextInChain)
+ return nullptr;
+
+ NSMutableArray<MTLArgumentDescriptor *> *vertexArguments = [NSMutableArray arrayWithCapacity:descriptor->entryCount];
+ NSMutableArray<MTLArgumentDescriptor *> *fragmentArguments = [NSMutableArray arrayWithCapacity:descriptor->entryCount];
+ NSMutableArray<MTLArgumentDescriptor *> *computeArguments = [NSMutableArray arrayWithCapacity:descriptor->entryCount];
+ if (!vertexArguments || !fragmentArguments || !computeArguments)
+ return nullptr;
+
+ for (uint32_t i = 0; i < descriptor->entryCount; ++i) {
+ const WGPUBindGroupLayoutEntry& entry = descriptor->entries[i];
+ if (entry.nextInChain)
+ return nullptr;
+
+ // https://gpuweb.github.io/gpuweb/#dictdef-gpubindgrouplayoutentry
+ // "Only one [of buffer, sampler, texture, storageTexture, or externalTexture] may be defined for any given GPUBindGroupLayoutEntry."
+
+ ASSERT(i == vertexArguments.count);
+ ASSERT(vertexArguments.count == fragmentArguments.count);
+ ASSERT(fragmentArguments.count == computeArguments.count);
+
+ const WGPUBufferBindingLayout& buffer = entry.buffer;
+ const WGPUSamplerBindingLayout& sampler = entry.sampler;
+ const WGPUTextureBindingLayout& texture = entry.texture;
+ const WGPUStorageTextureBindingLayout& storageTexture = entry.storageTexture;
+
+ MTLArgumentDescriptor *descriptor = nil;
+
+ if (isPresent(buffer)) {
+ if (i != vertexArguments.count)
+ return nullptr;
+
+ descriptor = createArgumentDescriptor(buffer);
+ if (!descriptor)
+ return nullptr;
+ }
+
+ if (isPresent(sampler)) {
+ if (i != vertexArguments.count)
+ return nullptr;
+
+ descriptor = createArgumentDescriptor(sampler);
+ if (!descriptor)
+ return nullptr;
+ }
+
+ if (isPresent(texture)) {
+ if (i != vertexArguments.count)
+ return nullptr;
+
+ descriptor = createArgumentDescriptor(texture);
+ if (!descriptor)
+ return nullptr;
+ }
+
+ if (isPresent(storageTexture)) {
+ if (i != vertexArguments.count)
+ return nullptr;
+
+ descriptor = createArgumentDescriptor(storageTexture);
+ if (!descriptor)
+ return nullptr;
+ }
+
+ // FIXME: This needs coordination with the shader compiler.
+ descriptor.index = i;
+
+ MTLArgumentDescriptor *vertexDescriptor = descriptor;
+ MTLArgumentDescriptor *fragmentDescriptor = [descriptor copy];
+ MTLArgumentDescriptor *computeDescriptor = [descriptor copy];
+ if (!fragmentDescriptor || !computeDescriptor)
+ return nullptr;
+
+ if (!(entry.visibility & WGPUShaderStage_Vertex))
+ vertexDescriptor.access = MTLArgumentAccessReadOnly;
+ if (!(entry.visibility & WGPUShaderStage_Fragment))
+ fragmentDescriptor.access = MTLArgumentAccessReadOnly;
+ if (!(entry.visibility & WGPUShaderStage_Compute))
+ computeDescriptor.access = MTLArgumentAccessReadOnly;
+
+ [vertexArguments addObject:vertexDescriptor];
+ [fragmentArguments addObject:fragmentDescriptor];
+ [computeArguments addObject:computeDescriptor];
+ }
+
+ id <MTLArgumentEncoder> vertexArgumentEncoder = [m_device newArgumentEncoderWithArguments:vertexArguments];
+ id <MTLArgumentEncoder> fragmentArgumentEncoder = [m_device newArgumentEncoderWithArguments:fragmentArguments];
+ id <MTLArgumentEncoder> computeArgumentEncoder = [m_device newArgumentEncoderWithArguments:computeArguments];
+ if (!vertexArgumentEncoder || !fragmentArgumentEncoder || !computeArgumentEncoder)
+ return nullptr;
+
+ auto label = [NSString stringWithCString:descriptor->label encoding:NSUTF8StringEncoding];
+ vertexArgumentEncoder.label = label;
+ fragmentArgumentEncoder.label = label;
+ computeArgumentEncoder.label = label;
+
+ return BindGroupLayout::create(vertexArgumentEncoder, fragmentArgumentEncoder, computeArgumentEncoder);
}
BindGroupLayout::BindGroupLayout(id <MTLArgumentEncoder> vertexArgumentEncoder, id <MTLArgumentEncoder> fragmentArgumentEncoder, id <MTLArgumentEncoder> computeArgumentEncoder)
@@ -41,9 +218,6 @@
, m_fragmentArgumentEncoder(fragmentArgumentEncoder)
, m_computeArgumentEncoder(computeArgumentEncoder)
{
- UNUSED_VARIABLE(m_vertexArgumentEncoder);
- UNUSED_VARIABLE(m_fragmentArgumentEncoder);
- UNUSED_VARIABLE(m_computeArgumentEncoder);
}
BindGroupLayout::~BindGroupLayout() = default;
@@ -50,11 +224,22 @@
void BindGroupLayout::setLabel(const char* label)
{
- UNUSED_PARAM(label);
+ auto labelString = [NSString stringWithCString:label encoding:NSUTF8StringEncoding];
+ m_vertexArgumentEncoder.label = labelString;
+ m_fragmentArgumentEncoder.label = labelString;
+ m_computeArgumentEncoder.label = labelString;
}
+NSUInteger BindGroupLayout::encodedLength() const
+{
+ auto result = m_vertexArgumentEncoder.encodedLength;
+ ASSERT(result == m_fragmentArgumentEncoder.encodedLength);
+ ASSERT(result == m_computeArgumentEncoder.encodedLength);
+ return result;
}
+}
+
void wgpuBindGroupLayoutRelease(WGPUBindGroupLayout bindGroupLayout)
{
delete bindGroupLayout;
Modified: trunk/Source/WebGPU/WebGPU/Buffer.h (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/Buffer.h 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/Buffer.h 2022-02-21 21:27:46 UTC (rev 290264)
@@ -49,6 +49,8 @@
void unmap();
void setLabel(const char*);
+ id <MTLBuffer> buffer() const { return m_buffer; }
+
private:
Buffer(id <MTLBuffer>);
Modified: trunk/Source/WebGPU/WebGPU/Buffer.mm (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/Buffer.mm 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/Buffer.mm 2022-02-21 21:27:46 UTC (rev 290264)
@@ -39,7 +39,6 @@
Buffer::Buffer(id <MTLBuffer> buffer)
: m_buffer(buffer)
{
- UNUSED_VARIABLE(m_buffer);
}
Buffer::~Buffer() = default;
Modified: trunk/Source/WebGPU/WebGPU/PipelineLayout.h (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/PipelineLayout.h 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/PipelineLayout.h 2022-02-21 21:27:46 UTC (rev 290264)
@@ -28,15 +28,18 @@
#import <wtf/FastMalloc.h>
#import <wtf/Ref.h>
#import <wtf/RefCounted.h>
+#import <wtf/Vector.h>
namespace WebGPU {
+class BindGroupLayout;
+
class PipelineLayout : public RefCounted<PipelineLayout> {
WTF_MAKE_FAST_ALLOCATED;
public:
- static Ref<PipelineLayout> create()
+ static Ref<PipelineLayout> create(Vector<Ref<BindGroupLayout>>&& bindGroupLayouts)
{
- return adoptRef(*new PipelineLayout());
+ return adoptRef(*new PipelineLayout(WTFMove(bindGroupLayouts)));
}
~PipelineLayout();
@@ -43,8 +46,13 @@
void setLabel(const char*);
+ size_t numberOfBindGroupLayouts() const { return m_bindGroupLayouts.size(); }
+ const BindGroupLayout& bindGroupLayout(size_t i) const { return m_bindGroupLayouts[i]; }
+
private:
- PipelineLayout();
+ PipelineLayout(Vector<Ref<BindGroupLayout>>&&);
+
+ const Vector<Ref<BindGroupLayout>> m_bindGroupLayouts;
};
} // namespace WebGPU
Modified: trunk/Source/WebGPU/WebGPU/PipelineLayout.mm (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/PipelineLayout.mm 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/PipelineLayout.mm 2022-02-21 21:27:46 UTC (rev 290264)
@@ -26,6 +26,7 @@
#import "config.h"
#import "PipelineLayout.h"
+#import "BindGroupLayout.h"
#import "Device.h"
namespace WebGPU {
@@ -32,17 +33,28 @@
RefPtr<PipelineLayout> Device::createPipelineLayout(const WGPUPipelineLayoutDescriptor* descriptor)
{
- UNUSED_PARAM(descriptor);
- return PipelineLayout::create();
+ if (descriptor->nextInChain)
+ return nullptr;
+
+ Vector<Ref<BindGroupLayout>> bindGroupLayouts;
+ bindGroupLayouts.reserveInitialCapacity(descriptor->bindGroupLayoutCount);
+ for (uint32_t i = 0; i < descriptor->bindGroupLayoutCount; ++i) {
+ const auto* bindGroupLayout = descriptor->bindGroupLayouts[i];
+ bindGroupLayouts.uncheckedAppend(bindGroupLayout->bindGroupLayout);
+ }
+ return PipelineLayout::create(WTFMove(bindGroupLayouts));
}
-PipelineLayout::PipelineLayout() = default;
+PipelineLayout::PipelineLayout(Vector<Ref<BindGroupLayout>>&& bindGroupLayouts)
+ : m_bindGroupLayouts(WTFMove(bindGroupLayouts))
+{
+}
PipelineLayout::~PipelineLayout() = default;
-void PipelineLayout::setLabel(const char* label)
+void PipelineLayout::setLabel(const char*)
{
- UNUSED_PARAM(label);
+ // There is no Metal object that represents a pipeline layout.
}
}
Modified: trunk/Source/WebGPU/WebGPU/Sampler.h (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/Sampler.h 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/Sampler.h 2022-02-21 21:27:46 UTC (rev 290264)
@@ -43,6 +43,8 @@
void setLabel(const char*);
+ id <MTLSamplerState> samplerState() const { return m_samplerState; }
+
private:
Sampler(id <MTLSamplerState>);
Modified: trunk/Source/WebGPU/WebGPU/Sampler.mm (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/Sampler.mm 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/Sampler.mm 2022-02-21 21:27:46 UTC (rev 290264)
@@ -39,7 +39,6 @@
Sampler::Sampler(id <MTLSamplerState> samplerState)
: m_samplerState(samplerState)
{
- UNUSED_VARIABLE(m_samplerState);
}
Sampler::~Sampler() = default;
Modified: trunk/Source/WebGPU/WebGPU/TextureView.h (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/TextureView.h 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/TextureView.h 2022-02-21 21:27:46 UTC (rev 290264)
@@ -43,6 +43,8 @@
void setLabel(const char*);
+ id <MTLTexture> texture() const { return m_texture; }
+
private:
TextureView(id <MTLTexture>);
Modified: trunk/Source/WebGPU/WebGPU/TextureView.mm (290263 => 290264)
--- trunk/Source/WebGPU/WebGPU/TextureView.mm 2022-02-21 21:20:12 UTC (rev 290263)
+++ trunk/Source/WebGPU/WebGPU/TextureView.mm 2022-02-21 21:27:46 UTC (rev 290264)
@@ -32,7 +32,6 @@
TextureView::TextureView(id <MTLTexture> texture)
: m_texture(texture)
{
- UNUSED_VARIABLE(m_texture);
}
TextureView::~TextureView() = default;