前言
compute shader是在OpenGL4.3(Opengl es 3.1)以后引入的一种专门用于并行计算的着色器。在计算着色器中,任务以组为单位进行执行,我们称之为工作组(work group)。拥有邻居的工作组被称为本地工作组(local workgroup), 这些组可以组成更大的组,称为全局工作组(global workgroup),而其通常作为执行命令的一个单位。
compute shader会被每个本地工作组中的每个单元调用一次。工作组的每一个单元称为工作项(work item),每次调用称为一次执行。执行的单元之间可以通过变量和显存进行通信,也可以通过执行同步操作保持一致性。下图显示了一个全局工作组。这个全局工作组包括16个本地工作组,每个本地工作组又包括16个执行单元,排成4X4的网格,每个执行单元拥有一个二维向量表示的索引值。尽管图示中,全局和本地工作组都是2维的,而事实上它们都是3维的,为了适应1维、2维的任务,只需把额外的2维或1维设为0即可。计算着色器的每个执行单元本质是相互独立的,可以并行地在支持OpenGL地GPU上执行。

compute shader性能突出,可以支持复杂的渲染及数据处理等,我们可以用其优化渲染性能,甚至可以做一些复杂数据处理,模型训练等。
实践
本人也是刚上手这个技术,结合着网上的资料,在Android侧率先完成了整个项目的跑通。接下

本文介绍了OpenGL Compute Shader,一种用于并行计算的着色器,从概念到实践,包括工作组、工作项的概念,以及在Android平台上的应用。在实践中,提到了兼容性、viewport设置、framebuffer清理、image2D权限和绑定方式等问题,并分享了关键代码,展示了在华为荣耀20 Pro手机上高效执行的例子。
最低0.47元/天 解锁文章
728

被折叠的 条评论
为什么被折叠?



