5#include <Common/Rect.hpp>
7#include "Framebuffer.hpp"
9namespace Grindstone::GraphicsAPI {
17 class DepthStencilTarget;
19 enum class AccessFlags : uint32_t {
21 IndirectCommandRead = 0x00000001,
22 IndexRead = 0x00000002,
23 VertexAttributeRead = 0x00000004,
24 UNIFORMRead = 0x00000008,
25 InputAttachmentRead = 0x00000010,
26 ShaderRead = 0x00000020,
27 ShaderWrite = 0x00000040,
28 ColorAttachmentRead = 0x00000080,
29 ColorAttachmentWrite = 0x00000100,
30 DepthStencilAttachmentRead = 0x00000200,
31 DepthStencilAttachmentWrite = 0x00000400,
32 TransferRead = 0x00000800,
33 TransferWrite = 0x00001000,
34 HostRead = 0x00002000,
35 HostWrite = 0x00004000,
36 MemoryRead = 0x00008000,
37 MemoryWrite = 0x00010000,
38 TransformFeedbackWrite = 0x02000000,
39 TransformFeedbackCounterRead = 0x04000000,
40 TransformFeedbackCounterWrite = 0x08000000,
41 ConditionalRenderingRead = 0x00100000,
42 ColorAttachmentReadNoncoherent = 0x00080000,
43 AccelerationStructureRead = 0x00200000,
44 AccelerationStructureWrite = 0x00400000,
45 FragmentDensityMapRead = 0x01000000,
46 FragmentShadingRateAttachmentRead = 0x00800000,
47 CommandPreprocessRead = 0x00020000,
48 CommandPreprocessWrite = 0x00040000
53 Grindstone::GraphicsAPI::ImageLayout oldLayout;
54 Grindstone::GraphicsAPI::ImageLayout newLayout;
55 Grindstone::GraphicsAPI::AccessFlags srcAccess;
56 Grindstone::GraphicsAPI::AccessFlags dstAccess;
57 Grindstone::GraphicsAPI::ImageAspectBits imageAspect;
58 uint32_t baseMipLevel = 0;
59 uint32_t levelCount = 0;
60 uint32_t baseArrayLayer = 0;
61 uint32_t layerCount = 0;
66 Grindstone::GraphicsAPI::AccessFlags srcAccess;
67 Grindstone::GraphicsAPI::AccessFlags dstAccess;
73 uint32_t srcOffset = 0;
74 uint32_t dstOffset = 0;
80 Grindstone::GraphicsAPI::ImageLayout imageLayout;
81 Grindstone::GraphicsAPI::LoadOp loadOp = Grindstone::GraphicsAPI::LoadOp::Clear;
82 Grindstone::GraphicsAPI::StoreOp storeOp = Grindstone::GraphicsAPI::StoreOp::Store;
94 virtual void BeginCommandBuffer() = 0;
95 virtual void BindRenderPass(
100 uint32_t colorClearCount,
103 virtual void UnbindRenderPass() = 0;
104 virtual void BeginRendering(
108 uint32_t colorAttachmentCount,
111 float* debugColor =
nullptr
113 virtual void EndRendering() = 0;
114 virtual void BeginDebugLabelSection(
const char* name,
float color[4] =
nullptr) = 0;
115 virtual void EndDebugLabelSection() = 0;
116 virtual void BindGraphicsDescriptorSet(
119 uint32_t descriptorSetOffset,
120 uint32_t descriptorSetCount
122 virtual void BindComputeDescriptorSet(
125 uint32_t descriptorSetOffset,
126 uint32_t descriptorSetCount
132 virtual void BindCommandBuffers(
CommandBuffer** commandBuffers, uint32_t commandBuffersCount) = 0;
133 virtual void SetViewport(
float offsetX,
float offsetY,
float width,
float height,
float depthMin = 0.0f,
float depthMax = 1.0f) = 0;
134 virtual void SetScissor(int32_t offsetX, int32_t offsetY, uint32_t width, uint32_t height) = 0;
135 virtual void SetDepthBias(
float biasConstantFactor,
float biasSlopeFactor) = 0;
138 virtual void BindVertexArrayObject(
const VertexArrayObject* vertexArrayObject) = 0;
139 virtual void BindVertexBuffers(
const Buffer*
const * vb, uint32_t count) = 0;
140 virtual void BindIndexBuffer(
Buffer* indexBuffer) = 0;
141 virtual void DrawVertices(uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount, int32_t vertexOffset) = 0;
142 virtual void DrawIndices(uint32_t firstIndex, uint32_t indexCount, uint32_t firstInstance, uint32_t instanceCount, int32_t vertexOffset) = 0;
143 virtual void DispatchCompute(uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) = 0;
144 virtual void BlitImage(
146 Grindstone::GraphicsAPI::ImageLayout oldLayout,
147 Grindstone::GraphicsAPI::ImageLayout newLayout,
148 uint32_t width, uint32_t height, uint32_t depth
151 virtual void PipelineBarrier(
152 GraphicsAPI::PipelineStageBit srcPipelineStageMask, GraphicsAPI::PipelineStageBit dstPipelineStageMask,
157 virtual void EndCommandBuffer() = 0;
160 bool isSecondary =
false;
166 const char* debugName =
nullptr;
172inline Grindstone::GraphicsAPI::AccessFlags operator|(Grindstone::GraphicsAPI::AccessFlags a, Grindstone::GraphicsAPI::AccessFlags b) {
173 return static_cast<Grindstone::GraphicsAPI::AccessFlags
>(
static_cast<uint8_t
>(a) |
static_cast<uint8_t
>(b));
176inline Grindstone::GraphicsAPI::AccessFlags operator&(Grindstone::GraphicsAPI::AccessFlags a, Grindstone::GraphicsAPI::AccessFlags b) {
177 return static_cast<Grindstone::GraphicsAPI::AccessFlags
>(
static_cast<uint8_t
>(a) &
static_cast<uint8_t
>(b));
Definition CommandBuffer.hpp:90
Definition ComputePipeline.hpp:18
Definition DescriptorSet.hpp:15
Definition Framebuffer.hpp:16
Definition GraphicsPipeline.hpp:19
Definition RenderPass.hpp:10
Definition VertexArrayObject.hpp:9
Definition CommandBuffer.hpp:64
Definition CommandBuffer.hpp:72
Definition Formats.hpp:40
Definition CommandBuffer.hpp:159
Definition CommandBuffer.hpp:165
Definition CommandBuffer.hpp:51
Definition CommandBuffer.hpp:78
Definition Formats.hpp:12
Definition Formats.hpp:46