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
24 vk::raii::Buffer mBuffer{ nullptr };
25 void* mMapped{ 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
60 public:
61 // Texture created by other means, e.g. swapchain or external source
62 const bool mShared{ false };
63 VulkanTexture(VulkanDevice const& device, RHITextureDesc const& desc);
64 // Thin wrapper for textures created by swapchains or other external sources (e.g. aliasing)
65 VulkanTexture(VulkanDevice const& device, RHITextureDesc const& desc, vk::raii::Image&& image, bool shared = true);
66 ~VulkanTexture() override;
67
68 auto& GetVkImage() const { return mImage; }
69
71 RHITextureView* GetImageView(Handle handle) const override;
72 void DestroyImageView(Handle handle) override;
73
75 RHITexture* GetAliasedTexture(Handle handle) const override;
76 void DestroyAliasedTexture(Handle handle) override;
77
78 void DebugSetObjectName(const char* name) override;
79
80 auto const& GetDevice() const { return mDevice; }
81 };
82
84 protected:
85 vk::raii::ImageView mView{ nullptr };
87 public:
88 VulkanTextureView(VulkanTexture& image, RHITextureViewDesc const& desc, vk::raii::ImageView&& view);
89
90 [[nodiscard]] RHITexture* GetTexture() const override { return &mImage; }
91
92 [[nodiscard]] auto const& GetVkImageView() const { return mView; }
93 [[nodiscard]] auto const& GetImage() const { return mImage; }
94
95 void DebugSetObjectName(const char* name) override;
96 };
97
99 {
100 protected:
102 vk::raii::AccelerationStructureKHR mAS{nullptr};
103 public:
105
106 [[nodiscard]] auto const& GetVkAS() const { return mAS; }
107
108 void DebugSetObjectName(const char* name) override;
109 }
110}
Definition Resource.hpp:48
Thread-safe type-erased handle dereference facility for RHI Objects.
Definition Details.hpp:149
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:86
Definition Resource.hpp:188
Definition Resource.hpp:169
VulkanDevice const & mDevice
Definition Resource.hpp:101
vk::raii::AccelerationStructureKHR mAS
Definition Resource.hpp:102
auto const & GetVkAS() const
Definition Resource.hpp:106
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:287
Definition Resource.hpp:19
vk::raii::Buffer mBuffer
Definition Resource.hpp:24
void Unmap() override
Releases or unmaps a previously mapped resource. Implementations MUST guarantee that Unmap() is calle...
Definition Resource.cpp:126
VmaAllocation mAllocation
Definition Resource.hpp:22
RHIBufferScopedHandle< RHIBuffer > CreateAliasedBuffer(RHIBufferDesc const &desc, size_t offset) override
Definition Resource.cpp:220
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:238
~VulkanBuffer() override
Definition Resource.cpp:101
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:114
RHIObjectPool< VulkanBuffer > mAliases
Definition Resource.hpp:27
RHIBuffer * GetAliasedBuffer(Handle handle) const override
Definition Resource.cpp:231
void * mMapped
Definition Resource.hpp:25
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:119
const bool mShared
Definition Resource.hpp:30
void DestroyAliasedBuffer(Handle handle) override
Definition Resource.cpp:234
Definition Device.hpp:94
Definition Resource.hpp:83
vk::raii::ImageView mView
Definition Resource.hpp:85
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:274
RHITexture * GetTexture() const override
Definition Resource.hpp:90
auto const & GetImage() const
Definition Resource.hpp:93
VulkanTexture & mImage
Definition Resource.hpp:86
auto const & GetVkImageView() const
Definition Resource.hpp:92
Definition Resource.hpp:51
RHITextureView * GetImageView(Handle handle) const override
Definition Resource.cpp:209
RHIObjectPool< VulkanTextureView > mViews
Definition Resource.hpp:59
RHITextureScopedHandle< RHITextureView > CreateTextureView(RHITextureViewDesc const &desc) override
Definition Resource.cpp:178
RHIObjectPool< VulkanTexture > mAliases
Definition Resource.hpp:58
VmaAllocation mAllocation
Definition Resource.hpp:54
auto & GetVkImage() const
Definition Resource.hpp:68
vk::raii::Image mImage
Definition Resource.hpp:56
void DestroyAliasedTexture(Handle handle) override
Definition Resource.cpp:261
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:265
RHITexture * GetAliasedTexture(Handle handle) const override
Definition Resource.cpp:258
RHITextureScopedHandle< RHITexture > CreateAliasedTexture(RHITextureDesc const &desc, size_t offset) override
Definition Resource.cpp:247
~VulkanTexture() override
Definition Resource.cpp:167
void DestroyImageView(Handle handle) override
Definition Resource.cpp:212
VulkanDevice const & mDevice
Definition Resource.hpp:53
const bool mShared
Definition Resource.hpp:62
auto const & GetDevice() const
Definition Resource.hpp:80
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:149
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:4
VmaAllocationCreateFlags vmaAllocationFlagsFromRHIResourceHostAccess(RHIResourceHostAccess access)
Definition Resource.hpp:7
uintptr_t Handle
Definition Details.hpp:8
RHIResourceHostAccess
Definition Common.hpp:167
Definition Resource.hpp:24
Definition Resource.hpp:103
Definition Resource.hpp:164