NarcEngine 0.1.1
C++ Vulkan game engine
 
Loading...
Searching...
No Matches
DeviceHandler.h
1#pragma once
2#include <vulkan/vulkan_core.h>
3
4#include "EngineDebugLogger.h"
5#include "QueueFamilyIndices.h"
6
7namespace narc_engine {
8 class Window;
9
10 class DeviceHandler
11 {
12 public:
13 DeviceHandler(const Window* window, const EngineInstance* instance, const EngineDebugLogger* debugLogger);
14 ~DeviceHandler();
15
16 const inline VkDevice& getDevice() const { return m_device; }
17 const inline VkPhysicalDevice& getPhysicalDevice() const { return m_physicalDevice; }
18 const inline VkPhysicalDeviceProperties& getPhysicalDeviceProperties() const { return m_physicalDeviceProperties; }
19
20 void createSwapChain(VkSwapchainCreateInfoKHR& createInfo, VkSwapchainKHR* swapchain) const;
21 void createCommandPool(VkCommandPool* commandPool, VkCommandPoolCreateInfo poolInfo) const;
22 VkImageView createImageView(VkImage image, VkFormat format, VkImageAspectFlags aspectFlags) const;
23
24 void waitDeviceIdle() const;
25 void waitGraphicsQueueIdle() const;
26 VkResult submitGraphicsQueue(uint32_t submitCount, const VkSubmitInfo* submitInfo, VkFence fence) const;
27 VkResult presentKHR(const VkPresentInfoKHR* presentInfo) const;
28
29 uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties) const;
30 VkFormat findDepthFormat() const;
31 VkFormat findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) const;
32
33 private:
34 VkDevice m_device;
35 VkPhysicalDevice m_physicalDevice = VK_NULL_HANDLE;
36
37 VkQueue m_presentQueue;
38 VkQueue m_graphicsQueue;
39
40 VkPhysicalDeviceProperties m_physicalDeviceProperties{};
41
42 const EngineInstance* m_instance = nullptr;
43 const Window* m_window = nullptr;
44
45 void pickPhysicalDevice();
46 QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device) const;
47 void createLogicalDevice(const EngineDebugLogger* debugLogger);
48 int rateDeviceSuitability(VkPhysicalDevice device);
49 bool checkDeviceExtensionSupport(VkPhysicalDevice physicalDevice, const std::vector<const char*>& deviceExtensions);
50 };
51}
Definition EngineDebugLogger.h:9
Definition EngineInstance.h:14
Definition Window.h:12
Definition QueueFamilyIndices.h:6