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"
7namespace Foundation::RHI
8{
23 class VulkanDevice;
24
25 class VulkanBuffer : public RHIBuffer
26 {
27 protected:
30
31 vk::raii::Buffer mBuffer{nullptr};
32 void* mMapped{nullptr};
33
35
36 public:
37 // Buffer created by other means.
38 const bool mShared{false};
39
40 VulkanBuffer(VulkanDevice const& device, RHIBufferDesc const& desc);
41 // Thin wrapper for buffers created by swapchains or other external sources (e.g. aliasing)
42 VulkanBuffer(VulkanDevice const& device, RHIBufferDesc const& desc, vk::raii::Buffer&& buffer,
43 bool shared = true);
44 ~VulkanBuffer() override;
45
46 auto& GetVkBuffer() { return mBuffer; }
47
48 void* Map() override;
49 void Flush(size_t offset, size_t size) override;
50 void Unmap() override;
51
52 vk::DeviceAddress GetBufferAddress() const;
53 RHIBufferScopedHandle<RHIBuffer> CreateAliasedBuffer(RHIBufferDesc const& desc, size_t offset) override;
54 RHIBuffer* GetAliasedBuffer(Handle handle) const override;
55 void DestroyAliasedBuffer(Handle handle) override;
56 [[nodiscard]] size_t GetAllocationSize() const override;
57
58 void DebugSetObjectName(const char* name) override;
59 };
60
61 class VulkanTextureView;
63 {
64 protected:
67
68 vk::raii::Image mImage{nullptr};
69
72
73 public:
74 // Texture created by other means, e.g. swapchain or external source
75 const bool mShared{false};
76 VulkanTexture(VulkanDevice const& device, RHITextureDesc const& desc);
77 // Thin wrapper for textures created by swapchains or other external sources (e.g. aliasing)
78 VulkanTexture(VulkanDevice const& device, RHITextureDesc const& desc, vk::raii::Image&& image,
79 bool shared = true);
80 ~VulkanTexture() override;
81
82 auto& GetVkImage() const { return mImage; }
83
85 RHITextureView* GetImageView(Handle handle) const override;
86 void DestroyImageView(Handle handle) override;
87
89 RHITexture* GetAliasedTexture(Handle handle) const override;
90 void DestroyAliasedTexture(Handle handle) override;
91 [[nodiscard]] size_t GetAllocationSize() const override;
92
93 void DebugSetObjectName(const char* name) override;
94
95 auto const& GetDevice() const { return mDevice; }
96 };
97
99 {
100 protected:
101 vk::raii::ImageView mView{nullptr};
103
104 public:
105 VulkanTextureView(VulkanTexture& image, RHITextureViewDesc const& desc, vk::raii::ImageView&& view);
106
107 [[nodiscard]] RHITexture* GetTexture() const override { return &mImage; }
108
109 [[nodiscard]] auto const& GetVkImageView() const { return mView; }
110 [[nodiscard]] auto const& GetImage() const { return mImage; }
111
112 void DebugSetObjectName(const char* name) override;
113 };
114
116 {
117 protected:
119 vk::raii::AccelerationStructureKHR mAS{nullptr};
121 vk::DeviceAddress mASAddress{0};
122 public:
124
125 [[nodiscard]] auto& GetVkBuffer() const { return mBuffer->GetVkBuffer(); }
127 [[nodiscard]] vk::DeviceAddress GetVkAccelerationStructureAddress() const;
128 void DebugSetObjectName(const char* name) override;
129 };
130 vk::AccelerationStructureGeometryTrianglesDataKHR
131 vkAccelerationTriangleDataFromRHI(RHIAccelerationStructureGeometryTriangleData const& desc);
132 vk::AccelerationStructureGeometryAabbsDataKHR
133 vkAccelerationAABBDataFromRHI(RHIAccelerationStructureGeometryAABBData const& desc);
134 vk::AccelerationStructureBuildGeometryInfoKHR
135 vkAccelerationBuildGeoInfoFromRHI(RHIAccelerationStructureBuildDesc const& desc,
138 vk::AccelerationStructureBuildRangeInfoKHR
139 vkAccelerationBuildRangeInfoFromRHI(RHIAccelerationStructureBuildRangeInfo const& desc);
140} // namespace Foundation::RHI
Definition Resource.hpp:57
Thread-safe type-erased handle dereference facility for RHI Objects.
Definition Details.hpp:148
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:86
Definition Resource.hpp:238
Definition Resource.hpp:216
VulkanDevice const & mDevice
Definition Resource.hpp:118
vk::raii::AccelerationStructureKHR mAS
Definition Resource.hpp:119
auto & GetVkAccelerationStructure()
Definition Resource.hpp:126
auto & GetVkBuffer() const
Definition Resource.hpp:125
vk::DeviceAddress GetVkAccelerationStructureAddress() const
Definition Resource.cpp:329
VulkanBuffer * mBuffer
Definition Resource.hpp:120
vk::DeviceAddress mASAddress
Definition Resource.hpp:121
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:333
Definition Resource.hpp:26
size_t GetAllocationSize() const override
Definition Resource.cpp:143
vk::raii::Buffer mBuffer
Definition Resource.hpp:31
void Unmap() override
Releases or unmaps a previously mapped resource. Implementations MUST guarantee that Unmap() is calle...
Definition Resource.cpp:137
VmaAllocation mAllocation
Definition Resource.hpp:29
RHIBufferScopedHandle< RHIBuffer > CreateAliasedBuffer(RHIBufferDesc const &desc, size_t offset) override
Definition Resource.cpp:262
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:276
~VulkanBuffer() override
Definition Resource.cpp:107
VulkanDevice const & mDevice
Definition Resource.hpp:28
void * Map() override
Maps the entire buffer to the host memory. Alignment is implementation-defined. Implementations MUST ...
Definition Resource.cpp:123
RHIObjectPool< VulkanBuffer > mAliases
Definition Resource.hpp:34
RHIBuffer * GetAliasedBuffer(Handle handle) const override
Definition Resource.cpp:273
vk::DeviceAddress GetBufferAddress() const
Definition Resource.cpp:151
void * mMapped
Definition Resource.hpp:32
auto & GetVkBuffer()
Definition Resource.hpp:46
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:129
const bool mShared
Definition Resource.hpp:38
void DestroyAliasedBuffer(Handle handle) override
Definition Resource.cpp:274
Definition Device.hpp:122
Definition Resource.hpp:99
vk::raii::ImageView mView
Definition Resource.hpp:101
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:306
RHITexture * GetTexture() const override
Definition Resource.hpp:107
auto const & GetImage() const
Definition Resource.hpp:110
VulkanTexture & mImage
Definition Resource.hpp:102
auto const & GetVkImageView() const
Definition Resource.hpp:109
Definition Resource.hpp:63
size_t GetAllocationSize() const override
Definition Resource.cpp:203
RHITextureView * GetImageView(Handle handle) const override
Definition Resource.cpp:254
RHIObjectPool< VulkanTextureView > mViews
Definition Resource.hpp:71
RHITextureScopedHandle< RHITextureView > CreateTextureView(RHITextureViewDesc const &desc) override
Definition Resource.cpp:212
RHIObjectPool< VulkanTexture > mAliases
Definition Resource.hpp:70
VmaAllocation mAllocation
Definition Resource.hpp:66
auto & GetVkImage() const
Definition Resource.hpp:82
vk::raii::Image mImage
Definition Resource.hpp:68
void DestroyAliasedTexture(Handle handle) override
Definition Resource.cpp:296
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:298
RHITexture * GetAliasedTexture(Handle handle) const override
Definition Resource.cpp:295
RHITextureScopedHandle< RHITexture > CreateAliasedTexture(RHITextureDesc const &desc, size_t offset) override
Definition Resource.cpp:284
~VulkanTexture() override
Definition Resource.cpp:190
void DestroyImageView(Handle handle) override
Definition Resource.cpp:255
VulkanDevice const & mDevice
Definition Resource.hpp:65
const bool mShared
Definition Resource.hpp:75
auto const & GetDevice() const
Definition Resource.hpp:95
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:153
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:4
vk::AccelerationStructureBuildRangeInfoKHR vkAccelerationBuildRangeInfoFromRHI(RHIAccelerationStructureBuildRangeInfo const &desc)
Definition Resource.cpp:438
vk::AccelerationStructureBuildGeometryInfoKHR vkAccelerationBuildGeoInfoFromRHI(RHIAccelerationStructureBuildDesc const &desc, Vector< vk::AccelerationStructureGeometryKHR > &geometries, Vector< uint32_t > &primitiveCounts)
Definition Resource.cpp:372
VmaAllocationCreateFlags vmaAllocationFlagsFromRHIResourceHostAccess(RHIResourceHostAccess access)
Definition Resource.hpp:9
vk::AccelerationStructureGeometryTrianglesDataKHR vkAccelerationTriangleDataFromRHI(RHIAccelerationStructureGeometryTriangleData const &desc)
Definition Resource.cpp:341
uintptr_t Handle
Definition Details.hpp:8
vk::AccelerationStructureGeometryAabbsDataKHR vkAccelerationAABBDataFromRHI(RHIAccelerationStructureGeometryAABBData const &desc)
Definition Resource.cpp:357
RHIResourceHostAccess
Definition Common.hpp:233
Definition Resource.hpp:28
Definition Resource.hpp:142
Definition Resource.hpp:210