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_INFOpNext要么是nullptr要么指向其他结构体来扩展该结构体flagsreseveredqueueCreateInfoCount指定pQueueCreateInfos数组元素个数,一般设置为 1pQueueCreateInfos指定VkDeviceQueueCreateInfo数组,用于配置要创建的设备队列信息,关联到下面的VkDeviceQueueCreateInfoenabledLayerCount指定ppEnabledLayerNames数组元素个数。该成员已被遗弃ppEnabledLayerNames指定要开启的验证层。该成员已被遗弃enabledExtensionCount指定ppEnabledExtensionNames数组中元素个数ppEnabledExtensionNames指定要开启的扩展。该数组数量必须大于等于enabledExtensionCountpEnabledFeatures配置要开启的特性
VkDeviceQueueCreateInfo
VkDeviceQueueCreateInfo 的定义如下:
typedef struct VkDeviceQueueCreateInfo {
VkStructureType sType;
const void* pNext;
VkDeviceQueueCreateFlags flags;
uint32_t queueFamilyIndex;
uint32_t queueCou

最低0.47元/天 解锁文章
854

被折叠的 条评论
为什么被折叠?



