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.7 KiB68 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    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}