Overview
在 Vulkan
中,逻辑设备(Logical Device
)是与物理设备(Physical Device
)交互的接口,它抽象了对特定GPU
(物理设备)的访问,使得应用程序能够提交命令并管理资源,而无需与物理硬件打交道
举例来说:物理设备可能包含三种队列:图形,计算和传输,但是逻辑设备创建的时候,可以只关联一个单独的队列(比如图形),这样我们就可以很方便地向队列提交指令缓存了
创建逻辑设备
创建逻辑设备时,需要指定你希望使用的队列族和队列、启用的扩展、以及一些其他特性,我们通过 vkCreateDevice
函数创建逻辑设备, 函数原型如下:
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
VkPhysicalDevice physicalDevice,
const VkDeviceCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkDevice* pDevice);
physicalDevice
指定在哪一个物理设备上创建逻辑设备pCreateInfo
创建逻辑设备的配置信息,是关键结构pAllocator
内存分配器。如果为nullptr
表示使用内部默认分配器,否则为自定义分配器pDevice
创建逻辑设备的实例
其中关键的输入参数结构是VkDeviceCreateInfo
,其定义如下:
typedef struct VkDeviceCreateInfo {
VkStructureType sType;
const void* pNext;
VkDeviceCreateFlags flags;
uint32_t queueCreateInfoCount;
const VkDeviceQueueCreateInfo* pQueueCreateInfos;
uint32_t enabledLayerCount;
const char* const* ppEnabledLayerNames;
uint32_t enabledExtensionCount;
const char* const* ppEnabledExtensionNames;
const VkPhysicalDeviceFeatures* pEnabledFeatures;
} VkDeviceCreateInfo;
各个参数的含义如下:
sType
是该结构体的类型枚举值, 必须是VkStructureType::VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
pNext
要么是nullptr
要么指向其他结构体来扩展该结构体flags
resevered
queueCreateInfoCount
指定pQueueCreateInfos
数组元素个数,一般设置为 1pQueueCreateInfos
指定VkDeviceQueueCreateInfo
数组,用于配置要创建的设备队列信息,关联到下面的VkDeviceQueueCreateInfo
enabledLayerCount
指定ppEnabledLayerNames
数组元素个数。该成员已被遗弃ppEnabledLayerNames
指定要开启的验证层。该成员已被遗弃enabledExtensionCount
指定ppEnabledExtensionNames
数组中元素个数ppEnabledExtensionNames
指定要开启的扩展。该数组数量必须大于等于enabledExtensionCount
pEnabledFeatures
配置要开启的特性
VkDeviceQueueCreateInfo
VkDeviceQueueCreateInfo
的定义如下:
typedef struct VkDeviceQueueCreateInfo {
VkStructureType sType;
const void* pNext;
VkDeviceQueueCreateFlags flags;
uint32_t queueFamilyIndex;
uint32_t