SpiecsEngine
 
Loading...
Searching...
No Matches

◆ VulkanInstance()

Spices::VulkanInstance::VulkanInstance ( VulkanState & vulkanState,
const std::string & name,
const std::string & engineName )

Constructor Function. Create vkInstance and vkSurface.

Parameters
[in]vulkanStateThe global VulkanState.
[in]nameApplication name.
[in]engineNameEngine name.

Create VkApplicationInfo struct.

Create VkInstanceCreateInfo struct.

Get all instance extension requirements our engine needede.

Iter all our extensions, check whether all satisfied or not.

Set instance extension.

Get all instance layer requirements our engine needede.

Iter all our layers, check whether all satisfied or not.

Set instance layer.

Set VkDebugUtilsMessengerCreateInfoEXT.

Enable Shader Debug Feature. Enable DescriptorSet Index Check.

Create instance and set it global.

Init Vulkan Functions.

Set Vulkan's debug message callback function pointer.

Create Surface.

Create VkApplicationInfo struct.

Create VkInstanceCreateInfo struct.

Get all instance extension requirements our engine needede.

Iter all our extensions, check whether all satisfied or not.

Set instance extension.

Get all instance layer requirements our engine needede.

Iter all our layers, check whether all satisfied or not.

Set instance layer.

Set VkDebugUtilsMessengerCreateInfoEXT.

Enable Shader Debug Feature. Enable DescriptorSet Index Check.

Create instance and set it global.

Init Vulkan Functions.

Set Vulkan's debug message callback function pointer.

Create Surface.

Definition at line 14 of file VulkanInstance.cpp.

19 : VulkanObject(vulkanState)
20 {
22
26 VkApplicationInfo appInfo {};
27 appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
28 appInfo.pApplicationName = name.c_str();
29 appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
30 appInfo.pEngineName = engineName.c_str();
31 appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
32 appInfo.apiVersion = VK_API_VERSION_1_3;
33
37 VkInstanceCreateInfo createInfo {};
38 createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
39 createInfo.pApplicationInfo = &appInfo;
40
45
50 {
51 std::stringstream ss;
52 ss << "Instance Extension not Satisfied";
53
54 SPICES_CORE_ERROR(ss.str());
55 }
56
60 createInfo.enabledExtensionCount = static_cast<uint32_t>(m_ExtensionProperties.size());
61 createInfo.ppEnabledExtensionNames = m_ExtensionProperties.data();
62
67
72
76 createInfo.enabledLayerCount = static_cast<uint32_t>(m_LayerProperties.size());
77 createInfo.ppEnabledLayerNames = m_LayerProperties.data();
78
83
88 std::vector<VkValidationFeatureEnableEXT> validationFeatureEnable;
89
90#if 0 // Set to 1 if want print message in shader.(Cause Device Wait 1s suspend.)
91
92 validationFeatureEnable.push_back(VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT);
93
94#endif
95
96 VkValidationFeaturesEXT validationFeatures{};
97 validationFeatures.sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT;
98 validationFeatures.enabledValidationFeatureCount = static_cast<uint32_t>(validationFeatureEnable.size());
99 validationFeatures.pEnabledValidationFeatures = validationFeatureEnable.data();
100
101#ifdef SPICES_DEBUG
102
103 m_DebugMessengerCreateInfo.pNext = &validationFeatures;
104
105#endif
106
107 createInfo.pNext = &m_DebugMessengerCreateInfo;
108
112 VK_CHECK(vkCreateInstance(&createInfo, nullptr, &vulkanState.m_Instance))
113
114
117 vulkanState.m_VkFunc.Init(vulkanState.m_Instance);
118
123
128 }
#define SPICES_PROFILE_ZONE
#define VK_CHECK(expr)
Vulkan Check macro. Verify Vulkan API Effectiveness.
Definition VulkanUtils.h:68
void SetVulkanDebugCallbackFuncPointer()
Set Vulkan's debug message callback function pointer. Working with DEBUG mode.
VkDebugUtilsMessengerCreateInfoEXT m_DebugMessengerCreateInfo
Debug Utils Messages used to execute message callback function. Also debug vkInstance create.
void CreateVulkanSurface() const
Create a Surface Object.
std::vector< const char * > m_LayerProperties
Instance Layer Properties.
std::vector< const char * > m_ExtensionProperties
Instance Extension Properties.
bool CheckExtensionRequirementsSatisfied()
Iter all our extensions, check whether all satisfied or not.
void FillDebugMessengerCreateInfo()
Set m_DebugMessengerCreateInfo variable.
void GetExtensionRequirements()
Get all instance extension requirements our engine needed. Source 1 : glfw requirements....
bool ChecklayerRequirementsSatisfied()
Iter all our layers, check whether all satisfied or not.
void GetLayerRequirements()
Get all instance layer requirements our engine needed. Source 1 : user Setting.
VulkanObject(VulkanState &vulkanState)
Constructor Function. Init member variables.

References CheckExtensionRequirementsSatisfied(), ChecklayerRequirementsSatisfied(), CreateVulkanSurface(), FillDebugMessengerCreateInfo(), GetExtensionRequirements(), GetLayerRequirements(), SetVulkanDebugCallbackFuncPointer(), and Spices::VulkanObject::VulkanObject().