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