Glsl 如何使用comptu着色器(ssbo)在一个缓冲区中使用两个数组?

Glsl 如何使用comptu着色器(ssbo)在一个缓冲区中使用两个数组?,glsl,vulkan,compute-shader,Glsl,Vulkan,Compute Shader,其中struct在.cpp中 ` 通过计算,我用outkernel.data读取数据,但结果是3,而不是2。我不知道为什么inkernel.cal的值更改为3,而不是2,这些值不必位于同一ssbo中 layout(binding = 0) buffer In { float indata[]; }inkernel1; layout(binding = 1) buffer In { float cal[]; }inkernel2; layout(binding = 2) buff

其中struct在.cpp中

`


通过计算,我用outkernel.data读取数据,但结果是3,而不是2。我不知道为什么inkernel.cal的值更改为3,而不是2,这些值不必位于同一ssbo中

layout(binding = 0) buffer In 
{
   float indata[];
}inkernel1;
layout(binding = 1) buffer In 
{
   float cal[];
}inkernel2;

layout(binding = 2) buffer Out 
{
   float outdata[];
}outkernel;
缓冲区仍然是一样的,您只需要调整描述符

layout (local_size_x = 4) in;
// Binding 0 : for test
layout(binding = 0) buffer In 
{
   float indata[];
   float cal[];
}inkernel;

layout(binding = 1) buffer Out 
{
   float outdata[];
}outkernel;


void main()
{   
   uint index = gl_GlobalInvocationID.x;
   outkernel.outdata[index] = inkernel.cal[index];
} `
layout(binding = 0) buffer In 
{
   float indata[];
}inkernel1;
layout(binding = 1) buffer In 
{
   float cal[];
}inkernel2;

layout(binding = 2) buffer Out 
{
   float outdata[];
}outkernel;