Nameless Engine
Loading...
Searching...
No Matches
GpuResourceManager.h
1#pragma once
2
3// Standard.
4#include <variant>
5#include <memory>
6#include <filesystem>
7#include <optional>
8#include <atomic>
9
10// Custom.
11#include "misc/Error.h"
12#include "render/general/resources/UploadBuffer.h"
13#include "material/TextureManager.h"
14#include "render/general/resources/shadow/ShadowMapManager.h"
15
16namespace ne {
17 class Renderer;
18 class GpuResource;
19
21 enum class ResourceUsageType {
22 VERTEX_BUFFER,
23 INDEX_BUFFER,
24 ARRAY_BUFFER,
25 OTHER
26 };
27
29 enum class ShaderReadWriteTextureResourceFormat {
30 R32G32_UINT,
31 // ONLY THE FOLLOWING FORMATS CAN BE ADDED HERE:
32 // 1. Formats that are supported as Vulkan storage images on most of the GPUs. Please, make sure you
33 // don't add new formats without checking Vulkan Hardware Database (take Intel(R) UHD
34 // Graphics 600 on Linux (!) for example, if it supports the format as storage image then it's
35 // OK to add it here).
36 // 2. Formats that have the same type in both Vulkan and DirectX.
37
38 SIZE, //< marks the size of this enum
39 };
40
43 // Only renderer should be allowed to create resource manager.
44 friend class Renderer;
45
46 // Creates shadow maps.
47 friend class ShadowMapManager;
48
49 // Modifies counter of alive GPU resources.
50 friend class GpuResource;
51
52 public:
53 GpuResourceManager() = delete;
54
55 virtual ~GpuResourceManager() = default;
56
62 virtual size_t getTotalVideoMemoryInMb() const = 0;
63
69 virtual size_t getUsedVideoMemoryInMb() const = 0;
70
79 virtual std::variant<std::unique_ptr<GpuResource>, Error> loadTextureFromDisk(
80 const std::string& sResourceName, const std::filesystem::path& pathToTextureFile) = 0;
81
110 virtual std::variant<std::unique_ptr<UploadBuffer>, Error> createResourceWithCpuWriteAccess(
111 const std::string& sResourceName,
112 size_t iElementSizeInBytes,
113 size_t iElementCount,
114 std::optional<bool> isUsedInShadersAsArrayResource) = 0;
115
141 virtual std::variant<std::unique_ptr<GpuResource>, Error> createResourceWithData(
142 const std::string& sResourceName,
143 const void* pBufferData,
144 size_t iElementSizeInBytes,
145 size_t iElementCount,
146 ResourceUsageType usage,
147 bool bIsShaderReadWriteResource) = 0;
148
164 virtual std::variant<std::unique_ptr<GpuResource>, Error> createResource(
165 const std::string& sResourceName,
166 size_t iElementSizeInBytes,
167 size_t iElementCount,
168 ResourceUsageType usage,
169 bool bIsShaderReadWriteResource) = 0;
170
181 virtual std::variant<std::unique_ptr<GpuResource>, Error> createShaderReadWriteTextureResource(
182 const std::string& sResourceName,
183 unsigned int iWidth,
184 unsigned int iHeight,
185 ShaderReadWriteTextureResourceFormat format) = 0;
186
192 virtual std::string getCurrentStateInfo() = 0;
193
201 Renderer* getRenderer() const;
202
211
220
227
228 protected:
236 static std::variant<std::unique_ptr<GpuResourceManager>, Error> create(Renderer* pRenderer);
237
247 static std::variant<std::unique_ptr<GpuResourceManager>, Error>
249
261 virtual std::variant<std::unique_ptr<GpuResource>, Error> createShadowMapTexture(
262 const std::string& sResourceName, unsigned int iTextureSize, bool bPointLightColorCubemap) = 0;
263
272
279 void resetTextureManager();
280
288
289 private:
291 std::unique_ptr<TextureManager> pTextureManager;
292
294 std::unique_ptr<ShadowMapManager> pShadowMapManager;
295
297 std::atomic<size_t> iAliveResourceCount{0};
298
300 Renderer* pRenderer = nullptr;
301 };
302} // namespace ne
Definition: Error.h:27
Definition: GpuResourceManager.h:42
virtual std::variant< std::unique_ptr< GpuResource >, Error > createResourceWithData(const std::string &sResourceName, const void *pBufferData, size_t iElementSizeInBytes, size_t iElementCount, ResourceUsageType usage, bool bIsShaderReadWriteResource)=0
static std::variant< std::unique_ptr< GpuResourceManager >, Error > createRendererSpecificManager(Renderer *pRenderer)
Definition: GpuResourceManager.cpp:21
void resetShadowMapManager()
Definition: GpuResourceManager.cpp:85
virtual size_t getUsedVideoMemoryInMb() const =0
std::unique_ptr< TextureManager > pTextureManager
Definition: GpuResourceManager.h:291
virtual std::variant< std::unique_ptr< UploadBuffer >, Error > createResourceWithCpuWriteAccess(const std::string &sResourceName, size_t iElementSizeInBytes, size_t iElementCount, std::optional< bool > isUsedInShadersAsArrayResource)=0
Renderer * getRenderer() const
Definition: GpuResourceManager.cpp:12
ShadowMapManager * getShadowMapManager() const
Definition: GpuResourceManager.cpp:16
TextureManager * getTextureManager() const
Definition: GpuResourceManager.cpp:14
virtual size_t getTotalVideoMemoryInMb() const =0
std::atomic< size_t > iAliveResourceCount
Definition: GpuResourceManager.h:297
static std::variant< std::unique_ptr< GpuResourceManager >, Error > create(Renderer *pRenderer)
Definition: GpuResourceManager.cpp:51
virtual std::variant< std::unique_ptr< GpuResource >, Error > createShadowMapTexture(const std::string &sResourceName, unsigned int iTextureSize, bool bPointLightColorCubemap)=0
void resetTextureManager()
Definition: GpuResourceManager.cpp:83
virtual std::variant< std::unique_ptr< GpuResource >, Error > loadTextureFromDisk(const std::string &sResourceName, const std::filesystem::path &pathToTextureFile)=0
std::unique_ptr< ShadowMapManager > pShadowMapManager
Definition: GpuResourceManager.h:294
size_t getTotalAliveResourceCount()
Definition: GpuResourceManager.cpp:18
virtual std::variant< std::unique_ptr< GpuResource >, Error > createShaderReadWriteTextureResource(const std::string &sResourceName, unsigned int iWidth, unsigned int iHeight, ShaderReadWriteTextureResourceFormat format)=0
virtual std::string getCurrentStateInfo()=0
virtual std::variant< std::unique_ptr< GpuResource >, Error > createResource(const std::string &sResourceName, size_t iElementSizeInBytes, size_t iElementCount, ResourceUsageType usage, bool bIsShaderReadWriteResource)=0
Renderer * pRenderer
Definition: GpuResourceManager.h:300
Definition: GpuResource.h:14
Definition: Renderer.h:39
Definition: ShadowMapManager.h:29
Definition: TextureManager.h:84