Vulkan入门笔记
Vulkan笔记之设备初始化:
1.查询所有vk接口,从vulkan-1.dll里面进行查询,库会进行导出
2.创建窗口,创建vkInstance,根据需求决定是否需要vk validation layers(验证层,来确定vk的调用是否失败以及失败代码)
3.vkPhysicalDevice选择,其实就是显示设备的选择(显卡),vk可以像dx一样对所有显卡进行枚举,查询显卡的扩展和支持,然后选择合适的显卡
4.queue family,渲染队列族群,应该是和dx12的commandQueue一样的概念,比如dx12 有3d queue,compute queue, copy queue。vulkan也有类似的不同的queue,每个queue包含一些命令的子集,比如有一个queue family只允许执行compute计算命令,而有一个queue只允许内存转换的相关命令,使用vkGetPhysicalDeviceQueueFamilyProperties查询queue familiy列表,这个函数需要之前查询到的物理设备对象作为参数传入到函数中进行查询,这一步其实也是为了筛选出最合适的物理显示设备。
5.选择好物理设备后,我们需要创建一个逻辑设备与之进行交互。逻辑设备结构就是VKDevice,创建过程与vkInstance相似。首先我们需要指定vkDeviceQueueCreateInfo,也就是指定需要创建queue的数量,目前我们只需要创建一个queue,因为可以在不同线程上创建素有的command buffers,然后再提交到主线程。逻辑设备创建结构体vkDeviceCreateInfo,需要指定queue数量,查询到的物理设备扩展,查询到的验证图层(validation layers),设备特征,比如是否支持geometry shaders,然后通过vkCreateDevice创建出逻辑设备,这个指令可以返回错误,比如启动了不存在的扩展,或者指定了不支持的特征。(逻辑设备不会直接与vkInstance进行交互)。
6.queue句柄获取,queuej句柄会随着逻辑设备的创建而自动创建出来,每一个queue family对应一个queue handle,可以通过vkGetDeviceQueue获取到queue handle。