Mesa/OpenGL 源码分析:Context 与 Shader 编译机制
TL;DR;
在 Mesa 早期版本的实现中,OpenGL context 其实就是一个存在 TLS 中的大结构体,保存了诸如固定管线状态、shader 源代码、已编译的 IL 之类的东西。
而 glShaderSource 只是复制了源代码,glCompileShader 则是对源代码进行预处理、语法语义分析,并生成 Mesa 定义的 IL 代码。
前段时间 AMD 有一个关于 AMDVLK 开源项目 discontinue 的 announcement,其中提到他们准备转向 RADV,这是一个 Mesa 下属的 Vulkan driver。于是借此机会,我也想花点时间来看看这个 Mesa 项目。