Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
foray_managedimage.hpp
Go to the documentation of this file.
1#pragma once
2#include "../foray_basics.hpp"
3#include "../foray_vulkan.hpp"
5#include "foray_context.hpp"
7#include <optional>
8
9namespace foray::core {
10
12 class ManagedImage : public VulkanResource<VkObjectType::VK_OBJECT_TYPE_IMAGE>
13 {
14 public:
15 inline ManagedImage() : VulkanResource("Unnamed Image") {}
16 inline virtual ~ManagedImage() { Destroy(); }
17
20 {
22 VkImageCreateInfo ImageCI{};
24 bool CreateImageView = true;
26 VkImageViewCreateInfo ImageViewCI{};
28 VmaAllocationCreateInfo AllocCI{};
30 std::string Name{"Unnamed Image"};
31
39 CreateInfo(VkImageUsageFlags usage, VkFormat format, const VkExtent2D& extent, std::string_view name = "Unnamed Image");
40 };
41
44 virtual void Create(Context* context, const CreateInfo& createInfo);
45
47 virtual void Resize(const VkExtent3D& newextent);
49 virtual void Resize(const VkExtent2D& newextent);
50
53 virtual void Create(Context* context, VkImageUsageFlags usage, VkFormat format, const VkExtent2D& extent, std::string_view name = "Unnamed Image");
54
57 {
58 VkPipelineStageFlags SrcStageMask{VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT};
59 VkAccessFlags SrcAccessMask{0};
60 VkPipelineStageFlags DstStageMask{VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT};
61 VkAccessFlags DstAccessMask{0};
62 VkImageLayout OldLayout{VkImageLayout::VK_IMAGE_LAYOUT_UNDEFINED};
63 VkImageLayout NewLayout{VkImageLayout::VK_IMAGE_LAYOUT_UNDEFINED};
64 VkImageAspectFlags AspectMask{VK_IMAGE_ASPECT_COLOR_BIT};
65 };
66
69 virtual void TransitionLayout(ManagedImage::QuickTransition& quickTransition, VkCommandBuffer commandBuffer = VK_NULL_HANDLE);
70
77 void WriteDeviceLocalData(const void* data, size_t size, VkImageLayout layoutAfterWrite, VkBufferImageCopy& imageCopy);
78 void WriteDeviceLocalData(HostSyncCommandBuffer& cmdBuffer, const void* data, size_t size, VkImageLayout layoutAfterWrite, VkBufferImageCopy& imageCopy);
79
82 void WriteDeviceLocalData(const void* data, size_t size, VkImageLayout layoutAfterWrite);
83 void WriteDeviceLocalData(HostSyncCommandBuffer& cmdBuffer, const void* data, size_t size, VkImageLayout layoutAfterWrite);
84
85 virtual void Destroy() override;
86 virtual bool Exists() const override { return mAllocation; }
87
88 FORAY_GETTER_CR(CreateInfo)
89 FORAY_GETTER_V(Image)
90 FORAY_GETTER_V(ImageView)
91 FORAY_GETTER_V(Allocation)
92 FORAY_GETTER_CR(AllocInfo)
93 FORAY_GETTER_V(Format)
94 FORAY_GETTER_CR(Extent3D)
95 inline VkExtent2D GetExtent2D() const { return VkExtent2D{mExtent3D.width, mExtent3D.height}; }
96
97 virtual void SetName(std::string_view name) override;
98
99 VkSampleCountFlagBits GetSampleCount() const { return mCreateInfo.ImageCI.samples; }
100
101 protected:
104 VkImage mImage{};
105 VkImageView mImageView{};
106 VkFormat mFormat{};
107 VmaAllocation mAllocation{};
108 VmaAllocationInfo mAllocInfo{};
109 VkDeviceSize mSize{};
110 VkExtent3D mExtent3D{};
111
112 void CheckImageFormatSupport(const CreateInfo& createInfo);
114 };
115} // namespace foray::core
Extension of the commandbuffer wrapper for temporary host synchronized command buffer execution.
Definition foray_commandbuffer.hpp:41
Wraps allocation and lifetime functionality of VkImage.
Definition foray_managedimage.hpp:13
VkImageView mImageView
Definition foray_managedimage.hpp:105
virtual void Create(Context *context, const CreateInfo &createInfo)
Allocates image, creates image, creates imageview.
Context * mContext
Definition foray_managedimage.hpp:102
virtual void SetName(std::string_view name) override
Set a custom name for the object.
CreateInfo mCreateInfo
Definition foray_managedimage.hpp:103
VmaAllocationInfo mAllocInfo
Definition foray_managedimage.hpp:108
virtual bool Exists() const override
Return true, if the managed resource is allocated.
Definition foray_managedimage.hpp:86
VkExtent2D GetExtent2D() const
Definition foray_managedimage.hpp:95
VkExtent3D mExtent3D
Definition foray_managedimage.hpp:110
virtual void Resize(const VkExtent2D &newextent)
Uses stored create info to recreate vulkan image with a new size.
VkFormat mFormat
Definition foray_managedimage.hpp:106
void WriteDeviceLocalData(const void *data, size_t size, VkImageLayout layoutAfterWrite, VkBufferImageCopy &imageCopy)
Creates a staging buffer, writes staging buffer, transitions image layout to transfer destination opt...
virtual ~ManagedImage()
Definition foray_managedimage.hpp:16
VmaAllocation mAllocation
Definition foray_managedimage.hpp:107
void WriteDeviceLocalData(HostSyncCommandBuffer &cmdBuffer, const void *data, size_t size, VkImageLayout layoutAfterWrite, VkBufferImageCopy &imageCopy)
VkSampleCountFlagBits GetSampleCount() const
Definition foray_managedimage.hpp:99
void WriteDeviceLocalData(const void *data, size_t size, VkImageLayout layoutAfterWrite)
See other overload for description. Omits image copy region and assumes a set of default values to wr...
virtual void Resize(const VkExtent3D &newextent)
Uses stored create info to recreate vulkan image with a new size.
virtual void Destroy() override
Destroy the resource.
void CheckImageFormatSupport(const CreateInfo &createInfo)
VkDeviceSize mSize
Definition foray_managedimage.hpp:109
void WriteDeviceLocalData(HostSyncCommandBuffer &cmdBuffer, const void *data, size_t size, VkImageLayout layoutAfterWrite)
virtual void TransitionLayout(ManagedImage::QuickTransition &quickTransition, VkCommandBuffer commandBuffer=VK_NULL_HANDLE)
Simple layout transition.
ManagedImage()
Definition foray_managedimage.hpp:15
virtual void Create(Context *context, VkImageUsageFlags usage, VkFormat format, const VkExtent2D &extent, std::string_view name="Unnamed Image")
Shorthand using common values. See CreateInfo for information.
VkImage mImage
Definition foray_managedimage.hpp:104
ManagedResource variant which automates GetTypeName() overloading by returning a stringified version ...
Definition foray_managedresource.hpp:59
#define FORAY_GETTER_V(member)
Return value.
Definition foray_basics.hpp:39
#define FORAY_GETTER_CR(member)
Return constant reference.
Definition foray_basics.hpp:60
Definition foray_commandbuffer.hpp:6
Non owning context object.
Definition foray_context.hpp:16
Combines all structs used for initialization.
Definition foray_managedimage.hpp:20
VkImageViewCreateInfo ImageViewCI
Vulkan ImageView CreateInfo.
Definition foray_managedimage.hpp:26
bool CreateImageView
If set to true, image view is created.
Definition foray_managedimage.hpp:24
CreateInfo()
Initiliazes .sType fields, chooses common defaults for everything else.
CreateInfo(VkImageUsageFlags usage, VkFormat format, const VkExtent2D &extent, std::string_view name="Unnamed Image")
Shorthand for initializing commonly set values.
VmaAllocationCreateInfo AllocCI
Vma Allocation CreateInfo.
Definition foray_managedimage.hpp:28
std::string Name
Debug object name.
Definition foray_managedimage.hpp:30
VkImageCreateInfo ImageCI
Vulkan Image CreateInfo.
Definition foray_managedimage.hpp:22
Helper struct translated to a VkImageMemoryBarrier2 struct for one-time layout transitions.
Definition foray_managedimage.hpp:57
VkPipelineStageFlags DstStageMask
Definition foray_managedimage.hpp:60
VkImageLayout OldLayout
Definition foray_managedimage.hpp:62
VkImageLayout NewLayout
Definition foray_managedimage.hpp:63
VkPipelineStageFlags SrcStageMask
Definition foray_managedimage.hpp:58
VkImageAspectFlags AspectMask
Definition foray_managedimage.hpp:64
VkAccessFlags DstAccessMask
Definition foray_managedimage.hpp:61
VkAccessFlags SrcAccessMask
Definition foray_managedimage.hpp:59