diff --git a/src/Engine/Graphics/Metal/CMakeLists.txt b/src/Engine/Graphics/Metal/CMakeLists.txt index 7e00d7e..afc99d4 100644 --- a/src/Engine/Graphics/Metal/CMakeLists.txt +++ b/src/Engine/Graphics/Metal/CMakeLists.txt @@ -2,10 +2,14 @@ target_sources(Engine PRIVATE Command.h Command.mm + Descriptor.h + Descriptor.mm Enums.h Enums.mm Graphics.h Graphics.mm + Pipeline.h + Pipeline.mm PrivateImpl.mm RenderPass.h RenderPass.mm diff --git a/src/Engine/Graphics/Metal/Descriptor.h b/src/Engine/Graphics/Metal/Descriptor.h new file mode 100644 index 0000000..97b80ad --- /dev/null +++ b/src/Engine/Graphics/Metal/Descriptor.h @@ -0,0 +1,23 @@ +#pragma once +#include "Graphics/Descriptor.h" + +namespace Seele { +namespace Metal { +DECLARE_REF(Graphics) +class DescriptorLayout : public Gfx::DescriptorLayout +{ +public: + DescriptorLayout(PGraphics graphics, const std::string& name); + virtual ~DescriptorLayout(); + virtual void create(); +private: + PGraphics graphics; +}; +class PipelineLayout : public Gfx::PipelineLayout +{ +public: +private: + +}; +} +} \ No newline at end of file diff --git a/src/Engine/Graphics/Metal/Descriptor.mm b/src/Engine/Graphics/Metal/Descriptor.mm new file mode 100644 index 0000000..e69de29 diff --git a/src/Engine/Graphics/Metal/Pipeline.h b/src/Engine/Graphics/Metal/Pipeline.h new file mode 100644 index 0000000..e70e283 --- /dev/null +++ b/src/Engine/Graphics/Metal/Pipeline.h @@ -0,0 +1,38 @@ +#pragma once +#include "Graphics/Initializer.h" +#include "Graphics/Pipeline.h" +#include "Metal/MTLComputePipeline.hpp" +#include "Metal/MTLRenderPipeline.hpp" +#include "MinimalEngine.h" + +namespace Seele { +namespace Metal { +class VertexInput : public Gfx::VertexInput +{ +public: + VertexInput(VertexInputStateCreateInfo createInfo); + virtual ~VertexInput(); +}; +DECLARE_REF(PipelineLayout) +DECLARE_REF(Graphics) +class GraphicsPipeline : public Gfx::GraphicsPipeline +{ +public: + GraphicsPipeline(PGraphics graphics, Gfx::LegacyPipelineCreateInfo createInfo); + GraphicsPipeline(PGraphics graphics, Gfx::MeshPipelineCreateInfo createInfo); + virtual ~GraphicsPipeline(); +private: + MTL::RenderPipelineState* state; +}; +DEFINE_REF(GraphicsPipeline) +class ComputePipeline : public Gfx::ComputePipeline +{ +public: + ComputePipeline(PGraphics graphics, Gfx::ComputePipelineCreateInfo createInfo); + virtual ~ComputePipeline(); +private: + MTL::ComputePipelineState* state; +}; +DEFINE_REF(ComputePipeline) +} +} \ No newline at end of file diff --git a/src/Engine/Graphics/Metal/Pipeline.mm b/src/Engine/Graphics/Metal/Pipeline.mm new file mode 100644 index 0000000..7ce73e1 --- /dev/null +++ b/src/Engine/Graphics/Metal/Pipeline.mm @@ -0,0 +1,17 @@ +#include "Pipeline.h" +#include "Graphics/Initializer.h" +#include "Graphics/Metal/Graphics.h" +#include "Graphics/Resources.h" +#include "Metal/MTLRenderPipeline.hpp" + +using namespace Seele; +using namespace Seele::Metal; + +VertexInput::VertexInput(VertexInputStateCreateInfo createInfo) + : Gfx::VertexInput(createInfo) +{ +} + +VertexInput::~VertexInput() +{ +} diff --git a/src/Engine/Graphics/Metal/PipelineCache.h b/src/Engine/Graphics/Metal/PipelineCache.h new file mode 100644 index 0000000..1aabf25 --- /dev/null +++ b/src/Engine/Graphics/Metal/PipelineCache.h @@ -0,0 +1,11 @@ +#pragma once +#include "Graphics/Pipeline.h" + +namespace Seele { +namespace Metal { +class PipelineCache +{ + +}; +} +} \ No newline at end of file diff --git a/src/Engine/Graphics/Metal/PipelineCache.mm b/src/Engine/Graphics/Metal/PipelineCache.mm new file mode 100644 index 0000000..e69de29