| #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 |
| |
| layout(local_size_x = 1) in; |
| |
| layout(buffer_reference) buffer ForwardRefType; |
| |
| layout(buffer_reference, std430, buffer_reference_align = 16) buffer VertexBuffer { |
| vec4 positions[]; |
| }; |
| |
| layout(heap_offset = 256) resourceheap RefHeap { |
| VertexBuffer vertexBuffer; |
| layout(buffer_reference, std430) buffer { |
| uint data; |
| } inlineRef; |
| ForwardRefType forwardRef; |
| layout(buffer_reference, std430, buffer_reference_align = 4) buffer { |
| uint data; |
| } inlineRef2; |
| } refHeap; |
| |
| layout(buffer_reference, std430) buffer ForwardRefType { |
| float value; |
| uint count; |
| }; |
| |
| layout(binding = 0, std430) buffer Output { |
| vec4 position; |
| uint count; |
| uint inlineData; |
| uint inlineData2; |
| } outputBuffer; |
| |
| void main() |
| { |
| outputBuffer.position = refHeap.vertexBuffer.positions[0]; |
| outputBuffer.count = refHeap.forwardRef.count + uint(refHeap.forwardRef.value); |
| outputBuffer.inlineData = refHeap.inlineRef.data; |
| outputBuffer.inlineData2 = refHeap.inlineRef2.data; |
| } |