yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

haorajiaprevent invalid stores when use GLSL_EXT_structured_descriptor_heap.8b68880b

main
1.2 KiB49 linesraw
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    uvec2 vector;
11    uint values[2];
12};
13
14layout(buffer_reference, scalar, buffer_reference_align = 4) buffer BufferReference {
15    uint value;
16};
17
18struct Material {
19    uint count;
20    DataBuffer dataBuffer;
21};
22
23layout(heap_offset = 0) resourceheap BufferHeap0 {
24    uint count;
25    DataBuffer dataBuffer;
26    BufferReference reference;
27    Material materials[2];
28} bufferHeap0;
29
30layout(heap_offset = 0) samplerheap SamplerHeap0 {
31    uint count;
32} samplerHeap0;
33
34void writeValue(out uint value) {
35    value = 1;
36}
37
38void updateValue(inout uint value) {
39    value += 1;
40}
41
42void main() {
43    uint index = (bufferHeap0.count + samplerHeap0.count) & 1u;
44    bufferHeap0.dataBuffer.values[0] = bufferHeap0.count;
45    bufferHeap0.materials[index].dataBuffer.vector.xy = uvec2(samplerHeap0.count);
46    writeValue(bufferHeap0.dataBuffer.values[index]);
47    updateValue(bufferHeap0.materials[index].dataBuffer.values[0]);
48    bufferHeap0.reference.value = bufferHeap0.materials[index].count;
49}