Add AST tests for ray tracing shaders

with subgroup touch tests (error and non-error cases)
Currently the subgroup built-ins are NOT giving the correct output.
This is fixed in the next commit.
diff --git a/Test/baseResults/glsl.460.subgroup.rahit.out b/Test/baseResults/glsl.460.subgroup.rahit.out
new file mode 100644
index 0000000..01ba0a1
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rahit.out
@@ -0,0 +1,824 @@
+glsl.460.subgroup.rahit
+ERROR: 0:7: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:8: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:23: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:24: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:25: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:26: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:133: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:134: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:144: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:145: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:146: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:147: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:148: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 93 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:7      'gl_SubgroupSize' ( temp float)
+0:8      'gl_SubgroupInvocationID' ( temp float)
+0:9      subgroupBarrier ( global void)
+0:10      subgroupMemoryBarrier ( global void)
+0:11      subgroupMemoryBarrierBuffer ( global void)
+0:12      subgroupMemoryBarrierImage ( global void)
+0:13      subgroupElect ( global bool)
+0:14      'gl_NumSubgroups' ( temp float)
+0:15      'gl_SubgroupID' ( temp float)
+0:16      Constant:
+0:16        0.000000
+0:18      subgroupAll ( global bool)
+0:18        Constant:
+0:18          true (const bool)
+0:19      subgroupAny ( global bool)
+0:19        Constant:
+0:19          false (const bool)
+0:20      subgroupAllEqual ( global bool)
+0:20        'f4' ( in 4-component vector of float)
+0:22      'gl_SubgroupEqMask' ( temp float)
+0:23      'gl_SubgroupGeMask' ( temp float)
+0:24      'gl_SubgroupGtMask' ( temp float)
+0:25      'gl_SubgroupLeMask' ( temp float)
+0:26      'gl_SubgroupLtMask' ( temp float)
+0:27      subgroupBroadcast ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:27        Constant:
+0:27          0 (const uint)
+0:28      subgroupBroadcastFirst ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of uint)
+0:29          'ballot' ( temp 4-component vector of uint)
+0:29          subgroupBallot ( global 4-component vector of uint)
+0:29            Constant:
+0:29              false (const bool)
+0:30      subgroupInverseBallot ( global bool)
+0:30        Constant:
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:31      subgroupBallotBitExtract ( global bool)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:31        Constant:
+0:31          0 (const uint)
+0:32      subgroupBallotBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotInclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotExclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindLSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindMSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:38      subgroupShuffle ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          0 (const uint)
+0:39      subgroupShuffleXor ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleUp ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleDown ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'result' ( temp 4-component vector of float)
+0:43        subgroupAdd ( global 4-component vector of float)
+0:43          'f4' ( in 4-component vector of float)
+0:44      subgroupMul ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMin ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMax ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupAnd ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupOr ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupXor ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupInclusiveAdd ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMul ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMin ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMax ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveOr ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveXor ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupExclusiveAdd ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMul ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMin ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMax ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveOr ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveXor ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:65      subgroupClusteredAdd ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMul ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMin ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMax ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredAnd ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredOr ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredXor ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:73      subgroupQuadBroadcast ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:73        Constant:
+0:73          0 (const uint)
+0:74      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:78      Sequence
+0:78        move second child to first child ( temp 4-component vector of uint)
+0:78          'parti' ( temp 4-component vector of uint)
+0:78          subgroupPartitionNV ( global 4-component vector of uint)
+0:78            'f4' ( in 4-component vector of float)
+0:79      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:101      Branch: Return with expression
+0:101        'result' ( temp 4-component vector of float)
+0:106  Function Definition: main( ( global void)
+0:106    Function Parameters: 
+0:108    Sequence
+0:108      Sequence
+0:108        move second child to first child ( temp 3-component vector of uint)
+0:108          'v0' ( temp 3-component vector of uint)
+0:108          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:109      Sequence
+0:109        move second child to first child ( temp 3-component vector of uint)
+0:109          'v1' ( temp 3-component vector of uint)
+0:109          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:110      Sequence
+0:110        move second child to first child ( temp int)
+0:110          'v2' ( temp int)
+0:110          'gl_PrimitiveID' ( in int PrimitiveID)
+0:111      Sequence
+0:111        move second child to first child ( temp int)
+0:111          'v3' ( temp int)
+0:111          'gl_InstanceID' ( in int InstanceId)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v4' ( temp int)
+0:112          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:113      Sequence
+0:113        move second child to first child ( temp 3-component vector of float)
+0:113          'v5' ( temp 3-component vector of float)
+0:113          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114      Sequence
+0:114        move second child to first child ( temp 3-component vector of float)
+0:114          'v6' ( temp 3-component vector of float)
+0:114          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v7' ( temp 3-component vector of float)
+0:115          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v8' ( temp 3-component vector of float)
+0:116          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp float)
+0:117          'v9' ( temp float)
+0:117          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118      Sequence
+0:118        move second child to first child ( temp float)
+0:118          'v10' ( temp float)
+0:118          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v11' ( temp float)
+0:119          'gl_HitTNV' ( in float HitTNV)
+0:120      Sequence
+0:120        move second child to first child ( temp uint)
+0:120          'v12' ( temp uint)
+0:120          'gl_HitKindNV' ( in uint HitKindNV)
+0:121      Sequence
+0:121        move second child to first child ( temp 4X3 matrix of float)
+0:121          'v13' ( temp 4X3 matrix of float)
+0:121          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122      Sequence
+0:122        move second child to first child ( temp 4X3 matrix of float)
+0:122          'v14' ( temp 4X3 matrix of float)
+0:122          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123      move second child to first child ( temp 4-component vector of float)
+0:123        'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+0:123        Constant:
+0:123          0.500000
+0:123          0.500000
+0:123          0.500000
+0:123          0.500000
+0:124      Test condition and select ( temp void)
+0:124        Condition
+0:124        Compare Equal ( temp bool)
+0:124          'v2' ( temp int)
+0:124          Constant:
+0:124            1 (const int)
+0:124        true case
+0:125        ignoreIntersectionNV ( global void)
+0:124        false case
+0:127        terminateRayNV ( global void)
+0:131  Function Definition: basic_works( ( global void)
+0:131    Function Parameters: 
+0:133    Sequence
+0:133      'gl_SubgroupSize' ( temp float)
+0:134      'gl_SubgroupInvocationID' ( temp float)
+0:135      subgroupBarrier ( global void)
+0:136      subgroupMemoryBarrier ( global void)
+0:137      subgroupMemoryBarrierBuffer ( global void)
+0:138      subgroupMemoryBarrierImage ( global void)
+0:139      subgroupElect ( global bool)
+0:143  Function Definition: ballot_works(vf4; ( global void)
+0:143    Function Parameters: 
+0:143      'f4' ( in 4-component vector of float)
+0:144    Sequence
+0:144      'gl_SubgroupEqMask' ( temp float)
+0:145      'gl_SubgroupGeMask' ( temp float)
+0:146      'gl_SubgroupGtMask' ( temp float)
+0:147      'gl_SubgroupLeMask' ( temp float)
+0:148      'gl_SubgroupLtMask' ( temp float)
+0:149      subgroupBroadcast ( global 4-component vector of float)
+0:149        'f4' ( in 4-component vector of float)
+0:149        Constant:
+0:149          0 (const uint)
+0:150      subgroupBroadcastFirst ( global 4-component vector of float)
+0:150        'f4' ( in 4-component vector of float)
+0:151      Sequence
+0:151        move second child to first child ( temp 4-component vector of uint)
+0:151          'ballot' ( temp 4-component vector of uint)
+0:151          subgroupBallot ( global 4-component vector of uint)
+0:151            Constant:
+0:151              false (const bool)
+0:152      subgroupInverseBallot ( global bool)
+0:152        Constant:
+0:152          1 (const uint)
+0:152          1 (const uint)
+0:152          1 (const uint)
+0:152          1 (const uint)
+0:153      subgroupBallotBitExtract ( global bool)
+0:153        'ballot' ( temp 4-component vector of uint)
+0:153        Constant:
+0:153          0 (const uint)
+0:154      subgroupBallotBitCount ( global uint)
+0:154        'ballot' ( temp 4-component vector of uint)
+0:155      subgroupBallotInclusiveBitCount ( global uint)
+0:155        'ballot' ( temp 4-component vector of uint)
+0:156      subgroupBallotExclusiveBitCount ( global uint)
+0:156        'ballot' ( temp 4-component vector of uint)
+0:157      subgroupBallotFindLSB ( global uint)
+0:157        'ballot' ( temp 4-component vector of uint)
+0:158      subgroupBallotFindMSB ( global uint)
+0:158        'ballot' ( temp 4-component vector of uint)
+0:162  Function Definition: vote_works(vf4; ( global void)
+0:162    Function Parameters: 
+0:162      'f4' ( in 4-component vector of float)
+0:164    Sequence
+0:164      subgroupAll ( global bool)
+0:164        Constant:
+0:164          true (const bool)
+0:165      subgroupAny ( global bool)
+0:165        Constant:
+0:165          false (const bool)
+0:166      subgroupAllEqual ( global bool)
+0:166        'f4' ( in 4-component vector of float)
+0:171  Function Definition: shuffle_works(vf4; ( global void)
+0:171    Function Parameters: 
+0:171      'f4' ( in 4-component vector of float)
+0:173    Sequence
+0:173      subgroupShuffle ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+0:173        Constant:
+0:173          0 (const uint)
+0:174      subgroupShuffleXor ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:174        Constant:
+0:174          1 (const uint)
+0:175      subgroupShuffleUp ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:175        Constant:
+0:175          1 (const uint)
+0:176      subgroupShuffleDown ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:176        Constant:
+0:176          1 (const uint)
+0:180  Function Definition: arith_works(vf4; ( global void)
+0:180    Function Parameters: 
+0:180      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:183      subgroupAdd ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupMul ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupMin ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupMax ( global 4-component vector of float)
+0:186        'f4' ( in 4-component vector of float)
+0:187      subgroupAnd ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupOr ( global 4-component vector of uint)
+0:188        'ballot' ( temp 4-component vector of uint)
+0:189      subgroupXor ( global 4-component vector of uint)
+0:189        'ballot' ( temp 4-component vector of uint)
+0:190      subgroupInclusiveAdd ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupInclusiveMul ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupInclusiveMin ( global 4-component vector of float)
+0:192        'f4' ( in 4-component vector of float)
+0:193      subgroupInclusiveMax ( global 4-component vector of float)
+0:193        'f4' ( in 4-component vector of float)
+0:194      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupInclusiveOr ( global 4-component vector of uint)
+0:195        'ballot' ( temp 4-component vector of uint)
+0:196      subgroupInclusiveXor ( global 4-component vector of uint)
+0:196        'ballot' ( temp 4-component vector of uint)
+0:197      subgroupExclusiveAdd ( global 4-component vector of float)
+0:197        'f4' ( in 4-component vector of float)
+0:198      subgroupExclusiveMul ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:199      subgroupExclusiveMin ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:200      subgroupExclusiveMax ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:201      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:201        'ballot' ( temp 4-component vector of uint)
+0:202      subgroupExclusiveOr ( global 4-component vector of uint)
+0:202        'ballot' ( temp 4-component vector of uint)
+0:203      subgroupExclusiveXor ( global 4-component vector of uint)
+0:203        'ballot' ( temp 4-component vector of uint)
+0:207  Function Definition: clustered_works(vf4; ( global void)
+0:207    Function Parameters: 
+0:207      'f4' ( in 4-component vector of float)
+0:209    Sequence
+0:209      Sequence
+0:209        move second child to first child ( temp 4-component vector of uint)
+0:209          'ballot' ( temp 4-component vector of uint)
+0:209          Constant:
+0:209            85 (const uint)
+0:209            0 (const uint)
+0:209            0 (const uint)
+0:209            0 (const uint)
+0:210      subgroupClusteredAdd ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
+0:210        Constant:
+0:210          2 (const uint)
+0:211      subgroupClusteredMul ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
+0:211        Constant:
+0:211          2 (const uint)
+0:212      subgroupClusteredMin ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:212        Constant:
+0:212          2 (const uint)
+0:213      subgroupClusteredMax ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:213        Constant:
+0:213          2 (const uint)
+0:214      subgroupClusteredAnd ( global 4-component vector of uint)
+0:214        'ballot' ( temp 4-component vector of uint)
+0:214        Constant:
+0:214          2 (const uint)
+0:215      subgroupClusteredOr ( global 4-component vector of uint)
+0:215        'ballot' ( temp 4-component vector of uint)
+0:215        Constant:
+0:215          2 (const uint)
+0:216      subgroupClusteredXor ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
+0:216        Constant:
+0:216          2 (const uint)
+0:220  Function Definition: quad_works(vf4; ( global void)
+0:220    Function Parameters: 
+0:220      'f4' ( in 4-component vector of float)
+0:222    Sequence
+0:222      subgroupQuadBroadcast ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:222        Constant:
+0:222          0 (const uint)
+0:223      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:224      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:224        'f4' ( in 4-component vector of float)
+0:225      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
+0:229  Function Definition: partitioned_works(vf4; ( global void)
+0:229    Function Parameters: 
+0:229      'f4' ( in 4-component vector of float)
+0:231    Sequence
+0:231      Sequence
+0:231        move second child to first child ( temp 4-component vector of uint)
+0:231          'parti' ( temp 4-component vector of uint)
+0:231          subgroupPartitionNV ( global 4-component vector of uint)
+0:231            'f4' ( in 4-component vector of float)
+0:232      Sequence
+0:232        move second child to first child ( temp 4-component vector of uint)
+0:232          'ballot' ( temp 4-component vector of uint)
+0:232          Constant:
+0:232            85 (const uint)
+0:232            0 (const uint)
+0:232            0 (const uint)
+0:232            0 (const uint)
+0:233      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:235        'f4' ( in 4-component vector of float)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:236        'f4' ( in 4-component vector of float)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:238        'ballot' ( temp 4-component vector of uint)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:239        'ballot' ( temp 4-component vector of uint)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:242        'f4' ( in 4-component vector of float)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:243        'f4' ( in 4-component vector of float)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:245        'ballot' ( temp 4-component vector of uint)
+0:245        'parti' ( temp 4-component vector of uint)
+0:246      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:246        'ballot' ( temp 4-component vector of uint)
+0:246        'parti' ( temp 4-component vector of uint)
+0:247      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:247        'f4' ( in 4-component vector of float)
+0:247        'parti' ( temp 4-component vector of uint)
+0:248      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:248        'f4' ( in 4-component vector of float)
+0:248        'parti' ( temp 4-component vector of uint)
+0:249      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:249        'f4' ( in 4-component vector of float)
+0:249        'parti' ( temp 4-component vector of uint)
+0:250      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:250        'f4' ( in 4-component vector of float)
+0:250        'parti' ( temp 4-component vector of uint)
+0:251      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:251        'ballot' ( temp 4-component vector of uint)
+0:251        'parti' ( temp 4-component vector of uint)
+0:252      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:252        'ballot' ( temp 4-component vector of uint)
+0:252        'parti' ( temp 4-component vector of uint)
+0:253      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:253        'ballot' ( temp 4-component vector of uint)
+0:253        'parti' ( temp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
+
+Linked any-hit stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:106  Function Definition: main( ( global void)
+0:106    Function Parameters: 
+0:108    Sequence
+0:108      Sequence
+0:108        move second child to first child ( temp 3-component vector of uint)
+0:108          'v0' ( temp 3-component vector of uint)
+0:108          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:109      Sequence
+0:109        move second child to first child ( temp 3-component vector of uint)
+0:109          'v1' ( temp 3-component vector of uint)
+0:109          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:110      Sequence
+0:110        move second child to first child ( temp int)
+0:110          'v2' ( temp int)
+0:110          'gl_PrimitiveID' ( in int PrimitiveID)
+0:111      Sequence
+0:111        move second child to first child ( temp int)
+0:111          'v3' ( temp int)
+0:111          'gl_InstanceID' ( in int InstanceId)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v4' ( temp int)
+0:112          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:113      Sequence
+0:113        move second child to first child ( temp 3-component vector of float)
+0:113          'v5' ( temp 3-component vector of float)
+0:113          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114      Sequence
+0:114        move second child to first child ( temp 3-component vector of float)
+0:114          'v6' ( temp 3-component vector of float)
+0:114          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v7' ( temp 3-component vector of float)
+0:115          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v8' ( temp 3-component vector of float)
+0:116          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp float)
+0:117          'v9' ( temp float)
+0:117          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118      Sequence
+0:118        move second child to first child ( temp float)
+0:118          'v10' ( temp float)
+0:118          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v11' ( temp float)
+0:119          'gl_HitTNV' ( in float HitTNV)
+0:120      Sequence
+0:120        move second child to first child ( temp uint)
+0:120          'v12' ( temp uint)
+0:120          'gl_HitKindNV' ( in uint HitKindNV)
+0:121      Sequence
+0:121        move second child to first child ( temp 4X3 matrix of float)
+0:121          'v13' ( temp 4X3 matrix of float)
+0:121          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122      Sequence
+0:122        move second child to first child ( temp 4X3 matrix of float)
+0:122          'v14' ( temp 4X3 matrix of float)
+0:122          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123      move second child to first child ( temp 4-component vector of float)
+0:123        'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+0:123        Constant:
+0:123          0.500000
+0:123          0.500000
+0:123          0.500000
+0:123          0.500000
+0:124      Test condition and select ( temp void)
+0:124        Condition
+0:124        Compare Equal ( temp bool)
+0:124          'v2' ( temp int)
+0:124          Constant:
+0:124            1 (const int)
+0:124        true case
+0:125        ignoreIntersectionNV ( global void)
+0:124        false case
+0:127        terminateRayNV ( global void)
+0:?   Linker Objects
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.460.subgroup.rcall.out b/Test/baseResults/glsl.460.subgroup.rcall.out
new file mode 100644
index 0000000..9f5890f
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rcall.out
@@ -0,0 +1,712 @@
+glsl.460.subgroup.rcall
+ERROR: 0:7: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:8: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:23: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:24: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:25: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:26: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:121: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:122: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:132: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:133: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:134: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:135: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:136: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 93 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:7      'gl_SubgroupSize' ( temp float)
+0:8      'gl_SubgroupInvocationID' ( temp float)
+0:9      subgroupBarrier ( global void)
+0:10      subgroupMemoryBarrier ( global void)
+0:11      subgroupMemoryBarrierBuffer ( global void)
+0:12      subgroupMemoryBarrierImage ( global void)
+0:13      subgroupElect ( global bool)
+0:14      'gl_NumSubgroups' ( temp float)
+0:15      'gl_SubgroupID' ( temp float)
+0:16      Constant:
+0:16        0.000000
+0:18      subgroupAll ( global bool)
+0:18        Constant:
+0:18          true (const bool)
+0:19      subgroupAny ( global bool)
+0:19        Constant:
+0:19          false (const bool)
+0:20      subgroupAllEqual ( global bool)
+0:20        'f4' ( in 4-component vector of float)
+0:22      'gl_SubgroupEqMask' ( temp float)
+0:23      'gl_SubgroupGeMask' ( temp float)
+0:24      'gl_SubgroupGtMask' ( temp float)
+0:25      'gl_SubgroupLeMask' ( temp float)
+0:26      'gl_SubgroupLtMask' ( temp float)
+0:27      subgroupBroadcast ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:27        Constant:
+0:27          0 (const uint)
+0:28      subgroupBroadcastFirst ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of uint)
+0:29          'ballot' ( temp 4-component vector of uint)
+0:29          subgroupBallot ( global 4-component vector of uint)
+0:29            Constant:
+0:29              false (const bool)
+0:30      subgroupInverseBallot ( global bool)
+0:30        Constant:
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:31      subgroupBallotBitExtract ( global bool)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:31        Constant:
+0:31          0 (const uint)
+0:32      subgroupBallotBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotInclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotExclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindLSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindMSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:38      subgroupShuffle ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          0 (const uint)
+0:39      subgroupShuffleXor ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleUp ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleDown ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'result' ( temp 4-component vector of float)
+0:43        subgroupAdd ( global 4-component vector of float)
+0:43          'f4' ( in 4-component vector of float)
+0:44      subgroupMul ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMin ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMax ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupAnd ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupOr ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupXor ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupInclusiveAdd ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMul ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMin ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMax ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveOr ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveXor ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupExclusiveAdd ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMul ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMin ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMax ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveOr ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveXor ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:65      subgroupClusteredAdd ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMul ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMin ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMax ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredAnd ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredOr ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredXor ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:73      subgroupQuadBroadcast ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:73        Constant:
+0:73          0 (const uint)
+0:74      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:78      Sequence
+0:78        move second child to first child ( temp 4-component vector of uint)
+0:78          'parti' ( temp 4-component vector of uint)
+0:78          subgroupPartitionNV ( global 4-component vector of uint)
+0:78            'f4' ( in 4-component vector of float)
+0:79      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:101      Branch: Return with expression
+0:101        'result' ( temp 4-component vector of float)
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'id' ( temp 3-component vector of uint)
+0:111          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112      Sequence
+0:112        move second child to first child ( temp 3-component vector of uint)
+0:112          'size' ( temp 3-component vector of uint)
+0:112          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113      move second child to first child ( temp uint)
+0:113        data1: direct index for structure ( callableDataInNV uint)
+0:113          'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+0:113          Constant:
+0:113            0 (const uint)
+0:113        Constant:
+0:113          256 (const uint)
+0:114      executeCallableNV ( global void)
+0:114        Constant:
+0:114          2 (const uint)
+0:114        Constant:
+0:114          1 (const int)
+0:119  Function Definition: basic_works( ( global void)
+0:119    Function Parameters: 
+0:121    Sequence
+0:121      'gl_SubgroupSize' ( temp float)
+0:122      'gl_SubgroupInvocationID' ( temp float)
+0:123      subgroupBarrier ( global void)
+0:124      subgroupMemoryBarrier ( global void)
+0:125      subgroupMemoryBarrierBuffer ( global void)
+0:126      subgroupMemoryBarrierImage ( global void)
+0:127      subgroupElect ( global bool)
+0:131  Function Definition: ballot_works(vf4; ( global void)
+0:131    Function Parameters: 
+0:131      'f4' ( in 4-component vector of float)
+0:132    Sequence
+0:132      'gl_SubgroupEqMask' ( temp float)
+0:133      'gl_SubgroupGeMask' ( temp float)
+0:134      'gl_SubgroupGtMask' ( temp float)
+0:135      'gl_SubgroupLeMask' ( temp float)
+0:136      'gl_SubgroupLtMask' ( temp float)
+0:137      subgroupBroadcast ( global 4-component vector of float)
+0:137        'f4' ( in 4-component vector of float)
+0:137        Constant:
+0:137          0 (const uint)
+0:138      subgroupBroadcastFirst ( global 4-component vector of float)
+0:138        'f4' ( in 4-component vector of float)
+0:139      Sequence
+0:139        move second child to first child ( temp 4-component vector of uint)
+0:139          'ballot' ( temp 4-component vector of uint)
+0:139          subgroupBallot ( global 4-component vector of uint)
+0:139            Constant:
+0:139              false (const bool)
+0:140      subgroupInverseBallot ( global bool)
+0:140        Constant:
+0:140          1 (const uint)
+0:140          1 (const uint)
+0:140          1 (const uint)
+0:140          1 (const uint)
+0:141      subgroupBallotBitExtract ( global bool)
+0:141        'ballot' ( temp 4-component vector of uint)
+0:141        Constant:
+0:141          0 (const uint)
+0:142      subgroupBallotBitCount ( global uint)
+0:142        'ballot' ( temp 4-component vector of uint)
+0:143      subgroupBallotInclusiveBitCount ( global uint)
+0:143        'ballot' ( temp 4-component vector of uint)
+0:144      subgroupBallotExclusiveBitCount ( global uint)
+0:144        'ballot' ( temp 4-component vector of uint)
+0:145      subgroupBallotFindLSB ( global uint)
+0:145        'ballot' ( temp 4-component vector of uint)
+0:146      subgroupBallotFindMSB ( global uint)
+0:146        'ballot' ( temp 4-component vector of uint)
+0:150  Function Definition: vote_works(vf4; ( global void)
+0:150    Function Parameters: 
+0:150      'f4' ( in 4-component vector of float)
+0:152    Sequence
+0:152      subgroupAll ( global bool)
+0:152        Constant:
+0:152          true (const bool)
+0:153      subgroupAny ( global bool)
+0:153        Constant:
+0:153          false (const bool)
+0:154      subgroupAllEqual ( global bool)
+0:154        'f4' ( in 4-component vector of float)
+0:159  Function Definition: shuffle_works(vf4; ( global void)
+0:159    Function Parameters: 
+0:159      'f4' ( in 4-component vector of float)
+0:161    Sequence
+0:161      subgroupShuffle ( global 4-component vector of float)
+0:161        'f4' ( in 4-component vector of float)
+0:161        Constant:
+0:161          0 (const uint)
+0:162      subgroupShuffleXor ( global 4-component vector of float)
+0:162        'f4' ( in 4-component vector of float)
+0:162        Constant:
+0:162          1 (const uint)
+0:163      subgroupShuffleUp ( global 4-component vector of float)
+0:163        'f4' ( in 4-component vector of float)
+0:163        Constant:
+0:163          1 (const uint)
+0:164      subgroupShuffleDown ( global 4-component vector of float)
+0:164        'f4' ( in 4-component vector of float)
+0:164        Constant:
+0:164          1 (const uint)
+0:168  Function Definition: arith_works(vf4; ( global void)
+0:168    Function Parameters: 
+0:168      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:171      subgroupAdd ( global 4-component vector of float)
+0:171        'f4' ( in 4-component vector of float)
+0:172      subgroupMul ( global 4-component vector of float)
+0:172        'f4' ( in 4-component vector of float)
+0:173      subgroupMin ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+0:174      subgroupMax ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:175      subgroupAnd ( global 4-component vector of uint)
+0:175        'ballot' ( temp 4-component vector of uint)
+0:176      subgroupOr ( global 4-component vector of uint)
+0:176        'ballot' ( temp 4-component vector of uint)
+0:177      subgroupXor ( global 4-component vector of uint)
+0:177        'ballot' ( temp 4-component vector of uint)
+0:178      subgroupInclusiveAdd ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:179      subgroupInclusiveMul ( global 4-component vector of float)
+0:179        'f4' ( in 4-component vector of float)
+0:180      subgroupInclusiveMin ( global 4-component vector of float)
+0:180        'f4' ( in 4-component vector of float)
+0:181      subgroupInclusiveMax ( global 4-component vector of float)
+0:181        'f4' ( in 4-component vector of float)
+0:182      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:182        'ballot' ( temp 4-component vector of uint)
+0:183      subgroupInclusiveOr ( global 4-component vector of uint)
+0:183        'ballot' ( temp 4-component vector of uint)
+0:184      subgroupInclusiveXor ( global 4-component vector of uint)
+0:184        'ballot' ( temp 4-component vector of uint)
+0:185      subgroupExclusiveAdd ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupExclusiveMul ( global 4-component vector of float)
+0:186        'f4' ( in 4-component vector of float)
+0:187      subgroupExclusiveMin ( global 4-component vector of float)
+0:187        'f4' ( in 4-component vector of float)
+0:188      subgroupExclusiveMax ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:189      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:189        'ballot' ( temp 4-component vector of uint)
+0:190      subgroupExclusiveOr ( global 4-component vector of uint)
+0:190        'ballot' ( temp 4-component vector of uint)
+0:191      subgroupExclusiveXor ( global 4-component vector of uint)
+0:191        'ballot' ( temp 4-component vector of uint)
+0:195  Function Definition: clustered_works(vf4; ( global void)
+0:195    Function Parameters: 
+0:195      'f4' ( in 4-component vector of float)
+0:197    Sequence
+0:197      Sequence
+0:197        move second child to first child ( temp 4-component vector of uint)
+0:197          'ballot' ( temp 4-component vector of uint)
+0:197          Constant:
+0:197            85 (const uint)
+0:197            0 (const uint)
+0:197            0 (const uint)
+0:197            0 (const uint)
+0:198      subgroupClusteredAdd ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:198        Constant:
+0:198          2 (const uint)
+0:199      subgroupClusteredMul ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:199        Constant:
+0:199          2 (const uint)
+0:200      subgroupClusteredMin ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:200        Constant:
+0:200          2 (const uint)
+0:201      subgroupClusteredMax ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:201        Constant:
+0:201          2 (const uint)
+0:202      subgroupClusteredAnd ( global 4-component vector of uint)
+0:202        'ballot' ( temp 4-component vector of uint)
+0:202        Constant:
+0:202          2 (const uint)
+0:203      subgroupClusteredOr ( global 4-component vector of uint)
+0:203        'ballot' ( temp 4-component vector of uint)
+0:203        Constant:
+0:203          2 (const uint)
+0:204      subgroupClusteredXor ( global 4-component vector of uint)
+0:204        'ballot' ( temp 4-component vector of uint)
+0:204        Constant:
+0:204          2 (const uint)
+0:208  Function Definition: quad_works(vf4; ( global void)
+0:208    Function Parameters: 
+0:208      'f4' ( in 4-component vector of float)
+0:210    Sequence
+0:210      subgroupQuadBroadcast ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
+0:210        Constant:
+0:210          0 (const uint)
+0:211      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
+0:212      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:213      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:217  Function Definition: partitioned_works(vf4; ( global void)
+0:217    Function Parameters: 
+0:217      'f4' ( in 4-component vector of float)
+0:219    Sequence
+0:219      Sequence
+0:219        move second child to first child ( temp 4-component vector of uint)
+0:219          'parti' ( temp 4-component vector of uint)
+0:219          subgroupPartitionNV ( global 4-component vector of uint)
+0:219            'f4' ( in 4-component vector of float)
+0:220      Sequence
+0:220        move second child to first child ( temp 4-component vector of uint)
+0:220          'ballot' ( temp 4-component vector of uint)
+0:220          Constant:
+0:220            85 (const uint)
+0:220            0 (const uint)
+0:220            0 (const uint)
+0:220            0 (const uint)
+0:221      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:221        'parti' ( temp 4-component vector of uint)
+0:222      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:222        'parti' ( temp 4-component vector of uint)
+0:223      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:223        'parti' ( temp 4-component vector of uint)
+0:224      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:224        'f4' ( in 4-component vector of float)
+0:224        'parti' ( temp 4-component vector of uint)
+0:225      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:225        'ballot' ( temp 4-component vector of uint)
+0:225        'parti' ( temp 4-component vector of uint)
+0:226      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:226        'ballot' ( temp 4-component vector of uint)
+0:226        'parti' ( temp 4-component vector of uint)
+0:227      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:227        'ballot' ( temp 4-component vector of uint)
+0:227        'parti' ( temp 4-component vector of uint)
+0:228      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:229        'f4' ( in 4-component vector of float)
+0:229        'parti' ( temp 4-component vector of uint)
+0:230      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:230        'f4' ( in 4-component vector of float)
+0:230        'parti' ( temp 4-component vector of uint)
+0:231      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:231        'f4' ( in 4-component vector of float)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:232        'ballot' ( temp 4-component vector of uint)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:233        'ballot' ( temp 4-component vector of uint)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:234        'ballot' ( temp 4-component vector of uint)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:235        'f4' ( in 4-component vector of float)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:236        'f4' ( in 4-component vector of float)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:237        'f4' ( in 4-component vector of float)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:238        'f4' ( in 4-component vector of float)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:239        'ballot' ( temp 4-component vector of uint)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:240        'ballot' ( temp 4-component vector of uint)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:241        'ballot' ( temp 4-component vector of uint)
+0:241        'parti' ( temp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'data0' (layout( location=0) callableDataNV 4-component vector of float)
+0:?     'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+
+
+Linked callable stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'id' ( temp 3-component vector of uint)
+0:111          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112      Sequence
+0:112        move second child to first child ( temp 3-component vector of uint)
+0:112          'size' ( temp 3-component vector of uint)
+0:112          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113      move second child to first child ( temp uint)
+0:113        data1: direct index for structure ( callableDataInNV uint)
+0:113          'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+0:113          Constant:
+0:113            0 (const uint)
+0:113        Constant:
+0:113          256 (const uint)
+0:114      executeCallableNV ( global void)
+0:114        Constant:
+0:114          2 (const uint)
+0:114        Constant:
+0:114          1 (const int)
+0:?   Linker Objects
+0:?     'data0' (layout( location=0) callableDataNV 4-component vector of float)
+0:?     'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1})
+
diff --git a/Test/baseResults/glsl.460.subgroup.rchit.out b/Test/baseResults/glsl.460.subgroup.rchit.out
new file mode 100644
index 0000000..46bef57
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rchit.out
@@ -0,0 +1,846 @@
+glsl.460.subgroup.rchit
+ERROR: 0:7: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:8: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:23: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:24: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:25: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:26: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:131: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:132: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:142: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:143: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:144: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:145: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:146: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 93 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:7      'gl_SubgroupSize' ( temp float)
+0:8      'gl_SubgroupInvocationID' ( temp float)
+0:9      subgroupBarrier ( global void)
+0:10      subgroupMemoryBarrier ( global void)
+0:11      subgroupMemoryBarrierBuffer ( global void)
+0:12      subgroupMemoryBarrierImage ( global void)
+0:13      subgroupElect ( global bool)
+0:14      'gl_NumSubgroups' ( temp float)
+0:15      'gl_SubgroupID' ( temp float)
+0:16      Constant:
+0:16        0.000000
+0:18      subgroupAll ( global bool)
+0:18        Constant:
+0:18          true (const bool)
+0:19      subgroupAny ( global bool)
+0:19        Constant:
+0:19          false (const bool)
+0:20      subgroupAllEqual ( global bool)
+0:20        'f4' ( in 4-component vector of float)
+0:22      'gl_SubgroupEqMask' ( temp float)
+0:23      'gl_SubgroupGeMask' ( temp float)
+0:24      'gl_SubgroupGtMask' ( temp float)
+0:25      'gl_SubgroupLeMask' ( temp float)
+0:26      'gl_SubgroupLtMask' ( temp float)
+0:27      subgroupBroadcast ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:27        Constant:
+0:27          0 (const uint)
+0:28      subgroupBroadcastFirst ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of uint)
+0:29          'ballot' ( temp 4-component vector of uint)
+0:29          subgroupBallot ( global 4-component vector of uint)
+0:29            Constant:
+0:29              false (const bool)
+0:30      subgroupInverseBallot ( global bool)
+0:30        Constant:
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:31      subgroupBallotBitExtract ( global bool)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:31        Constant:
+0:31          0 (const uint)
+0:32      subgroupBallotBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotInclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotExclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindLSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindMSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:38      subgroupShuffle ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          0 (const uint)
+0:39      subgroupShuffleXor ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleUp ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleDown ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'result' ( temp 4-component vector of float)
+0:43        subgroupAdd ( global 4-component vector of float)
+0:43          'f4' ( in 4-component vector of float)
+0:44      subgroupMul ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMin ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMax ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupAnd ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupOr ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupXor ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupInclusiveAdd ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMul ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMin ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMax ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveOr ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveXor ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupExclusiveAdd ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMul ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMin ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMax ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveOr ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveXor ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:65      subgroupClusteredAdd ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMul ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMin ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMax ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredAnd ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredOr ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredXor ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:73      subgroupQuadBroadcast ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:73        Constant:
+0:73          0 (const uint)
+0:74      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:78      Sequence
+0:78        move second child to first child ( temp 4-component vector of uint)
+0:78          'parti' ( temp 4-component vector of uint)
+0:78          subgroupPartitionNV ( global 4-component vector of uint)
+0:78            'f4' ( in 4-component vector of float)
+0:79      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:101      Branch: Return with expression
+0:101        'result' ( temp 4-component vector of float)
+0:108  Function Definition: main( ( global void)
+0:108    Function Parameters: 
+0:110    Sequence
+0:110      Sequence
+0:110        move second child to first child ( temp 3-component vector of uint)
+0:110          'v0' ( temp 3-component vector of uint)
+0:110          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v1' ( temp 3-component vector of uint)
+0:111          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v2' ( temp int)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:113      Sequence
+0:113        move second child to first child ( temp int)
+0:113          'v3' ( temp int)
+0:113          'gl_InstanceID' ( in int InstanceId)
+0:114      Sequence
+0:114        move second child to first child ( temp int)
+0:114          'v4' ( temp int)
+0:114          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v5' ( temp 3-component vector of float)
+0:115          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v6' ( temp 3-component vector of float)
+0:116          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp 3-component vector of float)
+0:117          'v7' ( temp 3-component vector of float)
+0:117          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118      Sequence
+0:118        move second child to first child ( temp 3-component vector of float)
+0:118          'v8' ( temp 3-component vector of float)
+0:118          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v9' ( temp float)
+0:119          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120      Sequence
+0:120        move second child to first child ( temp float)
+0:120          'v10' ( temp float)
+0:120          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121      Sequence
+0:121        move second child to first child ( temp float)
+0:121          'v11' ( temp float)
+0:121          'gl_HitTNV' ( in float HitTNV)
+0:122      Sequence
+0:122        move second child to first child ( temp uint)
+0:122          'v12' ( temp uint)
+0:122          'gl_HitKindNV' ( in uint HitKindNV)
+0:123      Sequence
+0:123        move second child to first child ( temp 4X3 matrix of float)
+0:123          'v13' ( temp 4X3 matrix of float)
+0:123          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:124      Sequence
+0:124        move second child to first child ( temp 4X3 matrix of float)
+0:124          'v14' ( temp 4X3 matrix of float)
+0:124          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:125      traceNV ( global void)
+0:125        'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:125        Constant:
+0:125          0 (const uint)
+0:125        Constant:
+0:125          1 (const uint)
+0:125        Constant:
+0:125          2 (const uint)
+0:125        Constant:
+0:125          3 (const uint)
+0:125        Constant:
+0:125          0 (const uint)
+0:125        Constant:
+0:125          0.500000
+0:125          0.500000
+0:125          0.500000
+0:125        Constant:
+0:125          0.500000
+0:125        Constant:
+0:125          1.000000
+0:125          1.000000
+0:125          1.000000
+0:125        Constant:
+0:125          0.750000
+0:125        Constant:
+0:125          1 (const int)
+0:129  Function Definition: basic_works( ( global void)
+0:129    Function Parameters: 
+0:131    Sequence
+0:131      'gl_SubgroupSize' ( temp float)
+0:132      'gl_SubgroupInvocationID' ( temp float)
+0:133      subgroupBarrier ( global void)
+0:134      subgroupMemoryBarrier ( global void)
+0:135      subgroupMemoryBarrierBuffer ( global void)
+0:136      subgroupMemoryBarrierImage ( global void)
+0:137      subgroupElect ( global bool)
+0:141  Function Definition: ballot_works(vf4; ( global void)
+0:141    Function Parameters: 
+0:141      'f4' ( in 4-component vector of float)
+0:142    Sequence
+0:142      'gl_SubgroupEqMask' ( temp float)
+0:143      'gl_SubgroupGeMask' ( temp float)
+0:144      'gl_SubgroupGtMask' ( temp float)
+0:145      'gl_SubgroupLeMask' ( temp float)
+0:146      'gl_SubgroupLtMask' ( temp float)
+0:147      subgroupBroadcast ( global 4-component vector of float)
+0:147        'f4' ( in 4-component vector of float)
+0:147        Constant:
+0:147          0 (const uint)
+0:148      subgroupBroadcastFirst ( global 4-component vector of float)
+0:148        'f4' ( in 4-component vector of float)
+0:149      Sequence
+0:149        move second child to first child ( temp 4-component vector of uint)
+0:149          'ballot' ( temp 4-component vector of uint)
+0:149          subgroupBallot ( global 4-component vector of uint)
+0:149            Constant:
+0:149              false (const bool)
+0:150      subgroupInverseBallot ( global bool)
+0:150        Constant:
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:151      subgroupBallotBitExtract ( global bool)
+0:151        'ballot' ( temp 4-component vector of uint)
+0:151        Constant:
+0:151          0 (const uint)
+0:152      subgroupBallotBitCount ( global uint)
+0:152        'ballot' ( temp 4-component vector of uint)
+0:153      subgroupBallotInclusiveBitCount ( global uint)
+0:153        'ballot' ( temp 4-component vector of uint)
+0:154      subgroupBallotExclusiveBitCount ( global uint)
+0:154        'ballot' ( temp 4-component vector of uint)
+0:155      subgroupBallotFindLSB ( global uint)
+0:155        'ballot' ( temp 4-component vector of uint)
+0:156      subgroupBallotFindMSB ( global uint)
+0:156        'ballot' ( temp 4-component vector of uint)
+0:160  Function Definition: vote_works(vf4; ( global void)
+0:160    Function Parameters: 
+0:160      'f4' ( in 4-component vector of float)
+0:162    Sequence
+0:162      subgroupAll ( global bool)
+0:162        Constant:
+0:162          true (const bool)
+0:163      subgroupAny ( global bool)
+0:163        Constant:
+0:163          false (const bool)
+0:164      subgroupAllEqual ( global bool)
+0:164        'f4' ( in 4-component vector of float)
+0:169  Function Definition: shuffle_works(vf4; ( global void)
+0:169    Function Parameters: 
+0:169      'f4' ( in 4-component vector of float)
+0:171    Sequence
+0:171      subgroupShuffle ( global 4-component vector of float)
+0:171        'f4' ( in 4-component vector of float)
+0:171        Constant:
+0:171          0 (const uint)
+0:172      subgroupShuffleXor ( global 4-component vector of float)
+0:172        'f4' ( in 4-component vector of float)
+0:172        Constant:
+0:172          1 (const uint)
+0:173      subgroupShuffleUp ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+0:173        Constant:
+0:173          1 (const uint)
+0:174      subgroupShuffleDown ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:174        Constant:
+0:174          1 (const uint)
+0:178  Function Definition: arith_works(vf4; ( global void)
+0:178    Function Parameters: 
+0:178      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:181      subgroupAdd ( global 4-component vector of float)
+0:181        'f4' ( in 4-component vector of float)
+0:182      subgroupMul ( global 4-component vector of float)
+0:182        'f4' ( in 4-component vector of float)
+0:183      subgroupMin ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupMax ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupAnd ( global 4-component vector of uint)
+0:185        'ballot' ( temp 4-component vector of uint)
+0:186      subgroupOr ( global 4-component vector of uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupXor ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupInclusiveAdd ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:189      subgroupInclusiveMul ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:190      subgroupInclusiveMin ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupInclusiveMax ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:192        'ballot' ( temp 4-component vector of uint)
+0:193      subgroupInclusiveOr ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:194      subgroupInclusiveXor ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupExclusiveAdd ( global 4-component vector of float)
+0:195        'f4' ( in 4-component vector of float)
+0:196      subgroupExclusiveMul ( global 4-component vector of float)
+0:196        'f4' ( in 4-component vector of float)
+0:197      subgroupExclusiveMin ( global 4-component vector of float)
+0:197        'f4' ( in 4-component vector of float)
+0:198      subgroupExclusiveMax ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:199      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:199        'ballot' ( temp 4-component vector of uint)
+0:200      subgroupExclusiveOr ( global 4-component vector of uint)
+0:200        'ballot' ( temp 4-component vector of uint)
+0:201      subgroupExclusiveXor ( global 4-component vector of uint)
+0:201        'ballot' ( temp 4-component vector of uint)
+0:205  Function Definition: clustered_works(vf4; ( global void)
+0:205    Function Parameters: 
+0:205      'f4' ( in 4-component vector of float)
+0:207    Sequence
+0:207      Sequence
+0:207        move second child to first child ( temp 4-component vector of uint)
+0:207          'ballot' ( temp 4-component vector of uint)
+0:207          Constant:
+0:207            85 (const uint)
+0:207            0 (const uint)
+0:207            0 (const uint)
+0:207            0 (const uint)
+0:208      subgroupClusteredAdd ( global 4-component vector of float)
+0:208        'f4' ( in 4-component vector of float)
+0:208        Constant:
+0:208          2 (const uint)
+0:209      subgroupClusteredMul ( global 4-component vector of float)
+0:209        'f4' ( in 4-component vector of float)
+0:209        Constant:
+0:209          2 (const uint)
+0:210      subgroupClusteredMin ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
+0:210        Constant:
+0:210          2 (const uint)
+0:211      subgroupClusteredMax ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
+0:211        Constant:
+0:211          2 (const uint)
+0:212      subgroupClusteredAnd ( global 4-component vector of uint)
+0:212        'ballot' ( temp 4-component vector of uint)
+0:212        Constant:
+0:212          2 (const uint)
+0:213      subgroupClusteredOr ( global 4-component vector of uint)
+0:213        'ballot' ( temp 4-component vector of uint)
+0:213        Constant:
+0:213          2 (const uint)
+0:214      subgroupClusteredXor ( global 4-component vector of uint)
+0:214        'ballot' ( temp 4-component vector of uint)
+0:214        Constant:
+0:214          2 (const uint)
+0:218  Function Definition: quad_works(vf4; ( global void)
+0:218    Function Parameters: 
+0:218      'f4' ( in 4-component vector of float)
+0:220    Sequence
+0:220      subgroupQuadBroadcast ( global 4-component vector of float)
+0:220        'f4' ( in 4-component vector of float)
+0:220        Constant:
+0:220          0 (const uint)
+0:221      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:222      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:223      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:227  Function Definition: partitioned_works(vf4; ( global void)
+0:227    Function Parameters: 
+0:227      'f4' ( in 4-component vector of float)
+0:229    Sequence
+0:229      Sequence
+0:229        move second child to first child ( temp 4-component vector of uint)
+0:229          'parti' ( temp 4-component vector of uint)
+0:229          subgroupPartitionNV ( global 4-component vector of uint)
+0:229            'f4' ( in 4-component vector of float)
+0:230      Sequence
+0:230        move second child to first child ( temp 4-component vector of uint)
+0:230          'ballot' ( temp 4-component vector of uint)
+0:230          Constant:
+0:230            85 (const uint)
+0:230            0 (const uint)
+0:230            0 (const uint)
+0:230            0 (const uint)
+0:231      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:231        'f4' ( in 4-component vector of float)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:235        'ballot' ( temp 4-component vector of uint)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:236        'ballot' ( temp 4-component vector of uint)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:238        'f4' ( in 4-component vector of float)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:242        'ballot' ( temp 4-component vector of uint)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:243        'ballot' ( temp 4-component vector of uint)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:245        'f4' ( in 4-component vector of float)
+0:245        'parti' ( temp 4-component vector of uint)
+0:246      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:246        'f4' ( in 4-component vector of float)
+0:246        'parti' ( temp 4-component vector of uint)
+0:247      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:247        'f4' ( in 4-component vector of float)
+0:247        'parti' ( temp 4-component vector of uint)
+0:248      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:248        'f4' ( in 4-component vector of float)
+0:248        'parti' ( temp 4-component vector of uint)
+0:249      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:249        'ballot' ( temp 4-component vector of uint)
+0:249        'parti' ( temp 4-component vector of uint)
+0:250      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:250        'ballot' ( temp 4-component vector of uint)
+0:250        'parti' ( temp 4-component vector of uint)
+0:251      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:251        'ballot' ( temp 4-component vector of uint)
+0:251        'parti' ( temp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
+
+Linked closest-hit stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:108  Function Definition: main( ( global void)
+0:108    Function Parameters: 
+0:110    Sequence
+0:110      Sequence
+0:110        move second child to first child ( temp 3-component vector of uint)
+0:110          'v0' ( temp 3-component vector of uint)
+0:110          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v1' ( temp 3-component vector of uint)
+0:111          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v2' ( temp int)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:113      Sequence
+0:113        move second child to first child ( temp int)
+0:113          'v3' ( temp int)
+0:113          'gl_InstanceID' ( in int InstanceId)
+0:114      Sequence
+0:114        move second child to first child ( temp int)
+0:114          'v4' ( temp int)
+0:114          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v5' ( temp 3-component vector of float)
+0:115          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v6' ( temp 3-component vector of float)
+0:116          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp 3-component vector of float)
+0:117          'v7' ( temp 3-component vector of float)
+0:117          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118      Sequence
+0:118        move second child to first child ( temp 3-component vector of float)
+0:118          'v8' ( temp 3-component vector of float)
+0:118          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v9' ( temp float)
+0:119          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120      Sequence
+0:120        move second child to first child ( temp float)
+0:120          'v10' ( temp float)
+0:120          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121      Sequence
+0:121        move second child to first child ( temp float)
+0:121          'v11' ( temp float)
+0:121          'gl_HitTNV' ( in float HitTNV)
+0:122      Sequence
+0:122        move second child to first child ( temp uint)
+0:122          'v12' ( temp uint)
+0:122          'gl_HitKindNV' ( in uint HitKindNV)
+0:123      Sequence
+0:123        move second child to first child ( temp 4X3 matrix of float)
+0:123          'v13' ( temp 4X3 matrix of float)
+0:123          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:124      Sequence
+0:124        move second child to first child ( temp 4X3 matrix of float)
+0:124          'v14' ( temp 4X3 matrix of float)
+0:124          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:125      traceNV ( global void)
+0:125        'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:125        Constant:
+0:125          0 (const uint)
+0:125        Constant:
+0:125          1 (const uint)
+0:125        Constant:
+0:125          2 (const uint)
+0:125        Constant:
+0:125          3 (const uint)
+0:125        Constant:
+0:125          0 (const uint)
+0:125        Constant:
+0:125          0.500000
+0:125          0.500000
+0:125          0.500000
+0:125        Constant:
+0:125          0.500000
+0:125        Constant:
+0:125          1.000000
+0:125          1.000000
+0:125          1.000000
+0:125        Constant:
+0:125          0.750000
+0:125        Constant:
+0:125          1 (const int)
+0:?   Linker Objects
+0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.460.subgroup.rgen.out b/Test/baseResults/glsl.460.subgroup.rgen.out
new file mode 100644
index 0000000..58214ec
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rgen.out
@@ -0,0 +1,776 @@
+glsl.460.subgroup.rgen
+ERROR: 0:7: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:8: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:9: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:15: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:16: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:18: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:22: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:23: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:24: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:25: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:26: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 0:27: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:38: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:41: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:43: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:65: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:73: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:78: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:79: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:125: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:126: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:136: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:137: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:138: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:139: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:140: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 93 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:4  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:7      'gl_SubgroupSize' ( temp float)
+0:8      'gl_SubgroupInvocationID' ( temp float)
+0:9      subgroupBarrier ( global void)
+0:10      subgroupMemoryBarrier ( global void)
+0:11      subgroupMemoryBarrierBuffer ( global void)
+0:12      subgroupMemoryBarrierImage ( global void)
+0:13      subgroupElect ( global bool)
+0:14      'gl_NumSubgroups' ( temp float)
+0:15      'gl_SubgroupID' ( temp float)
+0:16      Constant:
+0:16        0.000000
+0:18      subgroupAll ( global bool)
+0:18        Constant:
+0:18          true (const bool)
+0:19      subgroupAny ( global bool)
+0:19        Constant:
+0:19          false (const bool)
+0:20      subgroupAllEqual ( global bool)
+0:20        'f4' ( in 4-component vector of float)
+0:22      'gl_SubgroupEqMask' ( temp float)
+0:23      'gl_SubgroupGeMask' ( temp float)
+0:24      'gl_SubgroupGtMask' ( temp float)
+0:25      'gl_SubgroupLeMask' ( temp float)
+0:26      'gl_SubgroupLtMask' ( temp float)
+0:27      subgroupBroadcast ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:27        Constant:
+0:27          0 (const uint)
+0:28      subgroupBroadcastFirst ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:29      Sequence
+0:29        move second child to first child ( temp 4-component vector of uint)
+0:29          'ballot' ( temp 4-component vector of uint)
+0:29          subgroupBallot ( global 4-component vector of uint)
+0:29            Constant:
+0:29              false (const bool)
+0:30      subgroupInverseBallot ( global bool)
+0:30        Constant:
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:30          1 (const uint)
+0:31      subgroupBallotBitExtract ( global bool)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:31        Constant:
+0:31          0 (const uint)
+0:32      subgroupBallotBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotInclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotExclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindLSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindMSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:38      subgroupShuffle ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          0 (const uint)
+0:39      subgroupShuffleXor ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleUp ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleDown ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'result' ( temp 4-component vector of float)
+0:43        subgroupAdd ( global 4-component vector of float)
+0:43          'f4' ( in 4-component vector of float)
+0:44      subgroupMul ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMin ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMax ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupAnd ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupOr ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupXor ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupInclusiveAdd ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMul ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMin ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMax ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveOr ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveXor ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupExclusiveAdd ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMul ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMin ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMax ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveOr ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveXor ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:65      subgroupClusteredAdd ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMul ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMin ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMax ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredAnd ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredOr ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredXor ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:73      subgroupQuadBroadcast ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:73        Constant:
+0:73          0 (const uint)
+0:74      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:78      Sequence
+0:78        move second child to first child ( temp 4-component vector of uint)
+0:78          'parti' ( temp 4-component vector of uint)
+0:78          subgroupPartitionNV ( global 4-component vector of uint)
+0:78            'f4' ( in 4-component vector of float)
+0:79      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:79        'f4' ( in 4-component vector of float)
+0:79        'parti' ( temp 4-component vector of uint)
+0:80      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:83        'ballot' ( temp 4-component vector of uint)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:86        'f4' ( in 4-component vector of float)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:90        'ballot' ( temp 4-component vector of uint)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:93        'f4' ( in 4-component vector of float)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:97        'ballot' ( temp 4-component vector of uint)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:101      Branch: Return with expression
+0:101        'result' ( temp 4-component vector of float)
+0:113  Function Definition: main( ( global void)
+0:113    Function Parameters: 
+0:115    Sequence
+0:115      Sequence
+0:115        move second child to first child ( temp uint)
+0:115          'lx' ( temp uint)
+0:115          direct index ( temp uint)
+0:115            'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:115            Constant:
+0:115              0 (const int)
+0:116      Sequence
+0:116        move second child to first child ( temp uint)
+0:116          'ly' ( temp uint)
+0:116          direct index ( temp uint)
+0:116            'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:116            Constant:
+0:116              1 (const int)
+0:117      Sequence
+0:117        move second child to first child ( temp uint)
+0:117          'sx' ( temp uint)
+0:117          direct index ( temp uint)
+0:117            'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:117            Constant:
+0:117              0 (const int)
+0:118      Sequence
+0:118        move second child to first child ( temp uint)
+0:118          'sy' ( temp uint)
+0:118          direct index ( temp uint)
+0:118            'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:118            Constant:
+0:118              1 (const int)
+0:119      traceNV ( global void)
+0:119        'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119        'lx' ( temp uint)
+0:119        'ly' ( temp uint)
+0:119        'sx' ( temp uint)
+0:119        'sy' ( temp uint)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        origin: direct index for structure (layout( column_major std430 offset=16) buffer 3-component vector of float)
+0:119          'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119          Constant:
+0:119            1 (const uint)
+0:119        Constant:
+0:119          0.500000
+0:119        dir: direct index for structure (layout( column_major std430 offset=0) buffer 3-component vector of float)
+0:119          'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119          Constant:
+0:119            0 (const uint)
+0:119        Constant:
+0:119          0.750000
+0:119        Constant:
+0:119          1 (const int)
+0:123  Function Definition: basic_works( ( global void)
+0:123    Function Parameters: 
+0:125    Sequence
+0:125      'gl_SubgroupSize' ( temp float)
+0:126      'gl_SubgroupInvocationID' ( temp float)
+0:127      subgroupBarrier ( global void)
+0:128      subgroupMemoryBarrier ( global void)
+0:129      subgroupMemoryBarrierBuffer ( global void)
+0:130      subgroupMemoryBarrierImage ( global void)
+0:131      subgroupElect ( global bool)
+0:135  Function Definition: ballot_works(vf4; ( global void)
+0:135    Function Parameters: 
+0:135      'f4' ( in 4-component vector of float)
+0:136    Sequence
+0:136      'gl_SubgroupEqMask' ( temp float)
+0:137      'gl_SubgroupGeMask' ( temp float)
+0:138      'gl_SubgroupGtMask' ( temp float)
+0:139      'gl_SubgroupLeMask' ( temp float)
+0:140      'gl_SubgroupLtMask' ( temp float)
+0:141      subgroupBroadcast ( global 4-component vector of float)
+0:141        'f4' ( in 4-component vector of float)
+0:141        Constant:
+0:141          0 (const uint)
+0:142      subgroupBroadcastFirst ( global 4-component vector of float)
+0:142        'f4' ( in 4-component vector of float)
+0:143      Sequence
+0:143        move second child to first child ( temp 4-component vector of uint)
+0:143          'ballot' ( temp 4-component vector of uint)
+0:143          subgroupBallot ( global 4-component vector of uint)
+0:143            Constant:
+0:143              false (const bool)
+0:144      subgroupInverseBallot ( global bool)
+0:144        Constant:
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:145      subgroupBallotBitExtract ( global bool)
+0:145        'ballot' ( temp 4-component vector of uint)
+0:145        Constant:
+0:145          0 (const uint)
+0:146      subgroupBallotBitCount ( global uint)
+0:146        'ballot' ( temp 4-component vector of uint)
+0:147      subgroupBallotInclusiveBitCount ( global uint)
+0:147        'ballot' ( temp 4-component vector of uint)
+0:148      subgroupBallotExclusiveBitCount ( global uint)
+0:148        'ballot' ( temp 4-component vector of uint)
+0:149      subgroupBallotFindLSB ( global uint)
+0:149        'ballot' ( temp 4-component vector of uint)
+0:150      subgroupBallotFindMSB ( global uint)
+0:150        'ballot' ( temp 4-component vector of uint)
+0:154  Function Definition: vote_works(vf4; ( global void)
+0:154    Function Parameters: 
+0:154      'f4' ( in 4-component vector of float)
+0:156    Sequence
+0:156      subgroupAll ( global bool)
+0:156        Constant:
+0:156          true (const bool)
+0:157      subgroupAny ( global bool)
+0:157        Constant:
+0:157          false (const bool)
+0:158      subgroupAllEqual ( global bool)
+0:158        'f4' ( in 4-component vector of float)
+0:163  Function Definition: shuffle_works(vf4; ( global void)
+0:163    Function Parameters: 
+0:163      'f4' ( in 4-component vector of float)
+0:165    Sequence
+0:165      subgroupShuffle ( global 4-component vector of float)
+0:165        'f4' ( in 4-component vector of float)
+0:165        Constant:
+0:165          0 (const uint)
+0:166      subgroupShuffleXor ( global 4-component vector of float)
+0:166        'f4' ( in 4-component vector of float)
+0:166        Constant:
+0:166          1 (const uint)
+0:167      subgroupShuffleUp ( global 4-component vector of float)
+0:167        'f4' ( in 4-component vector of float)
+0:167        Constant:
+0:167          1 (const uint)
+0:168      subgroupShuffleDown ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:168        Constant:
+0:168          1 (const uint)
+0:172  Function Definition: arith_works(vf4; ( global void)
+0:172    Function Parameters: 
+0:172      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:175      subgroupAdd ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupMul ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:177      subgroupMin ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:178      subgroupMax ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:179      subgroupAnd ( global 4-component vector of uint)
+0:179        'ballot' ( temp 4-component vector of uint)
+0:180      subgroupOr ( global 4-component vector of uint)
+0:180        'ballot' ( temp 4-component vector of uint)
+0:181      subgroupXor ( global 4-component vector of uint)
+0:181        'ballot' ( temp 4-component vector of uint)
+0:182      subgroupInclusiveAdd ( global 4-component vector of float)
+0:182        'f4' ( in 4-component vector of float)
+0:183      subgroupInclusiveMul ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupInclusiveMin ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupInclusiveMax ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupInclusiveOr ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupInclusiveXor ( global 4-component vector of uint)
+0:188        'ballot' ( temp 4-component vector of uint)
+0:189      subgroupExclusiveAdd ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:190      subgroupExclusiveMul ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupExclusiveMin ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupExclusiveMax ( global 4-component vector of float)
+0:192        'f4' ( in 4-component vector of float)
+0:193      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:194      subgroupExclusiveOr ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupExclusiveXor ( global 4-component vector of uint)
+0:195        'ballot' ( temp 4-component vector of uint)
+0:199  Function Definition: clustered_works(vf4; ( global void)
+0:199    Function Parameters: 
+0:199      'f4' ( in 4-component vector of float)
+0:201    Sequence
+0:201      Sequence
+0:201        move second child to first child ( temp 4-component vector of uint)
+0:201          'ballot' ( temp 4-component vector of uint)
+0:201          Constant:
+0:201            85 (const uint)
+0:201            0 (const uint)
+0:201            0 (const uint)
+0:201            0 (const uint)
+0:202      subgroupClusteredAdd ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:202        Constant:
+0:202          2 (const uint)
+0:203      subgroupClusteredMul ( global 4-component vector of float)
+0:203        'f4' ( in 4-component vector of float)
+0:203        Constant:
+0:203          2 (const uint)
+0:204      subgroupClusteredMin ( global 4-component vector of float)
+0:204        'f4' ( in 4-component vector of float)
+0:204        Constant:
+0:204          2 (const uint)
+0:205      subgroupClusteredMax ( global 4-component vector of float)
+0:205        'f4' ( in 4-component vector of float)
+0:205        Constant:
+0:205          2 (const uint)
+0:206      subgroupClusteredAnd ( global 4-component vector of uint)
+0:206        'ballot' ( temp 4-component vector of uint)
+0:206        Constant:
+0:206          2 (const uint)
+0:207      subgroupClusteredOr ( global 4-component vector of uint)
+0:207        'ballot' ( temp 4-component vector of uint)
+0:207        Constant:
+0:207          2 (const uint)
+0:208      subgroupClusteredXor ( global 4-component vector of uint)
+0:208        'ballot' ( temp 4-component vector of uint)
+0:208        Constant:
+0:208          2 (const uint)
+0:212  Function Definition: quad_works(vf4; ( global void)
+0:212    Function Parameters: 
+0:212      'f4' ( in 4-component vector of float)
+0:214    Sequence
+0:214      subgroupQuadBroadcast ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        Constant:
+0:214          0 (const uint)
+0:215      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:216      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:216        'f4' ( in 4-component vector of float)
+0:217      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:217        'f4' ( in 4-component vector of float)
+0:221  Function Definition: partitioned_works(vf4; ( global void)
+0:221    Function Parameters: 
+0:221      'f4' ( in 4-component vector of float)
+0:223    Sequence
+0:223      Sequence
+0:223        move second child to first child ( temp 4-component vector of uint)
+0:223          'parti' ( temp 4-component vector of uint)
+0:223          subgroupPartitionNV ( global 4-component vector of uint)
+0:223            'f4' ( in 4-component vector of float)
+0:224      Sequence
+0:224        move second child to first child ( temp 4-component vector of uint)
+0:224          'ballot' ( temp 4-component vector of uint)
+0:224          Constant:
+0:224            85 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:225      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
+0:225        'parti' ( temp 4-component vector of uint)
+0:226      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
+0:226        'parti' ( temp 4-component vector of uint)
+0:227      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:227        'parti' ( temp 4-component vector of uint)
+0:228      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:229        'ballot' ( temp 4-component vector of uint)
+0:229        'parti' ( temp 4-component vector of uint)
+0:230      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:230        'ballot' ( temp 4-component vector of uint)
+0:230        'parti' ( temp 4-component vector of uint)
+0:231      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:235        'f4' ( in 4-component vector of float)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:236        'ballot' ( temp 4-component vector of uint)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:238        'ballot' ( temp 4-component vector of uint)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:242        'f4' ( in 4-component vector of float)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:243        'ballot' ( temp 4-component vector of uint)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:245        'ballot' ( temp 4-component vector of uint)
+0:245        'parti' ( temp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV)
+0:?     'payload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+
+
+Linked ray-generation stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:113  Function Definition: main( ( global void)
+0:113    Function Parameters: 
+0:115    Sequence
+0:115      Sequence
+0:115        move second child to first child ( temp uint)
+0:115          'lx' ( temp uint)
+0:115          direct index ( temp uint)
+0:115            'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:115            Constant:
+0:115              0 (const int)
+0:116      Sequence
+0:116        move second child to first child ( temp uint)
+0:116          'ly' ( temp uint)
+0:116          direct index ( temp uint)
+0:116            'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:116            Constant:
+0:116              1 (const int)
+0:117      Sequence
+0:117        move second child to first child ( temp uint)
+0:117          'sx' ( temp uint)
+0:117          direct index ( temp uint)
+0:117            'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:117            Constant:
+0:117              0 (const int)
+0:118      Sequence
+0:118        move second child to first child ( temp uint)
+0:118          'sy' ( temp uint)
+0:118          direct index ( temp uint)
+0:118            'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:118            Constant:
+0:118              1 (const int)
+0:119      traceNV ( global void)
+0:119        'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119        'lx' ( temp uint)
+0:119        'ly' ( temp uint)
+0:119        'sx' ( temp uint)
+0:119        'sy' ( temp uint)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        origin: direct index for structure (layout( column_major std430 offset=16) buffer 3-component vector of float)
+0:119          'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119          Constant:
+0:119            1 (const uint)
+0:119        Constant:
+0:119          0.500000
+0:119        dir: direct index for structure (layout( column_major std430 offset=0) buffer 3-component vector of float)
+0:119          'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+0:119          Constant:
+0:119            0 (const uint)
+0:119        Constant:
+0:119          0.750000
+0:119        Constant:
+0:119          1 (const int)
+0:?   Linker Objects
+0:?     'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV)
+0:?     'payload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'anon@0' (layout( column_major std430 shaderRecordNV) buffer block{layout( column_major std430 offset=0) buffer 3-component vector of float dir, layout( column_major std430 offset=16) buffer 3-component vector of float origin})
+
diff --git a/Test/baseResults/glsl.460.subgroup.rint.out b/Test/baseResults/glsl.460.subgroup.rint.out
new file mode 100644
index 0000000..65c42d7
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rint.out
@@ -0,0 +1,798 @@
+glsl.460.subgroup.rint
+ERROR: 0:8: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:9: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:10: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:16: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:17: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:19: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:23: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:24: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:25: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:26: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:27: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 0:28: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:39: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:41: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:44: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:66: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:74: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:79: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:100: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:131: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:132: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:142: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:143: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:144: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:145: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:146: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 93 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:5  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:5    Function Parameters: 
+0:5      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:8      'gl_SubgroupSize' ( temp float)
+0:9      'gl_SubgroupInvocationID' ( temp float)
+0:10      subgroupBarrier ( global void)
+0:11      subgroupMemoryBarrier ( global void)
+0:12      subgroupMemoryBarrierBuffer ( global void)
+0:13      subgroupMemoryBarrierImage ( global void)
+0:14      subgroupElect ( global bool)
+0:15      'gl_NumSubgroups' ( temp float)
+0:16      'gl_SubgroupID' ( temp float)
+0:17      Constant:
+0:17        0.000000
+0:19      subgroupAll ( global bool)
+0:19        Constant:
+0:19          true (const bool)
+0:20      subgroupAny ( global bool)
+0:20        Constant:
+0:20          false (const bool)
+0:21      subgroupAllEqual ( global bool)
+0:21        'f4' ( in 4-component vector of float)
+0:23      'gl_SubgroupEqMask' ( temp float)
+0:24      'gl_SubgroupGeMask' ( temp float)
+0:25      'gl_SubgroupGtMask' ( temp float)
+0:26      'gl_SubgroupLeMask' ( temp float)
+0:27      'gl_SubgroupLtMask' ( temp float)
+0:28      subgroupBroadcast ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:28        Constant:
+0:28          0 (const uint)
+0:29      subgroupBroadcastFirst ( global 4-component vector of float)
+0:29        'f4' ( in 4-component vector of float)
+0:30      Sequence
+0:30        move second child to first child ( temp 4-component vector of uint)
+0:30          'ballot' ( temp 4-component vector of uint)
+0:30          subgroupBallot ( global 4-component vector of uint)
+0:30            Constant:
+0:30              false (const bool)
+0:31      subgroupInverseBallot ( global bool)
+0:31        Constant:
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:32      subgroupBallotBitExtract ( global bool)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:32        Constant:
+0:32          0 (const uint)
+0:33      subgroupBallotBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotInclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotExclusiveBitCount ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindLSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupBallotFindMSB ( global uint)
+0:37        'ballot' ( temp 4-component vector of uint)
+0:39      subgroupShuffle ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          0 (const uint)
+0:40      subgroupShuffleXor ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleUp ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:42      subgroupShuffleDown ( global 4-component vector of float)
+0:42        'f4' ( in 4-component vector of float)
+0:42        Constant:
+0:42          1 (const uint)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        'result' ( temp 4-component vector of float)
+0:44        subgroupAdd ( global 4-component vector of float)
+0:44          'f4' ( in 4-component vector of float)
+0:45      subgroupMul ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMin ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupMax ( global 4-component vector of float)
+0:47        'f4' ( in 4-component vector of float)
+0:48      subgroupAnd ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupOr ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupXor ( global 4-component vector of uint)
+0:50        'ballot' ( temp 4-component vector of uint)
+0:51      subgroupInclusiveAdd ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMul ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMin ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveMax ( global 4-component vector of float)
+0:54        'f4' ( in 4-component vector of float)
+0:55      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveOr ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupInclusiveXor ( global 4-component vector of uint)
+0:57        'ballot' ( temp 4-component vector of uint)
+0:58      subgroupExclusiveAdd ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMul ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMin ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveMax ( global 4-component vector of float)
+0:61        'f4' ( in 4-component vector of float)
+0:62      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveOr ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupExclusiveXor ( global 4-component vector of uint)
+0:64        'ballot' ( temp 4-component vector of uint)
+0:66      subgroupClusteredAdd ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMul ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMin ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredMax ( global 4-component vector of float)
+0:69        'f4' ( in 4-component vector of float)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredAnd ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredOr ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:72      subgroupClusteredXor ( global 4-component vector of uint)
+0:72        'ballot' ( temp 4-component vector of uint)
+0:72        Constant:
+0:72          2 (const uint)
+0:74      subgroupQuadBroadcast ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:74        Constant:
+0:74          0 (const uint)
+0:75      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:77      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:77        'f4' ( in 4-component vector of float)
+0:79      Sequence
+0:79        move second child to first child ( temp 4-component vector of uint)
+0:79          'parti' ( temp 4-component vector of uint)
+0:79          subgroupPartitionNV ( global 4-component vector of uint)
+0:79            'f4' ( in 4-component vector of float)
+0:80      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:83        'f4' ( in 4-component vector of float)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:86        'ballot' ( temp 4-component vector of uint)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:90        'f4' ( in 4-component vector of float)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:93        'ballot' ( temp 4-component vector of uint)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:97        'f4' ( in 4-component vector of float)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:100      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:100        'ballot' ( temp 4-component vector of uint)
+0:100        'parti' ( temp 4-component vector of uint)
+0:102      Branch: Return with expression
+0:102        'result' ( temp 4-component vector of float)
+0:108  Function Definition: main( ( global void)
+0:108    Function Parameters: 
+0:110    Sequence
+0:110      Sequence
+0:110        move second child to first child ( temp 3-component vector of uint)
+0:110          'v0' ( temp 3-component vector of uint)
+0:110          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v1' ( temp 3-component vector of uint)
+0:111          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v2' ( temp int)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:113      Sequence
+0:113        move second child to first child ( temp int)
+0:113          'v3' ( temp int)
+0:113          'gl_InstanceID' ( in int InstanceId)
+0:114      Sequence
+0:114        move second child to first child ( temp int)
+0:114          'v4' ( temp int)
+0:114          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v5' ( temp 3-component vector of float)
+0:115          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v6' ( temp 3-component vector of float)
+0:116          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp 3-component vector of float)
+0:117          'v7' ( temp 3-component vector of float)
+0:117          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118      Sequence
+0:118        move second child to first child ( temp 3-component vector of float)
+0:118          'v8' ( temp 3-component vector of float)
+0:118          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v9' ( temp float)
+0:119          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120      Sequence
+0:120        move second child to first child ( temp float)
+0:120          'v10' ( temp float)
+0:120          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121      Sequence
+0:121        move second child to first child ( temp 4X3 matrix of float)
+0:121          'v11' ( temp 4X3 matrix of float)
+0:121          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122      Sequence
+0:122        move second child to first child ( temp 4X3 matrix of float)
+0:122          'v12' ( temp 4X3 matrix of float)
+0:122          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123      move second child to first child ( temp 4-component vector of float)
+0:123        'iAttr' ( hitAttributeNV 4-component vector of float)
+0:123        Constant:
+0:123          0.500000
+0:123          0.500000
+0:123          0.000000
+0:123          1.000000
+0:124      reportIntersectionNV ( global bool)
+0:124        Constant:
+0:124          0.500000
+0:124        Constant:
+0:124          1 (const uint)
+0:129  Function Definition: basic_works( ( global void)
+0:129    Function Parameters: 
+0:131    Sequence
+0:131      'gl_SubgroupSize' ( temp float)
+0:132      'gl_SubgroupInvocationID' ( temp float)
+0:133      subgroupBarrier ( global void)
+0:134      subgroupMemoryBarrier ( global void)
+0:135      subgroupMemoryBarrierBuffer ( global void)
+0:136      subgroupMemoryBarrierImage ( global void)
+0:137      subgroupElect ( global bool)
+0:141  Function Definition: ballot_works(vf4; ( global void)
+0:141    Function Parameters: 
+0:141      'f4' ( in 4-component vector of float)
+0:142    Sequence
+0:142      'gl_SubgroupEqMask' ( temp float)
+0:143      'gl_SubgroupGeMask' ( temp float)
+0:144      'gl_SubgroupGtMask' ( temp float)
+0:145      'gl_SubgroupLeMask' ( temp float)
+0:146      'gl_SubgroupLtMask' ( temp float)
+0:147      subgroupBroadcast ( global 4-component vector of float)
+0:147        'f4' ( in 4-component vector of float)
+0:147        Constant:
+0:147          0 (const uint)
+0:148      subgroupBroadcastFirst ( global 4-component vector of float)
+0:148        'f4' ( in 4-component vector of float)
+0:149      Sequence
+0:149        move second child to first child ( temp 4-component vector of uint)
+0:149          'ballot' ( temp 4-component vector of uint)
+0:149          subgroupBallot ( global 4-component vector of uint)
+0:149            Constant:
+0:149              false (const bool)
+0:150      subgroupInverseBallot ( global bool)
+0:150        Constant:
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:150          1 (const uint)
+0:151      subgroupBallotBitExtract ( global bool)
+0:151        'ballot' ( temp 4-component vector of uint)
+0:151        Constant:
+0:151          0 (const uint)
+0:152      subgroupBallotBitCount ( global uint)
+0:152        'ballot' ( temp 4-component vector of uint)
+0:153      subgroupBallotInclusiveBitCount ( global uint)
+0:153        'ballot' ( temp 4-component vector of uint)
+0:154      subgroupBallotExclusiveBitCount ( global uint)
+0:154        'ballot' ( temp 4-component vector of uint)
+0:155      subgroupBallotFindLSB ( global uint)
+0:155        'ballot' ( temp 4-component vector of uint)
+0:156      subgroupBallotFindMSB ( global uint)
+0:156        'ballot' ( temp 4-component vector of uint)
+0:160  Function Definition: vote_works(vf4; ( global void)
+0:160    Function Parameters: 
+0:160      'f4' ( in 4-component vector of float)
+0:162    Sequence
+0:162      subgroupAll ( global bool)
+0:162        Constant:
+0:162          true (const bool)
+0:163      subgroupAny ( global bool)
+0:163        Constant:
+0:163          false (const bool)
+0:164      subgroupAllEqual ( global bool)
+0:164        'f4' ( in 4-component vector of float)
+0:169  Function Definition: shuffle_works(vf4; ( global void)
+0:169    Function Parameters: 
+0:169      'f4' ( in 4-component vector of float)
+0:171    Sequence
+0:171      subgroupShuffle ( global 4-component vector of float)
+0:171        'f4' ( in 4-component vector of float)
+0:171        Constant:
+0:171          0 (const uint)
+0:172      subgroupShuffleXor ( global 4-component vector of float)
+0:172        'f4' ( in 4-component vector of float)
+0:172        Constant:
+0:172          1 (const uint)
+0:173      subgroupShuffleUp ( global 4-component vector of float)
+0:173        'f4' ( in 4-component vector of float)
+0:173        Constant:
+0:173          1 (const uint)
+0:174      subgroupShuffleDown ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:174        Constant:
+0:174          1 (const uint)
+0:178  Function Definition: arith_works(vf4; ( global void)
+0:178    Function Parameters: 
+0:178      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:181      subgroupAdd ( global 4-component vector of float)
+0:181        'f4' ( in 4-component vector of float)
+0:182      subgroupMul ( global 4-component vector of float)
+0:182        'f4' ( in 4-component vector of float)
+0:183      subgroupMin ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupMax ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupAnd ( global 4-component vector of uint)
+0:185        'ballot' ( temp 4-component vector of uint)
+0:186      subgroupOr ( global 4-component vector of uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupXor ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupInclusiveAdd ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:189      subgroupInclusiveMul ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:190      subgroupInclusiveMin ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupInclusiveMax ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:192        'ballot' ( temp 4-component vector of uint)
+0:193      subgroupInclusiveOr ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:194      subgroupInclusiveXor ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupExclusiveAdd ( global 4-component vector of float)
+0:195        'f4' ( in 4-component vector of float)
+0:196      subgroupExclusiveMul ( global 4-component vector of float)
+0:196        'f4' ( in 4-component vector of float)
+0:197      subgroupExclusiveMin ( global 4-component vector of float)
+0:197        'f4' ( in 4-component vector of float)
+0:198      subgroupExclusiveMax ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:199      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:199        'ballot' ( temp 4-component vector of uint)
+0:200      subgroupExclusiveOr ( global 4-component vector of uint)
+0:200        'ballot' ( temp 4-component vector of uint)
+0:201      subgroupExclusiveXor ( global 4-component vector of uint)
+0:201        'ballot' ( temp 4-component vector of uint)
+0:205  Function Definition: clustered_works(vf4; ( global void)
+0:205    Function Parameters: 
+0:205      'f4' ( in 4-component vector of float)
+0:207    Sequence
+0:207      Sequence
+0:207        move second child to first child ( temp 4-component vector of uint)
+0:207          'ballot' ( temp 4-component vector of uint)
+0:207          Constant:
+0:207            85 (const uint)
+0:207            0 (const uint)
+0:207            0 (const uint)
+0:207            0 (const uint)
+0:208      subgroupClusteredAdd ( global 4-component vector of float)
+0:208        'f4' ( in 4-component vector of float)
+0:208        Constant:
+0:208          2 (const uint)
+0:209      subgroupClusteredMul ( global 4-component vector of float)
+0:209        'f4' ( in 4-component vector of float)
+0:209        Constant:
+0:209          2 (const uint)
+0:210      subgroupClusteredMin ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
+0:210        Constant:
+0:210          2 (const uint)
+0:211      subgroupClusteredMax ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
+0:211        Constant:
+0:211          2 (const uint)
+0:212      subgroupClusteredAnd ( global 4-component vector of uint)
+0:212        'ballot' ( temp 4-component vector of uint)
+0:212        Constant:
+0:212          2 (const uint)
+0:213      subgroupClusteredOr ( global 4-component vector of uint)
+0:213        'ballot' ( temp 4-component vector of uint)
+0:213        Constant:
+0:213          2 (const uint)
+0:214      subgroupClusteredXor ( global 4-component vector of uint)
+0:214        'ballot' ( temp 4-component vector of uint)
+0:214        Constant:
+0:214          2 (const uint)
+0:218  Function Definition: quad_works(vf4; ( global void)
+0:218    Function Parameters: 
+0:218      'f4' ( in 4-component vector of float)
+0:220    Sequence
+0:220      subgroupQuadBroadcast ( global 4-component vector of float)
+0:220        'f4' ( in 4-component vector of float)
+0:220        Constant:
+0:220          0 (const uint)
+0:221      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:221        'f4' ( in 4-component vector of float)
+0:222      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:222        'f4' ( in 4-component vector of float)
+0:223      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:223        'f4' ( in 4-component vector of float)
+0:227  Function Definition: partitioned_works(vf4; ( global void)
+0:227    Function Parameters: 
+0:227      'f4' ( in 4-component vector of float)
+0:229    Sequence
+0:229      Sequence
+0:229        move second child to first child ( temp 4-component vector of uint)
+0:229          'parti' ( temp 4-component vector of uint)
+0:229          subgroupPartitionNV ( global 4-component vector of uint)
+0:229            'f4' ( in 4-component vector of float)
+0:230      Sequence
+0:230        move second child to first child ( temp 4-component vector of uint)
+0:230          'ballot' ( temp 4-component vector of uint)
+0:230          Constant:
+0:230            85 (const uint)
+0:230            0 (const uint)
+0:230            0 (const uint)
+0:230            0 (const uint)
+0:231      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:231        'f4' ( in 4-component vector of float)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:235        'ballot' ( temp 4-component vector of uint)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:236        'ballot' ( temp 4-component vector of uint)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:238        'f4' ( in 4-component vector of float)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:242        'ballot' ( temp 4-component vector of uint)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:243        'ballot' ( temp 4-component vector of uint)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:245        'f4' ( in 4-component vector of float)
+0:245        'parti' ( temp 4-component vector of uint)
+0:246      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:246        'f4' ( in 4-component vector of float)
+0:246        'parti' ( temp 4-component vector of uint)
+0:247      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:247        'f4' ( in 4-component vector of float)
+0:247        'parti' ( temp 4-component vector of uint)
+0:248      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:248        'f4' ( in 4-component vector of float)
+0:248        'parti' ( temp 4-component vector of uint)
+0:249      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:249        'ballot' ( temp 4-component vector of uint)
+0:249        'parti' ( temp 4-component vector of uint)
+0:250      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:250        'ballot' ( temp 4-component vector of uint)
+0:250        'parti' ( temp 4-component vector of uint)
+0:251      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:251        'ballot' ( temp 4-component vector of uint)
+0:251        'parti' ( temp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'iAttr' ( hitAttributeNV 4-component vector of float)
+
+
+Linked intersection stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:108  Function Definition: main( ( global void)
+0:108    Function Parameters: 
+0:110    Sequence
+0:110      Sequence
+0:110        move second child to first child ( temp 3-component vector of uint)
+0:110          'v0' ( temp 3-component vector of uint)
+0:110          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v1' ( temp 3-component vector of uint)
+0:111          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:112      Sequence
+0:112        move second child to first child ( temp int)
+0:112          'v2' ( temp int)
+0:112          'gl_PrimitiveID' ( in int PrimitiveID)
+0:113      Sequence
+0:113        move second child to first child ( temp int)
+0:113          'v3' ( temp int)
+0:113          'gl_InstanceID' ( in int InstanceId)
+0:114      Sequence
+0:114        move second child to first child ( temp int)
+0:114          'v4' ( temp int)
+0:114          'gl_InstanceCustomIndexNV' ( in int InstanceCustomIndexNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v5' ( temp 3-component vector of float)
+0:115          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v6' ( temp 3-component vector of float)
+0:116          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp 3-component vector of float)
+0:117          'v7' ( temp 3-component vector of float)
+0:117          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:118      Sequence
+0:118        move second child to first child ( temp 3-component vector of float)
+0:118          'v8' ( temp 3-component vector of float)
+0:118          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'v9' ( temp float)
+0:119          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:120      Sequence
+0:120        move second child to first child ( temp float)
+0:120          'v10' ( temp float)
+0:120          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:121      Sequence
+0:121        move second child to first child ( temp 4X3 matrix of float)
+0:121          'v11' ( temp 4X3 matrix of float)
+0:121          'gl_ObjectToWorldNV' ( in 4X3 matrix of float ObjectToWorldNV)
+0:122      Sequence
+0:122        move second child to first child ( temp 4X3 matrix of float)
+0:122          'v12' ( temp 4X3 matrix of float)
+0:122          'gl_WorldToObjectNV' ( in 4X3 matrix of float WorldToObjectNV)
+0:123      move second child to first child ( temp 4-component vector of float)
+0:123        'iAttr' ( hitAttributeNV 4-component vector of float)
+0:123        Constant:
+0:123          0.500000
+0:123          0.500000
+0:123          0.000000
+0:123          1.000000
+0:124      reportIntersectionNV ( global bool)
+0:124        Constant:
+0:124          0.500000
+0:124        Constant:
+0:124          1 (const uint)
+0:?   Linker Objects
+0:?     'iAttr' ( hitAttributeNV 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.460.subgroup.rmiss.out b/Test/baseResults/glsl.460.subgroup.rmiss.out
new file mode 100644
index 0000000..2636c98
--- /dev/null
+++ b/Test/baseResults/glsl.460.subgroup.rmiss.out
@@ -0,0 +1,790 @@
+glsl.460.subgroup.rmiss
+ERROR: 0:8: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:9: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:10: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'gl_NumSubgroups' : undeclared identifier 
+ERROR: 0:16: 'gl_SubgroupID' : undeclared identifier 
+ERROR: 0:17: 'subgroupMemoryBarrierShared' : no matching overloaded function found 
+ERROR: 0:19: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:20: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:23: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:24: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:25: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:26: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:27: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 0:28: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:36: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:39: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:40: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:41: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:44: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:63: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:66: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:71: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:74: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:76: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:77: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:79: 'subgroupPartitionNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:80: 'subgroupPartitionedAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:81: 'subgroupPartitionedMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:82: 'subgroupPartitionedMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:83: 'subgroupPartitionedMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:84: 'subgroupPartitionedAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:85: 'subgroupPartitionedOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:86: 'subgroupPartitionedXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:87: 'subgroupPartitionedInclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:88: 'subgroupPartitionedInclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:89: 'subgroupPartitionedInclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:90: 'subgroupPartitionedInclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:91: 'subgroupPartitionedInclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:92: 'subgroupPartitionedInclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:93: 'subgroupPartitionedInclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:94: 'subgroupPartitionedExclusiveAddNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:95: 'subgroupPartitionedExclusiveMulNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:96: 'subgroupPartitionedExclusiveMinNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:97: 'subgroupPartitionedExclusiveMaxNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:98: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:99: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:100: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
+ERROR: 0:125: 'gl_SubgroupSize' : undeclared identifier 
+ERROR: 0:126: 'gl_SubgroupInvocationID' : undeclared identifier 
+ERROR: 0:136: 'gl_SubgroupEqMask' : undeclared identifier 
+ERROR: 0:137: 'gl_SubgroupGeMask' : undeclared identifier 
+ERROR: 0:138: 'gl_SubgroupGtMask' : undeclared identifier 
+ERROR: 0:139: 'gl_SubgroupLeMask' : undeclared identifier 
+ERROR: 0:140: 'gl_SubgroupLtMask' : undeclared identifier 
+ERROR: 93 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:5  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:5    Function Parameters: 
+0:5      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:8      'gl_SubgroupSize' ( temp float)
+0:9      'gl_SubgroupInvocationID' ( temp float)
+0:10      subgroupBarrier ( global void)
+0:11      subgroupMemoryBarrier ( global void)
+0:12      subgroupMemoryBarrierBuffer ( global void)
+0:13      subgroupMemoryBarrierImage ( global void)
+0:14      subgroupElect ( global bool)
+0:15      'gl_NumSubgroups' ( temp float)
+0:16      'gl_SubgroupID' ( temp float)
+0:17      Constant:
+0:17        0.000000
+0:19      subgroupAll ( global bool)
+0:19        Constant:
+0:19          true (const bool)
+0:20      subgroupAny ( global bool)
+0:20        Constant:
+0:20          false (const bool)
+0:21      subgroupAllEqual ( global bool)
+0:21        'f4' ( in 4-component vector of float)
+0:23      'gl_SubgroupEqMask' ( temp float)
+0:24      'gl_SubgroupGeMask' ( temp float)
+0:25      'gl_SubgroupGtMask' ( temp float)
+0:26      'gl_SubgroupLeMask' ( temp float)
+0:27      'gl_SubgroupLtMask' ( temp float)
+0:28      subgroupBroadcast ( global 4-component vector of float)
+0:28        'f4' ( in 4-component vector of float)
+0:28        Constant:
+0:28          0 (const uint)
+0:29      subgroupBroadcastFirst ( global 4-component vector of float)
+0:29        'f4' ( in 4-component vector of float)
+0:30      Sequence
+0:30        move second child to first child ( temp 4-component vector of uint)
+0:30          'ballot' ( temp 4-component vector of uint)
+0:30          subgroupBallot ( global 4-component vector of uint)
+0:30            Constant:
+0:30              false (const bool)
+0:31      subgroupInverseBallot ( global bool)
+0:31        Constant:
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:31          1 (const uint)
+0:32      subgroupBallotBitExtract ( global bool)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:32        Constant:
+0:32          0 (const uint)
+0:33      subgroupBallotBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotInclusiveBitCount ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotExclusiveBitCount ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:36      subgroupBallotFindLSB ( global uint)
+0:36        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupBallotFindMSB ( global uint)
+0:37        'ballot' ( temp 4-component vector of uint)
+0:39      subgroupShuffle ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          0 (const uint)
+0:40      subgroupShuffleXor ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:41      subgroupShuffleUp ( global 4-component vector of float)
+0:41        'f4' ( in 4-component vector of float)
+0:41        Constant:
+0:41          1 (const uint)
+0:42      subgroupShuffleDown ( global 4-component vector of float)
+0:42        'f4' ( in 4-component vector of float)
+0:42        Constant:
+0:42          1 (const uint)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        'result' ( temp 4-component vector of float)
+0:44        subgroupAdd ( global 4-component vector of float)
+0:44          'f4' ( in 4-component vector of float)
+0:45      subgroupMul ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupMin ( global 4-component vector of float)
+0:46        'f4' ( in 4-component vector of float)
+0:47      subgroupMax ( global 4-component vector of float)
+0:47        'f4' ( in 4-component vector of float)
+0:48      subgroupAnd ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupOr ( global 4-component vector of uint)
+0:49        'ballot' ( temp 4-component vector of uint)
+0:50      subgroupXor ( global 4-component vector of uint)
+0:50        'ballot' ( temp 4-component vector of uint)
+0:51      subgroupInclusiveAdd ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMul ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveMin ( global 4-component vector of float)
+0:53        'f4' ( in 4-component vector of float)
+0:54      subgroupInclusiveMax ( global 4-component vector of float)
+0:54        'f4' ( in 4-component vector of float)
+0:55      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupInclusiveOr ( global 4-component vector of uint)
+0:56        'ballot' ( temp 4-component vector of uint)
+0:57      subgroupInclusiveXor ( global 4-component vector of uint)
+0:57        'ballot' ( temp 4-component vector of uint)
+0:58      subgroupExclusiveAdd ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMul ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveMin ( global 4-component vector of float)
+0:60        'f4' ( in 4-component vector of float)
+0:61      subgroupExclusiveMax ( global 4-component vector of float)
+0:61        'f4' ( in 4-component vector of float)
+0:62      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:63      subgroupExclusiveOr ( global 4-component vector of uint)
+0:63        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupExclusiveXor ( global 4-component vector of uint)
+0:64        'ballot' ( temp 4-component vector of uint)
+0:66      subgroupClusteredAdd ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMul ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredMin ( global 4-component vector of float)
+0:68        'f4' ( in 4-component vector of float)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredMax ( global 4-component vector of float)
+0:69        'f4' ( in 4-component vector of float)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredAnd ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:71      subgroupClusteredOr ( global 4-component vector of uint)
+0:71        'ballot' ( temp 4-component vector of uint)
+0:71        Constant:
+0:71          2 (const uint)
+0:72      subgroupClusteredXor ( global 4-component vector of uint)
+0:72        'ballot' ( temp 4-component vector of uint)
+0:72        Constant:
+0:72          2 (const uint)
+0:74      subgroupQuadBroadcast ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:74        Constant:
+0:74          0 (const uint)
+0:75      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:76      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:76        'f4' ( in 4-component vector of float)
+0:77      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:77        'f4' ( in 4-component vector of float)
+0:79      Sequence
+0:79        move second child to first child ( temp 4-component vector of uint)
+0:79          'parti' ( temp 4-component vector of uint)
+0:79          subgroupPartitionNV ( global 4-component vector of uint)
+0:79            'f4' ( in 4-component vector of float)
+0:80      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:80        'f4' ( in 4-component vector of float)
+0:80        'parti' ( temp 4-component vector of uint)
+0:81      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:81        'f4' ( in 4-component vector of float)
+0:81        'parti' ( temp 4-component vector of uint)
+0:82      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:82        'f4' ( in 4-component vector of float)
+0:82        'parti' ( temp 4-component vector of uint)
+0:83      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:83        'f4' ( in 4-component vector of float)
+0:83        'parti' ( temp 4-component vector of uint)
+0:84      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:84        'ballot' ( temp 4-component vector of uint)
+0:84        'parti' ( temp 4-component vector of uint)
+0:85      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:85        'ballot' ( temp 4-component vector of uint)
+0:85        'parti' ( temp 4-component vector of uint)
+0:86      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:86        'ballot' ( temp 4-component vector of uint)
+0:86        'parti' ( temp 4-component vector of uint)
+0:87      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:87        'f4' ( in 4-component vector of float)
+0:87        'parti' ( temp 4-component vector of uint)
+0:88      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:88        'f4' ( in 4-component vector of float)
+0:88        'parti' ( temp 4-component vector of uint)
+0:89      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:89        'f4' ( in 4-component vector of float)
+0:89        'parti' ( temp 4-component vector of uint)
+0:90      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:90        'f4' ( in 4-component vector of float)
+0:90        'parti' ( temp 4-component vector of uint)
+0:91      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:91        'ballot' ( temp 4-component vector of uint)
+0:91        'parti' ( temp 4-component vector of uint)
+0:92      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:92        'ballot' ( temp 4-component vector of uint)
+0:92        'parti' ( temp 4-component vector of uint)
+0:93      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:93        'ballot' ( temp 4-component vector of uint)
+0:93        'parti' ( temp 4-component vector of uint)
+0:94      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:94        'f4' ( in 4-component vector of float)
+0:94        'parti' ( temp 4-component vector of uint)
+0:95      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:95        'f4' ( in 4-component vector of float)
+0:95        'parti' ( temp 4-component vector of uint)
+0:96      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:96        'f4' ( in 4-component vector of float)
+0:96        'parti' ( temp 4-component vector of uint)
+0:97      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:97        'f4' ( in 4-component vector of float)
+0:97        'parti' ( temp 4-component vector of uint)
+0:98      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:98        'ballot' ( temp 4-component vector of uint)
+0:98        'parti' ( temp 4-component vector of uint)
+0:99      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:99        'ballot' ( temp 4-component vector of uint)
+0:99        'parti' ( temp 4-component vector of uint)
+0:100      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:100        'ballot' ( temp 4-component vector of uint)
+0:100        'parti' ( temp 4-component vector of uint)
+0:102      Branch: Return with expression
+0:102        'result' ( temp 4-component vector of float)
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v0' ( temp 3-component vector of uint)
+0:111          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112      Sequence
+0:112        move second child to first child ( temp 3-component vector of uint)
+0:112          'v1' ( temp 3-component vector of uint)
+0:112          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113      Sequence
+0:113        move second child to first child ( temp 3-component vector of float)
+0:113          'v2' ( temp 3-component vector of float)
+0:113          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114      Sequence
+0:114        move second child to first child ( temp 3-component vector of float)
+0:114          'v3' ( temp 3-component vector of float)
+0:114          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v4' ( temp 3-component vector of float)
+0:115          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v5' ( temp 3-component vector of float)
+0:116          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp float)
+0:117          'v6' ( temp float)
+0:117          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118      Sequence
+0:118        move second child to first child ( temp float)
+0:118          'v7' ( temp float)
+0:118          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119      traceNV ( global void)
+0:119        'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        Constant:
+0:119          1 (const uint)
+0:119        Constant:
+0:119          2 (const uint)
+0:119        Constant:
+0:119          3 (const uint)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        Constant:
+0:119          0.500000
+0:119          0.500000
+0:119          0.500000
+0:119        Constant:
+0:119          0.500000
+0:119        Constant:
+0:119          1.000000
+0:119          1.000000
+0:119          1.000000
+0:119        Constant:
+0:119          0.750000
+0:119        Constant:
+0:119          1 (const int)
+0:123  Function Definition: basic_works( ( global void)
+0:123    Function Parameters: 
+0:125    Sequence
+0:125      'gl_SubgroupSize' ( temp float)
+0:126      'gl_SubgroupInvocationID' ( temp float)
+0:127      subgroupBarrier ( global void)
+0:128      subgroupMemoryBarrier ( global void)
+0:129      subgroupMemoryBarrierBuffer ( global void)
+0:130      subgroupMemoryBarrierImage ( global void)
+0:131      subgroupElect ( global bool)
+0:135  Function Definition: ballot_works(vf4; ( global void)
+0:135    Function Parameters: 
+0:135      'f4' ( in 4-component vector of float)
+0:136    Sequence
+0:136      'gl_SubgroupEqMask' ( temp float)
+0:137      'gl_SubgroupGeMask' ( temp float)
+0:138      'gl_SubgroupGtMask' ( temp float)
+0:139      'gl_SubgroupLeMask' ( temp float)
+0:140      'gl_SubgroupLtMask' ( temp float)
+0:141      subgroupBroadcast ( global 4-component vector of float)
+0:141        'f4' ( in 4-component vector of float)
+0:141        Constant:
+0:141          0 (const uint)
+0:142      subgroupBroadcastFirst ( global 4-component vector of float)
+0:142        'f4' ( in 4-component vector of float)
+0:143      Sequence
+0:143        move second child to first child ( temp 4-component vector of uint)
+0:143          'ballot' ( temp 4-component vector of uint)
+0:143          subgroupBallot ( global 4-component vector of uint)
+0:143            Constant:
+0:143              false (const bool)
+0:144      subgroupInverseBallot ( global bool)
+0:144        Constant:
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:144          1 (const uint)
+0:145      subgroupBallotBitExtract ( global bool)
+0:145        'ballot' ( temp 4-component vector of uint)
+0:145        Constant:
+0:145          0 (const uint)
+0:146      subgroupBallotBitCount ( global uint)
+0:146        'ballot' ( temp 4-component vector of uint)
+0:147      subgroupBallotInclusiveBitCount ( global uint)
+0:147        'ballot' ( temp 4-component vector of uint)
+0:148      subgroupBallotExclusiveBitCount ( global uint)
+0:148        'ballot' ( temp 4-component vector of uint)
+0:149      subgroupBallotFindLSB ( global uint)
+0:149        'ballot' ( temp 4-component vector of uint)
+0:150      subgroupBallotFindMSB ( global uint)
+0:150        'ballot' ( temp 4-component vector of uint)
+0:154  Function Definition: vote_works(vf4; ( global void)
+0:154    Function Parameters: 
+0:154      'f4' ( in 4-component vector of float)
+0:156    Sequence
+0:156      subgroupAll ( global bool)
+0:156        Constant:
+0:156          true (const bool)
+0:157      subgroupAny ( global bool)
+0:157        Constant:
+0:157          false (const bool)
+0:158      subgroupAllEqual ( global bool)
+0:158        'f4' ( in 4-component vector of float)
+0:163  Function Definition: shuffle_works(vf4; ( global void)
+0:163    Function Parameters: 
+0:163      'f4' ( in 4-component vector of float)
+0:165    Sequence
+0:165      subgroupShuffle ( global 4-component vector of float)
+0:165        'f4' ( in 4-component vector of float)
+0:165        Constant:
+0:165          0 (const uint)
+0:166      subgroupShuffleXor ( global 4-component vector of float)
+0:166        'f4' ( in 4-component vector of float)
+0:166        Constant:
+0:166          1 (const uint)
+0:167      subgroupShuffleUp ( global 4-component vector of float)
+0:167        'f4' ( in 4-component vector of float)
+0:167        Constant:
+0:167          1 (const uint)
+0:168      subgroupShuffleDown ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:168        Constant:
+0:168          1 (const uint)
+0:172  Function Definition: arith_works(vf4; ( global void)
+0:172    Function Parameters: 
+0:172      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:175      subgroupAdd ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupMul ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:177      subgroupMin ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:178      subgroupMax ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:179      subgroupAnd ( global 4-component vector of uint)
+0:179        'ballot' ( temp 4-component vector of uint)
+0:180      subgroupOr ( global 4-component vector of uint)
+0:180        'ballot' ( temp 4-component vector of uint)
+0:181      subgroupXor ( global 4-component vector of uint)
+0:181        'ballot' ( temp 4-component vector of uint)
+0:182      subgroupInclusiveAdd ( global 4-component vector of float)
+0:182        'f4' ( in 4-component vector of float)
+0:183      subgroupInclusiveMul ( global 4-component vector of float)
+0:183        'f4' ( in 4-component vector of float)
+0:184      subgroupInclusiveMin ( global 4-component vector of float)
+0:184        'f4' ( in 4-component vector of float)
+0:185      subgroupInclusiveMax ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:186        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupInclusiveOr ( global 4-component vector of uint)
+0:187        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupInclusiveXor ( global 4-component vector of uint)
+0:188        'ballot' ( temp 4-component vector of uint)
+0:189      subgroupExclusiveAdd ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:190      subgroupExclusiveMul ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:191      subgroupExclusiveMin ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:192      subgroupExclusiveMax ( global 4-component vector of float)
+0:192        'f4' ( in 4-component vector of float)
+0:193      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:193        'ballot' ( temp 4-component vector of uint)
+0:194      subgroupExclusiveOr ( global 4-component vector of uint)
+0:194        'ballot' ( temp 4-component vector of uint)
+0:195      subgroupExclusiveXor ( global 4-component vector of uint)
+0:195        'ballot' ( temp 4-component vector of uint)
+0:199  Function Definition: clustered_works(vf4; ( global void)
+0:199    Function Parameters: 
+0:199      'f4' ( in 4-component vector of float)
+0:201    Sequence
+0:201      Sequence
+0:201        move second child to first child ( temp 4-component vector of uint)
+0:201          'ballot' ( temp 4-component vector of uint)
+0:201          Constant:
+0:201            85 (const uint)
+0:201            0 (const uint)
+0:201            0 (const uint)
+0:201            0 (const uint)
+0:202      subgroupClusteredAdd ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:202        Constant:
+0:202          2 (const uint)
+0:203      subgroupClusteredMul ( global 4-component vector of float)
+0:203        'f4' ( in 4-component vector of float)
+0:203        Constant:
+0:203          2 (const uint)
+0:204      subgroupClusteredMin ( global 4-component vector of float)
+0:204        'f4' ( in 4-component vector of float)
+0:204        Constant:
+0:204          2 (const uint)
+0:205      subgroupClusteredMax ( global 4-component vector of float)
+0:205        'f4' ( in 4-component vector of float)
+0:205        Constant:
+0:205          2 (const uint)
+0:206      subgroupClusteredAnd ( global 4-component vector of uint)
+0:206        'ballot' ( temp 4-component vector of uint)
+0:206        Constant:
+0:206          2 (const uint)
+0:207      subgroupClusteredOr ( global 4-component vector of uint)
+0:207        'ballot' ( temp 4-component vector of uint)
+0:207        Constant:
+0:207          2 (const uint)
+0:208      subgroupClusteredXor ( global 4-component vector of uint)
+0:208        'ballot' ( temp 4-component vector of uint)
+0:208        Constant:
+0:208          2 (const uint)
+0:212  Function Definition: quad_works(vf4; ( global void)
+0:212    Function Parameters: 
+0:212      'f4' ( in 4-component vector of float)
+0:214    Sequence
+0:214      subgroupQuadBroadcast ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        Constant:
+0:214          0 (const uint)
+0:215      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:216      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:216        'f4' ( in 4-component vector of float)
+0:217      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:217        'f4' ( in 4-component vector of float)
+0:221  Function Definition: partitioned_works(vf4; ( global void)
+0:221    Function Parameters: 
+0:221      'f4' ( in 4-component vector of float)
+0:223    Sequence
+0:223      Sequence
+0:223        move second child to first child ( temp 4-component vector of uint)
+0:223          'parti' ( temp 4-component vector of uint)
+0:223          subgroupPartitionNV ( global 4-component vector of uint)
+0:223            'f4' ( in 4-component vector of float)
+0:224      Sequence
+0:224        move second child to first child ( temp 4-component vector of uint)
+0:224          'ballot' ( temp 4-component vector of uint)
+0:224          Constant:
+0:224            85 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:225      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
+0:225        'parti' ( temp 4-component vector of uint)
+0:226      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
+0:226        'parti' ( temp 4-component vector of uint)
+0:227      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:227        'parti' ( temp 4-component vector of uint)
+0:228      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:229        'ballot' ( temp 4-component vector of uint)
+0:229        'parti' ( temp 4-component vector of uint)
+0:230      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:230        'ballot' ( temp 4-component vector of uint)
+0:230        'parti' ( temp 4-component vector of uint)
+0:231      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:231        'parti' ( temp 4-component vector of uint)
+0:232      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:232        'f4' ( in 4-component vector of float)
+0:232        'parti' ( temp 4-component vector of uint)
+0:233      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:233        'f4' ( in 4-component vector of float)
+0:233        'parti' ( temp 4-component vector of uint)
+0:234      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:234        'f4' ( in 4-component vector of float)
+0:234        'parti' ( temp 4-component vector of uint)
+0:235      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:235        'f4' ( in 4-component vector of float)
+0:235        'parti' ( temp 4-component vector of uint)
+0:236      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:236        'ballot' ( temp 4-component vector of uint)
+0:236        'parti' ( temp 4-component vector of uint)
+0:237      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:237        'ballot' ( temp 4-component vector of uint)
+0:237        'parti' ( temp 4-component vector of uint)
+0:238      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:238        'ballot' ( temp 4-component vector of uint)
+0:238        'parti' ( temp 4-component vector of uint)
+0:239      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:239        'parti' ( temp 4-component vector of uint)
+0:240      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:240        'parti' ( temp 4-component vector of uint)
+0:241      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:241        'f4' ( in 4-component vector of float)
+0:241        'parti' ( temp 4-component vector of uint)
+0:242      ERROR: Bad aggregation op
+ ( global 4-component vector of float)
+0:242        'f4' ( in 4-component vector of float)
+0:242        'parti' ( temp 4-component vector of uint)
+0:243      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:243        'ballot' ( temp 4-component vector of uint)
+0:243        'parti' ( temp 4-component vector of uint)
+0:244      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:244        'ballot' ( temp 4-component vector of uint)
+0:244        'parti' ( temp 4-component vector of uint)
+0:245      ERROR: Bad aggregation op
+ ( global 4-component vector of uint)
+0:245        'ballot' ( temp 4-component vector of uint)
+0:245        'parti' ( temp 4-component vector of uint)
+0:?   Linker Objects
+0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
+
+Linked miss stage:
+
+
+Shader version: 460
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+Requested GL_NV_ray_tracing
+Requested GL_NV_shader_subgroup_partitioned
+ERROR: node is still EOpNull!
+0:109  Function Definition: main( ( global void)
+0:109    Function Parameters: 
+0:111    Sequence
+0:111      Sequence
+0:111        move second child to first child ( temp 3-component vector of uint)
+0:111          'v0' ( temp 3-component vector of uint)
+0:111          'gl_LaunchIDNV' ( in 3-component vector of uint LaunchIdNV)
+0:112      Sequence
+0:112        move second child to first child ( temp 3-component vector of uint)
+0:112          'v1' ( temp 3-component vector of uint)
+0:112          'gl_LaunchSizeNV' ( in 3-component vector of uint LaunchSizeNV)
+0:113      Sequence
+0:113        move second child to first child ( temp 3-component vector of float)
+0:113          'v2' ( temp 3-component vector of float)
+0:113          'gl_WorldRayOriginNV' ( in 3-component vector of float WorldRayOriginNV)
+0:114      Sequence
+0:114        move second child to first child ( temp 3-component vector of float)
+0:114          'v3' ( temp 3-component vector of float)
+0:114          'gl_WorldRayDirectionNV' ( in 3-component vector of float WorldRayDirectionNV)
+0:115      Sequence
+0:115        move second child to first child ( temp 3-component vector of float)
+0:115          'v4' ( temp 3-component vector of float)
+0:115          'gl_ObjectRayOriginNV' ( in 3-component vector of float ObjectRayOriginNV)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v5' ( temp 3-component vector of float)
+0:116          'gl_ObjectRayDirectionNV' ( in 3-component vector of float ObjectRayDirectionNV)
+0:117      Sequence
+0:117        move second child to first child ( temp float)
+0:117          'v6' ( temp float)
+0:117          'gl_RayTminNV' ( in float ObjectRayTminNV)
+0:118      Sequence
+0:118        move second child to first child ( temp float)
+0:118          'v7' ( temp float)
+0:118          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
+0:119      traceNV ( global void)
+0:119        'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        Constant:
+0:119          1 (const uint)
+0:119        Constant:
+0:119          2 (const uint)
+0:119        Constant:
+0:119          3 (const uint)
+0:119        Constant:
+0:119          0 (const uint)
+0:119        Constant:
+0:119          0.500000
+0:119          0.500000
+0:119          0.500000
+0:119        Constant:
+0:119          0.500000
+0:119        Constant:
+0:119          1.000000
+0:119          1.000000
+0:119          1.000000
+0:119        Constant:
+0:119          0.750000
+0:119        Constant:
+0:119          1 (const int)
+0:?   Linker Objects
+0:?     'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV)
+0:?     'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float)
+0:?     'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float)
+
diff --git a/Test/glsl.460.subgroup.rahit b/Test/glsl.460.subgroup.rahit
new file mode 100644
index 0000000..3ee7378
--- /dev/null
+++ b/Test/glsl.460.subgroup.rahit
@@ -0,0 +1,255 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+layout(location = 1) rayPayloadInNV vec4 incomingPayload;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDNV;
+	uvec3 v1 = gl_LaunchSizeNV;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexNV;
+	vec3 v5 = gl_WorldRayOriginNV;
+	vec3 v6 = gl_WorldRayDirectionNV;
+	vec3 v7 = gl_ObjectRayOriginNV;
+	vec3 v8 = gl_ObjectRayDirectionNV;
+	float v9 = gl_RayTminNV;
+	float v10 = gl_RayTmaxNV;
+	float v11 = gl_HitTNV;
+	uint v12 = gl_HitKindNV;
+	mat4x3 v13 = gl_ObjectToWorldNV;
+	mat4x3 v14 = gl_WorldToObjectNV;
+	incomingPayload = vec4(0.5f);
+	if (v2 == 1)
+	    ignoreIntersectionNV();
+	else
+	    terminateRayNV();
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
diff --git a/Test/glsl.460.subgroup.rcall b/Test/glsl.460.subgroup.rcall
new file mode 100644
index 0000000..dc7ad2e
--- /dev/null
+++ b/Test/glsl.460.subgroup.rcall
@@ -0,0 +1,243 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+layout(location = 0) callableDataNV vec4 data0;
+layout(location = 1) callableDataInNV dataBlock {
+	uint data1;
+};
+void main()
+{
+	uvec3 id = gl_LaunchIDNV;
+	uvec3 size = gl_LaunchSizeNV;
+	data1 = 256U;
+	executeCallableNV(2,1);
+}
+
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
diff --git a/Test/glsl.460.subgroup.rchit b/Test/glsl.460.subgroup.rchit
new file mode 100644
index 0000000..cbe3517
--- /dev/null
+++ b/Test/glsl.460.subgroup.rchit
@@ -0,0 +1,253 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV;
+layout(location = 0) rayPayloadNV vec4 localPayload;
+layout(location = 1) rayPayloadInNV vec4 incomingPayload;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDNV;
+	uvec3 v1 = gl_LaunchSizeNV;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexNV;
+	vec3 v5 = gl_WorldRayOriginNV;
+	vec3 v6 = gl_WorldRayDirectionNV;
+	vec3 v7 = gl_ObjectRayOriginNV;
+	vec3 v8 = gl_ObjectRayDirectionNV;
+	float v9 = gl_RayTminNV;
+	float v10 = gl_RayTmaxNV;
+	float v11 = gl_HitTNV;
+	uint v12 = gl_HitKindNV;
+	mat4x3 v13 = gl_ObjectToWorldNV;
+	mat4x3 v14 = gl_WorldToObjectNV;
+	traceNV(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
diff --git a/Test/glsl.460.subgroup.rgen b/Test/glsl.460.subgroup.rgen
new file mode 100644
index 0000000..9184e15
--- /dev/null
+++ b/Test/glsl.460.subgroup.rgen
@@ -0,0 +1,247 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV0;
+layout(binding = 1, set = 0) uniform accelerationStructureNV accNV1; // Unused
+layout(location = 0) rayPayloadNV vec4 payload;
+layout(shaderRecordNV) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+
+};
+void main()
+{
+    uint lx = gl_LaunchIDNV.x;
+    uint ly = gl_LaunchIDNV.y;
+    uint sx = gl_LaunchSizeNV.x;
+    uint sy = gl_LaunchSizeNV.y;
+    traceNV(accNV0, lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
diff --git a/Test/glsl.460.subgroup.rint b/Test/glsl.460.subgroup.rint
new file mode 100644
index 0000000..7a58804
--- /dev/null
+++ b/Test/glsl.460.subgroup.rint
@@ -0,0 +1,253 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+
+hitAttributeNV vec4 iAttr;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDNV;
+	uvec3 v1 = gl_LaunchSizeNV;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexNV;
+	vec3 v5 = gl_WorldRayOriginNV;
+	vec3 v6 = gl_WorldRayDirectionNV;
+	vec3 v7 = gl_ObjectRayOriginNV;
+	vec3 v8 = gl_ObjectRayDirectionNV;
+	float v9 = gl_RayTminNV;
+	float v10 = gl_RayTmaxNV;
+	mat4x3 v11 = gl_ObjectToWorldNV;
+	mat4x3 v12 = gl_WorldToObjectNV;
+	iAttr = vec4(0.5f,0.5f,0.0f,1.0f);
+	reportIntersectionNV(0.5, 1U);
+}
+
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
diff --git a/Test/glsl.460.subgroup.rmiss b/Test/glsl.460.subgroup.rmiss
new file mode 100644
index 0000000..4d629d6
--- /dev/null
+++ b/Test/glsl.460.subgroup.rmiss
@@ -0,0 +1,247 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+
+
+vec4 undeclared_errors(vec4 f4)
+{
+  vec4 result;
+  gl_SubgroupSize;               // ERROR, extension not enabled (basic)
+  gl_SubgroupInvocationID;       // ERROR, extension not enabled (basic)
+  subgroupBarrier();             // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrier();       // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic)
+  subgroupMemoryBarrierImage();  // ERROR, extension not enabled (basic)
+  subgroupElect();               // ERROR, extension not enabled (basic)
+  gl_NumSubgroups;               // ERROR, only defined in compute
+  gl_SubgroupID;                 // ERROR, only defined in compute
+  subgroupMemoryBarrierShared(); // ERROR, only defined in compute
+
+  subgroupAll(true);        // ERROR extension not enabled (vote)
+  subgroupAny(false);       // ERROR extension not enabled (vote)
+  subgroupAllEqual(f4);     // ERROR extension not enabled (vote)
+
+  gl_SubgroupEqMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupGtMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLeMask;                        // ERROR extension not enabled (ballot)
+  gl_SubgroupLtMask;                        // ERROR extension not enabled (ballot)
+  subgroupBroadcast(f4, 0);                 // ERROR extension not enabled (ballot)
+  subgroupBroadcastFirst(f4);               // ERROR extension not enabled (ballot)
+  uvec4 ballot = subgroupBallot(false);     // ERROR extension not enabled (ballot)
+  subgroupInverseBallot(uvec4(0x1));        // ERROR extension not enabled (ballot)
+  subgroupBallotBitExtract(ballot, 0);      // ERROR extension not enabled (ballot)
+  subgroupBallotBitCount(ballot);           // ERROR extension not enabled (ballot)
+  subgroupBallotInclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotExclusiveBitCount(ballot);  // ERROR extension not enabled (ballot)
+  subgroupBallotFindLSB(ballot);            // ERROR extension not enabled (ballot)
+  subgroupBallotFindMSB(ballot);            // ERROR extension not enabled (ballot)
+
+  subgroupShuffle(f4, 0);           // ERROR extension not enabled (shuffle)
+  subgroupShuffleXor(f4, 0x1);      // ERROR extension not enabled (shuffle)
+  subgroupShuffleUp(f4, 1);         // ERROR extension not enabled (shuffle_relative)
+  subgroupShuffleDown(f4, 1);       // ERROR extension not enabled (shuffle_relative)
+
+  result = subgroupAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupMul(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMin(f4);                  // ERROR, extension not enabled (arith)
+  subgroupMax(f4);                  // ERROR, extension not enabled (arith)
+  subgroupAnd(ballot);              // ERROR, extension not enabled (arith)
+  subgroupOr(ballot);               // ERROR, extension not enabled (arith)
+  subgroupXor(ballot);              // ERROR, extension not enabled (arith)
+  subgroupInclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupInclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupInclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupInclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveAdd(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMul(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMin(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveMax(f4);         // ERROR, extension not enabled (arith)
+  subgroupExclusiveAnd(ballot);     // ERROR, extension not enabled (arith)
+  subgroupExclusiveOr(ballot);      // ERROR, extension not enabled (arith)
+  subgroupExclusiveXor(ballot);     // ERROR, extension not enabled (arith)
+
+  subgroupClusteredAdd(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMul(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMin(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredMax(f4, 2);      // ERROR, extension not enabled (clustered)
+  subgroupClusteredAnd(ballot, 2);  // ERROR, extension not enabled (clustered)
+  subgroupClusteredOr(ballot, 2);   // ERROR, extension not enabled (clustered)
+  subgroupClusteredXor(ballot, 2);  // ERROR, extension not enabled (clustered)
+
+  subgroupQuadBroadcast(f4, 0);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapHorizontal(f4);   // ERROR, extension not enabled (quad)
+  subgroupQuadSwapVertical(f4);     // ERROR, extension not enabled (quad)
+  subgroupQuadSwapDiagonal(f4);     // ERROR, extension not enabled (quad)
+
+  uvec4 parti = subgroupPartitionNV(f4);                // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAddNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMulNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMinNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedMaxNV(f4, parti);                  // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedAndNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedOrNV(ballot, parti);               // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedXorNV(ballot, parti);              // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedInclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAddNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMulNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMinNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveMaxNV(f4, parti);         // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveAndNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveOrNV(ballot, parti);      // ERROR, extension not enabled (partitioned)
+  subgroupPartitionedExclusiveXorNV(ballot, parti);     // ERROR, extension not enabled (partitioned)
+
+  return result;
+}
+
+
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV;
+layout(location = 0) rayPayloadNV vec4 localPayload;
+layout(location = 1) rayPayloadInNV vec4 incomingPayload;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDNV;
+	uvec3 v1 = gl_LaunchSizeNV;
+	vec3 v2 = gl_WorldRayOriginNV;
+	vec3 v3 = gl_WorldRayDirectionNV;
+	vec3 v4 = gl_ObjectRayOriginNV;
+	vec3 v5 = gl_ObjectRayDirectionNV;
+	float v6 = gl_RayTminNV;
+	float v7 = gl_RayTmaxNV;
+	traceNV(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
+#extension GL_NV_shader_subgroup_partitioned: enable
+void partitioned_works(vec4 f4)
+{
+  uvec4 parti = subgroupPartitionNV(f4);
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupPartitionedAddNV(f4, parti);
+  subgroupPartitionedMulNV(f4, parti);
+  subgroupPartitionedMinNV(f4, parti);
+  subgroupPartitionedMaxNV(f4, parti);
+  subgroupPartitionedAndNV(ballot, parti);
+  subgroupPartitionedOrNV(ballot, parti);
+  subgroupPartitionedXorNV(ballot, parti);
+  subgroupPartitionedInclusiveAddNV(f4, parti);
+  subgroupPartitionedInclusiveMulNV(f4, parti);
+  subgroupPartitionedInclusiveMinNV(f4, parti);
+  subgroupPartitionedInclusiveMaxNV(f4, parti);
+  subgroupPartitionedInclusiveAndNV(ballot, parti);
+  subgroupPartitionedInclusiveOrNV(ballot, parti);
+  subgroupPartitionedInclusiveXorNV(ballot, parti);
+  subgroupPartitionedExclusiveAddNV(f4, parti);
+  subgroupPartitionedExclusiveMulNV(f4, parti);
+  subgroupPartitionedExclusiveMinNV(f4, parti);
+  subgroupPartitionedExclusiveMaxNV(f4, parti);
+  subgroupPartitionedExclusiveAndNV(ballot, parti);
+  subgroupPartitionedExclusiveOrNV(ballot, parti);
+  subgroupPartitionedExclusiveXorNV(ballot, parti);
+}
+
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 5e79144..b24a4a1 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -255,6 +255,12 @@
         "glsl.450.subgroupVote.comp",
         "glsl.460.subgroup.mesh",
         "glsl.460.subgroup.task",
+        "glsl.460.subgroup.rahit",
+        "glsl.460.subgroup.rcall",
+        "glsl.460.subgroup.rchit",
+        "glsl.460.subgroup.rgen",
+        "glsl.460.subgroup.rint",
+        "glsl.460.subgroup.rmiss",
         "glsl.es320.subgroup.frag",
         "glsl.es320.subgroup.geom",
         "glsl.es320.subgroup.tesc",