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
57 void DebugSetObjectName(const char* name) override;
58 };
59
60 class VulkanTextureView;
62 {
63 protected:
66
67 vk::raii::Image mImage{nullptr};
68
71
72 public:
73 // Texture created by other means, e.g. swapchain or external source
74 const bool mShared{false};
75 VulkanTexture(VulkanDevice const& device, RHITextureDesc const& desc);
76 // Thin wrapper for textures created by swapchains or other external sources (e.g. aliasing)
77 VulkanTexture(VulkanDevice const& device, RHITextureDesc const& desc, vk::raii::Image&& image,
78 bool shared = true);
79 ~VulkanTexture() override;
80
81 auto& GetVkImage() const { return mImage; }
82
84 RHITextureView* GetImageView(Handle handle) const override;
85 void DestroyImageView(Handle handle) override;
86
88 RHITexture* GetAliasedTexture(Handle handle) const override;
89 void DestroyAliasedTexture(Handle handle) override;
90
91 void DebugSetObjectName(const char* name) override;
92
93 auto const& GetDevice() const { return mDevice; }
94 };
95
97 {
98 protected:
99 vk::raii::ImageView mView{nullptr};
101
102 public:
103 VulkanTextureView(VulkanTexture& image, RHITextureViewDesc const& desc, vk::raii::ImageView&& view);
104
105 [[nodiscard]] RHITexture* GetTexture() const override { return &mImage; }
106
107 [[nodiscard]] auto const& GetVkImageView() const { return mView; }
108 [[nodiscard]] auto const& GetImage() const { return mImage; }
109
110 void DebugSetObjectName(const char* name) override;
111 };
112
114 {
115 protected:
117 vk::raii::AccelerationStructureKHR mAS{nullptr};
119 public:
121
122 [[nodiscard]] auto& GetVkBuffer() const { return mBuffer->GetVkBuffer(); }
124 [[nodiscard]] vk::DeviceAddress GetVkAccelerationStructureAddress() const;
125 void DebugSetObjectName(const char* name) override;
126 };
127 vk::AccelerationStructureGeometryTrianglesDataKHR
128 vkAccelerationTriangleDataFromRHI(RHIAccelerationStructureGeometryTriangleData const& desc);
129 vk::AccelerationStructureBuildGeometryInfoKHR
130 vkAccelerationBuildGeoInfoFromRHI(RHIAccelerationStructureBuildDesc const& desc,
133 vk::AccelerationStructureBuildRangeInfoKHR
134 vkAccelerationBuildRangeInfoFromRHI(RHIAccelerationStructureBuildRangeInfo const& desc);
135} // namespace Foundation::RHI
Definition Resource.hpp:57
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:211
Definition Resource.hpp:190
VulkanDevice const & mDevice
Definition Resource.hpp:116
vk::raii::AccelerationStructureKHR mAS
Definition Resource.hpp:117
auto & GetVkAccelerationStructure()
Definition Resource.hpp:123
auto & GetVkBuffer() const
Definition Resource.hpp:122
vk::DeviceAddress GetVkAccelerationStructureAddress() const
Definition Resource.cpp:305
VulkanBuffer * mBuffer
Definition Resource.hpp:118
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:309
Definition Resource.hpp:26
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:135
VmaAllocation mAllocation
Definition Resource.hpp:29
RHIBufferScopedHandle< RHIBuffer > CreateAliasedBuffer(RHIBufferDesc const &desc, size_t offset) override
Definition Resource.cpp:243
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:255
~VulkanBuffer() override
Definition Resource.cpp:105
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:121
RHIObjectPool< VulkanBuffer > mAliases
Definition Resource.hpp:34
RHIBuffer * GetAliasedBuffer(Handle handle) const override
Definition Resource.cpp:252
vk::DeviceAddress GetBufferAddress() const
Definition Resource.cpp:140
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:127
const bool mShared
Definition Resource.hpp:38
void DestroyAliasedBuffer(Handle handle) override
Definition Resource.cpp:253
Definition Device.hpp:104
Definition Resource.hpp:97
vk::raii::ImageView mView
Definition Resource.hpp:99
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:283
RHITexture * GetTexture() const override
Definition Resource.hpp:105
auto const & GetImage() const
Definition Resource.hpp:108
VulkanTexture & mImage
Definition Resource.hpp:100
auto const & GetVkImageView() const
Definition Resource.hpp:107
Definition Resource.hpp:62
RHITextureView * GetImageView(Handle handle) const override
Definition Resource.cpp:235
RHIObjectPool< VulkanTextureView > mViews
Definition Resource.hpp:70
RHITextureScopedHandle< RHITextureView > CreateTextureView(RHITextureViewDesc const &desc) override
Definition Resource.cpp:193
RHIObjectPool< VulkanTexture > mAliases
Definition Resource.hpp:69
VmaAllocation mAllocation
Definition Resource.hpp:65
auto & GetVkImage() const
Definition Resource.hpp:81
vk::raii::Image mImage
Definition Resource.hpp:67
void DestroyAliasedTexture(Handle handle) override
Definition Resource.cpp:273
void DebugSetObjectName(const char *name) override
Definition Resource.cpp:275
RHITexture * GetAliasedTexture(Handle handle) const override
Definition Resource.cpp:272
RHITextureScopedHandle< RHITexture > CreateAliasedTexture(RHITextureDesc const &desc, size_t offset) override
Definition Resource.cpp:263
~VulkanTexture() override
Definition Resource.cpp:179
void DestroyImageView(Handle handle) override
Definition Resource.cpp:236
VulkanDevice const & mDevice
Definition Resource.hpp:64
const bool mShared
Definition Resource.hpp:74
auto const & GetDevice() const
Definition Resource.hpp:93
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
vk::AccelerationStructureBuildRangeInfoKHR vkAccelerationBuildRangeInfoFromRHI(RHIAccelerationStructureBuildRangeInfo const &desc)
Definition Resource.cpp:386
vk::AccelerationStructureBuildGeometryInfoKHR vkAccelerationBuildGeoInfoFromRHI(RHIAccelerationStructureBuildDesc const &desc, Vector< vk::AccelerationStructureGeometryKHR > &geometries, Vector< uint32_t > &primitiveCounts)
Definition Resource.cpp:328
VmaAllocationCreateFlags vmaAllocationFlagsFromRHIResourceHostAccess(RHIResourceHostAccess access)
Definition Resource.hpp:9
vk::AccelerationStructureGeometryTrianglesDataKHR vkAccelerationTriangleDataFromRHI(RHIAccelerationStructureGeometryTriangleData const &desc)
Definition Resource.cpp:312
uintptr_t Handle
Definition Details.hpp:8
RHIResourceHostAccess
Definition Common.hpp:177
Definition Resource.hpp:28
Definition Resource.hpp:116
Definition Resource.hpp:184