Foundation
Loading...
Searching...
No Matches
Application.hpp
Go to the documentation of this file.
1#pragma once
2#include <SDL3/SDL.h>
4
5#include "Common.hpp"
6#include "Device.hpp"
7namespace Foundation::RHI {
8 extern "C" {
9 // Custom allocation callbacks for Vulkan on CPU
10 void* vkCustomCpuAllocation(Allocator* alloc, size_t size, size_t alignment, vk::SystemAllocationScope allocationScope);
11 void* vkCustomCpuReallocation(Allocator* alloc, void* pOriginal, size_t size, size_t alignment, vk::SystemAllocationScope allocationScope);
12 void vkCustomCpuFree(Allocator* alloc, void* pMemory);
13 }
14 vk::AllocationCallbacks vkCreateVulkanCpuAllocationCallbacks(Allocator* alloc);
15 class VulkanDevice;
17 vk::AllocationCallbacks mVkAllocatorCpuCallbacks;
18 vk::raii::PhysicalDevices mPhysicalDevices{ nullptr };
19 vk::raii::Instance mInstance{ nullptr };
21
23 vk::raii::DebugUtilsMessengerEXT mDebugHandler{ nullptr };
24
26 public:
28
29 const vk::raii::Context mContext;
31
32 VulkanApplication(Allocator* allocator, const char* appName = "Vulkan RHI", const char* engineName = "Foundation", uint32_t apiVersion = VK_API_VERSION_1_3);
34
40 RHIDevice* GetDevice(Handle handle) const override;
41 void DestroyDevice(Handle handle) override;
42
43 Allocator* GetAllocator() const { return mAllocator; }
44 vk::AllocationCallbacks const& GetVkAllocatorCallbacks() const { return mVkAllocatorCpuCallbacks; }
45 auto const& GetVkInstance() const { return mInstance; }
46 };
47}
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
The root object of everything RHI. Implementation of this class inherently defines the RHI backend.
Definition Application.hpp:11
Definition Device.hpp:188
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 Application.hpp:16
vk::raii::PhysicalDevices mPhysicalDevices
Definition Application.hpp:18
Vector< RHIDevice::DeviceDesc > mDevices
Definition Application.hpp:22
RHIObjectPool mStorage
Definition Application.hpp:25
Allocator * GetAllocator() const
Definition Application.hpp:43
const vk::raii::Context mContext
Definition Application.hpp:29
vk::AllocationCallbacks mVkAllocatorCpuCallbacks
Definition Application.hpp:17
vk::raii::DebugUtilsMessengerEXT mDebugHandler
Definition Application.hpp:23
RHIDevice * GetDevice(Handle handle) const override
Definition Application.cpp:91
Allocator * mAllocator
Definition Application.hpp:20
vk::AllocationCallbacks const & GetVkAllocatorCallbacks() const
Definition Application.hpp:44
const uint32_t mVulkanApiVersion
Definition Application.hpp:30
Span< const RHIDevice::DeviceDesc > EnumerateDevices() const override
Definition Application.cpp:79
vk::raii::Instance mInstance
Definition Application.hpp:19
const String mName
Definition Application.hpp:27
void DestroyDevice(Handle handle) override
Definition Application.cpp:92
RHIApplicationScopedHandle< RHIDevice > CreateDevice(RHIDevice::DeviceDesc const &desc)
Definition Application.hpp:36
auto const & GetVkInstance() const
Definition Application.hpp:45
RHIApplicationScopedHandle< RHIDevice > CreateDevice(RHIDevice::DeviceDesc const &desc, SDL_Window *window) override
Definition Application.cpp:84
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:130
std::basic_string< char > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:112
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:149
std::span< T > Span
Alias for std::span
Definition Container.hpp:60
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:4
uintptr_t Handle
Definition Details.hpp:8
vk::AllocationCallbacks vkCreateVulkanCpuAllocationCallbacks(Allocator *alloc)
Definition Application.cpp:108
void * vkCustomCpuReallocation(Allocator *alloc, void *pOriginal, size_t size, size_t alignment, vk::SystemAllocationScope)
Definition Application.cpp:101
void vkCustomCpuFree(Allocator *alloc, void *pMemory)
Definition Application.cpp:106
void * vkCustomCpuAllocation(Allocator *alloc, size_t size, size_t alignment, vk::SystemAllocationScope)
Definition Application.cpp:97