一:概述
NIR 是Mesa 的通用中间表示,适用于所有图形API和硬件后端。本文介绍下NIR的设计架构。包括NIR核心数据结构,NIR优化过程,NIR降级和验证。
二:架构概览
NIR 作为Mesa中所有着色器的汇聚点,提供了一种通用表示,使得不同前端语言(GLSL、SPIRV、TGSI)和后端(LLVM、ACO、IR3、PCO)之间能够共享优化架构。
三:核心设计原则
在介绍核心设计原则之前,先介绍下什么是SSA,SSA就是每个变量只被定义(赋值)一次。 拿GLSL举例,看下面这段代码,a被多次赋值:
void main() { float a = 1.0; a = a + 2.0; a = a * 3.0; gl_FragColor = vec4(a); }但这段代码从编译器内部看,这种形式不好分析和优化,编译器会把它重新成SSA的形式: