5#include <Common/Rect.hpp>
7#include "Framebuffer.hpp"
9namespace Grindstone::GraphicsAPI {
18 class DepthStencilTarget;
20 enum class AccessFlags : uint32_t {
22 IndirectCommandRead = 0x00000001,
23 IndexRead = 0x00000002,
24 VertexAttributeRead = 0x00000004,
25 UniformRead = 0x00000008,
26 InputAttachmentRead = 0x00000010,
27 ShaderRead = 0x00000020,
28 ShaderWrite = 0x00000040,
29 ColorAttachmentRead = 0x00000080,
30 ColorAttachmentWrite = 0x00000100,
31 DepthStencilAttachmentRead = 0x00000200,
32 DepthStencilAttachmentWrite = 0x00000400,
33 TransferRead = 0x00000800,
34 TransferWrite = 0x00001000,
35 HostRead = 0x00002000,
36 HostWrite = 0x00004000,
37 MemoryRead = 0x00008000,
38 MemoryWrite = 0x00010000,
39 TransformFeedbackWrite = 0x02000000,
40 TransformFeedbackCounterRead = 0x04000000,
41 TransformFeedbackCounterWrite = 0x08000000,
42 ConditionalRenderingRead = 0x00100000,
43 ColorAttachmentReadNoncoherent = 0x00080000,
44 AccelerationStructureRead = 0x00200000,
45 AccelerationStructureWrite = 0x00400000,
46 FragmentDensityMapRead = 0x01000000,
47 FragmentShadingRateAttachmentRead = 0x00800000,
48 CommandPreprocessRead = 0x00020000,
49 CommandPreprocessWrite = 0x00040000
54 Grindstone::GraphicsAPI::PipelineStageBit srcStageMask;
55 Grindstone::GraphicsAPI::PipelineStageBit dstStageMask;
56 Grindstone::GraphicsAPI::ImageLayout oldLayout;
57 Grindstone::GraphicsAPI::ImageLayout newLayout;
58 Grindstone::GraphicsAPI::AccessFlags srcAccess;
59 Grindstone::GraphicsAPI::AccessFlags dstAccess;
60 Grindstone::GraphicsAPI::ImageAspectBits imageAspect;
61 uint32_t baseMipLevel = 0;
62 uint32_t levelCount = 0;
63 uint32_t baseArrayLayer = 0;
64 uint32_t layerCount = 0;
69 Grindstone::GraphicsAPI::PipelineStageBit srcStageMask;
70 Grindstone::GraphicsAPI::PipelineStageBit dstStageMask;
71 Grindstone::GraphicsAPI::AccessFlags srcAccess;
72 Grindstone::GraphicsAPI::AccessFlags dstAccess;
78 uint32_t srcOffset = 0;
79 uint32_t dstOffset = 0;
85 Grindstone::GraphicsAPI::ImageLayout imageLayout;
86 Grindstone::GraphicsAPI::LoadOp loadOp = Grindstone::GraphicsAPI::LoadOp::Clear;
87 Grindstone::GraphicsAPI::StoreOp storeOp = Grindstone::GraphicsAPI::StoreOp::Store;
93 Grindstone::GraphicsAPI::ImageAspectBits aspectMask;
95 uint32_t colorAttachmentIndex;
101 uint32_t baseArrayLayer;
113 virtual void BeginCommandBuffer() = 0;
114 virtual void BindRenderPass(
119 uint32_t colorClearCount,
122 virtual void UnbindRenderPass() = 0;
123 virtual void BeginRendering(
127 uint32_t colorAttachmentCount,
130 float* debugColor =
nullptr
132 virtual void EndRendering() = 0;
133 virtual void BeginDebugLabelSection(
const char* name,
float color[4] =
nullptr) = 0;
134 virtual void EndDebugLabelSection() = 0;
135 virtual void BindGraphicsDescriptorSet(
138 uint32_t descriptorSetOffset,
139 uint32_t descriptorSetCount
141 virtual void BindComputeDescriptorSet(
144 uint32_t descriptorSetOffset,
145 uint32_t descriptorSetCount
147 virtual void ClearAttachments(
ClearAttachment* attachments, uint32_t attachmentCount,
ClearRect* rects, uint32_t rectCount) = 0;
151 virtual void BindCommandBuffers(
CommandBuffer** commandBuffers, uint32_t commandBuffersCount) = 0;
152 virtual void SetViewport(
float offsetX,
float offsetY,
float width,
float height,
float depthMin = 0.0f,
float depthMax = 1.0f) = 0;
153 virtual void SetScissor(int32_t offsetX, int32_t offsetY, uint32_t width, uint32_t height) = 0;
154 virtual void SetDepthBias(
float biasConstantFactor,
float biasSlopeFactor) = 0;
157 virtual void BindVertexArrayObject(
const VertexArrayObject* vertexArrayObject) = 0;
158 virtual void BindVertexBuffers(
const Buffer*
const * vb, uint32_t count) = 0;
159 virtual void BindIndexBuffer(
Buffer* indexBuffer) = 0;
160 virtual void DrawVertices(uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount, int32_t vertexOffset) = 0;
161 virtual void DrawIndices(uint32_t firstIndex, uint32_t indexCount, uint32_t firstInstance, uint32_t instanceCount, int32_t vertexOffset) = 0;
162 virtual void DispatchCompute(uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) = 0;
163 virtual void BlitImage(
166 Grindstone::GraphicsAPI::ImageLayout oldLayout,
167 Grindstone::GraphicsAPI::ImageLayout newLayout,
168 Grindstone::GraphicsAPI::TextureFilter filter,
173 virtual void PipelineBarrier(
178 virtual void EndCommandBuffer() = 0;
181 bool isSecondary =
false;
187 const char* debugName =
nullptr;
193GS_ENUM_FLAGS_FUNCS(Grindstone::GraphicsAPI::AccessFlags)
Definition CommandBuffer.hpp:109
Definition ComputePipeline.hpp:19
Definition DescriptorSet.hpp:15
Definition Framebuffer.hpp:16
Definition GraphicsPipeline.hpp:20
Definition PipelineLayout.hpp:18
Definition RenderPass.hpp:10
Definition VertexArrayObject.hpp:9
Definition CommandBuffer.hpp:67
Definition CommandBuffer.hpp:77
Definition CommandBuffer.hpp:91
Definition Formats.hpp:42
Definition CommandBuffer.hpp:99
Definition CommandBuffer.hpp:180
Definition CommandBuffer.hpp:186
Definition CommandBuffer.hpp:52
Definition CommandBuffer.hpp:83
Definition Formats.hpp:14
Definition Formats.hpp:48