#version 450
#pragma shader_stage(compute)

//#extension GL_EXT_nonuniform_qualifier : enable

layout (constant_id = 0) const uint MIPS = 6;
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

#define COMPUTE 1

#include "../../common/macros.h"
#include "../../common/structs.h"

layout( push_constant ) uniform PushBlock {
  uint _;
  uint pass;
} PushConstant;

layout (binding = 3) uniform sampler2D inImage[MIPS];
layout (binding = 4, r32f) uniform volatile coherent image2D outImage[MIPS];

void main() {
	vec2 imageSize =  imageSize(outImage[PushConstant.pass]);
	uvec2 pos = gl_GlobalInvocationID.xy;
	if ( pos.x >= imageSize.x || pos.y >= imageSize.y ) return;

	float depth = texture(inImage[PushConstant.pass], (vec2(pos) + vec2(0.5)) / imageSize).x;

	imageStore(outImage[PushConstant.pass], ivec2(pos), vec4(depth));
}