Unexpeced value upon accessing an SSBO float

  alignment, c++, glsl, ssbo, vulkan

I am trying to calculate a morph offset for a gpu driven animation.

To that effect I have the following function (and SSBOS):

layout(std140, binding = 7) buffer morph_buffer
{
   vec4 morph_targets[];
};

layout(std140, binding = 8) buffer morph_weight_buffer
{
   float morph_weights[];
};

vec3 GetMorphOffset()
{
    vec3 offset = vec3(0);
    for(int target_index=0; target_index < target_count; target_index++)
    {
        float w1 = morph_weights[1];
        offset += w1 * morph_targets[target_index * vertex_count + gl_VertexIndex].xyz;
    }
   return offset;
}

I am seeing strange behaviour so I opened renderdoc to trace the state:

enter image description here

As you can see, index 1 of the morph_weights SSBO is 0. However if I step over in the built in debugger for renderdoc I obtain:

enter image description here

Or in short, the variable I get back is 1, not 0.

So I did a little experiment and changed one of the values and now the SSBO looks like this:

enter image description here

And now I get this:

enter image description here

So my SSBO of type float is being treated like an ssbo of vec4’s it seems. I am aware of alignment issues with vec3’s, but IIRC floats are fair game. What is happenning?

Source: Windows Questions C++

LEAVE A COMMENT