layout(constant_id = 0) const bool sc_multiview = false; layout(set = 4, binding = 0, std140) uniform SceneData { mat4x4 projection[2]; mat4x4 inv_projection[2]; vec4 eye_offset[2]; } scene_data; vec3 reconstructCSPosition(vec2 screen_pos, float z) { if (sc_multiview) { vec4 pos; pos.xy = (2.0 * vec2(screen_pos) / vec2(params.screen_size)) - 1.0; pos.z = z * 2.0 - 1.0; pos.w = 1.0; pos = scene_data.inv_projection[params.view_index] * pos; pos.xyz /= pos.w; return pos.xyz; } else { if (params.orthogonal) { return vec3(-(screen_pos.xy * params.proj_info.xy + params.proj_info.zw), z); } else { return vec3((screen_pos.xy * params.proj_info.xy + params.proj_info.zw) * z, z); } } }