Add GL_EXT_shader_image_int64 support (#2409)

This commit is contained in:
Tobski 2020-11-04 16:24:23 +00:00 committed by GitHub
parent 478b232952
commit 8c1a3a06b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 5349 additions and 3697 deletions

View File

@ -36,5 +36,6 @@ static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fu
static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density"; static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density";
static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation"; static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation";
static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add"; static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add";
static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64";
#endif // #ifndef GLSLextEXT_H #endif // #ifndef GLSLextEXT_H

View File

@ -1088,6 +1088,10 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
builder.addCapability(spv::CapabilityStorageImageExtendedFormats); builder.addCapability(spv::CapabilityStorageImageExtendedFormats);
break; break;
case glslang::ElfR64ui:
case glslang::ElfR64i:
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
builder.addCapability(spv::CapabilityInt64ImageEXT);
default: default:
break; break;
} }
@ -1134,6 +1138,8 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
case glslang::ElfRg8ui: return spv::ImageFormatRg8ui; case glslang::ElfRg8ui: return spv::ImageFormatRg8ui;
case glslang::ElfR16ui: return spv::ImageFormatR16ui; case glslang::ElfR16ui: return spv::ImageFormatR16ui;
case glslang::ElfR8ui: return spv::ImageFormatR8ui; case glslang::ElfR8ui: return spv::ImageFormatR8ui;
case glslang::ElfR64ui: return spv::ImageFormatR64ui;
case glslang::ElfR64i: return spv::ImageFormatR64i;
default: return spv::ImageFormatMax; default: return spv::ImageFormatMax;
} }
} }
@ -3594,6 +3600,12 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler)
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch); builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch);
builder.addCapability(spv::CapabilityFloat16ImageAMD); builder.addCapability(spv::CapabilityFloat16ImageAMD);
return builder.makeFloatType(16); return builder.makeFloatType(16);
case glslang::EbtInt64: return builder.makeIntType(64);
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
builder.addCapability(spv::CapabilityFloat16ImageAMD);
case glslang::EbtUint64: return builder.makeUintType(64);
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
builder.addCapability(spv::CapabilityFloat16ImageAMD);
#endif #endif
default: default:
assert(0); assert(0);

View File

@ -523,6 +523,8 @@ const char* ImageFormatString(int format)
case 37: return "Rg8ui"; case 37: return "Rg8ui";
case 38: return "R16ui"; case 38: return "R16ui";
case 39: return "R8ui"; case 39: return "R8ui";
case 40: return "R64ui";
case 41: return "R64i";
default: default:
return "Bad"; return "Bad";
@ -958,6 +960,7 @@ const char* CapabilityString(int info)
case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT";
case CapabilityShaderClockKHR: return "ShaderClockKHR"; case CapabilityShaderClockKHR: return "ShaderClockKHR";
case CapabilityInt64ImageEXT: return "Int64ImageEXT";
case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL"; case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL";

View File

