// Covers heap buffer layout qualifiers for inline buffer references and buffer types.
#version 460
#extension GL_EXT_descriptor_heap : require
#extension GL_EXT_structured_descriptor_heap : require
#extension GL_EXT_buffer_reference : require
#extension GL_EXT_buffer_reference2 : require
#extension GL_EXT_scalar_block_layout : require

layout(local_size_x = 1) in;

layout(buffer_type, std140) buffer Std140Type {
    vec4 v;
    uint x;
};

layout(buffer_type, std430) buffer Std430Type {
    vec4 v;
    uint x;
};

layout(buffer_type, scalar) buffer ScalarType {
    vec3 v;
    uint x;
};

layout(heap_offset = 512) resourceheap LayoutHeap {
    layout(buffer_reference, std140) buffer {
        vec4 v;
        uint x;
    } inlineStd140;
    layout(buffer_reference, std430) buffer {
        vec4 v;
        uint x;
    } inlineStd430;
    layout(buffer_reference, scalar) buffer {
        vec3 v;
        uint x;
    } inlineScalar;
    Std140Type typeStd140;
    Std430Type typeStd430;
    ScalarType typeScalar;
} layoutHeap;

layout(binding = 0, std430) buffer Result {
    uint value;
} resultBuffer;

void main()
{
    resultBuffer.value = layoutHeap.inlineStd140.x +
                         layoutHeap.inlineStd430.x +
                         layoutHeap.inlineScalar.x +
                         layoutHeap.typeStd140.x +
                         layoutHeap.typeStd430.x +
                         layoutHeap.typeScalar.x;
}
