Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
foray_pipelinelayout.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "../core/foray_managedresource.hpp"
4#include "../foray_basics.hpp"
5#include "../foray_vulkan.hpp"
6#include <map>
7#include <vector>
8
9namespace foray::util {
11 class PipelineLayout : public core::VulkanResource<VkObjectType::VK_OBJECT_TYPE_PIPELINE_LAYOUT>
12 {
13 public:
14 PipelineLayout() = default;
15
16 inline virtual bool Exists() const { return !!mPipelineLayout; }
17
18 virtual void Destroy();
19
21 {
22 Destroy();
23 }
24
25 static const uint32_t PUSHC_OFFSET_AUTO = ~0U;
26
28 void AddDescriptorSetLayout(VkDescriptorSetLayout layout);
30 void AddDescriptorSetLayouts(const std::vector<VkDescriptorSetLayout>& layouts);
33 void AddPushConstantRange(VkPushConstantRange range);
36 void AddPushConstantRanges(const std::vector<VkPushConstantRange>& ranges);
37
42 template <typename TPushC>
43 inline void AddPushConstantRange(VkShaderStageFlags stageFlags, uint32_t offset = PUSHC_OFFSET_AUTO);
44
49 VkPipelineLayout Build(core::Context* context, VkPipelineLayoutCreateFlags flags = 0, void* pNext = nullptr);
50
57 VkPipelineLayout Build(core::Context* context,
58 const std::vector<VkDescriptorSetLayout>& descriptorLayouts,
59 const std::vector<VkPushConstantRange>& pushConstantRanges,
60 VkPipelineLayoutCreateFlags flags = 0,
61 void* pNext = nullptr);
62
64
65 inline operator VkPipelineLayout() const { return mPipelineLayout; }
66
67 protected:
69 VkPipelineLayout mPipelineLayout{};
70
71 std::vector<VkDescriptorSetLayout> mDescriptorSetLayouts;
72 std::vector<VkPushConstantRange> mPushConstantRanges;
73 uint32_t mPushConstantOffset = 0U;
74 };
75
76 template <typename TPushC>
77 inline void PipelineLayout::AddPushConstantRange(VkShaderStageFlags stageFlags, uint32_t offset)
78 {
79 if (offset == ~0U)
80 {
81 offset = mPushConstantOffset;
82 }
83 mPushConstantOffset += sizeof(TPushC);
84 VkPushConstantRange range{
85 .stageFlags = stageFlags,
86 .offset = offset,
87 .size = sizeof(TPushC),
88 };
90 }
91
92} // namespace foray::util
ManagedResource variant which automates GetTypeName() overloading by returning a stringified version ...
Definition foray_managedresource.hpp:59
Class that holds memory ownership of a vulkan pipeline layout.
Definition foray_pipelinelayout.hpp:12
void AddPushConstantRange(VkPushConstantRange range)
Add a push constant range to the pipeline layout prior to building.
void AddDescriptorSetLayouts(const std::vector< VkDescriptorSetLayout > &layouts)
Add descriptorset layouts to the pipeline layout prior to building.
std::vector< VkDescriptorSetLayout > mDescriptorSetLayouts
Definition foray_pipelinelayout.hpp:71
virtual bool Exists() const
Return true, if the managed resource is allocated.
Definition foray_pipelinelayout.hpp:16
static const uint32_t PUSHC_OFFSET_AUTO
Definition foray_pipelinelayout.hpp:25
~PipelineLayout()
Definition foray_pipelinelayout.hpp:20
void AddPushConstantRanges(const std::vector< VkPushConstantRange > &ranges)
Add push constant ranges to the pipeline layout prior to building.
VkPipelineLayout mPipelineLayout
Definition foray_pipelinelayout.hpp:69
VkPipelineLayout Build(core::Context *context, const std::vector< VkDescriptorSetLayout > &descriptorLayouts, const std::vector< VkPushConstantRange > &pushConstantRanges, VkPipelineLayoutCreateFlags flags=0, void *pNext=nullptr)
Builds the pipelinelayout based on previously added descriptorset layouts and push constant ranges (a...
VkPipelineLayout Build(core::Context *context, VkPipelineLayoutCreateFlags flags=0, void *pNext=nullptr)
Builds the pipelinelayout based on previously added descriptorset layouts and push constant ranges.
core::Context * mContext
Definition foray_pipelinelayout.hpp:68
std::vector< VkPushConstantRange > mPushConstantRanges
Definition foray_pipelinelayout.hpp:72
uint32_t mPushConstantOffset
Definition foray_pipelinelayout.hpp:73
void AddDescriptorSetLayout(VkDescriptorSetLayout layout)
Add a descriptorset layout to the pipeline layout prior to building.
virtual void Destroy()
Destroy the resource.
#define FORAY_GETTER_V(member)
Return value.
Definition foray_basics.hpp:39
Definition foray_dualbuffer.hpp:5
Non owning context object.
Definition foray_context.hpp:16