gpt4 book ai didi

glsl - 计算着色器和工作组

转载 作者:行者123 更新时间:2023-12-05 00:59:05 31 4
gpt4 key购买 nike

我想了解如何使用计算着色器。我在互联网上没有找到任何详细信息。什么是工作组?

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

什么意思?

vkCmdDispatch(cmdBuffer, 1, 1, 1);

Shader和函数中的值应该一样吗?

最佳答案

为了理解计算着色器的这些基本概念,OpenCL、OpenGL、Metal、D3D 和 CUDA 计算的 Material 也很重要:它们都使用类似的分层网格分割工作。

在 Vulkan 术语中,从最精细到最粗糙的层次结构是:调用(又名线程)> 子组 > 本地工作组 > 全局工作组(又名分派(dispatch))。子组是一个更高级的主题;您现在可以忽略它们,因为它们大多是隐含的。只是为了混淆,人们通常只说“工作组”,而他们的意思是“本地工作组”。

着色器中的 layout(local_size) 声明根据各个调用定义本地工作组的维度。 vkCmdDispatch 的参数以本地工作组的形式给出了全局工作组的维度。

因此,如果您调用 vkCmdDispatch(cmdbuf, M, N, P) 并且当前管道中的计算着色器声明了 layout (local_size_x=X, local_size_y=Y, local_size_z=Z) ,然后 Vulkan 将运行 MxNxP 本地工作组,每个工作组都由着色器的 XxYxZ 调用组成。

在每次调用中,您可以使用 GLSL built-in input variables 找出它在本地和全局网格中的位置。 gl_NumWorkGroupsgl_WorkGroupIDgl_LocalInvocationIDgl_GlobalInvocationIDgl_LocalInvocationIndex

关于glsl - 计算着色器和工作组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54750009/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com