bool VulkanContext::createInstance()

in RenderScriptMigrationSample/app/src/main/cpp/VulkanContext.cpp [82:117]


bool VulkanContext::createInstance(bool enableDebug) {
    // Required instance layers
    std::vector<const char*> instanceLayers;
    if (enableDebug) {
        instanceLayers.push_back("VK_LAYER_KHRONOS_validation");
    }

    // Required instance extensions
    std::vector<const char*> instanceExtensions = {
            VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
            VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
    };
    if (enableDebug) {
        instanceExtensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
    }

    // Create instance
    const VkApplicationInfo applicationDesc = {
            .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
            .pApplicationName = "renderscript_migration_sample",
            .applicationVersion = VK_MAKE_VERSION(0, 0, 1),
            .apiVersion = static_cast<uint32_t>((VK_VERSION_MINOR(mInstanceVersion) >= 1)
                                                        ? VK_API_VERSION_1_1
                                                        : VK_API_VERSION_1_0),
    };
    const VkInstanceCreateInfo instanceDesc = {
            .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
            .pApplicationInfo = &applicationDesc,
            .enabledLayerCount = static_cast<uint32_t>(instanceLayers.size()),
            .ppEnabledLayerNames = instanceLayers.data(),
            .enabledExtensionCount = static_cast<uint32_t>(instanceExtensions.size()),
            .ppEnabledExtensionNames = instanceExtensions.data(),
    };
    CALL_VK(vkCreateInstance, &instanceDesc, nullptr, mInstance.pHandle());
    return true;
}