vengine  0.1.0
3D graphics engine made with Vulkan
Loading...
Searching...
No Matches
Device.hpp
Go to the documentation of this file.
1///
2/// @file Device.hpp
3/// @brief This file contains the Device class
4/// @namespace ven
5///
6
7#pragma once
8
9#include <vector>
10
11#include "VEngine/Window.hpp"
12
13namespace ven {
14
16 VkSurfaceCapabilitiesKHR capabilities;
17 std::vector<VkSurfaceFormatKHR> formats;
18 std::vector<VkPresentModeKHR> presentModes;
19 };
20
22 uint32_t graphicsFamily{};
23 uint32_t presentFamily{};
26 [[nodiscard]] bool isComplete() const { return graphicsFamilyHasValue && presentFamilyHasValue; }
27 };
28
29 class Device {
30
31 public:
32
33 #ifdef NDEBUG
34 const bool enableValidationLayers = false;
35 #else
36 const bool enableValidationLayers = true;
37 #endif
38
39 explicit Device(Window &window);
40 ~Device();
41
42 Device(const Device &) = delete;
43 Device& operator=(const Device &) = delete;
44 Device(Device &&) = delete;
45 Device &operator=(Device &&) = delete;
46
47 [[nodiscard]] VkCommandPool getCommandPool() const { return commandPool; }
48 [[nodiscard]] VkDevice device() const { return device_; }
49 [[nodiscard]] VkSurfaceKHR surface() const { return surface_; }
50 [[nodiscard]] VkQueue graphicsQueue() const { return graphicsQueue_; }
51 [[nodiscard]] VkQueue presentQueue() const { return presentQueue_; }
52
54 [[nodiscard]] uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags propertiesp) const;
56 [[nodiscard]] VkFormat findSupportedFormat(const std::vector<VkFormat> &candidates, VkImageTiling tiling, VkFormatFeatureFlags features) const;
57
58 // Buffer Helper Functions
59 void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags propertiesp, VkBuffer &buffer, VkDeviceMemory &bufferMemory) const;
60 [[nodiscard]] VkCommandBuffer beginSingleTimeCommands() const;
61 void endSingleTimeCommands(VkCommandBuffer commandBuffer) const;
62 void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size) const;
63 void copyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height, uint32_t layerCount) const;
64
65 void createImageWithInfo(const VkImageCreateInfo &imageInfo, VkMemoryPropertyFlags properties, VkImage &image, VkDeviceMemory &imageMemory) const;
66
67 VkPhysicalDeviceProperties m_properties;
68
69 [[nodiscard]] VkPhysicalDevice getPhysicalDevice() const { return physicalDevice; }
70 [[nodiscard]] VkQueue getGraphicsQueue() const { return graphicsQueue_; }
71
72 private:
73
74 void createInstance();
77 void pickPhysicalDevice();
79 void createCommandPool();
80
81 // helper functions
82 bool isDeviceSuitable(VkPhysicalDevice device) const;
83 [[nodiscard]] std::vector<const char *> getRequiredExtensions() const;
84 [[nodiscard]] bool checkValidationLayerSupport() const;
85 QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device) const;
86 static void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT &createInfo);
88 bool checkDeviceExtensionSupport(VkPhysicalDevice device) const;
90
91 VkInstance instance;
92 VkDebugUtilsMessengerEXT debugMessenger;
93 VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
95 VkCommandPool commandPool;
96
97 VkDevice device_;
98 VkSurfaceKHR surface_;
101
102 const std::vector<const char *> validationLayers = {"VK_LAYER_KHRONOS_validation"};
103 const std::vector<const char *> deviceExtensions = {VK_KHR_SWAPCHAIN_EXTENSION_NAME};
104
105 }; // class Device
106
107} // namespace ven
This file contains the Window class.
const std::vector< const char * > validationLayers
Definition Device.hpp:102
VkDebugUtilsMessengerEXT debugMessenger
Definition Device.hpp:92
void endSingleTimeCommands(VkCommandBuffer commandBuffer) const
Definition device.cpp:430
void createCommandPool()
Definition device.cpp:171
SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device) const
Definition device.cpp:334
VkPhysicalDevice getPhysicalDevice() const
Definition Device.hpp:69
VkInstance instance
Definition Device.hpp:91
const bool enableValidationLayers
Definition Device.hpp:36
void createInstance()
Definition device.cpp:57
VkPhysicalDevice physicalDevice
Definition Device.hpp:93
VkQueue graphicsQueue() const
Definition Device.hpp:50
bool checkValidationLayerSupport() const
Definition device.cpp:225
VkSurfaceKHR surface_
Definition Device.hpp:98
VkQueue presentQueue_
Definition Device.hpp:100
void setupDebugMessenger()
Definition device.cpp:215
VkPhysicalDeviceProperties m_properties
Definition Device.hpp:67
uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags propertiesp) const
Definition device.cpp:369
void pickPhysicalDevice()
Definition device.cpp:98
VkDevice device() const
Definition Device.hpp:48
QueueFamilyIndices findPhysicalQueueFamilies() const
Definition Device.hpp:55
bool checkDeviceExtensionSupport(VkPhysicalDevice device) const
Definition device.cpp:289
VkCommandPool getCommandPool() const
Definition Device.hpp:47
void createLogicalDevice()
Definition device.cpp:124
Device(Window &window)
Definition device.cpp:34
Device & operator=(Device &&)=delete
void createImageWithInfo(const VkImageCreateInfo &imageInfo, VkMemoryPropertyFlags properties, VkImage &image, VkDeviceMemory &imageMemory) const
Definition device.cpp:479
QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device) const
Definition device.cpp:305
VkCommandBuffer beginSingleTimeCommands() const
Definition device.cpp:411
Device(const Device &)=delete
VkCommandPool commandPool
Definition Device.hpp:95
void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size) const
Definition device.cpp:445
VkQueue presentQueue() const
Definition Device.hpp:51
bool isDeviceSuitable(VkPhysicalDevice device) const
Definition device.cpp:185
VkSurfaceKHR surface() const
Definition Device.hpp:49
VkDevice device_
Definition Device.hpp:97
Device & operator=(const Device &)=delete
VkQueue getGraphicsQueue() const
Definition Device.hpp:70
const std::vector< const char * > deviceExtensions
Definition Device.hpp:103
std::vector< const char * > getRequiredExtensions() const
Definition device.cpp:250
void copyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height, uint32_t layerCount) const
Definition device.cpp:458
Device(Device &&)=delete
void createSurface()
Definition Device.hpp:76
Window & m_window
Definition Device.hpp:94
static void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT &createInfo)
Definition device.cpp:202
void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags propertiesp, VkBuffer &buffer, VkDeviceMemory &bufferMemory) const
Definition device.cpp:384
void hasGlfwRequiredInstanceExtensions() const
Definition device.cpp:265
VkQueue graphicsQueue_
Definition Device.hpp:99
VkFormat findSupportedFormat(const std::vector< VkFormat > &candidates, VkImageTiling tiling, VkFormatFeatureFlags features) const
Definition device.cpp:355
SwapChainSupportDetails getSwapChainSupport() const
Definition Device.hpp:53
void createWindowSurface(VkInstance instance, VkSurfaceKHR *surface) const
Definition window.cpp:24
bool isComplete() const
Definition Device.hpp:26
std::vector< VkPresentModeKHR > presentModes
Definition Device.hpp:18
VkSurfaceCapabilitiesKHR capabilities
Definition Device.hpp:16
std::vector< VkSurfaceFormatKHR > formats
Definition Device.hpp:17