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

和窗口取得联系

添加新评论

2 + 4 =


已有 10 条评论

    Sep 23, 2024 回复

    叼茂SEO.bfbikes.com


    Sep 23, 2024 回复

    叼茂SEO.bfbikes.com


    Sep 23, 2024 回复

    想想你的文章写的特别好


    Sep 27, 2024 回复

    怎么收藏这篇文章?


    Sep 27, 2024 回复

    怎么收藏这篇文章?


    Oct 1, 2024 回复

    看的我热血沸腾啊https://www.237fa.com/


    Oct 19, 2024 回复

    哈哈哈,写的太好了https://www.cscnn.com/


    Oct 31, 2024 回复

    你的文章让我感受到了正能量,非常棒!http://www.xufangxued.com.cn


    Nov 1, 2024 回复

    你的文章让我学到了很多技能,非常实用。http://www.shmengpai.com


    Nov 8, 2024 回复

    你的文章充满了创意,真是让人惊喜。http://www.szyagong.com




开心才是最重要的啦~