From 0f2e7b67c117192e14bb01d1f0f51d312c18097d Mon Sep 17 00:00:00 2001 From: Corentin Wallez Date: Mon, 18 Jun 2018 18:19:31 -0400 Subject: [PATCH] Metal: Split MetalBackend in Forward.h and DeviceMTL --- src/backend/CMakeLists.txt | 5 +- src/backend/metal/BlendStateMTL.mm | 2 - src/backend/metal/BufferMTL.mm | 2 +- src/backend/metal/CommandBufferMTL.mm | 3 +- src/backend/metal/ComputePipelineMTL.mm | 2 +- src/backend/metal/DepthStencilStateMTL.mm | 2 +- .../metal/{MetalBackend.h => DeviceMTL.h} | 77 ++---------------- .../metal/{MetalBackend.mm => DeviceMTL.mm} | 25 +----- src/backend/metal/Forward.h | 78 +++++++++++++++++++ src/backend/metal/GeneratedCodeIncludes.h | 5 +- src/backend/metal/InputStateMTL.mm | 1 - src/backend/metal/PipelineLayoutMTL.mm | 2 +- src/backend/metal/RenderPipelineMTL.mm | 2 +- src/backend/metal/ResourceUploader.mm | 2 +- src/backend/metal/SamplerMTL.mm | 2 +- src/backend/metal/ShaderModuleMTL.mm | 3 +- src/backend/metal/SwapChainMTL.mm | 2 +- src/backend/metal/TextureMTL.mm | 2 +- 18 files changed, 107 insertions(+), 110 deletions(-) rename src/backend/metal/{MetalBackend.h => DeviceMTL.h} (60%) rename src/backend/metal/{MetalBackend.mm => DeviceMTL.mm} (93%) create mode 100644 src/backend/metal/Forward.h diff --git a/src/backend/CMakeLists.txt b/src/backend/CMakeLists.txt index 5ddeea6a2a..e9b2d8e285 100644 --- a/src/backend/CMakeLists.txt +++ b/src/backend/CMakeLists.txt @@ -124,10 +124,11 @@ if (NXT_ENABLE_METAL) ${METAL_DIR}/ComputePipelineMTL.h ${METAL_DIR}/DepthStencilStateMTL.mm ${METAL_DIR}/DepthStencilStateMTL.h + ${METAL_DIR}/DeviceMTL.mm + ${METAL_DIR}/DeviceMTL.h + ${METAL_DIR}/Forward.h ${METAL_DIR}/InputStateMTL.mm ${METAL_DIR}/InputStateMTL.h - ${METAL_DIR}/MetalBackend.mm - ${METAL_DIR}/MetalBackend.h ${METAL_DIR}/PipelineLayoutMTL.mm ${METAL_DIR}/PipelineLayoutMTL.h ${METAL_DIR}/RenderPipelineMTL.mm diff --git a/src/backend/metal/BlendStateMTL.mm b/src/backend/metal/BlendStateMTL.mm index 6da499ca44..be35400d0e 100644 --- a/src/backend/metal/BlendStateMTL.mm +++ b/src/backend/metal/BlendStateMTL.mm @@ -14,8 +14,6 @@ #include "backend/metal/BlendStateMTL.h" -#include "backend/metal/MetalBackend.h" - namespace backend { namespace metal { namespace { diff --git a/src/backend/metal/BufferMTL.mm b/src/backend/metal/BufferMTL.mm index 29ceeea9f6..d9a11c9639 100644 --- a/src/backend/metal/BufferMTL.mm +++ b/src/backend/metal/BufferMTL.mm @@ -14,7 +14,7 @@ #include "backend/metal/BufferMTL.h" -#include "backend/metal/MetalBackend.h" +#include "backend/metal/DeviceMTL.h" #include "backend/metal/ResourceUploader.h" namespace backend { namespace metal { diff --git a/src/backend/metal/CommandBufferMTL.mm b/src/backend/metal/CommandBufferMTL.mm index e4a6ac0e45..4b04a11598 100644 --- a/src/backend/metal/CommandBufferMTL.mm +++ b/src/backend/metal/CommandBufferMTL.mm @@ -14,12 +14,13 @@ #include "backend/metal/CommandBufferMTL.h" +#include "backend/BindGroup.h" #include "backend/Commands.h" #include "backend/metal/BufferMTL.h" #include "backend/metal/ComputePipelineMTL.h" #include "backend/metal/DepthStencilStateMTL.h" +#include "backend/metal/DeviceMTL.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/ComputePipelineMTL.mm b/src/backend/metal/ComputePipelineMTL.mm index 05432cf6ec..ef3c6a4b37 100644 --- a/src/backend/metal/ComputePipelineMTL.mm +++ b/src/backend/metal/ComputePipelineMTL.mm @@ -14,7 +14,7 @@ #include "backend/metal/ComputePipelineMTL.h" -#include "backend/metal/MetalBackend.h" +#include "backend/metal/DeviceMTL.h" #include "backend/metal/ShaderModuleMTL.h" namespace backend { namespace metal { diff --git a/src/backend/metal/DepthStencilStateMTL.mm b/src/backend/metal/DepthStencilStateMTL.mm index d9a645403c..d430c46675 100644 --- a/src/backend/metal/DepthStencilStateMTL.mm +++ b/src/backend/metal/DepthStencilStateMTL.mm @@ -14,7 +14,7 @@ #include "backend/metal/DepthStencilStateMTL.h" -#include "backend/metal/MetalBackend.h" +#include "backend/metal/DeviceMTL.h" namespace backend { namespace metal { diff --git a/src/backend/metal/MetalBackend.h b/src/backend/metal/DeviceMTL.h similarity index 60% rename from src/backend/metal/MetalBackend.h rename to src/backend/metal/DeviceMTL.h index b9d72b4dd7..cba124a635 100644 --- a/src/backend/metal/MetalBackend.h +++ b/src/backend/metal/DeviceMTL.h @@ -1,4 +1,4 @@ -// Copyright 2017 The NXT Authors +// Copyright 2018 The NXT Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,17 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BACKEND_METAL_METALBACKEND_H_ -#define BACKEND_METAL_METALBACKEND_H_ +#ifndef BACKEND_METAL_DEVICEMTL_H_ +#define BACKEND_METAL_DEVICEMTL_H_ #include "nxt/nxtcpp.h" -#include "backend/BindGroup.h" -#include "backend/BindGroupLayout.h" #include "backend/Device.h" #include "backend/Queue.h" -#include "backend/RenderPassDescriptor.h" -#include "backend/ToBackend.h" +#include "backend/metal/Forward.h" #include "common/Serial.h" #import @@ -31,54 +28,6 @@ namespace backend { namespace metal { - class BindGroup; - class BindGroupLayout; - class BlendState; - class Buffer; - class BufferView; - class CommandBuffer; - class ComputePipeline; - class DepthStencilState; - class Device; - class Framebuffer; - class InputState; - class PipelineLayout; - class Queue; - class RenderPassDescriptor; - class RenderPipeline; - class Sampler; - class ShaderModule; - class SwapChain; - class Texture; - class TextureView; - - struct MetalBackendTraits { - using BindGroupType = BindGroup; - using BindGroupLayoutType = BindGroupLayout; - using BlendStateType = BlendState; - using BufferType = Buffer; - using BufferViewType = BufferView; - using CommandBufferType = CommandBuffer; - using ComputePipelineType = ComputePipeline; - using DepthStencilStateType = DepthStencilState; - using DeviceType = Device; - using InputStateType = InputState; - using PipelineLayoutType = PipelineLayout; - using QueueType = Queue; - using RenderPassDescriptorType = RenderPassDescriptor; - using RenderPipelineType = RenderPipeline; - using SamplerType = Sampler; - using ShaderModuleType = ShaderModule; - using SwapChainType = SwapChain; - using TextureType = Texture; - using TextureViewType = TextureView; - }; - - template - auto ToBackend(T&& common) -> decltype(ToBackendBase(common)) { - return ToBackendBase(common); - } - class MapRequestTracker; class ResourceUploader; @@ -133,16 +82,6 @@ namespace backend { namespace metal { id mPendingCommands = nil; }; - class BindGroup : public BindGroupBase { - public: - BindGroup(BindGroupBuilder* builder); - }; - - class BindGroupLayout : public BindGroupLayoutBase { - public: - BindGroupLayout(BindGroupLayoutBuilder* builder); - }; - class Queue : public QueueBase { public: Queue(Device* device); @@ -151,12 +90,6 @@ namespace backend { namespace metal { void Submit(uint32_t numCommands, CommandBuffer* const* commands); }; - class RenderPassDescriptor : public RenderPassDescriptorBase { - public: - RenderPassDescriptor(RenderPassDescriptorBuilder* builder); - ~RenderPassDescriptor(); - }; - }} // namespace backend::metal -#endif // BACKEND_METAL_METALBACKEND_H_ +#endif // BACKEND_METAL_DEVICEMTL_H_ diff --git a/src/backend/metal/MetalBackend.mm b/src/backend/metal/DeviceMTL.mm similarity index 93% rename from src/backend/metal/MetalBackend.mm rename to src/backend/metal/DeviceMTL.mm index 30cb797a72..04defa87eb 100644 --- a/src/backend/metal/MetalBackend.mm +++ b/src/backend/metal/DeviceMTL.mm @@ -12,8 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "backend/metal/MetalBackend.h" +#include "backend/metal/DeviceMTL.h" +#include "backend/BindGroup.h" +#include "backend/BindGroupLayout.h" +#include "backend/RenderPassDescriptor.h" #include "backend/metal/BlendStateMTL.h" #include "backend/metal/BufferMTL.h" #include "backend/metal/CommandBufferMTL.h" @@ -190,17 +193,6 @@ namespace backend { namespace metal { return mResourceUploader; } - // Bind Group - - BindGroup::BindGroup(BindGroupBuilder* builder) : BindGroupBase(builder) { - } - - // Bind Group Layout - - BindGroupLayout::BindGroupLayout(BindGroupLayoutBuilder* builder) - : BindGroupLayoutBase(builder) { - } - // Queue Queue::Queue(Device* device) : QueueBase(device) { @@ -218,13 +210,4 @@ namespace backend { namespace metal { device->SubmitPendingCommandBuffer(); } - // RenderPass - - RenderPassDescriptor::RenderPassDescriptor(RenderPassDescriptorBuilder* builder) - : RenderPassDescriptorBase(builder) { - } - - RenderPassDescriptor::~RenderPassDescriptor() { - } - }} // namespace backend::metal diff --git a/src/backend/metal/Forward.h b/src/backend/metal/Forward.h new file mode 100644 index 0000000000..284ebcb26e --- /dev/null +++ b/src/backend/metal/Forward.h @@ -0,0 +1,78 @@ +// Copyright 2018 The NXT Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef BACKEND_METAL_FORWARD_H_ +#define BACKEND_METAL_FORWARD_H_ + +#include "backend/ToBackend.h" + +namespace { + class BindGroupBase; + class BindGroup; + class RenderPassDescriptor; +} // namespace + +namespace backend { namespace metal { + + using BindGroup = BindGroupBase; + using BindGroupLayout = BindGroupLayoutBase; + class BlendState; + class Buffer; + class BufferView; + class CommandBuffer; + class ComputePipeline; + class DepthStencilState; + class Device; + class Framebuffer; + class InputState; + class PipelineLayout; + class Queue; + using RenderPassDescriptor = RenderPassDescriptorBase; + class RenderPipeline; + class Sampler; + class ShaderModule; + class SwapChain; + class Texture; + class TextureView; + + struct MetalBackendTraits { + using BindGroupType = BindGroup; + using BindGroupLayoutType = BindGroupLayout; + using BlendStateType = BlendState; + using BufferType = Buffer; + using BufferViewType = BufferView; + using CommandBufferType = CommandBuffer; + using ComputePipelineType = ComputePipeline; + using DepthStencilStateType = DepthStencilState; + using DeviceType = Device; + using InputStateType = InputState; + using PipelineLayoutType = PipelineLayout; + using QueueType = Queue; + using RenderPassDescriptorType = RenderPassDescriptor; + using RenderPipelineType = RenderPipeline; + using SamplerType = Sampler; + using ShaderModuleType = ShaderModule; + using SwapChainType = SwapChain; + using TextureType = Texture; + using TextureViewType = TextureView; + }; + + template + auto ToBackend(T&& common) -> decltype(ToBackendBase(common)) { + return ToBackendBase(common); + } + +}} // namespace backend::metal + +#endif // BACKEND_METAL_FORWARD_H_ diff --git a/src/backend/metal/GeneratedCodeIncludes.h b/src/backend/metal/GeneratedCodeIncludes.h index 19e1b95f09..55afeb0efb 100644 --- a/src/backend/metal/GeneratedCodeIncludes.h +++ b/src/backend/metal/GeneratedCodeIncludes.h @@ -12,13 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "backend/BindGroup.h" +#include "backend/BindGroupLayout.h" +#include "backend/RenderPassDescriptor.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/DeviceMTL.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.mm b/src/backend/metal/InputStateMTL.mm index 23c8f115db..542b945c16 100644 --- a/src/backend/metal/InputStateMTL.mm +++ b/src/backend/metal/InputStateMTL.mm @@ -14,7 +14,6 @@ #include "backend/metal/InputStateMTL.h" -#include "backend/metal/MetalBackend.h" #include "common/BitSetIterator.h" namespace backend { namespace metal { diff --git a/src/backend/metal/PipelineLayoutMTL.mm b/src/backend/metal/PipelineLayoutMTL.mm index 297449dfa5..f0bedbcc61 100644 --- a/src/backend/metal/PipelineLayoutMTL.mm +++ b/src/backend/metal/PipelineLayoutMTL.mm @@ -14,7 +14,7 @@ #include "backend/metal/PipelineLayoutMTL.h" -#include "backend/metal/MetalBackend.h" +#include "backend/BindGroupLayout.h" namespace backend { namespace metal { diff --git a/src/backend/metal/RenderPipelineMTL.mm b/src/backend/metal/RenderPipelineMTL.mm index af564c8b0d..65928e1b33 100644 --- a/src/backend/metal/RenderPipelineMTL.mm +++ b/src/backend/metal/RenderPipelineMTL.mm @@ -16,8 +16,8 @@ #include "backend/metal/BlendStateMTL.h" #include "backend/metal/DepthStencilStateMTL.h" +#include "backend/metal/DeviceMTL.h" #include "backend/metal/InputStateMTL.h" -#include "backend/metal/MetalBackend.h" #include "backend/metal/PipelineLayoutMTL.h" #include "backend/metal/ShaderModuleMTL.h" #include "backend/metal/TextureMTL.h" diff --git a/src/backend/metal/ResourceUploader.mm b/src/backend/metal/ResourceUploader.mm index b077d9acfa..7b53c1505a 100644 --- a/src/backend/metal/ResourceUploader.mm +++ b/src/backend/metal/ResourceUploader.mm @@ -14,7 +14,7 @@ #include "backend/metal/ResourceUploader.h" -#include "backend/metal/MetalBackend.h" +#include "backend/metal/DeviceMTL.h" namespace backend { namespace metal { diff --git a/src/backend/metal/SamplerMTL.mm b/src/backend/metal/SamplerMTL.mm index b92cea2cae..af00976691 100644 --- a/src/backend/metal/SamplerMTL.mm +++ b/src/backend/metal/SamplerMTL.mm @@ -14,7 +14,7 @@ #include "backend/metal/SamplerMTL.h" -#include "backend/metal/MetalBackend.h" +#include "backend/metal/DeviceMTL.h" namespace backend { namespace metal { diff --git a/src/backend/metal/ShaderModuleMTL.mm b/src/backend/metal/ShaderModuleMTL.mm index 7f944d8759..f7ca490e49 100644 --- a/src/backend/metal/ShaderModuleMTL.mm +++ b/src/backend/metal/ShaderModuleMTL.mm @@ -14,7 +14,8 @@ #include "backend/metal/ShaderModuleMTL.h" -#include "backend/metal/MetalBackend.h" +#include "backend/BindGroupLayout.h" +#include "backend/metal/DeviceMTL.h" #include "backend/metal/PipelineLayoutMTL.h" #include diff --git a/src/backend/metal/SwapChainMTL.mm b/src/backend/metal/SwapChainMTL.mm index 9e454e8c43..352f077788 100644 --- a/src/backend/metal/SwapChainMTL.mm +++ b/src/backend/metal/SwapChainMTL.mm @@ -14,7 +14,7 @@ #include "backend/metal/SwapChainMTL.h" -#include "backend/metal/MetalBackend.h" +#include "backend/metal/DeviceMTL.h" #include "backend/metal/TextureMTL.h" #include diff --git a/src/backend/metal/TextureMTL.mm b/src/backend/metal/TextureMTL.mm index f1791084dc..27f8763539 100644 --- a/src/backend/metal/TextureMTL.mm +++ b/src/backend/metal/TextureMTL.mm @@ -14,7 +14,7 @@ #include "backend/metal/TextureMTL.h" -#include "backend/metal/MetalBackend.h" +#include "backend/metal/DeviceMTL.h" namespace backend { namespace metal {