CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
MTCommandBuffer.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "Metal.hpp"
11
14
16
17namespace CeresEngine {
18
19 class MTDevice;
20 class MTCommandQueue;
21
22 class MTGraphicsPipeline;
23
25 class MTCommandBuffer final : public GPUCommandBuffer, public MTDeviceObject<MTCommandBuffer, GPUCommandBuffer> {
26 friend class MTCommandQueue;
27
28 public:
33
34 private:
37
40
43
46
49
50 private: // State
53
56
59
60 public:
63
66
67 public:
70
72 void bindVertexBuffer(GPUBuffer& vertexBuffer, UInt32 offset = 0, UInt32 slot = 0) final;
73
76
78 void draw(UInt32 vertexCount, UInt32 instanceCount = 1, UInt32 firstVertex = 0, UInt32 firstInstance = 0) final;
79
82
84 void drawIndexed(UInt32 indexCount, UInt32 instanceCount = 1, UInt32 firstVertex = 0, Int32 vertexOffset = 0, UInt32 firstInstance = 0) final;
85
88
91
92 public: // Dynamic States
95
98
101
104
105 public: // Mesh-shaders
108
111
114
115 public: // Buffer read, write & copy.
118
121
124
125 public: // Image read, write & copy.
129
132 const TExtent3<UInt32>& extent) final;
133
137
140 const TExtent3<UInt32>& extent) final;
141
143 void clear(GPUImage& image) final;
144
147
150
151 public: // Synchronization
153 void barrier(GPUImage& image, GPUImageLayout layout) final;
154
155 public:
157 void begin() final;
158
160 void end() final;
161
163 void wait() final;
164
165 private: // Encoders
169 };
170
171} // namespace CeresEngine
#define CE_EXPLICIT_FALSE
Definition Macros.hpp:416
#define CE_MT_HANDLE(T)
Definition Metal.hpp:20
A retain-release type of smart pointer.
Definition SmartPtr.hpp:132
Definition GPUBuffer.hpp:124
Definition GPUCommandBuffer.hpp:77
GPUDevice & device
The owning device this object was created from.
Definition Common.hpp:55
Definition GPUImage.hpp:331
A RenderAPI object that holds a set of resources that can be bound into shader.
Definition GPUResourceSet.hpp:735
Metal RenderAPI command buffer object.
Definition MTCommandBuffer.hpp:25
void bindIndexBuffer(GPUBuffer &indexBuffer, UInt32 offset=0, IndexType indexType=IndexType::UInt32) final
void * MTLRenderCommandEncoderType
Definition MTCommandBuffer.hpp:30
void setViewport(const Viewport &viewport) final
void copyImageFromBuffer(GPUImage &dstImage, const GPUImageRegion &dstRegion, GPUBuffer &srcBuffer, std::uint64_t srcOffset, std::uint32_t rowStride=0, std::uint32_t layerStride=0) final
UInt32 mIndexBufferOffset
The offset, in bytes, to the bound index buffer.
Definition MTCommandBuffer.hpp:55
MTLComputeCommandEncoderType getComputeCommandEncoder()
void fillBuffer(GPUBuffer &dstBuffer, std::uint64_t dstOffset, std::uint32_t value, std::uint64_t fillSize=~0u) final
void clear(GPUImage &image) final
void drawMeshTasksIndirect(GPUBuffer &buffer, UInt64 offset, UInt32 drawCount, UInt32 stride) final
Issue an indirect mesh tasks draw into a command buffer.
void copyBuffer(GPUBuffer &dstBuffer, std::uint64_t dstOffset, GPUBuffer &srcBuffer, std::uint64_t srcOffset, std::uint64_t size) final
void copyBufferFromImage(GPUBuffer &dstBuffer, std::uint64_t dstOffset, GPUImage &srcImage, const GPUImageRegion &srcImageRegion, std::uint32_t rowStride=0, std::uint32_t layerStride=0) final
void generateMips(GPUImage &image) final
MTLRenderCommandEncoderType getRenderCommandEncoder()
void * MTLCommandBufferType
Definition MTCommandBuffer.hpp:29
MTLCommandBufferType mCommandBuffer
The Metal API command buffer object.
Definition MTCommandBuffer.hpp:39
void barrier(GPUImage &image, GPUImageLayout layout) final
void setScissors(const SmallVector< Scissor, 16 > &scissors) final
void draw(UInt32 vertexCount, UInt32 instanceCount=1, UInt32 firstVertex=0, UInt32 firstInstance=0) final
MTCommandBuffer(MTDevicePtr device, const GPUCommandBufferDescriptor &descriptor)
void * MTLBlitCommandEncoderType
Definition MTCommandBuffer.hpp:32
void setViewports(const SmallVector< Viewport, 16 > &viewports) final
void resolveImage(GPUImage &dstImage, const GPUImageLocation &dstLocation, GPUImage &srcImage, const GPUImageLocation &srcLocation, const TExtent3< UInt32 > &extent) final
void bindVertexBuffer(GPUBuffer &vertexBuffer, UInt32 offset=0, UInt32 slot=0) final
const GPUCommandBufferDescriptor mDescriptor
A structure that describes the command buffer and it's properties.
Definition MTCommandBuffer.hpp:36
void * MTLComputeCommandEncoderType
Definition MTCommandBuffer.hpp:31
IndexType mIndexBufferType
The type of index stored in the bound index buffer.
Definition MTCommandBuffer.hpp:58
void copyImage(GPUImage &dstImage, const GPUImageLocation &dstLocation, GPUImage &srcImage, const GPUImageLocation &srcLocation, const TExtent3< UInt32 > &extent) final
void drawMeshTasks(UInt32 groupCountX, UInt32 groupCountY, UInt32 groupCountZ) final
Draw mesh task work items.
MTLComputeCommandEncoderType mComputeCommandEncoder
The Metal API compute command encoder object.
Definition MTCommandBuffer.hpp:45
MTLRenderCommandEncoderType mRenderCommandEncoder
The Metal API render command encoder object.
Definition MTCommandBuffer.hpp:42
MTLBlitCommandEncoderType getBlitCommandEncoder()
MTBufferPtr mIndexBuffer
A pointer to the latest bound index buffer.
Definition MTCommandBuffer.hpp:52
void bindResourceSet(GPUResourceSet &resourceSet, UInt32 firstSet=0, Int32 offset=-1) final
void setScissor(const Scissor &scissor) final
void updateBuffer(GPUBuffer &dstBuffer, std::uint64_t dstOffset, const void *data, std::uint16_t dataSize) final
MTLBlitCommandEncoderType mBlitCommandEncoder
The Metal API blit command encoder object.
Definition MTCommandBuffer.hpp:48
void drawIndexed(UInt32 indexCount, UInt32 instanceCount=1, UInt32 firstVertex=0, Int32 vertexOffset=0, UInt32 firstInstance=0) final
Metal RenderAPI command queue object.
Definition MTCommandQueue.hpp:23
Definition Metal.hpp:124
const Descriptor & descriptor
A structure that describes the object and it's properties.
Definition Common.hpp:69
Definition Application.hpp:19
std::uint64_t UInt64
Definition DataTypes.hpp:26
GPUImageLayout
Definition GPUImage.hpp:65
std::int32_t Int32
Definition DataTypes.hpp:21
sfl::small_vector< T, N, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > SmallVector
SmallVector is a sequence container similar to Vector.
Definition SmallVector.hpp:31
std::uint32_t UInt32
Definition DataTypes.hpp:23
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Span.hpp:668
Command buffer descriptor structure.
Definition GPUCommandBuffer.hpp:32
Structure specifying a draw indirect command.
Definition GPUCommandBuffer.hpp:59
Structure specifying a draw indirect command.
Definition GPUCommandBuffer.hpp:44
Image location structure: MIP-map level and offset.
Definition GPUImage.hpp:120
Image region structure: Subresource (MIP-map level and array layer range), offset,...
Definition GPUImage.hpp:156
Image subresource descriptor which specifies the array layer and MIP-map level range of a image resou...
Definition GPUImage.hpp:77
Definition IndexType.hpp:20
@ UInt32
The index buffer is represented as a 32-bit unsigned integer.
Definition IndexType.hpp:26
Definition GPUGraphicsPipeline.hpp:281
Definition GPUGraphicsPipeline.hpp:214