SPIRV-Cross/reference/shaders/amd/shader_ballot.comp

33 lines
1.1 KiB
Plaintext
Raw Normal View History

2017-11-21 13:04:57 +00:00
#version 450
#extension GL_ARB_gpu_shader_int64 : require
2017-11-22 18:27:03 +00:00
#extension GL_ARB_shader_ballot : require
2017-11-21 13:04:57 +00:00
#extension GL_AMD_shader_ballot : require
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
layout(binding = 0, std430) buffer inputData
{
float inputDataArray[];
} _12;
layout(binding = 1, std430) buffer outputData
{
float outputDataArray[];
} _74;
void main()
{
float thisLaneData = _12.inputDataArray[gl_LocalInvocationID.x];
bool laneActive = thisLaneData > 0.0;
uint thisLaneOutputSlot = mbcntAMD(packUint2x32(uvec2(uvec4(unpackUint2x32(ballotARB(laneActive)), 0u, 0u).xy)));
2017-11-21 13:04:57 +00:00
int firstInvocation = readFirstInvocationARB(1);
int invocation = readInvocationARB(1, 0u);
vec3 swizzleInvocations = swizzleInvocationsAMD(vec3(0.0, 2.0, 1.0), uvec4(3u));
vec3 swizzelInvocationsMasked = swizzleInvocationsMaskedAMD(vec3(0.0, 2.0, 1.0), uvec3(2u));
vec3 writeInvocation = writeInvocationAMD(swizzleInvocations, swizzelInvocationsMasked, 0u);
if (laneActive)
{
_74.outputDataArray[thisLaneOutputSlot] = thisLaneData;
}
}