@ -0,0 +1,634 @@
spv.imageAtomic64.frag
Validation failed
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 503
Capability Shader
Capability Int64
Capability Int64Atomics
Capability StorageImageMultisample
Capability ImageCubeArray
Capability ImageRect
Capability SparseResidency
Capability Image1D
Capability ImageBuffer
Capability ImageMSArray
Capability Int64ImageEXT
Extension "SPV_EXT_shader_image_int64"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
SourceExtension "GL_ARB_gpu_shader_int64"
SourceExtension "GL_ARB_sparse_texture2"
SourceExtension "GL_EXT_shader_image_int64"
SourceExtension "GL_KHR_memory_scope_semantics"
Name 4 "main"
Name 12 "Buf"
MemberName 12(Buf) 0 "i64"
MemberName 12(Buf) 1 "u64"
MemberName 12(Buf) 2 "i64v4"
MemberName 12(Buf) 3 "u64v4"
MemberName 12(Buf) 4 "i32v4"
Name 14 ""
Name 18 "i1D"
Name 35 "i3D"
Name 48 "iBuf"
Name 58 "i2DArray"
Name 69 "i2DRect"
Name 81 "i2DMSArray"
Name 194 "u2D"
Name 207 "uCube"
Name 218 "u1DArray"
Name 229 "uCubeArray"
Name 240 "u2DMS"
Name 458 "ResType"
Name 483 "ResType"
MemberDecorate 12(Buf) 0 Offset 0
MemberDecorate 12(Buf) 1 Offset 8
MemberDecorate 12(Buf) 2 Offset 32
MemberDecorate 12(Buf) 3 Offset 64
MemberDecorate 12(Buf) 4 Offset 96
Decorate 12(Buf) BufferBlock
Decorate 14 DescriptorSet 0
Decorate 14 Binding 11
Decorate 18(i1D) DescriptorSet 0
Decorate 18(i1D) Binding 0
Decorate 35(i3D) DescriptorSet 0
Decorate 35(i3D) Binding 2
Decorate 48(iBuf) DescriptorSet 0
Decorate 48(iBuf) Binding 4
Decorate 58(i2DArray) DescriptorSet 0
Decorate 58(i2DArray) Binding 6
Decorate 69(i2DRect) DescriptorSet 0
Decorate 69(i2DRect) Binding 8
Decorate 81(i2DMSArray) DescriptorSet 0
Decorate 81(i2DMSArray) Binding 10
Decorate 194(u2D) DescriptorSet 0
Decorate 194(u2D) Binding 1
Decorate 207(uCube) DescriptorSet 0
Decorate 207(uCube) Binding 3
Decorate 218(u1DArray) DescriptorSet 0
Decorate 218(u1DArray) Binding 5
Decorate 229(uCubeArray) DescriptorSet 0
Decorate 229(uCubeArray) Binding 7
Decorate 240(u2DMS) DescriptorSet 0
Decorate 240(u2DMS) Binding 9
2: TypeVoid
3: TypeFunction 2
6: TypeInt 64 1
7: TypeInt 64 0
8: TypeVector 6(int64_t) 4
9: TypeVector 7(int64_t) 4
10: TypeInt 32 1
11: TypeVector 10(int) 4
12(Buf): TypeStruct 6(int64_t) 7(int64_t) 8(i64vec4) 9(i64vec4) 11(ivec4)
13: TypePointer Uniform 12(Buf)
14: 13(ptr) Variable Uniform
15: 10(int) Constant 0
16: TypeImage 6(int64_t) 1D nonsampled format:R64i
17: TypePointer UniformConstant 16
18(i1D): 17(ptr) Variable UniformConstant
19: 10(int) Constant 4
20: TypeInt 32 0
21: 20(int) Constant 0
22: TypePointer Uniform 10(int)
25: TypePointer Uniform 6(int64_t)
28: TypePointer Image 6(int64_t)
30: 20(int) Constant 1
33: TypeImage 6(int64_t) 3D nonsampled format:R64i
34: TypePointer UniformConstant 33
35(i3D): 34(ptr) Variable UniformConstant
36: TypeVector 10(int) 3
37: TypePointer Uniform 11(ivec4)
46: TypeImage 6(int64_t) Buffer nonsampled format:R64i
47: TypePointer UniformConstant 46
48(iBuf): 47(ptr) Variable UniformConstant
56: TypeImage 6(int64_t) 2D array nonsampled format:R64i
57: TypePointer UniformConstant 56
58(i2DArray): 57(ptr) Variable UniformConstant
67: TypeImage 6(int64_t) Rect nonsampled format:R64i
68: TypePointer UniformConstant 67
69(i2DRect): 68(ptr) Variable UniformConstant
70: TypeVector 10(int) 2
79: TypeImage 6(int64_t) 2D array multi-sampled nonsampled format:R64i
80: TypePointer UniformConstant 79
81(i2DMSArray): 80(ptr) Variable UniformConstant
85: 20(int) Constant 3
107: 6(int64_t) Constant 1 0
116: 10(int) Constant 1
117: 10(int) Constant 2048
119: 20(int) Constant 2048
192: TypeImage 7(int64_t) 2D nonsampled format:R64ui
193: TypePointer UniformConstant 192
194(u2D): 193(ptr) Variable UniformConstant
198: TypePointer Uniform 7(int64_t)
201: TypePointer Image 7(int64_t)
205: TypeImage 7(int64_t) Cube nonsampled format:R64ui
206: TypePointer UniformConstant 205
207(uCube): 206(ptr) Variable UniformConstant
216: TypeImage 7(int64_t) 1D array nonsampled format:R64ui
217: TypePointer UniformConstant 216
218(u1DArray): 217(ptr) Variable UniformConstant
227: TypeImage 7(int64_t) Cube array nonsampled format:R64ui
228: TypePointer UniformConstant 227
229(uCubeArray): 228(ptr) Variable UniformConstant
238: TypeImage 7(int64_t) 2D multi-sampled nonsampled format:R64ui
239: TypePointer UniformConstant 238
240(u2DMS): 239(ptr) Variable UniformConstant
244: 20(int) Constant 2
275: 7(int64_t) Constant 1 0
363: 10(int) Constant 2
368: TypePointer Uniform 8(i64vec4)
423: 10(int) Constant 3
424: TypePointer Uniform 9(i64vec4)
458(ResType): TypeStruct 10(int) 8(i64vec4)
483(ResType): TypeStruct 10(int) 9(i64vec4)
4(main): 2 Function None 3
5: Label
23: 22(ptr) AccessChain 14 19 21
24: 10(int) Load 23
26: 25(ptr) AccessChain 14 15
27: 6(int64_t) Load 26
29: 28(ptr) ImageTexelPointer 18(i1D) 24 21
31: 6(int64_t) AtomicIAdd 29 30 21 27
32: 25(ptr) AccessChain 14 15
Store 32 31
38: 37(ptr) AccessChain 14 19
39: 11(ivec4) Load 38
40: 36(ivec3) VectorShuffle 39 39 0 1 2
41: 25(ptr) AccessChain 14 15
42: 6(int64_t) Load 41
43: 28(ptr) ImageTexelPointer 35(i3D) 40 21
44: 6(int64_t) AtomicSMin 43 30 21 42
45: 25(ptr) AccessChain 14 15
Store 45 44
49: 22(ptr) AccessChain 14 19 21
50: 10(int) Load 49
51: 25(ptr) AccessChain 14 15
52: 6(int64_t) Load 51
53: 28(ptr) ImageTexelPointer 48(iBuf) 50 21
54: 6(int64_t) AtomicSMax 53 30 21 52
55: 25(ptr) AccessChain 14 15
Store 55 54
59: 37(ptr) AccessChain 14 19
60: 11(ivec4) Load 59
61: 36(ivec3) VectorShuffle 60 60 0 1 2
62: 25(ptr) AccessChain 14 15
63: 6(int64_t) Load 62
64: 28(ptr) ImageTexelPointer 58(i2DArray) 61 21
65: 6(int64_t) AtomicAnd 64 30 21 63
66: 25(ptr) AccessChain 14 15
Store 66 65
71: 37(ptr) AccessChain 14 19
72: 11(ivec4) Load 71
73: 70(ivec2) VectorShuffle 72 72 0 1
74: 25(ptr) AccessChain 14 15
75: 6(int64_t) Load 74
76: 28(ptr) ImageTexelPointer 69(i2DRect) 73 21
77: 6(int64_t) AtomicOr 76 30 21 75
78: 25(ptr) AccessChain 14 15
Store 78 77
82: 37(ptr) AccessChain 14 19
83: 11(ivec4) Load 82
84: 36(ivec3) VectorShuffle 83 83 0 1 2
86: 22(ptr) AccessChain 14 19 85
87: 10(int) Load 86
88: 25(ptr) AccessChain 14 15
89: 6(int64_t) Load 88
90: 28(ptr) ImageTexelPointer 81(i2DMSArray) 84 87
91: 6(int64_t) AtomicXor 90 30 21 89
92: 25(ptr) AccessChain 14 15
Store 92 91
93: 22(ptr) AccessChain 14 19 21
94: 10(int) Load 93
95: 25(ptr) AccessChain 14 15
96: 6(int64_t) Load 95
97: 28(ptr) ImageTexelPointer 18(i1D) 94 21
98: 6(int64_t) AtomicExchange 97 30 21 96
99: 25(ptr) AccessChain 14 15
Store 99 98
100: 37(ptr) AccessChain 14 19
101: 11(ivec4) Load 100
102: 36(ivec3) VectorShuffle 101 101 0 1 2
103: 25(ptr) AccessChain 14 15
104: 6(int64_t) Load 103
105: 25(ptr) AccessChain 14 15
106: 6(int64_t) Load 105
108: 6(int64_t) IAdd 106 107
109: 28(ptr) ImageTexelPointer 35(i3D) 102 21
110: 6(int64_t) AtomicCompareExchange 109 30 21 21 108 104
111: 25(ptr) AccessChain 14 15
Store 111 110
112: 22(ptr) AccessChain 14 19 21
113: 10(int) Load 112
114: 25(ptr) AccessChain 14 15
115: 6(int64_t) Load 114
118: 28(ptr) ImageTexelPointer 18(i1D) 113 21
120: 6(int64_t) AtomicIAdd 118 116 119 115
121: 25(ptr) AccessChain 14 15
Store 121 120
122: 37(ptr) AccessChain 14 19
123: 11(ivec4) Load 122
124: 36(ivec3) VectorShuffle 123 123 0 1 2
125: 25(ptr) AccessChain 14 15
126: 6(int64_t) Load 125
127: 28(ptr) ImageTexelPointer 35(i3D) 124 21
128: 6(int64_t) AtomicSMin 127 116 119 126
129: 25(ptr) AccessChain 14 15
Store 129 128
130: 22(ptr) AccessChain 14 19 21
131: 10(int) Load 130
132: 25(ptr) AccessChain 14 15
133: 6(int64_t) Load 132
134: 28(ptr) ImageTexelPointer 48(iBuf) 131 21
135: 6(int64_t) AtomicSMax 134 116 119 133
136: 25(ptr) AccessChain 14 15
Store 136 135
137: 37(ptr) AccessChain 14 19
138: 11(ivec4) Load 137
139: 36(ivec3) VectorShuffle 138 138 0 1 2
140: 25(ptr) AccessChain 14 15
141: 6(int64_t) Load 140
142: 28(ptr) ImageTexelPointer 58(i2DArray) 139 21
143: 6(int64_t) AtomicAnd 142 116 119 141
144: 25(ptr) AccessChain 14 15
Store 144 143
145: 37(ptr) AccessChain 14 19
146: 11(ivec4) Load 145
147: 70(ivec2) VectorShuffle 146 146 0 1
148: 25(ptr) AccessChain 14 15
149: 6(int64_t) Load 148
150: 28(ptr) ImageTexelPointer 69(i2DRect) 147 21
151: 6(int64_t) AtomicOr 150 116 119 149
152: 25(ptr) AccessChain 14 15
Store 152 151
153: 37(ptr) AccessChain 14 19
154: 11(ivec4) Load 153
155: 36(ivec3) VectorShuffle 154 154 0 1 2
156: 22(ptr) AccessChain 14 19 85
157: 10(int) Load 156
158: 25(ptr) AccessChain 14 15
159: 6(int64_t) Load 158
160: 28(ptr) ImageTexelPointer 81(i2DMSArray) 155 157
161: 6(int64_t) AtomicXor 160 116 119 159
162: 25(ptr) AccessChain 14 15
Store 162 161
163: 22(ptr) AccessChain 14 19 21
164: 10(int) Load 163
165: 25(ptr) AccessChain 14 15
166: 6(int64_t) Load 165
167: 28(ptr) ImageTexelPointer 18(i1D) 164 21
168: 6(int64_t) AtomicExchange 167 116 119 166
169: 25(ptr) AccessChain 14 15
Store 169 168
170: 37(ptr) AccessChain 14 19
171: 11(ivec4) Load 170
172: 36(ivec3) VectorShuffle 171 171 0 1 2
173: 25(ptr) AccessChain 14 15
174: 6(int64_t) Load 173
175: 25(ptr) AccessChain 14 15
176: 6(int64_t) Load 175
177: 6(int64_t) IAdd 176 107
178: 28(ptr) ImageTexelPointer 35(i3D) 172 21
179: 6(int64_t) AtomicCompareExchange 178 116 119 119 177 174
180: 25(ptr) AccessChain 14 15
Store 180 179
181: 22(ptr) AccessChain 14 19 21
182: 10(int) Load 181
183: 28(ptr) ImageTexelPointer 48(iBuf) 182 21
184: 6(int64_t) AtomicLoad 183 116 119
185: 25(ptr) AccessChain 14 15
Store 185 184
186: 37(ptr) AccessChain 14 19
187: 11(ivec4) Load 186
188: 36(ivec3) VectorShuffle 187 187 0 1 2
189: 25(ptr) AccessChain 14 15
190: 6(int64_t) Load 189
191: 28(ptr) ImageTexelPointer 58(i2DArray) 188 21
AtomicStore 191 116 119 190
195: 37(ptr) AccessChain 14 19
196: 11(ivec4) Load 195
197: 70(ivec2) VectorShuffle 196 196 0 1
199: 198(ptr) AccessChain 14 116
200: 7(int64_t) Load 199
202: 201(ptr) ImageTexelPointer 194(u2D) 197 21
203: 7(int64_t) AtomicIAdd 202 30 21 200
204: 198(ptr) AccessChain 14 116
Store 204 203
208: 37(ptr) AccessChain 14 19
209: 11(ivec4) Load 208
210: 36(ivec3) VectorShuffle 209 209 0 1 2
211: 198(ptr) AccessChain 14 116
212: 7(int64_t) Load 211
213: 201(ptr) ImageTexelPointer 207(uCube) 210 21
214: 7(int64_t) AtomicUMin 213 30 21 212
215: 198(ptr) AccessChain 14 116
Store 215 214
219: 37(ptr) AccessChain 14 19
220: 11(ivec4) Load 219
221: 70(ivec2) VectorShuffle 220 220 0 1
222: 198(ptr) AccessChain 14 116
223: 7(int64_t) Load 222
224: 201(ptr) ImageTexelPointer 218(u1DArray) 221 21
225: 7(int64_t) AtomicUMax 224 30 21 223
226: 198(ptr) AccessChain 14 116
Store 226 225
230: 37(ptr) AccessChain 14 19
231: 11(ivec4) Load 230
232: 36(ivec3) VectorShuffle 231 231 0 1 2
233: 198(ptr) AccessChain 14 116
234: 7(int64_t) Load 233
235: 201(ptr) ImageTexelPointer 229(uCubeArray) 232 21
236: 7(int64_t) AtomicAnd 235 30 21 234
237: 198(ptr) AccessChain 14 116
Store 237 236
241: 37(ptr) AccessChain 14 19
242: 11(ivec4) Load 241
243: 70(ivec2) VectorShuffle 242 242 0 1
245: 22(ptr) AccessChain 14 19 244
246: 10(int) Load 245
247: 198(ptr) AccessChain 14 116
248: 7(int64_t) Load 247
249: 201(ptr) ImageTexelPointer 240(u2DMS) 243 246
250: 7(int64_t) AtomicOr 249 30 21 248
251: 198(ptr) AccessChain 14 116
Store 251 250
252: 37(ptr) AccessChain 14 19
253: 11(ivec4) Load 252
254: 70(ivec2) VectorShuffle 253 253 0 1
255: 198(ptr) AccessChain 14 116
256: 7(int64_t) Load 255
257: 201(ptr) ImageTexelPointer 194(u2D) 254 21
258: 7(int64_t) AtomicXor 257 30 21 256
259: 198(ptr) AccessChain 14 116
Store 259 258
260: 37(ptr) AccessChain 14 19
261: 11(ivec4) Load 260
262: 36(ivec3) VectorShuffle 261 261 0 1 2
263: 198(ptr) AccessChain 14 116
264: 7(int64_t) Load 263
265: 201(ptr) ImageTexelPointer 207(uCube) 262 21
266: 7(int64_t) AtomicExchange 265 30 21 264
267: 198(ptr) AccessChain 14 116
Store 267 266
268: 37(ptr) AccessChain 14 19
269: 11(ivec4) Load 268
270: 70(ivec2) VectorShuffle 269 269 0 1
271: 198(ptr) AccessChain 14 116
272: 7(int64_t) Load 271
273: 198(ptr) AccessChain 14 116
274: 7(int64_t) Load 273
276: 7(int64_t) IAdd 274 275
277: 201(ptr) ImageTexelPointer 218(u1DArray) 270 21
278: 7(int64_t) AtomicCompareExchange 277 30 21 21 276 272
279: 198(ptr) AccessChain 14 116
Store 279 278
280: 37(ptr) AccessChain 14 19
281: 11(ivec4) Load 280
282: 70(ivec2) VectorShuffle 281 281 0 1
283: 198(ptr) AccessChain 14 116
284: 7(int64_t) Load 283
285: 201(ptr) ImageTexelPointer 194(u2D) 282 21
286: 7(int64_t) AtomicIAdd 285 116 119 284
287: 198(ptr) AccessChain 14 116
Store 287 286
288: 37(ptr) AccessChain 14 19
289: 11(ivec4) Load 288
290: 36(ivec3) VectorShuffle 289 289 0 1 2
291: 198(ptr) AccessChain 14 116
292: 7(int64_t) Load 291
293: 201(ptr) ImageTexelPointer 207(uCube) 290 21
294: 7(int64_t) AtomicUMin 293 116 119 292
295: 198(ptr) AccessChain 14 116
Store 295 294
296: 37(ptr) AccessChain 14 19
297: 11(ivec4) Load 296
298: 70(ivec2) VectorShuffle 297 297 0 1
299: 198(ptr) AccessChain 14 116
300: 7(int64_t) Load 299
301: 201(ptr) ImageTexelPointer 218(u1DArray) 298 21
302: 7(int64_t) AtomicUMax 301 116 119 300
303: 198(ptr) AccessChain 14 116
Store 303 302
304: 37(ptr) AccessChain 14 19
305: 11(ivec4) Load 304
306: 36(ivec3) VectorShuffle 305 305 0 1 2
307: 198(ptr) AccessChain 14 116
308: 7(int64_t) Load 307
309: 201(ptr) ImageTexelPointer 229(uCubeArray) 306 21
310: 7(int64_t) AtomicAnd 309 116 119 308
311: 198(ptr) AccessChain 14 116
Store 311 310
312: 37(ptr) AccessChain 14 19
313: 11(ivec4) Load 312
314: 70(ivec2) VectorShuffle 313 313 0 1
315: 22(ptr) AccessChain 14 19 244
316: 10(int) Load 315
317: 198(ptr) AccessChain 14 116
318: 7(int64_t) Load 317
319: 201(ptr) ImageTexelPointer 240(u2DMS) 314 316
320: 7(int64_t) AtomicOr 319 116 119 318
321: 198(ptr) AccessChain 14 116
Store 321 320
322: 37(ptr) AccessChain 14 19
323: 11(ivec4) Load 322
324: 70(ivec2) VectorShuffle 323 323 0 1
325: 198(ptr) AccessChain 14 116
326: 7(int64_t) Load 325
327: 201(ptr) ImageTexelPointer 194(u2D) 324 21
328: 7(int64_t) AtomicXor 327 116 119 326
329: 198(ptr) AccessChain 14 116
Store 329 328
330: 37(ptr) AccessChain 14 19
331: 11(ivec4) Load 330
332: 36(ivec3) VectorShuffle 331 331 0 1 2
333: 198(ptr) AccessChain 14 116
334: 7(int64_t) Load 333
335: 201(ptr) ImageTexelPointer 207(uCube) 332 21
336: 7(int64_t) AtomicExchange 335 116 119 334
337: 198(ptr) AccessChain 14 116
Store 337 336
338: 37(ptr) AccessChain 14 19
339: 11(ivec4) Load 338
340: 70(ivec2) VectorShuffle 339 339 0 1
341: 198(ptr) AccessChain 14 116
342: 7(int64_t) Load 341
343: 198(ptr) AccessChain 14 116
344: 7(int64_t) Load 343
345: 7(int64_t) IAdd 344 275
346: 201(ptr) ImageTexelPointer 218(u1DArray) 340 21
347: 7(int64_t) AtomicCompareExchange 346 116 119 119 345 342
348: 198(ptr) AccessChain 14 116
Store 348 347
349: 37(ptr) AccessChain 14 19
350: 11(ivec4) Load 349
351: 36(ivec3) VectorShuffle 350 350 0 1 2
352: 201(ptr) ImageTexelPointer 229(uCubeArray) 351 21
353: 7(int64_t) AtomicLoad 352 116 119
354: 198(ptr) AccessChain 14 116
Store 354 353
355: 37(ptr) AccessChain 14 19
356: 11(ivec4) Load 355
357: 70(ivec2) VectorShuffle 356 356 0 1
358: 22(ptr) AccessChain 14 19 244
359: 10(int) Load 358
360: 198(ptr) AccessChain 14 116
361: 7(int64_t) Load 360
362: 201(ptr) ImageTexelPointer 240(u2DMS) 357 359
AtomicStore 362 116 119 361
364: 16 Load 18(i1D)
365: 22(ptr) AccessChain 14 19 21
366: 10(int) Load 365
367: 8(i64vec4) ImageRead 364 366
369: 368(ptr) AccessChain 14 363
370: 8(i64vec4) Load 369
371: 8(i64vec4) IAdd 370 367
372: 368(ptr) AccessChain 14 363
Store 372 371
373: 33 Load 35(i3D)
374: 37(ptr) AccessChain 14 19
375: 11(ivec4) Load 374
376: 36(ivec3) VectorShuffle 375 375 0 1 2
377: 8(i64vec4) ImageRead 373 376
378: 368(ptr) AccessChain 14 363
379: 8(i64vec4) Load 378
380: 8(i64vec4) IAdd 379 377
381: 368(ptr) AccessChain 14 363
Store 381 380
382: 46 Load 48(iBuf)
383: 22(ptr) AccessChain 14 19 21
384: 10(int) Load 383
385: 8(i64vec4) ImageRead 382 384
386: 368(ptr) AccessChain 14 363
387: 8(i64vec4) Load 386
388: 8(i64vec4) IAdd 387 385
389: 368(ptr) AccessChain 14 363
Store 389 388
390: 56 Load 58(i2DArray)
391: 37(ptr) AccessChain 14 19
392: 11(ivec4) Load 391
393: 36(ivec3) VectorShuffle 392 392 0 1 2
394: 8(i64vec4) ImageRead 390 393
395: 368(ptr) AccessChain 14 363
396: 8(i64vec4) Load 395
397: 8(i64vec4) IAdd 396 394
398: 368(ptr) AccessChain 14 363
Store 398 397
399: 67 Load 69(i2DRect)
400: 37(ptr) AccessChain 14 19
401: 11(ivec4) Load 400
402: 70(ivec2) VectorShuffle 401 401 0 1
403: 8(i64vec4) ImageRead 399 402
404: 368(ptr) AccessChain 14 363
405: 8(i64vec4) Load 404
406: 8(i64vec4) IAdd 405 403
407: 368(ptr) AccessChain 14 363
Store 407 406
408: 79 Load 81(i2DMSArray)
409: 37(ptr) AccessChain 14 19
410: 11(ivec4) Load 409
411: 36(ivec3) VectorShuffle 410 410 0 1 2
412: 22(ptr) AccessChain 14 19 85
413: 10(int) Load 412
414: 8(i64vec4) ImageRead 408 411 Sample 413
415: 368(ptr) AccessChain 14 363
416: 8(i64vec4) Load 415
417: 8(i64vec4) IAdd 416 414
418: 368(ptr) AccessChain 14 363
Store 418 417
419: 192 Load 194(u2D)
420: 37(ptr) AccessChain 14 19
421: 11(ivec4) Load 420
422: 70(ivec2) VectorShuffle 421 421 0 1
425: 424(ptr) AccessChain 14 423
426: 9(i64vec4) Load 425
ImageWrite 419 422 426
427: 205 Load 207(uCube)
428: 37(ptr) AccessChain 14 19
429: 11(ivec4) Load 428
430: 36(ivec3) VectorShuffle 429 429 0 1 2
431: 424(ptr) AccessChain 14 423
432: 9(i64vec4) Load 431
ImageWrite 427 430 432
433: 216 Load 218(u1DArray)
434: 37(ptr) AccessChain 14 19
435: 11(ivec4) Load 434
436: 70(ivec2) VectorShuffle 435 435 0 1
437: 424(ptr) AccessChain 14 423
438: 9(i64vec4) Load 437
ImageWrite 433 436 438
439: 227 Load 229(uCubeArray)
440: 37(ptr) AccessChain 14 19
441: 11(ivec4) Load 440
442: 36(ivec3) VectorShuffle 441 441 0 1 2
443: 424(ptr) AccessChain 14 423
444: 9(i64vec4) Load 443
ImageWrite 439 442 444
445: 238 Load 240(u2DMS)
446: 37(ptr) AccessChain 14 19
447: 11(ivec4) Load 446
448: 70(ivec2) VectorShuffle 447 447 0 1
449: 22(ptr) AccessChain 14 19 244
450: 10(int) Load 449
451: 424(ptr) AccessChain 14 423
452: 9(i64vec4) Load 451
ImageWrite 445 448 452 Sample 450
453: 33 Load 35(i3D)
454: 37(ptr) AccessChain 14 19
455: 11(ivec4) Load 454
456: 36(ivec3) VectorShuffle 455 455 0 1 2
457: 368(ptr) AccessChain 14 363
459:458(ResType) ImageSparseRead 453 456
460: 8(i64vec4) CompositeExtract 459 1
Store 457 460
461: 10(int) CompositeExtract 459 0
462: 56 Load 58(i2DArray)
463: 37(ptr) AccessChain 14 19
464: 11(ivec4) Load 463
465: 36(ivec3) VectorShuffle 464 464 0 1 2
466: 368(ptr) AccessChain 14 363
467:458(ResType) ImageSparseRead 462 465
468: 8(i64vec4) CompositeExtract 467 1
Store 466 468
469: 10(int) CompositeExtract 467 0
470: 67 Load 69(i2DRect)
471: 37(ptr) AccessChain 14 19
472: 11(ivec4) Load 471
473: 70(ivec2) VectorShuffle 472 472 0 1
474: 368(ptr) AccessChain 14 363
475:458(ResType) ImageSparseRead 470 473
476: 8(i64vec4) CompositeExtract 475 1
Store 474 476
477: 10(int) CompositeExtract 475 0
478: 192 Load 194(u2D)
479: 37(ptr) AccessChain 14 19
480: 11(ivec4) Load 479
481: 70(ivec2) VectorShuffle 480 480 0 1
482: 424(ptr) AccessChain 14 423
484:483(ResType) ImageSparseRead 478 481
485: 9(i64vec4) CompositeExtract 484 1
Store 482 485
486: 10(int) CompositeExtract 484 0
487: 205 Load 207(uCube)
488: 37(ptr) AccessChain 14 19
489: 11(ivec4) Load 488
490: 36(ivec3) VectorShuffle 489 489 0 1 2
491: 424(ptr) AccessChain 14 423
492:483(ResType) ImageSparseRead 487 490
493: 9(i64vec4) CompositeExtract 492 1
Store 491 493
494: 10(int) CompositeExtract 492 0
495: 227 Load 229(uCubeArray)
496: 37(ptr) AccessChain 14 19
497: 11(ivec4) Load 496
498: 36(ivec3) VectorShuffle 497 497 0 1 2
499: 424(ptr) AccessChain 14 423
500:483(ResType) ImageSparseRead 495 498
501: 9(i64vec4) CompositeExtract 500 1
Store 499 501
502: 10(int) CompositeExtract 500 0
Return
FunctionEnd

