#version 460 #extension GL_EXT_descriptor_heap : require #extension GL_EXT_structured_descriptor_heap : require #extension GL_EXT_scalar_block_layout : require #extension GL_EXT_buffer_reference : require layout(local_size_x = 1) in; layout(buffer_type, scalar) buffer DataBuffer { uvec2 vector; uint values[2]; }; layout(buffer_reference, scalar, buffer_reference_align = 4) buffer BufferReference { uint value; }; struct Material { uint count; DataBuffer dataBuffer; }; layout(heap_offset = 0) resourceheap BufferHeap0 { uint count; DataBuffer dataBuffer; BufferReference reference; Material materials[2]; } bufferHeap0; layout(heap_offset = 0) samplerheap SamplerHeap0 { uint count; } samplerHeap0; void writeValue(out uint value) { value = 1; } void updateValue(inout uint value) { value += 1; } void main() { uint index = (bufferHeap0.count + samplerHeap0.count) & 1u; bufferHeap0.dataBuffer.values[0] = bufferHeap0.count; bufferHeap0.materials[index].dataBuffer.vector.xy = uvec2(samplerHeap0.count); writeValue(bufferHeap0.dataBuffer.values[index]); updateValue(bufferHeap0.materials[index].dataBuffer.values[0]); bufferHeap0.reference.value = bufferHeap0.materials[index].count; }