Format: src/backend/metal
diff --git a/src/backend/metal/BlendStateMTL.h b/src/backend/metal/BlendStateMTL.h
index cef5ad6..842e45a 100644
--- a/src/backend/metal/BlendStateMTL.h
+++ b/src/backend/metal/BlendStateMTL.h
@@ -18,17 +18,15 @@
#include "backend/BlendState.h"
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class BlendState : public BlendStateBase {
- public:
- BlendState(BlendStateBuilder* builder);
+ public:
+ BlendState(BlendStateBuilder* builder);
- void ApplyBlendState(MTLRenderPipelineColorAttachmentDescriptor* descriptor) const;
+ void ApplyBlendState(MTLRenderPipelineColorAttachmentDescriptor* descriptor) const;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_BLENDSTATEMTL_H_
+#endif // BACKEND_METAL_BLENDSTATEMTL_H_
diff --git a/src/backend/metal/BlendStateMTL.mm b/src/backend/metal/BlendStateMTL.mm
index ab955af..6da499c 100644
--- a/src/backend/metal/BlendStateMTL.mm
+++ b/src/backend/metal/BlendStateMTL.mm
@@ -16,13 +16,12 @@
#include "backend/metal/MetalBackend.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
namespace {
MTLBlendFactor MetalBlendFactor(nxt::BlendFactor factor, bool alpha) {
- switch(factor) {
+ switch (factor) {
case nxt::BlendFactor::Zero:
return MTLBlendFactorZero;
case nxt::BlendFactor::One:
@@ -48,12 +47,13 @@
case nxt::BlendFactor::BlendColor:
return alpha ? MTLBlendFactorBlendAlpha : MTLBlendFactorBlendColor;
case nxt::BlendFactor::OneMinusBlendColor:
- return alpha ? MTLBlendFactorOneMinusBlendAlpha : MTLBlendFactorOneMinusBlendColor;
+ return alpha ? MTLBlendFactorOneMinusBlendAlpha
+ : MTLBlendFactorOneMinusBlendColor;
}
}
MTLBlendOperation MetalBlendOperation(nxt::BlendOperation operation) {
- switch(operation) {
+ switch (operation) {
case nxt::BlendOperation::Add:
return MTLBlendOperationAdd;
case nxt::BlendOperation::Subtract:
@@ -68,14 +68,19 @@
}
MTLColorWriteMask MetalColorWriteMask(nxt::ColorWriteMask colorWriteMask) {
- return (
- ((colorWriteMask & nxt::ColorWriteMask::Red) != nxt::ColorWriteMask::None ? MTLColorWriteMaskRed : MTLColorWriteMaskNone) |
- ((colorWriteMask & nxt::ColorWriteMask::Green) != nxt::ColorWriteMask::None ? MTLColorWriteMaskGreen : MTLColorWriteMaskNone) |
- ((colorWriteMask & nxt::ColorWriteMask::Blue) != nxt::ColorWriteMask::None ? MTLColorWriteMaskBlue : MTLColorWriteMaskNone) |
- ((colorWriteMask & nxt::ColorWriteMask::Alpha) != nxt::ColorWriteMask::None ? MTLColorWriteMaskAlpha : MTLColorWriteMaskNone)
- );
+ return (((colorWriteMask & nxt::ColorWriteMask::Red) != nxt::ColorWriteMask::None
+ ? MTLColorWriteMaskRed
+ : MTLColorWriteMaskNone) |
+ ((colorWriteMask & nxt::ColorWriteMask::Green) != nxt::ColorWriteMask::None
+ ? MTLColorWriteMaskGreen
+ : MTLColorWriteMaskNone) |
+ ((colorWriteMask & nxt::ColorWriteMask::Blue) != nxt::ColorWriteMask::None
+ ? MTLColorWriteMaskBlue
+ : MTLColorWriteMaskNone) |
+ ((colorWriteMask & nxt::ColorWriteMask::Alpha) != nxt::ColorWriteMask::None
+ ? MTLColorWriteMaskAlpha
+ : MTLColorWriteMaskNone));
}
-
}
BlendState::BlendState(BlendStateBuilder* builder) : BlendStateBase(builder) {
@@ -92,5 +97,5 @@
descriptor.alphaBlendOperation = MetalBlendOperation(info.alphaBlend.operation);
descriptor.writeMask = MetalColorWriteMask(info.colorWriteMask);
}
-}
-}
+
+}} // namespace backend::metal
diff --git a/src/backend/metal/BufferMTL.h b/src/backend/metal/BufferMTL.h
index 9519c28..710bcb5 100644
--- a/src/backend/metal/BufferMTL.h
+++ b/src/backend/metal/BufferMTL.h
@@ -20,54 +20,53 @@
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class Device;
class Buffer : public BufferBase {
- public:
- Buffer(BufferBuilder* builder);
- ~Buffer();
+ public:
+ Buffer(BufferBuilder* builder);
+ ~Buffer();
- id<MTLBuffer> GetMTLBuffer();
+ id<MTLBuffer> GetMTLBuffer();
- void OnMapReadCommandSerialFinished(uint32_t mapSerial, uint32_t offset);
+ void OnMapReadCommandSerialFinished(uint32_t mapSerial, uint32_t offset);
- private:
- void SetSubDataImpl(uint32_t start, uint32_t count, const uint32_t* data) override;
- void MapReadAsyncImpl(uint32_t serial, uint32_t start, uint32_t count) override;
- void UnmapImpl() override;
- void TransitionUsageImpl(nxt::BufferUsageBit currentUsage, nxt::BufferUsageBit targetUsage) override;
+ private:
+ void SetSubDataImpl(uint32_t start, uint32_t count, const uint32_t* data) override;
+ void MapReadAsyncImpl(uint32_t serial, uint32_t start, uint32_t count) override;
+ void UnmapImpl() override;
+ void TransitionUsageImpl(nxt::BufferUsageBit currentUsage,
+ nxt::BufferUsageBit targetUsage) override;
- id<MTLBuffer> mMtlBuffer = nil;
+ id<MTLBuffer> mMtlBuffer = nil;
};
class BufferView : public BufferViewBase {
- public:
- BufferView(BufferViewBuilder* builder);
+ public:
+ BufferView(BufferViewBuilder* builder);
};
class MapReadRequestTracker {
- public:
- MapReadRequestTracker(Device* device);
- ~MapReadRequestTracker();
+ public:
+ MapReadRequestTracker(Device* device);
+ ~MapReadRequestTracker();
- void Track(Buffer* buffer, uint32_t mapSerial, uint32_t offset);
- void Tick(Serial finishedSerial);
+ void Track(Buffer* buffer, uint32_t mapSerial, uint32_t offset);
+ void Tick(Serial finishedSerial);
- private:
- Device* mDevice;
+ private:
+ Device* mDevice;
- struct Request {
- Ref<Buffer> buffer;
- uint32_t mapSerial;
- uint32_t offset;
- };
- SerialQueue<Request> mInflightRequests;
+ struct Request {
+ Ref<Buffer> buffer;
+ uint32_t mapSerial;
+ uint32_t offset;
+ };
+ SerialQueue<Request> mInflightRequests;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_BUFFERMTL_H_
+#endif // BACKEND_METAL_BUFFERMTL_H_
diff --git a/src/backend/metal/BufferMTL.mm b/src/backend/metal/BufferMTL.mm
index bcc5ad0..c1109f8 100644
--- a/src/backend/metal/BufferMTL.mm
+++ b/src/backend/metal/BufferMTL.mm
@@ -17,12 +17,9 @@
#include "backend/metal/MetalBackend.h"
#include "backend/metal/ResourceUploader.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
- Buffer::Buffer(BufferBuilder* builder)
- : BufferBase(builder) {
-
+ Buffer::Buffer(BufferBuilder* builder) : BufferBase(builder) {
MTLResourceOptions storageMode;
if (GetAllowedUsage() & (nxt::BufferUsageBit::MapRead | nxt::BufferUsageBit::MapWrite)) {
storageMode = MTLResourceStorageModeShared;
@@ -31,7 +28,7 @@
}
mMtlBuffer = [ToBackend(GetDevice())->GetMTLDevice() newBufferWithLength:GetSize()
- options:storageMode];
+ options:storageMode];
}
Buffer::~Buffer() {
@@ -50,7 +47,8 @@
void Buffer::SetSubDataImpl(uint32_t start, uint32_t count, const uint32_t* data) {
auto* uploader = ToBackend(GetDevice())->GetResourceUploader();
- uploader->BufferSubData(mMtlBuffer, start * sizeof(uint32_t), count * sizeof(uint32_t), data);
+ uploader->BufferSubData(mMtlBuffer, start * sizeof(uint32_t), count * sizeof(uint32_t),
+ data);
}
void Buffer::MapReadAsyncImpl(uint32_t serial, uint32_t start, uint32_t) {
@@ -65,12 +63,10 @@
void Buffer::TransitionUsageImpl(nxt::BufferUsageBit, nxt::BufferUsageBit) {
}
- BufferView::BufferView(BufferViewBuilder* builder)
- : BufferViewBase(builder) {
+ BufferView::BufferView(BufferViewBuilder* builder) : BufferViewBase(builder) {
}
- MapReadRequestTracker::MapReadRequestTracker(Device* device)
- : mDevice(device) {
+ MapReadRequestTracker::MapReadRequestTracker(Device* device) : mDevice(device) {
}
MapReadRequestTracker::~MapReadRequestTracker() {
@@ -92,5 +88,5 @@
}
mInflightRequests.ClearUpTo(finishedSerial);
}
-}
-}
+
+}} // namespace backend::metal
diff --git a/src/backend/metal/CommandBufferMTL.h b/src/backend/metal/CommandBufferMTL.h
index e3e66f6..37cd007 100644
--- a/src/backend/metal/CommandBufferMTL.h
+++ b/src/backend/metal/CommandBufferMTL.h
@@ -19,24 +19,22 @@
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class Device;
class CommandBuffer : public CommandBufferBase {
- public:
- CommandBuffer(CommandBufferBuilder* builder);
- ~CommandBuffer();
+ public:
+ CommandBuffer(CommandBufferBuilder* builder);
+ ~CommandBuffer();
- void FillCommands(id<MTLCommandBuffer> commandBuffer);
+ void FillCommands(id<MTLCommandBuffer> commandBuffer);
- private:
- Device* mDevice;
- CommandIterator mCommands;
+ private:
+ Device* mDevice;
+ CommandIterator mCommands;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_COMMANDBUFFERMTL_H_
+#endif // BACKEND_METAL_COMMANDBUFFERMTL_H_
diff --git a/src/backend/metal/CommandBufferMTL.mm b/src/backend/metal/CommandBufferMTL.mm
index 9e326d3..ba0da90 100644
--- a/src/backend/metal/CommandBufferMTL.mm
+++ b/src/backend/metal/CommandBufferMTL.mm
@@ -25,8 +25,7 @@
#include "backend/metal/SamplerMTL.h"
#include "backend/metal/TextureMTL.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
namespace {
struct CurrentEncoders {
@@ -77,7 +76,8 @@
const auto& info = currentRenderPass->GetSubpassInfo(subpass);
- MTLRenderPassDescriptor* descriptor = [MTLRenderPassDescriptor renderPassDescriptor];
+ MTLRenderPassDescriptor* descriptor =
+ [MTLRenderPassDescriptor renderPassDescriptor];
for (unsigned int location : IterateBitSet(info.colorAttachmentsSet)) {
uint32_t attachment = info.colorAttachments[location];
const auto& attachmentInfo = currentRenderPass->GetAttachmentInfo(attachment);
@@ -90,7 +90,9 @@
if (isFirstUse && shouldClearOnFirstUse) {
auto clearValue = currentFramebuffer->GetClearColor(location);
descriptor.colorAttachments[location].loadAction = MTLLoadActionClear;
- descriptor.colorAttachments[location].clearColor = MTLClearColorMake(clearValue.color[0], clearValue.color[1], clearValue.color[2], clearValue.color[3]);
+ descriptor.colorAttachments[location].clearColor =
+ MTLClearColorMake(clearValue.color[0], clearValue.color[1],
+ clearValue.color[2], clearValue.color[3]);
} else {
descriptor.colorAttachments[location].loadAction = MTLLoadActionLoad;
}
@@ -113,7 +115,8 @@
descriptor.depthAttachment.texture = texture;
descriptor.depthAttachment.storeAction = MTLStoreActionStore;
- bool shouldClearDepthOnFirstUse = attachmentInfo.depthLoadOp == nxt::LoadOp::Clear;
+ bool shouldClearDepthOnFirstUse =
+ attachmentInfo.depthLoadOp == nxt::LoadOp::Clear;
if (isFirstUse && shouldClearDepthOnFirstUse) {
descriptor.depthAttachment.loadAction = MTLLoadActionClear;
descriptor.depthAttachment.clearDepth = clearValues.depth;
@@ -126,7 +129,8 @@
descriptor.stencilAttachment.texture = texture;
descriptor.stencilAttachment.storeAction = MTLStoreActionStore;
- bool shouldClearStencilOnFirstUse = attachmentInfo.stencilLoadOp == nxt::LoadOp::Clear;
+ bool shouldClearStencilOnFirstUse =
+ attachmentInfo.stencilLoadOp == nxt::LoadOp::Clear;
if (isFirstUse && shouldClearStencilOnFirstUse) {
descriptor.stencilAttachment.loadAction = MTLLoadActionClear;
descriptor.stencilAttachment.clearStencil = clearValues.stencil;
@@ -149,7 +153,8 @@
}
CommandBuffer::CommandBuffer(CommandBufferBuilder* builder)
- : CommandBufferBase(builder), mDevice(ToBackend(builder->GetDevice())),
+ : CommandBufferBase(builder),
+ mDevice(ToBackend(builder->GetDevice())),
mCommands(builder->AcquireCommands()) {
}
@@ -172,431 +177,385 @@
uint32_t currentSubpass = 0;
while (mCommands.NextCommandId(&type)) {
switch (type) {
- case Command::BeginComputePass:
- {
- mCommands.NextCommand<BeginComputePassCmd>();
- encoders.BeginCompute(commandBuffer);
+ case Command::BeginComputePass: {
+ mCommands.NextCommand<BeginComputePassCmd>();
+ encoders.BeginCompute(commandBuffer);
- pushConstants[nxt::ShaderStage::Compute].fill(0);
- [encoders.compute setBytes: &pushConstants[nxt::ShaderStage::Compute]
- length: sizeof(uint32_t) * kMaxPushConstants
- atIndex: 0];
- }
- break;
+ pushConstants[nxt::ShaderStage::Compute].fill(0);
+ [encoders.compute setBytes:&pushConstants[nxt::ShaderStage::Compute]
+ length:sizeof(uint32_t) * kMaxPushConstants
+ atIndex:0];
+ } break;
- case Command::BeginRenderPass:
- {
- BeginRenderPassCmd* beginRenderPassCmd = mCommands.NextCommand<BeginRenderPassCmd>();
- encoders.currentRenderPass = ToBackend(beginRenderPassCmd->renderPass.Get());
- encoders.currentFramebuffer = ToBackend(beginRenderPassCmd->framebuffer.Get());
- encoders.EnsureNoBlitEncoder();
- currentSubpass = 0;
- }
- break;
+ case Command::BeginRenderPass: {
+ BeginRenderPassCmd* beginRenderPassCmd =
+ mCommands.NextCommand<BeginRenderPassCmd>();
+ encoders.currentRenderPass = ToBackend(beginRenderPassCmd->renderPass.Get());
+ encoders.currentFramebuffer = ToBackend(beginRenderPassCmd->framebuffer.Get());
+ encoders.EnsureNoBlitEncoder();
+ currentSubpass = 0;
+ } break;
- case Command::BeginRenderSubpass:
- {
- mCommands.NextCommand<BeginRenderSubpassCmd>();
- encoders.BeginSubpass(commandBuffer, currentSubpass);
+ case Command::BeginRenderSubpass: {
+ mCommands.NextCommand<BeginRenderSubpassCmd>();
+ encoders.BeginSubpass(commandBuffer, currentSubpass);
- pushConstants[nxt::ShaderStage::Vertex].fill(0);
- pushConstants[nxt::ShaderStage::Fragment].fill(0);
+ pushConstants[nxt::ShaderStage::Vertex].fill(0);
+ pushConstants[nxt::ShaderStage::Fragment].fill(0);
- [encoders.render setVertexBytes: &pushConstants[nxt::ShaderStage::Vertex]
- length: sizeof(uint32_t) * kMaxPushConstants
- atIndex: 0];
- [encoders.render setFragmentBytes: &pushConstants[nxt::ShaderStage::Fragment]
- length: sizeof(uint32_t) * kMaxPushConstants
- atIndex: 0];
- }
- break;
+ [encoders.render setVertexBytes:&pushConstants[nxt::ShaderStage::Vertex]
+ length:sizeof(uint32_t) * kMaxPushConstants
+ atIndex:0];
+ [encoders.render setFragmentBytes:&pushConstants[nxt::ShaderStage::Fragment]
+ length:sizeof(uint32_t) * kMaxPushConstants
+ atIndex:0];
+ } break;
- case Command::CopyBufferToBuffer:
- {
- CopyBufferToBufferCmd* copy = mCommands.NextCommand<CopyBufferToBufferCmd>();
- auto& src = copy->source;
- auto& dst = copy->destination;
+ case Command::CopyBufferToBuffer: {
+ CopyBufferToBufferCmd* copy = mCommands.NextCommand<CopyBufferToBufferCmd>();
+ auto& src = copy->source;
+ auto& dst = copy->destination;
- encoders.EnsureBlit(commandBuffer);
- [encoders.blit
- copyFromBuffer:ToBackend(src.buffer)->GetMTLBuffer()
- sourceOffset:src.offset
- toBuffer:ToBackend(dst.buffer)->GetMTLBuffer()
- destinationOffset:dst.offset
- size:copy->size];
- }
- break;
+ encoders.EnsureBlit(commandBuffer);
+ [encoders.blit copyFromBuffer:ToBackend(src.buffer)->GetMTLBuffer()
+ sourceOffset:src.offset
+ toBuffer:ToBackend(dst.buffer)->GetMTLBuffer()
+ destinationOffset:dst.offset
+ size:copy->size];
+ } break;
- case Command::CopyBufferToTexture:
- {
- CopyBufferToTextureCmd* copy = mCommands.NextCommand<CopyBufferToTextureCmd>();
- auto& src = copy->source;
- auto& dst = copy->destination;
- Buffer* buffer = ToBackend(src.buffer.Get());
- Texture* texture = ToBackend(dst.texture.Get());
+ case Command::CopyBufferToTexture: {
+ CopyBufferToTextureCmd* copy = mCommands.NextCommand<CopyBufferToTextureCmd>();
+ auto& src = copy->source;
+ auto& dst = copy->destination;
+ Buffer* buffer = ToBackend(src.buffer.Get());
+ Texture* texture = ToBackend(dst.texture.Get());
- MTLOrigin origin;
- origin.x = dst.x;
- origin.y = dst.y;
- origin.z = dst.z;
+ MTLOrigin origin;
+ origin.x = dst.x;
+ origin.y = dst.y;
+ origin.z = dst.z;
- MTLSize size;
- size.width = dst.width;
- size.height = dst.height;
- size.depth = dst.depth;
+ MTLSize size;
+ size.width = dst.width;
+ size.height = dst.height;
+ size.depth = dst.depth;
- encoders.EnsureBlit(commandBuffer);
- [encoders.blit
- copyFromBuffer:buffer->GetMTLBuffer()
- sourceOffset:src.offset
- sourceBytesPerRow:copy->rowPitch
- sourceBytesPerImage:(copy->rowPitch * dst.height)
- sourceSize:size
- toTexture:texture->GetMTLTexture()
- destinationSlice:0
- destinationLevel:dst.level
- destinationOrigin:origin];
- }
- break;
+ encoders.EnsureBlit(commandBuffer);
+ [encoders.blit copyFromBuffer:buffer->GetMTLBuffer()
+ sourceOffset:src.offset
+ sourceBytesPerRow:copy->rowPitch
+ sourceBytesPerImage:(copy->rowPitch * dst.height)
+ sourceSize:size
+ toTexture:texture->GetMTLTexture()
+ destinationSlice:0
+ destinationLevel:dst.level
+ destinationOrigin:origin];
+ } break;
- case Command::CopyTextureToBuffer:
- {
- CopyTextureToBufferCmd* copy = mCommands.NextCommand<CopyTextureToBufferCmd>();
- auto& src = copy->source;
- auto& dst = copy->destination;
- Texture* texture = ToBackend(src.texture.Get());
- Buffer* buffer = ToBackend(dst.buffer.Get());
+ case Command::CopyTextureToBuffer: {
+ CopyTextureToBufferCmd* copy = mCommands.NextCommand<CopyTextureToBufferCmd>();
+ auto& src = copy->source;
+ auto& dst = copy->destination;
+ Texture* texture = ToBackend(src.texture.Get());
+ Buffer* buffer = ToBackend(dst.buffer.Get());
- MTLOrigin origin;
- origin.x = src.x;
- origin.y = src.y;
- origin.z = src.z;
+ MTLOrigin origin;
+ origin.x = src.x;
+ origin.y = src.y;
+ origin.z = src.z;
- MTLSize size;
- size.width = src.width;
- size.height = src.height;
- size.depth = src.depth;
+ MTLSize size;
+ size.width = src.width;
+ size.height = src.height;
+ size.depth = src.depth;
- encoders.EnsureBlit(commandBuffer);
- [encoders.blit
- copyFromTexture:texture->GetMTLTexture()
- sourceSlice:0
- sourceLevel:src.level
- sourceOrigin:origin
- sourceSize:size
- toBuffer:buffer->GetMTLBuffer()
- destinationOffset:dst.offset
+ encoders.EnsureBlit(commandBuffer);
+ [encoders.blit copyFromTexture:texture->GetMTLTexture()
+ sourceSlice:0
+ sourceLevel:src.level
+ sourceOrigin:origin
+ sourceSize:size
+ toBuffer:buffer->GetMTLBuffer()
+ destinationOffset:dst.offset
destinationBytesPerRow:copy->rowPitch
- destinationBytesPerImage:copy->rowPitch * src.height];
- }
- break;
+ destinationBytesPerImage:copy->rowPitch * src.height];
+ } break;
- case Command::Dispatch:
- {
- DispatchCmd* dispatch = mCommands.NextCommand<DispatchCmd>();
- ASSERT(encoders.compute);
+ case Command::Dispatch: {
+ DispatchCmd* dispatch = mCommands.NextCommand<DispatchCmd>();
+ ASSERT(encoders.compute);
- [encoders.compute dispatchThreadgroups:MTLSizeMake(dispatch->x, dispatch->y, dispatch->z)
- threadsPerThreadgroup: lastComputePipeline->GetLocalWorkGroupSize()];
- }
- break;
+ [encoders.compute
+ dispatchThreadgroups:MTLSizeMake(dispatch->x, dispatch->y, dispatch->z)
+ threadsPerThreadgroup:lastComputePipeline->GetLocalWorkGroupSize()];
+ } break;
- case Command::DrawArrays:
- {
- DrawArraysCmd* draw = mCommands.NextCommand<DrawArraysCmd>();
+ case Command::DrawArrays: {
+ DrawArraysCmd* draw = mCommands.NextCommand<DrawArraysCmd>();
- ASSERT(encoders.render);
- [encoders.render
- drawPrimitives:lastRenderPipeline->GetMTLPrimitiveTopology()
- vertexStart:draw->firstVertex
- vertexCount:draw->vertexCount
- instanceCount:draw->instanceCount
- baseInstance:draw->firstInstance];
- }
- break;
+ ASSERT(encoders.render);
+ [encoders.render drawPrimitives:lastRenderPipeline->GetMTLPrimitiveTopology()
+ vertexStart:draw->firstVertex
+ vertexCount:draw->vertexCount
+ instanceCount:draw->instanceCount
+ baseInstance:draw->firstInstance];
+ } break;
- case Command::DrawElements:
- {
- DrawElementsCmd* draw = mCommands.NextCommand<DrawElementsCmd>();
+ case Command::DrawElements: {
+ DrawElementsCmd* draw = mCommands.NextCommand<DrawElementsCmd>();
- ASSERT(encoders.render);
- [encoders.render
- drawIndexedPrimitives:lastRenderPipeline->GetMTLPrimitiveTopology()
- indexCount:draw->indexCount
- indexType:lastRenderPipeline->GetMTLIndexType()
- indexBuffer:indexBuffer
+ ASSERT(encoders.render);
+ [encoders.render
+ drawIndexedPrimitives:lastRenderPipeline->GetMTLPrimitiveTopology()
+ indexCount:draw->indexCount
+ indexType:lastRenderPipeline->GetMTLIndexType()
+ indexBuffer:indexBuffer
indexBufferOffset:indexBufferOffset
- instanceCount:draw->instanceCount
- baseVertex:0
- baseInstance:draw->firstInstance];
- }
- break;
+ instanceCount:draw->instanceCount
+ baseVertex:0
+ baseInstance:draw->firstInstance];
+ } break;
- case Command::EndComputePass:
- {
- mCommands.NextCommand<EndComputePassCmd>();
- encoders.EndCompute();
- }
- break;
+ case Command::EndComputePass: {
+ mCommands.NextCommand<EndComputePassCmd>();
+ encoders.EndCompute();
+ } break;
- case Command::EndRenderPass:
- {
- mCommands.NextCommand<EndRenderPassCmd>();
- }
- break;
+ case Command::EndRenderPass: {
+ mCommands.NextCommand<EndRenderPassCmd>();
+ } break;
- case Command::EndRenderSubpass:
- {
- mCommands.NextCommand<EndRenderSubpassCmd>();
- encoders.EndSubpass();
- currentSubpass += 1;
- }
- break;
+ case Command::EndRenderSubpass: {
+ mCommands.NextCommand<EndRenderSubpassCmd>();
+ encoders.EndSubpass();
+ currentSubpass += 1;
+ } break;
- case Command::SetComputePipeline:
- {
- SetComputePipelineCmd* cmd = mCommands.NextCommand<SetComputePipelineCmd>();
- lastComputePipeline = ToBackend(cmd->pipeline).Get();
+ case Command::SetComputePipeline: {
+ SetComputePipelineCmd* cmd = mCommands.NextCommand<SetComputePipelineCmd>();
+ lastComputePipeline = ToBackend(cmd->pipeline).Get();
- ASSERT(encoders.compute);
- lastComputePipeline->Encode(encoders.compute);
- }
- break;
+ ASSERT(encoders.compute);
+ lastComputePipeline->Encode(encoders.compute);
+ } break;
- case Command::SetRenderPipeline:
- {
- SetRenderPipelineCmd* cmd = mCommands.NextCommand<SetRenderPipelineCmd>();
- lastRenderPipeline = ToBackend(cmd->pipeline).Get();
+ case Command::SetRenderPipeline: {
+ SetRenderPipelineCmd* cmd = mCommands.NextCommand<SetRenderPipelineCmd>();
+ lastRenderPipeline = ToBackend(cmd->pipeline).Get();
- ASSERT(encoders.render);
- DepthStencilState* depthStencilState = ToBackend(lastRenderPipeline->GetDepthStencilState());
- [encoders.render setDepthStencilState:depthStencilState->GetMTLDepthStencilState()];
- lastRenderPipeline->Encode(encoders.render);
- }
- break;
+ ASSERT(encoders.render);
+ DepthStencilState* depthStencilState =
+ ToBackend(lastRenderPipeline->GetDepthStencilState());
+ [encoders.render
+ setDepthStencilState:depthStencilState->GetMTLDepthStencilState()];
+ lastRenderPipeline->Encode(encoders.render);
+ } break;
- case Command::SetPushConstants:
- {
- SetPushConstantsCmd* cmd = mCommands.NextCommand<SetPushConstantsCmd>();
- uint32_t* values = mCommands.NextData<uint32_t>(cmd->count);
+ case Command::SetPushConstants: {
+ SetPushConstantsCmd* cmd = mCommands.NextCommand<SetPushConstantsCmd>();
+ uint32_t* values = mCommands.NextData<uint32_t>(cmd->count);
- for (auto stage : IterateStages(cmd->stages)) {
- memcpy(&pushConstants[stage][cmd->offset], values, cmd->count * sizeof(uint32_t));
+ for (auto stage : IterateStages(cmd->stages)) {
+ memcpy(&pushConstants[stage][cmd->offset], values,
+ cmd->count * sizeof(uint32_t));
- switch (stage) {
- case nxt::ShaderStage::Compute:
- ASSERT(encoders.compute);
- [encoders.compute setBytes: &pushConstants[nxt::ShaderStage::Compute]
- length: sizeof(uint32_t) * kMaxPushConstants
- atIndex: 0];
- break;
- case nxt::ShaderStage::Fragment:
- ASSERT(encoders.render);
- [encoders.render setFragmentBytes: &pushConstants[nxt::ShaderStage::Fragment]
- length: sizeof(uint32_t) * kMaxPushConstants
- atIndex: 0];
- break;
- case nxt::ShaderStage::Vertex:
- ASSERT(encoders.render);
- [encoders.render setVertexBytes: &pushConstants[nxt::ShaderStage::Vertex]
- length: sizeof(uint32_t) * kMaxPushConstants
- atIndex: 0];
- break;
- default:
- UNREACHABLE();
- break;
- }
+ switch (stage) {
+ case nxt::ShaderStage::Compute:
+ ASSERT(encoders.compute);
+ [encoders.compute setBytes:&pushConstants[nxt::ShaderStage::Compute]
+ length:sizeof(uint32_t) * kMaxPushConstants
+ atIndex:0];
+ break;
+ case nxt::ShaderStage::Fragment:
+ ASSERT(encoders.render);
+ [encoders.render
+ setFragmentBytes:&pushConstants[nxt::ShaderStage::Fragment]
+ length:sizeof(uint32_t) * kMaxPushConstants
+ atIndex:0];
+ break;
+ case nxt::ShaderStage::Vertex:
+ ASSERT(encoders.render);
+ [encoders.render
+ setVertexBytes:&pushConstants[nxt::ShaderStage::Vertex]
+ length:sizeof(uint32_t) * kMaxPushConstants
+ atIndex:0];
+ break;
+ default:
+ UNREACHABLE();
+ break;
}
}
- break;
+ } break;
- case Command::SetStencilReference:
- {
- SetStencilReferenceCmd* cmd = mCommands.NextCommand<SetStencilReferenceCmd>();
+ case Command::SetStencilReference: {
+ SetStencilReferenceCmd* cmd = mCommands.NextCommand<SetStencilReferenceCmd>();
- ASSERT(encoders.render);
+ ASSERT(encoders.render);
- [encoders.render setStencilReferenceValue:cmd->reference];
- }
- break;
+ [encoders.render setStencilReferenceValue:cmd->reference];
+ } break;
- case Command::SetBlendColor:
- {
- SetBlendColorCmd* cmd = mCommands.NextCommand<SetBlendColorCmd>();
+ case Command::SetBlendColor: {
+ SetBlendColorCmd* cmd = mCommands.NextCommand<SetBlendColorCmd>();
- ASSERT(encoders.render);
+ ASSERT(encoders.render);
- [encoders.render
- setBlendColorRed:cmd->r
- green:cmd->g
- blue:cmd->b
- alpha:cmd->a ];
- }
- break;
+ [encoders.render setBlendColorRed:cmd->r green:cmd->g blue:cmd->b alpha:cmd->a];
+ } break;
- case Command::SetBindGroup:
- {
- SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
- BindGroup* group = ToBackend(cmd->group.Get());
- uint32_t groupIndex = cmd->index;
+ case Command::SetBindGroup: {
+ SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
+ BindGroup* group = ToBackend(cmd->group.Get());
+ uint32_t groupIndex = cmd->index;
- const auto& layout = group->GetLayout()->GetBindingInfo();
+ const auto& layout = group->GetLayout()->GetBindingInfo();
- // TODO(kainino@chromium.org): Maintain buffers and offsets arrays in BindGroup so that we
- // only have to do one setVertexBuffers and one setFragmentBuffers call here.
- for (size_t binding = 0; binding < layout.mask.size(); ++binding) {
- if (!layout.mask[binding]) {
- continue;
- }
-
- auto stage = layout.visibilities[binding];
- bool vertStage = stage & nxt::ShaderStageBit::Vertex && lastRenderPipeline != nullptr;
- bool fragStage = stage & nxt::ShaderStageBit::Fragment && lastRenderPipeline != nullptr;
- bool computeStage = stage & nxt::ShaderStageBit::Compute && lastComputePipeline != nullptr;
- uint32_t vertIndex = 0;
- uint32_t fragIndex = 0;
- uint32_t computeIndex = 0;
- if (vertStage) {
- ASSERT(lastRenderPipeline != nullptr);
- vertIndex = ToBackend(lastRenderPipeline->GetLayout())->
- GetBindingIndexInfo(nxt::ShaderStage::Vertex)[groupIndex][binding];
- }
- if (fragStage) {
- ASSERT(lastRenderPipeline != nullptr);
- fragIndex = ToBackend(lastRenderPipeline->GetLayout())->
- GetBindingIndexInfo(nxt::ShaderStage::Fragment)[groupIndex][binding];
- }
- if (computeStage) {
- ASSERT(lastComputePipeline != nullptr);
- computeIndex = ToBackend(lastComputePipeline->GetLayout())->
- GetBindingIndexInfo(nxt::ShaderStage::Compute)[groupIndex][binding];
- }
-
- switch (layout.types[binding]) {
- case nxt::BindingType::UniformBuffer:
- case nxt::BindingType::StorageBuffer:
- {
- BufferView* view = ToBackend(group->GetBindingAsBufferView(binding));
- auto b = ToBackend(view->GetBuffer());
- const id<MTLBuffer> buffer = b->GetMTLBuffer();
- const NSUInteger offset = view->GetOffset();
- if (vertStage) {
- [encoders.render
- setVertexBuffers:&buffer
- offsets:&offset
- withRange:NSMakeRange(vertIndex, 1)];
- }
- if (fragStage) {
- [encoders.render
- setFragmentBuffers:&buffer
- offsets:&offset
- withRange:NSMakeRange(fragIndex, 1)];
- }
- if (computeStage) {
- [encoders.compute
- setBuffers:&buffer
- offsets:&offset
- withRange:NSMakeRange(computeIndex, 1)];
- }
-
- }
- break;
-
- case nxt::BindingType::Sampler:
- {
- auto sampler = ToBackend(group->GetBindingAsSampler(binding));
- if (vertStage) {
- [encoders.render
- setVertexSamplerState:sampler->GetMTLSamplerState()
- atIndex:vertIndex];
- }
- if (fragStage) {
- [encoders.render
- setFragmentSamplerState:sampler->GetMTLSamplerState()
- atIndex:fragIndex];
- }
- if (computeStage) {
- [encoders.compute
- setSamplerState:sampler->GetMTLSamplerState()
- atIndex:computeIndex];
- }
- }
- break;
-
- case nxt::BindingType::SampledTexture:
- {
- auto texture = ToBackend(group->GetBindingAsTextureView(binding)->GetTexture());
- if (vertStage) {
- [encoders.render
- setVertexTexture:texture->GetMTLTexture()
- atIndex:vertIndex];
- }
- if (fragStage) {
- [encoders.render
- setFragmentTexture:texture->GetMTLTexture()
- atIndex:fragIndex];
- }
- if (computeStage) {
- [encoders.compute
- setTexture:texture->GetMTLTexture()
- atIndex:computeIndex];
- }
- }
- break;
- }
- }
- }
- break;
-
- case Command::SetIndexBuffer:
- {
- SetIndexBufferCmd* cmd = mCommands.NextCommand<SetIndexBufferCmd>();
- auto b = ToBackend(cmd->buffer.Get());
- indexBuffer = b->GetMTLBuffer();
- indexBufferOffset = cmd->offset;
- }
- break;
-
- case Command::SetVertexBuffers:
- {
- SetVertexBuffersCmd* cmd = mCommands.NextCommand<SetVertexBuffersCmd>();
- auto buffers = mCommands.NextData<Ref<BufferBase>>(cmd->count);
- auto offsets = mCommands.NextData<uint32_t>(cmd->count);
-
- std::array<id<MTLBuffer>, kMaxVertexInputs> mtlBuffers;
- std::array<NSUInteger, kMaxVertexInputs> mtlOffsets;
-
- // Perhaps an "array of vertex buffers(+offsets?)" should be
- // a NXT API primitive to avoid reconstructing this array?
- for (uint32_t i = 0; i < cmd->count; ++i) {
- Buffer* buffer = ToBackend(buffers[i].Get());
- mtlBuffers[i] = buffer->GetMTLBuffer();
- mtlOffsets[i] = offsets[i];
+ // TODO(kainino@chromium.org): Maintain buffers and offsets arrays in BindGroup
+ // so that we only have to do one setVertexBuffers and one setFragmentBuffers
+ // call here.
+ for (size_t binding = 0; binding < layout.mask.size(); ++binding) {
+ if (!layout.mask[binding]) {
+ continue;
}
- ASSERT(encoders.render);
- [encoders.render
- setVertexBuffers:mtlBuffers.data()
- offsets:mtlOffsets.data()
- withRange:NSMakeRange(kMaxBindingsPerGroup + cmd->startSlot, cmd->count)];
+ auto stage = layout.visibilities[binding];
+ bool vertStage =
+ stage & nxt::ShaderStageBit::Vertex && lastRenderPipeline != nullptr;
+ bool fragStage =
+ stage & nxt::ShaderStageBit::Fragment && lastRenderPipeline != nullptr;
+ bool computeStage =
+ stage & nxt::ShaderStageBit::Compute && lastComputePipeline != nullptr;
+ uint32_t vertIndex = 0;
+ uint32_t fragIndex = 0;
+ uint32_t computeIndex = 0;
+ if (vertStage) {
+ ASSERT(lastRenderPipeline != nullptr);
+ vertIndex = ToBackend(lastRenderPipeline->GetLayout())
+ ->GetBindingIndexInfo(
+ nxt::ShaderStage::Vertex)[groupIndex][binding];
+ }
+ if (fragStage) {
+ ASSERT(lastRenderPipeline != nullptr);
+ fragIndex = ToBackend(lastRenderPipeline->GetLayout())
+ ->GetBindingIndexInfo(
+ nxt::ShaderStage::Fragment)[groupIndex][binding];
+ }
+ if (computeStage) {
+ ASSERT(lastComputePipeline != nullptr);
+ computeIndex = ToBackend(lastComputePipeline->GetLayout())
+ ->GetBindingIndexInfo(
+ nxt::ShaderStage::Compute)[groupIndex][binding];
+ }
+
+ switch (layout.types[binding]) {
+ case nxt::BindingType::UniformBuffer:
+ case nxt::BindingType::StorageBuffer: {
+ BufferView* view =
+ ToBackend(group->GetBindingAsBufferView(binding));
+ auto b = ToBackend(view->GetBuffer());
+ const id<MTLBuffer> buffer = b->GetMTLBuffer();
+ const NSUInteger offset = view->GetOffset();
+ if (vertStage) {
+ [encoders.render setVertexBuffers:&buffer
+ offsets:&offset
+ withRange:NSMakeRange(vertIndex, 1)];
+ }
+ if (fragStage) {
+ [encoders.render setFragmentBuffers:&buffer
+ offsets:&offset
+ withRange:NSMakeRange(fragIndex, 1)];
+ }
+ if (computeStage) {
+ [encoders.compute setBuffers:&buffer
+ offsets:&offset
+ withRange:NSMakeRange(computeIndex, 1)];
+ }
+
+ } break;
+
+ case nxt::BindingType::Sampler: {
+ auto sampler = ToBackend(group->GetBindingAsSampler(binding));
+ if (vertStage) {
+ [encoders.render
+ setVertexSamplerState:sampler->GetMTLSamplerState()
+ atIndex:vertIndex];
+ }
+ if (fragStage) {
+ [encoders.render
+ setFragmentSamplerState:sampler->GetMTLSamplerState()
+ atIndex:fragIndex];
+ }
+ if (computeStage) {
+ [encoders.compute setSamplerState:sampler->GetMTLSamplerState()
+ atIndex:computeIndex];
+ }
+ } break;
+
+ case nxt::BindingType::SampledTexture: {
+ auto texture = ToBackend(
+ group->GetBindingAsTextureView(binding)->GetTexture());
+ if (vertStage) {
+ [encoders.render setVertexTexture:texture->GetMTLTexture()
+ atIndex:vertIndex];
+ }
+ if (fragStage) {
+ [encoders.render setFragmentTexture:texture->GetMTLTexture()
+ atIndex:fragIndex];
+ }
+ if (computeStage) {
+ [encoders.compute setTexture:texture->GetMTLTexture()
+ atIndex:computeIndex];
+ }
+ } break;
+ }
}
- break;
+ } break;
- case Command::TransitionBufferUsage:
- {
- TransitionBufferUsageCmd* cmd = mCommands.NextCommand<TransitionBufferUsageCmd>();
+ case Command::SetIndexBuffer: {
+ SetIndexBufferCmd* cmd = mCommands.NextCommand<SetIndexBufferCmd>();
+ auto b = ToBackend(cmd->buffer.Get());
+ indexBuffer = b->GetMTLBuffer();
+ indexBufferOffset = cmd->offset;
+ } break;
- cmd->buffer->UpdateUsageInternal(cmd->usage);
+ case Command::SetVertexBuffers: {
+ SetVertexBuffersCmd* cmd = mCommands.NextCommand<SetVertexBuffersCmd>();
+ auto buffers = mCommands.NextData<Ref<BufferBase>>(cmd->count);
+ auto offsets = mCommands.NextData<uint32_t>(cmd->count);
+
+ std::array<id<MTLBuffer>, kMaxVertexInputs> mtlBuffers;
+ std::array<NSUInteger, kMaxVertexInputs> mtlOffsets;
+
+ // Perhaps an "array of vertex buffers(+offsets?)" should be
+ // a NXT API primitive to avoid reconstructing this array?
+ for (uint32_t i = 0; i < cmd->count; ++i) {
+ Buffer* buffer = ToBackend(buffers[i].Get());
+ mtlBuffers[i] = buffer->GetMTLBuffer();
+ mtlOffsets[i] = offsets[i];
}
- break;
- case Command::TransitionTextureUsage:
- {
- TransitionTextureUsageCmd* cmd = mCommands.NextCommand<TransitionTextureUsageCmd>();
+ ASSERT(encoders.render);
+ [encoders.render
+ setVertexBuffers:mtlBuffers.data()
+ offsets:mtlOffsets.data()
+ withRange:NSMakeRange(kMaxBindingsPerGroup + cmd->startSlot,
+ cmd->count)];
+ } break;
- cmd->texture->UpdateUsageInternal(cmd->usage);
- }
- break;
+ case Command::TransitionBufferUsage: {
+ TransitionBufferUsageCmd* cmd =
+ mCommands.NextCommand<TransitionBufferUsageCmd>();
+
+ cmd->buffer->UpdateUsageInternal(cmd->usage);
+ } break;
+
+ case Command::TransitionTextureUsage: {
+ TransitionTextureUsageCmd* cmd =
+ mCommands.NextCommand<TransitionTextureUsageCmd>();
+
+ cmd->texture->UpdateUsageInternal(cmd->usage);
+ } break;
}
}
@@ -605,5 +564,4 @@
ASSERT(encoders.compute == nil);
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/ComputePipelineMTL.h b/src/backend/metal/ComputePipelineMTL.h
index 5af9542..a1f957d 100644
--- a/src/backend/metal/ComputePipelineMTL.h
+++ b/src/backend/metal/ComputePipelineMTL.h
@@ -19,23 +19,21 @@
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class ComputePipeline : public ComputePipelineBase {
- public:
- ComputePipeline(ComputePipelineBuilder* builder);
- ~ComputePipeline();
+ public:
+ ComputePipeline(ComputePipelineBuilder* builder);
+ ~ComputePipeline();
- void Encode(id<MTLComputeCommandEncoder> encoder);
- MTLSize GetLocalWorkGroupSize() const;
+ void Encode(id<MTLComputeCommandEncoder> encoder);
+ MTLSize GetLocalWorkGroupSize() const;
- private:
- id<MTLComputePipelineState> mMtlComputePipelineState = nil;
- MTLSize mLocalWorkgroupSize;
+ private:
+ id<MTLComputePipelineState> mMtlComputePipelineState = nil;
+ MTLSize mLocalWorkgroupSize;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_COMPUTEPIPELINEMTL_H_
+#endif // BACKEND_METAL_COMPUTEPIPELINEMTL_H_
diff --git a/src/backend/metal/ComputePipelineMTL.mm b/src/backend/metal/ComputePipelineMTL.mm
index ed067d8..05432cf 100644
--- a/src/backend/metal/ComputePipelineMTL.mm
+++ b/src/backend/metal/ComputePipelineMTL.mm
@@ -17,12 +17,10 @@
#include "backend/metal/MetalBackend.h"
#include "backend/metal/ShaderModuleMTL.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
ComputePipeline::ComputePipeline(ComputePipelineBuilder* builder)
: ComputePipelineBase(builder) {
-
auto mtlDevice = ToBackend(builder->GetDevice())->GetMTLDevice();
const auto& module = ToBackend(builder->GetStageInfo(nxt::ShaderStage::Compute).module);
@@ -30,9 +28,9 @@
auto compilationData = module->GetFunction(entryPoint.c_str(), ToBackend(GetLayout()));
- NSError *error = nil;
- mMtlComputePipelineState = [mtlDevice
- newComputePipelineStateWithFunction:compilationData.function error:&error];
+ NSError* error = nil;
+ mMtlComputePipelineState =
+ [mtlDevice newComputePipelineStateWithFunction:compilationData.function error:&error];
if (error != nil) {
NSLog(@" error => %@", error);
builder->HandleError("Error creating pipeline state");
@@ -55,5 +53,4 @@
return mLocalWorkgroupSize;
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/DepthStencilStateMTL.h b/src/backend/metal/DepthStencilStateMTL.h
index 2208df0..8fa5646 100644
--- a/src/backend/metal/DepthStencilStateMTL.h
+++ b/src/backend/metal/DepthStencilStateMTL.h
@@ -19,23 +19,21 @@
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class Device;
class DepthStencilState : public DepthStencilStateBase {
- public:
- DepthStencilState(DepthStencilStateBuilder* builder);
- ~DepthStencilState();
+ public:
+ DepthStencilState(DepthStencilStateBuilder* builder);
+ ~DepthStencilState();
- id<MTLDepthStencilState> GetMTLDepthStencilState();
+ id<MTLDepthStencilState> GetMTLDepthStencilState();
- private:
- id<MTLDepthStencilState> mMtlDepthStencilState = nil;
+ private:
+ id<MTLDepthStencilState> mMtlDepthStencilState = nil;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_DEPTHSTENCILSTATEMTL_H_
+#endif // BACKEND_METAL_DEPTHSTENCILSTATEMTL_H_
diff --git a/src/backend/metal/DepthStencilStateMTL.mm b/src/backend/metal/DepthStencilStateMTL.mm
index 8b456e6..d9a6454 100644
--- a/src/backend/metal/DepthStencilStateMTL.mm
+++ b/src/backend/metal/DepthStencilStateMTL.mm
@@ -16,8 +16,7 @@
#include "backend/metal/MetalBackend.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
namespace {
MTLCompareFunction MetalDepthStencilCompareFunction(nxt::CompareFunction compareFunction) {
@@ -68,7 +67,8 @@
MTLDepthStencilDescriptor* mtlDepthStencilDescriptor = [MTLDepthStencilDescriptor new];
auto& depth = GetDepth();
- mtlDepthStencilDescriptor.depthCompareFunction = MetalDepthStencilCompareFunction(depth.compareFunction);
+ mtlDepthStencilDescriptor.depthCompareFunction =
+ MetalDepthStencilCompareFunction(depth.compareFunction);
mtlDepthStencilDescriptor.depthWriteEnabled = depth.depthWriteEnabled;
auto& stencil = GetStencil();
@@ -76,17 +76,23 @@
MTLStencilDescriptor* backFaceStencil = [MTLStencilDescriptor new];
MTLStencilDescriptor* frontFaceStencil = [MTLStencilDescriptor new];
- backFaceStencil.stencilCompareFunction = MetalDepthStencilCompareFunction(stencil.back.compareFunction);
- backFaceStencil.stencilFailureOperation = MetalStencilOperation(stencil.back.stencilFail);
+ backFaceStencil.stencilCompareFunction =
+ MetalDepthStencilCompareFunction(stencil.back.compareFunction);
+ backFaceStencil.stencilFailureOperation =
+ MetalStencilOperation(stencil.back.stencilFail);
backFaceStencil.depthFailureOperation = MetalStencilOperation(stencil.back.depthFail);
- backFaceStencil.depthStencilPassOperation = MetalStencilOperation(stencil.back.depthStencilPass);
+ backFaceStencil.depthStencilPassOperation =
+ MetalStencilOperation(stencil.back.depthStencilPass);
backFaceStencil.readMask = stencil.readMask;
backFaceStencil.writeMask = stencil.writeMask;
- frontFaceStencil.stencilCompareFunction = MetalDepthStencilCompareFunction(stencil.front.compareFunction);
- frontFaceStencil.stencilFailureOperation = MetalStencilOperation(stencil.front.stencilFail);
+ frontFaceStencil.stencilCompareFunction =
+ MetalDepthStencilCompareFunction(stencil.front.compareFunction);
+ frontFaceStencil.stencilFailureOperation =
+ MetalStencilOperation(stencil.front.stencilFail);
frontFaceStencil.depthFailureOperation = MetalStencilOperation(stencil.front.depthFail);
- frontFaceStencil.depthStencilPassOperation = MetalStencilOperation(stencil.front.depthStencilPass);
+ frontFaceStencil.depthStencilPassOperation =
+ MetalStencilOperation(stencil.front.depthStencilPass);
frontFaceStencil.readMask = stencil.readMask;
frontFaceStencil.writeMask = stencil.writeMask;
@@ -97,7 +103,8 @@
}
auto mtlDevice = ToBackend(builder->GetDevice())->GetMTLDevice();
- mMtlDepthStencilState = [mtlDevice newDepthStencilStateWithDescriptor:mtlDepthStencilDescriptor];
+ mMtlDepthStencilState =
+ [mtlDevice newDepthStencilStateWithDescriptor:mtlDepthStencilDescriptor];
[mtlDepthStencilDescriptor release];
}
@@ -110,5 +117,4 @@
return mMtlDepthStencilState;
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/GeneratedCodeIncludes.h b/src/backend/metal/GeneratedCodeIncludes.h
index c68905b..19e1b95 100644
--- a/src/backend/metal/GeneratedCodeIncludes.h
+++ b/src/backend/metal/GeneratedCodeIncludes.h
@@ -12,13 +12,13 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-#include "backend/metal/MetalBackend.h"
#include "backend/metal/BlendStateMTL.h"
#include "backend/metal/BufferMTL.h"
#include "backend/metal/CommandBufferMTL.h"
#include "backend/metal/ComputePipelineMTL.h"
#include "backend/metal/DepthStencilStateMTL.h"
#include "backend/metal/InputStateMTL.h"
+#include "backend/metal/MetalBackend.h"
#include "backend/metal/PipelineLayoutMTL.h"
#include "backend/metal/RenderPipelineMTL.h"
#include "backend/metal/SamplerMTL.h"
diff --git a/src/backend/metal/InputStateMTL.h b/src/backend/metal/InputStateMTL.h
index c9dd096..f8be98e 100644
--- a/src/backend/metal/InputStateMTL.h
+++ b/src/backend/metal/InputStateMTL.h
@@ -19,21 +19,19 @@
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class InputState : public InputStateBase {
- public:
- InputState(InputStateBuilder* builder);
- ~InputState();
+ public:
+ InputState(InputStateBuilder* builder);
+ ~InputState();
- MTLVertexDescriptor* GetMTLVertexDescriptor();
+ MTLVertexDescriptor* GetMTLVertexDescriptor();
- private:
- MTLVertexDescriptor* mMtlVertexDescriptor = nil;
+ private:
+ MTLVertexDescriptor* mMtlVertexDescriptor = nil;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_COMMANDINPUTSTATEMTL_H_
+#endif // BACKEND_METAL_COMMANDINPUTSTATEMTL_H_
diff --git a/src/backend/metal/InputStateMTL.mm b/src/backend/metal/InputStateMTL.mm
index 9bbfa43..27cf220 100644
--- a/src/backend/metal/InputStateMTL.mm
+++ b/src/backend/metal/InputStateMTL.mm
@@ -17,8 +17,7 @@
#include "backend/metal/MetalBackend.h"
#include "common/BitSetIterator.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
namespace {
MTLVertexFormat VertexFormatType(nxt::VertexFormat format) {
@@ -44,8 +43,7 @@
}
}
- InputState::InputState(InputStateBuilder* builder)
- : InputStateBase(builder) {
+ InputState::InputState(InputStateBuilder* builder) : InputStateBase(builder) {
mMtlVertexDescriptor = [MTLVertexDescriptor new];
const auto& attributesSetMask = GetAttributesSetMask();
@@ -95,5 +93,4 @@
return mMtlVertexDescriptor;
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/MetalBackend.h b/src/backend/metal/MetalBackend.h
index 0f58bf4..af95438 100644
--- a/src/backend/metal/MetalBackend.h
+++ b/src/backend/metal/MetalBackend.h
@@ -26,12 +26,11 @@
#include "backend/ToBackend.h"
#include "common/Serial.h"
-#include <type_traits>
#import <Metal/Metal.h>
#import <QuartzCore/CAMetalLayer.h>
+#include <type_traits>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class BindGroup;
class BindGroupLayout;
@@ -77,7 +76,7 @@
using TextureViewType = TextureView;
};
- template<typename T>
+ template <typename T>
auto ToBackend(T&& common) -> decltype(ToBackendBase<MetalBackendTraits>(common)) {
return ToBackendBase<MetalBackendTraits>(common);
}
@@ -86,91 +85,90 @@
class ResourceUploader;
class Device : public DeviceBase {
- public:
- Device(id<MTLDevice> mtlDevice);
- ~Device();
+ public:
+ Device(id<MTLDevice> mtlDevice);
+ ~Device();
- BindGroupBase* CreateBindGroup(BindGroupBuilder* builder) override;
- BindGroupLayoutBase* CreateBindGroupLayout(BindGroupLayoutBuilder* builder) override;
- BlendStateBase* CreateBlendState(BlendStateBuilder* builder) override;
- BufferBase* CreateBuffer(BufferBuilder* builder) override;
- BufferViewBase* CreateBufferView(BufferViewBuilder* builder) override;
- CommandBufferBase* CreateCommandBuffer(CommandBufferBuilder* builder) override;
- ComputePipelineBase* CreateComputePipeline(ComputePipelineBuilder* builder) override;
- DepthStencilStateBase* CreateDepthStencilState(DepthStencilStateBuilder* builder) override;
- InputStateBase* CreateInputState(InputStateBuilder* builder) override;
- FramebufferBase* CreateFramebuffer(FramebufferBuilder* builder) override;
- PipelineLayoutBase* CreatePipelineLayout(PipelineLayoutBuilder* builder) override;
- QueueBase* CreateQueue(QueueBuilder* builder) override;
- RenderPassBase* CreateRenderPass(RenderPassBuilder* builder) override;
- RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
- SamplerBase* CreateSampler(SamplerBuilder* builder) override;
- ShaderModuleBase* CreateShaderModule(ShaderModuleBuilder* builder) override;
- SwapChainBase* CreateSwapChain(SwapChainBuilder* builder) override;
- TextureBase* CreateTexture(TextureBuilder* builder) override;
- TextureViewBase* CreateTextureView(TextureViewBuilder* builder) override;
+ BindGroupBase* CreateBindGroup(BindGroupBuilder* builder) override;
+ BindGroupLayoutBase* CreateBindGroupLayout(BindGroupLayoutBuilder* builder) override;
+ BlendStateBase* CreateBlendState(BlendStateBuilder* builder) override;
+ BufferBase* CreateBuffer(BufferBuilder* builder) override;
+ BufferViewBase* CreateBufferView(BufferViewBuilder* builder) override;
+ CommandBufferBase* CreateCommandBuffer(CommandBufferBuilder* builder) override;
+ ComputePipelineBase* CreateComputePipeline(ComputePipelineBuilder* builder) override;
+ DepthStencilStateBase* CreateDepthStencilState(DepthStencilStateBuilder* builder) override;
+ InputStateBase* CreateInputState(InputStateBuilder* builder) override;
+ FramebufferBase* CreateFramebuffer(FramebufferBuilder* builder) override;
+ PipelineLayoutBase* CreatePipelineLayout(PipelineLayoutBuilder* builder) override;
+ QueueBase* CreateQueue(QueueBuilder* builder) override;
+ RenderPassBase* CreateRenderPass(RenderPassBuilder* builder) override;
+ RenderPipelineBase* CreateRenderPipeline(RenderPipelineBuilder* builder) override;
+ SamplerBase* CreateSampler(SamplerBuilder* builder) override;
+ ShaderModuleBase* CreateShaderModule(ShaderModuleBuilder* builder) override;
+ SwapChainBase* CreateSwapChain(SwapChainBuilder* builder) override;
+ TextureBase* CreateTexture(TextureBuilder* builder) override;
+ TextureViewBase* CreateTextureView(TextureViewBuilder* builder) override;
- void TickImpl() override;
+ void TickImpl() override;
- id<MTLDevice> GetMTLDevice();
+ id<MTLDevice> GetMTLDevice();
- id<MTLCommandBuffer> GetPendingCommandBuffer();
- void SubmitPendingCommandBuffer();
- Serial GetPendingCommandSerial();
+ id<MTLCommandBuffer> GetPendingCommandBuffer();
+ void SubmitPendingCommandBuffer();
+ Serial GetPendingCommandSerial();
- MapReadRequestTracker* GetMapReadTracker() const;
- ResourceUploader* GetResourceUploader() const;
+ MapReadRequestTracker* GetMapReadTracker() const;
+ ResourceUploader* GetResourceUploader() const;
- private:
- void OnCompletedHandler();
+ private:
+ void OnCompletedHandler();
- id<MTLDevice> mMtlDevice = nil;
- id<MTLCommandQueue> mCommandQueue = nil;
- MapReadRequestTracker* mMapReadTracker;
- ResourceUploader* mResourceUploader;
+ id<MTLDevice> mMtlDevice = nil;
+ id<MTLCommandQueue> mCommandQueue = nil;
+ MapReadRequestTracker* mMapReadTracker;
+ ResourceUploader* mResourceUploader;
- Serial mFinishedCommandSerial = 0;
- Serial mPendingCommandSerial = 1;
- id<MTLCommandBuffer> mPendingCommands = nil;
+ Serial mFinishedCommandSerial = 0;
+ Serial mPendingCommandSerial = 1;
+ id<MTLCommandBuffer> mPendingCommands = nil;
};
class BindGroup : public BindGroupBase {
- public:
- BindGroup(BindGroupBuilder* builder);
+ public:
+ BindGroup(BindGroupBuilder* builder);
};
class BindGroupLayout : public BindGroupLayoutBase {
- public:
- BindGroupLayout(BindGroupLayoutBuilder* builder);
+ public:
+ BindGroupLayout(BindGroupLayoutBuilder* builder);
};
class Framebuffer : public FramebufferBase {
- public:
- Framebuffer(FramebufferBuilder* builder);
- ~Framebuffer();
+ public:
+ Framebuffer(FramebufferBuilder* builder);
+ ~Framebuffer();
};
class Queue : public QueueBase {
- public:
- Queue(QueueBuilder* builder);
- ~Queue();
+ public:
+ Queue(QueueBuilder* builder);
+ ~Queue();
- id<MTLCommandQueue> GetMTLCommandQueue();
+ id<MTLCommandQueue> GetMTLCommandQueue();
- // NXT API
- void Submit(uint32_t numCommands, CommandBuffer* const * commands);
+ // NXT API
+ void Submit(uint32_t numCommands, CommandBuffer* const* commands);
- private:
- id<MTLCommandQueue> mCommandQueue = nil;
+ private:
+ id<MTLCommandQueue> mCommandQueue = nil;
};
class RenderPass : public RenderPassBase {
- public:
- RenderPass(RenderPassBuilder* builder);
- ~RenderPass();
+ public:
+ RenderPass(RenderPassBuilder* builder);
+ ~RenderPass();
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_METALBACKEND_H_
+#endif // BACKEND_METAL_METALBACKEND_H_
diff --git a/src/backend/metal/MetalBackend.mm b/src/backend/metal/MetalBackend.mm
index 6053b96..0d1e1df 100644
--- a/src/backend/metal/MetalBackend.mm
+++ b/src/backend/metal/MetalBackend.mm
@@ -20,8 +20,8 @@
#include "backend/metal/ComputePipelineMTL.h"
#include "backend/metal/DepthStencilStateMTL.h"
#include "backend/metal/InputStateMTL.h"
-#include "backend/metal/RenderPipelineMTL.h"
#include "backend/metal/PipelineLayoutMTL.h"
+#include "backend/metal/RenderPipelineMTL.h"
#include "backend/metal/ResourceUploader.h"
#include "backend/metal/SamplerMTL.h"
#include "backend/metal/ShaderModuleMTL.h"
@@ -30,8 +30,7 @@
#include <unistd.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
nxtProcTable GetNonValidatingProcs();
nxtProcTable GetValidatingProcs();
@@ -45,18 +44,18 @@
// Device
Device::Device(id<MTLDevice> mtlDevice)
- : mMtlDevice(mtlDevice), mMapReadTracker(new MapReadRequestTracker(this)),
- mResourceUploader(new ResourceUploader(this)) {
+ : mMtlDevice(mtlDevice),
+ mMapReadTracker(new MapReadRequestTracker(this)),
+ mResourceUploader(new ResourceUploader(this)) {
[mMtlDevice retain];
mCommandQueue = [mMtlDevice newCommandQueue];
}
Device::~Device() {
- // Wait for all commands to be finished so we can free resources
- // SubmitPendingCommandBuffer may not increment the pendingCommandSerial if there
- // are no pending commands, so we can't store the pendingSerial before
- // SubmitPendingCommandBuffer then wait for it to be passed. Instead we submit and
- // wait for the serial before the next pendingCommandSerial.
+ // Wait for all commands to be finished so we can free resources SubmitPendingCommandBuffer
+ // may not increment the pendingCommandSerial if there are no pending commands, so we can't
+ // store the pendingSerial before SubmitPendingCommandBuffer then wait for it to be passed.
+ // Instead we submit and wait for the serial before the next pendingCommandSerial.
SubmitPendingCommandBuffer();
while (mFinishedCommandSerial != mPendingCommandSerial - 1) {
usleep(100);
@@ -165,7 +164,8 @@
// Ok, ObjC blocks are weird. My understanding is that local variables are captured by value
// so this-> works as expected. However it is unclear how members are captured, (are they
- // captured using this-> or by value?) so we make a copy of the pendingCommandSerial on the stack.
+ // captured using this-> or by value?) so we make a copy of the pendingCommandSerial on the
+ // stack.
Serial pendingSerial = mPendingCommandSerial;
[mPendingCommands addCompletedHandler:^(id<MTLCommandBuffer>) {
this->mFinishedCommandSerial = pendingSerial;
@@ -174,14 +174,14 @@
[mPendingCommands commit];
[mPendingCommands release];
mPendingCommands = nil;
- mPendingCommandSerial ++;
+ mPendingCommandSerial++;
}
uint64_t Device::GetPendingCommandSerial() {
- // If this is called, then it means some piece of code somewhere will wait for this serial to
- // complete. Make sure the pending command buffer is created so that it is on the worst case
- // enqueued on the next Tick() and eventually increments the serial. Otherwise if no GPU work
- // happens we could be waiting for this serial forever.
+ // If this is called, then it means some piece of code somewhere will wait for this serial
+ // to complete. Make sure the pending command buffer is created so that it is on the worst
+ // case enqueued on the next Tick() and eventually increments the serial. Otherwise if no
+ // GPU work happens we could be waiting for this serial forever.
GetPendingCommandBuffer();
return mPendingCommandSerial;
}
@@ -196,8 +196,7 @@
// Bind Group
- BindGroup::BindGroup(BindGroupBuilder* builder)
- : BindGroupBase(builder) {
+ BindGroup::BindGroup(BindGroupBuilder* builder) : BindGroupBase(builder) {
}
// Bind Group Layout
@@ -208,8 +207,7 @@
// Framebuffer
- Framebuffer::Framebuffer(FramebufferBuilder* builder)
- : FramebufferBase(builder) {
+ Framebuffer::Framebuffer(FramebufferBuilder* builder) : FramebufferBase(builder) {
}
Framebuffer::~Framebuffer() {
@@ -217,8 +215,7 @@
// Queue
- Queue::Queue(QueueBuilder* builder)
- : QueueBase(builder) {
+ Queue::Queue(QueueBuilder* builder) : QueueBase(builder) {
Device* device = ToBackend(builder->GetDevice());
mCommandQueue = [device->GetMTLDevice() newCommandQueue];
}
@@ -232,7 +229,7 @@
return mCommandQueue;
}
- void Queue::Submit(uint32_t numCommands, CommandBuffer* const * commands) {
+ void Queue::Submit(uint32_t numCommands, CommandBuffer* const* commands) {
Device* device = ToBackend(GetDevice());
id<MTLCommandBuffer> commandBuffer = device->GetPendingCommandBuffer();
@@ -245,12 +242,10 @@
// RenderPass
- RenderPass::RenderPass(RenderPassBuilder* builder)
- : RenderPassBase(builder) {
+ RenderPass::RenderPass(RenderPassBuilder* builder) : RenderPassBase(builder) {
}
RenderPass::~RenderPass() {
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/PipelineLayoutMTL.h b/src/backend/metal/PipelineLayoutMTL.h
index 4598e2a..16f42f9 100644
--- a/src/backend/metal/PipelineLayoutMTL.h
+++ b/src/backend/metal/PipelineLayoutMTL.h
@@ -25,21 +25,20 @@
class CompilerMSL;
}
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class PipelineLayout : public PipelineLayoutBase {
- public:
- PipelineLayout(PipelineLayoutBuilder* builder);
+ public:
+ PipelineLayout(PipelineLayoutBuilder* builder);
- using BindingIndexInfo = std::array<std::array<uint32_t, kMaxBindingsPerGroup>, kMaxBindGroups>;
- const BindingIndexInfo& GetBindingIndexInfo(nxt::ShaderStage stage) const;
+ using BindingIndexInfo =
+ std::array<std::array<uint32_t, kMaxBindingsPerGroup>, kMaxBindGroups>;
+ const BindingIndexInfo& GetBindingIndexInfo(nxt::ShaderStage stage) const;
- private:
- PerStage<BindingIndexInfo> mIndexInfo;
+ private:
+ PerStage<BindingIndexInfo> mIndexInfo;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_PIPELINELAYOUTMTL_H_
+#endif // BACKEND_METAL_PIPELINELAYOUTMTL_H_
diff --git a/src/backend/metal/PipelineLayoutMTL.mm b/src/backend/metal/PipelineLayoutMTL.mm
index 749e3c9..297449d 100644
--- a/src/backend/metal/PipelineLayoutMTL.mm
+++ b/src/backend/metal/PipelineLayoutMTL.mm
@@ -16,11 +16,9 @@
#include "backend/metal/MetalBackend.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
- PipelineLayout::PipelineLayout(PipelineLayoutBuilder* builder)
- : PipelineLayoutBase(builder) {
+ PipelineLayout::PipelineLayout(PipelineLayoutBuilder* builder) : PipelineLayoutBase(builder) {
// Each stage has its own numbering namespace in CompilerMSL.
for (auto stage : IterateStages(kAllStages)) {
// Buffer number 0 is reserved for push constants
@@ -58,9 +56,9 @@
}
}
- const PipelineLayout::BindingIndexInfo& PipelineLayout::GetBindingIndexInfo(nxt::ShaderStage stage) const {
+ const PipelineLayout::BindingIndexInfo& PipelineLayout::GetBindingIndexInfo(
+ nxt::ShaderStage stage) const {
return mIndexInfo[stage];
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/RenderPipelineMTL.h b/src/backend/metal/RenderPipelineMTL.h
index 6233890..174bf90 100644
--- a/src/backend/metal/RenderPipelineMTL.h
+++ b/src/backend/metal/RenderPipelineMTL.h
@@ -19,26 +19,24 @@
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class RenderPipeline : public RenderPipelineBase {
- public:
- RenderPipeline(RenderPipelineBuilder* builder);
- ~RenderPipeline();
+ public:
+ RenderPipeline(RenderPipelineBuilder* builder);
+ ~RenderPipeline();
- MTLIndexType GetMTLIndexType() const;
- MTLPrimitiveType GetMTLPrimitiveTopology() const;
+ MTLIndexType GetMTLIndexType() const;
+ MTLPrimitiveType GetMTLPrimitiveTopology() const;
- void Encode(id<MTLRenderCommandEncoder> encoder);
+ void Encode(id<MTLRenderCommandEncoder> encoder);
- private:
- MTLIndexType mMtlIndexType;
- MTLPrimitiveType mMtlPrimitiveTopology;
- id<MTLRenderPipelineState> mMtlRenderPipelineState = nil;
+ private:
+ MTLIndexType mMtlIndexType;
+ MTLPrimitiveType mMtlPrimitiveTopology;
+ id<MTLRenderPipelineState> mMtlRenderPipelineState = nil;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_RENDERPIPELINEMTL_H_
+#endif // BACKEND_METAL_RENDERPIPELINEMTL_H_
diff --git a/src/backend/metal/RenderPipelineMTL.mm b/src/backend/metal/RenderPipelineMTL.mm
index 289fd31..920613c 100644
--- a/src/backend/metal/RenderPipelineMTL.mm
+++ b/src/backend/metal/RenderPipelineMTL.mm
@@ -22,8 +22,7 @@
#include "backend/metal/ShaderModuleMTL.h"
#include "backend/metal/TextureMTL.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
namespace {
MTLPrimitiveType MTLPrimitiveTopology(nxt::PrimitiveTopology primitiveTopology) {
@@ -41,7 +40,8 @@
}
}
- MTLPrimitiveTopologyClass MTLInputPrimitiveTopology(nxt::PrimitiveTopology primitiveTopology) {
+ MTLPrimitiveTopologyClass MTLInputPrimitiveTopology(
+ nxt::PrimitiveTopology primitiveTopology) {
switch (primitiveTopology) {
case nxt::PrimitiveTopology::PointList:
return MTLPrimitiveTopologyClassPoint;
@@ -68,7 +68,6 @@
: RenderPipelineBase(builder),
mMtlIndexType(MTLIndexFormat(GetIndexFormat())),
mMtlPrimitiveTopology(MTLPrimitiveTopology(GetPrimitiveTopology())) {
-
auto mtlDevice = ToBackend(builder->GetDevice())->GetMTLDevice();
MTLRenderPipelineDescriptor* descriptor = [MTLRenderPipelineDescriptor new];
@@ -77,7 +76,8 @@
const auto& module = ToBackend(builder->GetStageInfo(stage).module);
const auto& entryPoint = builder->GetStageInfo(stage).entryPoint;
- id<MTLFunction> function = module->GetFunction(entryPoint.c_str(), ToBackend(GetLayout())).function;
+ id<MTLFunction> function =
+ module->GetFunction(entryPoint.c_str(), ToBackend(GetLayout())).function;
switch (stage) {
case nxt::ShaderStage::Vertex:
@@ -95,7 +95,8 @@
auto& subpassInfo = renderPass->GetSubpassInfo(GetSubPass());
if (subpassInfo.depthStencilAttachmentSet) {
- const auto& attachmentInfo = renderPass->GetAttachmentInfo(subpassInfo.depthStencilAttachment);
+ const auto& attachmentInfo =
+ renderPass->GetAttachmentInfo(subpassInfo.depthStencilAttachment);
descriptor.depthAttachmentPixelFormat = MetalPixelFormat(attachmentInfo.format);
descriptor.stencilAttachmentPixelFormat = MetalPixelFormat(attachmentInfo.format);
}
@@ -104,8 +105,10 @@
uint32_t attachment = subpassInfo.colorAttachments[attachmentSlot];
const auto& attachmentInfo = renderPass->GetAttachmentInfo(attachment);
- descriptor.colorAttachments[attachmentSlot].pixelFormat = MetalPixelFormat(attachmentInfo.format);
- ToBackend(GetBlendState(attachmentSlot))->ApplyBlendState(descriptor.colorAttachments[attachmentSlot]);
+ descriptor.colorAttachments[attachmentSlot].pixelFormat =
+ MetalPixelFormat(attachmentInfo.format);
+ ToBackend(GetBlendState(attachmentSlot))
+ ->ApplyBlendState(descriptor.colorAttachments[attachmentSlot]);
}
descriptor.inputPrimitiveTopology = MTLInputPrimitiveTopology(GetPrimitiveTopology());
@@ -115,9 +118,9 @@
// TODO(kainino@chromium.org): push constants, textures, samplers
- NSError *error = nil;
- mMtlRenderPipelineState = [mtlDevice
- newRenderPipelineStateWithDescriptor:descriptor error:&error];
+ NSError* error = nil;
+ mMtlRenderPipelineState =
+ [mtlDevice newRenderPipelineStateWithDescriptor:descriptor error:&error];
if (error != nil) {
NSLog(@" error => %@", error);
builder->HandleError("Error creating pipeline state");
@@ -144,5 +147,4 @@
[encoder setRenderPipelineState:mMtlRenderPipelineState];
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/ResourceUploader.h b/src/backend/metal/ResourceUploader.h
index e87526d..b9ebb18 100644
--- a/src/backend/metal/ResourceUploader.h
+++ b/src/backend/metal/ResourceUploader.h
@@ -20,26 +20,23 @@
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class Device;
class ResourceUploader {
- public:
- ResourceUploader(Device* device);
- ~ResourceUploader();
+ public:
+ ResourceUploader(Device* device);
+ ~ResourceUploader();
- void BufferSubData(id<MTLBuffer> buffer, uint32_t start, uint32_t size, const void* data);
- void Tick(Serial finishedSerial);
+ void BufferSubData(id<MTLBuffer> buffer, uint32_t start, uint32_t size, const void* data);
+ void Tick(Serial finishedSerial);
- private:
- Device* mDevice;
- SerialQueue<id<MTLBuffer>> mInflightUploadBuffers;
+ private:
+ Device* mDevice;
+ SerialQueue<id<MTLBuffer>> mInflightUploadBuffers;
};
+}} // namespace backend::metal
-}
-}
-
-#endif // BACKEND_METAL_RESOURCEUPLOADER_H_
+#endif // BACKEND_METAL_RESOURCEUPLOADER_H_
diff --git a/src/backend/metal/ResourceUploader.mm b/src/backend/metal/ResourceUploader.mm
index d0a58f3..b077d9a 100644
--- a/src/backend/metal/ResourceUploader.mm
+++ b/src/backend/metal/ResourceUploader.mm
@@ -16,30 +16,32 @@
#include "backend/metal/MetalBackend.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
- ResourceUploader::ResourceUploader(Device* device)
- : mDevice(device) {
+ ResourceUploader::ResourceUploader(Device* device) : mDevice(device) {
}
ResourceUploader::~ResourceUploader() {
ASSERT(mInflightUploadBuffers.Empty());
}
- void ResourceUploader::BufferSubData(id<MTLBuffer> buffer, uint32_t start, uint32_t size, const void* data) {
- // TODO(cwallez@chromium.org) use a ringbuffer instead of creating a small buffer for each update
- id<MTLBuffer> uploadBuffer = [mDevice->GetMTLDevice() newBufferWithLength:size
- options:MTLResourceStorageModeShared];
+ void ResourceUploader::BufferSubData(id<MTLBuffer> buffer,
+ uint32_t start,
+ uint32_t size,
+ const void* data) {
+ // TODO(cwallez@chromium.org) use a ringbuffer instead of creating a small buffer for each
+ // update
+ id<MTLBuffer> uploadBuffer =
+ [mDevice->GetMTLDevice() newBufferWithLength:size options:MTLResourceStorageModeShared];
memcpy([uploadBuffer contents], data, size);
id<MTLCommandBuffer> commandBuffer = mDevice->GetPendingCommandBuffer();
id<MTLBlitCommandEncoder> encoder = [commandBuffer blitCommandEncoder];
[encoder copyFromBuffer:uploadBuffer
- sourceOffset:0
- toBuffer:buffer
- destinationOffset:start
- size:size];
+ sourceOffset:0
+ toBuffer:buffer
+ destinationOffset:start
+ size:size];
[encoder endEncoding];
mInflightUploadBuffers.Enqueue(uploadBuffer, mDevice->GetPendingCommandSerial());
@@ -52,5 +54,4 @@
mInflightUploadBuffers.ClearUpTo(finishedSerial);
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/SamplerMTL.h b/src/backend/metal/SamplerMTL.h
index 23a64f5..a44b152 100644
--- a/src/backend/metal/SamplerMTL.h
+++ b/src/backend/metal/SamplerMTL.h
@@ -19,21 +19,19 @@
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class Sampler : public SamplerBase {
- public:
- Sampler(SamplerBuilder* builder);
- ~Sampler();
+ public:
+ Sampler(SamplerBuilder* builder);
+ ~Sampler();
- id<MTLSamplerState> GetMTLSamplerState();
+ id<MTLSamplerState> GetMTLSamplerState();
- private:
- id<MTLSamplerState> mMtlSamplerState = nil;
+ private:
+ id<MTLSamplerState> mMtlSamplerState = nil;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_SAMPLERMTL_H_
+#endif // BACKEND_METAL_SAMPLERMTL_H_
diff --git a/src/backend/metal/SamplerMTL.mm b/src/backend/metal/SamplerMTL.mm
index 8408343..6d66b12 100644
--- a/src/backend/metal/SamplerMTL.mm
+++ b/src/backend/metal/SamplerMTL.mm
@@ -16,8 +16,7 @@
#include "backend/metal/MetalBackend.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
namespace {
MTLSamplerMinMagFilter FilterModeToMinMagFilter(nxt::FilterMode mode) {
@@ -39,8 +38,7 @@
}
}
- Sampler::Sampler(SamplerBuilder* builder)
- : SamplerBase(builder) {
+ Sampler::Sampler(SamplerBuilder* builder) : SamplerBase(builder) {
auto desc = [MTLSamplerDescriptor new];
[desc autorelease];
desc.minFilter = FilterModeToMinMagFilter(builder->GetMinFilter());
@@ -60,5 +58,4 @@
return mMtlSamplerState;
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/ShaderModuleMTL.h b/src/backend/metal/ShaderModuleMTL.h
index 984c9c5..163acc6 100644
--- a/src/backend/metal/ShaderModuleMTL.h
+++ b/src/backend/metal/ShaderModuleMTL.h
@@ -23,29 +23,27 @@
class CompilerMSL;
}
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class PipelineLayout;
class ShaderModule : public ShaderModuleBase {
- public:
- ShaderModule(ShaderModuleBuilder* builder);
+ public:
+ ShaderModule(ShaderModuleBuilder* builder);
- struct MetalFunctionData {
- id<MTLFunction> function;
- MTLSize localWorkgroupSize;
- };
- MetalFunctionData GetFunction(const char* functionName, const PipelineLayout* layout) const;
+ struct MetalFunctionData {
+ id<MTLFunction> function;
+ MTLSize localWorkgroupSize;
+ };
+ MetalFunctionData GetFunction(const char* functionName, const PipelineLayout* layout) const;
- private:
- // Calling compile on CompilerMSL somehow changes internal state that makes subsequent
- // compiles return invalid MSL. We keep the spirv around and recreate the compiler everytime
- // we need to use it.
- std::vector<uint32_t> mSpirv;
+ private:
+ // Calling compile on CompilerMSL somehow changes internal state that makes subsequent
+ // compiles return invalid MSL. We keep the spirv around and recreate the compiler everytime
+ // we need to use it.
+ std::vector<uint32_t> mSpirv;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_SHADERMODULEMTL_H_
+#endif // BACKEND_METAL_SHADERMODULEMTL_H_
diff --git a/src/backend/metal/ShaderModuleMTL.mm b/src/backend/metal/ShaderModuleMTL.mm
index 51645f7..ecd921e 100644
--- a/src/backend/metal/ShaderModuleMTL.mm
+++ b/src/backend/metal/ShaderModuleMTL.mm
@@ -21,13 +21,12 @@
#include <sstream>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
namespace {
spv::ExecutionModel SpirvExecutionModelForStage(nxt::ShaderStage stage) {
- switch(stage) {
+ switch (stage) {
case nxt::ShaderStage::Vertex:
return spv::ExecutionModelVertex;
case nxt::ShaderStage::Fragment:
@@ -38,7 +37,6 @@
UNREACHABLE();
}
}
-
}
ShaderModule::ShaderModule(ShaderModuleBuilder* builder)
@@ -69,10 +67,8 @@
// Create one resource binding entry per stage per binding.
for (uint32_t group : IterateBitSet(layout->GetBindGroupsLayoutMask())) {
-
const auto& bgInfo = layout->GetBindGroupLayout(group)->GetBindingInfo();
for (uint32_t binding : IterateBitSet(bgInfo.mask)) {
-
for (auto stage : IterateStages(bgInfo.visibilities[binding])) {
uint32_t index = layout->GetBindingIndexInfo(stage)[group][binding];
@@ -101,13 +97,15 @@
NSString* mslSource = [NSString stringWithFormat:@"%s", msl.c_str()];
auto mtlDevice = ToBackend(GetDevice())->GetMTLDevice();
- NSError *error = nil;
- id<MTLLibrary> library = [mtlDevice newLibraryWithSource:mslSource options:nil error:&error];
+ NSError* error = nil;
+ id<MTLLibrary> library =
+ [mtlDevice newLibraryWithSource:mslSource options:nil error:&error];
if (error != nil) {
// TODO(cwallez@chromium.org): forward errors to caller
NSLog(@"MTLDevice newLibraryWithSource => %@", error);
}
- // TODO(kainino@chromium.org): make this somehow more robust; it needs to behave like clean_func_name:
+ // TODO(kainino@chromium.org): make this somehow more robust; it needs to behave like
+ // clean_func_name:
// https://github.com/KhronosGroup/SPIRV-Cross/blob/4e915e8c483e319d0dd7a1fa22318bef28f8cca3/spirv_msl.cpp#L1213
if (strcmp(functionName, "main") == 0) {
functionName = "main0";
@@ -121,5 +119,4 @@
return result;
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/SwapChainMTL.h b/src/backend/metal/SwapChainMTL.h
index 35c4d5e..a20e811 100644
--- a/src/backend/metal/SwapChainMTL.h
+++ b/src/backend/metal/SwapChainMTL.h
@@ -17,21 +17,19 @@
#include "backend/SwapChain.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
class Device;
class SwapChain : public SwapChainBase {
- public:
- SwapChain(SwapChainBuilder* builder);
- ~SwapChain();
+ public:
+ SwapChain(SwapChainBuilder* builder);
+ ~SwapChain();
- protected:
- TextureBase* GetNextTextureImpl(TextureBuilder* builder) override;
+ protected:
+ TextureBase* GetNextTextureImpl(TextureBuilder* builder) override;
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_SWAPCHAINGL_H_
+#endif // BACKEND_METAL_SWAPCHAINGL_H_
diff --git a/src/backend/metal/SwapChainMTL.mm b/src/backend/metal/SwapChainMTL.mm
index 91d1d92..6fa1e8e 100644
--- a/src/backend/metal/SwapChainMTL.mm
+++ b/src/backend/metal/SwapChainMTL.mm
@@ -19,11 +19,9 @@
#include <nxt/nxt_wsi.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
- SwapChain::SwapChain(SwapChainBuilder* builder)
- : SwapChainBase(builder) {
+ SwapChain::SwapChain(SwapChainBuilder* builder) : SwapChainBase(builder) {
const auto& im = GetImplementation();
nxtWSIContextMetal wsiContext = {};
wsiContext.device = ToBackend(GetDevice())->GetMTLDevice();
@@ -46,5 +44,4 @@
return new Texture(builder, nativeTexture);
}
-}
-}
+}} // namespace backend::metal
diff --git a/src/backend/metal/TextureMTL.h b/src/backend/metal/TextureMTL.h
index 04822b2..2619c2c 100644
--- a/src/backend/metal/TextureMTL.h
+++ b/src/backend/metal/TextureMTL.h
@@ -19,31 +19,30 @@
#import <Metal/Metal.h>
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
MTLPixelFormat MetalPixelFormat(nxt::TextureFormat format);
class Texture : public TextureBase {
- public:
- Texture(TextureBuilder* builder);
- Texture(TextureBuilder* builder, id<MTLTexture> mtlTexture);
- ~Texture();
+ public:
+ Texture(TextureBuilder* builder);
+ Texture(TextureBuilder* builder, id<MTLTexture> mtlTexture);
+ ~Texture();
- id<MTLTexture> GetMTLTexture();
+ id<MTLTexture> GetMTLTexture();
- void TransitionUsageImpl(nxt::TextureUsageBit currentUsage, nxt::TextureUsageBit targetUsage) override;
+ void TransitionUsageImpl(nxt::TextureUsageBit currentUsage,
+ nxt::TextureUsageBit targetUsage) override;
- private:
- id<MTLTexture> mMtlTexture = nil;
+ private:
+ id<MTLTexture> mMtlTexture = nil;
};
class TextureView : public TextureViewBase {
- public:
- TextureView(TextureViewBuilder* builder);
+ public:
+ TextureView(TextureViewBuilder* builder);
};
-}
-}
+}} // namespace backend::metal
-#endif // BACKEND_METAL_TEXTUREMTL_H_
+#endif // BACKEND_METAL_TEXTUREMTL_H_
diff --git a/src/backend/metal/TextureMTL.mm b/src/backend/metal/TextureMTL.mm
index 00755de..034eb7f 100644
--- a/src/backend/metal/TextureMTL.mm
+++ b/src/backend/metal/TextureMTL.mm
@@ -16,8 +16,7 @@
#include "backend/metal/MetalBackend.h"
-namespace backend {
-namespace metal {
+namespace backend { namespace metal {
MTLPixelFormat MetalPixelFormat(nxt::TextureFormat format) {
switch (format) {
@@ -34,7 +33,7 @@
namespace {
MTLTextureUsage MetalTextureUsage(nxt::TextureUsageBit usage) {
- MTLTextureUsage result = MTLTextureUsageUnknown; // This is 0
+ MTLTextureUsage result = MTLTextureUsageUnknown; // This is 0
if (usage & (nxt::TextureUsageBit::Storage)) {
result |= MTLTextureUsageShaderWrite | MTLTextureUsageShaderRead;
@@ -59,8 +58,7 @@
}
}
- Texture::Texture(TextureBuilder* builder)
- : TextureBase(builder) {
+ Texture::Texture(TextureBuilder* builder) : TextureBase(builder) {
auto desc = [MTLTextureDescriptor new];
[desc autorelease];
desc.textureType = MetalTextureType(GetDimension());
@@ -93,8 +91,7 @@
void Texture::TransitionUsageImpl(nxt::TextureUsageBit, nxt::TextureUsageBit) {
}
- TextureView::TextureView(TextureViewBuilder* builder)
- : TextureViewBase(builder) {
+ TextureView::TextureView(TextureViewBuilder* builder) : TextureViewBase(builder) {
}
-}
-}
+
+}} // namespace backend::metal