938c7debed
Derivatives, subgroup and implicit-lod instructions all need to happen in the block they were created.
33 lines
1.1 KiB
Plaintext
33 lines
1.1 KiB
Plaintext
#version 450
|
|
#extension GL_ARB_gpu_shader_int64 : require
|
|
#extension GL_ARB_shader_ballot : require
|
|
#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)));
|
|
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;
|
|
}
|
|
}
|
|
|