3#include <litefx/rendering_builders.hpp>
4#include "vulkan_api.hpp"
7#if defined(LITEFX_BUILD_DEFINE_BUILDERS)
16 class LITEFX_VULKAN_API [[nodiscard]] VulkanBarrierBuilder final :
public BarrierBuilder<VulkanBarrier> {
21 explicit VulkanBarrierBuilder();
22 ~VulkanBarrierBuilder() noexcept override;
24 VulkanBarrierBuilder(VulkanBarrierBuilder&&) noexcept = default;
25 VulkanBarrierBuilder(const VulkanBarrierBuilder&) = delete;
26 VulkanBarrierBuilder& operator=(VulkanBarrierBuilder&&) noexcept = delete;
27 VulkanBarrierBuilder& operator=(const VulkanBarrierBuilder&) = delete;
48 class LITEFX_VULKAN_API [[nodiscard]] VulkanShaderProgramBuilder final : public ShaderProgramBuilder<VulkanShaderProgram> {
54 explicit VulkanShaderProgramBuilder(
const VulkanDevice& device);
55 ~VulkanShaderProgramBuilder() noexcept override;
57 VulkanShaderProgramBuilder(VulkanShaderProgramBuilder&&) noexcept = delete;
58 VulkanShaderProgramBuilder(const VulkanShaderProgramBuilder&) = delete;
59 VulkanShaderProgramBuilder& operator=(VulkanShaderProgramBuilder&&) noexcept = delete;
60 VulkanShaderProgramBuilder& operator=(const VulkanShaderProgramBuilder&) = delete;
65 void build() override;
80 class LITEFX_VULKAN_API [[nodiscard]] VulkanRasterizerBuilder final : public RasterizerBuilder<VulkanRasterizer> {
85 explicit VulkanRasterizerBuilder();
86 ~VulkanRasterizerBuilder() noexcept override;
88 VulkanRasterizerBuilder(VulkanRasterizerBuilder&&) noexcept = delete;
89 VulkanRasterizerBuilder(const VulkanRasterizerBuilder&) = delete;
90 VulkanRasterizerBuilder& operator=(VulkanRasterizerBuilder&&) noexcept = delete;
91 VulkanRasterizerBuilder& operator=(const VulkanRasterizerBuilder&) = delete;
96 void build() override;
103 class LITEFX_VULKAN_API [[nodiscard]] VulkanInputAssemblerBuilder final : public InputAssemblerBuilder<VulkanInputAssembler> {
104 LITEFX_IMPLEMENTATION(VulkanInputAssemblerBuilderImpl);
110 explicit VulkanInputAssemblerBuilder();
111 ~VulkanInputAssemblerBuilder() noexcept override;
113 VulkanInputAssemblerBuilder(VulkanInputAssemblerBuilder&&) noexcept = delete;
114 VulkanInputAssemblerBuilder(const VulkanInputAssemblerBuilder&) = delete;
115 VulkanInputAssemblerBuilder& operator=(VulkanInputAssemblerBuilder&&) noexcept = delete;
116 VulkanInputAssemblerBuilder& operator=(const VulkanInputAssemblerBuilder&) = delete;
121 void build() override;
129 VulkanVertexBufferLayoutBuilder vertexBuffer(
size_t elementSize,
UInt32 binding = 0);
135 template <typename TSelf>
136 auto indexType(this TSelf&& self,
IndexType type) -> TSelf&& {
137 self.use(VulkanIndexBufferLayout::create(type));
138 return std::forward<TSelf>(self);
147 class LITEFX_VULKAN_API [[nodiscard]] VulkanVertexBufferLayoutBuilder final :
public VertexBufferLayoutBuilder<VulkanVertexBufferLayout, VulkanInputAssemblerBuilder> {
149 using VertexBufferLayoutBuilder<VulkanVertexBufferLayout, VulkanInputAssemblerBuilder>::VertexBufferLayoutBuilder;
154 void build()
override;
163 class LITEFX_VULKAN_API [[nodiscard]] VulkanPipelineLayoutBuilder final :
public PipelineLayoutBuilder<VulkanPipelineLayout> {
164 friend class VulkanDescriptorSetLayoutBuilder;
170 explicit VulkanPipelineLayoutBuilder(
const VulkanDevice& device);
171 ~VulkanPipelineLayoutBuilder() noexcept override;
173 VulkanPipelineLayoutBuilder(VulkanPipelineLayoutBuilder&&) noexcept = delete;
174 VulkanPipelineLayoutBuilder(const VulkanPipelineLayoutBuilder&) = delete;
175 VulkanPipelineLayoutBuilder& operator=(VulkanPipelineLayoutBuilder&&) noexcept = delete;
176 VulkanPipelineLayoutBuilder& operator=(const VulkanPipelineLayoutBuilder&) = delete;
181 void build() override;
196 VulkanPushConstantsLayoutBuilder pushConstants(
UInt32 size);
205 class LITEFX_VULKAN_API [[nodiscard]] VulkanDescriptorSetLayoutBuilder final : public DescriptorSetLayoutBuilder<VulkanDescriptorSetLayout, VulkanPipelineLayoutBuilder> {
213 explicit VulkanDescriptorSetLayoutBuilder(VulkanPipelineLayoutBuilder& parent,
UInt32 space = 0,
ShaderStage stages = ShaderStage::Any);
214 ~VulkanDescriptorSetLayoutBuilder() noexcept override;
216 VulkanDescriptorSetLayoutBuilder(VulkanDescriptorSetLayoutBuilder&&) noexcept = delete;
217 VulkanDescriptorSetLayoutBuilder(const VulkanDescriptorSetLayoutBuilder&) = delete;
218 VulkanDescriptorSetLayoutBuilder& operator=(VulkanDescriptorSetLayoutBuilder&&) noexcept = delete;
219 VulkanDescriptorSetLayoutBuilder& operator=(const VulkanDescriptorSetLayoutBuilder&) = delete;
224 void build() override;
232 VulkanDescriptorLayout makeDescriptor(
UInt32 binding,
FilterMode magFilter,
FilterMode minFilter,
BorderMode borderU,
BorderMode borderV,
BorderMode borderW,
MipMapMode mipMapMode,
Float mipMapBias,
Float minLod,
Float maxLod,
Float anisotropy) override;
239 class LITEFX_VULKAN_API [[nodiscard]] VulkanPushConstantsLayoutBuilder final : public PushConstantsLayoutBuilder<VulkanPushConstantsLayout, VulkanPipelineLayoutBuilder> {
246 explicit VulkanPushConstantsLayoutBuilder(VulkanPipelineLayoutBuilder& parent,
UInt32 size);
247 ~VulkanPushConstantsLayoutBuilder() noexcept override;
249 VulkanPushConstantsLayoutBuilder(VulkanPushConstantsLayoutBuilder&&) noexcept = delete;
250 VulkanPushConstantsLayoutBuilder(const VulkanPushConstantsLayoutBuilder&) = delete;
251 VulkanPushConstantsLayoutBuilder& operator=(VulkanPushConstantsLayoutBuilder&&) noexcept = delete;
252 VulkanPushConstantsLayoutBuilder& operator=(const VulkanPushConstantsLayoutBuilder&) = delete;
257 void build() override;
269 class LITEFX_VULKAN_API [[nodiscard]] VulkanRenderPipelineBuilder final : public RenderPipelineBuilder<VulkanRenderPipeline> {
276 explicit VulkanRenderPipelineBuilder(
const VulkanRenderPass& renderPass,
const String& name =
"");
277 ~VulkanRenderPipelineBuilder() noexcept override;
279 VulkanRenderPipelineBuilder(VulkanRenderPipelineBuilder&&) noexcept = delete;
280 VulkanRenderPipelineBuilder(const VulkanRenderPipelineBuilder&) = delete;
281 VulkanRenderPipelineBuilder& operator=(VulkanRenderPipelineBuilder&&) noexcept = delete;
282 VulkanRenderPipelineBuilder& operator=(const VulkanRenderPipelineBuilder&) = delete;
287 void build() override;
294 class LITEFX_VULKAN_API [[nodiscard]] VulkanComputePipelineBuilder final : public ComputePipelineBuilder<VulkanComputePipeline> {
301 explicit VulkanComputePipelineBuilder(
const VulkanDevice& device,
const String& name =
"");
302 ~VulkanComputePipelineBuilder() noexcept override;
304 VulkanComputePipelineBuilder(VulkanComputePipelineBuilder&&) noexcept = delete;
305 VulkanComputePipelineBuilder(const VulkanComputePipelineBuilder&) = delete;
306 VulkanComputePipelineBuilder& operator=(VulkanComputePipelineBuilder&&) noexcept = delete;
307 VulkanComputePipelineBuilder& operator=(const VulkanComputePipelineBuilder&) = delete;
312 void build() override;
319 class LITEFX_VULKAN_API [[nodiscard]] VulkanRayTracingPipelineBuilder final : public RayTracingPipelineBuilder<VulkanRayTracingPipeline> {
328 ~VulkanRayTracingPipelineBuilder() noexcept override;
330 VulkanRayTracingPipelineBuilder(VulkanRayTracingPipelineBuilder&&) noexcept = delete;
331 VulkanRayTracingPipelineBuilder(const VulkanRayTracingPipelineBuilder&) = delete;
332 VulkanRayTracingPipelineBuilder& operator=(VulkanRayTracingPipelineBuilder&&) noexcept = delete;
333 VulkanRayTracingPipelineBuilder& operator=(const VulkanRayTracingPipelineBuilder&) = delete;
338 void build() override;
345 class LITEFX_VULKAN_API [[nodiscard]] VulkanRenderPassBuilder final : public RenderPassBuilder<VulkanRenderPass> {
352 explicit VulkanRenderPassBuilder(
const VulkanDevice& device,
const String& name =
"");
360 explicit VulkanRenderPassBuilder(
const VulkanDevice& device,
UInt32 commandBuffers,
const String& name =
"");
363 ~VulkanRenderPassBuilder() noexcept override;
365 VulkanRenderPassBuilder(VulkanRenderPassBuilder&&) noexcept = delete;
366 VulkanRenderPassBuilder(const VulkanRenderPassBuilder&) = delete;
367 VulkanRenderPassBuilder& operator=(VulkanRenderPassBuilder&&) noexcept = delete;
368 VulkanRenderPassBuilder& operator=(const VulkanRenderPassBuilder&) = delete;
373 void build() override;
Base interface for buffer objects.
Definition rendering_api.hpp:4186
Describes a generic image.
Definition rendering_api.hpp:4208
Represents a mapping between a set of RenderTarget instances and the input attachments of a IRenderPa...
Definition rendering_api.hpp:3076
Implements a render target.
Definition rendering_api.hpp:2976
Stores a set of IShaderRecords in that later form a shader binding table used for ray-tracing.
Definition rendering_api.hpp:6007
float_t Float
A type for a floating point value with single precision.
Definition math.hpp:71
uint32_t UInt32
A type for an unsigned 32 bit integer.
Definition math.hpp:56
BorderMode
Describes how to treat texture coordinates that are outside the domain [0..1].
Definition rendering_api.hpp:1184
ImageLayout
Specifies the layout of an IImage resource.
Definition rendering_api.hpp:1686
MipMapMode
Describes the filter operation between two mip-map levels.
Definition rendering_api.hpp:1169
ShaderStage
Describes the valid shader stages of a graphics pipeline.
Definition rendering_api.hpp:799
@ Any
Enables all supported shader stages.
IndexType
Describes the element type of an index buffer.
Definition rendering_api.hpp:750
DescriptorType
Describes the type of a IDescriptor.
Definition rendering_api.hpp:436
FilterMode
Describes the filter operation when accessing a pixel from a texture coordinate.
Definition rendering_api.hpp:1152
PipelineStage
Defines pipeline stages as points where synchronization may occur.
Definition rendering_api.hpp:1373
ResourceAccess
Defines how a IBuffer or IImage resource is accessed.
Definition rendering_api.hpp:1537
std::optional< T > Optional
Represents an optional value.
Definition containers.hpp:94
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
Describes a single descriptor binding point within a IShaderModule.
Definition rendering_api.hpp:2735