Nebula
Loading...
Searching...
No Matches
vkcommandbuffer.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
9//------------------------------------------------------------------------------
10#include "ids/idallocator.h"
11#include "vkloader.h"
13#include "coregraphics/pass.h"
14#include "coregraphics/shader.h"
15
16
17namespace CoreGraphics
18{
19struct PassId;
20struct ShaderProgramId;
21};
22
23namespace Vulkan
24{
25
26
27#if NEBULA_GRAPHICS_DEBUG
28struct NvidiaAftermathCheckpoint
29{
30 Util::StringAtom name;
31 NvidiaAftermathCheckpoint* prev;
32 bool push : 1;
33};
34#endif
35
36extern PFN_vkCmdBeginDebugUtilsLabelEXT VkCmdDebugMarkerBegin;
37extern PFN_vkCmdEndDebugUtilsLabelEXT VkCmdDebugMarkerEnd;
38extern PFN_vkCmdInsertDebugUtilsLabelEXT VkCmdDebugMarkerInsert;
39
41const VkCommandPool CmdBufferPoolGetVk(const CoreGraphics::CmdBufferPoolId id);
44
45enum
46{
49};
51
52//------------------------------------------------------------------------------
55static const uint NumPoolTypes = 4;
62
64const VkCommandBuffer CmdBufferGetVk(const CoreGraphics::CmdBufferId id);
66const VkCommandPool CmdBufferGetVkPool(const CoreGraphics::CmdBufferId id);
68const VkDevice CmdBufferGetVkDevice(const CoreGraphics::CmdBufferId id);
69#if NEBULA_GRAPHICS_DEBUG
71Util::Array<NvidiaAftermathCheckpoint> CmdBufferMoveVkNvCheckpoints(const CoreGraphics::CmdBufferId id);
72#endif
73
74enum
75{
84#if NEBULA_ENABLE_PROFILING
85 , CmdBuffer_RecordsMarkers
86 , CmdBuffer_ProfilingMarkers
87 , CmdBuffer_Query
88#endif
89#if NEBULA_GRAPHICS_DEBUG
90 , CmdBuffer_NVCheckpoints
91#endif
92};
93
95{
96 VkGraphicsPipelineCreateInfo pipelineInfo;
97 VkPipelineColorBlendStateCreateInfo blendInfo;
98 VkPipelineMultisampleStateCreateInfo multisampleInfo;
100 VkPipelineLayout computeLayout;
101 VkPipelineLayout graphicsLayout;
102 VkPipelineLayout raytracingLayout;
105 CoreGraphics::ShaderProgramId program;
106};
107
109{
111
117
119
126
127
129 {
130 Util::Array<QueryChunk>& chunks = this->chunks[queryType];
131 QueryState& state = this->states[queryType];
132
133 auto chunkCreator = [&state, &chunks](CoreGraphics::QueryType type) -> QueryChunk&
134 {
135 QueryChunk& newChunk = chunks.Emplace();
136 newChunk.offset = CoreGraphics::AllocateQueries(type, state.chunkSize);
137 newChunk.queryCount = 0;
138 return newChunk;
139 };
140
141 if (!chunks.IsEmpty())
142 {
143 QueryChunk& currentChunk = chunks[state.currentChunk];
144
145 // If chunk is full, get new
146 if (currentChunk.queryCount == state.chunkSize)
147 {
148 QueryChunk& newChunk = chunkCreator(queryType);
149 state.currentChunk++;
150 return newChunk;
151 }
152 return currentChunk;
153 }
154 else
155 {
156 return chunkCreator(queryType);
157 }
158 };
159};
160
166
172
174 0x1000
175 , VkDevice
176 , VkCommandBuffer
177 , VkCommandPool
183#if NEBULA_ENABLE_PROFILING
184 , bool
187#endif
188#if NEBULA_GRAPHICS_DEBUG
190#endif
192
193} // Vulkan
An ID allocator associates an id with a slice in an N number of arrays.
Definition idallocator.h:39
Definition idallocator.h:105
Nebula's dynamic array class.
Definition array.h:61
Implements a fixed size one-dimensional array.
Definition fixedarray.h:20
Acceleration structures are used to enable ray tracing on the GPU by dividing the scene into a BVH.
Definition accelerationstructure.h:24
QueryType
Definition config.h:52
@ NumQueryTypes
Definition config.h:56
QueueType
Definition config.h:40
@ NumQueueTypes
Definition config.h:46
CmdPipelineBuildBits
Definition commandbuffer.h:55
uint AllocateQueries(const CoreGraphics::QueryType type, uint numQueries)
Allocate a range of queries.
Definition vkgraphicsdevice.cc:2197
Vulkan implementation of GPU acceleration structure.
Definition vkaccelerationstructure.cc:15
PFN_vkCmdEndDebugUtilsLabelEXT VkCmdDebugMarkerEnd
Definition vkcommandbufferthread.cc:25
@ CmdBuffer_PendingViewports
Definition vkcommandbuffer.h:81
@ CmdBuffer_PipelineBuildBits
Definition vkcommandbuffer.h:79
@ CmdBuffer_VkCommandPool
Definition vkcommandbuffer.h:78
@ CmdBuffer_VkDevice
Definition vkcommandbuffer.h:76
@ CmdBuffer_VkPipelineBundle
Definition vkcommandbuffer.h:80
@ CmdBuffer_VkCommandBuffer
Definition vkcommandbuffer.h:77
@ CmdBuffer_Usage
Definition vkcommandbuffer.h:83
@ CmdBuffer_PendingScissors
Definition vkcommandbuffer.h:82
Ids::IdAllocatorSafe< 0x1000, VkDevice, VkCommandBuffer, VkCommandPool, CoreGraphics::CmdPipelineBuildBits, VkPipelineBundle, ViewportBundle, ScissorBundle, CoreGraphics::QueueType > VkCommandBufferAllocator
Definition vkcommandbuffer.h:191
const VkCommandPool CmdBufferPoolGetVk(const CoreGraphics::CmdBufferPoolId id)
get vk command buffer pool
Definition vkcommandbuffer.cc:37
PFN_vkCmdInsertDebugUtilsLabelEXT VkCmdDebugMarkerInsert
Definition vkcommandbufferthread.cc:26
Ids::IdAllocator< VkDevice, VkCommandPool > VkCommandBufferPoolAllocator
Definition vkcommandbuffer.h:50
@ CommandBufferPool_VkCommandPool
Definition vkcommandbuffer.h:48
@ CommandBufferPool_VkDevice
Definition vkcommandbuffer.h:47
static const uint NumPoolTypes
Definition vkcommandbuffer.h:55
Vulkan::GraphicsDeviceState state
const VkCommandBuffer CmdBufferGetVk(const CoreGraphics::CmdBufferId id)
Get vk command buffer.
Definition vkcommandbuffer.cc:55
const VkCommandPool CmdBufferGetVkPool(const CoreGraphics::CmdBufferId id)
Get vk command buffer pool.
Definition vkcommandbuffer.cc:65
const VkDevice CmdBufferPoolGetVkDevice(const CoreGraphics::CmdBufferPoolId id)
get vk device that created the pool
Definition vkcommandbuffer.cc:46
const VkDevice CmdBufferGetVkDevice(const CoreGraphics::CmdBufferId id)
Get vk device.
Definition vkcommandbuffer.cc:74
PFN_vkCmdBeginDebugUtilsLabelEXT VkCmdDebugMarkerBegin
Definition vkcommandbufferthread.cc:24
A shader represents an entire shader resource, containing several stages and programs.
Definition commandbuffer.h:176
Definition commandbuffer.h:171
Definition commandbuffer.h:103
Definition pass.h:28
Definition pass.h:29
Definition vkcommandbuffer.h:57
VkCommandPool pools[CoreGraphics::QueueType::NumQueueTypes][NumPoolTypes]
Definition vkcommandbuffer.h:58
uint queueFamilies[CoreGraphics::QueueType::NumQueueTypes]
Definition vkcommandbuffer.h:59
VkDevice dev
Definition vkcommandbuffer.h:60
Definition vkcommandbuffer.h:113
uint queryCount
Definition vkcommandbuffer.h:115
uint offset
Definition vkcommandbuffer.h:114
Definition vkcommandbuffer.h:121
uint chunkSize
Definition vkcommandbuffer.h:123
uint currentChunk
Definition vkcommandbuffer.h:122
Definition vkcommandbuffer.h:109
QueryState states[CoreGraphics::QueryType::NumQueryTypes]
Definition vkcommandbuffer.h:125
QueryChunk & GetChunk(CoreGraphics::QueryType queryType)
Definition vkcommandbuffer.h:128
bool enabled[CoreGraphics::QueryType::NumQueryTypes]
Definition vkcommandbuffer.h:110
Util::Array< QueryChunk > chunks[CoreGraphics::QueryType::NumQueryTypes]
Definition vkcommandbuffer.h:118
Definition vkcommandbuffer.h:168
uint numPending
Definition vkcommandbuffer.h:170
Util::FixedArray< VkRect2D > scissors
Definition vkcommandbuffer.h:169
Definition vkcommandbuffer.h:162
uint numPending
Definition vkcommandbuffer.h:164
Util::FixedArray< VkViewport > viewports
Definition vkcommandbuffer.h:163
Definition vkcommandbuffer.h:95
VkPipelineLayout raytracingLayout
Definition vkcommandbuffer.h:102
VkGraphicsPipelineCreateInfo pipelineInfo
Definition vkcommandbuffer.h:96
CoreGraphics::PassId pass
Definition vkcommandbuffer.h:103
VkPipelineLayout graphicsLayout
Definition vkcommandbuffer.h:101
CoreGraphics::RenderPassId renderPass
Definition vkcommandbuffer.h:104
VkPipelineMultisampleStateCreateInfo multisampleInfo
Definition vkcommandbuffer.h:98
VkPipelineLayout computeLayout
Definition vkcommandbuffer.h:100
CoreGraphics::ShaderProgramId program
Definition vkcommandbuffer.h:105
CoreGraphics::InputAssemblyKey inputAssembly
Definition vkcommandbuffer.h:99
VkPipelineColorBlendStateCreateInfo blendInfo
Definition vkcommandbuffer.h:97
unsigned int uint
Definition types.h:33
Definition config.h:24