Vulkan API 笔记记录

1.初始化-设备握手过程

Vulkan的初始化过程包括验证层属性的初始化,以及实例对象(VkInstance)的构建。当实例创建完成之后,需要检查当前系统是否存在可用的物理设备(VkPhysicalDevice)。选择可用的物理设备,并通过实例对象创建一个对应的逻辑设备(VkDevice)。在 Vulkan程序当中,逻辑设备对象会被大多数的API所使用,它可以被视为是当前物理设备的一个逻辑表示。

API:

函数后面有2:意思是同一个功能函数有不同形式;

函数后面有khr:代表这是扩展功能,需要加载动态函数指针;

vkEnumerate InstanceLayerProperties:返回层的数量及其属性

 

  • 查找连接的物理设备,原型如下:

VkResult vkEnumeratePhysicalDevices (

VkInstance                   instance,

uint32_t*                       pPhysicalDeviceCount,

VkPhysicalDevice*       pPhysicalDevices);                   

 

 

  • 查询设备的队列族,原型如下:   

void vkGetPhysicalDeviceQueueFamilyProperties (

VkPhysicalDevice                   physicalDevice,

uint32_t*                                  pQueueFamilyPropertyCount,

VkQueueFamilyProperties*     pQueueFamilyProperties);

 

 

  • 图像平铺模式,通过字段tiling指定的,原型如下,这是枚举值参数,<example:对应的是tiling =VK_VK_IMAGE_TILING_OPTIMAL>:

typedef enum VkImageTiling {

VK_IMAGE_TILING_OPTIMAL = 0,  //最优平铺,一般最优平铺比线性平铺表现更好
VK_IMAGE_TILING_LINEAR = 1,   //线性平铺
VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000,
VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
} VkImageTiling;

 

  • 队列使用,字段sharingMode表示缓冲区在设备支持的多个缓冲区队列中如何使用,原型如下: 

typedef enum VkSharingMode {

VK_SHARING_MODE_EXCLUSIVE = 0,   //表明只会被一个队列使用访问
VK_SHARING_MODE_CONCURRENT = 1,
VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
} VkSharingMode;

 

posted @ 2022-04-22 15:31  支阿怪🔥  阅读(189)  评论(0)    收藏  举报