View File

@ -1,20 +1,25 @@
spv.imageLoadStoreLod.frag spv.imageLoadStoreLod.frag
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 8000a // Generated by (magic number): 8000a
// Id's are bound by 82 // Id's are bound by 148
Capability Shader Capability Shader
Capability Int64
Capability ImageCubeArray Capability ImageCubeArray
Capability SparseResidency Capability SparseResidency
Capability Image1D Capability Image1D
Capability ImageReadWriteLodAMD Capability ImageReadWriteLodAMD
Capability Int64ImageEXT
Extension "SPV_AMD_shader_image_load_store_lod" Extension "SPV_AMD_shader_image_load_store_lod"
Extension "SPV_EXT_shader_image_int64"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 77 EntryPoint Fragment 4 "main" 77
ExecutionMode 4 OriginUpperLeft ExecutionMode 4 OriginUpperLeft
Source GLSL 450 Source GLSL 450
SourceExtension "GL_AMD_shader_image_load_store_lod" SourceExtension "GL_AMD_shader_image_load_store_lod"
SourceExtension "GL_ARB_gpu_shader_int64"
SourceExtension "GL_EXT_shader_image_int64"
Name 4 "main" Name 4 "main"
Name 9 "f4" Name 9 "f4"
Name 14 "i1D" Name 14 "i1D"
@ -27,6 +32,18 @@ spv.imageLoadStoreLod.frag
Name 65 "ResType" Name 65 "ResType"
Name 71 "uiCubeArray" Name 71 "uiCubeArray"
Name 77 "fragColor" Name 77 "fragColor"
Name 86 "Buf"
MemberName 86(Buf) 0 "i64v4"
MemberName 86(Buf) 1 "u64v4"
Name 88 ""
Name 92 "i64i1D"
Name 102 "i64i2D"
Name 111 "i64i3D"
Name 120 "u64iCube"
Name 127 "u64i1DArray"
Name 133 "u64i2DArray"
Name 136 "ResType"
Name 142 "u64iCubeArray"
Decorate 14(i1D) DescriptorSet 0 Decorate 14(i1D) DescriptorSet 0
Decorate 14(i1D) Binding 0 Decorate 14(i1D) Binding 0
Decorate 24(i2D) DescriptorSet 0 Decorate 24(i2D) DescriptorSet 0
@ -42,6 +59,25 @@ spv.imageLoadStoreLod.frag
Decorate 71(uiCubeArray) DescriptorSet 0 Decorate 71(uiCubeArray) DescriptorSet 0
Decorate 71(uiCubeArray) Binding 6 Decorate 71(uiCubeArray) Binding 6
Decorate 77(fragColor) Location 0 Decorate 77(fragColor) Location 0
MemberDecorate 86(Buf) 0 Offset 0
MemberDecorate 86(Buf) 1 Offset 32
Decorate 86(Buf) BufferBlock
Decorate 88 DescriptorSet 0
Decorate 88 Binding 14
Decorate 92(i64i1D) DescriptorSet 0
Decorate 92(i64i1D) Binding 7
Decorate 102(i64i2D) DescriptorSet 0
Decorate 102(i64i2D) Binding 8
Decorate 111(i64i3D) DescriptorSet 0
Decorate 111(i64i3D) Binding 9
Decorate 120(u64iCube) DescriptorSet 0
Decorate 120(u64iCube) Binding 10
Decorate 127(u64i1DArray) DescriptorSet 0
Decorate 127(u64i1DArray) Binding 11
Decorate 133(u64i2DArray) DescriptorSet 0
Decorate 133(u64i2DArray) Binding 12
Decorate 142(u64iCubeArray) DescriptorSet 0
Decorate 142(u64iCubeArray) Binding 13
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -88,6 +124,38 @@ spv.imageLoadStoreLod.frag
71(uiCubeArray): 70(ptr) Variable UniformConstant 71(uiCubeArray): 70(ptr) Variable UniformConstant
76: TypePointer Output 7(fvec4) 76: TypePointer Output 7(fvec4)
77(fragColor): 76(ptr) Variable Output 77(fragColor): 76(ptr) Variable Output
82: TypeInt 64 1
83: TypeVector 82(int64_t) 4
84: TypeInt 64 0
85: TypeVector 84(int64_t) 4
86(Buf): TypeStruct 83(i64vec4) 85(i64vec4)
87: TypePointer Uniform 86(Buf)
88: 87(ptr) Variable Uniform
89: 16(int) Constant 0
90: TypeImage 82(int64_t) 1D nonsampled format:R64i
91: TypePointer UniformConstant 90
92(i64i1D): 91(ptr) Variable UniformConstant
95: TypePointer Uniform 83(i64vec4)
100: TypeImage 82(int64_t) 2D nonsampled format:R64i
101: TypePointer UniformConstant 100
102(i64i2D): 101(ptr) Variable UniformConstant
109: TypeImage 82(int64_t) 3D nonsampled format:R64i
110: TypePointer UniformConstant 109
111(i64i3D): 110(ptr) Variable UniformConstant
118: TypeImage 84(int64_t) Cube nonsampled format:R64ui
119: TypePointer UniformConstant 118
120(u64iCube): 119(ptr) Variable UniformConstant
122: TypePointer Uniform 85(i64vec4)
125: TypeImage 84(int64_t) 1D array nonsampled format:R64ui
126: TypePointer UniformConstant 125
127(u64i1DArray): 126(ptr) Variable UniformConstant
131: TypeImage 84(int64_t) 2D array nonsampled format:R64ui
132: TypePointer UniformConstant 131
133(u64i2DArray): 132(ptr) Variable UniformConstant
136(ResType): TypeStruct 16(int) 85(i64vec4)
140: TypeImage 84(int64_t) Cube array nonsampled format:R64ui
141: TypePointer UniformConstant 140
142(u64iCubeArray): 141(ptr) Variable UniformConstant
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(f4): 8(ptr) Variable Function 9(f4): 8(ptr) Variable Function
@ -131,5 +199,46 @@ spv.imageLoadStoreLod.frag
80: 7(fvec4) ConvertUToF 79 80: 7(fvec4) ConvertUToF 79
81: 7(fvec4) FAdd 78 80 81: 7(fvec4) FAdd 78 80
Store 77(fragColor) 81 Store 77(fragColor) 81
93: 90 Load 92(i64i1D)
94: 83(i64vec4) ImageRead 93 17 Lod 18
96: 95(ptr) AccessChain 88 89
97: 83(i64vec4) Load 96
98: 83(i64vec4) IAdd 97 94
99: 95(ptr) AccessChain 88 89
Store 99 98
103: 100 Load 102(i64i2D)
104: 83(i64vec4) ImageRead 103 28 Lod 18
105: 95(ptr) AccessChain 88 89
106: 83(i64vec4) Load 105
107: 83(i64vec4) IAdd 106 104
108: 95(ptr) AccessChain 88 89
Store 108 107
112: 109 Load 111(i64i3D)
113: 83(i64vec4) ImageRead 112 40 Lod 18
114: 95(ptr) AccessChain 88 89
115: 83(i64vec4) Load 114
116: 83(i64vec4) IAdd 115 113
117: 95(ptr) AccessChain 88 89
Store 117 116
121: 118 Load 120(u64iCube)
123: 122(ptr) AccessChain 88 17
124: 85(i64vec4) Load 123
ImageWrite 121 40 124 Lod 18
128: 125 Load 127(u64i1DArray)
129: 122(ptr) AccessChain 88 17
130: 85(i64vec4) Load 129
ImageWrite 128 28 130 Lod 18
134: 131 Load 133(u64i2DArray)
135: 122(ptr) AccessChain 88 17
137:136(ResType) ImageSparseRead 134 40 Lod 18
138: 85(i64vec4) CompositeExtract 137 1
Store 135 138
139: 16(int) CompositeExtract 137 0
143: 140 Load 142(u64iCubeArray)
144: 122(ptr) AccessChain 88 17
145:136(ResType) ImageSparseRead 143 40 Lod 18
146: 85(i64vec4) CompositeExtract 145 1
Store 144 146
147: 16(int) CompositeExtract 145 0
Return Return
FunctionEnd FunctionEnd

