blob: c116faee4e769c674d66c865efb2013d51fbc36a [file]
#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 {
uint data0;
uint data1;
};
layout(buffer_type, scalar) readonly buffer ReadOnlyBuffer {
uint value;
};
layout(buffer_type, scalar) uniform UniformBuffer {
uint value;
};
layout(buffer_reference, scalar, buffer_reference_align = 4) buffer BufferReference {
uint value;
};
struct HeapData {
uvec2 vector;
uint values[2];
};
layout(heap_offset = 0) resourceheap BufferHeap0 {
uint count;
DataBuffer dataBuffer;
ReadOnlyBuffer readOnlyBuffer;
UniformBuffer uniformBuffer;
BufferReference reference;
HeapData data;
} 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 = gl_GlobalInvocationID.x & 1u;
bufferHeap0.count = 3; // Issue #4399: the heap itself is read-only.
bufferHeap0.count += 1;
++bufferHeap0.count;
bufferHeap0.count--;
bufferHeap0.data.vector.xy = uvec2(1);
bufferHeap0.data.values[0] = 1;
bufferHeap0.data.values[index] = 1;
writeValue(bufferHeap0.count);
updateValue(bufferHeap0.data.values[index]);
samplerHeap0.count = 3;
bufferHeap0.dataBuffer = bufferHeap0.dataBuffer;
bufferHeap0.reference = bufferHeap0.reference;
bufferHeap0.readOnlyBuffer.value = 1; // Buffer access must still honor readonly.
bufferHeap0.uniformBuffer.value = 1; // Uniform buffer contents are also read-only.
}