RavEngine
Loading...
Searching...
No Matches
CommandBuffer.hpp
1#pragma once
2#include <RGL/Types.hpp>
3#include <memory>
4#include <array>
5#include <RGL/Texture.hpp>
6#include <RGL/Buffer.hpp>
7#include <RGL/Synchronization.hpp>
8#include <span>
9#include <string>
10
12 uint32_t
13 nInstances = 1,
14 startVertex = 0,
15 firstInstance = 0;
16};
17
19 uint32_t
20 nInstances = 1,
21 firstIndex = 0,
22 firstInstance = 0,
23 startVertex = 0;
24};
25
26namespace RGL {
27 struct IRenderPipeline;
28 struct ISampler;
29 struct ITexture;
30
31 struct Viewport {
32 float
33 x = 0,
34 y = 0,
35 width = 1,
36 height = 1,
37 minDepth = 0,
38 maxDepth = 1;
39 };
40 struct Rect {
41 std::array<int32_t, 2> offset{ 0,0 };
42 std::array<uint32_t, 2> extent{ 0,0, };
43 };
44
45
46 struct CommitConfig {
47 RGLFencePtr signalFence;
48 };
49
51 std::initializer_list<RGLBufferPtr> buffers;
52 std::initializer_list<RGLTexturePtr> textures;
53 };
54
56 uint32_t indexCount;
57 uint32_t instanceCount;
58 uint32_t indexStart;
59 uint32_t baseVertex;
60 uint32_t baseInstance;
61 };
62
64 uint32_t x, y, z;
65 };
66
68 uint32_t vertexCount;
69 uint32_t instanceCount;
70 uint32_t firstVertex;
71 uint32_t firstInstance;
72 };
73
75 RGLBufferPtr indirectBuffer;
76 uint32_t offsetIntoBuffer = 0; // in bytes
77 uint32_t nDraws;
78 };
79
81 RGLBufferPtr indirectBuffer;
82 uint32_t offsetIntoBuffer = 0;
83 uint32_t blocksizeX = 0, blocksizeY = 0, blocksizeZ = 0;
84 };
85
87 uint32_t bindingPosition = 0;
88 uint32_t offsetIntoBuffer = 0;
89 };
90
92 bool Vertex : 1 = false;
93 bool Fragment : 1 = false;
94 bool Compute : 1 = false;
95 };
96
97struct TextureView;
98
100 // clear the command buffer, to encode new commands
101 virtual void Reset() = 0;
102
103 // signal that new commands are arriving
104 virtual void Begin() = 0;
105
106 // signal that all commands ahve been encoded
107 virtual void End() = 0;
108
109 virtual void BeginRendering(RGLRenderPassPtr) = 0;
110 virtual void EndRendering() = 0;
111
112
113 virtual void BindRenderPipeline(RGLRenderPipelinePtr) = 0;
114 virtual void BeginCompute(RGLComputePipelinePtr) = 0;
115 virtual void EndCompute() = 0;
116 virtual void DispatchCompute(uint32_t threadsX, uint32_t threadsY, uint32_t threadsZ, uint32_t threadsPerThreadgroupX=1, uint32_t threadsPerThreadgroupY=1, uint32_t threadsPerThreadgroupZ=1) = 0;
117
118 virtual void BindBuffer(RGLBufferPtr buffer, uint32_t binding, uint32_t offsetIntoBuffer = 0) = 0;
119 virtual void BindComputeBuffer(RGLBufferPtr buffer, uint32_t binding, uint32_t offsetIntoBuffer = 0) = 0;
120
121 virtual void SetVertexBuffer(RGLBufferPtr buffer, const VertexBufferBinding& bindingInfo = {}) = 0;
122
123 virtual void SetIndexBuffer(RGLBufferPtr buffer) = 0;
124
125 virtual void SetVertexSampler(RGLSamplerPtr sampler, uint32_t index) = 0;
126 virtual void SetFragmentSampler(RGLSamplerPtr sampler, uint32_t index) = 0;
127 virtual void SetComputeSampler(RGLSamplerPtr sampler, uint32_t index) = 0;
128
129 virtual void SetVertexTexture(const TextureView& texture, uint32_t index) = 0;
130 virtual void SetFragmentTexture(const TextureView& texture, uint32_t index) = 0;
131 virtual void SetComputeTexture(const TextureView& texture, uint32_t index) = 0;
132
133 virtual void Draw(uint32_t nVertices, const DrawInstancedConfig& = {}) = 0;
134 virtual void DrawIndexed(uint32_t nIndices, const DrawIndexedInstancedConfig& = {}) = 0;
135
136 virtual void BindBindlessBufferDescriptorSet(uint32_t set_idx) = 0;
137
138 virtual void SetViewport(const Viewport&) = 0;
139 virtual void SetScissor(const Rect&) = 0;
140
141 virtual void UseResource(const TextureView& tx) = 0;
142 virtual void UseResource(const RGLBufferPtr buffer) = 0;
143
144 virtual void CopyTextureToBuffer(TextureView& sourceTexture, const Rect& sourceRect, size_t offset, RGLBufferPtr desetBuffer) = 0;
145
147 TextureView view;
148 Rect destLoc;
149 uint32_t arrayLayer = 0;
150 };
151 virtual void CopyBufferToTexture(RGLBufferPtr source, uint32_t size, const TextureDestConfig& dest) = 0;
152
154 RGLBufferPtr buffer;
155 uint32_t offset = 0;
156 };
157 virtual void CopyBufferToBuffer(BufferCopyConfig from, BufferCopyConfig to, uint32_t size) = 0;
158
160 TextureView texture;
161 uint32_t mip = 0;
162 uint32_t layer = 0;
163 };
164 virtual void CopyTextureToTexture(const TextureCopyConfig& from, const TextureCopyConfig& to) = 0;
165
166 // submit onto the queue that created this command buffer
167 virtual void Commit(const CommitConfig&) = 0;
168
169 virtual void SetVertexBytes(const untyped_span data, uint32_t offset) = 0;
170 virtual void SetFragmentBytes(const untyped_span data, uint32_t offset) = 0;
171 virtual void SetComputeBytes(const untyped_span data, uint32_t offset) = 0;
172
173 virtual void ExecuteIndirectIndexed(const IndirectConfig&) = 0;
174 virtual void ExecuteIndirect(const IndirectConfig&) = 0;
175 virtual void DispatchIndirect(const DispatchIndirectConfig&) = 0;
176
177 virtual void BeginRenderDebugMarker(const std::string& label) = 0;
178 virtual void BeginComputeDebugMarker(const std::string& label) = 0;
179
180 virtual void EndRenderDebugMarker() = 0;
181 virtual void EndComputeDebugMarker() = 0;
182
183 virtual void BlockUntilCompleted() = 0;
184 };
185}
Definition Span.hpp:11
Definition CommandBuffer.hpp:18
Definition CommandBuffer.hpp:11
Definition CommandBuffer.hpp:46
Definition CommandBuffer.hpp:63
Definition CommandBuffer.hpp:80
Definition CommandBuffer.hpp:153
Definition CommandBuffer.hpp:159
Definition CommandBuffer.hpp:146
Definition CommandBuffer.hpp:99
Definition CommandBuffer.hpp:67
Definition CommandBuffer.hpp:74
Definition CommandBuffer.hpp:55
Definition CommandBuffer.hpp:91
Definition CommandBuffer.hpp:40
Definition CommandBuffer.hpp:50
Definition Texture.hpp:43
Definition CommandBuffer.hpp:86
Definition CommandBuffer.hpp:31