| // Copyright 2017 The Dawn 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 DAWNNATIVE_METAL_RENDERPIPELINEMTL_H_ |
| #define DAWNNATIVE_METAL_RENDERPIPELINEMTL_H_ |
| |
| #include "dawn_native/RenderPipeline.h" |
| |
| #include "common/NSRef.h" |
| |
| #import <Metal/Metal.h> |
| |
| namespace dawn_native::metal { |
| |
| class Device; |
| |
| class RenderPipeline final : public RenderPipelineBase { |
| public: |
| static Ref<RenderPipelineBase> CreateUninitialized( |
| Device* device, |
| const RenderPipelineDescriptor* descriptor); |
| static void InitializeAsync(Ref<RenderPipelineBase> renderPipeline, |
| WGPUCreateRenderPipelineAsyncCallback callback, |
| void* userdata); |
| |
| MTLPrimitiveType GetMTLPrimitiveTopology() const; |
| MTLWinding GetMTLFrontFace() const; |
| MTLCullMode GetMTLCullMode() const; |
| |
| void Encode(id<MTLRenderCommandEncoder> encoder); |
| |
| id<MTLDepthStencilState> GetMTLDepthStencilState(); |
| |
| // For each Dawn vertex buffer, give the index in which it will be positioned in the Metal |
| // vertex buffer table. |
| uint32_t GetMtlVertexBufferIndex(VertexBufferSlot slot) const; |
| |
| wgpu::ShaderStage GetStagesRequiringStorageBufferLength() const; |
| |
| MaybeError Initialize() override; |
| |
| private: |
| using RenderPipelineBase::RenderPipelineBase; |
| |
| MTLVertexDescriptor* MakeVertexDesc(); |
| |
| MTLPrimitiveType mMtlPrimitiveTopology; |
| MTLWinding mMtlFrontFace; |
| MTLCullMode mMtlCullMode; |
| NSPRef<id<MTLRenderPipelineState>> mMtlRenderPipelineState; |
| NSPRef<id<MTLDepthStencilState>> mMtlDepthStencilState; |
| ityp::array<VertexBufferSlot, uint32_t, kMaxVertexBuffers> mMtlVertexBufferIndices; |
| |
| wgpu::ShaderStage mStagesRequiringStorageBufferLength = wgpu::ShaderStage::None; |
| }; |
| |
| } // namespace dawn_native::metal |
| |
| #endif // DAWNNATIVE_METAL_RENDERPIPELINEMTL_H_ |