Vulkan 学习(4)---- Vulkan 逻辑设备

Overview

Vulkan 中,逻辑设备(Logical Device)是与物理设备(Physical Device)交互的接口,它抽象了对特定GPU (物理设备)的访问,使得应用程序能够提交命令并管理资源,而无需与物理硬件打交道
举例来说:物理设备可能包含三种队列:图形,计算和传输,但是逻辑设备创建的时候,可以只关联一个单独的队列(比如图形),这样我们就可以很方便地向队列提交指令缓存了
vulkan_program

创建逻辑设备

创建逻辑设备时,需要指定你希望使用的队列族和队列、启用的扩展、以及一些其他特性,我们通过 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数组元素个数,一般设置为 1
  • pQueueCreateInfos 指定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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值