• Vulkanished2021重要内容简介


    新的Vulkan特性

    1. fragment shading rate, 就是D3D中的VRS,这个骁龙888芯片已经支持了
    2. Ray Tracing final spec
      1. 为了支持多种机型,拆成三个sub extensions
        1. VK_KHR_acceleration_structure
        2. VK_KHR_ray_tracing_pipeline
          1. 低端机型可以不用支持这个
        3. VK_KHR_ray_query
    3. Video Encode/Decode Extension
    4. 新的同步机制
      1. stage变多了,stage flag和access flag改为64位
      2. 使用一个数组替代原有的多个数组
        1. 将原有的VkSemaphoreVkPipelineStageFlags数组合并为一个VkSemaphoreSubmitInfoKHR数组
      3. 之前是用的一个pipeline stage,现在改为每个barrier使用一个(这个很合理)
      4. 在vkCmdSetEvent的时候指定pipeline barrier,而不是vkCmdWaitEvent
      5. 更简单的image layout transition
    5. 提供办法可以调试出现device lost的情况
      1. 目前NVidia有AfterMath,这是要做一个统一各平台的方案么
    6. 减少PSO创建的耗时
    7. 简化RenderPass/Subpass的使用

    Vulkan Layer系统

    这部分主要讲之前一直都令人费解的Vulkan Layer系统。

    整个Vulkan应用的架构是这样的,Vulkan Application直接和Vulkan Loader对话,通过Vulkan Loader获得统一的API。

    对这些API的调用可以由Vulkan Layers来进行hook,可用来实现诸如validation, trace等功能。
    image

    1 Vulkan Override Layer

    这是一个隐式元layer,用来控制其他layer的行为

    1. 控制其他layer的执行顺序
    2. 排除特定的layer
    3. 根据特定应用选择是否覆写默认的layer设置

    2 Vulkan Configurator

    Vulkan Configurator是随Vulkan SDK附带的一个应用,它可以生成两个文件,用来控制Vulkan Loader的行为。

    1. VkLayer_override.json,记录哪些layer的设置是需要覆写的
    2. vk_layer_settings.txt,记录具体layer的设置
      layer的说明,包括其有哪些设置可以用,是放在vulkan layer manifest json文件中的

    2.1 vk_layer_settings.txt

    默认路径

    1. windows:路径存在注册表HKEY_LOCAL_MACHINEHKEY_CURRENT_USER的子项Software\Khronos\Vulkan\Settings
      1. 这个路径还可以被VK_LAYER_SETTINGS_PATH环境变量的值覆盖
    2. unix:路径为~/.local/share/vulkan/settings.d

    2.2 VKLayer_override.json

    记录哪些layer是需要强制排除的和哪些layer是需要强制打开的。

    默认路径

    1. windows:路径存在注册表HKEY_LOCAL_MACHINEHKEY_CURRENT_USER的子项Software\Khronos\Vulkan\ImplicitLayers
    2. unix:路径为~/.local/share/vulkan/implicit_layer.d

    这个文件是全局唯一的,但是可以控制只应用于特定的应用程序。

    2.3 Vulkan Layer Manifest

    Manifest描述了一个layer的元信息,利用这些信息可以组织Vulkan Configurator的UI,从而可以交互式地生成vk_layer_settings.txt设置文件

    几个重要的值为

    1. file_format_version:只有高于1.2.0的版本,才能被Vulkan Configurator使用
    2. api_version:针对的是哪个版本的Vulkan
    3. implementation_version:Layer自己的版本
    4. layer:具体信息
    5. layer.features.settings:存储设置元信息

    其他的值可参考原文档

    3 Helper C++ Vulkan Layer setting library

    可以帮助Layer获得其需要的设置信息

    Vulkan Synchronization

    这个真是老生常谈的话题,足以见得同步在Vulkan中的使用之复杂。

    1 同步类型

    1.1 Execution Dependencies

    两个GPU操作之间执行上的依赖关系

    1.2 Memory Dependencies

    除了执行上的依赖关系,还有内存依赖关系,体现在一个操作对内存的操作需要flush或invalidate之后另一个操作才能得到有效的数据

    2 常见的同步错误

    类型 全称 描述
    RAW read after write 同一个queue中的写和读没有同步
    WAR write after read 同一个queue中的读和写没有同步
    WAW write after write 同一个queue中的写和写没有同步
    WRW write racing write 不同queue或不同subpass中的写和写没有同步
    RRW read racing write 不同queue或不同subpass中的读和写没有同步

    3 小同步:Pipeline Barrier

    3.1 Execution Dependency Chains

    如果前后两个barrier A和B,A的DstStage和B的SrcStage相同或A的DstStage比B的SrcStage晚(这里有些疑问),则两个构成一个Dependency Chain Pair。

    同样的情况还发生于Barrier的DstStage和Semaphore的WaitStage相同的情形。

    4 大同步:Semaphore and Fence

    会同步之前所有提交的GPU命令的执行和访存

    5 RenderPass隐藏的同步

    1. LOAD_OP_DONT_CARE会有一个write操作
    2. 光栅化的先后顺序是自动保证的
      1. AMD有扩展可以去掉这个顺序保证,可以提升性能
    3. 在subpass内使用pipeline barrier必须是self dependency的
    4. 内部的subpass dependency(srcSubpass和dstSubpass都不为EXTERNAL)不会影响外部的命令
    5. implicit external subpass dependnecy只负责做layout transition,不会对同步有任何影响
  • 相关阅读:
    对于ajax传递中文乱码问题,研究js encodeURI 与request.HtmlEncode的区别
    对于sa无法登陆,如何用windows身份验证来修改密码
    ASP.Net中自定义Http处理及应用之HttpHandler篇 1
    ReportViewer报表控件解析与使用(原)
    HttpUtility.UrlEncode,Server.UrlEncode 的区别
    xsl xml 以及 树的编写(原创)
    【转】存储过程的优缺点
    【转】关闭模态子窗口后刷新父窗口
    【转】ASP.NET 文件下载
    【转】去除HTML标签的方法
  • 原文地址:https://www.cnblogs.com/hamwj1991/p/15593326.html
Copyright © 2020-2023  润新知