2#define VULKAN_HPP_NO_CONSTRUCTORS
3#include <vulkan/vulkan.hpp>
4#include <vulkan/vulkan_raii.hpp>
9 return static_cast<Bits>(
static_cast<std::underlying_type_t<Bits>
>(flags));
29 case R32Uint:
return vk::Format::eR32Uint;
30 case R16Uint:
return vk::Format::eR16Uint;
31 case R16Unorm:
return vk::Format::eR16Unorm;
33 case D16Unorm:
return vk::Format::eD16Unorm;
34 case Bc1RgbUnorm:
return vk::Format::eBc1RgbUnormBlock;
35 case Bc1RgbSrgb:
return vk::Format::eBc1RgbSrgbBlock;
36 case Bc1RgbaUnorm:
return vk::Format::eBc1RgbaUnormBlock;
37 case Bc1RgbaSrgb:
return vk::Format::eBc1RgbaSrgbBlock;
38 case Bc2Unorm:
return vk::Format::eBc2UnormBlock;
39 case Bc2Srgb:
return vk::Format::eBc2SrgbBlock;
40 case Bc3Unorm:
return vk::Format::eBc3UnormBlock;
41 case Bc3Srgb:
return vk::Format::eBc3SrgbBlock;
42 case Bc4Unorm:
return vk::Format::eBc4UnormBlock;
43 case Bc4Snorm:
return vk::Format::eBc4SnormBlock;
44 case Bc5Unorm:
return vk::Format::eBc5UnormBlock;
45 case Bc5Snorm:
return vk::Format::eBc5SnormBlock;
46 case Bc6HUfloat:
return vk::Format::eBc6HUfloatBlock;
47 case Bc6HSfloat:
return vk::Format::eBc6HSfloatBlock;
48 case Bc7Unorm:
return vk::Format::eBc7UnormBlock;
49 case Bc7Srgb:
return vk::Format::eBc7SrgbBlock;
52 return vk::Format::eUndefined;
57 vk::BufferUsageFlags flags{};
58 if (usage &
VertexBuffer) flags |= vk::BufferUsageFlagBits::eVertexBuffer;
59 if (usage &
IndexBuffer) flags |= vk::BufferUsageFlagBits::eIndexBuffer;
60 if (usage &
UniformBuffer) flags |= vk::BufferUsageFlagBits::eUniformBuffer;
61 if (usage &
StorageBuffer) flags |= vk::BufferUsageFlagBits::eStorageBuffer;
62 if (usage &
IndirectBuffer) flags |= vk::BufferUsageFlagBits::eIndirectBuffer;
63 if (usage &
TransferSource) flags |= vk::BufferUsageFlagBits::eTransferSrc;
65 if (usage &
DeviceAddress) flags |= vk::BufferUsageFlagBits::eShaderDeviceAddress;
68 if (usage &
ShaderBindingTable) flags |= vk::BufferUsageFlagBits::eShaderBindingTableKHR;
74 vk::AccessFlags2 flags{};
85 if (
state &
HostRead) flags |= vk::AccessFlagBits2::eHostRead;
102 return vk::ImageLayout::eUndefined;
108 vk::PipelineStageFlags flags{};
109 if (stage &
DrawIndirect) flags |= vk::PipelineStageFlagBits::eDrawIndirect;
110 if (stage &
FragmentShader) flags |= vk::PipelineStageFlagBits::eFragmentShader;
111 if (stage &
VertexShader) flags |= vk::PipelineStageFlagBits::eVertexShader;
112 if (stage &
ComputeShader) flags |= vk::PipelineStageFlagBits::eComputeShader;
113 if (stage &
RayTracingShader) flags |= vk::PipelineStageFlagBits::eRayTracingShaderKHR;
114 if (stage &
MeshShader) flags |= vk::PipelineStageFlagBits::eMeshShaderEXT;
115 if (stage &
RenderTargetOutput) flags |= vk::PipelineStageFlagBits::eColorAttachmentOutput;
116 if (stage &
Transfer) flags |= vk::PipelineStageFlagBits::eTransfer;
117 if (stage &
EarlyFragmentTests) flags |= vk::PipelineStageFlagBits::eEarlyFragmentTests;
118 if (stage &
LateFragmentTests) flags |= vk::PipelineStageFlagBits::eLateFragmentTests;
119 if (stage &
AccelerationBuild) flags |= vk::PipelineStageFlagBits::eAccelerationStructureBuildKHR;
120 if (stage &
TopOfPipe) flags |= vk::PipelineStageFlagBits::eTopOfPipe;
121 if (stage &
BottomOfPipe) flags |= vk::PipelineStageFlagBits::eBottomOfPipe;
122 if (stage &
AllGraphics) flags |= vk::PipelineStageFlagBits::eAllGraphics;
123 if (stage &
Host) flags |= vk::PipelineStageFlagBits::eHost;
129 vk::PipelineStageFlags2 flags{};
130 if (stage &
DrawIndirect) flags |= vk::PipelineStageFlagBits2::eDrawIndirect;
131 if (stage &
FragmentShader) flags |= vk::PipelineStageFlagBits2::eFragmentShader;
132 if (stage &
VertexShader) flags |= vk::PipelineStageFlagBits2::eVertexShader;
133 if (stage &
ComputeShader) flags |= vk::PipelineStageFlagBits2::eComputeShader;
134 if (stage &
RayTracingShader) flags |= vk::PipelineStageFlagBits2::eRayTracingShaderKHR;
135 if (stage &
MeshShader) flags |= vk::PipelineStageFlagBits2::eMeshShaderEXT;
136 if (stage &
TaskShader) flags |= vk::PipelineStageFlagBits2::eTaskShaderEXT;
137 if (stage &
RenderTargetOutput) flags |= vk::PipelineStageFlagBits2::eColorAttachmentOutput;
138 if (stage &
Transfer) flags |= vk::PipelineStageFlagBits2::eTransfer;
139 if (stage &
EarlyFragmentTests) flags |= vk::PipelineStageFlagBits2::eEarlyFragmentTests;
140 if (stage &
LateFragmentTests) flags |= vk::PipelineStageFlagBits2::eLateFragmentTests;
141 if (stage &
AccelerationBuild) flags |= vk::PipelineStageFlagBits2::eAccelerationStructureBuildKHR;
142 if (stage &
TopOfPipe) flags |= vk::PipelineStageFlagBits2::eTopOfPipe;
143 if (stage &
BottomOfPipe) flags |= vk::PipelineStageFlagBits2::eBottomOfPipe;
144 if (stage &
AllGraphics) flags |= vk::PipelineStageFlagBits2::eAllGraphics;
145 if (stage &
Host) flags |= vk::PipelineStageFlagBits2::eHost;
151 vk::ShaderStageFlags flags{};
152 if (stage ==
All)
return vk::ShaderStageFlagBits::eAll;
153 if (stage &
Vertex) flags |= vk::ShaderStageFlagBits::eVertex;
154 if (stage &
Fragment) flags |= vk::ShaderStageFlagBits::eFragment;
155 if (stage &
Compute) flags |= vk::ShaderStageFlagBits::eCompute;
156 if (stage &
RayGeneration) flags |= vk::ShaderStageFlagBits::eRaygenKHR;
157 if (stage &
RayAnyHit) flags |= vk::ShaderStageFlagBits::eAnyHitKHR;
158 if (stage &
RayClosestHit) flags |= vk::ShaderStageFlagBits::eClosestHitKHR;
159 if (stage &
RayMiss) flags |= vk::ShaderStageFlagBits::eMissKHR;
160 if (stage &
RayIntersection) flags |= vk::ShaderStageFlagBits::eIntersectionKHR;
161 if (stage &
Task) flags |= vk::ShaderStageFlagBits::eTaskEXT;
162 if (stage &
Mesh) flags |= vk::ShaderStageFlagBits::eMeshEXT;
171 return vk::DescriptorType::eSampler;
173 return vk::DescriptorType::eSampledImage;
175 return vk::DescriptorType::eStorageImage;
177 return vk::DescriptorType::eStorageBuffer;
179 return vk::DescriptorType::eUniformBuffer;
181 return vk::DescriptorType::eAccelerationStructureKHR;
189 case RHIDevicePipelineType::Compute:
return vk::PipelineBindPoint::eCompute;
190 case RHIDevicePipelineType::Graphics:
return vk::PipelineBindPoint::eGraphics;
191 case RHIDevicePipelineType::RayTracing:
return vk::PipelineBindPoint::eRayTracingKHR;
199 vk::ImageUsageFlags flags{};
200 if (usage &
RenderTarget) flags |= vk::ImageUsageFlagBits::eColorAttachment;
201 if (usage &
DepthStencil) flags |= vk::ImageUsageFlagBits::eDepthStencilAttachment;
202 if (usage &
SampledImage) flags |= vk::ImageUsageFlagBits::eSampled;
203 if (usage &
StorageImage) flags |= vk::ImageUsageFlagBits::eStorage;
204 if (usage &
TransferSource) flags |= vk::ImageUsageFlagBits::eTransferSrc;
212 case E2:
return vk::SampleCountFlagBits::e2;
213 case E4:
return vk::SampleCountFlagBits::e4;
214 case E8:
return vk::SampleCountFlagBits::e8;
215 case E16:
return vk::SampleCountFlagBits::e16;
216 case E1:
return vk::SampleCountFlagBits::e1;
224 vk::ImageAspectFlags flags{};
225 if (aspect &
Color) flags |= vk::ImageAspectFlagBits::eColor;
226 if (aspect &
Depth) flags |= vk::ImageAspectFlagBits::eDepth;
227 if (aspect &
Stencil) flags |= vk::ImageAspectFlagBits::eStencil;
234 case TopLevel:
return vk::AccelerationStructureTypeKHR::eTopLevel;
235 case BottomLevel:
return vk::AccelerationStructureTypeKHR::eBottomLevel;
245 case Build:
return vk::BuildAccelerationStructureModeKHR::eBuild;
246 case Update:
return vk::BuildAccelerationStructureModeKHR::eUpdate;
255 vk::BuildAccelerationStructureFlagsKHR
vkFlags{};
256 if (flags &
AllowUpdate)
vkFlags |= vk::BuildAccelerationStructureFlagBitsKHR::eAllowUpdate;
260 if (flags &
LowMemory)
vkFlags |= vk::BuildAccelerationStructureFlagBitsKHR::eLowMemory;
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:149
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:4
DeviceAddress
Definition Common.hpp:294
MeshShader
Definition Common.hpp:270
RayTracingShader
Definition Common.hpp:269
RHIAccelerationStructureBuildOp
Definition Common.hpp:166
vk::AccessFlags2 vkAccessFlagsFromRHIResourceAccess(RHIResourceAccess state)
Definition Common.hpp:72
IndexBuffer
Definition Common.hpp:286
AccelerationStructureBuildReadOnly
Definition Common.hpp:296
FragmentShader
Definition Common.hpp:267
vk::SampleCountFlagBits vkSampleCountFlagFromRHIMultisampleCount(RHIMultisampleCount count)
Definition Common.hpp:209
PreferFastBuild
Definition Common.hpp:319
RHITextureLayout
Definition Common.hpp:148
Task
Definition Common.hpp:227
vk::AccelerationStructureTypeKHR vkAccelerationStructureTypeFromRHIAccelerationStructureType(RHIAccelerationStructureType type)
Definition Common.hpp:231
Depth
Definition Common.hpp:311
vk::ImageAspectFlags vkImageAspectFlagFromRHITextureAspect(RHITextureAspectFlag aspect)
Definition Common.hpp:222
vk::PipelineBindPoint vkPipelineBindPointFromRHIDevicePipelineType(RHIDevicePipelineType type)
Definition Common.hpp:187
UniformRead
Definition Common.hpp:255
VertexShader
Definition Common.hpp:266
RayGeneration
Definition Common.hpp:217
ShaderBindingTable
Definition Common.hpp:297
vk::DescriptorType vkDescriptorTypeFromRHIDescriptorType(RHIDescriptorType type)
Definition Common.hpp:166
TopOfPipe
Definition Common.hpp:280
RenderTargetOutput
Definition Common.hpp:272
All
Definition Common.hpp:230
Compute
Definition Common.hpp:126
vk::BuildAccelerationStructureModeKHR vkBuildAccelerationStructureModeFromRHIAccelerationStructureBuildOp(RHIAccelerationStructureBuildOp op)
Definition Common.hpp:241
Host
Definition Common.hpp:278
RenderTargetRead
Definition Common.hpp:248
ComputeShader
Definition Common.hpp:268
vk::ImageLayout vkImageLayoutFromRHITextureLayout(RHITextureLayout layout)
Definition Common.hpp:91
AccelerationBuild
Definition Common.hpp:276
RHIAccelerationStructureType
Definition Common.hpp:160
Color
Definition Common.hpp:310
EarlyFragmentTests
Definition Common.hpp:274
TransferRead
Definition Common.hpp:252
AccelerationStructureWrite
Definition Common.hpp:259
TransferSource
Definition Common.hpp:292
vk::Format vkFormatFromRHIFormat(RHIResourceFormat format)
Definition Common.hpp:11
vk::ImageUsageFlags vkImageUsageFlagsFromRHITextureUsage(RHITextureUsage usage)
Definition Common.hpp:197
UniformBuffer
Definition Common.hpp:288
AccelerationStructureRead
Definition Common.hpp:258
AccelerationStructureStorage
Definition Common.hpp:295
ShaderRead
Definition Common.hpp:254
TaskShader
Definition Common.hpp:271
VertexBuffer
Definition Common.hpp:285
HostRead
Definition Common.hpp:257
StorageBuffer
Definition Common.hpp:290
vk::ShaderStageFlags vkShaderStageFlagsFromRHIShaderStage(RHIShaderStage stage)
Definition Common.hpp:149
DepthStencil
Definition Common.hpp:302
AllowCompaction
Definition Common.hpp:317
vk::PipelineStageFlags vkPipelineStageFlagsFromRHIPipelineStage(RHIPipelineStage stage)
Definition Common.hpp:106
Transfer
Definition Common.hpp:127
RayAnyHit
Definition Common.hpp:219
RHIDescriptorType
Definition Common.hpp:183
LateFragmentTests
Definition Common.hpp:275
RayClosestHit
Definition Common.hpp:221
HostWrite
Definition Common.hpp:256
PreferFastTrace
Definition Common.hpp:318
RHIResourceFormat
Definition Common.hpp:20
@ R16G16B16A16SignedFloat
@ R32G32B32A32SignedFloat
AllowUpdate
Definition Common.hpp:316
BottomOfPipe
Definition Common.hpp:281
RenderTargetWrite
Definition Common.hpp:247
DepthStencilWrite
Definition Common.hpp:249
vk::BuildAccelerationStructureFlagsKHR vkBuildAccelerationStructureFlagsFromRHIAccelerationStructureBuildFlags(RHIAccelerationStructureBuildFlags flags)
Definition Common.hpp:252
Mesh
Definition Common.hpp:229
Stencil
Definition Common.hpp:312
TransferDestination
Definition Common.hpp:293
vk::PipelineStageFlags2 vkPipelineStageFlags2FromRHIPipelineStage(RHIPipelineStage stage)
Definition Common.hpp:127
Bits vkFlagsToBits(vk::Flags< Bits > flags)
Definition Common.hpp:8
ShaderWrite
Definition Common.hpp:253
TransferWrite
Definition Common.hpp:251
RayMiss
Definition Common.hpp:223
RHIMultisampleCount
Definition Common.hpp:201
DepthStencilRead
Definition Common.hpp:250
SampledImage
Definition Common.hpp:303
Fragment
Definition Common.hpp:213
DrawIndirect
Definition Common.hpp:265
IndirectBuffer
Definition Common.hpp:291
RenderTarget
Definition Common.hpp:301
StorageImage
Definition Common.hpp:304
Vertex
Definition Common.hpp:211
AllGraphics
Definition Common.hpp:279
LowMemory
Definition Common.hpp:320
RayIntersection
Definition Common.hpp:225
vk::BufferUsageFlags vkBufferUsageFromRHIBufferUsage(RHIBufferUsage usage)
Definition Common.hpp:55