#version 440 #extension GL_GOOGLE_include_directive : enable layout(set=0, binding=0) uniform texture2D inMotionMax; layout(set=0, binding=1) uniform sampler textureSampler; layout(set=0, binding=2, rgba8) uniform image2D outMotionMaxNeighbourhood; layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in; const int motionTileSize = 8; void main(){ ivec2 outImageRes = imageSize(outMotionMaxNeighbourhood); ivec2 motionTileCoord = ivec2(gl_GlobalInvocationID.xy); if(any(greaterThanEqual(motionTileCoord, outImageRes))) return; float velocityMax = 0; vec2 motionMax = vec2(0); for(int x = -1; x <= 1; x++){ for(int y = -1; y <= 1; y++){ ivec2 sampleCoord = motionTileCoord + ivec2(x, y); vec2 motionSample = texelFetch(sampler2D(inMotionMax, textureSampler), sampleCoord, 0).rg; float velocitySample = length(motionSample); if(velocitySample > velocityMax){ velocityMax = velocitySample; motionMax = motionSample; } } } imageStore(outMotionMaxNeighbourhood, motionTileCoord, vec4(motionMax, 0, 0)); }