Foundation
Loading...
Searching...
No Matches
Common.hpp
Go to the documentation of this file.
1#pragma once
2#define VULKAN_HPP_NO_CONSTRUCTORS
3#include <vulkan/vulkan.hpp>
4#include <vulkan/vulkan_raii.hpp>
5
6#include <RHICore/Common.hpp>
7namespace Foundation::RHI {
9 {
11 vk::AllocationCallbacks callbacks{};
12
14 {
16 }
17
19 {
21 callbacks = vk::AllocationCallbacks{
22 .pUserData = allocator,
24 .pfnReallocation = &VulkanAllocationCallbacks::Reallocate,
26 };
27 }
28
29 [[nodiscard]] vk::AllocationCallbacks const* Get() const
30 {
31 return allocator ? &callbacks : nullptr;
32 }
33
35 {
36 return allocator ? &*callbacks : nullptr;
37 }
38
39 private:
40 static void* VKAPI_PTR Allocate(void* userData, size_t size, size_t alignment,
41 vk::SystemAllocationScope)
42 {
43 if (!userData || size == 0)
44 return nullptr;
45 try
46 {
47 return static_cast<Allocator*>(userData)->Allocate(size, alignment ? alignment : alignof(std::max_align_t));
48 }
49 catch (...)
50 {
51 return nullptr;
52 }
53 }
54
55 static void* VKAPI_PTR Reallocate(void* userData, void* original, size_t size, size_t alignment,
56 vk::SystemAllocationScope)
57 {
58 if (!userData)
59 return nullptr;
60 auto* allocator = static_cast<Allocator*>(userData);
61 try
62 {
63 if (size == 0)
64 {
66 return nullptr;
67 }
68 if (!original)
69 return allocator->Allocate(size, alignment ? alignment : alignof(std::max_align_t));
70 return allocator->Reallocate(original, size, alignment ? alignment : alignof(std::max_align_t));
71 }
72 catch (...)
73 {
74 return nullptr;
75 }
76 }
77
78 static void VKAPI_PTR Free(void* userData, void* memory)
79 {
80 if (userData && memory)
81 static_cast<Allocator*>(userData)->Deallocate(memory);
82 }
83 };
84
85 template<typename Bits> Bits vkFlagsToBits(vk::Flags<Bits> flags) {
86 return static_cast<Bits>(static_cast<std::underlying_type_t<Bits>>(flags));
87 }
88 inline vk::Format vkFormatFromRHIFormat(RHIResourceFormat format) {
90 switch (format) {
91 case R8G8B8A8Unorm: return vk::Format::eR8G8B8A8Unorm;
92 case R8G8B8A8Srgb: return vk::Format::eR8G8B8A8Srgb;
93 case B8G8R8A8Unrom: return vk::Format::eB8G8R8A8Unorm;
94 case B8G8R8A8Srgb: return vk::Format::eB8G8R8A8Srgb;
95 case A2R10G10B10Unorm: return vk::Format::eA2R10G10B10UnormPack32;
96 case A2R10G10B10Snorm: return vk::Format::eA2R10G10B10SnormPack32;
97 case A2B10G10R10Unorm: return vk::Format::eA2B10G10R10UnormPack32;
98 case A2B10G10R10Snorm: return vk::Format::eA2B10G10R10SnormPack32;
99 case B10G11R11Ufloat: return vk::Format::eB10G11R11UfloatPack32;
100 case R32SignedFloat: return vk::Format::eR32Sfloat;
101 case R32G32SignedFloat: return vk::Format::eR32G32Sfloat;
102 case R32G32B32SignedFloat: return vk::Format::eR32G32B32Sfloat;
103 case R32G32B32A32SignedFloat: return vk::Format::eR32G32B32A32Sfloat;
104 case R16SignedFloat: return vk::Format::eR16Sfloat;
105 case R16G16SignedFloat: return vk::Format::eR16G16Sfloat;
106 case R16G16B16SignedFloat: return vk::Format::eR16G16B16Sfloat;
107 case R16G16B16A16SignedFloat: return vk::Format::eR16G16B16A16Sfloat;
108 case R32Uint: return vk::Format::eR32Uint;
109 case R16Uint: return vk::Format::eR16Uint;
110 case R16Unorm: return vk::Format::eR16Unorm;
111 case D32SignedFloat: return vk::Format::eD32Sfloat;
112 case D16Unorm: return vk::Format::eD16Unorm;
113 case Bc1RgbUnorm: return vk::Format::eBc1RgbUnormBlock;
114 case Bc1RgbSrgb: return vk::Format::eBc1RgbSrgbBlock;
115 case Bc1RgbaUnorm: return vk::Format::eBc1RgbaUnormBlock;
116 case Bc1RgbaSrgb: return vk::Format::eBc1RgbaSrgbBlock;
117 case Bc2Unorm: return vk::Format::eBc2UnormBlock;
118 case Bc2Srgb: return vk::Format::eBc2SrgbBlock;
119 case Bc3Unorm: return vk::Format::eBc3UnormBlock;
120 case Bc3Srgb: return vk::Format::eBc3SrgbBlock;
121 case Bc4Unorm: return vk::Format::eBc4UnormBlock;
122 case Bc4Snorm: return vk::Format::eBc4SnormBlock;
123 case Bc5Unorm: return vk::Format::eBc5UnormBlock;
124 case Bc5Snorm: return vk::Format::eBc5SnormBlock;
125 case Bc6HUfloat: return vk::Format::eBc6HUfloatBlock;
126 case Bc6HSfloat: return vk::Format::eBc6HSfloatBlock;
127 case Bc7Unorm: return vk::Format::eBc7UnormBlock;
128 case Bc7Srgb: return vk::Format::eBc7SrgbBlock;
129 case Undefined:
130 default:
131 return vk::Format::eUndefined;
132 }
133 }
134
135 inline vk::ColorSpaceKHR vkColorSpaceFromRHIColorSpace(RHIColorSpace colorSpace) {
136 using enum RHIColorSpace;
137 switch (colorSpace) {
138 case SrgbNonLinear: return vk::ColorSpaceKHR::eSrgbNonlinear;
139 case ExtendedSrgbLinear: return vk::ColorSpaceKHR::eExtendedSrgbLinearEXT;
140 case Hdr10St2084: return vk::ColorSpaceKHR::eHdr10St2084EXT;
141 default:
142 return vk::ColorSpaceKHR::eSrgbNonlinear;
143 }
144 }
145
146 inline RHIColorSpace rhiColorSpaceFromVkColorSpace(vk::ColorSpaceKHR colorSpace) {
147 using enum RHIColorSpace;
148 switch (colorSpace) {
149 case vk::ColorSpaceKHR::eSrgbNonlinear: return SrgbNonLinear;
150 case vk::ColorSpaceKHR::eExtendedSrgbLinearEXT: return ExtendedSrgbLinear;
151 case vk::ColorSpaceKHR::eHdr10St2084EXT: return Hdr10St2084;
152 default:
153 return SrgbNonLinear;
154 }
155 }
156
157 inline vk::BufferUsageFlags vkBufferUsageFromRHIBufferUsage(RHIBufferUsage usage) {
159 vk::BufferUsageFlags flags{};
160 if (usage & VertexBuffer) flags |= vk::BufferUsageFlagBits::eVertexBuffer;
161 if (usage & IndexBuffer) flags |= vk::BufferUsageFlagBits::eIndexBuffer;
162 if (usage & UniformBuffer) flags |= vk::BufferUsageFlagBits::eUniformBuffer;
163 if (usage & StorageBuffer) flags |= vk::BufferUsageFlagBits::eStorageBuffer;
164 if (usage & IndirectBuffer) flags |= vk::BufferUsageFlagBits::eIndirectBuffer;
165 if (usage & TransferSource) flags |= vk::BufferUsageFlagBits::eTransferSrc;
166 if (usage & TransferDestination) flags |= vk::BufferUsageFlagBits::eTransferDst;
167 if (usage & DeviceAddress) flags |= vk::BufferUsageFlagBits::eShaderDeviceAddress;
168 if (usage & AccelerationStructureStorage) flags |= vk::BufferUsageFlagBits::eAccelerationStructureStorageKHR;
169 if (usage & AccelerationStructureBuildReadOnly) flags |= vk::BufferUsageFlagBits::eAccelerationStructureBuildInputReadOnlyKHR;
170 if (usage & ShaderBindingTable) flags |= vk::BufferUsageFlagBits::eShaderBindingTableKHR;
171 return flags;
172 }
173
176 vk::AccessFlags2 flags{};
177 if (state & RenderTargetWrite) flags |= vk::AccessFlagBits2::eColorAttachmentWrite;
178 if (state & RenderTargetRead) flags |= vk::AccessFlagBits2::eColorAttachmentRead;
179 if (state & DepthStencilWrite) flags |= vk::AccessFlagBits2::eDepthStencilAttachmentWrite;
180 if (state & DepthStencilRead) flags |= vk::AccessFlagBits2::eDepthStencilAttachmentRead;
181 if (state & TransferWrite) flags |= vk::AccessFlagBits2::eTransferWrite;
182 if (state & TransferRead) flags |= vk::AccessFlagBits2::eTransferRead;
183 if (state & ShaderWrite) flags |= vk::AccessFlagBits2::eShaderWrite;
184 if (state & ShaderRead) flags |= vk::AccessFlagBits2::eShaderRead;
185 if (state & UniformRead) flags |= vk::AccessFlagBits2::eUniformRead;
186 if (state & HostWrite) flags |= vk::AccessFlagBits2::eHostWrite;
187 if (state & HostRead) flags |= vk::AccessFlagBits2::eHostRead;
188 if (state & AccelerationStructureRead) flags |= vk::AccessFlagBits2::eAccelerationStructureReadKHR;
189 if (state & AccelerationStructureWrite) flags |= vk::AccessFlagBits2::eAccelerationStructureWriteKHR;
190 if (state & IndirectCommandRead) flags |= vk::AccessFlagBits2::eIndirectCommandRead;
191 return flags;
192 }
193
195 switch (layout) {
196 case RHITextureLayout::Undefined: return vk::ImageLayout::eUndefined;
197 case RHITextureLayout::General: return vk::ImageLayout::eGeneral;
198 case RHITextureLayout::RenderTarget: return vk::ImageLayout::eColorAttachmentOptimal;
199 case RHITextureLayout::DepthStencil: return vk::ImageLayout::eDepthStencilAttachmentOptimal;
200 case RHITextureLayout::Present: return vk::ImageLayout::ePresentSrcKHR;
201 case RHITextureLayout::TransferDst: return vk::ImageLayout::eTransferDstOptimal;
202 case RHITextureLayout::TransferSrc: return vk::ImageLayout::eTransferSrcOptimal;
203 case RHITextureLayout::ShaderReadOnly: return vk::ImageLayout::eShaderReadOnlyOptimal;
204 default:
205 return vk::ImageLayout::eUndefined;
206 }
207 }
208
209 inline vk::PipelineStageFlags vkPipelineStageFlagsFromRHIPipelineStage(RHIPipelineStage stage) {
211 vk::PipelineStageFlags flags{};
212 if (stage & DrawIndirect) flags |= vk::PipelineStageFlagBits::eDrawIndirect;
213 if (stage & FragmentShader) flags |= vk::PipelineStageFlagBits::eFragmentShader;
214 if (stage & VertexShader) flags |= vk::PipelineStageFlagBits::eVertexShader;
215 if (stage & ComputeShader) flags |= vk::PipelineStageFlagBits::eComputeShader;
216 if (stage & RayTracingShader) flags |= vk::PipelineStageFlagBits::eRayTracingShaderKHR;
217 if (stage & MeshShader) flags |= vk::PipelineStageFlagBits::eMeshShaderEXT;
218 if (stage & RenderTargetOutput) flags |= vk::PipelineStageFlagBits::eColorAttachmentOutput;
219 if (stage & Transfer) flags |= vk::PipelineStageFlagBits::eTransfer;
220 if (stage & EarlyFragmentTests) flags |= vk::PipelineStageFlagBits::eEarlyFragmentTests;
221 if (stage & LateFragmentTests) flags |= vk::PipelineStageFlagBits::eLateFragmentTests;
222 if (stage & AccelerationBuild) flags |= vk::PipelineStageFlagBits::eAccelerationStructureBuildKHR;
223 if (stage & TopOfPipe) flags |= vk::PipelineStageFlagBits::eTopOfPipe;
224 if (stage & BottomOfPipe) flags |= vk::PipelineStageFlagBits::eBottomOfPipe;
225 if (stage & AllGraphics) flags |= vk::PipelineStageFlagBits::eAllGraphics;
226 if (stage & Host) flags |= vk::PipelineStageFlagBits::eHost;
227 return flags;
228 }
229
230 inline vk::PipelineStageFlags2 vkPipelineStageFlags2FromRHIPipelineStage(RHIPipelineStage stage) {
232 vk::PipelineStageFlags2 flags{};
233 if (stage & DrawIndirect) flags |= vk::PipelineStageFlagBits2::eDrawIndirect;
234 if (stage & FragmentShader) flags |= vk::PipelineStageFlagBits2::eFragmentShader;
235 if (stage & VertexShader) flags |= vk::PipelineStageFlagBits2::eVertexShader;
236 if (stage & ComputeShader) flags |= vk::PipelineStageFlagBits2::eComputeShader;
237 if (stage & RayTracingShader) flags |= vk::PipelineStageFlagBits2::eRayTracingShaderKHR;
238 if (stage & MeshShader) flags |= vk::PipelineStageFlagBits2::eMeshShaderEXT;
239 if (stage & TaskShader) flags |= vk::PipelineStageFlagBits2::eTaskShaderEXT;
240 if (stage & RenderTargetOutput) flags |= vk::PipelineStageFlagBits2::eColorAttachmentOutput;
241 if (stage & Transfer) flags |= vk::PipelineStageFlagBits2::eTransfer;
242 if (stage & EarlyFragmentTests) flags |= vk::PipelineStageFlagBits2::eEarlyFragmentTests;
243 if (stage & LateFragmentTests) flags |= vk::PipelineStageFlagBits2::eLateFragmentTests;
244 if (stage & AccelerationBuild) flags |= vk::PipelineStageFlagBits2::eAccelerationStructureBuildKHR;
245 if (stage & TopOfPipe) flags |= vk::PipelineStageFlagBits2::eTopOfPipe;
246 if (stage & BottomOfPipe) flags |= vk::PipelineStageFlagBits2::eBottomOfPipe;
247 if (stage & AllGraphics) flags |= vk::PipelineStageFlagBits2::eAllGraphics;
248 if (stage & Host) flags |= vk::PipelineStageFlagBits2::eHost;
249 return flags;
250 }
251
252 inline vk::ShaderStageFlags vkShaderStageFlagsFromRHIShaderStage(RHIShaderStage stage) {
254 vk::ShaderStageFlags flags{};
255 if (stage == All) return vk::ShaderStageFlagBits::eAll;
256 if (stage & Vertex) flags |= vk::ShaderStageFlagBits::eVertex;
257 if (stage & Fragment) flags |= vk::ShaderStageFlagBits::eFragment;
258 if (stage & Compute) flags |= vk::ShaderStageFlagBits::eCompute;
259 if (stage & RayGeneration) flags |= vk::ShaderStageFlagBits::eRaygenKHR;
260 if (stage & RayAnyHit) flags |= vk::ShaderStageFlagBits::eAnyHitKHR;
261 if (stage & RayClosestHit) flags |= vk::ShaderStageFlagBits::eClosestHitKHR;
262 if (stage & RayMiss) flags |= vk::ShaderStageFlagBits::eMissKHR;
263 if (stage & RayIntersection) flags |= vk::ShaderStageFlagBits::eIntersectionKHR;
264 if (stage & Task) flags |= vk::ShaderStageFlagBits::eTaskEXT;
265 if (stage & Mesh) flags |= vk::ShaderStageFlagBits::eMeshEXT;
266 return flags;
267 }
268
271 switch (type)
272 {
273 case Sampler:
274 return vk::DescriptorType::eSampler;
275 case SampledImage:
276 return vk::DescriptorType::eSampledImage;
277 case StorageImage:
278 return vk::DescriptorType::eStorageImage;
279 case StorageBuffer:
280 return vk::DescriptorType::eStorageBuffer;
281 case UniformBuffer:
282 return vk::DescriptorType::eUniformBuffer;
284 return vk::DescriptorType::eAccelerationStructureKHR;
285 default:
286 return {};
287 }
288 }
289
291 switch (type) {
292 case RHIDevicePipelineType::Compute: return vk::PipelineBindPoint::eCompute;
293 case RHIDevicePipelineType::Graphics: return vk::PipelineBindPoint::eGraphics;
294 case RHIDevicePipelineType::RayTracing: return vk::PipelineBindPoint::eRayTracingKHR;
295 default:
296 return {};
297 }
298 }
299
300 inline vk::ImageUsageFlags vkImageUsageFlagsFromRHITextureUsage(RHITextureUsage usage) {
302 vk::ImageUsageFlags flags{};
303 if (usage & RenderTarget) flags |= vk::ImageUsageFlagBits::eColorAttachment;
304 if (usage & DepthStencil) flags |= vk::ImageUsageFlagBits::eDepthStencilAttachment;
305 if (usage & SampledImage) flags |= vk::ImageUsageFlagBits::eSampled;
306 if (usage & StorageImage) flags |= vk::ImageUsageFlagBits::eStorage;
307 if (usage & TransferSource) flags |= vk::ImageUsageFlagBits::eTransferSrc;
308 if (usage & TransferDestination) flags |= vk::ImageUsageFlagBits::eTransferDst;
309 return flags;
310 }
311
312 inline vk::SampleCountFlagBits vkSampleCountFlagFromRHIMultisampleCount(RHIMultisampleCount count) {
314 switch (count) {
315 case E2: return vk::SampleCountFlagBits::e2;
316 case E4: return vk::SampleCountFlagBits::e4;
317 case E8: return vk::SampleCountFlagBits::e8;
318 case E16: return vk::SampleCountFlagBits::e16;
319 case E1: return vk::SampleCountFlagBits::e1;
320 default:
321 return {};
322 }
323 }
324
327 vk::ImageAspectFlags flags{};
328 if (aspect & Color) flags |= vk::ImageAspectFlagBits::eColor;
329 if (aspect & Depth) flags |= vk::ImageAspectFlagBits::eDepth;
330 if (aspect & Stencil) flags |= vk::ImageAspectFlagBits::eStencil;
331 return flags;
332 }
333
336 switch (type) {
337 case TopLevel: return vk::AccelerationStructureTypeKHR::eTopLevel;
338 case BottomLevel: return vk::AccelerationStructureTypeKHR::eBottomLevel;
339 default:
340 return {};
341 }
342 }
343
345 {
347 switch (op) {
348 case Build: return vk::BuildAccelerationStructureModeKHR::eBuild;
349 case Update: return vk::BuildAccelerationStructureModeKHR::eUpdate;
350 default:
351 return {};
352 }
353 }
354
356 {
358 vk::BuildAccelerationStructureFlagsKHR vkFlags{};
359 if (flags & AllowUpdate) vkFlags |= vk::BuildAccelerationStructureFlagBitsKHR::eAllowUpdate;
360 if (flags & AllowCompaction) vkFlags |= vk::BuildAccelerationStructureFlagBitsKHR::eAllowCompaction;
361 if (flags & PreferFastTrace) vkFlags |= vk::BuildAccelerationStructureFlagBitsKHR::ePreferFastTrace;
362 if (flags & PreferFastBuild) vkFlags |= vk::BuildAccelerationStructureFlagBitsKHR::ePreferFastBuild;
363 if (flags & LowMemory) vkFlags |= vk::BuildAccelerationStructureFlagBitsKHR::eLowMemory;
364 return vkFlags;
365 }
366}
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
virtual pointer Reallocate(pointer ptr, size_type new_size, size_t alignment)=0
virtual void Deallocate(pointer ptr)=0
virtual pointer Allocate(size_type size, size_t alignment=alignof(std::max_align_t))=0
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:153
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:4
DeviceAddress
Definition Common.hpp:351
MeshShader
Definition Common.hpp:327
RayTracingShader
Definition Common.hpp:326
RHIAccelerationStructureBuildOp
Definition Common.hpp:221
vk::AccessFlags2 vkAccessFlagsFromRHIResourceAccess(RHIResourceAccess state)
Definition Common.hpp:174
IndexBuffer
Definition Common.hpp:343
AccelerationStructureBuildReadOnly
Definition Common.hpp:353
FragmentShader
Definition Common.hpp:324
vk::SampleCountFlagBits vkSampleCountFlagFromRHIMultisampleCount(RHIMultisampleCount count)
Definition Common.hpp:312
RHIColorSpace rhiColorSpaceFromVkColorSpace(vk::ColorSpaceKHR colorSpace)
Definition Common.hpp:146
PreferFastBuild
Definition Common.hpp:376
RHITextureLayout
Definition Common.hpp:203
Task
Definition Common.hpp:283
vk::AccelerationStructureTypeKHR vkAccelerationStructureTypeFromRHIAccelerationStructureType(RHIAccelerationStructureType type)
Definition Common.hpp:334
Depth
Definition Common.hpp:368
vk::ImageAspectFlags vkImageAspectFlagFromRHITextureAspect(RHITextureAspectFlag aspect)
Definition Common.hpp:325
vk::PipelineBindPoint vkPipelineBindPointFromRHIDevicePipelineType(RHIDevicePipelineType type)
Definition Common.hpp:290
UniformRead
Definition Common.hpp:311
VertexShader
Definition Common.hpp:323
RayGeneration
Definition Common.hpp:273
ShaderBindingTable
Definition Common.hpp:354
vk::DescriptorType vkDescriptorTypeFromRHIDescriptorType(RHIDescriptorType type)
Definition Common.hpp:269
TopOfPipe
Definition Common.hpp:337
RenderTargetOutput
Definition Common.hpp:329
All
Definition Common.hpp:286
Compute
Definition Common.hpp:181
vk::ColorSpaceKHR vkColorSpaceFromRHIColorSpace(RHIColorSpace colorSpace)
Definition Common.hpp:135
vk::BuildAccelerationStructureModeKHR vkBuildAccelerationStructureModeFromRHIAccelerationStructureBuildOp(RHIAccelerationStructureBuildOp op)
Definition Common.hpp:344
Host
Definition Common.hpp:335
RenderTargetRead
Definition Common.hpp:304
ComputeShader
Definition Common.hpp:325
vk::ImageLayout vkImageLayoutFromRHITextureLayout(RHITextureLayout layout)
Definition Common.hpp:194
AccelerationBuild
Definition Common.hpp:333
RHIAccelerationStructureType
Definition Common.hpp:215
Color
Definition Common.hpp:367
EarlyFragmentTests
Definition Common.hpp:331
TransferRead
Definition Common.hpp:308
AccelerationStructureWrite
Definition Common.hpp:315
TransferSource
Definition Common.hpp:349
vk::Format vkFormatFromRHIFormat(RHIResourceFormat format)
Definition Common.hpp:88
vk::ImageUsageFlags vkImageUsageFlagsFromRHITextureUsage(RHITextureUsage usage)
Definition Common.hpp:300
RHIColorSpace
Definition Common.hpp:131
UniformBuffer
Definition Common.hpp:345
AccelerationStructureRead
Definition Common.hpp:314
AccelerationStructureStorage
Definition Common.hpp:352
ShaderRead
Definition Common.hpp:310
TaskShader
Definition Common.hpp:328
VertexBuffer
Definition Common.hpp:342
HostRead
Definition Common.hpp:313
StorageBuffer
Definition Common.hpp:347
IndirectCommandRead
Definition Common.hpp:316
vk::ShaderStageFlags vkShaderStageFlagsFromRHIShaderStage(RHIShaderStage stage)
Definition Common.hpp:252
DepthStencil
Definition Common.hpp:359
AllowCompaction
Definition Common.hpp:374
vk::PipelineStageFlags vkPipelineStageFlagsFromRHIPipelineStage(RHIPipelineStage stage)
Definition Common.hpp:209
Transfer
Definition Common.hpp:182
RayAnyHit
Definition Common.hpp:275
RHIDescriptorType
Definition Common.hpp:239
LateFragmentTests
Definition Common.hpp:332
RayClosestHit
Definition Common.hpp:277
HostWrite
Definition Common.hpp:312
PreferFastTrace
Definition Common.hpp:375
RHIResourceFormat
Definition Common.hpp:34
AllowUpdate
Definition Common.hpp:373
BottomOfPipe
Definition Common.hpp:338
RenderTargetWrite
Definition Common.hpp:303
DepthStencilWrite
Definition Common.hpp:305
vk::BuildAccelerationStructureFlagsKHR vkBuildAccelerationStructureFlagsFromRHIAccelerationStructureBuildFlags(RHIAccelerationStructureBuildFlags flags)
Definition Common.hpp:355
Mesh
Definition Common.hpp:285
Stencil
Definition Common.hpp:369
TransferDestination
Definition Common.hpp:350
vk::PipelineStageFlags2 vkPipelineStageFlags2FromRHIPipelineStage(RHIPipelineStage stage)
Definition Common.hpp:230
Bits vkFlagsToBits(vk::Flags< Bits > flags)
Definition Common.hpp:85
ShaderWrite
Definition Common.hpp:309
TransferWrite
Definition Common.hpp:307
RayMiss
Definition Common.hpp:279
RHIMultisampleCount
Definition Common.hpp:257
DepthStencilRead
Definition Common.hpp:306
SampledImage
Definition Common.hpp:360
Fragment
Definition Common.hpp:269
DrawIndirect
Definition Common.hpp:322
IndirectBuffer
Definition Common.hpp:348
RenderTarget
Definition Common.hpp:358
StorageImage
Definition Common.hpp:361
Vertex
Definition Common.hpp:267
AllGraphics
Definition Common.hpp:336
LowMemory
Definition Common.hpp:377
RayIntersection
Definition Common.hpp:281
vk::BufferUsageFlags vkBufferUsageFromRHIBufferUsage(RHIBufferUsage usage)
Definition Common.hpp:157
static void *VKAPI_PTR Allocate(void *userData, size_t size, size_t alignment, vk::SystemAllocationScope)
Definition Common.hpp:40
static void *VKAPI_PTR Reallocate(void *userData, void *original, size_t size, size_t alignment, vk::SystemAllocationScope)
Definition Common.hpp:55
vk::AllocationCallbacks const * Get() const
Definition Common.hpp:29
VkAllocationCallbacks const * GetNative() const
Definition Common.hpp:34
VulkanAllocationCallbacks(Allocator *allocator=nullptr)
Definition Common.hpp:13
void Reset(Allocator *newAllocator)
Definition Common.hpp:18
Allocator * allocator
Definition Common.hpp:10
static void VKAPI_PTR Free(void *userData, void *memory)
Definition Common.hpp:78
vk::AllocationCallbacks callbacks
Definition Common.hpp:11