forked from KhronosGroup/glslang
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request KhronosGroup#1072 from amdrexu/feature
Implement extension GL_NV_shader_atomic_int64
- Loading branch information
Showing
8 changed files
with
347 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,215 @@ | ||
spv.atomicInt64.comp | ||
// Module Version 10000 | ||
// Generated by (magic number): 80001 | ||
// Id's are bound by 149 | ||
|
||
Capability Shader | ||
Capability Int64 | ||
Capability Int64Atomics | ||
1: ExtInstImport "GLSL.std.450" | ||
MemoryModel Logical GLSL450 | ||
EntryPoint GLCompute 4 "main" | ||
ExecutionMode 4 LocalSize 16 16 1 | ||
Source GLSL 450 | ||
SourceExtension "GL_ARB_gpu_shader_int64" | ||
SourceExtension "GL_NV_shader_atomic_int64" | ||
Name 4 "main" | ||
Name 8 "i64" | ||
Name 12 "u64" | ||
Name 14 "Buffer" | ||
MemberName 14(Buffer) 0 "i64" | ||
MemberName 14(Buffer) 1 "u64" | ||
Name 16 "buf" | ||
Name 84 "Struct" | ||
MemberName 84(Struct) 0 "i64" | ||
MemberName 84(Struct) 1 "u64" | ||
Name 86 "s" | ||
MemberDecorate 14(Buffer) 0 Offset 0 | ||
MemberDecorate 14(Buffer) 1 Offset 8 | ||
Decorate 14(Buffer) BufferBlock | ||
Decorate 16(buf) DescriptorSet 0 | ||
Decorate 16(buf) Binding 0 | ||
Decorate 148 BuiltIn WorkgroupSize | ||
2: TypeVoid | ||
3: TypeFunction 2 | ||
6: TypeInt 64 1 | ||
7: TypePointer Function 6(int) | ||
9: 6(int) Constant 0 0 | ||
10: TypeInt 64 0 | ||
11: TypePointer Function 10(int) | ||
13: 10(int) Constant 0 0 | ||
14(Buffer): TypeStruct 6(int) 10(int) | ||
15: TypePointer Uniform 14(Buffer) | ||
16(buf): 15(ptr) Variable Uniform | ||
17: TypeInt 32 1 | ||
18: 17(int) Constant 0 | ||
19: TypePointer Uniform 6(int) | ||
21: 6(int) Constant 4294967272 4294967295 | ||
22: TypeInt 32 0 | ||
23: 22(int) Constant 1 | ||
24: 22(int) Constant 0 | ||
28: 17(int) Constant 1 | ||
29: TypePointer Uniform 10(int) | ||
31: 10(int) Constant 15 0 | ||
84(Struct): TypeStruct 6(int) 10(int) | ||
85: TypePointer Workgroup 84(Struct) | ||
86(s): 85(ptr) Variable Workgroup | ||
87: TypePointer Workgroup 6(int) | ||
92: TypePointer Workgroup 10(int) | ||
146: TypeVector 22(int) 3 | ||
147: 22(int) Constant 16 | ||
148: 146(ivec3) ConstantComposite 147 147 23 | ||
4(main): 2 Function None 3 | ||
5: Label | ||
8(i64): 7(ptr) Variable Function | ||
12(u64): 11(ptr) Variable Function | ||
Store 8(i64) 9 | ||
Store 12(u64) 13 | ||
20: 19(ptr) AccessChain 16(buf) 18 | ||
25: 6(int) AtomicSMin 20 23 24 21 | ||
26: 6(int) Load 8(i64) | ||
27: 6(int) IAdd 26 25 | ||
Store 8(i64) 27 | ||
30: 29(ptr) AccessChain 16(buf) 28 | ||
32: 10(int) AtomicUMin 30 23 24 31 | ||
33: 10(int) Load 12(u64) | ||
34: 10(int) IAdd 33 32 | ||
Store 12(u64) 34 | ||
35: 19(ptr) AccessChain 16(buf) 18 | ||
36: 6(int) AtomicSMax 35 23 24 21 | ||
37: 6(int) Load 8(i64) | ||
38: 6(int) IAdd 37 36 | ||
Store 8(i64) 38 | ||
39: 29(ptr) AccessChain 16(buf) 28 | ||
40: 10(int) AtomicUMax 39 23 24 31 | ||
41: 10(int) Load 12(u64) | ||
42: 10(int) IAdd 41 40 | ||
Store 12(u64) 42 | ||
43: 19(ptr) AccessChain 16(buf) 18 | ||
44: 6(int) AtomicAnd 43 23 24 21 | ||
45: 6(int) Load 8(i64) | ||
46: 6(int) IAdd 45 44 | ||
Store 8(i64) 46 | ||
47: 29(ptr) AccessChain 16(buf) 28 | ||
48: 10(int) AtomicAnd 47 23 24 31 | ||
49: 10(int) Load 12(u64) | ||
50: 10(int) IAdd 49 48 | ||
Store 12(u64) 50 | ||
51: 19(ptr) AccessChain 16(buf) 18 | ||
52: 6(int) AtomicOr 51 23 24 21 | ||
53: 6(int) Load 8(i64) | ||
54: 6(int) IAdd 53 52 | ||
Store 8(i64) 54 | ||
55: 29(ptr) AccessChain 16(buf) 28 | ||
56: 10(int) AtomicOr 55 23 24 31 | ||
57: 10(int) Load 12(u64) | ||
58: 10(int) IAdd 57 56 | ||
Store 12(u64) 58 | ||
59: 19(ptr) AccessChain 16(buf) 18 | ||
60: 6(int) AtomicXor 59 23 24 21 | ||
61: 6(int) Load 8(i64) | ||
62: 6(int) IAdd 61 60 | ||
Store 8(i64) 62 | ||
63: 29(ptr) AccessChain 16(buf) 28 | ||
64: 10(int) AtomicXor 63 23 24 31 | ||
65: 10(int) Load 12(u64) | ||
66: 10(int) IAdd 65 64 | ||
Store 12(u64) 66 | ||
67: 19(ptr) AccessChain 16(buf) 18 | ||
68: 6(int) AtomicIAdd 67 23 24 21 | ||
69: 6(int) Load 8(i64) | ||
70: 6(int) IAdd 69 68 | ||
Store 8(i64) 70 | ||
71: 19(ptr) AccessChain 16(buf) 18 | ||
72: 6(int) AtomicExchange 71 23 24 21 | ||
73: 6(int) Load 8(i64) | ||
74: 6(int) IAdd 73 72 | ||
Store 8(i64) 74 | ||
75: 19(ptr) AccessChain 16(buf) 18 | ||
76: 6(int) Load 8(i64) | ||
77: 6(int) AtomicCompareExchange 75 23 24 24 76 21 | ||
78: 6(int) Load 8(i64) | ||
79: 6(int) IAdd 78 77 | ||
Store 8(i64) 79 | ||
80: 6(int) Load 8(i64) | ||
81: 19(ptr) AccessChain 16(buf) 18 | ||
Store 81 80 | ||
82: 10(int) Load 12(u64) | ||
83: 29(ptr) AccessChain 16(buf) 28 | ||
Store 83 82 | ||
Store 8(i64) 9 | ||
Store 12(u64) 13 | ||
88: 87(ptr) AccessChain 86(s) 18 | ||
89: 6(int) AtomicSMin 88 23 24 21 | ||
90: 6(int) Load 8(i64) | ||
91: 6(int) IAdd 90 89 | ||
Store 8(i64) 91 | ||
93: 92(ptr) AccessChain 86(s) 28 | ||
94: 10(int) AtomicUMin 93 23 24 31 | ||
95: 10(int) Load 12(u64) | ||
96: 10(int) IAdd 95 94 | ||
Store 12(u64) 96 | ||
97: 87(ptr) AccessChain 86(s) 18 | ||
98: 6(int) AtomicSMax 97 23 24 21 | ||
99: 6(int) Load 8(i64) | ||
100: 6(int) IAdd 99 98 | ||
Store 8(i64) 100 | ||
101: 92(ptr) AccessChain 86(s) 28 | ||
102: 10(int) AtomicUMax 101 23 24 31 | ||
103: 10(int) Load 12(u64) | ||
104: 10(int) IAdd 103 102 | ||
Store 12(u64) 104 | ||
105: 87(ptr) AccessChain 86(s) 18 | ||
106: 6(int) AtomicAnd 105 23 24 21 | ||
107: 6(int) Load 8(i64) | ||
108: 6(int) IAdd 107 106 | ||
Store 8(i64) 108 | ||
109: 92(ptr) AccessChain 86(s) 28 | ||
110: 10(int) AtomicAnd 109 23 24 31 | ||
111: 10(int) Load 12(u64) | ||
112: 10(int) IAdd 111 110 | ||
Store 12(u64) 112 | ||
113: 87(ptr) AccessChain 86(s) 18 | ||
114: 6(int) AtomicOr 113 23 24 21 | ||
115: 6(int) Load 8(i64) | ||
116: 6(int) IAdd 115 114 | ||
Store 8(i64) 116 | ||
117: 92(ptr) AccessChain 86(s) 28 | ||
118: 10(int) AtomicOr 117 23 24 31 | ||
119: 10(int) Load 12(u64) | ||
120: 10(int) IAdd 119 118 | ||
Store 12(u64) 120 | ||
121: 87(ptr) AccessChain 86(s) 18 | ||
122: 6(int) AtomicXor 121 23 24 21 | ||
123: 6(int) Load 8(i64) | ||
124: 6(int) IAdd 123 122 | ||
Store 8(i64) 124 | ||
125: 92(ptr) AccessChain 86(s) 28 | ||
126: 10(int) AtomicXor 125 23 24 31 | ||
127: 10(int) Load 12(u64) | ||
128: 10(int) IAdd 127 126 | ||
Store 12(u64) 128 | ||
129: 87(ptr) AccessChain 86(s) 18 | ||
130: 6(int) AtomicIAdd 129 23 24 21 | ||
131: 6(int) Load 8(i64) | ||
132: 6(int) IAdd 131 130 | ||
Store 8(i64) 132 | ||
133: 87(ptr) AccessChain 86(s) 18 | ||
134: 6(int) AtomicExchange 133 23 24 21 | ||
135: 6(int) Load 8(i64) | ||
136: 6(int) IAdd 135 134 | ||
Store 8(i64) 136 | ||
137: 87(ptr) AccessChain 86(s) 18 | ||
138: 6(int) Load 8(i64) | ||
139: 6(int) AtomicCompareExchange 137 23 24 24 138 21 | ||
140: 6(int) Load 8(i64) | ||
141: 6(int) IAdd 140 139 | ||
Store 8(i64) 141 | ||
142: 6(int) Load 8(i64) | ||
143: 87(ptr) AccessChain 86(s) 18 | ||
Store 143 142 | ||
144: 10(int) Load 12(u64) | ||
145: 92(ptr) AccessChain 86(s) 28 | ||
Store 145 144 | ||
Return | ||
FunctionEnd |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
#version 450 core | ||
|
||
#extension GL_ARB_gpu_shader_int64: enable | ||
#extension GL_NV_shader_atomic_int64: enable | ||
|
||
layout(local_size_x = 16, local_size_y = 16) in; | ||
|
||
layout(binding = 0) buffer Buffer | ||
{ | ||
int64_t i64; | ||
uint64_t u64; | ||
} buf; | ||
|
||
struct Struct | ||
{ | ||
int64_t i64; | ||
uint64_t u64; | ||
}; | ||
|
||
shared Struct s; | ||
|
||
void main() | ||
{ | ||
const int64_t i64c = -24; | ||
const uint64_t u64c = 0xF00000000F; | ||
|
||
// Test shader storage block | ||
int64_t i64 = 0; | ||
uint64_t u64 = 0; | ||
|
||
i64 += atomicMin(buf.i64, i64c); | ||
u64 += atomicMin(buf.u64, u64c); | ||
|
||
i64 += atomicMax(buf.i64, i64c); | ||
u64 += atomicMax(buf.u64, u64c); | ||
|
||
i64 += atomicAnd(buf.i64, i64c); | ||
u64 += atomicAnd(buf.u64, u64c); | ||
|
||
i64 += atomicOr(buf.i64, i64c); | ||
u64 += atomicOr(buf.u64, u64c); | ||
|
||
i64 += atomicXor(buf.i64, i64c); | ||
u64 += atomicXor(buf.u64, u64c); | ||
|
||
i64 += atomicAdd(buf.i64, i64c); | ||
i64 += atomicExchange(buf.i64, i64c); | ||
i64 += atomicCompSwap(buf.i64, i64c, i64); | ||
|
||
buf.i64 = i64; | ||
buf.u64 = u64; | ||
|
||
// Test shared variable | ||
i64 = 0; | ||
u64 = 0; | ||
|
||
i64 += atomicMin(s.i64, i64c); | ||
u64 += atomicMin(s.u64, u64c); | ||
|
||
i64 += atomicMax(s.i64, i64c); | ||
u64 += atomicMax(s.u64, u64c); | ||
|
||
i64 += atomicAnd(s.i64, i64c); | ||
u64 += atomicAnd(s.u64, u64c); | ||
|
||
i64 += atomicOr(s.i64, i64c); | ||
u64 += atomicOr(s.u64, u64c); | ||
|
||
i64 += atomicXor(s.i64, i64c); | ||
u64 += atomicXor(s.u64, u64c); | ||
|
||
i64 += atomicAdd(s.i64, i64c); | ||
i64 += atomicExchange(s.i64, i64c); | ||
i64 += atomicCompSwap(s.i64, i64c, i64); | ||
|
||
s.i64 = i64; | ||
s.u64 = u64; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.