#version 440 core #ifdef FP16 #extension GL_AMD_gpu_shader_half_float: enable #define FLOAT4 f16vec4 #define MAT4 f16mat4 #extension GL_AMD_gpu_shader_half_float: enable #else #define FLOAT4 vec4 #define MAT4 mat4 #endif layout(std140) buffer; layout(set=0, binding=0) writeonly uniform image2D uOutput; layout(set=0, binding=1) uniform sampler2D uInput; layout(set=0, binding=2) uniform sampler2D uKernel; layout(set=0, binding=3) readonly uniform constBuffer { ivec4 outputSize; }uConst; layout (local_size_x_id = 0, local_size_y_id = 1, local_size_z_id = 2) in; void main() { ivec3 pos = ivec3(gl_GlobalInvocationID); if (pos.x < uConst.outputSize.x && pos.y < uConst.outputSize.y) { FLOAT4 o0 = FLOAT4(0); FLOAT4 o1 = FLOAT4(0); FLOAT4 o2 = FLOAT4(0); FLOAT4 o3 = FLOAT4(0); int multiLength = uConst.outputSize.w; int kernelY = pos.y + pos.z * uConst.outputSize.y; int srcY = pos.x + pos.z * uConst.outputSize.x; for (int k=0; k