1617a3babSopenharmony_ci#version 460 2617a3babSopenharmony_ci#extension GL_NV_ray_tracing : enable 3617a3babSopenharmony_ci 4617a3babSopenharmony_civec4 undeclared_errors(vec4 f4) 5617a3babSopenharmony_ci{ 6617a3babSopenharmony_ci vec4 result; 7617a3babSopenharmony_ci gl_SubgroupSize; // ERROR, extension not enabled (basic) 8617a3babSopenharmony_ci gl_SubgroupInvocationID; // ERROR, extension not enabled (basic) 9617a3babSopenharmony_ci subgroupBarrier(); // ERROR, extension not enabled (basic) 10617a3babSopenharmony_ci subgroupMemoryBarrier(); // ERROR, extension not enabled (basic) 11617a3babSopenharmony_ci subgroupMemoryBarrierBuffer(); // ERROR, extension not enabled (basic) 12617a3babSopenharmony_ci subgroupMemoryBarrierImage(); // ERROR, extension not enabled (basic) 13617a3babSopenharmony_ci subgroupElect(); // ERROR, extension not enabled (basic) 14617a3babSopenharmony_ci gl_NumSubgroups; // ERROR, only defined in compute 15617a3babSopenharmony_ci gl_SubgroupID; // ERROR, only defined in compute 16617a3babSopenharmony_ci subgroupMemoryBarrierShared(); // ERROR, only defined in compute 17617a3babSopenharmony_ci 18617a3babSopenharmony_ci subgroupAll(true); // ERROR extension not enabled (vote) 19617a3babSopenharmony_ci subgroupAny(false); // ERROR extension not enabled (vote) 20617a3babSopenharmony_ci subgroupAllEqual(f4); // ERROR extension not enabled (vote) 21617a3babSopenharmony_ci 22617a3babSopenharmony_ci gl_SubgroupEqMask; // ERROR extension not enabled (ballot) 23617a3babSopenharmony_ci gl_SubgroupGeMask; // ERROR extension not enabled (ballot) 24617a3babSopenharmony_ci gl_SubgroupGtMask; // ERROR extension not enabled (ballot) 25617a3babSopenharmony_ci gl_SubgroupLeMask; // ERROR extension not enabled (ballot) 26617a3babSopenharmony_ci gl_SubgroupLtMask; // ERROR extension not enabled (ballot) 27617a3babSopenharmony_ci subgroupBroadcast(f4, 0); // ERROR extension not enabled (ballot) 28617a3babSopenharmony_ci subgroupBroadcastFirst(f4); // ERROR extension not enabled (ballot) 29617a3babSopenharmony_ci uvec4 ballot = subgroupBallot(false); // ERROR extension not enabled (ballot) 30617a3babSopenharmony_ci subgroupInverseBallot(uvec4(0x1)); // ERROR extension not enabled (ballot) 31617a3babSopenharmony_ci subgroupBallotBitExtract(ballot, 0); // ERROR extension not enabled (ballot) 32617a3babSopenharmony_ci subgroupBallotBitCount(ballot); // ERROR extension not enabled (ballot) 33617a3babSopenharmony_ci subgroupBallotInclusiveBitCount(ballot); // ERROR extension not enabled (ballot) 34617a3babSopenharmony_ci subgroupBallotExclusiveBitCount(ballot); // ERROR extension not enabled (ballot) 35617a3babSopenharmony_ci subgroupBallotFindLSB(ballot); // ERROR extension not enabled (ballot) 36617a3babSopenharmony_ci subgroupBallotFindMSB(ballot); // ERROR extension not enabled (ballot) 37617a3babSopenharmony_ci 38617a3babSopenharmony_ci subgroupShuffle(f4, 0); // ERROR extension not enabled (shuffle) 39617a3babSopenharmony_ci subgroupShuffleXor(f4, 0x1); // ERROR extension not enabled (shuffle) 40617a3babSopenharmony_ci subgroupShuffleUp(f4, 1); // ERROR extension not enabled (shuffle_relative) 41617a3babSopenharmony_ci subgroupShuffleDown(f4, 1); // ERROR extension not enabled (shuffle_relative) 42617a3babSopenharmony_ci 43617a3babSopenharmony_ci result = subgroupAdd(f4); // ERROR, extension not enabled (arith) 44617a3babSopenharmony_ci subgroupMul(f4); // ERROR, extension not enabled (arith) 45617a3babSopenharmony_ci subgroupMin(f4); // ERROR, extension not enabled (arith) 46617a3babSopenharmony_ci subgroupMax(f4); // ERROR, extension not enabled (arith) 47617a3babSopenharmony_ci subgroupAnd(ballot); // ERROR, extension not enabled (arith) 48617a3babSopenharmony_ci subgroupOr(ballot); // ERROR, extension not enabled (arith) 49617a3babSopenharmony_ci subgroupXor(ballot); // ERROR, extension not enabled (arith) 50617a3babSopenharmony_ci subgroupInclusiveAdd(f4); // ERROR, extension not enabled (arith) 51617a3babSopenharmony_ci subgroupInclusiveMul(f4); // ERROR, extension not enabled (arith) 52617a3babSopenharmony_ci subgroupInclusiveMin(f4); // ERROR, extension not enabled (arith) 53617a3babSopenharmony_ci subgroupInclusiveMax(f4); // ERROR, extension not enabled (arith) 54617a3babSopenharmony_ci subgroupInclusiveAnd(ballot); // ERROR, extension not enabled (arith) 55617a3babSopenharmony_ci subgroupInclusiveOr(ballot); // ERROR, extension not enabled (arith) 56617a3babSopenharmony_ci subgroupInclusiveXor(ballot); // ERROR, extension not enabled (arith) 57617a3babSopenharmony_ci subgroupExclusiveAdd(f4); // ERROR, extension not enabled (arith) 58617a3babSopenharmony_ci subgroupExclusiveMul(f4); // ERROR, extension not enabled (arith) 59617a3babSopenharmony_ci subgroupExclusiveMin(f4); // ERROR, extension not enabled (arith) 60617a3babSopenharmony_ci subgroupExclusiveMax(f4); // ERROR, extension not enabled (arith) 61617a3babSopenharmony_ci subgroupExclusiveAnd(ballot); // ERROR, extension not enabled (arith) 62617a3babSopenharmony_ci subgroupExclusiveOr(ballot); // ERROR, extension not enabled (arith) 63617a3babSopenharmony_ci subgroupExclusiveXor(ballot); // ERROR, extension not enabled (arith) 64617a3babSopenharmony_ci 65617a3babSopenharmony_ci subgroupClusteredAdd(f4, 2); // ERROR, extension not enabled (clustered) 66617a3babSopenharmony_ci subgroupClusteredMul(f4, 2); // ERROR, extension not enabled (clustered) 67617a3babSopenharmony_ci subgroupClusteredMin(f4, 2); // ERROR, extension not enabled (clustered) 68617a3babSopenharmony_ci subgroupClusteredMax(f4, 2); // ERROR, extension not enabled (clustered) 69617a3babSopenharmony_ci subgroupClusteredAnd(ballot, 2); // ERROR, extension not enabled (clustered) 70617a3babSopenharmony_ci subgroupClusteredOr(ballot, 2); // ERROR, extension not enabled (clustered) 71617a3babSopenharmony_ci subgroupClusteredXor(ballot, 2); // ERROR, extension not enabled (clustered) 72617a3babSopenharmony_ci 73617a3babSopenharmony_ci subgroupQuadBroadcast(f4, 0); // ERROR, extension not enabled (quad) 74617a3babSopenharmony_ci subgroupQuadSwapHorizontal(f4); // ERROR, extension not enabled (quad) 75617a3babSopenharmony_ci subgroupQuadSwapVertical(f4); // ERROR, extension not enabled (quad) 76617a3babSopenharmony_ci subgroupQuadSwapDiagonal(f4); // ERROR, extension not enabled (quad) 77617a3babSopenharmony_ci 78617a3babSopenharmony_ci uvec4 parti = subgroupPartitionNV(f4); // ERROR, extension not enabled (partitioned) 79617a3babSopenharmony_ci subgroupPartitionedAddNV(f4, parti); // ERROR, extension not enabled (partitioned) 80617a3babSopenharmony_ci subgroupPartitionedMulNV(f4, parti); // ERROR, extension not enabled (partitioned) 81617a3babSopenharmony_ci subgroupPartitionedMinNV(f4, parti); // ERROR, extension not enabled (partitioned) 82617a3babSopenharmony_ci subgroupPartitionedMaxNV(f4, parti); // ERROR, extension not enabled (partitioned) 83617a3babSopenharmony_ci subgroupPartitionedAndNV(ballot, parti); // ERROR, extension not enabled (partitioned) 84617a3babSopenharmony_ci subgroupPartitionedOrNV(ballot, parti); // ERROR, extension not enabled (partitioned) 85617a3babSopenharmony_ci subgroupPartitionedXorNV(ballot, parti); // ERROR, extension not enabled (partitioned) 86617a3babSopenharmony_ci subgroupPartitionedInclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned) 87617a3babSopenharmony_ci subgroupPartitionedInclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned) 88617a3babSopenharmony_ci subgroupPartitionedInclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned) 89617a3babSopenharmony_ci subgroupPartitionedInclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned) 90617a3babSopenharmony_ci subgroupPartitionedInclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned) 91617a3babSopenharmony_ci subgroupPartitionedInclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned) 92617a3babSopenharmony_ci subgroupPartitionedInclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned) 93617a3babSopenharmony_ci subgroupPartitionedExclusiveAddNV(f4, parti); // ERROR, extension not enabled (partitioned) 94617a3babSopenharmony_ci subgroupPartitionedExclusiveMulNV(f4, parti); // ERROR, extension not enabled (partitioned) 95617a3babSopenharmony_ci subgroupPartitionedExclusiveMinNV(f4, parti); // ERROR, extension not enabled (partitioned) 96617a3babSopenharmony_ci subgroupPartitionedExclusiveMaxNV(f4, parti); // ERROR, extension not enabled (partitioned) 97617a3babSopenharmony_ci subgroupPartitionedExclusiveAndNV(ballot, parti); // ERROR, extension not enabled (partitioned) 98617a3babSopenharmony_ci subgroupPartitionedExclusiveOrNV(ballot, parti); // ERROR, extension not enabled (partitioned) 99617a3babSopenharmony_ci subgroupPartitionedExclusiveXorNV(ballot, parti); // ERROR, extension not enabled (partitioned) 100617a3babSopenharmony_ci 101617a3babSopenharmony_ci return result; 102617a3babSopenharmony_ci} 103617a3babSopenharmony_ci 104617a3babSopenharmony_ci 105617a3babSopenharmony_cilayout(location = 1) rayPayloadInNV vec4 incomingPayload; 106617a3babSopenharmony_civoid main() 107617a3babSopenharmony_ci{ 108617a3babSopenharmony_ci uvec3 v0 = gl_LaunchIDNV; 109617a3babSopenharmony_ci uvec3 v1 = gl_LaunchSizeNV; 110617a3babSopenharmony_ci int v2 = gl_PrimitiveID; 111617a3babSopenharmony_ci int v3 = gl_InstanceID; 112617a3babSopenharmony_ci int v4 = gl_InstanceCustomIndexNV; 113617a3babSopenharmony_ci vec3 v5 = gl_WorldRayOriginNV; 114617a3babSopenharmony_ci vec3 v6 = gl_WorldRayDirectionNV; 115617a3babSopenharmony_ci vec3 v7 = gl_ObjectRayOriginNV; 116617a3babSopenharmony_ci vec3 v8 = gl_ObjectRayDirectionNV; 117617a3babSopenharmony_ci float v9 = gl_RayTminNV; 118617a3babSopenharmony_ci float v10 = gl_RayTmaxNV; 119617a3babSopenharmony_ci float v11 = gl_HitTNV; 120617a3babSopenharmony_ci uint v12 = gl_HitKindNV; 121617a3babSopenharmony_ci mat4x3 v13 = gl_ObjectToWorldNV; 122617a3babSopenharmony_ci mat4x3 v14 = gl_WorldToObjectNV; 123617a3babSopenharmony_ci incomingPayload = vec4(0.5f); 124617a3babSopenharmony_ci if (v2 == 1) 125617a3babSopenharmony_ci ignoreIntersectionNV(); 126617a3babSopenharmony_ci else 127617a3babSopenharmony_ci terminateRayNV(); 128617a3babSopenharmony_ci} 129617a3babSopenharmony_ci 130617a3babSopenharmony_ci#extension GL_KHR_shader_subgroup_basic: enable 131617a3babSopenharmony_civoid basic_works (void) 132617a3babSopenharmony_ci{ 133617a3babSopenharmony_ci gl_SubgroupSize; 134617a3babSopenharmony_ci gl_SubgroupInvocationID; 135617a3babSopenharmony_ci subgroupBarrier(); 136617a3babSopenharmony_ci subgroupMemoryBarrier(); 137617a3babSopenharmony_ci subgroupMemoryBarrierBuffer(); 138617a3babSopenharmony_ci subgroupMemoryBarrierImage(); 139617a3babSopenharmony_ci subgroupElect(); 140617a3babSopenharmony_ci} 141617a3babSopenharmony_ci 142617a3babSopenharmony_ci#extension GL_KHR_shader_subgroup_ballot: enable 143617a3babSopenharmony_civoid ballot_works(vec4 f4) { 144617a3babSopenharmony_ci gl_SubgroupEqMask; 145617a3babSopenharmony_ci gl_SubgroupGeMask; 146617a3babSopenharmony_ci gl_SubgroupGtMask; 147617a3babSopenharmony_ci gl_SubgroupLeMask; 148617a3babSopenharmony_ci gl_SubgroupLtMask; 149617a3babSopenharmony_ci subgroupBroadcast(f4, 0); 150617a3babSopenharmony_ci subgroupBroadcastFirst(f4); 151617a3babSopenharmony_ci uvec4 ballot = subgroupBallot(false); 152617a3babSopenharmony_ci subgroupInverseBallot(uvec4(0x1)); 153617a3babSopenharmony_ci subgroupBallotBitExtract(ballot, 0); 154617a3babSopenharmony_ci subgroupBallotBitCount(ballot); 155617a3babSopenharmony_ci subgroupBallotInclusiveBitCount(ballot); 156617a3babSopenharmony_ci subgroupBallotExclusiveBitCount(ballot); 157617a3babSopenharmony_ci subgroupBallotFindLSB(ballot); 158617a3babSopenharmony_ci subgroupBallotFindMSB(ballot); 159617a3babSopenharmony_ci} 160617a3babSopenharmony_ci 161617a3babSopenharmony_ci#extension GL_KHR_shader_subgroup_vote: enable 162617a3babSopenharmony_civoid vote_works(vec4 f4) 163617a3babSopenharmony_ci{ 164617a3babSopenharmony_ci subgroupAll(true); 165617a3babSopenharmony_ci subgroupAny(false); 166617a3babSopenharmony_ci subgroupAllEqual(f4); 167617a3babSopenharmony_ci} 168617a3babSopenharmony_ci 169617a3babSopenharmony_ci#extension GL_KHR_shader_subgroup_shuffle: enable 170617a3babSopenharmony_ci#extension GL_KHR_shader_subgroup_shuffle_relative: enable 171617a3babSopenharmony_civoid shuffle_works(vec4 f4) 172617a3babSopenharmony_ci{ 173617a3babSopenharmony_ci subgroupShuffle(f4, 0); 174617a3babSopenharmony_ci subgroupShuffleXor(f4, 0x1); 175617a3babSopenharmony_ci subgroupShuffleUp(f4, 1); 176617a3babSopenharmony_ci subgroupShuffleDown(f4, 1); 177617a3babSopenharmony_ci} 178617a3babSopenharmony_ci 179617a3babSopenharmony_ci#extension GL_KHR_shader_subgroup_arithmetic: enable 180617a3babSopenharmony_civoid arith_works(vec4 f4) 181617a3babSopenharmony_ci{ 182617a3babSopenharmony_ci uvec4 ballot; 183617a3babSopenharmony_ci subgroupAdd(f4); 184617a3babSopenharmony_ci subgroupMul(f4); 185617a3babSopenharmony_ci subgroupMin(f4); 186617a3babSopenharmony_ci subgroupMax(f4); 187617a3babSopenharmony_ci subgroupAnd(ballot); 188617a3babSopenharmony_ci subgroupOr(ballot); 189617a3babSopenharmony_ci subgroupXor(ballot); 190617a3babSopenharmony_ci subgroupInclusiveAdd(f4); 191617a3babSopenharmony_ci subgroupInclusiveMul(f4); 192617a3babSopenharmony_ci subgroupInclusiveMin(f4); 193617a3babSopenharmony_ci subgroupInclusiveMax(f4); 194617a3babSopenharmony_ci subgroupInclusiveAnd(ballot); 195617a3babSopenharmony_ci subgroupInclusiveOr(ballot); 196617a3babSopenharmony_ci subgroupInclusiveXor(ballot); 197617a3babSopenharmony_ci subgroupExclusiveAdd(f4); 198617a3babSopenharmony_ci subgroupExclusiveMul(f4); 199617a3babSopenharmony_ci subgroupExclusiveMin(f4); 200617a3babSopenharmony_ci subgroupExclusiveMax(f4); 201617a3babSopenharmony_ci subgroupExclusiveAnd(ballot); 202617a3babSopenharmony_ci subgroupExclusiveOr(ballot); 203617a3babSopenharmony_ci subgroupExclusiveXor(ballot); 204617a3babSopenharmony_ci} 205617a3babSopenharmony_ci 206617a3babSopenharmony_ci#extension GL_KHR_shader_subgroup_clustered: enable 207617a3babSopenharmony_civoid clustered_works(vec4 f4) 208617a3babSopenharmony_ci{ 209617a3babSopenharmony_ci uvec4 ballot = uvec4(0x55,0,0,0); 210617a3babSopenharmony_ci subgroupClusteredAdd(f4, 2); 211617a3babSopenharmony_ci subgroupClusteredMul(f4, 2); 212617a3babSopenharmony_ci subgroupClusteredMin(f4, 2); 213617a3babSopenharmony_ci subgroupClusteredMax(f4, 2); 214617a3babSopenharmony_ci subgroupClusteredAnd(ballot, 2); 215617a3babSopenharmony_ci subgroupClusteredOr(ballot, 2); 216617a3babSopenharmony_ci subgroupClusteredXor(ballot, 2); 217617a3babSopenharmony_ci} 218617a3babSopenharmony_ci 219617a3babSopenharmony_ci#extension GL_KHR_shader_subgroup_quad: enable 220617a3babSopenharmony_civoid quad_works(vec4 f4) 221617a3babSopenharmony_ci{ 222617a3babSopenharmony_ci subgroupQuadBroadcast(f4, 0); 223617a3babSopenharmony_ci subgroupQuadSwapHorizontal(f4); 224617a3babSopenharmony_ci subgroupQuadSwapVertical(f4); 225617a3babSopenharmony_ci subgroupQuadSwapDiagonal(f4); 226617a3babSopenharmony_ci} 227617a3babSopenharmony_ci 228617a3babSopenharmony_ci#extension GL_NV_shader_subgroup_partitioned: enable 229617a3babSopenharmony_civoid partitioned_works(vec4 f4) 230617a3babSopenharmony_ci{ 231617a3babSopenharmony_ci uvec4 parti = subgroupPartitionNV(f4); 232617a3babSopenharmony_ci uvec4 ballot = uvec4(0x55,0,0,0); 233617a3babSopenharmony_ci subgroupPartitionedAddNV(f4, parti); 234617a3babSopenharmony_ci subgroupPartitionedMulNV(f4, parti); 235617a3babSopenharmony_ci subgroupPartitionedMinNV(f4, parti); 236617a3babSopenharmony_ci subgroupPartitionedMaxNV(f4, parti); 237617a3babSopenharmony_ci subgroupPartitionedAndNV(ballot, parti); 238617a3babSopenharmony_ci subgroupPartitionedOrNV(ballot, parti); 239617a3babSopenharmony_ci subgroupPartitionedXorNV(ballot, parti); 240617a3babSopenharmony_ci subgroupPartitionedInclusiveAddNV(f4, parti); 241617a3babSopenharmony_ci subgroupPartitionedInclusiveMulNV(f4, parti); 242617a3babSopenharmony_ci subgroupPartitionedInclusiveMinNV(f4, parti); 243617a3babSopenharmony_ci subgroupPartitionedInclusiveMaxNV(f4, parti); 244617a3babSopenharmony_ci subgroupPartitionedInclusiveAndNV(ballot, parti); 245617a3babSopenharmony_ci subgroupPartitionedInclusiveOrNV(ballot, parti); 246617a3babSopenharmony_ci subgroupPartitionedInclusiveXorNV(ballot, parti); 247617a3babSopenharmony_ci subgroupPartitionedExclusiveAddNV(f4, parti); 248617a3babSopenharmony_ci subgroupPartitionedExclusiveMulNV(f4, parti); 249617a3babSopenharmony_ci subgroupPartitionedExclusiveMinNV(f4, parti); 250617a3babSopenharmony_ci subgroupPartitionedExclusiveMaxNV(f4, parti); 251617a3babSopenharmony_ci subgroupPartitionedExclusiveAndNV(ballot, parti); 252617a3babSopenharmony_ci subgroupPartitionedExclusiveOrNV(ballot, parti); 253617a3babSopenharmony_ci subgroupPartitionedExclusiveXorNV(ballot, parti); 254617a3babSopenharmony_ci} 255617a3babSopenharmony_ci 256617a3babSopenharmony_ci// tests for NV_shader_sm_builtins 257617a3babSopenharmony_civoid sm_builtins_err() 258617a3babSopenharmony_ci{ 259617a3babSopenharmony_ci gl_WarpsPerSMNV; // ERROR, no extension 260617a3babSopenharmony_ci gl_SMCountNV; // ERROR, no extension 261617a3babSopenharmony_ci gl_WarpIDNV; // ERROR, no extension 262617a3babSopenharmony_ci gl_SMIDNV; // ERROR, no extension 263617a3babSopenharmony_ci} 264617a3babSopenharmony_ci 265617a3babSopenharmony_ci#ifdef GL_NV_shader_sm_builtins 266617a3babSopenharmony_ci#extension GL_NV_shader_sm_builtins : enable 267617a3babSopenharmony_ci#endif 268617a3babSopenharmony_ci 269617a3babSopenharmony_civoid sm_builtins() 270617a3babSopenharmony_ci{ 271617a3babSopenharmony_ci gl_WarpsPerSMNV; 272617a3babSopenharmony_ci gl_SMCountNV; 273617a3babSopenharmony_ci gl_WarpIDNV; 274617a3babSopenharmony_ci gl_SMIDNV; 275617a3babSopenharmony_ci} 276