diff --git a/src/xrt/auxiliary/render/render_interface.h b/src/xrt/auxiliary/render/render_interface.h index f472a7ea5..b665be428 100644 --- a/src/xrt/auxiliary/render/render_interface.h +++ b/src/xrt/auxiliary/render/render_interface.h @@ -1326,8 +1326,8 @@ struct render_compute_layer_ubo_data * For projection layers */ - //! Timewarp matrices - struct xrt_matrix_4x4 transforms_timewarp; + //! FOV and timewarp matrix + struct xrt_matrix_4x4 transforms; //! Chroma key parameters (per layer) struct render_chroma_key_info chroma_key; diff --git a/src/xrt/auxiliary/render/shaders/layer.comp b/src/xrt/auxiliary/render/shaders/layer.comp index f1c063f42..d2b1a62af 100644 --- a/src/xrt/auxiliary/render/shaders/layer.comp +++ b/src/xrt/auxiliary/render/shaders/layer.comp @@ -88,7 +88,7 @@ struct Layer { // for projection layers - // timewarp matrices + // fov and timewarp matrix mat4 transform; // per-layer chroma key settings @@ -183,7 +183,7 @@ vec2 position_to_view_uv(ivec2 extent, uint ix, uint iy) return view_uv; } -vec2 transform_uv_timewarp(vec2 uv, uint layer) +vec2 transform_uv_fov_timewarp(vec2 uv, uint layer) { vec4 values = vec4(uv, -1, 1); @@ -191,7 +191,7 @@ vec2 transform_uv_timewarp(vec2 uv, uint layer) values.xy = fma(values.xy, ubo.pre_transform.zw, ubo.pre_transform.xy); values.y = -values.y; // Flip to OpenXR coordinate system. - // Timewarp. + // Apply FOV and timewarp. values = LAYER.transform * values; values.xy = values.xy * (1.0 / max(values.w, 0.00001)); @@ -419,10 +419,8 @@ vec4 do_projection_uv(vec2 view_uv, uint layer, out vec2 out_uv) { uint source_image_index = LAYER.image_info.color_image_index; - // Apply timewarp transformation if enabled. - if (k_do_timewarp) { - view_uv = transform_uv_timewarp(view_uv, layer); - } + // Apply FOV and timewarp transformation. + view_uv = transform_uv_fov_timewarp(view_uv, layer); // Output view space coordinates, before subimage. Inset layer blend // expects coordinates to be in range [0..1] across the layer, anything diff --git a/src/xrt/compositor/util/comp_render_cs.c b/src/xrt/compositor/util/comp_render_cs.c index 5c439c796..b68def90e 100644 --- a/src/xrt/compositor/util/comp_render_cs.c +++ b/src/xrt/compositor/util/comp_render_cs.c @@ -278,11 +278,15 @@ do_cs_projection_layer(const struct comp_layer *layer, // unused if timewarp is off if (do_timewarp) { - render_calc_time_warp_matrix( // - &vd->pose, // - &vd->fov, // - world_pose_scanout_begin, // - &ubo_data->layers[cur_layer].transforms_timewarp); // + render_calc_time_warp_matrix( // + &vd->pose, // + &vd->fov, // + world_pose_scanout_begin, // + &ubo_data->layers[cur_layer].transforms); // + } else { + render_calc_time_warp_projection( // + &vd->fov, // + &ubo_data->layers[cur_layer].transforms); // } *out_cur_image = cur_image;