Fix a parse issue of imageAtomicCompSwap()
The max count of arguments is 5 when image2DMS/image2DMSArray is specified.
This commit is contained in:
parent
e9405d0b44
commit
d698ebf5f8
@ -5,7 +5,7 @@ error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requi
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80007
|
// Generated by (magic number): 80007
|
||||||
// Id's are bound by 376
|
// Id's are bound by 395
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
Capability StorageImageMultisample
|
Capability StorageImageMultisample
|
||||||
@ -19,7 +19,7 @@ error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requi
|
|||||||
Capability StorageImageWriteWithoutFormat
|
Capability StorageImageWriteWithoutFormat
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 132 142 152 248 362 375
|
EntryPoint Fragment 4 "main" 132 142 152 248 381 394
|
||||||
ExecutionMode 4 OriginUpperLeft
|
ExecutionMode 4 OriginUpperLeft
|
||||||
Source GLSL 450
|
Source GLSL 450
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
@ -43,9 +43,11 @@ error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requi
|
|||||||
Name 232 "ii1D"
|
Name 232 "ii1D"
|
||||||
Name 245 "ui2D"
|
Name 245 "ui2D"
|
||||||
Name 248 "value"
|
Name 248 "value"
|
||||||
Name 357 "wo2D"
|
Name 357 "ii2DMS"
|
||||||
Name 362 "fragData"
|
Name 367 "ui2DMSArray"
|
||||||
Name 375 "ic4D"
|
Name 376 "wo2D"
|
||||||
|
Name 381 "fragData"
|
||||||
|
Name 394 "ic4D"
|
||||||
Decorate 15(i1D) DescriptorSet 0
|
Decorate 15(i1D) DescriptorSet 0
|
||||||
Decorate 15(i1D) Binding 0
|
Decorate 15(i1D) Binding 0
|
||||||
Decorate 27(i2D) DescriptorSet 0
|
Decorate 27(i2D) DescriptorSet 0
|
||||||
@ -76,10 +78,14 @@ error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requi
|
|||||||
Decorate 245(ui2D) DescriptorSet 0
|
Decorate 245(ui2D) DescriptorSet 0
|
||||||
Decorate 245(ui2D) Binding 12
|
Decorate 245(ui2D) Binding 12
|
||||||
Decorate 248(value) Flat
|
Decorate 248(value) Flat
|
||||||
Decorate 357(wo2D) DescriptorSet 0
|
Decorate 357(ii2DMS) DescriptorSet 0
|
||||||
Decorate 357(wo2D) Binding 1
|
Decorate 357(ii2DMS) Binding 13
|
||||||
Decorate 357(wo2D) NonReadable
|
Decorate 367(ui2DMSArray) DescriptorSet 0
|
||||||
Decorate 375(ic4D) Flat
|
Decorate 367(ui2DMSArray) Binding 14
|
||||||
|
Decorate 376(wo2D) DescriptorSet 0
|
||||||
|
Decorate 376(wo2D) Binding 1
|
||||||
|
Decorate 376(wo2D) NonReadable
|
||||||
|
Decorate 394(ic4D) Flat
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
@ -161,16 +167,22 @@ error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requi
|
|||||||
340: 6(int) Constant 18
|
340: 6(int) Constant 18
|
||||||
341: 6(int) Constant 17
|
341: 6(int) Constant 17
|
||||||
349: 18(int) Constant 19
|
349: 18(int) Constant 19
|
||||||
355: TypeImage 12(float) 2D nonsampled format:Unknown
|
355: TypeImage 6(int) 2D multi-sampled nonsampled format:R32i
|
||||||
356: TypePointer UniformConstant 355
|
356: TypePointer UniformConstant 355
|
||||||
357(wo2D): 356(ptr) Variable UniformConstant
|
357(ii2DMS): 356(ptr) Variable UniformConstant
|
||||||
361: TypePointer Output 125(fvec4)
|
365: TypeImage 18(int) 2D array multi-sampled nonsampled format:R32ui
|
||||||
362(fragData): 361(ptr) Variable Output
|
366: TypePointer UniformConstant 365
|
||||||
367: TypeBool
|
367(ui2DMSArray): 366(ptr) Variable UniformConstant
|
||||||
370: TypeVector 367(bool) 4
|
374: TypeImage 12(float) 2D nonsampled format:Unknown
|
||||||
373: TypeVector 6(int) 4
|
375: TypePointer UniformConstant 374
|
||||||
374: TypePointer Input 373(ivec4)
|
376(wo2D): 375(ptr) Variable UniformConstant
|
||||||
375(ic4D): 374(ptr) Variable Input
|
380: TypePointer Output 125(fvec4)
|
||||||
|
381(fragData): 380(ptr) Variable Output
|
||||||
|
386: TypeBool
|
||||||
|
389: TypeVector 386(bool) 4
|
||||||
|
392: TypeVector 6(int) 4
|
||||||
|
393: TypePointer Input 392(ivec4)
|
||||||
|
394(ic4D): 393(ptr) Variable Input
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
9(iv): 8(ptr) Variable Function
|
9(iv): 8(ptr) Variable Function
|
||||||
@ -497,18 +509,33 @@ error: Capability ImageRect is not allowed by Vulkan 1.0 specification (or requi
|
|||||||
353: 18(int) Load 229(ui)
|
353: 18(int) Load 229(ui)
|
||||||
354: 18(int) IAdd 353 352
|
354: 18(int) IAdd 353 352
|
||||||
Store 229(ui) 354
|
Store 229(ui) 354
|
||||||
358: 355 Load 357(wo2D)
|
358: 29(ivec2) Load 142(ic2D)
|
||||||
359: 29(ivec2) Load 142(ic2D)
|
359: 235(ptr) ImageTexelPointer 357(ii2DMS) 358 216
|
||||||
360: 125(fvec4) Load 127(v)
|
360: 6(int) AtomicCompareExchange 359 237 19 19 341 340
|
||||||
ImageWrite 358 359 360
|
361: 20(ptr) AccessChain 9(iv) 19
|
||||||
363: 18(int) Load 229(ui)
|
362: 6(int) Load 361
|
||||||
364: 20(ptr) AccessChain 9(iv) 237
|
363: 6(int) IAdd 362 360
|
||||||
365: 6(int) Load 364
|
364: 20(ptr) AccessChain 9(iv) 19
|
||||||
366: 18(int) Bitcast 365
|
Store 364 363
|
||||||
368: 367(bool) INotEqual 363 366
|
368: 7(ivec3) Load 152(ic3D)
|
||||||
369: 125(fvec4) Load 127(v)
|
369: 18(int) Load 248(value)
|
||||||
371: 370(bvec4) CompositeConstruct 368 368 368 368
|
370: 250(ptr) ImageTexelPointer 367(ui2DMSArray) 368 220
|
||||||
372: 125(fvec4) Select 371 369 129
|
371: 18(int) AtomicCompareExchange 370 237 19 19 369 349
|
||||||
Store 362(fragData) 372
|
372: 18(int) Load 229(ui)
|
||||||
|
373: 18(int) IAdd 372 371
|
||||||
|
Store 229(ui) 373
|
||||||
|
377: 374 Load 376(wo2D)
|
||||||
|
378: 29(ivec2) Load 142(ic2D)
|
||||||
|
379: 125(fvec4) Load 127(v)
|
||||||
|
ImageWrite 377 378 379
|
||||||
|
382: 18(int) Load 229(ui)
|
||||||
|
383: 20(ptr) AccessChain 9(iv) 237
|
||||||
|
384: 6(int) Load 383
|
||||||
|
385: 18(int) Bitcast 384
|
||||||
|
387: 386(bool) INotEqual 382 385
|
||||||
|
388: 125(fvec4) Load 127(v)
|
||||||
|
390: 389(bvec4) CompositeConstruct 387 387 387 387
|
||||||
|
391: 125(fvec4) Select 390 388 129
|
||||||
|
Store 381(fragData) 391
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -14,6 +14,8 @@ layout(rgba32f, binding = 10) uniform image2DMSArray i2DMSArray;
|
|||||||
|
|
||||||
layout(r32i, binding = 11) uniform iimage1D ii1D;
|
layout(r32i, binding = 11) uniform iimage1D ii1D;
|
||||||
layout(r32ui, binding = 12) uniform uimage2D ui2D;
|
layout(r32ui, binding = 12) uniform uimage2D ui2D;
|
||||||
|
layout(r32i, binding = 13) uniform iimage2DMS ii2DMS;
|
||||||
|
layout(r32ui, binding = 14) uniform uimage2DMSArray ui2DMSArray;
|
||||||
|
|
||||||
flat in int ic1D;
|
flat in int ic1D;
|
||||||
flat in ivec2 ic2D;
|
flat in ivec2 ic2D;
|
||||||
@ -85,6 +87,8 @@ void main()
|
|||||||
ui += imageAtomicExchange(ui2D, ic2D, value);
|
ui += imageAtomicExchange(ui2D, ic2D, value);
|
||||||
iv.x += imageAtomicCompSwap(ii1D, ic1D, 18, 17);
|
iv.x += imageAtomicCompSwap(ii1D, ic1D, 18, 17);
|
||||||
ui += imageAtomicCompSwap(ui2D, ic2D, 19u, value);
|
ui += imageAtomicCompSwap(ui2D, ic2D, 19u, value);
|
||||||
|
iv.x += imageAtomicCompSwap(ii2DMS, ic2D, 2, 18, 17);
|
||||||
|
ui += imageAtomicCompSwap(ui2DMSArray, ic3D, 3, 19u, value);
|
||||||
|
|
||||||
imageStore(wo2D, ic2D, v);
|
imageStore(wo2D, ic2D, v);
|
||||||
|
|
||||||
|
@ -1897,7 +1897,8 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
|
|||||||
error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
|
error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argp->size() > 4) {
|
const size_t maxArgs = imageType.getSampler().isMultiSample() ? 5 : 4;
|
||||||
|
if (argp->size() > maxArgs) {
|
||||||
requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
|
requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
|
||||||
memorySemanticsCheck(loc, fnCandidate, callNode);
|
memorySemanticsCheck(loc, fnCandidate, callNode);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user