与上一代图形编程接口相比,Direct3D 12 可编程管道显著提高了呈现性能。
Direct3D 12 图形管道
下图演示了 Direct3D 12 图形管道和状态。
说明 direct3d 12 管道和状态关系图
图形管道是 GPU 呈现帧时数据输入和输出的顺序流。 给定管道状态和输入,GPU 将执行一系列作来创建生成的图像。 图形管道包含着色器,它们执行可编程呈现效果和计算,以及固定函数作。
在引用管道状态关系图时,请注意以下事项:
- 可以任意排列描述符表和堆:可以按任意顺序引用和分配 SRV、CBV 和 UAV。
- 管道的某些作是可配置的。 例如,输出合并通常使用呈现目标和深度模具视图以读写方式运行。 但是,可以配置管道,以便这些视图是只读的或只读的。
- 静态采样器不是根参数的一部分,因为它们是静态的。
管道状态对象
Direct3D 12 引入了管道状态对象(PSO)。 管道组件(如输入汇编程序、光栅器、像素着色器和输出合并)的状态存储在 PSO 中,而不是跨大量高级对象存储和表示管道状态。 PSO 是创建后不可变的统一管道状态对象。 当前所选的 PSO 可以快速动态更改,硬件和驱动程序可以直接将 PSO 转换为本机硬件指令和状态,为图形处理准备 GPU。 若要应用 PSO,硬件会将最少的预计算状态直接复制到硬件寄存器。 这样就消除了图形驱动程序持续重新计算硬件状态造成的开销,具体取决于所有当前适用的呈现和管道设置。 结果是显著减少绘图调用开销、提高性能,以及每个帧的绘图调用数更多。
当前应用的 PSO 定义并连接呈现管道中使用的所有着色器。 Microsoft高级着色器语言(HLSL) 预编译为着色器对象,然后在运行时用作管道状态对象的输入。 有关如何在图形管道中运行 PSO 的详细信息,请参阅 在 Direct3D 12中管理图形管道状态。
Direct3D 12 计算管道
下图说明了 Direct3D 12 计算管道和状态。
显示 Direct3D 12 计算管道的
此管道中没有固定函数单元,但是描述符堆、采样器堆和静态采样器仍可用于计算。
相关主题
-
Direct3D 12 中的 工作提交