bool VulkanContext::createDevice()

in RenderScriptMigrationSample/app/src/main/cpp/VulkanContext.cpp [154:184]


bool VulkanContext::createDevice() {
    // Required device extensions
    // These extensions are required to import an AHardwareBuffer to Vulkan.
    std::vector<const char*> deviceExtensions = {
            VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME,
            VK_KHR_BIND_MEMORY_2_EXTENSION_NAME,
            VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME,
            VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME,
            VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME,
    };

    // Create logical device
    const float queuePriority = 1.0f;
    const VkDeviceQueueCreateInfo queueDesc = {
            .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
            .queueFamilyIndex = mQueueFamilyIndex,
            .queueCount = 1,
            .pQueuePriorities = &queuePriority,
    };
    const VkDeviceCreateInfo deviceDesc = {
            .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
            .queueCreateInfoCount = 1,
            .pQueueCreateInfos = &queueDesc,
            .enabledExtensionCount = static_cast<uint32_t>(deviceExtensions.size()),
            .ppEnabledExtensionNames = deviceExtensions.data(),
            .pEnabledFeatures = nullptr,
    };
    CALL_VK(vkCreateDevice, mPhysicalDevice, &deviceDesc, nullptr, mDevice.pHandle());
    vkGetDeviceQueue(mDevice.handle(), mQueueFamilyIndex, 0, &mQueue);
    return true;
}