Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
foray_imagelayoutcache.hpp
Go to the documentation of this file.
1#pragma once
2#include "../foray_vulkan.hpp"
4#include <unordered_map>
5
6namespace foray::core {
13 {
14 public:
16 VkImageLayout Get(VkImage image) const;
18 VkImageLayout Get(const ManagedImage& image) const;
20 VkImageLayout Get(const ManagedImage* image) const;
21
23 void Set(VkImage image, VkImageLayout layout);
25 void Set(const ManagedImage& image, VkImageLayout layout);
27 void Set(const ManagedImage* image, VkImageLayout layout);
28
30 struct Barrier
31 {
32 VkAccessFlags SrcAccessMask = VkAccessFlagBits::VK_ACCESS_NONE;
33 VkAccessFlags DstAccessMask = VkAccessFlagBits::VK_ACCESS_NONE;
34 uint32_t SrcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
35 uint32_t DstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
36 VkImageLayout NewLayout;
37 VkImageSubresourceRange SubresourceRange = VkImageSubresourceRange{.aspectMask = VkImageAspectFlagBits::VK_IMAGE_ASPECT_COLOR_BIT, .levelCount = 1U, .layerCount = 1U};
38 };
39
41 struct Barrier2
42 {
43 VkPipelineStageFlags2 SrcStageMask = VK_PIPELINE_STAGE_2_NONE;
44 VkAccessFlags2 SrcAccessMask = VK_ACCESS_2_NONE;
45 VkPipelineStageFlags2 DstStageMask = VK_PIPELINE_STAGE_2_NONE;
46 VkAccessFlags2 DstAccessMask = VK_ACCESS_2_NONE;
47 uint32_t SrcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
48 uint32_t DstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
49 VkImageLayout NewLayout;
50 VkImageSubresourceRange SubresourceRange = VkImageSubresourceRange{.aspectMask = VkImageAspectFlagBits::VK_IMAGE_ASPECT_COLOR_BIT, .levelCount = 1U, .layerCount = 1U};
51 };
52
57 VkImageMemoryBarrier MakeBarrier(VkImage image, const Barrier& barrier);
61 VkImageMemoryBarrier MakeBarrier(const ManagedImage* image, const Barrier& barrier);
65 VkImageMemoryBarrier MakeBarrier(const ManagedImage& image, const Barrier& barrier);
70 VkImageMemoryBarrier2 MakeBarrier(VkImage image, const Barrier2& barrier);
74 VkImageMemoryBarrier2 MakeBarrier(const ManagedImage* image, const Barrier2& barrier);
78 VkImageMemoryBarrier2 MakeBarrier(const ManagedImage& image, const Barrier2& barrier);
79
88 void CmdBarrier(VkCommandBuffer cmdBuffer,
89 VkImage image,
90 const Barrier& barrier,
91 VkPipelineStageFlags srcStageMask,
92 VkPipelineStageFlags dstStageMask,
93 VkDependencyFlags depFlags = 0);
101 void CmdBarrier(VkCommandBuffer cmdBuffer,
102 const ManagedImage* image,
103 const Barrier& barrier,
104 VkPipelineStageFlags srcStageMask,
105 VkPipelineStageFlags dstStageMask,
106 VkDependencyFlags depFlags = 0);
114 void CmdBarrier(VkCommandBuffer cmdBuffer,
115 const ManagedImage& image,
116 const Barrier& barrier,
117 VkPipelineStageFlags srcStageMask,
118 VkPipelineStageFlags dstStageMask,
119 VkDependencyFlags depFlags = 0);
126 void CmdBarrier(VkCommandBuffer cmdBuffer, VkImage image, const Barrier2& barrier, VkDependencyFlags depFlags = 0);
132 void CmdBarrier(VkCommandBuffer cmdBuffer, const ManagedImage* image, const Barrier2& barrier, VkDependencyFlags depFlags = 0);
138 void CmdBarrier(VkCommandBuffer cmdBuffer, const ManagedImage& image, const Barrier2& barrier, VkDependencyFlags depFlags = 0);
139
140 protected:
141 std::unordered_map<VkImage, VkImageLayout> mLayoutCache;
142 };
143} // namespace foray::core
Tracks ImageLayouts over the course of a frame rendering process.
Definition foray_imagelayoutcache.hpp:13
void Set(const ManagedImage *image, VkImageLayout layout)
Set the cached layout of image.
VkImageMemoryBarrier2 MakeBarrier(const ManagedImage *image, const Barrier2 &barrier)
Constructs a VkImageMemoryBarrier2 struct and updates the stored layout.
VkImageLayout Get(const ManagedImage *image) const
Get the currently cached layout of image.
VkImageMemoryBarrier2 MakeBarrier(VkImage image, const Barrier2 &barrier)
Constructs a VkImageMemoryBarrier2 struct and updates the stored layout.
void CmdBarrier(VkCommandBuffer cmdBuffer, const ManagedImage &image, const Barrier &barrier, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags depFlags=0)
Writes a dedicated vkCmdPipelineBarrier command.
void CmdBarrier(VkCommandBuffer cmdBuffer, const ManagedImage &image, const Barrier2 &barrier, VkDependencyFlags depFlags=0)
Writes a dedicated vkCmdPipelineBarrier2 command.
VkImageMemoryBarrier MakeBarrier(const ManagedImage *image, const Barrier &barrier)
Constructs a VkImageMemoryBarrier struct and updates the stored layout.
void CmdBarrier(VkCommandBuffer cmdBuffer, VkImage image, const Barrier2 &barrier, VkDependencyFlags depFlags=0)
Writes a dedicated vkCmdPipelineBarrier2 command.
void CmdBarrier(VkCommandBuffer cmdBuffer, const ManagedImage *image, const Barrier &barrier, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags depFlags=0)
Writes a dedicated vkCmdPipelineBarrier command.
VkImageMemoryBarrier MakeBarrier(VkImage image, const Barrier &barrier)
Constructs a VkImageMemoryBarrier struct and updates the stored layout.
void Set(const ManagedImage &image, VkImageLayout layout)
Set the cached layout of image.
void CmdBarrier(VkCommandBuffer cmdBuffer, const ManagedImage *image, const Barrier2 &barrier, VkDependencyFlags depFlags=0)
Writes a dedicated vkCmdPipelineBarrier2 command.
VkImageMemoryBarrier2 MakeBarrier(const ManagedImage &image, const Barrier2 &barrier)
Constructs a VkImageMemoryBarrier2 struct and updates the stored layout.
VkImageMemoryBarrier MakeBarrier(const ManagedImage &image, const Barrier &barrier)
Constructs a VkImageMemoryBarrier struct and updates the stored layout.
void CmdBarrier(VkCommandBuffer cmdBuffer, VkImage image, const Barrier &barrier, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags depFlags=0)
Writes a dedicated vkCmdPipelineBarrier command.
VkImageLayout Get(const ManagedImage &image) const
Get the currently cached layout of image.
void Set(VkImage image, VkImageLayout layout)
Set the cached layout of image.
VkImageLayout Get(VkImage image) const
Get the currently cached layout of image identified by imageName.
std::unordered_map< VkImage, VkImageLayout > mLayoutCache
Definition foray_imagelayoutcache.hpp:141
Wraps allocation and lifetime functionality of VkImage.
Definition foray_managedimage.hpp:13
Definition foray_commandbuffer.hpp:6
See VkImageMemoryBarrier2.
Definition foray_imagelayoutcache.hpp:42
uint32_t SrcQueueFamilyIndex
Definition foray_imagelayoutcache.hpp:47
uint32_t DstQueueFamilyIndex
Definition foray_imagelayoutcache.hpp:48
VkPipelineStageFlags2 SrcStageMask
Definition foray_imagelayoutcache.hpp:43
VkAccessFlags2 DstAccessMask
Definition foray_imagelayoutcache.hpp:46
VkImageLayout NewLayout
Definition foray_imagelayoutcache.hpp:49
VkImageSubresourceRange SubresourceRange
Definition foray_imagelayoutcache.hpp:50
VkPipelineStageFlags2 DstStageMask
Definition foray_imagelayoutcache.hpp:45
VkAccessFlags2 SrcAccessMask
Definition foray_imagelayoutcache.hpp:44
See VkImageMemoryBarrier.
Definition foray_imagelayoutcache.hpp:31
VkImageSubresourceRange SubresourceRange
Definition foray_imagelayoutcache.hpp:37
uint32_t DstQueueFamilyIndex
Definition foray_imagelayoutcache.hpp:35
uint32_t SrcQueueFamilyIndex
Definition foray_imagelayoutcache.hpp:34
VkAccessFlags SrcAccessMask
Definition foray_imagelayoutcache.hpp:32
VkImageLayout NewLayout
Definition foray_imagelayoutcache.hpp:36
VkAccessFlags DstAccessMask
Definition foray_imagelayoutcache.hpp:33