Foundation
Loading...
Searching...
No Matches
Resource.hpp
Go to the documentation of this file.
1#pragma once
3#include <vk_mem_alloc.h>
4
5#include "Common.hpp"
6namespace Foundation::RHI {
17 class VulkanDevice;
18
19 class VulkanBuffer : public RHIBuffer {
20 protected:
23 void* mMapped{ nullptr };
24
25 vk::raii::Buffer mBuffer{ nullptr };
26
28 public:
29 // Buffer created by other means.
30 const bool mShared{ false };
31
32 VulkanBuffer(VulkanDevice const& device, RHIBufferDesc const& desc);
33 // Thin wrapper for buffers created by swapchains or other external sources (e.g. aliasing)
34 VulkanBuffer(VulkanDevice const& device, RHIBufferDesc const& desc, vk::raii::Buffer&& buffer, bool shared = true);
35 ~VulkanBuffer() override;
36
37 auto& GetVkBuffer() { return mBuffer; }
38
39 void* Map() override;
40 void Flush(size_t offset, size_t size) override;
41 void Unmap() override;
42
43 RHIBufferScopedHandle<RHIBuffer> CreateAliasedBuffer(RHIBufferDesc const& desc, size_t offset) override;
44 RHIBuffer* GetAliasedBuffer(Handle handle) const override;
45 void DestroyAliasedBuffer(Handle handle) override;
46
47 void DebugSetObjectName(const char* name) override;
48 };
49
50 class VulkanTextureView;
51 class VulkanTexture : public RHITexture {
52 protected:
55
56 vk::raii::Image mImage{ nullptr };
57 void* mMapped{ nullptr };
58
61 public:
62 // Texture created by other means, e.g. swapchain or external source
63 const bool mShared{ false };
65 // Thin wrapper for textures created by swapchains or other external sources (e.g. aliasing)
66 VulkanTexture(VulkanDevice const& device, RHITextureDesc const& desc, vk::raii::Image&& image, bool shared = true);
67 ~VulkanTexture() override;
68
69 auto& GetVkImage() const { return mImage; }
70
71 void* Map() override;
72 void Flush(size_t offset, size_t size) override;
73 void Unmap() override;
74
76 RHITextureView* GetImageView(Handle handle) const override;
77 void DestroyImageView(Handle handle) override;
78
80 RHITexture* GetAliasedTexture(Handle handle) const override;
81 void DestroyAliasedTexture(Handle handle) override;
82
83 void DebugSetObjectName(const char* name) override;
84
85 auto const& GetDevice() const { return mDevice; }
86 };
87
89 protected:
90 vk::raii::ImageView mView{ nullptr };
92 public:
93 VulkanTextureView(VulkanTexture& image, RHITextureViewDesc const& desc, vk::raii::ImageView&& view);
94
95 [[nodiscard]] RHITexture* GetTexture() const override { return &mImage; }
96
97 [[nodiscard]] auto const& GetVkImageView() const { return mView; }
98 [[nodiscard]] auto const& GetImage() const { return mImage; }
99
100 void DebugSetObjectName(const char* name) override;
101 };
102}
Definition Resource.hpp:30
Definition Resource.hpp:169
Definition Resource.hpp:146
Definition Resource.hpp:19
vk::raii::Buffer mBuffer
Definition Resource.hpp:25
void Unmap() override
Releases or unmaps a previously mapped resource. Implementations MUST guarantee that Unmap() is calle...
Definition Resource.cpp:91
VmaAllocation mAllocation
Definition Resource.hpp:22
RHIBufferScopedHandle< RHIBuffer > CreateAliasedBuffer(RHIBufferDesc const &desc, size_t offset) override
Definition Resource.cpp:194
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:212
~VulkanBuffer() override
Definition Resource.cpp:66
VulkanDevice const & mDevice
Definition Resource.hpp:21
void * Map() override
Maps the entire buffer to the host memory. Alignment is implementation-defined. Implementations MUST ...
Definition Resource.cpp:79
RHIObjectPool< VulkanBuffer > mAliases
Definition Resource.hpp:27
RHIBuffer * GetAliasedBuffer(Handle handle) const override
Definition Resource.cpp:205
void * mMapped
Definition Resource.hpp:23
auto & GetVkBuffer()
Definition Resource.hpp:37
void Flush(size_t offset, size_t size) override
Flushes the mapped region to the device. Depending on the implementation, this may be a no-op.
Definition Resource.cpp:84
const bool mShared
Definition Resource.hpp:30
void DestroyAliasedBuffer(Handle handle) override
Definition Resource.cpp:208
Definition Device.hpp:80
Definition Resource.hpp:88
vk::raii::ImageView mView
Definition Resource.hpp:90
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:248
RHITexture * GetTexture() const override
Definition Resource.hpp:95
auto const & GetImage() const
Definition Resource.hpp:98
VulkanTexture & mImage
Definition Resource.hpp:91
auto const & GetVkImageView() const
Definition Resource.hpp:97
Definition Resource.hpp:51
void * mMapped
Definition Resource.hpp:57
RHITextureView * GetImageView(Handle handle) const override
Definition Resource.cpp:183
RHIObjectPool< VulkanTextureView > mViews
Definition Resource.hpp:60
RHITextureScopedHandle< RHITextureView > CreateTextureView(RHITextureViewDesc const &desc) override
Definition Resource.cpp:152
RHIObjectPool< VulkanTexture > mAliases
Definition Resource.hpp:59
VmaAllocation mAllocation
Definition Resource.hpp:54
void Flush(size_t offset, size_t size) override
Definition Resource.cpp:141
auto & GetVkImage() const
Definition Resource.hpp:69
vk::raii::Image mImage
Definition Resource.hpp:56
void * Map() override
Definition Resource.cpp:136
void DestroyAliasedTexture(Handle handle) override
Definition Resource.cpp:235
void Unmap() override
Definition Resource.cpp:148
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:239
RHITexture * GetAliasedTexture(Handle handle) const override
Definition Resource.cpp:232
RHITextureScopedHandle< RHITexture > CreateAliasedTexture(RHITextureDesc const &desc, size_t offset) override
Definition Resource.cpp:221
~VulkanTexture() override
Definition Resource.cpp:126
void DestroyImageView(Handle handle) override
Definition Resource.cpp:186
VulkanDevice const & mDevice
Definition Resource.hpp:53
const bool mShared
Definition Resource.hpp:63
auto const & GetDevice() const
Definition Resource.hpp:85
std::unique_ptr< T, StlDeleter< T > > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:161
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:5
VmaAllocationCreateFlags vmaAllocationFlagsFromRHIResourceHostAccess(RHIResourceHostAccess access)
Definition Resource.hpp:7
uint64_t Handle
Definition Details.hpp:9
RHIResourceHostAccess
Definition Common.hpp:110
Definition Resource.hpp:21
Definition Resource.hpp:79
Definition Resource.hpp:141