Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
foray_managedubo.hpp
Go to the documentation of this file.
1#pragma once
2#include "../foray_basics.hpp"
3#include "../foray_glm.hpp"
5
6namespace foray::util {
8 {
9 public:
10 inline size_t SizeOfUbo() const { return mUboBuffer.GetDeviceBuffer().GetSize(); }
11
12 FORAY_PROPERTY_R(UboBuffer)
13
14 virtual void UpdateTo(uint32_t frameIndex) = 0;
15 virtual void CmdCopyToDevice(uint32_t frameIndex, VkCommandBuffer cmdBuffer);
16 virtual void CmdPrepareForRead(VkCommandBuffer cmdBuffer, VkPipelineStageFlags2 dstStageMask, VkAccessFlags2 dstAccessMask) const;
17 virtual VkBufferMemoryBarrier2 MakeBarrierPrepareForRead(VkPipelineStageFlags2 dstStageMask, VkAccessFlags2 dstAccessMask) const;
18 void Create(core::Context* context, VkDeviceSize size, uint32_t stageBufferCount = INFLIGHT_FRAME_COUNT);
19 virtual bool Exists() const override;
20 virtual void Destroy() override;
21
22 const core::ManagedBuffer* GetDeviceBuffer() const { return &(mUboBuffer.GetDeviceBuffer()); }
23
24 operator VkBuffer() const { return mUboBuffer.GetDeviceBuffer().GetBuffer(); }
25
26 VkDescriptorBufferInfo GetVkDescriptorBufferInfo() const;
27
28 VkBuffer GetVkBuffer() const { return mUboBuffer.GetDeviceBuffer().GetBuffer(); }
29
30 protected:
32 };
33
40 template <typename T_UBO>
42 {
43 protected:
44 T_UBO mData;
45
46 public:
47 inline ManagedUbo();
49
50 inline void Create(core::Context* context, std::string_view name);
51 virtual void UpdateTo(uint32_t frameIndex) override;
52
53
55 };
56
57 template <typename T_UBO>
61
62 template <typename T_UBO>
63 void ManagedUbo<T_UBO>::Create(core::Context* context, std::string_view name)
64 {
65 ManagedUboBase::Create(context, sizeof(T_UBO));
66 if(name.size() > 0)
67 {
68 mUboBuffer.SetName(name);
69 }
70 }
71
72 template <typename T_UBO>
77
78 template <typename T_UBO>
79 inline void ManagedUbo<T_UBO>::UpdateTo(uint32_t frameIndex)
80 {
81 mUboBuffer.StageFullBuffer(frameIndex, &mData);
82 }
83} // namespace foray::util
Base class enforcing common interface for all classes wrapping a device resource.
Definition foray_managedresource.hpp:11
Helper class for organizing CPU -> GPU data synchronisation. In flight data is stored on host side,...
Definition foray_dualbuffer.hpp:18
Definition foray_managedubo.hpp:8
virtual void CmdCopyToDevice(uint32_t frameIndex, VkCommandBuffer cmdBuffer)
const core::ManagedBuffer * GetDeviceBuffer() const
Definition foray_managedubo.hpp:22
virtual void CmdPrepareForRead(VkCommandBuffer cmdBuffer, VkPipelineStageFlags2 dstStageMask, VkAccessFlags2 dstAccessMask) const
VkBuffer GetVkBuffer() const
Definition foray_managedubo.hpp:28
void Create(core::Context *context, VkDeviceSize size, uint32_t stageBufferCount=INFLIGHT_FRAME_COUNT)
DualBuffer mUboBuffer
Definition foray_managedubo.hpp:31
virtual void UpdateTo(uint32_t frameIndex)=0
virtual void Destroy() override
Destroy the resource.
virtual bool Exists() const override
Return true, if the managed resource is allocated.
size_t SizeOfUbo() const
Definition foray_managedubo.hpp:10
virtual VkBufferMemoryBarrier2 MakeBarrierPrepareForRead(VkPipelineStageFlags2 dstStageMask, VkAccessFlags2 dstAccessMask) const
VkDescriptorBufferInfo GetVkDescriptorBufferInfo() const
Template class for managing a UBO. For Host -> Device synchronization this utilises a DualBuffer.
Definition foray_managedubo.hpp:42
~ManagedUbo()
Definition foray_managedubo.hpp:73
virtual void UpdateTo(uint32_t frameIndex) override
Definition foray_managedubo.hpp:79
void Create(core::Context *context, std::string_view name)
Definition foray_managedubo.hpp:63
T_UBO mData
Definition foray_managedubo.hpp:44
ManagedUbo()
Definition foray_managedubo.hpp:58
#define FORAY_PROPERTY_R(member)
Getter+Setter shorthand for reference types.
Definition foray_basics.hpp:86
Definition foray_dualbuffer.hpp:5
constexpr uint32_t INFLIGHT_FRAME_COUNT
Inflight frame count is the amount of frames 'in flight' aka frames recorded on the host before waiti...
Definition foray_basics.hpp:35
Non owning context object.
Definition foray_context.hpp:16