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

DirectX Intermediate Language之引言

DXIL 中间语言

DirectX 中间语言 DXIL

  本文介绍了 DirectX 中间语言(DXIL)的设计,用于支持将 HLSL 编程语言直接映射到 LLVM IR 中间表示形式,以便在 GPU 驱动程序中使用。这个版本的规范基于 LLVM 3.7,并使用元数据语法。
  在转换为低级别的DXIL IR之前,代码生成器会生成一个更高级别的IR,然后通过优化器将其转换为DXIL。这将高级构造(如用户定义类型、多维数组、矩阵和向量)降低到更简单的抽象,以便于驱动程序编译器中的快速即时编译。DXIL源自LLVM IR。
  LLVM正在迅速成为现代编译技术中的事实标准。LLVM框架提供了几个独特的功能,如充满活力的生态系统、完整的编译框架、模块化设计和合理的文档。我们可以利用这些功能来实现两个重要的目标: (1)首先,统一着色器编译工具链。DXIL是IR生成器(如HLSL和其他领域特定语言的编译器)与IR消费者(如IHV驱动程序即时编译器或离线XBOX着色器编译器)之间的约定。此外,该设计还提供了将当前HLSL IL(本文称为DXBC IL)转换为DXIL的功能。
  (2)其次,利用LLVM生态系统。微软将公开文档化DXIL,以吸引领域语言实现者并促进创新。使用基于LLVM的IR可以降低小团队的入门成本,因为小团队很可能将LLVM和Clang作为其主要编译框架。我们将提供DXIL验证器,以检查生成的DXIL的一致性。
  下面的图示展示了这些组件之间的联系:

image

  图中的"dxbc2dxil"元素是一个将现有的DXBC着色器字节码转换为DXIL的组件。优化器元素是一个组件,它接收高级别的IR,验证其有效性,对其进行优化,并生成有效的DXIL形式。验证器元素是一个公共组件,用于验证和签名DXIL。链接器是一个组件,它将预编译的DXIL库与入口函数结合起来,生成有效的着色器。

  DXIL不支持之前的实现中存在的以下HLSL特性。:

  • 着色器模型9及以下。微软可以通过DXIL能力级别来实现10level9着色器模型。
  • Effects
  • HLSL 接口。
  • 着色器压缩和解压缩。
  • 部分精度(Partial precision)。应使用半精度(Half)数据类型。
  • min10float 类型. Half data type should be used instead.
  • HLSL统一参数限定符
  • 当前的fxc遗留兼容模式适用于旧的着色器模型(例如,c寄存器绑定)。
  • PDB. 使用调试信息注释代替。
  • 计算着色器模型 cs_4_0
  • DXBC label, call,fcall constructs.

以下原则用于简化与LLVM组件的重用并增强可扩展性。

  • DXIL使用LLVM IR的子集,该子集对于HLSL是有意义的

  • 不对核心LLVM IR进行修改;即不添加新指令或基本类型

  • 通过元数据、LLVM内部函数或外部函数传递附加信息。

  • 命名前缀: 'llvm.dx','llvm.dxil','dx.',和'dxil.' 被保留。

LLVM IR有三种等效形式:可读的人类形式、二进制(位码)形式和内存中的形式。DXIL是一种二进制格式,基于LLVM IR位码格式的子集。该文档仅使用可读的人类形式来描述DXIL。

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