yum-mirror/glslang
git clone https://git.yummers.dev/yum-mirror/glslang
8b68880b
main
1#version 460 2#extension GL_EXT_descriptor_heap : require 3#extension GL_EXT_structured_descriptor_heap : require 4#extension GL_EXT_scalar_block_layout : require 5#extension GL_EXT_buffer_reference : require 6 7layout(local_size_x = 1) in; 8 9layout(buffer_type, scalar) buffer DataBuffer { 10 uint data0; 11 uint data1; 12}; 13 14layout(buffer_type, scalar) readonly buffer ReadOnlyBuffer { 15 uint value; 16}; 17 18layout(buffer_type, scalar) uniform UniformBuffer { 19 uint value; 20}; 21 22layout(buffer_reference, scalar, buffer_reference_align = 4) buffer BufferReference { 23 uint value; 24}; 25 26struct HeapData { 27 uvec2 vector; 28 uint values[2]; 29}; 30 31layout(heap_offset = 0) resourceheap BufferHeap0 { 32 uint count; 33 DataBuffer dataBuffer; 34 ReadOnlyBuffer readOnlyBuffer; 35 UniformBuffer uniformBuffer; 36 BufferReference reference; 37 HeapData data; 38} bufferHeap0; 39 40layout(heap_offset = 0) samplerheap SamplerHeap0 { 41 uint count; 42} samplerHeap0; 43 44void writeValue(out uint value) { 45 value = 1; 46} 47 48void updateValue(inout uint value) { 49 value += 1; 50} 51 52void main() { 53 uint index = gl_GlobalInvocationID.x & 1u; 54 bufferHeap0.count = 3; // Issue #4399: the heap itself is read-only. 55 bufferHeap0.count += 1; 56 ++bufferHeap0.count; 57 bufferHeap0.count--; 58 bufferHeap0.data.vector.xy = uvec2(1); 59 bufferHeap0.data.values[0] = 1; 60 bufferHeap0.data.values[index] = 1; 61 writeValue(bufferHeap0.count); 62 updateValue(bufferHeap0.data.values[index]); 63 samplerHeap0.count = 3; 64 bufferHeap0.dataBuffer = bufferHeap0.dataBuffer; 65 bufferHeap0.reference = bufferHeap0.reference; 66 bufferHeap0.readOnlyBuffer.value = 1; // Buffer access must still honor readonly. 67 bufferHeap0.uniformBuffer.value = 1; // Uniform buffer contents are also read-only. 68}