Vulkan

传统与现代 RHI对比

传统——几乎所有的绘制命令都依赖隐式或者显式的Context调用 CPU等待GPU性能不对等 驱动层有更多的权重
现代——依赖程序自身的认知,需要开发人员关心同步和内存分配 多线程更友好 GPU计算的掌握权在开发者
驱动不干活要 写出高性能程序比较困难 熟练的可以使驱动层非常薄
学习曲线 传统->现代 openGL->D3D11->Vulkan

程序流水线

初始化->
调用os的API创建程序可以显示的窗口(可以是第三方库)
初始化Vulkan
程序与库取得联系
Vulkan和显卡设备取得联系
创建Swapchian
Vulkan和显示窗口取得联系
渲染主循环->
输入
几何信息
uniform
输出
屏幕中的画面
逻辑
着色器
更新CPU端的业务逻辑
数据CPU拷贝到GPU
生产Vulkan Command Buffrt 把显然任务交给GPU并在屏幕中下面睡觉哦
退出程序
释放Vulkan对象,以及CPU的数据
关闭程序窗口

初始化

首先 需要关心窗口类型是WIn32 XCB WALAND 后续创建Swapchain会需要这些信息,可以通过第三方库来获取

使用场景

程序->实例->物理设备->逻辑设备->队列
设计复杂的现实环境方便更多的物理设备能够更好的利用

创建Vulkan Instance 初始化Vulkan library
app-> loader->layerA->layerB
layer-类似于函数重载 提供一个可以重写函数的方式,可以重载对应的Vulkan函数,并传给下一层layer
VulkanExampleBase::createInstance()
vkCreateInstance
VkInstanceCreateInfo
VkApplicationInfo

获取Vulkan Instance和显卡的联系
VulkanExampleBase::initVulkan()
vkEnumeratePysicalDeices

所有的Command都系要上传到VkQueue
不同来源的队列簇Queue Family Properties只允许部分类型的Command
VulkanDevice::createLogicalDevice
VkDevicrQueueCreateInfo
vkGetPhysicalDeviceQueueFamilyProperties

物理设备有了,需要一个逻辑设备和Vulkan做交互
从逻辑设备中获取命令队列
VlkanDevice::createLogicalDevice
VkDeviceQueueCreayeInfo
VkDeviceCreayeInfo
vkCreateDevice

和窗口取得联系

添加新评论

4 + 15 =




开心才是最重要的啦~