Foundation
Loading...
Searching...
No Matches
PipelineState.hpp
Go to the documentation of this file.
1#pragma once
2#include "Common.hpp"
3#include "Shader.hpp"
4#include "Descriptor.hpp"
5namespace Foundation::RHI {
6 class RHIDevice;
8 {
9 Unknown = 0,
10 Vulkan = 1,
11 };
28 {
29 protected:
31 public:
32 static constexpr uint32_t kSerializedDataMagic = 0x43535046; // FPSC
33 static constexpr uint32_t kSerializedDataVersion = 1;
39
41 [[nodiscard]] virtual size_t GetSerializedDataSize() const = 0;
43 virtual void DebugSetObjectName(const char* name) = 0;
44 };
45 class RHIPipelineState : public RHIObject {
46 protected:
48 public:
51 RHIDevicePipelineType type{ RHIDevicePipelineType::Graphics };
52 // [Graphics] Vertex Input
53 struct VertexInput {
54 struct Binding {
55 uint32_t stride; // In bytes
56 bool perInstance{ false }; // If true, this binding is per-instance data
57 };
61 // [Graphics] Input Assembly
68 // [Graphics] Viewport
69 struct Viewport {
70 float x = 0, y = 0, width, height;
71 float minDepth = 0.0, maxDepth = 1.0;
73 // [Graphics] Scissor
74 struct Scissor {
75 int32_t x = 0, y = 0, width, height;
77 // [Graphics] Rasterizer
96 // [Graphics] MSAA
101 // [Graphics] Depth Stencil
118 struct Attachment {
119 struct Blending {
120 bool enabled{ false };
138 const static Blending GetNoBlending() { return {}; }
139 const static Blending GetAlphaBlending() {
140 return {
141 .enabled = true,
142 .srcColorBlendFactor = SrcAlpha,
143 .dstColorBlendFactor = OneMinusSrcAlpha,
144 .srcAlphaBlendFactor = One,
145 .dstAlphaBlendFactor = OneMinusSrcAlpha,
146 .colorBlendOp = Add,
147 .alphaBlendOp = Add
148 };
149 }
151 {
152 return {
153 .enabled = true,
154 .srcColorBlendFactor = SrcAlpha,
155 .dstColorBlendFactor = One,
156 .srcAlphaBlendFactor = One,
157 .dstAlphaBlendFactor = One,
158 .colorBlendOp = Add,
159 .alphaBlendOp = Add
160 };
161 }
166 };
167 // [Graphics] Attachments/Alpha Blending
169 // Stages
171 {
172 Triangles,
174 };
175 struct ShaderStage {
176 struct StageDesc {
177 // Stage this shader participates in
178 // You can only specify one stage per shader module.
180 const char* entryPoint;
181 // Only one specialization info per stage for simplicity
183 // For ray tracing shaders - which hit group index this shader belongs to
188 };
190 // Descriptors
192 // Push Constants
195 size_t offset;
196 size_t size;
197 };
199 };
201
202 RHIPipelineState(RHIDevice const& device, PipelineStateDesc const& desc) : mDevice(device), mDesc(desc) {}
203
204 virtual void DebugSetObjectName(const char* name) = 0;
205 };
206
207}
Definition Device.hpp:245
Base class for all RHI objects.
Definition Details.hpp:16
Definition PipelineState.hpp:28
static constexpr uint32_t kSerializedDataMagic
Definition PipelineState.hpp:32
virtual size_t GetSerializedDataSize() const =0
RHIPipelineStateCache(RHIDevice const &device, PipelineStateCacheDesc const &)
Definition PipelineState.hpp:38
virtual void DebugSetObjectName(const char *name)=0
virtual RHIPipelineStateCacheImportStatus GetImportStatus() const =0
virtual size_t WriteSerializedData(Span< unsigned char > dstBuffer) const =0
static constexpr uint32_t kSerializedDataVersion
Definition PipelineState.hpp:33
const RHIDevice & mDevice
Definition PipelineState.hpp:30
Definition PipelineState.hpp:45
const RHIDevice & mDevice
Definition PipelineState.hpp:47
RHIPipelineState(RHIDevice const &device, PipelineStateDesc const &desc)
Definition PipelineState.hpp:202
const PipelineStateDesc mDesc
Definition PipelineState.hpp:200
virtual void DebugSetObjectName(const char *name)=0
Definition Shader.hpp:5
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:153
std::span< T > Span
Alias for std::span
Definition Container.hpp:60
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:4
RHIPipelineStateCacheImportStatus
Definition PipelineState.hpp:18
RHIPipelineStateCacheBackend
Definition PipelineState.hpp:8
RHIResourceFormat
Definition Common.hpp:34
RHIMultisampleCount
Definition Common.hpp:257
Definition PipelineState.hpp:13
uint64_t high
Definition PipelineState.hpp:14
uint64_t low
Definition PipelineState.hpp:15
Span< const unsigned char > initialData
Definition PipelineState.hpp:36
static const Blending GetAdditiveBlending()
Definition PipelineState.hpp:150
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Attachment::Blending::BlendFactor dstAlphaBlendFactor
static const Blending GetAlphaBlending()
Definition PipelineState.hpp:139
static const Blending GetNoBlending()
Definition PipelineState.hpp:138
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Attachment::Blending::BlendFactor dstColorBlendFactor
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Attachment::Blending::BlendFactor srcAlphaBlendFactor
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Attachment::Blending::BlendOp colorBlendOp
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Attachment::Blending::BlendFactor srcColorBlendFactor
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Attachment::Blending::BlendOp alphaBlendOp
struct Foundation::RHI::RHIPipelineState::PipelineStateDesc::Attachment::RenderTarget renderTarget
struct Foundation::RHI::RHIPipelineState::PipelineStateDesc::Attachment::Blending blending
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::DepthStencil::CompareOp Greater
RHIResourceFormat stencilFormat
Definition PipelineState.hpp:104
RHIResourceFormat depthFormat
Definition PipelineState.hpp:103
RHIMultisampleCount sampleCount
Definition PipelineState.hpp:99
RHIShaderStage stage
Definition PipelineState.hpp:194
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Rasterizer::FrontFace FFCounterClockwise
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Rasterizer::FillMode FillSolid
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Rasterizer::CullMode CullBack
const uint32_t raytracingHitGroupIndex
Definition PipelineState.hpp:184
RayTracingHitGroupType raytracingHitGroupType
Definition PipelineState.hpp:185
Span< const char > specializationData
Definition PipelineState.hpp:182
struct Foundation::RHI::RHIPipelineState::PipelineStateDesc::ShaderStage::StageDesc desc
RHIShaderModule * shaderModule
Definition PipelineState.hpp:187
Span< const Binding > bindings
Definition PipelineState.hpp:58
Span< const RHIVertexAttribute > attributes
Definition PipelineState.hpp:59
struct Foundation::RHI::RHIPipelineState::PipelineStateDesc::Viewport viewport
struct Foundation::RHI::RHIPipelineState::PipelineStateDesc::DepthStencil depthStencil
Span< RHIDeviceDescriptorSetLayout *const > descriptorSetLayouts
Definition PipelineState.hpp:191
Span< const Attachment > attachments
Definition PipelineState.hpp:168
Span< const ShaderStage > shaderStages
Definition PipelineState.hpp:189
struct Foundation::RHI::RHIPipelineState::PipelineStateDesc::VertexInput vertexInput
Span< const PushConstant > pushConstants
Definition PipelineState.hpp:198
struct Foundation::RHI::RHIPipelineState::PipelineStateDesc::Rasterizer rasterizer
struct Foundation::RHI::RHIPipelineState::PipelineStateDesc::Scissor scissor
struct Foundation::RHI::RHIPipelineState::PipelineStateDesc::Multisample multisample
RHIPipelineStateCache * psoCache
Definition PipelineState.hpp:50
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Topology TriangleList
@ TriangleStrip
Definition PipelineState.hpp:66
@ PointList
Definition PipelineState.hpp:64
@ TriangleList
Definition PipelineState.hpp:65
RHIDevicePipelineType type
Definition PipelineState.hpp:51
RayTracingHitGroupType
Definition PipelineState.hpp:171