Ubuntu 的 OpenGL 环境

GLVND(Vendor Neutral GL dispatch library)

Source Directory Target APT Package
GLX
EGL
GLDispatch libGLdispatch.so libglvnd0
OpenGL libOpenGL.so libopengl0
GLESv1 libGLESv1_CM.so libgles1
GLESv2 libGLESv2.so libgles2
GL libGL.so.1.7.0 libgl1

Mesa

APT Package Target Description
libglapi-mesa libglapi.so free implementation of GL API
libgles2-mesa transitional dummy package

ReadPixels in Mesa

glReadPixels

glReadPixels 是将当前绑定的 FBO 里的内容从显存(renderbuffer, 通常是 read renderbuffer) 读到 *data 指向的内存。

1
2
3
void glReadPixels(GLint x, GLint y,
GLsizei width, GLsizei height,
GLenum format, GLenum type, void *data);

Replacing NIR with SPIR-V?

“Replacing NIR with SPIR_V?” 是mesa-dev maillist 上2022-01-20的一封邮件主题. 从邮件讨论中我了解到了许多知识,在此记录一下。

名词 全称 解释
IR Intermediate Representation 编译器中使用的中间表示,一般是编译器优化 Pass 和后端的输入
NIR New IR Mesa 中专门为 Graphics shader 设计的一种 IR, 它可以作为特定后端的输入,如 LLVM AMDGPU 后端
SPIR Standard Portable IR 一种用于并行计算和图形的中间语言(interchage language), 由 Khronos Group 在 2012 年引入
SPIR-V SPIR-Vulkan 由 Khronos Group 在 2015 年引入,用来替代原来的 SPIR
RISC Reduced Instruction Set Computer 精简指令集, 与 CISC 相对
RISC-V RISC five 由加州 Berkeley 大学开发的一种开放且模块化的 RISC 指令集架构
SIMD Single Instruction Multiple Data 费林分类法(Flynn’s Taxonomy) 中的一种,其它的还有 SISD, MIMD, MISD
SIMT Single Instruction Multi-Threads SIMD 的一种子类型

我从围棋中学到的

“棋”中定有它的道理

最近和朋友的孩子下了几盘棋,在惊叹现在孩子的聪慧和学习能力之余,也深感自己的“棋艺”着实有待提高。便又拣起荒废已久的弈城账号,想下几盘找找感觉,结果又一次应了那句,“业精于勤,荒于嬉”。失落之余,索性去 B 站,重看邱百瑞老师的带你零基础学围棋.
再看确实有不一样的感受。围棋的奥妙和那些千古流传的棋理自不必多说,我想自己学习下棋,试着了解棋理的原因,也是被围棋这种“方寸之间有天地,黑白之处显乾坤”的魅力所折服。

征子与引征

征子也叫“扭羊头”,是吃子的一种技巧。邱老师说,征子既厉害又危险。一旦征子失败,“原来追别人的棋现在全变成自己的断点,刚才追得很高兴,现在大概也死得很惨”。

征子

兵家有云,“穷寇莫追”。虽然有可能将对方赶尽杀绝,但也可能在追的时候将自己置于危险之中。竞争也是一样,如果一味地想超越对手,很可能最后把自己搞得惨不忍睹。

围棋里“勇敢”的行为,扑 (uchikaki, throw-in), 含有置之死地而后生之意。

扑

基本棋形的死活

棋形 死活类型
直三 后手活
直四
曲四
丁四 后手活
方四
直五
曲五
聚五 后手活
刀把五 后手活
板六
梅花六 后手活
聚七

围地的常识

围棋的争夺主要有两大部分

  • 围杀对方的子
  • 高效地围地

高效地围地才是决定胜负的关键,而围杀对方的子只不过是其中一种手段罢了。

围地的效率

中国规则的数子与日本规则的数目

围棋的中国规则是以数子计算,任意选择一方来数棋盘上的活子数以及活子围成的空(交叉点),为了计算方便,一般会用己方的棋子先把围成的空填满。

而日本规则是数目,所谓“目”,即围成的空。日本规则之所以不去关心棋盘上的活子的数量,而只计算围成的空,是因为围棋一人一手的规则决定了双方算上被吃的死子,在棋盘上放过的子数一定是相等的。所以日本规则在点目前,要将吃掉的对方的死子填入对方围成的空中之后,再清点目数。一目也即一个交叉点。这也是常说的“吃一子的价值是两目棋”的道理。

AMDGPU 驱动(KMD + UMD)中的一些缩写词解释

AMDGPU Microarchitecture Roadmap

缩写 全称 解释
IB Indirect Buffer AMD GPU 提供 Indirect Buffer 的方式由 CPU 向 GPU 传递渲染命令
CDNA Compute DNA AMD 第5代计算核心微架构名称
DCN Display Controller Next AMD 第4代显示芯片的微架构名称
GCN Graphics Core Next AMD 第4代 GPU 微架构名称
GDS Global Data Storage Global on-chip data storage used to share data across shader threads
GDS OA GDS Ordered Append Ordered append, used by 3D or Compute engines for appending data.
GMC Graphics Memory Controller This is how the different IPs on the GPU get the memory(VRAM or system memory)
GWS Global Wave Sync Global wave sync, used to synchronize the execution of all the waves on a device
KFD Kernel Fusion Driver AMD APU 芯片的内核驱动, 主要是驱动 HSA 芯片
KGD Kernel Graphics Driver AMD GPU 芯片的内核驱动, 主要是驱动独立显卡和 OEM 上的 GPU 芯片
RDNA Radeon DNA AMD 第5代 GPU 微架构名称, 也有说RaDeon New Architecture
UVD Unified Video Decoder AMD 开发的硬件视频解码引擎, 主要是完成硬件级别上加速视频解码任务
VCE Video Compression Engine AMD 开发的硬件视频编码引擎, 主是提供视频压缩和编码功能
VCN Video Codec Next AMD 第4代 VPU 微架构名称

备注:英文解释来自Kernel Doc

我在邮件列表里学英语

Communication is hard, especially with all the different personalities, languages, and
cultures involved in an international community like this.

Faith Ekstrand

It is rules and not our individual smarts that keep us from making mistakes.

Faith Ekstrand