API Documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
VulkanDevice.h
Go to the documentation of this file.
1#pragma once
4struct VkDeviceCreateInfo;
5namespace NDEVR
6{
8 {
9 public:
10 VulkanDevice(VkPhysicalDevice physical_device, const DynamicPointer<VulkanInstance>& instance);
13 virtual ~VulkanDevice(){};
15 void setDeviceLost();
16 UUID id() const override { return m_id; };
17
18 void init() override;
19 void cleanup();
20 bool isInitialized() const override { return m_is_init; }
21 bool isValid() const override;
22 void destroyImageView(VkImageView image_view);
23 VkCommandPool getCommandPool(uint04 id = Constant<uint04>::NaN) const;
25 VkQueue graphicsQueue(uint04 id = Constant<uint04>::NaN) const;
26 VkQueue presentQueue(uint04 id = Constant<uint04>::NaN) const;
27 VkCommandBuffer beginSingleTimeCommands(uint04 id = Constant<uint04>::NaN) const;
28 void endSingleTimeCommands(VkCommandBuffer commandBuffer, bool wait_for_completion, uint04 id = Constant<uint04>::NaN) const;
29 uint04 checkoutID() const;
30 void checkoutID(uint04 id) const;
31 void returnID(uint04 id = Constant<uint04>::NaN) const;
32 uint04 maxSupportedSamples() const override;
33 virtual uint04 getThreadedID() const;
34 bool isSoftwareRendered() const;
35 virtual bool canServiceCaptureRequests() const final override;
36 #ifdef ANDROID
37 virtual bool supportsMultiThreading() const override { return false; }
38 #else
39 virtual bool supportsMultiThreading() const override { return true; }
40 #endif
41 virtual void waitForGraphicsQueue(uint04 id = Constant<uint04>::NaN) const;
42 void logPhysicalDevice();
43 const VkPhysicalDeviceProperties& physicalProperties() const;
44 const VkPhysicalDeviceFeatures& physicalFeatures() const;
45 const VkPhysicalDeviceFeatures& enabledFeatures() const;
46 const void* initLockPtr() const override;//To initialize, must hold write lock, to use must hold read lock
47 VkPresentModeKHR chooseSwapPresentMode(const Buffer<VkPresentModeKHR>& availablePresentModes);
48 void addSurface(VkSurfaceKHR surface);
49 void removeSurface(VkSurfaceKHR surface);
50
51 VkFormat findDepthFormat() const;
53 VkInstance vkInstance() const { lib_assert(!m_instance.isNull(), "Instance not yet created, but access is attempted"); return m_instance->vkInstance(); }
54 VkDevice device() const { return m_device; }
55 const VkPhysicalDevice& physicalDevice() const { return m_physical_device; }
56
57 void setLog(ProgressInfo* log);
58 ProgressInfo* log() { return m_log; }
59 bool supportsTriangleFan() const {return m_instance->supportsTriangleFan();}
60 uint04 findMemoryType(uint04 typeFilter, uint04 properties) const;
61 protected:
62 void setQueueFamilies();
63 void setupLogicalDevice();
64 bool checkDeviceExtensionSupport(VkPhysicalDevice device);
65 void createCommandPool(uint04 thread) const;
66 virtual VkResult createLogicalDevice(const VkDeviceCreateInfo& create_info);
67 virtual void autoChoosePhysicalDevice();
68 protected:
71 VkDevice m_device;//Virtual device for rendering
72 VkPhysicalDevice m_physical_device;//Best device for rendering
78 mutable VkPhysicalDeviceProperties* m_physical_properties;
79 mutable VkPhysicalDeviceFeatures* m_physical_features;
80 mutable VkPhysicalDeviceFeatures* m_enabled_features;
84
85 mutable Dictionary<uint04, VkCommandPool> m_command_pools;//A command pool for each thread
86
93
95 };
96}
#define lib_assert(expression, message)
Asserts some logic in the code. Disabled in non debug mode by default. Can be re-enabled in release u...
Definition LibAssert.h:70
The equivelent of std::vector but with a bit more control. The basic array unit of the library.
Definition Buffer.hpp:64
Definition Dictionary.h:48
Definition Pointer.hpp:303
Definition GraphicsDevice.h:8
Definition ProgressInfo.hpp:43
Represents a timestamp with utilities for manipulation and conversion.
Definition Time.h:54
Definition UUID.h:66
Definition VulkanDevice.h:8
VkDevice device() const
Definition VulkanDevice.h:54
uint04 m_graphics_family_index
Definition VulkanDevice.h:81
void returnID(uint04 id=Constant< uint04 >::NaN) const
Definition VulkanDevice.cpp:536
const VkPhysicalDeviceFeatures & physicalFeatures() const
Definition VulkanDevice.cpp:621
bool checkDeviceExtensionSupport(VkPhysicalDevice device)
Definition VulkanDevice.cpp:256
VulkanDevice(VkPhysicalDevice physical_device, const DynamicPointer< VulkanInstance > &instance)
Definition VulkanDevice.cpp:41
VkInstance vkInstance() const
Definition VulkanDevice.h:53
Dictionary< uint04, VkCommandPool > m_command_pools
Definition VulkanDevice.h:85
virtual uint04 getThreadedID() const
Definition VulkanDevice.cpp:561
const void * initLockPtr() const override
Definition VulkanDevice.cpp:608
void setupLogicalDevice()
Definition VulkanDevice.cpp:386
Buffer< VkQueueFamilyProperties, uint04, ObjectAllocator< true > > m_queue_families
Definition VulkanDevice.h:77
void createCommandPool(uint04 thread) const
Definition VulkanDevice.cpp:658
Buffer< String > m_device_extensions
Definition VulkanDevice.h:73
VkQueue presentQueue(uint04 id=Constant< uint04 >::NaN) const
Definition VulkanDevice.cpp:743
VkDevice m_device
Definition VulkanDevice.h:71
bool isInitialized() const override
Definition VulkanDevice.h:20
void cleanup()
Definition VulkanDevice.cpp:320
static DynamicPointer< VulkanDevice > & DefaultVulkanDevice()
Definition VulkanDevice.cpp:78
void logPhysicalDevice()
Definition VulkanDevice.cpp:176
DynamicPointer< VulkanInstance > m_instance
Definition VulkanDevice.h:70
void setLog(ProgressInfo *log)
Definition VulkanDevice.cpp:285
UUID m_id
Definition VulkanDevice.h:76
Dictionary< uint04, uint04 > m_thread_checkouts
Definition VulkanDevice.h:91
Dictionary< uint04, uint04 > m_graphics_queue_index
Definition VulkanDevice.h:89
uint04 m_present_family_index
Definition VulkanDevice.h:82
ProgressInfo * log()
Definition VulkanDevice.h:58
VkPhysicalDeviceFeatures * m_enabled_features
Definition VulkanDevice.h:80
const VkPhysicalDeviceFeatures & enabledFeatures() const
Definition VulkanDevice.cpp:630
bool supportsTriangleFan() const
Definition VulkanDevice.h:59
bool isSoftwareRendered() const
Definition VulkanDevice.cpp:580
VkCommandPool getCommandPool(uint04 id=Constant< uint04 >::NaN) const
Definition VulkanDevice.cpp:594
virtual ~VulkanDevice()
Definition VulkanDevice.h:13
Dictionary< uint04, VkQueue > m_present_queue
Definition VulkanDevice.h:87
void endSingleTimeCommands(VkCommandBuffer commandBuffer, bool wait_for_completion, uint04 id=Constant< uint04 >::NaN) const
Definition VulkanDevice.cpp:778
uint04 maxSupportedSamples() const override
Definition VulkanDevice.cpp:110
const VkPhysicalDevice & physicalDevice() const
Definition VulkanDevice.h:55
virtual bool canServiceCaptureRequests() const final override
Definition VulkanDevice.cpp:585
bool m_is_init
Definition VulkanDevice.h:94
bool m_is_software_rendered
Definition VulkanDevice.h:92
Buffer< String > m_device_layers
Definition VulkanDevice.h:74
VkPhysicalDevice m_physical_device
Definition VulkanDevice.h:72
Buffer< VkSurfaceKHR > m_surfaces
Definition VulkanDevice.h:75
VkPhysicalDeviceProperties * m_physical_properties
Definition VulkanDevice.h:78
void addSurface(VkSurfaceKHR surface)
Definition VulkanDevice.cpp:646
ProgressInfo * m_log
Definition VulkanDevice.h:69
void setQueueFamilies()
Definition VulkanDevice.cpp:128
virtual void autoChoosePhysicalDevice()
Definition VulkanDevice.cpp:362
void destroyImageView(VkImageView image_view)
Definition VulkanDevice.cpp:479
VkPhysicalDeviceFeatures * m_physical_features
Definition VulkanDevice.h:79
Dictionary< uint04, VkQueue > m_graphics_queue
Definition VulkanDevice.h:88
virtual VkResult createLogicalDevice(const VkDeviceCreateInfo &create_info)
Definition VulkanDevice.cpp:675
void setDeviceLost()
Definition VulkanDevice.cpp:84
Buffer< uint04 > m_checkouts
Definition VulkanDevice.h:90
VkPresentModeKHR chooseSwapPresentMode(const Buffer< VkPresentModeKHR > &availablePresentModes)
Definition VulkanDevice.cpp:634
UUID id() const override
Definition VulkanDevice.h:16
virtual void waitForGraphicsQueue(uint04 id=Constant< uint04 >::NaN) const
Definition VulkanDevice.cpp:589
virtual bool supportsMultiThreading() const override
Definition VulkanDevice.h:39
void removeSurface(VkSurfaceKHR surface)
Definition VulkanDevice.cpp:653
uint04 checkoutID() const
Definition VulkanDevice.cpp:484
uint04 findMemoryType(uint04 typeFilter, uint04 properties) const
Definition VulkanDevice.cpp:96
void init() override
Definition VulkanDevice.cpp:290
VkCommandBuffer beginSingleTimeCommands(uint04 id=Constant< uint04 >::NaN) const
Definition VulkanDevice.cpp:755
Time m_creation_time
Definition VulkanDevice.h:83
const VkPhysicalDeviceProperties & physicalProperties() const
Definition VulkanDevice.cpp:612
DynamicPointer< VulkanInstance > instance() const
Definition VulkanDevice.cpp:357
bool isValid() const override
Definition VulkanDevice.cpp:345
VkQueue graphicsQueue(uint04 id=Constant< uint04 >::NaN) const
Definition VulkanDevice.cpp:688
VkFormat findDepthFormat() const
Definition VulkanDevice.cpp:349
void destroyCommandPool(uint04 id)
Definition VulkanDevice.cpp:679
Definition ACIColor.h:37
uint32_t uint04
-Defines an alias representing a 4 byte, unsigned integer -Can represent exact integer values 0 throu...
Definition BaseValues.hpp:120
Definition BaseValues.hpp:272