View File

@ -0,0 +1,92 @@
#version 450 core
#extension GL_ARB_gpu_shader_int64: enable
#extension GL_EXT_shader_image_int64: enable
#extension GL_KHR_memory_scope_semantics: enable
#extension GL_ARB_sparse_texture2: enable
layout(binding = 0, r64i) uniform i64image1D i1D;
layout(binding = 1, r64ui) uniform u64image2D u2D;
layout(binding = 2, r64i) uniform i64image3D i3D;
layout(binding = 3, r64ui) uniform u64imageCube uCube;
layout(binding = 4, r64i) uniform i64imageBuffer iBuf;
layout(binding = 5, r64ui) uniform u64image1DArray u1DArray;
layout(binding = 6, r64i) uniform i64image2DArray i2DArray;
layout(binding = 7, r64ui) uniform u64imageCubeArray uCubeArray;
layout(binding = 8, r64i) uniform i64image2DRect i2DRect;
layout(binding = 9, r64ui) uniform u64image2DMS u2DMS;
layout(binding = 10, r64i) uniform i64image2DMSArray i2DMSArray;
layout(binding = 11) buffer Buf
{
int64_t i64;
uint64_t u64;
i64vec4 i64v4;
u64vec4 u64v4;
ivec4 i32v4;
};
void main()
{
i64 = imageAtomicAdd(i1D, i32v4.x, i64);
i64 = imageAtomicMin(i3D, i32v4.xyz, i64);
i64 = imageAtomicMax(iBuf, i32v4.x, i64);
i64 = imageAtomicAnd(i2DArray, i32v4.xyz, i64);
i64 = imageAtomicOr(i2DRect, i32v4.xy, i64);
i64 = imageAtomicXor(i2DMSArray, i32v4.xyz, i32v4.w, i64);
i64 = imageAtomicExchange(i1D, i32v4.x, i64);
i64 = imageAtomicCompSwap(i3D, i32v4.xyz, i64, i64 + 1);
i64 = imageAtomicAdd(i1D, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
i64 = imageAtomicMin(i3D, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
i64 = imageAtomicMax(iBuf, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
i64 = imageAtomicAnd(i2DArray, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
i64 = imageAtomicOr(i2DRect, i32v4.xy, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
i64 = imageAtomicXor(i2DMSArray, i32v4.xyz, i32v4.w, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
i64 = imageAtomicExchange(i1D, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
i64 = imageAtomicCompSwap(i3D, i32v4.xyz, i64, i64 + 1, gl_ScopeDevice,
gl_StorageSemanticsImage, gl_SemanticsRelaxed, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
i64 = imageAtomicLoad(iBuf, i32v4.x, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
imageAtomicStore(i2DArray, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
u64 = imageAtomicAdd(u2D, i32v4.xy, u64);
u64 = imageAtomicMin(uCube, i32v4.xyz, u64);
u64 = imageAtomicMax(u1DArray, i32v4.xy, u64);
u64 = imageAtomicAnd(uCubeArray, i32v4.xyz, u64);
u64 = imageAtomicOr(u2DMS, i32v4.xy, i32v4.z, u64);
u64 = imageAtomicXor(u2D, i32v4.xy, u64);
u64 = imageAtomicExchange(uCube, i32v4.xyz, u64);
u64 = imageAtomicCompSwap(u1DArray, i32v4.xy, u64, u64 + 1);
u64 = imageAtomicAdd(u2D, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
u64 = imageAtomicMin(uCube, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
u64 = imageAtomicMax(u1DArray, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
u64 = imageAtomicAnd(uCubeArray, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
u64 = imageAtomicOr(u2DMS, i32v4.xy, i32v4.z, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
u64 = imageAtomicXor(u2D, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
u64 = imageAtomicExchange(uCube, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
u64 = imageAtomicCompSwap(u1DArray, i32v4.xy, u64, u64 + 1, gl_ScopeDevice,
gl_StorageSemanticsImage, gl_SemanticsRelaxed, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
u64 = imageAtomicLoad(uCubeArray, i32v4.xyz, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
imageAtomicStore(u2DMS, i32v4.xy, i32v4.z, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
i64v4 += imageLoad(i1D, i32v4.x);
i64v4 += imageLoad(i3D, i32v4.xyz);
i64v4 += imageLoad(iBuf, i32v4.x);
i64v4 += imageLoad(i2DArray, i32v4.xyz);
i64v4 += imageLoad(i2DRect, i32v4.xy);
i64v4 += imageLoad(i2DMSArray, i32v4.xyz, i32v4.w);
imageStore(u2D, i32v4.xy, u64v4);
imageStore(uCube, i32v4.xyz, u64v4);
imageStore(u1DArray, i32v4.xy, u64v4);
imageStore(uCubeArray, i32v4.xyz, u64v4);
imageStore(u2DMS, i32v4.xy, i32v4.z, u64v4);
sparseImageLoadARB(i3D, i32v4.xyz, i64v4);
sparseImageLoadARB(i2DArray, i32v4.xyz, i64v4);
sparseImageLoadARB(i2DRect, i32v4.xy, i64v4);
sparseImageLoadARB(u2D, i32v4.xy, u64v4);
sparseImageLoadARB(uCube, i32v4.xyz, u64v4);
sparseImageLoadARB(uCubeArray, i32v4.xyz, u64v4);
}

View File

@ -1,6 +1,8 @@
#version 450 core #version 450 core
#extension GL_AMD_shader_image_load_store_lod: enable #extension GL_AMD_shader_image_load_store_lod: enable
#extension GL_ARB_gpu_shader_int64: enable
#extension GL_EXT_shader_image_int64: enable
layout(rgba32f, binding = 0) uniform image1D i1D; layout(rgba32f, binding = 0) uniform image1D i1D;
layout(rgba32f, binding = 1) uniform image2D i2D; layout(rgba32f, binding = 1) uniform image2D i2D;
@ -12,6 +14,20 @@ layout(rgba32ui, binding = 6) uniform uimageCubeArray uiCubeArray;
layout(location = 0) out vec4 fragColor; layout(location = 0) out vec4 fragColor;
layout(r64i, binding = 7) uniform i64image1D i64i1D;
layout(r64i, binding = 8) uniform i64image2D i64i2D;
layout(r64i, binding = 9) uniform i64image3D i64i3D;
layout(r64ui, binding = 10) uniform u64imageCube u64iCube;
layout(r64ui, binding = 11) uniform u64image1DArray u64i1DArray;
layout(r64ui, binding = 12) uniform u64image2DArray u64i2DArray;
layout(r64ui, binding = 13) uniform u64imageCubeArray u64iCubeArray;
layout(binding = 14) buffer Buf
{
i64vec4 i64v4;
u64vec4 u64v4;
};
void main() void main()
{ {
const int c1 = 1; const int c1 = 1;
@ -33,4 +49,14 @@ void main()
sparseImageLoadLodAMD(uiCubeArray, c3, lod, u4); sparseImageLoadLodAMD(uiCubeArray, c3, lod, u4);
fragColor = f4 + vec4(u4); fragColor = f4 + vec4(u4);
i64v4 += imageLoadLodAMD(i64i1D, c1, lod);
i64v4 += imageLoadLodAMD(i64i2D, c2, lod);
i64v4 += imageLoadLodAMD(i64i3D, c3, lod);
imageStoreLodAMD(u64iCube, c3, lod, u64v4);
imageStoreLodAMD(u64i1DArray, c2, lod, u64v4);
sparseImageLoadLodAMD(u64i2DArray, c3, lod, u64v4);
sparseImageLoadLodAMD(u64iCubeArray, c3, lod, u64v4);
} }

View File

@ -406,6 +406,7 @@ enum TLayoutFormat {
ElfRg8i, ElfRg8i,
ElfR16i, ElfR16i,
ElfR8i, ElfR8i,
ElfR64i,
ElfIntGuard, // to help with comparisons ElfIntGuard, // to help with comparisons
@ -423,6 +424,7 @@ enum TLayoutFormat {
ElfRg8ui, ElfRg8ui,
ElfR16ui, ElfR16ui,
ElfR8ui, ElfR8ui,
ElfR64ui,
ElfCount ElfCount
}; };
@ -1117,6 +1119,8 @@ public:
case ElfR32ui: return "r32ui"; case ElfR32ui: return "r32ui";
case ElfR16ui: return "r16ui"; case ElfR16ui: return "r16ui";
case ElfR8ui: return "r8ui"; case ElfR8ui: return "r8ui";
case ElfR64ui: return "r64ui";
case ElfR64i: return "r64i";
default: return "none"; default: return "none";
} }
} }

View File

@ -509,6 +509,8 @@ TBuiltIns::TBuiltIns()
prefixes[EbtUint8] = "u8"; prefixes[EbtUint8] = "u8";
prefixes[EbtInt16] = "i16"; prefixes[EbtInt16] = "i16";
prefixes[EbtUint16] = "u16"; prefixes[EbtUint16] = "u16";
prefixes[EbtInt64] = "i64";
prefixes[EbtUint64] = "u64";
#endif #endif
postfixes[2] = "2"; postfixes[2] = "2";
@ -5724,6 +5726,45 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag4HorizontalPixelsEXT = 8;\n"); stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag4HorizontalPixelsEXT = 8;\n");
} }
} }
// GL_EXT_shader_image_int64
if ((profile != EEsProfile && version >= 420) ||
(profile == EEsProfile && version >= 310)) {
const TBasicType bTypes[] = { EbtInt64, EbtUint64 };
for (int ms = 0; ms <= 1; ++ms) { // loop over "bool" multisample or not
for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
for (int dim = Esd1D; dim < EsdSubpass; ++dim) { // 1D, ..., buffer
if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
continue;
if ((dim == Esd3D || dim == EsdRect || dim == EsdBuffer) && arrayed)
continue;
if (dim != Esd2D && ms)
continue;
// Loop over the bTypes
for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
//
// Now, make all the function prototypes for the type we just built...
//
TSampler sampler;
sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
false,
ms ? true : false);
TString typeName = sampler.getString();
addQueryFunctions(sampler, typeName, version, profile);
addImageFunctions(sampler, typeName, version, profile);
}
}
}
}
}
#endif // !GLSLANG_WEB #endif // !GLSLANG_WEB
// printf("%s\n", commonBuiltins.c_str()); // printf("%s\n", commonBuiltins.c_str());
@ -5820,7 +5861,6 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
#endif #endif
if (shadow && (bTypes[bType] == EbtInt || bTypes[bType] == EbtUint)) if (shadow && (bTypes[bType] == EbtInt || bTypes[bType] == EbtUint))
continue; continue;
// //
// Now, make all the function prototypes for the type we just built... // Now, make all the function prototypes for the type we just built...
// //
@ -6045,8 +6085,16 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int
if ( profile != EEsProfile || if ( profile != EEsProfile ||
(profile == EEsProfile && version >= 310)) { (profile == EEsProfile && version >= 310)) {
if (sampler.type == EbtInt || sampler.type == EbtUint) { if (sampler.type == EbtInt || sampler.type == EbtUint || sampler.type == EbtInt64 || sampler.type == EbtUint64 ) {
const char* dataType = sampler.type == EbtInt ? "highp int" : "highp uint";
const char* dataType;
switch (sampler.type) {
case(EbtInt): dataType = "highp int"; break;
case(EbtUint): dataType = "highp uint"; break;
case(EbtInt64): dataType = "highp int64_t"; break;
case(EbtUint64): dataType = "highp uint64_t"; break;
default: dataType = "";
}
const int numBuiltins = 7; const int numBuiltins = 7;

View File

@ -2121,9 +2121,15 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
{ {
// Make sure the image types have the correct layout() format and correct argument types // Make sure the image types have the correct layout() format and correct argument types
const TType& imageType = arg0->getType(); const TType& imageType = arg0->getType();
if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint) { if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint ||
if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui) imageType.getSampler().type == EbtInt64 || imageType.getSampler().type == EbtUint64) {
if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui &&
imageType.getQualifier().getFormat() != ElfR64i && imageType.getQualifier().getFormat() != ElfR64ui)
error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), ""); error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), "");
if (callNode.getType().getBasicType() == EbtInt64 && imageType.getQualifier().getFormat() != ElfR64i)
error(loc, "only supported on image with format r64i", fnCandidate.getName().c_str(), "");
else if (callNode.getType().getBasicType() == EbtUint64 && imageType.getQualifier().getFormat() != ElfR64ui)
error(loc, "only supported on image with format r64ui", fnCandidate.getName().c_str(), "");
} else { } else {
bool isImageAtomicOnFloatAllowed = ((fnCandidate.getName().compare(0, 14, "imageAtomicAdd") == 0) || bool isImageAtomicOnFloatAllowed = ((fnCandidate.getName().compare(0, 14, "imageAtomicAdd") == 0) ||
(fnCandidate.getName().compare(0, 15, "imageAtomicLoad") == 0) || (fnCandidate.getName().compare(0, 15, "imageAtomicLoad") == 0) ||

View File

@ -471,6 +471,28 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["image2DMSArray"] = IMAGE2DMSARRAY; (*KeywordMap)["image2DMSArray"] = IMAGE2DMSARRAY;
(*KeywordMap)["iimage2DMSArray"] = IIMAGE2DMSARRAY; (*KeywordMap)["iimage2DMSArray"] = IIMAGE2DMSARRAY;
(*KeywordMap)["uimage2DMSArray"] = UIMAGE2DMSARRAY; (*KeywordMap)["uimage2DMSArray"] = UIMAGE2DMSARRAY;
(*KeywordMap)["i64image1D"] = I64IMAGE1D;
(*KeywordMap)["u64image1D"] = U64IMAGE1D;
(*KeywordMap)["i64image2D"] = I64IMAGE2D;
(*KeywordMap)["u64image2D"] = U64IMAGE2D;
(*KeywordMap)["i64image3D"] = I64IMAGE3D;
(*KeywordMap)["u64image3D"] = U64IMAGE3D;
(*KeywordMap)["i64image2DRect"] = I64IMAGE2DRECT;
(*KeywordMap)["u64image2DRect"] = U64IMAGE2DRECT;
(*KeywordMap)["i64imageCube"] = I64IMAGECUBE;
(*KeywordMap)["u64imageCube"] = U64IMAGECUBE;
(*KeywordMap)["i64imageBuffer"] = I64IMAGEBUFFER;
(*KeywordMap)["u64imageBuffer"] = U64IMAGEBUFFER;
(*KeywordMap)["i64image1DArray"] = I64IMAGE1DARRAY;
(*KeywordMap)["u64image1DArray"] = U64IMAGE1DARRAY;
(*KeywordMap)["i64image2DArray"] = I64IMAGE2DARRAY;
(*KeywordMap)["u64image2DArray"] = U64IMAGE2DARRAY;
(*KeywordMap)["i64imageCubeArray"] = I64IMAGECUBEARRAY;
(*KeywordMap)["u64imageCubeArray"] = U64IMAGECUBEARRAY;
(*KeywordMap)["i64image2DMS"] = I64IMAGE2DMS;
(*KeywordMap)["u64image2DMS"] = U64IMAGE2DMS;
(*KeywordMap)["i64image2DMSArray"] = I64IMAGE2DMSARRAY;
(*KeywordMap)["u64image2DMSArray"] = U64IMAGE2DMSARRAY;
(*KeywordMap)["double"] = DOUBLE; (*KeywordMap)["double"] = DOUBLE;
(*KeywordMap)["dvec2"] = DVEC2; (*KeywordMap)["dvec2"] = DVEC2;
(*KeywordMap)["dvec3"] = DVEC3; (*KeywordMap)["dvec3"] = DVEC3;
@ -1147,6 +1169,19 @@ int TScanContext::tokenizeIdentifier()
afterType = true; afterType = true;
return firstGenerationImage(false); return firstGenerationImage(false);
case I64IMAGE1D:
case U64IMAGE1D:
case I64IMAGE1DARRAY:
case U64IMAGE1DARRAY:
case I64IMAGE2DRECT:
case U64IMAGE2DRECT:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
return firstGenerationImage(false);
}
return identifierOrType();
case IMAGEBUFFER: case IMAGEBUFFER:
case IIMAGEBUFFER: case IIMAGEBUFFER:
case UIMAGEBUFFER: case UIMAGEBUFFER:
@ -1155,6 +1190,18 @@ int TScanContext::tokenizeIdentifier()
parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer)) parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
return keyword; return keyword;
return firstGenerationImage(false); return firstGenerationImage(false);
case I64IMAGEBUFFER:
case U64IMAGEBUFFER:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
return keyword;
return firstGenerationImage(false);
}
return identifierOrType();
case IMAGE2D: case IMAGE2D:
case IIMAGE2D: case IIMAGE2D:
@ -1171,6 +1218,20 @@ int TScanContext::tokenizeIdentifier()
afterType = true; afterType = true;
return firstGenerationImage(true); return firstGenerationImage(true);
case I64IMAGE2D:
case U64IMAGE2D:
case I64IMAGE3D:
case U64IMAGE3D:
case I64IMAGECUBE:
case U64IMAGECUBE:
case I64IMAGE2DARRAY:
case U64IMAGE2DARRAY:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64))
return firstGenerationImage(true);
return identifierOrType();
case IMAGECUBEARRAY: case IMAGECUBEARRAY:
case IIMAGECUBEARRAY: case IIMAGECUBEARRAY:
case UIMAGECUBEARRAY: case UIMAGECUBEARRAY:
@ -1179,6 +1240,18 @@ int TScanContext::tokenizeIdentifier()
parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array)) parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
return keyword; return keyword;
return secondGenerationImage(); return secondGenerationImage();
case I64IMAGECUBEARRAY:
case U64IMAGECUBEARRAY:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
return keyword;
return secondGenerationImage();
}
return identifierOrType();
case IMAGE2DMS: case IMAGE2DMS:
case IIMAGE2DMS: case IIMAGE2DMS:
@ -1188,6 +1261,17 @@ int TScanContext::tokenizeIdentifier()
case UIMAGE2DMSARRAY: case UIMAGE2DMSARRAY:
afterType = true; afterType = true;
return secondGenerationImage(); return secondGenerationImage();
case I64IMAGE2DMS:
case U64IMAGE2DMS:
case I64IMAGE2DMSARRAY:
case U64IMAGE2DMSARRAY:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
return secondGenerationImage();
}
return identifierOrType();
case DOUBLE: case DOUBLE:
case DVEC2: case DVEC2:

