layout(set=0, binding=0) writeonly buffer destBuffer{ FLOAT4 data[]; }uOutput; layout(set=0, binding=1) readonly buffer inputBuffer { FLOAT4 data[]; } uInput; layout(set=0, binding=2) readonly buffer KernelBuffer{ FLOAT4 data[]; } uSlope; layout(set = 0, binding = 3) uniform reluBuffer{ ivec4 imgSize; // plane, 1, channelC4, plane * channelC4 }uPreluParam; layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in; void main() { int index = int(gl_GlobalInvocationID.x); int oz = index / uPreluParam.imgSize.x; if(index < uPreluParam.imgSize.w) { FLOAT4 slope = uSlope.data[oz]; FLOAT4 dataIn = uInput.data[index]; FLOAT4 dataTemp = dataIn * slope; bvec4 lessZero = bvec4(lessThan(dataIn, FLOAT4(0.0))); uOutput.data[index] = mix(dataIn, dataTemp, lessZero); } }