2021-10-28 21:27:25 +00:00
|
|
|
#pragma once
|
|
|
|
|
2022-08-31 23:04:17 +00:00
|
|
|
#include "vulkaninstance.h"
|
2021-10-28 21:27:25 +00:00
|
|
|
|
2022-08-31 23:04:17 +00:00
|
|
|
#include <functional>
|
|
|
|
#include <mutex>
|
|
|
|
#include <vector>
|
|
|
|
#include <algorithm>
|
|
|
|
#include <memory>
|
2021-10-28 21:27:25 +00:00
|
|
|
|
|
|
|
class VulkanSwapChain;
|
|
|
|
class VulkanSemaphore;
|
|
|
|
class VulkanFence;
|
2022-08-31 23:04:17 +00:00
|
|
|
class VulkanPhysicalDevice;
|
|
|
|
class VulkanSurface;
|
|
|
|
class VulkanCompatibleDevice;
|
2021-10-28 21:27:25 +00:00
|
|
|
|
|
|
|
class VulkanDevice
|
|
|
|
{
|
|
|
|
public:
|
2022-08-31 23:04:17 +00:00
|
|
|
VulkanDevice(std::shared_ptr<VulkanInstance> instance, std::shared_ptr<VulkanSurface> surface, const VulkanCompatibleDevice& selectedDevice);
|
2021-10-28 21:27:25 +00:00
|
|
|
~VulkanDevice();
|
|
|
|
|
2023-04-11 23:23:06 +00:00
|
|
|
std::set<std::string> EnabledDeviceExtensions;
|
2022-08-31 23:04:17 +00:00
|
|
|
VulkanDeviceFeatures EnabledFeatures;
|
2021-10-28 21:27:25 +00:00
|
|
|
|
2022-08-31 23:04:17 +00:00
|
|
|
VulkanPhysicalDevice PhysicalDevice;
|
2021-10-28 21:27:25 +00:00
|
|
|
|
2022-08-31 23:04:17 +00:00
|
|
|
std::shared_ptr<VulkanInstance> Instance;
|
|
|
|
std::shared_ptr<VulkanSurface> Surface;
|
2021-10-28 21:27:25 +00:00
|
|
|
|
|
|
|
VkDevice device = VK_NULL_HANDLE;
|
|
|
|
VmaAllocator allocator = VK_NULL_HANDLE;
|
|
|
|
|
2022-08-31 23:04:17 +00:00
|
|
|
VkQueue GraphicsQueue = VK_NULL_HANDLE;
|
|
|
|
VkQueue PresentQueue = VK_NULL_HANDLE;
|
2021-10-28 21:27:25 +00:00
|
|
|
|
2022-08-31 23:04:17 +00:00
|
|
|
int GraphicsFamily = -1;
|
|
|
|
int PresentFamily = -1;
|
|
|
|
bool GraphicsTimeQueries = false;
|
2022-06-29 18:12:36 +00:00
|
|
|
|
2023-04-11 23:23:06 +00:00
|
|
|
bool SupportsExtension(const char* ext) const;
|
2021-11-07 03:05:19 +00:00
|
|
|
|
2022-08-31 23:04:17 +00:00
|
|
|
void SetObjectName(const char* name, uint64_t handle, VkObjectType type);
|
2021-10-28 21:27:25 +00:00
|
|
|
|
|
|
|
private:
|
2022-08-31 23:04:17 +00:00
|
|
|
bool DebugLayerActive = false;
|
2021-10-28 21:27:25 +00:00
|
|
|
|
2022-08-31 23:04:17 +00:00
|
|
|
void CreateDevice();
|
|
|
|
void CreateAllocator();
|
|
|
|
void ReleaseResources();
|
2021-10-28 21:27:25 +00:00
|
|
|
};
|