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;
}