| 475 | // <- |
| 476 | |
| 477 | void RenderSystem::initVkInstance() |
| 478 | { |
| 479 | VkApplicationInfo appInfo = {}; |
| 480 | appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; |
| 481 | appInfo.pApplicationName = "Intrinsic"; |
| 482 | appInfo.pEngineName = "Intrinsic"; |
| 483 | appInfo.apiVersion = VK_API_VERSION_1_0; |
| 484 | |
| 485 | _INTR_ARRAY(const char*) extensionsToEnable; |
| 486 | { |
| 487 | extensionsToEnable.push_back(VK_KHR_SURFACE_EXTENSION_NAME); |
| 488 | #if defined(VK_USE_PLATFORM_WIN32_KHR) |
| 489 | extensionsToEnable.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME); |
| 490 | #elif defined(VK_USE_PLATFORM_XLIB_KHR) |
| 491 | extensionsToEnable.push_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME); |
| 492 | #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) |
| 493 | extensionsToEnable.push_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME); |
| 494 | #endif // VK_USE_PLATFORM_WIN32_KHR |
| 495 | } |
| 496 | |
| 497 | _INTR_ARRAY(const char*) layersToEnable; |
| 498 | if ((Settings::Manager::_rendererFlags & |
| 499 | Settings::RendererFlags::kValidationEnabled) > 0u) |
| 500 | { |
| 501 | layersToEnable.push_back("VK_LAYER_LUNARG_standard_validation"); |
| 502 | extensionsToEnable.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME); |
| 503 | } |
| 504 | |
| 505 | uint32_t availableLayerCount = 0u; |
| 506 | vkEnumerateInstanceLayerProperties(&availableLayerCount, nullptr); |
| 507 | _INTR_ARRAY(VkLayerProperties) availableLayers; |
| 508 | availableLayers.resize(availableLayerCount); |
| 509 | vkEnumerateInstanceLayerProperties(&availableLayerCount, |
| 510 | availableLayers.data()); |
| 511 | |
| 512 | _INTR_ARRAY(const char*) enabledLayers; |
| 513 | for (uint32_t i = 0u; i < availableLayerCount; ++i) |
| 514 | { |
| 515 | VkLayerProperties& layerProperty = availableLayers[i]; |
| 516 | _INTR_LOG_INFO("Found available Vulkan layer '%s'...", |
| 517 | layerProperty.layerName); |
| 518 | |
| 519 | for (uint32_t i = 0u; i < layersToEnable.size(); ++i) |
| 520 | { |
| 521 | if (strcmp(layerProperty.layerName, layersToEnable[i]) == 0u) |
| 522 | { |
| 523 | _INTR_LOG_INFO("Enabaling Vulkan layer '%s'...", |
| 524 | layerProperty.layerName); |
| 525 | enabledLayers.push_back(layersToEnable[i]); |
| 526 | } |
| 527 | } |
| 528 | } |
| 529 | |
| 530 | if (enabledLayers.size() != layersToEnable.size()) |
| 531 | { |
| 532 | _INTR_LOG_WARNING("Failed to enable some Vulkan layers..."); |
| 533 | } |
| 534 | |