Nebula
Loading...
Searching...
No Matches
config.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
12#include "core/types.h"
13#include "util/string.h"
14#include "core/rttimacros.h"
15
16#define NEBULA_WHOLE_BUFFER_SIZE (-1)
17namespace CoreGraphics
18{
20
22{
23 struct
24 {
26 bool primRestart : 1;
27 };
28 byte key;
29
30 void operator=(const InputAssemblyKey& rhs) { this->key = rhs.key; }
31 bool operator==(const InputAssemblyKey& rhs) const { return this->key == rhs.key; }
32 bool operator!=(const InputAssemblyKey& rhs) const { return this->key != rhs.key; }
33 bool operator>(const InputAssemblyKey& rhs) const { return this->key > rhs.key; }
34 bool operator<(const InputAssemblyKey& rhs) const { return this->key < rhs.key; }
35};
36
48
56
78
79enum class ImageBits
80{
81 Auto = 0, // Special value to be used only by framescript
82 ColorBits = (1 << 0),
83 DepthBits = (1 << 1),
84 StencilBits = (1 << 2),
85 MetaBits = (1 << 3),
86 Plane0Bits = (1 << 4),
87 Plane1Bits = (1 << 5),
88 Plane2Bits = (1 << 6)
89};
92
106
108{
111 ComputePipeline, // Compute pipeline is not the compute queue, it's just resources available for compute shaders
114
115//------------------------------------------------------------------------------
118inline ShaderVisibility
120{
121 Util::Array<Util::String> components = str.Tokenize("|");
123 IndexT i;
124 for (i = 0; i < components.Size(); i++)
125 {
126 const Util::String& component = components[i];
127 if (component == "VS") ret |= VertexShaderVisibility;
128 else if (component == "HS") ret |= HullShaderVisibility;
129 else if (component == "DS") ret |= DomainShaderVisibility;
130 else if (component == "GS") ret |= GeometryShaderVisibility;
131 else if (component == "PS") ret |= PixelShaderVisibility;
132 else if (component == "CS") ret |= ComputeShaderVisibility;
133 else if (component == "TS") ret |= TaskShaderVisibility;
134 else if (component == "MS") ret |= MeshShaderVisibility;
135 else if (component == "RGS") ret |= RayGenerationShaderVisibility;
136 else if (component == "RAS") ret |= RayAnyHitShaderVisibility;
137 else if (component == "RCS") ret |= RayClosestHitShaderVisibility;
138 else if (component == "RMS") ret |= RayMissShaderVisibility;
139 else if (component == "RIS") ret |= RayIntersectionShaderVisibility;
140 else if (component == "CAS") ret |= CallableShaderVisibility;
141 }
142
143 return ret;
144}
145
146//------------------------------------------------------------------------------
149inline QueueType
151{
152 if (str == "Graphics") return GraphicsQueueType;
153 else if (str == "Compute") return ComputeQueueType;
154 else if (str == "Transfer") return TransferQueueType;
155 else if (str == "Sparse") return SparseQueueType;
156 return GraphicsQueueType;
157}
158
159//------------------------------------------------------------------------------
162inline const char*
164{
165 switch (type)
166 {
168 return "Graphics";
169 case ComputeQueueType:
170 return "Compute";
172 return "Transfer";
173 case SparseQueueType:
174 return "Sparse";
175 default:
176 return "Graphics";
177 }
178}
179
180
182{
183 Global,
184 Pass
185};
186
188{
190 Top, // Top of pipe
191 Bottom, // Bottom of pipe
192 Indirect, // Indirect dispatch/draw fetching stage
193 Index, // Index fetch (automatically vertex shader)
194 Vertex, // Vertex fetch stage (automatically vertex shader)
195 UniformGraphics, // Uniform read on graphics queue
196 UniformCompute, // Uniform read on compute queue
197 InputAttachment, // Input attachment read (automatically pixel shader)
198 ReadOnlyAccess = InputAttachment, // All of the above enums are read-only
215 ColorRead, // Color output read
216 ColorWrite, // Color output write
217 DepthStencilRead, // Depth-Stencil output read
218 DepthStencilWrite, // Depth-Stencil output write
225 TransferRead, // Memory transfering read
226 TransferWrite, // Memory transfering write
227 HostRead, // Host operations read
228 HostWrite, // Host operations write
229 MemoryRead, // Memory operations read
230 MemoryWrite, // Memory operations write
231 AccelerationStructureRead, // Read acceleration structure
232 AccelerationStructureWrite, // Write acceleration structure
233 ImageInitial, // Special pipeline stage for initial images
234 Present // Special pipeline stage for present images
235};
236
238
239//------------------------------------------------------------------------------
242inline PipelineStage
244{
245 if (str == "Top") return PipelineStage::Top;
246 else if (str == "Bottom") return PipelineStage::Bottom;
247 else if (str == "IndirectRead") return PipelineStage::Indirect;
248 else if (str == "IndexRead") return PipelineStage::Index;
249 else if (str == "VertexRead") return PipelineStage::Vertex;
250 else if (str == "UniformGraphicsRead") return PipelineStage::UniformGraphics;
251 else if (str == "UniformComputeRead") return PipelineStage::UniformCompute;
252 else if (str == "InputAttachmentRead") return PipelineStage::InputAttachment;
253 else if (str == "VertexShaderRead") return PipelineStage::VertexShaderRead;
254 else if (str == "VertexShaderWrite") return PipelineStage::VertexShaderWrite;
255 else if (str == "HullShaderRead") return PipelineStage::HullShaderRead;
256 else if (str == "HullShaderWrite") return PipelineStage::HullShaderWrite;
257 else if (str == "DomainShaderRead") return PipelineStage::DomainShaderRead;
258 else if (str == "DomainShaderWrite") return PipelineStage::DomainShaderWrite;
259 else if (str == "GeometryShaderRead") return PipelineStage::GeometryShaderRead;
260 else if (str == "GeometryShaderWrite") return PipelineStage::GeometryShaderWrite;
261 else if (str == "PixelShaderRead") return PipelineStage::PixelShaderRead;
262 else if (str == "PixelShaderWrite") return PipelineStage::PixelShaderWrite;
263 else if (str == "ComputeShaderRead") return PipelineStage::ComputeShaderRead;
264 else if (str == "ComputeShaderWrite") return PipelineStage::ComputeShaderWrite;
265 else if (str == "ColorAttachmentRead") return PipelineStage::ColorRead;
266 else if (str == "ColorAttachmentWrite") return PipelineStage::ColorWrite;
267 else if (str == "DepthAttachmentRead") return PipelineStage::DepthStencilRead;
268 else if (str == "DepthAttachmentWrite") return PipelineStage::DepthStencilWrite;
269 else if (str == "TransferRead") return PipelineStage::TransferRead;
270 else if (str == "TransferWrite") return PipelineStage::TransferWrite;
271 else if (str == "HostRead") return PipelineStage::HostRead;
272 else if (str == "HostWrite") return PipelineStage::HostWrite;
273 else if (str == "MemoryRead") return PipelineStage::MemoryRead;
274 else if (str == "MemoryWrite") return PipelineStage::MemoryWrite;
275 else if (str == "Present") return PipelineStage::Present;
276 else
277 {
278 n_error("Invalid pipeline stage '%s'\n", str.AsCharPtr());
280 }
281}
282
283} // namespace CoreGraphics
284
285
286#define SHADER_POSTEFFECT_DEFAULT_FEATURE_MASK "Alt0"
287
288#if !PUBLIC_BUILD
289#define NEBULA_GRAPHICS_DEBUG 1
290#define NEBULA_MARKER_BLUE Math::vec4(0.8f, 0.8f, 1.0f, 1.0f)
291#define NEBULA_MARKER_RED Math::vec4(1.0f, 0.8f, 0.8f, 1.0f)
292#define NEBULA_MARKER_GREEN Math::vec4(0.8f, 1.0f, 0.8f, 1.0f)
293#define NEBULA_MARKER_DARK_GREEN Math::vec4(0.6f, 0.8f, 0.6f, 1.0f)
294#define NEBULA_MARKER_DARK_DARK_GREEN Math::vec4(0.5f, 0.7f, 0.5f, 1.0f)
295#define NEBULA_MARKER_PINK Math::vec4(1.0f, 0.8f, 0.9f, 1.0f)
296#define NEBULA_MARKER_PURPLE Math::vec4(0.9f, 0.7f, 0.9f, 1.0f)
297#define NEBULA_MARKER_ORANGE Math::vec4(1.0f, 0.9f, 0.8f, 1.0f)
298#define NEBULA_MARKER_TURQOISE Math::vec4(0.8f, 0.9f, 1.0f, 1.0f)
299#define NEBULA_MARKER_GRAY Math::vec4(0.9f, 0.9f, 0.9f, 1.0f)
300#define NEBULA_MARKER_BLACK Math::vec4(0.001f)
301#define NEBULA_MARKER_WHITE Math::vec4(1)
302
303#define NEBULA_MARKER_COMPUTE NEBULA_MARKER_BLUE
304#define NEBULA_MARKER_GRAPHICS NEBULA_MARKER_GREEN
305#define NEBULA_MARKER_TRANSFER NEBULA_MARKER_RED
306
307#endif
308
309//------------------------------------------------------------------------------
310#if __VULKAN__
311 #define COREGRAPHICS_TRIANGLE_FRONT_FACE_CCW (1)
312 // define the same descriptor set slots as we do in the shaders
313 #define NEBULA_TICK_GROUP 0 // set per tick (once for all views) by the system
314 #define NEBULA_FRAME_GROUP 1 // set per frame (once per view) by the system
315 #define NEBULA_PASS_GROUP 2 // set per pass by the system
316 #define NEBULA_BATCH_GROUP 3 // set per batch (material settings or system stuff)
317 #define NEBULA_INSTANCE_GROUP 4 // set a batch-internal copy of some specific settings
318 #define NEBULA_SYSTEM_GROUP 5 // set a batch-internal copy of some specific settings
319 #define NEBULA_DYNAMIC_OFFSET_GROUP 6 // set once per shader and is offset for each instance
320 #define NEBULA_NUM_GROUPS (NEBULA_DYNAMIC_OFFSET_GROUP + 1)
321
322 #define MAX_INPUT_ATTACHMENTS 32
323
324 #define SHADER_MODEL_5 (1)
325 #ifdef _DEBUG
326 #define NEBULA_VULKAN_DEBUG (1)
327 #else
328 #define NEBULA_VULKAN_DEBUG (0)
329 #endif
330 #define PROJECTION_HANDEDNESS_LH (0)
331#if __X64__
332 #define VK_DEVICE_SIZE_CONV(x) uint64_t(x)
333#else
334 #define VK_DEVICE_SIZE_CONV(x) uint32_t(x)
335#endif
336#endif
337//------------------------------------------------------------------------------
A pass describe a set of textures used for rendering.
Nebula's dynamic array class.
Definition array.h:60
const SizeT Size() const
get number of elements in array
Definition array.h:878
void __cdecl n_error(const char *msg,...)
This function is called when a serious situation is encountered which requires abortion of the applic...
Definition debug.cc:138
Acceleration structures are used to enable ray tracing on the GPU by dividing the scene into a BVH.
Definition accelerationstructure.h:24
ImageLayout
Definition config.h:94
QueryType
Definition config.h:50
@ TimestampsQueryType
Definition config.h:53
@ NumQueryTypes
Definition config.h:54
@ StatisticsQueryType
Definition config.h:52
@ OcclusionQueryType
Definition config.h:51
const char * QueueNameFromQueueType(const QueueType type)
Definition config.h:163
QueueType
Definition config.h:38
@ ComputeQueueType
Definition config.h:40
@ NumQueueTypes
Definition config.h:44
@ InvalidQueueType
Definition config.h:46
@ SparseQueueType
Definition config.h:42
@ GraphicsQueueType
Definition config.h:39
@ TransferQueueType
Definition config.h:41
ShaderVisibility
Definition config.h:58
@ AllGraphicsVisibility
Definition config.h:65
@ InvalidVisibility
Definition config.h:59
@ VertexShaderVisibility
Definition config.h:60
@ RayMissShaderVisibility
Definition config.h:72
@ RayGenerationShaderVisibility
Definition config.h:69
@ HullShaderVisibility
Definition config.h:61
@ ComputeShaderVisibility
Definition config.h:68
@ TaskShaderVisibility
Definition config.h:66
@ MeshShaderVisibility
Definition config.h:67
@ CallableShaderVisibility
Definition config.h:74
@ RayAnyHitShaderVisibility
Definition config.h:70
@ GeometryShaderVisibility
Definition config.h:63
@ RayIntersectionShaderVisibility
Definition config.h:73
@ DomainShaderVisibility
Definition config.h:62
@ RayClosestHitShaderVisibility
Definition config.h:71
@ AllVisibility
Definition config.h:75
@ PixelShaderVisibility
Definition config.h:64
uint ConstantBufferOffset
Definition config.h:19
PipelineStage PipelineStageFromString(const Util::String &str)
Definition config.h:243
ShaderPipeline
Definition config.h:108
@ ComputePipeline
Definition config.h:111
@ InvalidPipeline
Definition config.h:109
@ GraphicsPipeline
Definition config.h:110
@ RayTracingPipeline
Definition config.h:112
ImageBits
Definition config.h:80
BarrierDomain
Definition config.h:182
PipelineStage
Definition config.h:188
QueueType QueueTypeFromString(const Util::String &str)
Definition config.h:150
ShaderVisibility ShaderVisibilityFromString(const Util::String &str)
Definition config.h:119
This defines the macros for Nebula's RTTI mechanism (__DeclareClass, __ImplementClass,...
#define __ImplementEnumComparisonOperators(type)
Definition rttimacros.h:392
#define __ImplementEnumBitOperators(type)
Neat macro to make enums act as bit flags, be able to check if bits are set, and convert to integers.
Definition rttimacros.h:376
Nebula's universal string class.
Definition String.cs:8
const char * AsCharPtr() const
return contents as character pointer
Definition string.h:539
SizeT Tokenize(const String &whiteSpace, Array< String > &outTokens) const
tokenize string into a provided String array (faster if tokens array can be reused)
Definition string.cc:203
unsigned int uint
Definition types.h:31
int IndexT
Definition types.h:48
Definition config.h:22
uint topo
Definition config.h:25
byte key
Definition config.h:28
void operator=(const InputAssemblyKey &rhs)
Definition config.h:30
bool operator<(const InputAssemblyKey &rhs) const
Definition config.h:34
bool operator!=(const InputAssemblyKey &rhs) const
Definition config.h:32
bool primRestart
Definition config.h:26
bool operator==(const InputAssemblyKey &rhs) const
Definition config.h:31
bool operator>(const InputAssemblyKey &rhs) const
Definition config.h:33