12345678910111213141516171819202122232425262728 |
- 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);
- }
- }
- }
|