3#include <litefx/rendering.hpp>
5#include "vulkan_api.hpp"
6#include "vulkan_formatters.hpp"
9#pragma warning(disable:4250)
23 LITEFX_BUILDER(VulkanVertexBufferLayoutBuilder);
46 VulkanVertexBufferLayout(VulkanVertexBufferLayout&&) noexcept = delete;
49 VulkanVertexBufferLayout(const VulkanVertexBufferLayout&);
52 VulkanVertexBufferLayout& operator=(VulkanVertexBufferLayout&&) noexcept = delete;
55 VulkanVertexBufferLayout& operator=(const VulkanVertexBufferLayout&) = delete;
59 ~VulkanVertexBufferLayout() noexcept override;
90 static inline auto create(
const VulkanVertexBufferLayout& other) {
105 size_t elementSize() const noexcept override;
108 UInt32 binding() const noexcept override;
132 VulkanIndexBufferLayout(VulkanIndexBufferLayout&&) noexcept = delete;
135 VulkanIndexBufferLayout(const VulkanIndexBufferLayout&);
138 VulkanIndexBufferLayout& operator=(VulkanIndexBufferLayout&&) noexcept = delete;
141 VulkanIndexBufferLayout& operator=(const VulkanIndexBufferLayout&) = delete;
145 ~VulkanIndexBufferLayout() noexcept override;
162 static inline auto create(
const VulkanIndexBufferLayout& other) {
169 IndexType indexType() const noexcept override;
174 size_t elementSize() const noexcept override;
177 UInt32 binding() const noexcept override;
383 void clear() noexcept override;
392 Array<std::pair<
UInt32, VkAccelerationStructureGeometryKHR>> buildInfo() const;
393 void updateState(const
VulkanDevice* device, VkAccelerationStructureKHR
handle) noexcept;
472 void clear() noexcept override;
478 Array<VkAccelerationStructureInstanceKHR> buildInfo() const;
479 void updateState(const
VulkanDevice* device, VkAccelerationStructureKHR
handle) noexcept;
497 LITEFX_BUILDER(VulkanBarrierBuilder);
651 LITEFX_BUILDER(VulkanShaderProgramBuilder);
666 explicit VulkanShaderProgram(
const VulkanDevice& device);
673 VulkanShaderProgram(const VulkanShaderProgram&) = delete;
676 VulkanShaderProgram& operator=(VulkanShaderProgram&&) noexcept = delete;
679 VulkanShaderProgram& operator=(const VulkanShaderProgram&) = delete;
683 ~VulkanShaderProgram() noexcept override;
715 return std::static_pointer_cast<IPipelineLayout>(this->reflectPipelineLayout(hints));
723 class LITEFX_VULKAN_API VulkanDescriptorSet final :
public DescriptorSet<IVulkanBuffer, IVulkanImage, IVulkanSampler, IVulkanAccelerationStructure> {
751 VulkanDescriptorSet(const VulkanDescriptorSet&) = delete;
754 VulkanDescriptorSet& operator=(VulkanDescriptorSet&&) noexcept = delete;
757 VulkanDescriptorSet& operator=(const VulkanDescriptorSet&) = delete;
760 ~VulkanDescriptorSet() noexcept override;
774 Array<
Byte>&& releaseBuffer() const noexcept;
870 bool unbounded() const noexcept override;
906 LITEFX_BUILDER(VulkanDescriptorSetLayoutBuilder);
932 VulkanDescriptorSetLayout(VulkanDescriptorSetLayout&&) noexcept = delete;
935 VulkanDescriptorSetLayout(const VulkanDescriptorSetLayout& other);
938 VulkanDescriptorSetLayout& operator=(VulkanDescriptorSetLayout&&) noexcept = delete;
941 VulkanDescriptorSetLayout& operator=(const VulkanDescriptorSetLayout&) = delete;
945 ~VulkanDescriptorSetLayout() noexcept override;
965 static inline auto create(
const VulkanDescriptorSetLayout& other) {
984 const VulkanDevice& device() const noexcept;
990 UInt32 maxUnboundedArraySize() const noexcept;
994 const
Array<VulkanDescriptorLayout>& descriptors() const noexcept override;
997 const VulkanDescriptorLayout& descriptor(
UInt32 binding) const override;
1000 UInt32 space() const noexcept override;
1003 ShaderStage shaderStages() const noexcept override;
1006 UInt32 uniforms() const noexcept override;
1009 UInt32 storages() const noexcept override;
1012 UInt32 images() const noexcept override;
1015 UInt32 buffers() const noexcept override;
1018 UInt32 samplers() const noexcept override;
1021 UInt32 staticSamplers() const noexcept override;
1024 UInt32 inputAttachments() const noexcept override;
1027 bool containsUnboundedArray() const noexcept override;
1033 bool bindsResources() const noexcept override;
1036 bool bindsSamplers() const noexcept override;
1051#ifdef __cpp_lib_mdspan
1060 void free(
const VulkanDescriptorSet& descriptorSet)
const override;
1121 LITEFX_BUILDER(VulkanPushConstantsLayoutBuilder);
1171 LITEFX_BUILDER(VulkanPipelineLayoutBuilder);
1191 VulkanPipelineLayout(VulkanPipelineLayout&&) noexcept = delete;
1194 VulkanPipelineLayout(const VulkanPipelineLayout&) = delete;
1197 VulkanPipelineLayout& operator=(VulkanPipelineLayout&&) noexcept = delete;
1200 VulkanPipelineLayout& operator=(const VulkanPipelineLayout&) = delete;
1204 ~VulkanPipelineLayout() noexcept override;
1224 static inline auto create(
const VulkanDevice& device) {
1231 const VulkanDevice& device() const noexcept ;
1234 const VulkanDescriptorSetLayout& descriptorSet(
UInt32 space) const override;
1237 const
Array<
SharedPtr<const VulkanDescriptorSetLayout>>& descriptorSets() const override;
1240 const VulkanPushConstantsLayout* pushConstants() const noexcept override;
1243 bool dynamicResourceHeapAccess() const override;
1246 bool dynamicSamplerHeapAccess() const override;
1255 LITEFX_BUILDER(VulkanInputAssemblerBuilder);
1270 explicit VulkanInputAssembler();
1274 VulkanInputAssembler(VulkanInputAssembler&&) noexcept = delete;
1277 VulkanInputAssembler(const VulkanInputAssembler&);
1280 VulkanInputAssembler& operator=(VulkanInputAssembler&&) noexcept = delete;
1283 VulkanInputAssembler& operator=(const VulkanInputAssembler&) = delete;
1287 ~VulkanInputAssembler() noexcept override;
1306 static inline auto create(
const VulkanInputAssembler& other) {
1315 static inline auto create() {
1324 const VulkanVertexBufferLayout& vertexBufferLayout(
UInt32 binding)
const override;
1327 const VulkanIndexBufferLayout* indexBufferLayout() const noexcept override;
1337 class LITEFX_VULKAN_API VulkanRasterizer final : public
Rasterizer {
1338 LITEFX_BUILDER(VulkanRasterizerBuilder);
1374 ~VulkanRasterizer() noexcept override;
1397 static inline auto create(
const VulkanRasterizer& other) {
1406 static inline auto create() {
1423 virtual void updateLineWidth(
Float lineWidth)
noexcept;
1466 using base_type = CommandBuffer<VulkanCommandBuffer, IVulkanBuffer, IVulkanVertexBuffer, IVulkanIndexBuffer, IVulkanImage, VulkanBarrier, VulkanPipelineState, VulkanBottomLevelAccelerationStructure, VulkanTopLevelAccelerationStructure>;
1494 VulkanCommandBuffer(VulkanCommandBuffer&&) noexcept = delete;
1497 VulkanCommandBuffer(const VulkanCommandBuffer&) = delete;
1500 VulkanCommandBuffer& operator=(VulkanCommandBuffer&&) noexcept = delete;
1503 VulkanCommandBuffer& operator=(const VulkanCommandBuffer&) = delete;
1507 ~VulkanCommandBuffer() noexcept override;
1535 void begin() const override;
1538 void end() const override;
1553 bool isSecondary() const noexcept override;
1556 void setViewports(
Span<const
IViewport*> viewports) const override;
1559 void setViewports(const
IViewport* viewport) const override;
1562 void setScissors(
Span<const
IScissor*> scissors) const override;
1565 void setScissors(const
IScissor* scissor) const override;
1568 void setBlendFactors(const
Vector4f& blendFactors) const noexcept override;
1571 void setStencilRef(
UInt32 stencilRef) const noexcept override;
1574 void setDepthBounds(
Float minBounds,
Float maxBounds) const noexcept override;
1577 UInt64 submit() const override;
1583 void barrier(const
VulkanBarrier& barrier) const noexcept override;
1589 void transfer(const
void* const data,
size_t size, const
IVulkanBuffer& target,
UInt32 targetElement = 0,
UInt32 elements = 1) const override;
1592 void transfer(
Span<const
void* const> data,
size_t elementSize, const
IVulkanBuffer& target,
UInt32 firstElement = 0) const override;
1598 void transfer(const
void* const data,
size_t size, const
IVulkanImage& target,
UInt32 subresource = 0) const override;
1601 void transfer(
Span<const
void* const> data,
size_t elementSize, const
IVulkanImage& target,
UInt32 firstSubresource = 0,
UInt32 subresources = 1) const override;
1643 void dispatch(const
Vector3u& threadCount) const noexcept override;
1649 void dispatchMesh(const
Vector3u& threadCount) const noexcept override;
1652 void dispatchMeshIndirect(const
IVulkanBuffer& batchBuffer,
UInt32 batchCount,
UInt64 offset = 0) const noexcept override;
1658 void draw(
UInt32 vertices,
UInt32 instances = 1,
UInt32 firstVertex = 0,
UInt32 firstInstance = 0) const noexcept override;
1667 void drawIndexed(
UInt32 indices,
UInt32 instances = 1,
UInt32 firstIndex = 0,
Int32 vertexOffset = 0,
UInt32 firstInstance = 0) const noexcept override;
1670 void drawIndexedIndirect(const
IVulkanBuffer& batchBuffer,
UInt32 batchCount,
UInt64 offset = 0) const noexcept override;
1710 return std::static_pointer_cast<const ICommandQueue>(this->queue());
1713 void releaseSharedState()
const override;
1741 VulkanQueue(VulkanQueue&&) noexcept = delete;
1744 VulkanQueue(const VulkanQueue&) = delete;
1747 VulkanQueue& operator=(VulkanQueue&&) noexcept = delete;
1750 VulkanQueue& operator=(const VulkanQueue&) = delete;
1754 ~VulkanQueue() noexcept override;
1782 UInt32 familyId() const noexcept;
1788 UInt32 queueId() const noexcept;
1794 const VkSemaphore& timelineSemaphore() const noexcept;
1802 QueueType type() const noexcept override;
1804#ifdef LITEFX_BUILD_SUPPORT_DEBUG_MARKERS
1810 void endDebugRegion() const noexcept override;
1813 void setDebugMarker(const
String& label, const
Vectors::ByteVector3& color = DEFAULT_DEBUG_COLOR) const noexcept override;
1827 void waitFor(
UInt64 fence)
const override;
1833 UInt64 currentFence() const noexcept override;
1836 UInt64 lastCompletedFence() const noexcept override;
1840 auto vkQueue =
dynamic_cast<const VulkanQueue*
>(&queue);
1842 if (vkQueue ==
nullptr) [[unlikely]]
1845 this->waitFor(*vkQueue, fence);
1856 LITEFX_BUILDER(VulkanRenderPipelineBuilder);
1923 VkPipelineBindPoint
pipelineType() const noexcept override;
1936 LITEFX_BUILDER(VulkanComputePipelineBuilder);
1981 VkPipelineBindPoint
pipelineType() const noexcept override;
1994 LITEFX_BUILDER(VulkanRayTracingPipelineBuilder);
2061 VkPipelineBindPoint
pipelineType() const noexcept override;
2102 VulkanFrameBuffer(VulkanFrameBuffer&&) noexcept = delete;
2105 VulkanFrameBuffer(const VulkanFrameBuffer&) = delete;
2108 VulkanFrameBuffer& operator=(VulkanFrameBuffer&&) noexcept = delete;
2111 VulkanFrameBuffer& operator=(const VulkanFrameBuffer&) = delete;
2115 ~VulkanFrameBuffer() noexcept override;
2149 VkImageView imageView(
UInt32 imageIndex)
const;
2157 VkImageView imageView(
StringView imageName)
const;
2165 VkImageView imageView(
const RenderTarget& renderTarget)
const;
2170 const Size2d& size() const noexcept override;
2173 size_t getWidth() const noexcept override;
2176 size_t getHeight() const noexcept override;
2185 void unmapRenderTarget(const
RenderTarget& renderTarget) noexcept override;
2192 return this->image(index);
2200 return this->image(renderTarget);
2226 void resize(
const Size2d& renderArea)
override;
2233 class LITEFX_VULKAN_API VulkanRenderPass final :
public RenderPass<VulkanQueue, VulkanFrameBuffer> {
2235 LITEFX_BUILDER(VulkanRenderPassBuilder);
2292 VulkanRenderPass(VulkanRenderPass&&) noexcept = delete;
2295 VulkanRenderPass(const VulkanRenderPass&) = delete;
2298 VulkanRenderPass& operator=(VulkanRenderPass&&) noexcept = delete;
2301 VulkanRenderPass& operator=(const VulkanRenderPass&) = delete;
2305 ~VulkanRenderPass() noexcept override;
2374 explicit VulkanRenderPass(
const VulkanDevice& device,
const String& name =
"");
2396 const VulkanDevice& device() const noexcept ;
2399 SharedPtr<const VulkanFrameBuffer> activeFrameBuffer() const noexcept override;
2402 const VulkanQueue& commandQueue() const noexcept override;
2408 SharedPtr<const VulkanCommandBuffer> commandBuffer(
UInt32 index) const override;
2411 UInt32 secondaryCommandBuffers() const noexcept override;
2420 bool hasPresentTarget() const noexcept override;
2432 void begin(const VulkanFrameBuffer& frameBuffer) const override;
2435 UInt64 end() const override;
2438 UInt32 viewMask() const noexcept override;
2468 VulkanSwapChain(const VulkanSwapChain&) = delete;
2471 VulkanSwapChain& operator=(VulkanSwapChain&&) noexcept = delete;
2474 VulkanSwapChain& operator=(const VulkanSwapChain&) = delete;
2477 ~VulkanSwapChain() noexcept override;
2573 explicit VulkanGraphicsFactory(
const VulkanDevice& device);
2577 VulkanGraphicsFactory(VulkanGraphicsFactory&&) noexcept = delete;
2580 VulkanGraphicsFactory(const VulkanGraphicsFactory&) = delete;
2583 VulkanGraphicsFactory& operator=(VulkanGraphicsFactory&&) noexcept = delete;
2586 VulkanGraphicsFactory& operator=(const VulkanGraphicsFactory&) = delete;
2590 ~VulkanGraphicsFactory() noexcept override;
2624 UInt64 beginDefragmentationPass()
const override;
2627 bool endDefragmentationPass()
const override;
2690 SharedPtr<IVulkanSampler> createSampler(
const String& name,
FilterMode magFilter =
FilterMode::Nearest,
FilterMode minFilter =
FilterMode::Nearest,
BorderMode borderU =
BorderMode::Repeat,
BorderMode borderV =
BorderMode::Repeat,
BorderMode borderW =
BorderMode::Repeat,
MipMapMode mipMapMode =
MipMapMode::Nearest,
Float mipMapBias = 0.f,
Float maxLod = std::numeric_limits<Float>::max(),
Float minLod = 0.f,
Float anisotropy = 0.f)
const override;
2702 bool supportsResizableBaseAddressRegister() const noexcept override;
2714 class LITEFX_VULKAN_API VulkanDevice final : public
GraphicsDevice<
VulkanGraphicsFactory,
VulkanSurface,
VulkanGraphicsAdapter,
VulkanSwapChain,
VulkanQueue,
VulkanRenderPass,
VulkanRenderPipeline,
VulkanComputePipeline,
VulkanRayTracingPipeline,
VulkanBarrier>, public
Resource<VkDevice> {
2743 VulkanDevice(VulkanDevice&&) noexcept = delete;
2746 VulkanDevice(const VulkanDevice&) = delete;
2749 VulkanDevice& operator=(VulkanDevice&&) noexcept = delete;
2752 VulkanDevice& operator=(const VulkanDevice&) = delete;
2756 ~VulkanDevice() noexcept override;
2771 return SharedObject::create<VulkanDevice>(
backend, adapter, std::move(surface), features, extensions, globalDescriptorHeapSize)->initialize(
Format::B8G8R8A8_SRGB, { 800, 600 }, 3,
false, features);
2807 void release() noexcept;
2821 void setDebugName(VkDebugReportObjectTypeEXT objectType,
UInt64 objectHandle,
StringView name) const noexcept;
2828 Span<const
String> enabledExtensions() const noexcept;
2841 template <typename THandle>
2842 inline
void setDebugName(THandle objectHandle, VkDebugReportObjectTypeEXT objectType,
StringView name) const noexcept {
2899 double ticksPerMillisecond() const noexcept override;
2902 void wait() const override;
2923 void bindGlobalDescriptorHeaps(const
VulkanCommandBuffer& commandBuffer) const noexcept override;
2925#if defined(LITEFX_BUILD_DEFINE_BUILDERS)
2928 [[nodiscard]] VulkanRenderPassBuilder buildRenderPass(
UInt32 commandBuffers = 1)
const override;
2931 [[nodiscard]] VulkanRenderPassBuilder buildRenderPass(
const String& name,
UInt32 commandBuffers = 1)
const override;
2937 [[nodiscard]] VulkanRenderPipelineBuilder buildRenderPipeline(
const VulkanRenderPass& renderPass,
const String& name)
const override;
2940 [[nodiscard]] VulkanComputePipelineBuilder buildComputePipeline(
const String& name)
const override;
2943 [[nodiscard]] VulkanRayTracingPipelineBuilder buildRayTracingPipeline(
ShaderRecordCollection&& shaderRecords)
const override;
2946 [[nodiscard]] VulkanRayTracingPipelineBuilder buildRayTracingPipeline(
const String& name,
ShaderRecordCollection&& shaderRecords)
const override;
2949 [[nodiscard]] VulkanPipelineLayoutBuilder buildPipelineLayout()
const override;
2952 [[nodiscard]] VulkanInputAssemblerBuilder buildInputAssembler()
const override;
2955 [[nodiscard]] VulkanRasterizerBuilder buildRasterizer()
const override;
2958 [[nodiscard]] VulkanShaderProgramBuilder buildShaderProgram()
const override;
2961 [[nodiscard]] VulkanBarrierBuilder buildBarrier()
const override;
3002#ifdef VK_USE_PLATFORM_WIN32_KHR
The base class for an application.
Definition app.hpp:402
IResource() noexcept=default
An exception that is thrown, if a provided argument is not valid.
Definition exceptions.hpp:60
Represents the base interface for a Vulkan acceleration structure implementation.
Definition vulkan.hpp:295
IVulkanAccelerationStructure() noexcept=default
Represents the base interface for a Vulkan buffer implementation.
Definition vulkan.hpp:190
IVulkanBuffer() noexcept=default
Represents a Vulkan sampled image or the base interface for a texture.
Definition vulkan.hpp:244
virtual VkImageAspectFlags aspectMask() const noexcept=0
Returns the image resource aspect mask for all sub-resources.
IVulkanImage() noexcept=default
Represents a Vulkan index buffer.
Definition vulkan.hpp:224
IVulkanIndexBuffer() noexcept=default
Represents a Vulkan sampler.
Definition vulkan.hpp:277
IVulkanSampler() noexcept=default
Represents a Vulkan vertex buffer.
Definition vulkan.hpp:207
IVulkanVertexBuffer() noexcept=default
static Enumerable< String > getInstanceValidationLayers()
Returns a list of available validation layers.
Definition backend.cpp:406
std::function< VkSurfaceKHR(const VkInstance &)> surface_callback
A callback that creates a surface from a Vulkan instance.
Definition vulkan.hpp:3013
const Array< SharedPtr< const VulkanGraphicsAdapter > > & adapters() const override
Definition backend.cpp:266
VulkanDevice * device(const String &name) noexcept override
Looks up a device and returns a pointer to it, or nullptr, if no device with the provided name could...
Definition backend.cpp:303
BackendType type() const noexcept override
Gets the type of the backend.The type of the backend.BackendType
Definition backend.cpp:246
static Enumerable< String > getAvailableInstanceExtensions()
Returns a list of available extensions.
Definition backend.cpp:376
VulkanBackend(VulkanBackend &&) noexcept
void activate() override
Called by the parent App, if the backend is started.
Definition backend.cpp:256
static bool validateInstanceLayers(const Span< const String > validationLayers)
Returns true, if all elements of are contained by the a list of available validation layers.
Definition backend.cpp:388
VulkanBackend(const App &app, const Span< String > extensions={ }, const Span< String > validationLayers={ })
Initializes a new vulkan rendering backend.
Definition backend.cpp:222
StringView name() const noexcept override
Gets the name of the backend.The name of the backend.
Definition backend.cpp:251
const VulkanGraphicsAdapter * findAdapter(const Optional< UInt64 > &adapterId=std::nullopt) const noexcept override
Finds an adapter using its unique ID.Note that the adapter ID is optional, which allows the back-end ...
Definition backend.cpp:271
void deactivate() override
Called by the parent App, if the backend is stopped.
Definition backend.cpp:261
UniquePtr< VulkanSurface > createSurface(surface_callback predicate) const
Creates a surface using the predicate callback.
Definition backend.cpp:346
static bool validateInstanceExtensions(Span< const String > extensions)
Returns true, if all elements of are contained by the a list of available extensions.
Definition backend.cpp:358
virtual Span< const String > getEnabledValidationLayers() const noexcept
Returns the validation layers that are enabled on the backend.
Definition backend.cpp:319
void releaseDevice(const String &name) override
Destroys and removes a device from the backend.
Definition backend.cpp:291
void registerDevice(const String &name, SharedPtr< VulkanDevice > &&device) override
Definition backend.cpp:279
Implements a Vulkan resource barrier.
Definition vulkan.hpp:495
void wait(ResourceAccess accessBefore, ResourceAccess accessAfter) override
Inserts a global barrier that waits for previous commands to finish accesses described by accessBefor...
Definition barrier.cpp:71
VulkanBarrier(VulkanBarrier &&) noexcept
VulkanBarrier(PipelineStage syncBefore, PipelineStage syncAfter) noexcept
Initializes a new Vulkan barrier.
Definition barrier.cpp:35
Barrier< IVulkanBuffer, IVulkanImage > base_type
Definition vulkan.hpp:500
void transition(const IVulkanBuffer &buffer, ResourceAccess accessBefore, ResourceAccess accessAfter) override
Definition barrier.cpp:76
void execute(const VulkanCommandBuffer &commandBuffer) const
Adds the barrier to a command buffer and updates the resource target states.
Definition barrier.cpp:106
Implements a Vulkan bottom-level acceleration structure (BLAS).
Definition vulkan.hpp:311
void update(const VulkanCommandBuffer &commandBuffer, const SharedPtr< const IVulkanBuffer > &scratchBuffer=nullptr, const SharedPtr< const IVulkanBuffer > &buffer=nullptr, UInt64 offset=0, UInt64 maxSize=0)
Definition blas.cpp:234
AccelerationStructureFlags flags() const noexcept override
Returns the flags that control how the acceleration structure should be built.The flags that control ...
Definition blas.cpp:144
UInt64 size() const noexcept override
Returns the amount of memory in bytes inside buffer that store the acceleration structure....
Definition blas.cpp:159
friend class VulkanCommandBuffer
Definition vulkan.hpp:314
void addBoundingBox(const BoundingBoxes &aabb) override
Adds a buffer containing axis-aligned bounding boxes to the BLAS.
Definition blas.cpp:404
VulkanBottomLevelAccelerationStructure(AccelerationStructureFlags flags=AccelerationStructureFlags::None, StringView name="")
Initializes a new Vulkan bottom-level acceleration structure (BLAS).
Definition blas.cpp:128
void copy(const VulkanCommandBuffer &commandBuffer, VulkanBottomLevelAccelerationStructure &destination, bool compress=false, const SharedPtr< const IVulkanBuffer > &buffer=nullptr, UInt64 offset=0, bool copyBuildInfo=true) const
Definition blas.cpp:292
UInt64 offset() const noexcept override
Returns the offset into buffer at which the acceleration structure is stored.The offset into buffer a...
Definition blas.cpp:154
SharedPtr< const IVulkanBuffer > buffer() const noexcept
Definition blas.cpp:149
void addTriangleMesh(const TriangleMesh &mesh) override
Adds a triangle mesh to the BLAS.
Definition blas.cpp:388
const Array< BoundingBoxes > & boundingBoxes() const noexcept override
Returns an array of buffers, each containing axis-aligned bounding boxes stored in the BLAS....
Definition blas.cpp:399
void build(const VulkanCommandBuffer &commandBuffer, const SharedPtr< const IVulkanBuffer > &scratchBuffer=nullptr, const SharedPtr< const IVulkanBuffer > &buffer=nullptr, UInt64 offset=0, UInt64 maxSize=0)
Definition blas.cpp:170
void clear() noexcept override
Clears all bounding boxes and triangle meshes from the acceleration structure.
Definition blas.cpp:415
friend class VulkanDevice
Definition vulkan.hpp:313
const Array< TriangleMesh > & triangleMeshes() const noexcept override
Returns an array of triangle meshes contained by the BLAS.The array of triangle meshes contained by t...
Definition blas.cpp:383
VulkanBottomLevelAccelerationStructure(VulkanBottomLevelAccelerationStructure &&) noexcept
bool remove(const TriangleMesh &mesh) noexcept override
Removes a triangle mesh from the acceleration structure.true, if the triangle mesh was removed,...
Definition blas.cpp:421
Records commands for a VulkanQueue.
Definition vulkan.hpp:1461
virtual void begin(const VulkanRenderPass &renderPass) const
Begins the command buffer as a secondary command buffer that inherits the state of renderPass .
Definition command_buffer.cpp:273
static SharedPtr< VulkanCommandBuffer > create(const VulkanQueue &queue, bool begin=false, bool primary=true)
Initializes a command buffer from a command queue.
Definition vulkan.hpp:1517
SharedPtr< const VulkanQueue > queue() const noexcept
Definition command_buffer.cpp:248
CommandBuffer< VulkanCommandBuffer, IVulkanBuffer, IVulkanVertexBuffer, IVulkanIndexBuffer, IVulkanImage, VulkanBarrier, VulkanPipelineState, VulkanBottomLevelAccelerationStructure, VulkanTopLevelAccelerationStructure > base_type
Definition vulkan.hpp:1466
Implements a Vulkan ComputePipeline.
Definition vulkan.hpp:1934
VulkanComputePipeline(const VulkanDevice &device, const SharedPtr< VulkanPipelineLayout > &layout, const SharedPtr< VulkanShaderProgram > &shaderProgram, const String &name="")
Initializes a new Vulkan compute pipeline.
Definition compute_pipeline.cpp:70
void use(const VulkanCommandBuffer &commandBuffer) const override
Sets the current pipeline state on the commandBuffer .
Definition compute_pipeline.cpp:107
SharedPtr< const VulkanShaderProgram > program() const noexcept override
Definition compute_pipeline.cpp:92
VkPipelineBindPoint pipelineType() const noexcept override
Returns the type of the pipeline.The type of the pipeline.
Definition compute_pipeline.cpp:102
SharedPtr< const VulkanPipelineLayout > layout() const noexcept override
Definition compute_pipeline.cpp:97
VulkanComputePipeline(VulkanComputePipeline &&) noexcept
Implements a Vulkan IDescriptorLayout.
Definition vulkan.hpp:817
size_t elementSize() const noexcept override
Returns the size of a single element within the buffer.The size of a single element within the buffer...
Definition descriptor_layout.cpp:88
BufferType type() const noexcept override
Returns the buffer type of the buffer.The buffer type of the buffer.
Definition descriptor_layout.cpp:108
DescriptorType descriptorType() const noexcept override
Returns the type of the descriptor.The type of the descriptor.
Definition descriptor_layout.cpp:113
bool unbounded() const noexcept override
Returns true, if the descriptor defines an unbounded descriptor array.true, if the descriptor defines...
Definition descriptor_layout.cpp:103
VulkanDescriptorLayout(VulkanDescriptorLayout &&) noexcept
VulkanDescriptorLayout(DescriptorType type, UInt32 binding, size_t elementSize, UInt32 descriptors=1, bool unbounded=false)
Initializes a new Vulkan descriptor layout.
Definition descriptor_layout.cpp:67
UInt32 binding() const noexcept override
Returns the binding point, the buffer will be bound to.In GLSL, the binding point is identified by th...
Definition descriptor_layout.cpp:93
UInt32 descriptors() const noexcept override
Returns the number of descriptors in the descriptor array.If unbounded is set to true,...
Definition descriptor_layout.cpp:98
const IVulkanSampler * staticSampler() const noexcept override
If the descriptor describes a static sampler, this method returns the state of the sampler....
Definition descriptor_layout.cpp:118
UInt32 inputAttachmentIndex() const noexcept
The index of the input attachment mapped to this descriptor.
Definition descriptor_layout.cpp:123
Implements a Vulkan DescriptorSet.
Definition vulkan.hpp:723
DescriptorSet< IVulkanBuffer, IVulkanImage, IVulkanSampler, IVulkanAccelerationStructure > base_type
Definition vulkan.hpp:728
VulkanDescriptorSet(VulkanDescriptorSet &&) noexcept=delete
void update(UInt32 binding, const IVulkanBuffer &buffer, UInt32 bufferElement=0, UInt32 elements=0, UInt32 firstDescriptor=0, Format texelFormat=Format::None) const override
Definition descriptor_set.cpp:371
VirtualAllocator::Allocation globalHeapAllocation(DescriptorHeapType heapType) const noexcept override
Returns the allocation information for the descriptor set in the global descriptor heap indicated by ...
Definition descriptor_set.cpp:327
virtual const VulkanDescriptorSetLayout & layout() const noexcept
Returns the parent descriptor set layout.
Definition descriptor_set.cpp:312
friend class VulkanDescriptorSetLayout
Definition vulkan.hpp:725
UInt32 bindToHeap(DescriptorType bindingType, UInt32 descriptor, const IVulkanBuffer &buffer, UInt32 bufferElement=0, UInt32 elements=0, Format texelFormat=Format::None) const override
Definition descriptor_set.cpp:332
Span< const Byte > descriptorBuffer() const noexcept
Returns a view over the underlying descriptor buffer.
Definition descriptor_set.cpp:322
Implements a Vulkan DescriptorSetLayout.
Definition vulkan.hpp:904
static auto create(const VulkanDevice &device, const Enumerable< VulkanDescriptorLayout > &descriptorLayouts, UInt32 space, ShaderStage stages)
Creates a Vulkan descriptor set layout.
Definition vulkan.hpp:956
const VulkanDevice & device() const noexcept
Returns a reference of the device, the pipeline layout has been created from.
Definition descriptor_set_layout.cpp:441
static auto create(const VulkanDescriptorSetLayout &other)
Creates a copy of a Vulkan descriptor set layout.
Definition vulkan.hpp:965
UInt32 space() const noexcept override
Returns the space index of the descriptor set.The descriptor set space maps to the space index in HLS...
Definition descriptor_set_layout.cpp:464
DescriptorSetLayout< VulkanDescriptorLayout, VulkanDescriptorSet > base_type
Definition vulkan.hpp:910
Implements a Vulkan graphics device.
Definition vulkan.hpp:2714
friend class VulkanBackend
Definition vulkan.hpp:2717
const VulkanGraphicsAdapter & adapter() const noexcept override
Returns the graphics adapter, the device uses for drawing.A reference of the graphics adapter,...
Definition device.cpp:915
const VulkanSurface & surface() const noexcept override
Returns the surface, the device draws to.A reference of the surface, the device draws to.
Definition device.cpp:910
static SharedPtr< VulkanDevice > create(const VulkanBackend &backend, const VulkanGraphicsAdapter &adapter, UniquePtr< VulkanSurface > &&surface, GraphicsDeviceFeatures features={ }, Span< String > extensions={ }, size_t globalDescriptorHeapSize=DEFAULT_DESCRIPTOR_HEAP_SIZE)
Initializes the device instance.
Definition vulkan.hpp:2770
static const size_t DEFAULT_DESCRIPTOR_HEAP_SIZE
The default size for the global buffer heap in bytes.
Definition vulkan.hpp:2727
static SharedPtr< VulkanDevice > create(const VulkanBackend &backend, const VulkanGraphicsAdapter &adapter, UniquePtr< VulkanSurface > &&surface, Format format, const Size2d &renderArea, UInt32 backBuffers, bool enableVsync=false, GraphicsDeviceFeatures features={ }, Span< String > extensions={ }, size_t globalDescriptorHeapSize=DEFAULT_DESCRIPTOR_HEAP_SIZE)
Initializes the device instance.
Definition vulkan.hpp:2788
Implements a Vulkan frame buffer.
Definition vulkan.hpp:2071
const IVulkanImage & operator[](StringView renderTargetName) const override
Resolves a render target name and returns the image mapped to it.The image mapped to the render targe...
Definition vulkan.hpp:2207
IFrameBuffer::allocation_callback_type< image_type > allocation_callback_type
Definition rendering.hpp:1082
static SharedPtr< VulkanFrameBuffer > create(const VulkanDevice &device, const Size2d &renderArea, StringView name="")
Initializes a Vulkan frame buffer.
Definition vulkan.hpp:2125
const IVulkanImage & operator[](const RenderTarget &renderTarget) const override
Resolves a render target and returns the image mapped to it.The image mapped to the render target.
Definition vulkan.hpp:2199
const IVulkanImage & resolveImage(UInt64 hash) const override
Resolves a render target name hash and returns the image mapped to it.The image mapped to the render ...
Definition frame_buffer.cpp:284
static SharedPtr< VulkanFrameBuffer > create(const VulkanDevice &device, const Size2d &renderArea, allocation_callback_type allocationCallback, StringView name="")
Initializes a Vulkan frame buffer.
Definition vulkan.hpp:2137
const IVulkanImage & image(StringView renderTargetName) const override
Resolves a render target name and returns the image mapped to it.The image mapped to the render targe...
Definition vulkan.hpp:2212
Represents a Vulkan IGraphicsAdapter.
Definition vulkan_api.hpp:232
A graphics factory that produces objects for a VulkanDevice.
Definition vulkan.hpp:2548
GraphicsFactory< VulkanDescriptorLayout, IVulkanBuffer, IVulkanVertexBuffer, IVulkanIndexBuffer, IVulkanImage, IVulkanSampler, VulkanBottomLevelAccelerationStructure, VulkanTopLevelAccelerationStructure > base_type
Definition vulkan.hpp:2554
friend class VulkanDevice
Definition vulkan.hpp:2550
Implements a Vulkan index buffer layout.
Definition vulkan.hpp:119
static auto create(IndexType type)
Creates a new index buffer layout.
Definition vulkan.hpp:153
BufferType type() const noexcept override
Returns the buffer type of the buffer.The buffer type of the buffer.
Definition index_buffer_layout.cpp:45
static auto create(const VulkanIndexBufferLayout &other)
Creates a copy of an index buffer layout.
Definition vulkan.hpp:162
Implements a Vulkan PipelineLayout.
Definition vulkan.hpp:1169
const VulkanDevice & device() const noexcept
Definition pipeline_layout.cpp:122
static auto create(const VulkanDevice &device, const Enumerable< SharedPtr< VulkanDescriptorSetLayout > > &descriptorSetLayouts, UniquePtr< VulkanPushConstantsLayout > &&pushConstantsLayout)
Creates a new Vulkan render pipeline layout.
Definition vulkan.hpp:1214
Defines the base class for Vulkan pipeline state objects.
Definition vulkan.hpp:1431
virtual void use(const VulkanCommandBuffer &commandBuffer) const =0
Sets the current pipeline state on the commandBuffer .
VulkanPipelineState(VulkanPipelineState &&) noexcept=default
virtual VkPipelineBindPoint pipelineType() const noexcept=0
Returns the type of the pipeline.
Implements the Vulkan PushConstantsLayout.
Definition vulkan.hpp:1119
VulkanPushConstantsLayout(Enumerable< UniquePtr< VulkanPushConstantsRange > > &&ranges, UInt32 size)
Initializes a new push constants layout.
Definition push_constants_layout.cpp:49
UInt32 size() const noexcept override
Returns the size (in bytes) of the push constants backing memory.The size (in bytes) of the push cons...
Definition push_constants_layout.cpp:64
VulkanPushConstantsLayout(VulkanPushConstantsLayout &&) noexcept
const Array< UniquePtr< VulkanPushConstantsRange > > & ranges() const override
Definition push_constants_layout.cpp:80
const VulkanPushConstantsRange & range(ShaderStage stage) const override
Returns the push constant range associated with the shader stage provided in stage ....
Definition push_constants_layout.cpp:69
friend class VulkanPipelineLayout
Definition vulkan.hpp:1122
Implements the Vulkan IPushConstantsRange.
Definition vulkan.hpp:1067
UInt32 space() const noexcept override
Returns the shader space the push constants can be accessed from.The shader space the push constants ...
Definition push_constants_range.cpp:47
UInt32 binding() const noexcept override
Returns the binding point or register, the push constants are made available at.The binding point or ...
Definition push_constants_range.cpp:52
VulkanPushConstantsRange(ShaderStage shaderStage, UInt32 offset, UInt32 size, UInt32 space, UInt32 binding)
Initializes a new push constants range.
Definition push_constants_range.cpp:36
VulkanPushConstantsRange(VulkanPushConstantsRange &&) noexcept
UInt32 offset() const noexcept override
Returns the offset from the push constants backing memory block, the range starts at....
Definition push_constants_range.cpp:57
ShaderStage stage() const noexcept override
Returns the shader stage(s), the range is accessible from.The shader stage(s), the range is accessibl...
Definition push_constants_range.cpp:67
UInt32 size() const noexcept override
Returns the size (in bytes) of the range.The size (in bytes) of the range.offset
Definition push_constants_range.cpp:62
Implements a Vulkan command queue.
Definition vulkan.hpp:1720
static SharedPtr< VulkanQueue > create(const VulkanDevice &device, QueueType type, QueuePriority priority, UInt32 familyId, UInt32 queueId)
Creates a new Vulkan command queue.
Definition vulkan.hpp:1766
QueuePriority priority() const noexcept override
Returns the priority of the queue.The priority of the queue.
Definition queue.cpp:162
UInt32 queueId() const noexcept
Returns the queue ID.
Definition queue.cpp:118
SharedPtr< const VulkanDevice > device() const noexcept
Returns a pointer to the device that provides this queue or nullptr, if the device has already been r...
Definition queue.cpp:108
UInt32 familyId() const noexcept
Returns the queue family ID.
Definition queue.cpp:113
CommandQueue< VulkanCommandBuffer > base_type
Definition vulkan.hpp:1725
QueueType type() const noexcept override
Returns the type of the queue.The type of the queue.
Definition queue.cpp:128
Implements a Vulkan IRasterizer.
Definition vulkan.hpp:1337
static auto create(PolygonMode polygonMode, CullMode cullMode, CullOrder cullOrder, Float lineWidth=1.f, bool depthClip=true, const DepthStencilState &depthStencilState={}, bool conservativeRasterization=false)
Creates a new Vulkan rasterizer state.
Definition vulkan.hpp:1388
static auto create(const VulkanRasterizer &other)
Creates a new Vulkan rasterizer state by copying an existing one.
Definition vulkan.hpp:1397
Implements a Vulkan RayTracingPipeline.
Definition vulkan.hpp:1992
void use(const VulkanCommandBuffer &commandBuffer) const override
Sets the current pipeline state on the commandBuffer .
Definition ray_tracing_pipeline.cpp:335
const ShaderRecordCollection & shaderRecords() const noexcept override
Returns the shader record collection of the ray tracing pipeline.The shader record collection of the ...
Definition ray_tracing_pipeline.cpp:305
UInt32 maxPayloadSize() const noexcept override
Returns the maximum size of a single ray payload.A ray payload is the data that is passed down the Tr...
Definition ray_tracing_pipeline.cpp:315
VkPipelineBindPoint pipelineType() const noexcept override
Returns the type of the pipeline.The type of the pipeline.
Definition ray_tracing_pipeline.cpp:330
SharedPtr< const VulkanShaderProgram > program() const noexcept override
Definition ray_tracing_pipeline.cpp:295
VulkanRayTracingPipeline(const VulkanDevice &device, const SharedPtr< VulkanPipelineLayout > &layout, const SharedPtr< VulkanShaderProgram > &shaderProgram, ShaderRecordCollection &&shaderRecords, UInt32 maxRecursionDepth=10, UInt32 maxPayloadSize=0, UInt32 maxAttributeSize=32, const String &name="")
Initializes a new Vulkan ray-tracing pipeline.
Definition ray_tracing_pipeline.cpp:273
VulkanRayTracingPipeline(VulkanRayTracingPipeline &&) noexcept
SharedPtr< IVulkanBuffer > allocateShaderBindingTable(ShaderBindingTableOffsets &offsets, ShaderBindingGroup groups=ShaderBindingGroup::All) const override
Definition ray_tracing_pipeline.cpp:325
SharedPtr< const VulkanPipelineLayout > layout() const noexcept override
Definition ray_tracing_pipeline.cpp:300
UInt32 maxRecursionDepth() const noexcept override
Returns the maximum number of ray bounces.The shader record collection of the ray tracing pipeline.
Definition ray_tracing_pipeline.cpp:310
UInt32 maxAttributeSize() const noexcept override
Returns the maximum size of a single ray attribute.A ray attribute is the data that is passed to a hi...
Definition ray_tracing_pipeline.cpp:320
Implements a Vulkan render pass.
Definition vulkan.hpp:2233
static SharedPtr< VulkanRenderPass > create(const VulkanDevice &device, Span< RenderTarget > renderTargets, Span< RenderPassDependency > inputAttachments={ }, Optional< DescriptorBindingPoint > inputAttachmentSamplerBinding=std::nullopt, UInt32 secondaryCommandBuffers=1u, UInt32 viewMask=0b0000)
Creates and initializes a new Vulkan render pass instance that executes on the default graphics queue...
Definition vulkan.hpp:2318
static SharedPtr< VulkanRenderPass > create(const VulkanDevice &device, const String &name, Span< RenderTarget > renderTargets, Span< RenderPassDependency > inputAttachments={ }, Optional< DescriptorBindingPoint > inputAttachmentSamplerBinding=std::nullopt, UInt32 secondaryCommandBuffers=1u, UInt32 viewMask=0b0000)
Creates and initializes a new Vulkan render pass instance that executes on the default graphics queue...
Definition vulkan.hpp:2333
const VulkanDevice & device() const noexcept
Returns a reference of the device that provides this queue.
Definition render_pass.cpp:291
static SharedPtr< VulkanRenderPass > create(const VulkanDevice &device, const String &name, const VulkanQueue &queue, Span< RenderTarget > renderTargets, Span< RenderPassDependency > inputAttachments={ }, Optional< DescriptorBindingPoint > inputAttachmentSamplerBinding=std::nullopt, UInt32 secondaryCommandBuffers=1u, UInt32 viewMask=0b0000)
Creates and initializes a new Vulkan render pass instance.
Definition vulkan.hpp:2364
RenderPass< VulkanQueue, VulkanFrameBuffer > base_type
Definition vulkan.hpp:2239
static SharedPtr< VulkanRenderPass > create(const VulkanDevice &device, const VulkanQueue &queue, Span< RenderTarget > renderTargets, Span< RenderPassDependency > inputAttachments={ }, Optional< DescriptorBindingPoint > inputAttachmentSamplerBinding=std::nullopt, UInt32 secondaryCommandBuffers=1u, UInt32 viewMask=0b0000)
Creates and initializes a new Vulkan render pass instance.
Definition vulkan.hpp:2348
const Array< RenderTarget > & renderTargets() const noexcept override
Returns the list of render targets, the render pass renders into.Note that the actual render target i...
Definition render_pass.cpp:335
const Array< RenderPassDependency > & inputAttachments() const noexcept override
Returns the input attachment the render pass is consuming.An array of input attachment mappings,...
Definition render_pass.cpp:353
Implements a Vulkan RenderPipeline.
Definition vulkan.hpp:1854
SharedPtr< const VulkanShaderProgram > program() const noexcept override
Definition render_pipeline.cpp:498
VulkanRenderPipeline(VulkanRenderPipeline &&) noexcept=delete
SharedPtr< const VulkanPipelineLayout > layout() const noexcept override
Definition render_pipeline.cpp:503
void updateSamples(MultiSamplingLevel samples) override
Changes the multi-sampling level of the pipeline.Changing the multi-sampling level of a pipeline caus...
Definition render_pipeline.cpp:528
SharedPtr< VulkanRasterizer > rasterizer() const noexcept override
Definition render_pipeline.cpp:513
MultiSamplingLevel samples() const noexcept override
Returns the multi-sampling level of the pipeline.When using the pipeline, the multi-sampling level mu...
Definition render_pipeline.cpp:523
bool alphaToCoverage() const noexcept override
Returns true, if the pipeline uses Alpha-to-Coverage multi-sampling.Alpha-to-Coverage is a multi-samp...
Definition render_pipeline.cpp:518
VulkanRenderPipeline(const VulkanRenderPass &renderPass, const SharedPtr< VulkanShaderProgram > &shaderProgram, const SharedPtr< VulkanPipelineLayout > &layout, const SharedPtr< VulkanInputAssembler > &inputAssembler, const SharedPtr< VulkanRasterizer > &rasterizer, MultiSamplingLevel samples=MultiSamplingLevel::x1, bool enableAlphaToCoverage=false, const String &name="")
Initializes a new Vulkan render pipeline.
Definition render_pipeline.cpp:474
void use(const VulkanCommandBuffer &commandBuffer) const override
Sets the current pipeline state on the commandBuffer .
Definition render_pipeline.cpp:545
SharedPtr< VulkanInputAssembler > inputAssembler() const noexcept override
Definition render_pipeline.cpp:508
VkPipelineBindPoint pipelineType() const noexcept override
Returns the type of the pipeline.The type of the pipeline.
Definition render_pipeline.cpp:540
Implements a Vulkan IShaderModule.
Definition vulkan.hpp:575
VulkanShaderModule(const VulkanDevice &device, ShaderStage type, const String &fileName, const String &entryPoint="main", const Optional< DescriptorBindingPoint > &shaderLocalDescriptor=std::nullopt)
Initializes a new Vulkan shader module.
Definition shader_module.cpp:82
VulkanShaderModule(VulkanShaderModule &&) noexcept
virtual const Array< UInt32 > & bytecode() const noexcept
Returns the shader byte code.
Definition shader_module.cpp:117
ShaderStage type() const noexcept override
Returns the type of the shader module.The type of the shader module.
Definition shader_module.cpp:102
const String & entryPoint() const noexcept override
Returns the name of the shader module entry point.The name of the shader module entry point.
Definition shader_module.cpp:112
const String & fileName() const noexcept override
Returns the file name of the shader module.The file name of the shader module.
Definition shader_module.cpp:107
virtual VkPipelineShaderStageCreateInfo shaderStageDefinition() const
Returns the shader stage creation info for convenience.
Definition shader_module.cpp:122
const Optional< DescriptorBindingPoint > & shaderLocalDescriptor() const noexcept override
For ray-tracing shader modules returns the binding point for the descriptor that receives shader-loca...
Definition shader_module.cpp:133
Implements a Vulkan ShaderProgram.
Definition vulkan.hpp:649
static auto create(const VulkanDevice &device, Enumerable< UniquePtr< VulkanShaderModule > > &&modules)
Creates a new Vulkan shader program.
Definition vulkan.hpp:693
VulkanShaderProgram(VulkanShaderProgram &&) noexcept=delete
const Array< UniquePtr< const VulkanShaderModule > > & modules() const noexcept override
Definition shader_program.cpp:462
Represents a Vulkan ISurface.
Definition vulkan_api.hpp:334
Implements a Vulkan swap chain.
Definition vulkan.hpp:2444
Format surfaceFormat() const noexcept override
Returns the swap chain image format.The swap chain image format.
Definition swapchain.cpp:1129
UInt32 swapBackBuffer() const override
Swaps the front buffer with the next back buffer in order.A reference of the front buffer after the b...
Definition swapchain.cpp:1204
friend class VulkanImage
Definition vulkan.hpp:2446
void addTimingEvent(SharedPtr< const TimingEvent > timingEvent) override
Definition swapchain.cpp:1183
void reset(Format surfaceFormat, const Size2d &renderArea, UInt32 buffers, bool enableVsync=false) override
Causes the swap chain to be re-created. All frame and command buffers will be invalidated and rebuilt...
Definition swapchain.cpp:1198
SwapChain< IVulkanImage > base_type
Definition vulkan.hpp:2450
Enumerable< Format > getSurfaceFormats() const override
Returns an array of supported formats, that can be drawn to the surface.An array of supported formats...
Definition swapchain.cpp:1172
const Size2d & renderArea() const noexcept override
Returns the size of the render area.The size of the render area.
Definition swapchain.cpp:1139
const Array< SharedPtr< const TimingEvent > > & timingEvents() const override
Returns all registered timing events.An array, containing all registered timing events.
Definition swapchain.cpp:1078
IVulkanImage * image(UInt32 backBuffer) const override
Returns the swap chain present image for backBuffer .A pointer to the back buffers swap chain present...
Definition swapchain.cpp:1149
SharedPtr< const TimingEvent > timingEvent(UInt32 queryId) const override
Returns the timing event registered for queryId .The timing event registered for queryId .
Definition swapchain.cpp:1083
UInt32 resolveQueryId(SharedPtr< const TimingEvent > timingEvent) const override
Returns the query ID for the timing event.The query ID for the timingEvent .TimingEvent::queryId
Definition swapchain.cpp:1105
UInt64 readTimingEvent(SharedPtr< const TimingEvent > timingEvent) const override
Reads the current time stamp value (in ticks) of a timing event.In order to convert the number of tic...
Definition swapchain.cpp:1091
bool verticalSynchronization() const noexcept override
Returns true, if vertical synchronization should be used, otherwise false.true, if vertical synchroni...
Definition swapchain.cpp:1144
virtual const VkQueryPool & timestampQueryPool() const noexcept
Returns the query pool for the current frame.
Definition swapchain.cpp:1073
void present(UInt64 fence) const override
Queues a present that gets executed after fence has been signaled on the default graphics queue....
Definition swapchain.cpp:1167
VulkanSwapChain(VulkanSwapChain &&) noexcept=delete
UInt32 buffers() const noexcept override
Returns the number of images in the swap chain.The number of images in the swap chain.
Definition swapchain.cpp:1134
friend class VulkanDevice
Definition vulkan.hpp:2447
const IGraphicsDevice & device() const override
Returns the swap chain's parent device instance.A reference of the swap chain's parent device instanc...
Definition swapchain.cpp:1119
const Array< SharedPtr< IVulkanImage > > & images() const noexcept override
Definition swapchain.cpp:1162
Implements a Vulkan top-level acceleration structure (TLAS).
Definition vulkan.hpp:406
friend class VulkanCommandBuffer
Definition vulkan.hpp:409
const Array< Instance > & instances() const noexcept override
Returns an array of instances in the TLAS.The array of instances in the TLAS.
Definition tlas.cpp:291
UInt64 offset() const noexcept override
Returns the offset into buffer at which the acceleration structure is stored.The offset into buffer a...
Definition tlas.cpp:87
void clear() noexcept override
Clears all instances from the acceleration structure.
Definition tlas.cpp:304
SharedPtr< const IVulkanBuffer > buffer() const noexcept
Definition tlas.cpp:82
void addInstance(const Instance &instance) override
Adds an instance to the TLAS.
Definition tlas.cpp:296
AccelerationStructureFlags flags() const noexcept override
Returns the flags that control how the acceleration structure should be built.The flags that control ...
Definition tlas.cpp:77
VulkanTopLevelAccelerationStructure(VulkanTopLevelAccelerationStructure &&) noexcept
friend class VulkanDevice
Definition vulkan.hpp:408
void copy(const VulkanCommandBuffer &commandBuffer, VulkanTopLevelAccelerationStructure &destination, bool compress=false, const SharedPtr< const IVulkanBuffer > &buffer=nullptr, UInt64 offset=0, bool copyBuildInfo=true) const
Definition tlas.cpp:210
VulkanTopLevelAccelerationStructure(AccelerationStructureFlags flags=AccelerationStructureFlags::None, StringView name="")
Initializes a new Vulkan top-level acceleration structure (BLAS).
Definition tlas.cpp:60
void update(const VulkanCommandBuffer &commandBuffer, const SharedPtr< const IVulkanBuffer > &scratchBuffer=nullptr, const SharedPtr< const IVulkanBuffer > &buffer=nullptr, UInt64 offset=0, UInt64 maxSize=0)
Definition tlas.cpp:160
bool remove(const Instance &mesh) noexcept override
Removes an instance from the acceleration structure.true, if the instance has been removed,...
Definition tlas.cpp:309
UInt64 size() const noexcept override
Returns the amount of memory in bytes inside buffer that store the acceleration structure....
Definition tlas.cpp:92
void build(const VulkanCommandBuffer &commandBuffer, const SharedPtr< const IVulkanBuffer > &scratchBuffer=nullptr, const SharedPtr< const IVulkanBuffer > &buffer=nullptr, UInt64 offset=0, UInt64 maxSize=0)
Definition tlas.cpp:103
Implements a Vulkan vertex buffer layout.
Definition vulkan.hpp:21
static auto create(size_t vertexSize, const Enumerable< BufferAttribute > &attributes, UInt32 binding=0, VertexBufferInputRate inputRate=VertexBufferInputRate::Vertex)
Creates a new vertex buffer layout.
Definition vulkan.hpp:81
static auto create(size_t vertexSize, UInt32 binding=0, VertexBufferInputRate inputRate=VertexBufferInputRate::Vertex)
Creates a new vertex buffer layout.
Definition vulkan.hpp:69
static auto create(const VulkanVertexBufferLayout &other)
Creates a copy of a vertex buffer layout.
Definition vulkan.hpp:90
VertexBufferInputRate inputRate() const noexcept override
Returns the vertex buffer input rate that describes how the data is made available to the vertex shad...
Definition vertex_buffer_layout.cpp:71
const Array< BufferAttribute > & attributes() const override
Returns the vertex buffer attributes.The vertex buffer attributes.
Definition vertex_buffer_layout.cpp:66
UInt32 binding() const noexcept override
Returns the binding point, the buffer will be bound to.In GLSL, the binding point is identified by th...
Definition vertex_buffer_layout.cpp:56
virtual constexpr void transition(const buffer_type &buffer, ResourceAccess accessBefore, ResourceAccess accessAfter)=0
Barrier() noexcept=default
virtual void drawIndexedIndirect(const buffer_type &batchBuffer, UInt32 batchCount, UInt64 offset=0) const noexcept=0
virtual void buildAccelerationStructure(bottom_level_acceleration_structure_type &blas, const SharedPtr< const buffer_type > &scratchBuffer, const buffer_type &buffer, UInt64 offset=0) const=0
virtual void draw(const vertex_buffer_type &vertexBuffer, UInt32 instances=1, UInt32 firstVertex=0, UInt32 firstInstance=0) const
Definition rendering.hpp:755
virtual void updateAccelerationStructure(bottom_level_acceleration_structure_type &blas, const SharedPtr< const buffer_type > &scratchBuffer, const buffer_type &buffer, UInt64 offset=0) const=0
virtual void dispatchMesh(const Vector3u &threadGroupCount) const noexcept=0
virtual void dispatchIndirect(const buffer_type &batchBuffer, UInt32 batchCount, UInt64 offset=0) const noexcept=0
virtual void barrier(const barrier_type &barrier) const noexcept=0
virtual void use(const pipeline_type &pipeline) const noexcept=0
virtual void transfer(const buffer_type &source, const buffer_type &target, UInt32 sourceElement=0, UInt32 targetElement=0, UInt32 elements=1) const=0
virtual void bind(const descriptor_set_type &descriptorSet) const=0
virtual void dispatch(const Vector3u &threadGroupCount) const noexcept=0
virtual void drawIndirect(const buffer_type &batchBuffer, UInt32 batchCount, UInt64 offset=0) const noexcept=0
virtual void copyAccelerationStructure(const bottom_level_acceleration_structure_type &from, const bottom_level_acceleration_structure_type &to, bool compress=false) const noexcept=0
virtual void pushConstants(const push_constants_layout_type &layout, const void *const memory) const=0
virtual void drawIndexed(const index_buffer_type &indexBuffer, UInt32 instances=1, UInt32 firstIndex=0, Int32 vertexOffset=0, UInt32 firstInstance=0) const
Definition rendering.hpp:761
virtual UInt64 submit(const SharedPtr< command_buffer_type > &commandBuffer) const
Definition rendering.hpp:1134
CommandQueue() noexcept=default
ComputePipeline() noexcept=default
Stores the depth/stencil state of a see IRasterizer.
Definition rendering_api.hpp:3751
virtual void update(UInt32 binding, const buffer_type &buffer, UInt32 bufferElement=0, UInt32 elements=0, UInt32 firstDescriptor=0, Format texelFormat=Format::None) const=0
DescriptorSet() noexcept=default
DescriptorSetLayout() noexcept=default
virtual void free(const descriptor_set_type &descriptorSet) const=0
virtual UniquePtr< descriptor_set_type > allocate(std::initializer_list< DescriptorBinding > bindings={ }) const
Definition rendering.hpp:262
A class that can be used to manage the state of a IGraphicsDevice.
Definition rendering_api.hpp:2697
IFrameBuffer::allocation_callback_type< image_type > allocation_callback_type
Definition rendering.hpp:1082
FrameBuffer() noexcept=default
auto addImage(this TSelf &&self, Format format, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::FrameBufferImage) -> TSelf &&
Adds an image to the frame buffer.
Definition rendering_api.hpp:9180
GraphicsDevice() noexcept=default
GraphicsFactory() noexcept=default
virtual SharedPtr< IVulkanBuffer > createBuffer(BufferType type, ResourceHeap heap, size_t elementSize, UInt32 elements=1, ResourceUsage usage=ResourceUsage::Default, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const=0
virtual SharedPtr< IVulkanSampler > createSampler(FilterMode magFilter=FilterMode::Nearest, FilterMode minFilter=FilterMode::Nearest, BorderMode borderU=BorderMode::Repeat, BorderMode borderV=BorderMode::Repeat, BorderMode borderW=BorderMode::Repeat, MipMapMode mipMapMode=MipMapMode::Nearest, Float mipMapBias=0.f, Float maxLod=std::numeric_limits< Float >::max(), Float minLod=0.f, Float anisotropy=0.f) const=0
virtual bool tryCreateIndexBuffer(SharedPtr< IVulkanIndexBuffer > &buffer, const index_buffer_layout_type &layout, ResourceHeap heap, UInt32 elements, ResourceUsage usage=ResourceUsage::Default, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const=0
virtual bool tryCreateTexture(SharedPtr< IVulkanImage > &image, Format format, const Size3d &size, ImageDimensions dimension=ImageDimensions::DIM_2, UInt32 levels=1, UInt32 layers=1, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::Default, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const=0
virtual SharedPtr< IVulkanIndexBuffer > createIndexBuffer(const index_buffer_layout_type &layout, ResourceHeap heap, UInt32 elements, ResourceUsage usage=ResourceUsage::Default, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const=0
virtual SharedPtr< IVulkanVertexBuffer > createVertexBuffer(const vertex_buffer_layout_type &layout, ResourceHeap heap, UInt32 elements=1, ResourceUsage usage=ResourceUsage::Default, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const=0
virtual Generator< SharedPtr< IVulkanImage > > createTextures(Format format, const Size3d &size, ImageDimensions dimension=ImageDimensions::DIM_2, UInt32 layers=1, UInt32 levels=1, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::Default, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const=0
virtual bool tryCreateBuffer(SharedPtr< IVulkanBuffer > &buffer, BufferType type, ResourceHeap heap, size_t elementSize, UInt32 elements=1, ResourceUsage usage=ResourceUsage::Default, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const=0
virtual bool tryCreateVertexBuffer(SharedPtr< IVulkanVertexBuffer > &buffer, const vertex_buffer_layout_type &layout, ResourceHeap heap, UInt32 elements=1, ResourceUsage usage=ResourceUsage::Default, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const=0
virtual Generator< SharedPtr< IVulkanSampler > > createSamplers(FilterMode magFilter=FilterMode::Nearest, FilterMode minFilter=FilterMode::Nearest, BorderMode borderU=BorderMode::Repeat, BorderMode borderV=BorderMode::Repeat, BorderMode borderW=BorderMode::Repeat, MipMapMode mipMapMode=MipMapMode::Nearest, Float mipMapBias=0.f, Float maxLod=std::numeric_limits< Float >::max(), Float minLod=0.f, Float anisotropy=0.f) const=0
virtual SharedPtr< IVulkanImage > createTexture(Format format, const Size3d &size, ImageDimensions dimension=ImageDimensions::DIM_2, UInt32 levels=1, UInt32 layers=1, MultiSamplingLevel samples=MultiSamplingLevel::x1, ResourceUsage usage=ResourceUsage::Default, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const=0
void update(const ICommandBuffer &commandBuffer, const SharedPtr< const IBuffer > &scratchBuffer=nullptr, const SharedPtr< const IBuffer > &buffer=nullptr, UInt64 offset=0, UInt64 maxSize=0)
Performs an update on the acceleration structure.
Definition rendering_api.hpp:5341
IAccelerationStructure() noexcept=default
void build(const ICommandBuffer &commandBuffer, const SharedPtr< const IBuffer > &scratchBuffer=nullptr, const SharedPtr< const IBuffer > &buffer=nullptr, UInt64 offset=0, UInt64 maxSize=0)
Performs a complete build of the acceleration structure.
Definition rendering_api.hpp:5305
void copy(const ICommandBuffer &commandBuffer, IBottomLevelAccelerationStructure &destination, bool compress=false, const SharedPtr< const IBuffer > &buffer=nullptr, UInt64 offset=0, bool copyBuildInfo=true) const
Copies the acceleration structure into the acceleration structure provided by destination .
Definition rendering_api.hpp:5618
IBottomLevelAccelerationStructure() noexcept=default
Base interface for buffer objects.
Definition rendering_api.hpp:4997
IBuffer() noexcept=default
The interface for a command buffer.
Definition rendering_api.hpp:7682
The interface for a command queue.
Definition rendering_api.hpp:9742
IDescriptorLayout() noexcept=default
The interface for a descriptor set.
Definition rendering_api.hpp:6064
void mapRenderTargets(Span< const RenderTarget > renderTargets)
Maps a set of render targets to the frame buffer images, using the names of the render targets to loo...
Definition rendering_api.hpp:9094
virtual void mapRenderTarget(const RenderTarget &renderTarget, UInt32 index)=0
Maps a render target to a frame buffer image.
The interface for a graphics device that.
Definition rendering_api.hpp:11050
virtual ResourceAllocationResult allocate(const ResourceAllocationInfo &allocationInfo, AllocationBehavior allocationBehavior=AllocationBehavior::Default) const
Allocates a single resource as described by allocationInfo .
Definition rendering_api.hpp:10211
Describes a generic image.
Definition rendering_api.hpp:5019
IImage() noexcept=default
IIndexBufferLayout() noexcept=default
IPushConstantsRange() noexcept=default
Describes a texture sampler.
Definition rendering_api.hpp:5135
ISampler() noexcept=default
The interface of a scissor.
Definition rendering_api.hpp:4207
IShaderModule() noexcept=default
void copy(const ICommandBuffer &commandBuffer, ITopLevelAccelerationStructure &destination, bool compress=false, const SharedPtr< const IBuffer > &buffer=nullptr, UInt64 offset=0, bool copyBuildInfo=true) const
Copies the acceleration structure into the acceleration structure provided by destination .
Definition rendering_api.hpp:5827
ITopLevelAccelerationStructure() noexcept=default
IVertexBufferLayout() noexcept=default
Interface for a viewport.
Definition rendering_api.hpp:4089
IndexBuffer() noexcept=default
Pipeline() noexcept=default
PipelineLayout() noexcept=default
PushConstantsLayout() noexcept=default
Float lineWidth() const noexcept override
Returns the line width of the rasterizer state.Note that line width is not supported in DirectX and i...
Definition rasterizer.cpp:58
CullMode cullMode() const noexcept override
Returns the cull mode of the rasterizer state.The cull mode of the rasterizer state.
Definition rasterizer.cpp:48
const DepthStencilState & depthStencilState() const noexcept override
Returns the depth/stencil state of the rasterizer.The depth/stencil state of the rasterizer.
Definition rasterizer.cpp:63
CullOrder cullOrder() const noexcept override
Returns the cull mode of the rasterizer state.The cull mode of the rasterizer state.
Definition rasterizer.cpp:53
PolygonMode polygonMode() const noexcept override
Returns the polygon mode of the rasterizer state.The polygon mode of the rasterizer state.
Definition rasterizer.cpp:43
bool depthClip() const noexcept override
Returns true, if z-clipping should be used during distance clipping.true, if z-clipping should be use...
Definition rasterizer.cpp:68
Rasterizer(PolygonMode polygonMode, CullMode cullMode, CullOrder cullOrder, Float lineWidth=1.f, bool depthClip=true, const DepthStencilState &depthStencilState={}, bool conservativeRasterization=false) noexcept
Initializes a new rasterizer instance.
Definition rasterizer.cpp:32
RayTracingPipeline() noexcept=default
RenderBackend() noexcept=default
Represents a mapping between a set of RenderTarget instances and the input attachments of a IRenderPa...
Definition rendering_api.hpp:3684
RenderPass() noexcept=default
RenderPipeline() noexcept=default
Implements a render target.
Definition rendering_api.hpp:3584
ShaderProgram() noexcept=default
Stores a set of IShaderRecords in that later form a shader binding table used for ray-tracing.
Definition rendering_api.hpp:6923
StateResource()
Initializes a new state resource instance with a default name.
Definition state_resource.cpp:27
String & name() noexcept
Definition state_resource.cpp:41
SwapChain() noexcept=default
An event that is used to measure timestamps in a command queue.
Definition rendering_api.hpp:4371
VertexBuffer() noexcept=default
Represents a virtual allocator that manages memory distribution from a piece of raw memory.
Definition rendering_api.hpp:3032
VkAccelerationStructureKHR & handle() noexcept override
Definition containers.hpp:846
Resource(VkAccelerationStructureKHR handle) noexcept
Definition containers.hpp:835
static auto create(TArgs &&... args) -> SharedPtr< T >
Generic factory method used to create instances of the shared object.
Definition containers.hpp:1114
Definition backend.cpp:18
Definition barrier.cpp:14
Definition command_buffer.cpp:20
Definition compute_pipeline.cpp:10
Definition descriptor_layout.cpp:10
Definition descriptor_set.cpp:14
Definition descriptor_set_layout.cpp:15
Definition frame_buffer.cpp:9
Definition factory.cpp:12
Definition index_buffer_layout.cpp:9
Definition pipeline_layout.cpp:10
Definition push_constants_layout.cpp:10
Definition push_constants_range.cpp:9
Definition ray_tracing_pipeline.cpp:15
Definition render_pass.cpp:10
Definition render_pipeline.cpp:10
Definition shader_module.cpp:10
Definition shader_program.cpp:52
Definition swapchain.cpp:18
Definition vertex_buffer_layout.cpp:10
Concept that can be used to refer to backend implementations.
Definition app.hpp:80
Contains additional exported vector types.
Definition math.hpp:617
TVector3< UInt8 > ByteVector3
A vector that contains three bytes.
Definition math.hpp:631
uint64_t UInt64
A type for an unsigned 64 bit integer.
Definition math.hpp:71
float_t Float
A type for a floating point value with single precision.
Definition math.hpp:76
uint32_t UInt32
A type for an unsigned 32 bit integer.
Definition math.hpp:61
int32_t Int32
A type for a signed 32 bit integer.
Definition math.hpp:56
std::byte Byte
A type for a single byte of raw memory.
Definition math.hpp:36
constexpr UInt64 handleAddress(const THandle handle) noexcept
Returns the address of a dispatchable handle.
Definition vulkan_api.hpp:214
BorderMode
Describes how to treat texture coordinates that are outside the domain [0..1].
Definition rendering_api.hpp:1356
@ Repeat
Repeat the texture.
Definition rendering_api.hpp:1360
CullOrder
Describes the order or vertex winding, that is used to determine, whether a polygon is facing towards...
Definition rendering_api.hpp:1190
DescriptorHeapType
The target heap type for a descriptor.
Definition rendering_api.hpp:580
ImageLayout
Specifies the layout of an IImage resource.
Definition rendering_api.hpp:1858
MipMapMode
Describes the filter operation between two mip-map levels.
Definition rendering_api.hpp:1341
@ Nearest
Take the texel from the mip-map level that is closest to the actual depth.
Definition rendering_api.hpp:1345
CullMode
Describes which faces are culled by the Rasterizer stage.
Definition rendering_api.hpp:1163
ShaderStage
Describes the valid shader stages of a graphics pipeline.
Definition rendering_api.hpp:971
IndexType
Describes the element type of an index buffer.
Definition rendering_api.hpp:906
PrimitiveTopology
Describes the topology of a mesh primitive.
Definition rendering_api.hpp:937
@ TriangleList
A list of triangles, where each triplet of vertices refers to a whole triangle.
Definition rendering_api.hpp:953
ShaderBindingGroup
Describes a group or combination of groups of a shader binding table.
Definition rendering_api.hpp:1111
@ All
Refers to a combination of all possible groups that can be stored in a shader binding table.
Definition rendering_api.hpp:1135
PolygonMode
Describes the draw mode for polygons.
Definition rendering_api.hpp:1142
BufferType
Describes the type of a IBuffer.
Definition rendering_api.hpp:601
DefragmentationStrategy
The strategy to apply to a defragmentation pass.
Definition rendering_api.hpp:886
@ Balanced
Provides a balance between fragment computation time and packing efficiency.
Definition rendering_api.hpp:895
ResourceUsage
Describes the intended usage for a resource.
Definition rendering_api.hpp:761
@ FrameBufferImage
Default usage for frame buffer images.
Definition rendering_api.hpp:815
@ Default
Shortcut for commonly used TransferSource | TransferDestination combination.
Definition rendering_api.hpp:809
ImageDimensions
Describes the dimensions of a image resource, i.e. the dimensions that are required to access a texel...
Definition rendering_api.hpp:1258
@ DIM_2
Represents a 2D image.
Definition rendering_api.hpp:1267
AllocationAlgorithm
The allocation algorithm used by VirtualAllocators.
Definition rendering_api.hpp:852
@ Default
The default algorithm without any constraints on the memory layout.
Definition rendering_api.hpp:856
DescriptorType
Describes the type of a IDescriptor.
Definition rendering_api.hpp:442
QueuePriority
Specifies the priority with which a queue is scheduled on the GPU.
Definition rendering_api.hpp:160
@ Normal
The default queue priority.
Definition rendering_api.hpp:164
QueueType
Represents the type of a CommandQueue.
Definition rendering_api.hpp:114
@ None
Describes an unspecified command queue. It is not valid to create a queue instance with this type.
Definition rendering_api.hpp:118
ResourceHeap
Defines where a resource (buffer or image) memory is located and from where it can be accessed.
Definition rendering_api.hpp:710
AccelerationStructureFlags
Controls how an acceleration structure should be built.
Definition rendering_api.hpp:1988
@ None
Use default options for building the acceleration structure.
Definition rendering_api.hpp:1992
FilterMode
Describes the filter operation when accessing a pixel from a texture coordinate.
Definition rendering_api.hpp:1324
@ Nearest
Take the nearest texel with respect to the texture coordinate.
Definition rendering_api.hpp:1328
AllocationBehavior
Controls the allocation behavior of IGraphicsFactory.
Definition rendering_api.hpp:830
@ Default
Represents the default behavior, which might fall back to slower memory types, if required.
Definition rendering_api.hpp:834
VertexBufferInputRate
The rate at which a vertex buffer of a certain IVertexBufferLayout is made available for vertex shade...
Definition rendering_api.hpp:922
@ Vertex
The vertex buffer layout describes data that is made available per individual vertex.
Definition rendering_api.hpp:926
PipelineStage
Defines pipeline stages as points where synchronization may occur.
Definition rendering_api.hpp:1545
ResourceAccess
Defines how a IBuffer or IImage resource is accessed.
Definition rendering_api.hpp:1709
Format
Describes a texel format.
Definition rendering_api.hpp:183
@ B8G8R8A8_SRGB
Definition rendering_api.hpp:234
MultiSamplingLevel
Describes the number of samples with which a IImage is sampled.
Definition rendering_api.hpp:1283
@ x1
The default number of samples. Multi-sampling will be deactivated, if this sampling level is used.
Definition rendering_api.hpp:1287
std::generator< T, TVal > Generator
Describes an intermediate container for elements of type T .
Definition containers.hpp:206
std::vector< T > Array
Represents a dynamic array.
Definition containers.hpp:73
std::optional< T > Optional
Represents an optional value.
Definition containers.hpp:94
std::shared_ptr< T > SharedPtr
Represents a shared pointer, that expresses non-exclusive ownership.
Definition containers.hpp:109
std::unique_ptr< T, TDeleter > UniquePtr
Represents a unique pointer, that expresses exclusive ownership.
Definition containers.hpp:102
std::string String
Definition string.hpp:24
std::string_view StringView
Definition string.hpp:26
BackendType
Definition app_api.hpp:35
std::span< T > Span
Represents a view of an array.
Definition containers.hpp:87
@ None
Definition app_api.hpp:30
An input range over another range, where the returned values of type T are covariants of the values ...
Definition containers.hpp:529
Describes a resource binding to a descriptor or descriptor set.
Definition rendering_api.hpp:6218
Describes a single descriptor binding point within a IShaderModule.
Definition rendering_api.hpp:3309
Stores extended memory statistics, that can be queried by calling IGraphicsFactory::detailedMemorySta...
Definition rendering_api.hpp:10040
Describes optional features that can be supported by a device.
Definition rendering_api.hpp:10983
Stores a buffer that contains axis-aligned bounding boxes.
Definition rendering_api.hpp:5481
Represents a triangle mesh.
Definition rendering_api.hpp:5404
Represents an instance of an IBottomLevelAccelerationStructure.
Definition rendering_api.hpp:5688
Stores simple memory heap statistics, that can be quickly queried by calling IGraphicsFactory::memory...
Definition rendering_api.hpp:9985
A hint used during shader reflection to control the pipeline layout.
Definition rendering_api.hpp:7174
Describes the offsets and sizes of a shader group within a shader binding table buffer.
Definition rendering_api.hpp:4291
An allocator used to allocate the shared object.
Definition containers.hpp:1098
Definition alloc_buffer.cpp:13