Commit 9fb38deb by John Kessenich

SPV subgroups: Semantic check that SPIR-V 1.3 is targeted.

parent f35d2569
spv.vulkan100.subgroupArithmetic.comp
ERROR: 0:19: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:20: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:21: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:22: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:24: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:25: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:26: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:27: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:29: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:30: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:31: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:32: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:34: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:35: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:36: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:37: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:39: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:40: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:41: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:42: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:44: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:45: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:46: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:47: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:49: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:50: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:51: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:52: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:54: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:55: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:56: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:57: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:59: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:60: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:61: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:62: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:64: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:65: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:66: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:67: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:69: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:70: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:71: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:72: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:74: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:75: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:76: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:77: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:79: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:80: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:81: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:82: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:84: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:85: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:86: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:87: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:89: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:90: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:91: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:92: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:94: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:95: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:96: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:97: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:99: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:100: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:101: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:102: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:104: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:105: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:106: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:107: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:109: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:110: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:111: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:112: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:114: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:115: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:116: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:117: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:119: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:120: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:121: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:122: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:124: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:125: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:126: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:127: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:129: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:130: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:131: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:132: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:134: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:135: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:136: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:137: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:139: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:140: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:141: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:142: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:144: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:145: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:146: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:147: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:149: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:150: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:151: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:152: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:154: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:155: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:156: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:157: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:159: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:160: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:161: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:162: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:164: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:165: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:166: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:167: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:169: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:170: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:171: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:172: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:174: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:175: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:176: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:177: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:179: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:180: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:181: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:182: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:184: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:185: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:186: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:187: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:189: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:190: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:191: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:192: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:194: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:195: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:196: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:197: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:199: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:200: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:201: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:202: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:204: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:205: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:206: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:207: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:209: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:210: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:211: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:212: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:214: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:215: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:216: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:217: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:219: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:220: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:221: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:222: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:224: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:225: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:226: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:227: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:229: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:230: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:231: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:232: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:234: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:235: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:236: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:237: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:239: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:240: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:241: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:242: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:244: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:245: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:246: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:247: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:249: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:250: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:251: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:252: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:254: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:255: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:256: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:257: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:259: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:260: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:261: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:262: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:264: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:265: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:266: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:267: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:269: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:270: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:271: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:272: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:274: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:275: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:276: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:277: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:279: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:280: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:281: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:282: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:284: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:285: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:286: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:287: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:289: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:290: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:291: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:292: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:294: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:295: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:296: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:297: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:299: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:300: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:301: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:302: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:304: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:305: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:306: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:307: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:309: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:310: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:311: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:312: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:314: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:315: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:316: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:317: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:319: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:320: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:321: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:322: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:324: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:325: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:326: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:327: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:329: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:330: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:331: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:332: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:334: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:335: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:336: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:337: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:339: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:340: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:341: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:342: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:344: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:345: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:346: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:347: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:349: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:350: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:351: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:352: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:354: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:355: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:356: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:357: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:359: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:360: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:361: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:362: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:364: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:365: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:366: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:367: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:369: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:370: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:371: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:372: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:374: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:375: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:376: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:377: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:379: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:380: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:381: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:382: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:384: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:385: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:386: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:387: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:389: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:390: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:391: 'subgroup op' : requires SPIR-V 1.3
ERROR: 0:392: 'subgroup op' : requires SPIR-V 1.3
ERROR: 300 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
#version 450
#extension GL_KHR_shader_subgroup_arithmetic: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
vec4 f4;
ivec4 i4;
uvec4 u4;
dvec4 d4;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].f4.x = subgroupAdd(data[0].f4.x);
data[invocation].f4.xy = subgroupAdd(data[1].f4.xy);
data[invocation].f4.xyz = subgroupAdd(data[2].f4.xyz);
data[invocation].f4 = subgroupAdd(data[3].f4);
data[invocation].i4.x = subgroupAdd(data[0].i4.x);
data[invocation].i4.xy = subgroupAdd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupAdd(data[2].i4.xyz);
data[invocation].i4 = subgroupAdd(data[3].i4);
data[invocation].u4.x = subgroupAdd(data[0].u4.x);
data[invocation].u4.xy = subgroupAdd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupAdd(data[2].u4.xyz);
data[invocation].u4 = subgroupAdd(data[3].u4);
data[invocation].d4.x = subgroupAdd(data[0].d4.x);
data[invocation].d4.xy = subgroupAdd(data[1].d4.xy);
data[invocation].d4.xyz = subgroupAdd(data[2].d4.xyz);
data[invocation].d4 = subgroupAdd(data[3].d4);
data[invocation].f4.x = subgroupMul(data[0].f4.x);
data[invocation].f4.xy = subgroupMul(data[1].f4.xy);
data[invocation].f4.xyz = subgroupMul(data[2].f4.xyz);
data[invocation].f4 = subgroupMul(data[3].f4);
data[invocation].i4.x = subgroupMul(data[0].i4.x);
data[invocation].i4.xy = subgroupMul(data[1].i4.xy);
data[invocation].i4.xyz = subgroupMul(data[2].i4.xyz);
data[invocation].i4 = subgroupMul(data[3].i4);
data[invocation].u4.x = subgroupMul(data[0].u4.x);
data[invocation].u4.xy = subgroupMul(data[1].u4.xy);
data[invocation].u4.xyz = subgroupMul(data[2].u4.xyz);
data[invocation].u4 = subgroupMul(data[3].u4);
data[invocation].d4.x = subgroupMul(data[0].d4.x);
data[invocation].d4.xy = subgroupMul(data[1].d4.xy);
data[invocation].d4.xyz = subgroupMul(data[2].d4.xyz);
data[invocation].d4 = subgroupMul(data[3].d4);
data[invocation].f4.x = subgroupMin(data[0].f4.x);
data[invocation].f4.xy = subgroupMin(data[1].f4.xy);
data[invocation].f4.xyz = subgroupMin(data[2].f4.xyz);
data[invocation].f4 = subgroupMin(data[3].f4);
data[invocation].i4.x = subgroupMin(data[0].i4.x);
data[invocation].i4.xy = subgroupMin(data[1].i4.xy);
data[invocation].i4.xyz = subgroupMin(data[2].i4.xyz);
data[invocation].i4 = subgroupMin(data[3].i4);
data[invocation].u4.x = subgroupMin(data[0].u4.x);
data[invocation].u4.xy = subgroupMin(data[1].u4.xy);
data[invocation].u4.xyz = subgroupMin(data[2].u4.xyz);
data[invocation].u4 = subgroupMin(data[3].u4);
data[invocation].d4.x = subgroupMin(data[0].d4.x);
data[invocation].d4.xy = subgroupMin(data[1].d4.xy);
data[invocation].d4.xyz = subgroupMin(data[2].d4.xyz);
data[invocation].d4 = subgroupMin(data[3].d4);
data[invocation].f4.x = subgroupMax(data[0].f4.x);
data[invocation].f4.xy = subgroupMax(data[1].f4.xy);
data[invocation].f4.xyz = subgroupMax(data[2].f4.xyz);
data[invocation].f4 = subgroupMax(data[3].f4);
data[invocation].i4.x = subgroupMax(data[0].i4.x);
data[invocation].i4.xy = subgroupMax(data[1].i4.xy);
data[invocation].i4.xyz = subgroupMax(data[2].i4.xyz);
data[invocation].i4 = subgroupMax(data[3].i4);
data[invocation].u4.x = subgroupMax(data[0].u4.x);
data[invocation].u4.xy = subgroupMax(data[1].u4.xy);
data[invocation].u4.xyz = subgroupMax(data[2].u4.xyz);
data[invocation].u4 = subgroupMax(data[3].u4);
data[invocation].d4.x = subgroupMax(data[0].d4.x);
data[invocation].d4.xy = subgroupMax(data[1].d4.xy);
data[invocation].d4.xyz = subgroupMax(data[2].d4.xyz);
data[invocation].d4 = subgroupMax(data[3].d4);
data[invocation].i4.x = subgroupAnd(data[0].i4.x);
data[invocation].i4.xy = subgroupAnd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupAnd(data[2].i4.xyz);
data[invocation].i4 = subgroupAnd(data[3].i4);
data[invocation].u4.x = subgroupAnd(data[0].u4.x);
data[invocation].u4.xy = subgroupAnd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupAnd(data[2].u4.xyz);
data[invocation].u4 = subgroupAnd(data[3].u4);
data[invocation].i4.x = int(subgroupAnd(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupAnd(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupAnd(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupAnd(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupOr(data[0].i4.x);
data[invocation].i4.xy = subgroupOr(data[1].i4.xy);
data[invocation].i4.xyz = subgroupOr(data[2].i4.xyz);
data[invocation].i4 = subgroupOr(data[3].i4);
data[invocation].u4.x = subgroupOr(data[0].u4.x);
data[invocation].u4.xy = subgroupOr(data[1].u4.xy);
data[invocation].u4.xyz = subgroupOr(data[2].u4.xyz);
data[invocation].u4 = subgroupOr(data[3].u4);
data[invocation].i4.x = int(subgroupOr(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupOr(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupOr(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupOr(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupXor(data[0].i4.x);
data[invocation].i4.xy = subgroupXor(data[1].i4.xy);
data[invocation].i4.xyz = subgroupXor(data[2].i4.xyz);
data[invocation].i4 = subgroupXor(data[3].i4);
data[invocation].u4.x = subgroupXor(data[0].u4.x);
data[invocation].u4.xy = subgroupXor(data[1].u4.xy);
data[invocation].u4.xyz = subgroupXor(data[2].u4.xyz);
data[invocation].u4 = subgroupXor(data[3].u4);
data[invocation].i4.x = int(subgroupXor(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupXor(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupXor(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupXor(lessThan(data[1].i4, ivec4(0))));
data[invocation].f4.x = subgroupInclusiveAdd(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveAdd(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveAdd(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveAdd(data[3].f4);
data[invocation].i4.x = subgroupInclusiveAdd(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveAdd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveAdd(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveAdd(data[3].i4);
data[invocation].u4.x = subgroupInclusiveAdd(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveAdd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveAdd(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveAdd(data[3].u4);
data[invocation].d4.x = subgroupInclusiveAdd(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveAdd(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveAdd(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveAdd(data[3].d4);
data[invocation].f4.x = subgroupInclusiveMul(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveMul(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveMul(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveMul(data[3].f4);
data[invocation].i4.x = subgroupInclusiveMul(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveMul(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveMul(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveMul(data[3].i4);
data[invocation].u4.x = subgroupInclusiveMul(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveMul(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveMul(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveMul(data[3].u4);
data[invocation].d4.x = subgroupInclusiveMul(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveMul(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveMul(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveMul(data[3].d4);
data[invocation].f4.x = subgroupInclusiveMin(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveMin(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveMin(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveMin(data[3].f4);
data[invocation].i4.x = subgroupInclusiveMin(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveMin(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveMin(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveMin(data[3].i4);
data[invocation].u4.x = subgroupInclusiveMin(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveMin(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveMin(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveMin(data[3].u4);
data[invocation].d4.x = subgroupInclusiveMin(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveMin(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveMin(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveMin(data[3].d4);
data[invocation].f4.x = subgroupInclusiveMax(data[0].f4.x);
data[invocation].f4.xy = subgroupInclusiveMax(data[1].f4.xy);
data[invocation].f4.xyz = subgroupInclusiveMax(data[2].f4.xyz);
data[invocation].f4 = subgroupInclusiveMax(data[3].f4);
data[invocation].i4.x = subgroupInclusiveMax(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveMax(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveMax(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveMax(data[3].i4);
data[invocation].u4.x = subgroupInclusiveMax(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveMax(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveMax(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveMax(data[3].u4);
data[invocation].d4.x = subgroupInclusiveMax(data[0].d4.x);
data[invocation].d4.xy = subgroupInclusiveMax(data[1].d4.xy);
data[invocation].d4.xyz = subgroupInclusiveMax(data[2].d4.xyz);
data[invocation].d4 = subgroupInclusiveMax(data[3].d4);
data[invocation].i4.x = subgroupInclusiveAnd(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveAnd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveAnd(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveAnd(data[3].i4);
data[invocation].u4.x = subgroupInclusiveAnd(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveAnd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveAnd(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveAnd(data[3].u4);
data[invocation].i4.x = int(subgroupInclusiveAnd(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupInclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupInclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupInclusiveAnd(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupInclusiveOr(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveOr(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveOr(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveOr(data[3].i4);
data[invocation].u4.x = subgroupInclusiveOr(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveOr(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveOr(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveOr(data[3].u4);
data[invocation].i4.x = int(subgroupInclusiveOr(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupInclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupInclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupInclusiveOr(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupInclusiveXor(data[0].i4.x);
data[invocation].i4.xy = subgroupInclusiveXor(data[1].i4.xy);
data[invocation].i4.xyz = subgroupInclusiveXor(data[2].i4.xyz);
data[invocation].i4 = subgroupInclusiveXor(data[3].i4);
data[invocation].u4.x = subgroupInclusiveXor(data[0].u4.x);
data[invocation].u4.xy = subgroupInclusiveXor(data[1].u4.xy);
data[invocation].u4.xyz = subgroupInclusiveXor(data[2].u4.xyz);
data[invocation].u4 = subgroupInclusiveXor(data[3].u4);
data[invocation].i4.x = int(subgroupInclusiveXor(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupInclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupInclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupInclusiveXor(lessThan(data[1].i4, ivec4(0))));
data[invocation].f4.x = subgroupExclusiveAdd(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveAdd(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveAdd(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveAdd(data[3].f4);
data[invocation].i4.x = subgroupExclusiveAdd(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveAdd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveAdd(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveAdd(data[3].i4);
data[invocation].u4.x = subgroupExclusiveAdd(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveAdd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveAdd(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveAdd(data[3].u4);
data[invocation].d4.x = subgroupExclusiveAdd(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveAdd(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveAdd(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveAdd(data[3].d4);
data[invocation].f4.x = subgroupExclusiveMul(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveMul(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveMul(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveMul(data[3].f4);
data[invocation].i4.x = subgroupExclusiveMul(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveMul(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveMul(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveMul(data[3].i4);
data[invocation].u4.x = subgroupExclusiveMul(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveMul(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveMul(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveMul(data[3].u4);
data[invocation].d4.x = subgroupExclusiveMul(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveMul(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveMul(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveMul(data[3].d4);
data[invocation].f4.x = subgroupExclusiveMin(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveMin(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveMin(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveMin(data[3].f4);
data[invocation].i4.x = subgroupExclusiveMin(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveMin(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveMin(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveMin(data[3].i4);
data[invocation].u4.x = subgroupExclusiveMin(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveMin(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveMin(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveMin(data[3].u4);
data[invocation].d4.x = subgroupExclusiveMin(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveMin(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveMin(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveMin(data[3].d4);
data[invocation].f4.x = subgroupExclusiveMax(data[0].f4.x);
data[invocation].f4.xy = subgroupExclusiveMax(data[1].f4.xy);
data[invocation].f4.xyz = subgroupExclusiveMax(data[2].f4.xyz);
data[invocation].f4 = subgroupExclusiveMax(data[3].f4);
data[invocation].i4.x = subgroupExclusiveMax(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveMax(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveMax(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveMax(data[3].i4);
data[invocation].u4.x = subgroupExclusiveMax(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveMax(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveMax(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveMax(data[3].u4);
data[invocation].d4.x = subgroupExclusiveMax(data[0].d4.x);
data[invocation].d4.xy = subgroupExclusiveMax(data[1].d4.xy);
data[invocation].d4.xyz = subgroupExclusiveMax(data[2].d4.xyz);
data[invocation].d4 = subgroupExclusiveMax(data[3].d4);
data[invocation].i4.x = subgroupExclusiveAnd(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveAnd(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveAnd(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveAnd(data[3].i4);
data[invocation].u4.x = subgroupExclusiveAnd(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveAnd(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveAnd(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveAnd(data[3].u4);
data[invocation].i4.x = int(subgroupExclusiveAnd(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupExclusiveAnd(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupExclusiveAnd(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupExclusiveAnd(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupExclusiveOr(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveOr(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveOr(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveOr(data[3].i4);
data[invocation].u4.x = subgroupExclusiveOr(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveOr(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveOr(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveOr(data[3].u4);
data[invocation].i4.x = int(subgroupExclusiveOr(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupExclusiveOr(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupExclusiveOr(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupExclusiveOr(lessThan(data[1].i4, ivec4(0))));
data[invocation].i4.x = subgroupExclusiveXor(data[0].i4.x);
data[invocation].i4.xy = subgroupExclusiveXor(data[1].i4.xy);
data[invocation].i4.xyz = subgroupExclusiveXor(data[2].i4.xyz);
data[invocation].i4 = subgroupExclusiveXor(data[3].i4);
data[invocation].u4.x = subgroupExclusiveXor(data[0].u4.x);
data[invocation].u4.xy = subgroupExclusiveXor(data[1].u4.xy);
data[invocation].u4.xyz = subgroupExclusiveXor(data[2].u4.xyz);
data[invocation].u4 = subgroupExclusiveXor(data[3].u4);
data[invocation].i4.x = int(subgroupExclusiveXor(data[0].i4.x < 0));
data[invocation].i4.xy = ivec2(subgroupExclusiveXor(lessThan(data[1].i4.xy, ivec2(0))));
data[invocation].i4.xyz = ivec3(subgroupExclusiveXor(lessThan(data[1].i4.xyz, ivec3(0))));
data[invocation].i4 = ivec4(subgroupExclusiveXor(lessThan(data[1].i4, ivec4(0))));
}
...@@ -471,6 +471,7 @@ enum TOperator { ...@@ -471,6 +471,7 @@ enum TOperator {
EOpAllInvocations, EOpAllInvocations,
EOpAllInvocationsEqual, EOpAllInvocationsEqual,
EOpSubgroupGuardStart,
EOpSubgroupBarrier, EOpSubgroupBarrier,
EOpSubgroupMemoryBarrier, EOpSubgroupMemoryBarrier,
EOpSubgroupMemoryBarrierBuffer, EOpSubgroupMemoryBarrierBuffer,
...@@ -526,6 +527,7 @@ enum TOperator { ...@@ -526,6 +527,7 @@ enum TOperator {
EOpSubgroupQuadSwapHorizontal, EOpSubgroupQuadSwapHorizontal,
EOpSubgroupQuadSwapVertical, EOpSubgroupQuadSwapVertical,
EOpSubgroupQuadSwapDiagonal, EOpSubgroupQuadSwapDiagonal,
EOpSubgroupGuardStop,
#ifdef AMD_EXTENSIONS #ifdef AMD_EXTENSIONS
EOpMinInvocations, EOpMinInvocations,
......
...@@ -1631,6 +1631,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan ...@@ -1631,6 +1631,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
default: default:
break; break;
} }
if (callNode.getOp() > EOpSubgroupGuardStart && callNode.getOp() < EOpSubgroupGuardStop) {
// these require SPIR-V 1.3
if (spvVersion.spv > 0 && spvVersion.spv < 0x00010300)
error(loc, "requires SPIR-V 1.3", "subgroup op", "");
}
} }
extern bool PureOperatorBuiltins; extern bool PureOperatorBuiltins;
......
...@@ -336,6 +336,7 @@ INSTANTIATE_TEST_CASE_P( ...@@ -336,6 +336,7 @@ INSTANTIATE_TEST_CASE_P(
"spv.storageBuffer.vert", "spv.storageBuffer.vert",
"spv.precise.tese", "spv.precise.tese",
"spv.precise.tesc", "spv.precise.tesc",
"spv.vulkan100.subgroupArithmetic.comp",
"spv.xfb.vert", "spv.xfb.vert",
"spv.xfb2.vert", "spv.xfb2.vert",
"spv.xfb3.vert", "spv.xfb3.vert",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment