• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LOFLY
终其一生,编织快乐
博客园    首页    新随笔    联系   管理    订阅  订阅

DXIL之版本化

DXIL

DXIL之版本控制(Versioning)

  DXIL着色器中有三种版本控制机制:着色器模型(shader model)、DXIL版本和LLVM位码版本。

  在高层次上,着色器模型描述了目标执行模型和环境;DXIL提供了一种表达程序的机制(包括关于数据类型和操作的规则);而LLVM位码提供了一种编码DXIL程序的方式。

着色器模型 (Shader Model)

  DXIL中的着色器模型与DXBC的着色器模型类似。着色器模型指定了执行模型,着色器指令可以使用的功能集以及着色器程序必须遵守的约束。

  着色器模型在DXIL中被指定为一个命名的元数据。

!dx.shaderModel = !{ !0 }
!0 = !{ !"<shadelModelName>", i32 <major>, i32 <minor> }

<shadelModelName><major><minor>可以支持以下值:

  DXIL验证器确保DXIL符合指定的着色器模型要求。

  对于6.0之前的着色器模型,只有适用于DXIL表示的规则是有效的。例如,最大资源数量的限制是被遵守的,但是寄存器数量的限制则不适用,因为DXIL没有对寄存器的表示方式。

DXIL的版本

  推进HLSL功能演变的主要机制是通过着色器模型。然而,DXIL版本是为了未来扩展的额外灵活性而保留的。目前定义了两个版本:1.0和1.1。

  DXIL版本具有主要版本和次要版本,这些版本被指定为命名元数据:

!dx.version = !{ !0 }
!0 = !{ i32 <major>, i32 <minor> }

   DXIL版本必须在每个LLVM模块(翻译单元)中仅声明一次,并且在整个模块范围内有效。

   DXIL将以保持向后兼容性的方式进行演进。

DXIL 1.1 变化

  DXIL1.1(Shader Model 6.1)引入的两个主要功能是视图实例化和重心坐标。具体而言,对DXIL表示进行了以下更改。

  • 新增的内置(Intrinsics )- AttributeAtVertex ,ViewID
  • 新的系统生成值- SV_Barycentrics
  • 新增容器部分 - ILDN

DXIL 1.2变化

DXIL的操作:
RawBufferLoad 用于ByteAddressBuffer

RawBufferStore 用于 StructuredBuffer

将 fp32-denorm-mode=<value> 作为float32的函数属性,用于指定denorm模式。

LLVM Bitcode version

  DXIL的当前版本基于LLVM Bitcode v3.7。此编码必然受到DXIL模块外部因素的影响。




名称解释

   Bitcode是一种中间表示形式,它是由LLVM编译器生成的一种低级别的、平台无关的二进制格式。它可以被进一步转换为不同的目标平台的机器代码,或者在需要时重新优化和重编译。   与传统的目标文件相比,Bitcode包含了高级别的语义信息和编译器优化的结果。它不仅包含了源代码的结构和指令序列,还包含了类型信息、控制流图、符号表等数据,这使得它具有更多的灵活性和可移植性。    Bitcode的一个重要特点是可以进行后期优化。通过将Bitcode保留在编译过程的中间阶段,可以在之后的阶段中进行针对具体平台的优化,包括指令选择、寄存器分配和指令调度等。这使得Bitcode在跨平台编译、代码优化和程序分析等领域具有广泛的应用。
Denorm mode(非规格化模式)是计算机中浮点数运算的一种模式。在浮点数表示中,正常的规格化浮点数(normalized numbers)有一个隐含的首位非零位,而非规格化浮点数(denormalized numbers)则没有隐含的首位非零位。

当一个浮点数的指数部分全为0时,会被视为非规格化浮点数。非规格化浮点数可以表示接近零的值,但它们的精度相对较低。Denorm mode允许在浮点数运算中使用非规格化数值,以提供更大范围的表达能力,但会降低精度。

Denorm mode指定了如何处理非规格化浮点数的操作,例如加法、乘法等。它可以在浮点数运算中控制非规格化数值的处理方式,从而影响计算结果的精度和范围。不同的Denorm mode设置可以在性能和精度之间进行权衡。

下一节

posted @ 2023-06-25 16:01  编织快乐  阅读(142)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3