Foundation
Loading...
Searching...
No Matches
PipelineState.hpp
Go to the documentation of this file.
1#pragma once
3#include "Common.hpp"
4namespace Foundation::RHI {
7 switch (topology) {
8 case PointList: return vk::PrimitiveTopology::ePointList;
9 case LineList: return vk::PrimitiveTopology::eLineList;
10 case TriangleStrip: return vk::PrimitiveTopology::eTriangleStrip;
11 case TriangleList:
12 default:
13 return vk::PrimitiveTopology::eTriangleList;
14 }
15 }
17 switch (mode) {
19 case RHIPipelineState::PipelineStateDesc::Rasterizer::FillSolid: return vk::PolygonMode::eFill;
20 default:
21 return vk::PolygonMode::ePoint;
22 }
23 }
24
26 switch (mode) {
27 case RHIPipelineState::PipelineStateDesc::Rasterizer::CullNone: return vk::CullModeFlagBits::eNone;
28 case RHIPipelineState::PipelineStateDesc::Rasterizer::CullFront: return vk::CullModeFlagBits::eFront;
30 default:
31 return vk::CullModeFlagBits::eBack;
32 }
33 }
34
36 switch (face) {
37 case RHIPipelineState::PipelineStateDesc::Rasterizer::FFCounterClockwise: return vk::FrontFace::eCounterClockwise;
39 default:
40 return vk::FrontFace::eClockwise;
41 }
42 }
43
46 switch (factor) {
47 case Zero: return vk::BlendFactor::eZero;
48 case One: return vk::BlendFactor::eOne;
49 case SrcColor: return vk::BlendFactor::eSrcColor;
50 case OneMinusSrcColor: return vk::BlendFactor::eOneMinusSrcColor;
51 case DstColor: return vk::BlendFactor::eDstColor;
52 case OneMinusDstColor: return vk::BlendFactor::eOneMinusDstColor;
53 case SrcAlpha: return vk::BlendFactor::eSrcAlpha;
54 case OneMinusSrcAlpha: return vk::BlendFactor::eOneMinusSrcAlpha;
55 case DstAlpha: return vk::BlendFactor::eDstAlpha;
56 case OneMinusDstAlpha:
57 default:
58 return vk::BlendFactor::eOneMinusDstAlpha;
59 }
60 }
61
64 switch (op) {
65 case Add: return vk::BlendOp::eAdd;
66 case Subtract: return vk::BlendOp::eSubtract;
67 case ReverseSubtract:
68 default:
69 return vk::BlendOp::eReverseSubtract;
70 }
71 }
72
73 class VulkanDevice;
75 {
77
78 vk::raii::PipelineCache mCache{nullptr};
80 public:
81 VulkanPipelineStateCache(const VulkanDevice& device, PipelineStateCacheDesc const& desc);
82
83 [[nodiscard]] auto const& GetVkPipelineCache() const { return mCache; }
84
86 [[nodiscard]] size_t GetSerializedDataSize() const override;
88 void DebugSetObjectName(const char* name) override;
89 };
91 {
92 vk::StridedDeviceAddressRegionKHR raygen{};
93 vk::StridedDeviceAddressRegionKHR miss{};
94 vk::StridedDeviceAddressRegionKHR hit{};
95 vk::StridedDeviceAddressRegionKHR callable{};
96 };
99
100 vk::raii::Pipeline mPipeline{ nullptr };
101 vk::raii::PipelineLayout mPipelineLayout{ nullptr };
103 void InitializeGraphics();
104 void InitializeCompute();
106
109 public:
111
112 [[nodiscard]] auto const& GetVkPipeline() const { return mPipeline; }
113 [[nodiscard]] auto const& GetVkPipelineLayout() const { return mPipelineLayout; }
114 [[nodiscard]] VulkanPipelineRayTracingSBT const& GetVkSBT() const { return mSBT; }
115
116 void DebugSetObjectName(const char* name) override;
117 };
118}
Definition PipelineState.hpp:28
Definition PipelineState.hpp:45
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:86
Definition Device.hpp:122
Definition PipelineState.hpp:75
RHIPipelineStateCacheImportStatus GetImportStatus() const override
Definition PipelineState.hpp:85
void DebugSetObjectName(const char *name) override
Definition PipelineState.cpp:146
size_t WriteSerializedData(Span< unsigned char > dstBuffer) const override
Definition PipelineState.cpp:122
size_t GetSerializedDataSize() const override
Definition PipelineState.cpp:115
const VulkanDevice & mDevice
Definition PipelineState.hpp:76
RHIPipelineStateCacheImportStatus mImportStatus
Definition PipelineState.hpp:79
auto const & GetVkPipelineCache() const
Definition PipelineState.hpp:83
vk::raii::PipelineCache mCache
Definition PipelineState.hpp:78
Definition PipelineState.hpp:97
auto const & GetVkPipelineLayout() const
Definition PipelineState.hpp:113
vk::raii::Pipeline mPipeline
Definition PipelineState.hpp:100
VulkanDevice & mDevice
Definition PipelineState.hpp:98
void InitializeCompute()
Definition PipelineState.cpp:337
vk::raii::PipelineLayout mPipelineLayout
Definition PipelineState.hpp:101
void InitializePipelineLayout()
Definition PipelineState.cpp:154
auto const & GetVkPipeline() const
Definition PipelineState.hpp:112
VulkanPipelineRayTracingSBT mSBT
Definition PipelineState.hpp:108
RHIDeviceScopedHandle< RHIBuffer > mSBTBuffer
Definition PipelineState.hpp:107
VulkanPipelineRayTracingSBT const & GetVkSBT() const
Definition PipelineState.hpp:114
void DebugSetObjectName(const char *name) override
Definition PipelineState.cpp:587
void InitializeRayTracing()
Definition PipelineState.cpp:374
void InitializeGraphics()
Definition PipelineState.cpp:180
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
vk::PolygonMode GetVulkanPolygonModeFromDesc(RHIPipelineState::PipelineStateDesc::Rasterizer::FillMode mode)
Definition PipelineState.hpp:16
vk::CullModeFlags GetVulkanCullModeFromDesc(RHIPipelineState::PipelineStateDesc::Rasterizer::CullMode mode)
Definition PipelineState.hpp:25
vk::PrimitiveTopology GetVulkanPrimitiveTopologyFromDesc(RHIPipelineState::PipelineStateDesc::Topology topology)
Definition PipelineState.hpp:5
RHIPipelineStateCacheImportStatus
Definition PipelineState.hpp:18
vk::FrontFace GetVulkanFrontFaceFromDesc(RHIPipelineState::PipelineStateDesc::Rasterizer::FrontFace face)
Definition PipelineState.hpp:35
vk::BlendOp GetVulkanBlendOpFromDesc(RHIPipelineState::PipelineStateDesc::Attachment::Blending::BlendOp op)
Definition PipelineState.hpp:62
vk::BlendFactor GetVulkanBlendFactorFromDesc(RHIPipelineState::PipelineStateDesc::Attachment::Blending::BlendFactor factor)
Definition PipelineState.hpp:44
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Rasterizer::FrontFace FFCounterClockwise
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Rasterizer::FillMode FillSolid
enum Foundation::RHI::RHIPipelineState::PipelineStateDesc::Rasterizer::CullMode CullBack
Definition PipelineState.hpp:91
vk::StridedDeviceAddressRegionKHR callable
Definition PipelineState.hpp:95
vk::StridedDeviceAddressRegionKHR miss
Definition PipelineState.hpp:93
vk::StridedDeviceAddressRegionKHR hit
Definition PipelineState.hpp:94
vk::StridedDeviceAddressRegionKHR raygen
Definition PipelineState.hpp:92