MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-ValidationLayers / CreateInstance

Function CreateInstance

tests/layers/device_profile_api.cpp:194–230  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

192}
193
194VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
195 VkInstance* pInstance) {
196 VkLayerInstanceCreateInfo* chain_info = GetChainInfo(pCreateInfo, VK_LAYER_LINK_INFO);
197 std::lock_guard<std::mutex> lock(global_lock);
198
199 assert(chain_info->u.pLayerInfo);
200 PFN_vkGetInstanceProcAddr fp_get_instance_proc_addr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
201 PFN_vkCreateInstance fp_create_instance = (PFN_vkCreateInstance)fp_get_instance_proc_addr(NULL, "vkCreateInstance");
202 if (fp_create_instance == NULL) return VK_ERROR_INITIALIZATION_FAILED;
203
204 // Advance the link info for the next element on the chain
205 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
206
207 VkResult result = fp_create_instance(pCreateInfo, pAllocator, pInstance);
208 if (result != VK_SUCCESS) return result;
209
210 layer_data* instance_data = GetLayerDataPtr(*pInstance, device_profile_api_dev_data_map);
211 instance_data->instance = *pInstance;
212 layer_init_instance_dispatch_table(*pInstance, &instance_data->dispatch_table, fp_get_instance_proc_addr);
213 instance_data->dispatch_table.GetPhysicalDeviceProcAddr =
214 (PFN_GetPhysicalDeviceProcAddr)fp_get_instance_proc_addr(*pInstance, "vk_layerGetPhysicalDeviceProcAddr");
215
216 uint32_t physical_device_count = 0;
217 instance_data->dispatch_table.EnumeratePhysicalDevices(*pInstance, &physical_device_count, NULL);
218
219 std::vector<VkPhysicalDevice> physical_devices(physical_device_count);
220 result = instance_data->dispatch_table.EnumeratePhysicalDevices(*pInstance, &physical_device_count, physical_devices.data());
221 if (result != VK_SUCCESS) return result;
222
223 for (VkPhysicalDevice physical_device : physical_devices) {
224 layer_data* phy_dev_data = GetLayerDataPtr(physical_device, device_profile_api_dev_data_map);
225 instance_data->dispatch_table.GetPhysicalDeviceProperties(physical_device, &phy_dev_data->phy_device_props);
226 instance_data->dispatch_table.GetPhysicalDeviceFeatures(physical_device, &phy_dev_data->phy_device_features);
227 phy_dev_data->instance = *pInstance;
228 }
229 return result;
230}
231
232VKAPI_ATTR void VKAPI_CALL DestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator) {
233 layer_data* instance_data = GetLayerDataPtr(instance, device_profile_api_dev_data_map);

Callers

nothing calls this directly

Calls 7

GetChainInfoFunction · 0.85
GetLayerDataPtrFunction · 0.85
dataMethod · 0.45

Tested by

no test coverage detected