Foundation
Loading...
Searching...
No Matches
Command.hpp
Go to the documentation of this file.
1#pragma once
2#include "Common.hpp"
3#include "Resource.hpp"
4#include "PipelineState.hpp"
5#include "Descriptor.hpp"
6namespace Foundation::RHI {
7 class RHIDevice;
8 class RHIDeviceQueue;
9 class RHICommandList;
10 class RHICommandPool;
13 class RHICommandPool : public RHIObject {
14 protected:
16 public:
17 struct PoolDesc {
18 // Queue this command pool is associated with.
20 // How CommandList should be created by this pool.
22 } const mDesc;
24
26 [[nodiscard]] virtual RHICommandList* GetCommandList(Handle handle) const = 0;
27 virtual void DestroyCommandList(Handle handle) = 0;
28
29 virtual void ResetAllCommandLists(bool freeResources = false) = 0;
30
31 virtual void DebugSetObjectName(const char* name) = 0;
32 };
34 class RHICommandList : public RHIObject {
35 protected:
37 public:
39#pragma region Transition
52 virtual RHICommandList& SetBufferTransition(RHIBuffer* buffer, TransitionDesc const& desc) = 0;
55#pragma endregion
56#pragma region PSO
61 virtual RHICommandList& SetPipeline(PipelineDesc const& desc) = 0;
64 RHIPipelineState* pipeline,
66 size_t first = 0) = 0;
67#pragma endregion
68#pragma region Rasterizer
69 virtual RHICommandList& SetViewport(float x, float y, float width, float height, float depth_min = 0.0, float depth_max = 1.0) = 0;
70 virtual RHICommandList& SetScissor(uint32_t x, uint32_t y, uint32_t width, uint32_t height) = 0;
75 virtual RHICommandList& DrawMeshTasksIndirect(RHIBuffer* cmd_buffer, size_t cmd_offset, size_t draw_count, size_t stride) = 0;
76#pragma endregion
78#pragma region Transfer Queue
80 size_t srcOffset = 0;
81 size_t dstOffset = 0;
86 size_t size = kFullSize;
87 };
88 virtual RHICommandList& FillBuffer(RHIBuffer* buffer, uint32_t value, size_t offset = 0, size_t size = kFullSize) = 0;
91 uint32_t srcBufferOffset = 0; // Offset in the source buffer, used for CopyBufferToImage
100 };
103#pragma endregion
104#pragma region Graphics Pipeline
106 struct Attachment {
109 // Clear values for the color attachment, if applicable.
111 // Clear values for depth and stencil attachments, if applicable.
112 // If both are set, the depth will be cleared first, then stencil.
114 [[nodiscard]] constexpr bool IsValid() const
115 {
116 return imageView;
117 }
118 };
123 };
124 virtual RHICommandList& BeginGraphics(GraphicsDesc const& desc) = 0;
126 virtual RHICommandList& BindIndexBuffer(RHIBuffer* buffer, size_t offset = 0, RHIResourceFormat format = RHIResourceFormat::R32Uint) = 0;
128#pragma endregion
129#pragma region Compute
131#pragma endregion
132#pragma region Tags
133 virtual RHICommandList& DebugBegin(const char* message) = 0;
134 virtual RHICommandList& DebugInsertMarker(const char* message) = 0;
135 virtual RHICommandList& DebugEnd() = 0;
136 virtual RHICommandList& Begin() = 0;
137 virtual void End() = 0;
138 virtual void Reset() = 0;
139#pragma endregion
140
141 virtual void DebugSetObjectName(const char* name) = 0;
142 };
143
145 static RHICommandList* Get(RHICommandPool const* pool, Handle handle) {
146 return pool->GetCommandList(handle);
147 }
148 static void Destroy(RHICommandPool* pool, Handle handle) {
149 pool->DestroyCommandList(handle);
150 }
151 };
152}
Definition Resource.hpp:30
Definition Command.hpp:34
RHICommandList(RHICommandPool const &commandPool)
Definition Command.hpp:38
virtual RHICommandList & DebugEnd()=0
virtual RHICommandList & Draw(uint32_t vertex_count, uint32_t instance_count=1, uint32_t first_vertex=0, uint32_t first_instance=0)=0
virtual RHICommandList & PushConstant(RHIPipelineState *pipeline, RHIShaderStage stage, uint32_t offset, Span< const char > data)=0
virtual RHICommandList & EndGraphics()=0
virtual RHICommandList & BindIndexBuffer(RHIBuffer *buffer, size_t offset=0, RHIResourceFormat format=RHIResourceFormat::R32Uint)=0
virtual RHICommandList & DebugInsertMarker(const char *message)=0
const RHICommandPool & mCommandPool
Definition Command.hpp:36
virtual RHICommandList & SetBufferTransition(RHIBuffer *buffer, TransitionDesc const &desc)=0
virtual RHICommandList & SetScissor(uint32_t x, uint32_t y, uint32_t width, uint32_t height)=0
virtual RHICommandList & BeginGraphics(GraphicsDesc const &desc)=0
virtual RHICommandList & EndTransition()=0
virtual RHICommandList & BindDescriptorSet(RHIDevicePipelineType bindpoint, RHIPipelineState *pipeline, Span< RHIDeviceDescriptorSet *const > sets, size_t first=0)=0
virtual RHICommandList & SetImageTransition(RHITexture *image, TransitionDesc const &desc)=0
virtual RHICommandList & Dispatch(uint32_t group_count_x, uint32_t group_count_y, uint32_t group_count_z)=0
virtual RHICommandList & CopyImage(RHITexture *src_image, RHITextureLayout src_layout, RHITexture *dst_image, RHITextureLayout dst_layout, Span< const CopyImageRegion > regions)=0
virtual RHICommandList & DrawMeshTasksIndirect(RHIBuffer *cmd_buffer, size_t cmd_offset, size_t draw_count, size_t stride)=0
virtual RHICommandList & CopyBufferToImage(RHIBuffer *src_buffer, RHITexture *dst_image, RHITextureLayout dst_layout, Span< const CopyImageRegion > regions)=0
virtual RHICommandList & SetPipeline(PipelineDesc const &desc)=0
virtual RHICommandList & DrawIndexedIndirectCount(RHIBuffer *cmd_buffer, size_t cmd_offset, RHIBuffer *count_buffer, size_t count_offset, uint32_t max_draw_count, uint32_t cmd_stride)=0
virtual RHICommandList & BindVertexBuffer(uint32_t index, Span< RHIBuffer *const > buffers, Span< const size_t > offsets)=0
virtual RHICommandList & DrawIndexed(uint32_t index_count, uint32_t instance_count=1, uint32_t first_index=0, int32_t vertex_offset=0, uint32_t first_instance=0)=0
virtual RHICommandList & DrawMeshTasks(uint32_t group_count_x, uint32_t group_count_y, uint32_t group_count_z)=0
virtual RHICommandList & DebugBegin(const char *message)=0
virtual RHICommandList & CopyBuffer(RHIBuffer *src_buffer, RHIBuffer *dst_buffer, Span< const CopyBufferRegion > regions)=0
virtual RHICommandList & Begin()=0
virtual void DebugSetObjectName(const char *name)=0
virtual RHICommandList & FillBuffer(RHIBuffer *buffer, uint32_t value, size_t offset=0, size_t size=kFullSize)=0
virtual RHICommandList & SetViewport(float x, float y, float width, float height, float depth_min=0.0, float depth_max=1.0)=0
virtual RHICommandList & BeginTransition()=0
Definition Command.hpp:13
virtual RHICommandPoolScopedHandle< RHICommandList > CreateCommandList()=0
virtual void ResetAllCommandLists(bool freeResources=false)=0
const RHIDevice & mDevice
Definition Command.hpp:15
virtual void DestroyCommandList(Handle handle)=0
struct Foundation::RHI::RHICommandPool::PoolDesc mDesc
virtual void DebugSetObjectName(const char *name)=0
virtual RHICommandList * GetCommandList(Handle handle) const =0
RHICommandPool(RHIDevice const &device, PoolDesc desc)
Definition Command.hpp:23
Definition Device.hpp:131
Base class for all RHI objects.
Definition Details.hpp:16
Definition PipelineState.hpp:7
Definition Resource.hpp:169
Definition Resource.hpp:146
std::unique_ptr< T, StlDeleter< T > > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:161
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:5
RHIHandle< RHICommandPool, T > RHICommandPoolHandle
Definition Command.hpp:11
const uint32_t kCommandQueueTransferIgnored
Definition Command.hpp:33
glm::vec< 3, int32_t > RHIOffset3D
Definition Common.hpp:14
RHIDevicePipelineType
Definition Common.hpp:84
RHITextureLayout
Definition Common.hpp:99
uint64_t Handle
Definition Details.hpp:9
glm::vec< 3, uint32_t > RHIExtent3D
Definition Common.hpp:11
RHIDeviceQueueType
Definition Common.hpp:69
RHIResourceFormat
Definition Common.hpp:20
static constexpr size_t kFullSize
Definition Common.hpp:8
RHICommandPoolType
Definition Common.hpp:63
RHIScopedHandle< RHICommandPool, T > RHICommandPoolScopedHandle
Definition Command.hpp:12
size_t dstOffset
Definition Command.hpp:81
size_t srcOffset
Definition Command.hpp:80
RHIOffset3D srcOffset
Definition Command.hpp:93
uint32_t srcBufferOffset
Definition Command.hpp:91
RHITextureSubresourceLayer dstLayer
Definition Command.hpp:94
RHITextureSubresourceLayer srcLayer
Definition Command.hpp:92
RHIExtent3D extent
Definition Command.hpp:99
RHIOffset3D dstOffset
Definition Command.hpp:95
Optional< RHIClearDepthStencil > clearDepthStencil
Definition Command.hpp:113
Optional< RHIClearColor > clearColor
Definition Command.hpp:110
RHITextureLayout imageLayout
Definition Command.hpp:108
constexpr bool IsValid() const
Definition Command.hpp:114
RHITextureView * imageView
Definition Command.hpp:107
Span< const Attachment > colorAttachments
Definition Command.hpp:119
const Attachment depthAttachment
Definition Command.hpp:120
uint32_t width
Definition Command.hpp:122
uint32_t height
Definition Command.hpp:122
const Attachment stencilAttachment
Definition Command.hpp:121
RHIDevicePipelineType type
Definition Command.hpp:59
RHIPipelineState * pipeline
Definition Command.hpp:58
RHITextureSubresourceRange srcImgRange
Definition Command.hpp:45
RHITextureLayout srcImgLayout
Definition Command.hpp:44
RHIPipelineStage srcStage
Definition Command.hpp:42
RHITextureLayout dstImgLayout
Definition Command.hpp:44
RHIResourceAccess dstAccess
Definition Command.hpp:41
RHIResourceAccess srcAccess
Definition Command.hpp:41
uint32_t srcQueueIndex
Definition Command.hpp:49
uint32_t dstQueueIndex
Definition Command.hpp:49
size_t srcBufferSize
Definition Command.hpp:47
size_t srcBufferOffset
Definition Command.hpp:47
RHIPipelineStage dstStage
Definition Command.hpp:42
RHIDeviceQueueType queue
Definition Command.hpp:19
RHICommandPoolType type
Definition Command.hpp:21
static void Destroy(RHICommandPool *pool, Handle handle)
Definition Command.hpp:148
static RHICommandList * Get(RHICommandPool const *pool, Handle handle)
Definition Command.hpp:145
Provides type traits for types derived from RHIObject.
Definition Details.hpp:30