Foundation
Loading...
Searching...
No Matches
Application.hpp
Go to the documentation of this file.
1#pragma once
3
4#include "Common.hpp"
5#include "Device.hpp"
6namespace Foundation::RHI {
7 extern "C" {
8 // Custom allocation callbacks for Vulkan on CPU
9 void* vkCustomCpuAllocation(Core::Allocator* alloc, size_t size, size_t alignment, vk::SystemAllocationScope allocationScope);
10 void* vkCustomCpuReallocation(Core::Allocator* alloc, void* pOriginal, size_t size, size_t alignment, vk::SystemAllocationScope allocationScope);
11 void vkCustomCpuFree(Core::Allocator* alloc, void* pMemory);
12 inline vk::AllocationCallbacks CreateVulkanCpuAllocationCallbacks(Core::Allocator* alloc) {
13 return vk::AllocationCallbacks{
14 .pUserData = alloc,
15 .pfnAllocation = reinterpret_cast<vk::PFN_AllocationFunction>(vkCustomCpuAllocation),
16 .pfnReallocation = reinterpret_cast<vk::PFN_ReallocationFunction>(vkCustomCpuReallocation),
17 .pfnFree = reinterpret_cast<vk::PFN_FreeFunction>(vkCustomCpuFree),
18 .pfnInternalAllocation = nullptr,
19 .pfnInternalFree = nullptr
20 };
21 }
22 }
23 class VulkanDevice;
25 vk::AllocationCallbacks mVkAllocatorCpuCallbacks;
26 vk::raii::PhysicalDevices mPhysicalDevices{ nullptr };
27 vk::raii::Instance mInstance{ nullptr };
29
31 vk::raii::DebugUtilsMessengerEXT mDebugHandler{ nullptr };
32
34 public:
36
37 const vk::raii::Context mContext;
39
40 VulkanApplication(Allocator* allocator, const char* appName = "Vulkan RHI", const char* engineName = "Foundation", const uint32_t apiVersion = VK_API_VERSION_1_3);
42
44 RHIDevice* GetDevice(Handle handle) const override;
45 void DestroyDevice(Handle handle) override;
46
47 Allocator* GetAllocator() const { return mAllocator; }
48 vk::AllocationCallbacks const& GetVkAllocatorCallbacks() const { return mVkAllocatorCpuCallbacks; }
49 auto const& GetVkInstance() const { return mInstance; }
50 };
51}
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
Class representing a window for the platform.
Definition Application.hpp:15
The root object of everything RHI. Implementation of this class inherently defines the RHI backend.
Definition Application.hpp:11
Definition Device.hpp:131
Definition Application.hpp:24
vk::raii::PhysicalDevices mPhysicalDevices
Definition Application.hpp:26
Vector< RHIDevice::DeviceDesc > mDevices
Definition Application.hpp:30
RHIObjectPool mStorage
Definition Application.hpp:33
Allocator * GetAllocator() const
Definition Application.hpp:47
const vk::raii::Context mContext
Definition Application.hpp:37
vk::AllocationCallbacks mVkAllocatorCpuCallbacks
Definition Application.hpp:25
vk::raii::DebugUtilsMessengerEXT mDebugHandler
Definition Application.hpp:31
RHIDevice * GetDevice(Handle handle) const override
Definition Application.cpp:106
Allocator * mAllocator
Definition Application.hpp:28
vk::AllocationCallbacks const & GetVkAllocatorCallbacks() const
Definition Application.hpp:48
const uint32_t mVulkanApiVersion
Definition Application.hpp:38
Span< const RHIDevice::DeviceDesc > EnumerateDevices() const override
Definition Application.cpp:97
vk::raii::Instance mInstance
Definition Application.hpp:27
const String mName
Definition Application.hpp:35
void DestroyDevice(Handle handle) override
Definition Application.cpp:109
auto const & GetVkInstance() const
Definition Application.hpp:49
RHIApplicationScopedObjectHandle< RHIDevice > CreateDevice(RHIDevice::DeviceDesc const &desc, Native::NativeWindow *window=nullptr) override
Definition Application.cpp:101
std::basic_string< char > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:141
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
uint64_t Handle
Definition Details.hpp:9
void * vkCustomCpuReallocation(Allocator *alloc, void *pOriginal, size_t size, size_t alignment, vk::SystemAllocationScope allocationScope)
Definition Application.cpp:121
void * vkCustomCpuAllocation(Allocator *alloc, size_t size, size_t alignment, vk::SystemAllocationScope allocationScope)
Definition Application.cpp:115
void vkCustomCpuFree(Allocator *alloc, void *pMemory)
Definition Application.cpp:127
vk::AllocationCallbacks CreateVulkanCpuAllocationCallbacks(Core::Allocator *alloc)
Definition Application.hpp:12