自学内容网 自学内容网

理解计算着色器中glsl语言的内置变量

概要

本文通过示例的方式,着重解释以下几个内置变量:

  • gl_WorkGroupSize
  • gl_NumWorkGroups
  • gl_LocalInvocationID
  • gl_WorkGroupID
  • gl_GlobalInvocationID

基本概念

局部工作组与工作项

一个3x2x1的局部工作组示例如下,每个小篮格子表示一个工作项,每个工作项会执行计算着色器
局部工作组示例图
gl_WorkGroupSize表示局部工作组的三维大小,在这里,gl_WorkGroupSize = (3,2,1)
此外,在glsl中,使用如下代码设置gl_WorkGroupSize

layout (local_size_x = 3, local_size_y = 2, local_size_z = 1) in;

默认值为1,也可这样设置

layout (local_size_x = 3, local_size_y = 2) in;

全局工作组

一个2x3x1的全局工作组示例如下,由局部工作组组成
全局工作组示例图
gl_NumWorkGroups表示工作组的三维数量,在这里,gl_NumWorkGroups = (2,3,1)
在opengl中使用如下方法设置工作组数量

glDispatchCompute(2,3,1);

执行中的工作组与工作项

一个2x3x1的全局工作组示例如下,橙色表示当前正在执行的工作组,绿色表示当前正在执行的工作项
执行中的工作组与工作项示例图
gl_LocalInvocationID表示在执行的工作项在局部工作组中的位置,gl_LocalInvocationID = (0,1,0)
gl_GlobalInvocationID表示在执行的工作项在全局工作组中的位置,gl_GlobalInvocationID = (3,3,0),计算公式如下:
g l _ G l o b a l I n v o c a t i o n I D = g l _ W o r k G r o u p I D × g l _ W o r k G r o u p S i z e + g l _ L o c a l I n v o c a t i o n I D gl\_GlobalInvocationID = gl\_WorkGroupID \times gl\_WorkGroupSize + gl\_LocalInvocationID gl_GlobalInvocationID=gl_WorkGroupID×gl_WorkGroupSize+gl_LocalInvocationID
gl_WorkGroupID表示执行的工作组中全局工作组中的位置,gl_WorkGroupID = (1,1,0)
gl_LocalInvocationIndex表示在执行的工作项在局部工作组中的索引,gl_LocalInvocationIndex = 3,计算公式如下:
g l _ L o c a l I n v o c a t i o n I n d e x = g l _ L o c a l I n v o c a t i o n I D . z × g l _ W o r k G r o u p S i z e . x × g l _ W o r k G r o u p S i z e . y + g l _ L o c a l I n v o c a t i o n I D . y × g l _ W o r k G r o u p S i z e . x + g l _ L o c a l I n v o c a t i o n I D . x \begin{align*} gl\_LocalInvocationIndex &= gl\_LocalInvocationID.z \times gl\_WorkGroupSize.x \times gl\_WorkGroupSize.y \\&+ gl\_LocalInvocationID.y \times gl\_WorkGroupSize.x \\&+ gl\_LocalInvocationID.x \end{align*} gl_LocalInvocationIndex=gl_LocalInvocationID.z×gl_WorkGroupSize.x×gl_WorkGroupSize.y+gl_LocalInvocationID.y×gl_WorkGroupSize.x+gl_LocalInvocationID.x

参考文章

  1. 使用计算着色器(Compute Shader)模拟粒子效果【OpenGL】【GLSL】
  2. OpenGL 计算着色器
  3. OpenGL学习-高级OpenGL-ComputeShader

原文地址:https://blog.csdn.net/weixin_44611096/article/details/136353487

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!