View File

@ -85,6 +85,8 @@ void TType::buildMangledName(TString& mangledName) const
#endif #endif
case EbtInt: mangledName += "i"; break; case EbtInt: mangledName += "i"; break;
case EbtUint: mangledName += "u"; break; case EbtUint: mangledName += "u"; break;
case EbtInt64: mangledName += "i64"; break;
case EbtUint64: mangledName += "u64"; break;
default: break; // some compilers want this default: break; // some compilers want this
} }
if (sampler.isImageClass()) if (sampler.isImageClass())

View File

@ -328,6 +328,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_EXT_blend_func_extended] = EBhDisable; extensionBehavior[E_GL_EXT_blend_func_extended] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable; extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable; extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_image_int64] = EBhDisable;
// OVR extensions // OVR extensions
extensionBehavior[E_GL_OVR_multiview] = EBhDisable; extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
@ -477,6 +478,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_KHR_shader_subgroup_clustered 1\n" "#define GL_KHR_shader_subgroup_clustered 1\n"
"#define GL_KHR_shader_subgroup_quad 1\n" "#define GL_KHR_shader_subgroup_quad 1\n"
"#define GL_EXT_shader_image_int64 1\n"
"#define GL_EXT_shader_atomic_int64 1\n" "#define GL_EXT_shader_atomic_int64 1\n"
"#define GL_EXT_shader_realtime_clock 1\n" "#define GL_EXT_shader_realtime_clock 1\n"
"#define GL_EXT_ray_tracing 1\n" "#define GL_EXT_ray_tracing 1\n"

