4#include "Framebuffer.hpp"
6namespace Grindstone::GraphicsAPI {
14 class DepthStencilTarget;
16 enum class AccessFlags : uint32_t {
18 IndirectCommandRead = 0x00000001,
19 IndexRead = 0x00000002,
20 VertexAttributeRead = 0x00000004,
21 UNIFORMRead = 0x00000008,
22 InputAttachmentRead = 0x00000010,
23 ShaderRead = 0x00000020,
24 ShaderWrite = 0x00000040,
25 ColorAttachmentRead = 0x00000080,
26 ColorAttachmentWrite = 0x00000100,
27 DepthStencilAttachmentRead = 0x00000200,
28 DepthStencilAttachmentWrite = 0x00000400,
29 TransferRead = 0x00000800,
30 TransferWrite = 0x00001000,
31 HostRead = 0x00002000,
32 HostWrite = 0x00004000,
33 MemoryRead = 0x00008000,
34 MemoryWrite = 0x00010000,
35 TransformFeedbackWrite = 0x02000000,
36 TransformFeedbackCounterRead = 0x04000000,
37 TransformFeedbackCounterWrite = 0x08000000,
38 ConditionalRenderingRead = 0x00100000,
39 ColorAttachmentReadNoncoherent = 0x00080000,
40 AccelerationStructureRead = 0x00200000,
41 AccelerationStructureWrite = 0x00400000,
42 FragmentDensityMapRead = 0x01000000,
43 FragmentShadingRateAttachmentRead = 0x00800000,
44 CommandPreprocessRead = 0x00020000,
45 CommandPreprocessWrite = 0x00040000
50 ImageLayout oldLayout;
51 ImageLayout newLayout;
52 AccessFlags srcAccess;
53 AccessFlags dstAccess;
54 ImageAspectBits imageAspect;
55 uint32_t baseMipLevel = 0;
56 uint32_t levelCount = 0;
57 uint32_t baseArrayLayer = 0;
58 uint32_t layerCount = 0;
63 AccessFlags srcAccess;
64 AccessFlags dstAccess;
77 virtual void BeginCommandBuffer() = 0;
78 virtual void BindRenderPass(
83 ClearColorValue* colorClearValues,
84 uint32_t colorClearCount,
87 virtual void UnbindRenderPass() = 0;
88 virtual void BeginDebugLabelSection(
const char* name,
float color[4] =
nullptr) = 0;
89 virtual void EndDebugLabelSection() = 0;
90 virtual void BindGraphicsDescriptorSet(
93 uint32_t descriptorSetOffset,
94 uint32_t descriptorSetCount
96 virtual void BindComputeDescriptorSet(
99 uint32_t descriptorSetOffset,
100 uint32_t descriptorSetCount
102 virtual void BindCommandBuffers(
CommandBuffer** commandBuffers, uint32_t commandBuffersCount) = 0;
103 virtual void SetViewport(
float offsetX,
float offsetY,
float width,
float height,
float depthMin = 0.0f,
float depthMax = 1.0f) = 0;
104 virtual void SetScissor(int32_t offsetX, int32_t offsetY, uint32_t width, uint32_t height) = 0;
105 virtual void SetDepthBias(
float biasConstantFactor,
float biasSlopeFactor) = 0;
108 virtual void BindVertexArrayObject(
const VertexArrayObject* vertexArrayObject) = 0;
109 virtual void BindVertexBuffers(
const Buffer*
const * vb, uint32_t count) = 0;
110 virtual void BindIndexBuffer(
Buffer* indexBuffer) = 0;
111 virtual void DrawVertices(uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount, int32_t vertexOffset) = 0;
112 virtual void DrawIndices(uint32_t firstIndex, uint32_t indexCount, uint32_t firstInstance, uint32_t instanceCount, int32_t vertexOffset) = 0;
113 virtual void DispatchCompute(uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) = 0;
114 virtual void BlitImage(
116 Grindstone::GraphicsAPI::ImageLayout oldLayout,
117 Grindstone::GraphicsAPI::ImageLayout newLayout,
118 uint32_t width, uint32_t height, uint32_t depth
121 virtual void PipelineBarrier(
122 GraphicsAPI::PipelineStageBit srcPipelineStageMask, GraphicsAPI::PipelineStageBit dstPipelineStageMask,
127 virtual void EndCommandBuffer() = 0;
130 bool isSecondary =
false;
136 const char* debugName =
nullptr;
142inline Grindstone::GraphicsAPI::AccessFlags operator|(Grindstone::GraphicsAPI::AccessFlags a, Grindstone::GraphicsAPI::AccessFlags b) {
143 return static_cast<Grindstone::GraphicsAPI::AccessFlags
>(
static_cast<uint8_t
>(a) |
static_cast<uint8_t
>(b));
146inline Grindstone::GraphicsAPI::AccessFlags operator&(Grindstone::GraphicsAPI::AccessFlags a, Grindstone::GraphicsAPI::AccessFlags b) {
147 return static_cast<Grindstone::GraphicsAPI::AccessFlags
>(
static_cast<uint8_t
>(a) &
static_cast<uint8_t
>(b));
Definition CommandBuffer.hpp:73
Definition ComputePipeline.hpp:18
Definition DescriptorSet.hpp:15
Definition Framebuffer.hpp:16
Definition GraphicsPipeline.hpp:19
Definition RenderPass.hpp:27
Definition VertexArrayObject.hpp:9
Definition CommandBuffer.hpp:61
Definition RenderPass.hpp:18
Definition CommandBuffer.hpp:129
Definition CommandBuffer.hpp:135
Definition CommandBuffer.hpp:48