HatchitGraphics
ht_vkdevice.h
1 
15 #pragma once
16 
17 #include <ht_platform.h>
18 #include <ht_device.h>
19 #include <ht_vulkan.h>
20 #include <ht_debug.h>
21 #include <vector>
22 
23 namespace Hatchit
24 {
25  namespace Graphics
26  {
27  namespace Vulkan
28  {
29  class HT_API VKDevice : public IDevice
30  {
31  public:
32  VKDevice();
33 
34  ~VKDevice();
35 
36  bool VInitialize() override;
37  void VReportDeviceInfo() override;
38 
39  void SetValidation(bool validate);
40 
41  const std::vector<VkDevice>& GetVKDevices() const;
42  const std::vector<VkPhysicalDevice>& GetVKPhysicalDevices() const;
43  const std::vector<VkPhysicalDeviceFeatures>& GetVKPhysicalDeviceFeatures() const;
44  const std::vector<VkPhysicalDeviceMemoryProperties>& GetVKPhysicalDeviceMemoryProperties() const;
45  const VkInstance& GetVKInstance() const;
46 
47  private:
48  std::vector<VkDevice> m_devices;
49  std::vector<VkPhysicalDevice> m_gpus;
50  std::vector<VkPhysicalDeviceFeatures> m_gpuFeatures;
51  std::vector<VkPhysicalDeviceMemoryProperties> m_gpuMemoryProps;
52  VkInstance m_instance;
53 
54  bool m_initialized;
55  bool m_validate;
56 
57  VkDebugReportCallbackEXT m_debugReportCallback;
58 
59  //The various known layer names for different SDK versions
60  std::vector<const char*> m_layerNames1013;
61  std::vector<const char*> m_layerNames1011;
62  std::vector<const char*> m_layerNames108;
63  std::vector<const char*> m_layerNames105;
64  std::vector<const char*> m_layerNames103;
65 
66  //Collection of possible name collections
67  std::vector<std::vector<const char*>> m_layerNamesCollection;
68 
69  //The actual extension and layer names to check
70  std::vector<const char*> m_enabledExtensionNames;
71  std::vector<const char*> m_enabledLayerNames;
72 
73  bool setupInstance();
74  bool enumeratePhysicalDevices();
75  bool queryDeviceCapabilities();
76  bool setupDevices();
77  bool setupProcAddresses();
78  bool setupDebugCallback();
79 
80  bool checkInstanceLayers();
81  bool checkInstanceExtensions();
82  bool checkDeviceLayers(const VkPhysicalDevice& gpu);
83  bool checkDeviceExtensions(const VkPhysicalDevice& gpu);
84 
85  bool checkLayers(std::vector<const char*> layerNames, std::vector <VkLayerProperties> layers);
86 
87  static VKAPI_ATTR VkBool32 VKAPI_CALL debugFunction(VkFlags msgFlags, VkDebugReportObjectTypeEXT objType,
88  uint64_t srcObject, size_t location, int32_t msgCode,
89  const char *pLayerPrefix, const char *pMsg, void *pUserData);
90  };
91  }
92  }
93 }
Hatchit Engine Copyright(c) 2015-2016 Third-Degree.
Definition: ht_color.h:19
Interface outlining implementation for GPU Device.
Definition: ht_device.h:27
Vulkan device wrapper.
Definition: ht_vkdevice.h:29