View File

@ -200,6 +200,7 @@ const char* const E_GL_EXT_ray_flags_primitive_culling = "GL_EXT_ray_flags_
const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func_extended"; const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func_extended";
const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions"; const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions";
const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate"; const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate";
const char* const E_GL_EXT_shader_image_int64 = "GL_EXT_shader_image_int64";
// Arrays of extensions for the above viewportEXTs duplications // Arrays of extensions for the above viewportEXTs duplications

View File

@ -242,6 +242,18 @@ GLSLANG_WEB_EXCLUDE_ON
%token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
%token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
%token <lex> I64IMAGE1D U64IMAGE1D
%token <lex> I64IMAGE2D U64IMAGE2D
%token <lex> I64IMAGE3D U64IMAGE3D
%token <lex> I64IMAGE2DRECT U64IMAGE2DRECT
%token <lex> I64IMAGECUBE U64IMAGECUBE
%token <lex> I64IMAGEBUFFER U64IMAGEBUFFER
%token <lex> I64IMAGE1DARRAY U64IMAGE1DARRAY
%token <lex> I64IMAGE2DARRAY U64IMAGE2DARRAY
%token <lex> I64IMAGECUBEARRAY U64IMAGECUBEARRAY
%token <lex> I64IMAGE2DMS U64IMAGE2DMS
%token <lex> I64IMAGE2DMSARRAY U64IMAGE2DMSARRAY
// texture without sampler // texture without sampler
%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
%token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
@ -3203,6 +3215,116 @@ GLSLANG_WEB_EXCLUDE_ON
$$.basicType = EbtSampler; $$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint, Esd2D, true, false, true); $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
} }
| I64IMAGE1D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd1D);
}
| U64IMAGE1D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd1D);
}
| I64IMAGE2D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd2D);
}
| U64IMAGE2D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd2D);
}
| I64IMAGE3D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd3D);
}
| U64IMAGE3D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd3D);
}
| I64IMAGE2DRECT {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, EsdRect);
}
| U64IMAGE2DRECT {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, EsdRect);
}
| I64IMAGECUBE {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, EsdCube);
}
| U64IMAGECUBE {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, EsdCube);
}
| I64IMAGEBUFFER {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, EsdBuffer);
}
| U64IMAGEBUFFER {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, EsdBuffer);
}
| I64IMAGE1DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd1D, true);
}
| U64IMAGE1DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd1D, true);
}
| I64IMAGE2DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd2D, true);
}
| U64IMAGE2DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd2D, true);
}
| I64IMAGECUBEARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, EsdCube, true);
}
| U64IMAGECUBEARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, EsdCube, true);
}
| I64IMAGE2DMS {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd2D, false, false, true);
}
| U64IMAGE2DMS {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd2D, false, false, true);
}
| I64IMAGE2DMSARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd2D, true, false, true);
}
| U64IMAGE2DMSARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd2D, true, false, true);
}
| SAMPLEREXTERNALOES { // GL_OES_EGL_image_external | SAMPLEREXTERNALOES { // GL_OES_EGL_image_external
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler; $$.basicType = EbtSampler;

View File

@ -242,6 +242,18 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
%token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
%token <lex> I64IMAGE1D U64IMAGE1D
%token <lex> I64IMAGE2D U64IMAGE2D
%token <lex> I64IMAGE3D U64IMAGE3D
%token <lex> I64IMAGE2DRECT U64IMAGE2DRECT
%token <lex> I64IMAGECUBE U64IMAGECUBE
%token <lex> I64IMAGEBUFFER U64IMAGEBUFFER
%token <lex> I64IMAGE1DARRAY U64IMAGE1DARRAY
%token <lex> I64IMAGE2DARRAY U64IMAGE2DARRAY
%token <lex> I64IMAGECUBEARRAY U64IMAGECUBEARRAY
%token <lex> I64IMAGE2DMS U64IMAGE2DMS
%token <lex> I64IMAGE2DMSARRAY U64IMAGE2DMSARRAY
// texture without sampler // texture without sampler
%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY %token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
%token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D %token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
@ -3203,6 +3215,116 @@ type_specifier_nonarray
$$.basicType = EbtSampler; $$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint, Esd2D, true, false, true); $$.sampler.setImage(EbtUint, Esd2D, true, false, true);
} }
| I64IMAGE1D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd1D);
}
| U64IMAGE1D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd1D);
}
| I64IMAGE2D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd2D);
}
| U64IMAGE2D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd2D);
}
| I64IMAGE3D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd3D);
}
| U64IMAGE3D {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd3D);
}
| I64IMAGE2DRECT {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, EsdRect);
}
| U64IMAGE2DRECT {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, EsdRect);
}
| I64IMAGECUBE {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, EsdCube);
}
| U64IMAGECUBE {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, EsdCube);
}
| I64IMAGEBUFFER {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, EsdBuffer);
}
| U64IMAGEBUFFER {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, EsdBuffer);
}
| I64IMAGE1DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd1D, true);
}
| U64IMAGE1DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd1D, true);
}
| I64IMAGE2DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd2D, true);
}
| U64IMAGE2DARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd2D, true);
}
| I64IMAGECUBEARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, EsdCube, true);
}
| U64IMAGECUBEARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, EsdCube, true);
}
| I64IMAGE2DMS {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd2D, false, false, true);
}
| U64IMAGE2DMS {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd2D, false, false, true);
}
| I64IMAGE2DMSARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtInt64, Esd2D, true, false, true);
}
| U64IMAGE2DMSARRAY {
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler;
$$.sampler.setImage(EbtUint64, Esd2D, true, false, true);
}
| SAMPLEREXTERNALOES { // GL_OES_EGL_image_external | SAMPLEREXTERNALOES { // GL_OES_EGL_image_external
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtSampler; $$.basicType = EbtSampler;

File diff suppressed because it is too large Load Diff

View File

@ -297,171 +297,193 @@ extern int yydebug;
F16IMAGEBUFFER = 507, F16IMAGEBUFFER = 507,
F16IMAGE2DMS = 508, F16IMAGE2DMS = 508,
F16IMAGE2DMSARRAY = 509, F16IMAGE2DMSARRAY = 509,
TEXTURECUBEARRAY = 510, I64IMAGE1D = 510,
ITEXTURECUBEARRAY = 511, U64IMAGE1D = 511,
UTEXTURECUBEARRAY = 512, I64IMAGE2D = 512,
TEXTURE1D = 513, U64IMAGE2D = 513,
ITEXTURE1D = 514, I64IMAGE3D = 514,
UTEXTURE1D = 515, U64IMAGE3D = 515,
TEXTURE1DARRAY = 516, I64IMAGE2DRECT = 516,
ITEXTURE1DARRAY = 517, U64IMAGE2DRECT = 517,
UTEXTURE1DARRAY = 518, I64IMAGECUBE = 518,
TEXTURE2DRECT = 519, U64IMAGECUBE = 519,
ITEXTURE2DRECT = 520, I64IMAGEBUFFER = 520,
UTEXTURE2DRECT = 521, U64IMAGEBUFFER = 521,
TEXTUREBUFFER = 522, I64IMAGE1DARRAY = 522,
ITEXTUREBUFFER = 523, U64IMAGE1DARRAY = 523,
UTEXTUREBUFFER = 524, I64IMAGE2DARRAY = 524,
TEXTURE2DMS = 525, U64IMAGE2DARRAY = 525,
ITEXTURE2DMS = 526, I64IMAGECUBEARRAY = 526,
UTEXTURE2DMS = 527, U64IMAGECUBEARRAY = 527,
TEXTURE2DMSARRAY = 528, I64IMAGE2DMS = 528,
ITEXTURE2DMSARRAY = 529, U64IMAGE2DMS = 529,
UTEXTURE2DMSARRAY = 530, I64IMAGE2DMSARRAY = 530,
F16TEXTURE1D = 531, U64IMAGE2DMSARRAY = 531,
F16TEXTURE2D = 532, TEXTURECUBEARRAY = 532,
F16TEXTURE3D = 533, ITEXTURECUBEARRAY = 533,
F16TEXTURE2DRECT = 534, UTEXTURECUBEARRAY = 534,
F16TEXTURECUBE = 535, TEXTURE1D = 535,
F16TEXTURE1DARRAY = 536, ITEXTURE1D = 536,
F16TEXTURE2DARRAY = 537, UTEXTURE1D = 537,
F16TEXTURECUBEARRAY = 538, TEXTURE1DARRAY = 538,
F16TEXTUREBUFFER = 539, ITEXTURE1DARRAY = 539,
F16TEXTURE2DMS = 540, UTEXTURE1DARRAY = 540,
F16TEXTURE2DMSARRAY = 541, TEXTURE2DRECT = 541,
SUBPASSINPUT = 542, ITEXTURE2DRECT = 542,
SUBPASSINPUTMS = 543, UTEXTURE2DRECT = 543,
ISUBPASSINPUT = 544, TEXTUREBUFFER = 544,
ISUBPASSINPUTMS = 545, ITEXTUREBUFFER = 545,
USUBPASSINPUT = 546, UTEXTUREBUFFER = 546,
USUBPASSINPUTMS = 547, TEXTURE2DMS = 547,
F16SUBPASSINPUT = 548, ITEXTURE2DMS = 548,
F16SUBPASSINPUTMS = 549, UTEXTURE2DMS = 549,
LEFT_OP = 550, TEXTURE2DMSARRAY = 550,
RIGHT_OP = 551, ITEXTURE2DMSARRAY = 551,
INC_OP = 552, UTEXTURE2DMSARRAY = 552,
DEC_OP = 553, F16TEXTURE1D = 553,
LE_OP = 554, F16TEXTURE2D = 554,
GE_OP = 555, F16TEXTURE3D = 555,
EQ_OP = 556, F16TEXTURE2DRECT = 556,
NE_OP = 557, F16TEXTURECUBE = 557,
AND_OP = 558, F16TEXTURE1DARRAY = 558,
OR_OP = 559, F16TEXTURE2DARRAY = 559,
XOR_OP = 560, F16TEXTURECUBEARRAY = 560,
MUL_ASSIGN = 561, F16TEXTUREBUFFER = 561,
DIV_ASSIGN = 562, F16TEXTURE2DMS = 562,
ADD_ASSIGN = 563, F16TEXTURE2DMSARRAY = 563,
MOD_ASSIGN = 564, SUBPASSINPUT = 564,
LEFT_ASSIGN = 565, SUBPASSINPUTMS = 565,
RIGHT_ASSIGN = 566, ISUBPASSINPUT = 566,
AND_ASSIGN = 567, ISUBPASSINPUTMS = 567,
XOR_ASSIGN = 568, USUBPASSINPUT = 568,
OR_ASSIGN = 569, USUBPASSINPUTMS = 569,
SUB_ASSIGN = 570, F16SUBPASSINPUT = 570,
STRING_LITERAL = 571, F16SUBPASSINPUTMS = 571,
LEFT_PAREN = 572, LEFT_OP = 572,
RIGHT_PAREN = 573, RIGHT_OP = 573,
LEFT_BRACKET = 574, INC_OP = 574,
RIGHT_BRACKET = 575, DEC_OP = 575,
LEFT_BRACE = 576, LE_OP = 576,
RIGHT_BRACE = 577, GE_OP = 577,
DOT = 578, EQ_OP = 578,
COMMA = 579, NE_OP = 579,
COLON = 580, AND_OP = 580,
EQUAL = 581, OR_OP = 581,
SEMICOLON = 582, XOR_OP = 582,
BANG = 583, MUL_ASSIGN = 583,
DASH = 584, DIV_ASSIGN = 584,
TILDE = 585, ADD_ASSIGN = 585,
PLUS = 586, MOD_ASSIGN = 586,
STAR = 587, LEFT_ASSIGN = 587,
SLASH = 588, RIGHT_ASSIGN = 588,
PERCENT = 589, AND_ASSIGN = 589,
LEFT_ANGLE = 590, XOR_ASSIGN = 590,
RIGHT_ANGLE = 591, OR_ASSIGN = 591,
VERTICAL_BAR = 592, SUB_ASSIGN = 592,
CARET = 593, STRING_LITERAL = 593,
AMPERSAND = 594, LEFT_PAREN = 594,
QUESTION = 595, RIGHT_PAREN = 595,
INVARIANT = 596, LEFT_BRACKET = 596,
HIGH_PRECISION = 597, RIGHT_BRACKET = 597,
MEDIUM_PRECISION = 598, LEFT_BRACE = 598,
LOW_PRECISION = 599, RIGHT_BRACE = 599,
PRECISION = 600, DOT = 600,
PACKED = 601, COMMA = 601,
RESOURCE = 602, COLON = 602,
SUPERP = 603, EQUAL = 603,
FLOATCONSTANT = 604, SEMICOLON = 604,
INTCONSTANT = 605, BANG = 605,
UINTCONSTANT = 606, DASH = 606,
BOOLCONSTANT = 607, TILDE = 607,
IDENTIFIER = 608, PLUS = 608,
TYPE_NAME = 609, STAR = 609,
CENTROID = 610, SLASH = 610,
IN = 611, PERCENT = 611,
OUT = 612, LEFT_ANGLE = 612,
INOUT = 613, RIGHT_ANGLE = 613,
STRUCT = 614, VERTICAL_BAR = 614,
VOID = 615, CARET = 615,
WHILE = 616, AMPERSAND = 616,
BREAK = 617, QUESTION = 617,
CONTINUE = 618, INVARIANT = 618,
DO = 619, HIGH_PRECISION = 619,
ELSE = 620, MEDIUM_PRECISION = 620,
FOR = 621, LOW_PRECISION = 621,
IF = 622, PRECISION = 622,
DISCARD = 623, PACKED = 623,
RETURN = 624, RESOURCE = 624,
SWITCH = 625, SUPERP = 625,
CASE = 626, FLOATCONSTANT = 626,
DEFAULT = 627, INTCONSTANT = 627,
UNIFORM = 628, UINTCONSTANT = 628,
SHARED = 629, BOOLCONSTANT = 629,
BUFFER = 630, IDENTIFIER = 630,
FLAT = 631, TYPE_NAME = 631,
SMOOTH = 632, CENTROID = 632,
LAYOUT = 633, IN = 633,
DOUBLECONSTANT = 634, OUT = 634,
INT16CONSTANT = 635, INOUT = 635,
UINT16CONSTANT = 636, STRUCT = 636,
FLOAT16CONSTANT = 637, VOID = 637,
INT32CONSTANT = 638, WHILE = 638,
UINT32CONSTANT = 639, BREAK = 639,
INT64CONSTANT = 640, CONTINUE = 640,
UINT64CONSTANT = 641, DO = 641,
SUBROUTINE = 642, ELSE = 642,
DEMOTE = 643, FOR = 643,
PAYLOADNV = 644, IF = 644,
PAYLOADINNV = 645, DISCARD = 645,
HITATTRNV = 646, RETURN = 646,
CALLDATANV = 647, SWITCH = 647,
CALLDATAINNV = 648, CASE = 648,
PAYLOADEXT = 649, DEFAULT = 649,
PAYLOADINEXT = 650, UNIFORM = 650,
HITATTREXT = 651, SHARED = 651,
CALLDATAEXT = 652, BUFFER = 652,
CALLDATAINEXT = 653, FLAT = 653,
PATCH = 654, SMOOTH = 654,
SAMPLE = 655, LAYOUT = 655,
NONUNIFORM = 656, DOUBLECONSTANT = 656,
COHERENT = 657, INT16CONSTANT = 657,
VOLATILE = 658, UINT16CONSTANT = 658,
RESTRICT = 659, FLOAT16CONSTANT = 659,
READONLY = 660, INT32CONSTANT = 660,
WRITEONLY = 661, UINT32CONSTANT = 661,
DEVICECOHERENT = 662, INT64CONSTANT = 662,
QUEUEFAMILYCOHERENT = 663, UINT64CONSTANT = 663,
WORKGROUPCOHERENT = 664, SUBROUTINE = 664,
SUBGROUPCOHERENT = 665, DEMOTE = 665,
NONPRIVATE = 666, PAYLOADNV = 666,
SHADERCALLCOHERENT = 667, PAYLOADINNV = 667,
NOPERSPECTIVE = 668, HITATTRNV = 668,
EXPLICITINTERPAMD = 669, CALLDATANV = 669,
PERVERTEXNV = 670, CALLDATAINNV = 670,
PERPRIMITIVENV = 671, PAYLOADEXT = 671,
PERVIEWNV = 672, PAYLOADINEXT = 672,
PERTASKNV = 673, HITATTREXT = 673,
PRECISE = 674 CALLDATAEXT = 674,
CALLDATAINEXT = 675,
PATCH = 676,
SAMPLE = 677,
NONUNIFORM = 678,
COHERENT = 679,
VOLATILE = 680,
RESTRICT = 681,
READONLY = 682,
WRITEONLY = 683,
DEVICECOHERENT = 684,
QUEUEFAMILYCOHERENT = 685,
WORKGROUPCOHERENT = 686,
SUBGROUPCOHERENT = 687,
NONPRIVATE = 688,
SHADERCALLCOHERENT = 689,
NOPERSPECTIVE = 690,
EXPLICITINTERPAMD = 691,
PERVERTEXNV = 692,
PERPRIMITIVENV = 693,
PERVIEWNV = 694,
PERTASKNV = 695,
PRECISE = 696
}; };
#endif #endif
@ -506,7 +528,7 @@ union YYSTYPE
glslang::TArraySizes* typeParameters; glslang::TArraySizes* typeParameters;
} interm; } interm;
#line 510 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ #line 532 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */
}; };
typedef union YYSTYPE YYSTYPE; typedef union YYSTYPE YYSTYPE;

View File

@ -411,6 +411,7 @@ INSTANTIATE_TEST_SUITE_P(
"spv.texture.vert", "spv.texture.vert",
"spv.textureBuffer.vert", "spv.textureBuffer.vert",
"spv.image.frag", "spv.image.frag",
"spv.imageAtomic64.frag",
"spv.types.frag", "spv.types.frag",
"spv.uint.frag", "spv.uint.frag",
"spv.uniformArray.frag", "spv.uniformArray.frag",