Commit 58106d78 authored by Jason Ekstrand's avatar Jason Ekstrand Committed by Bryce Harrington

fullscreen-shell: Fix modeset on transformed outputs

Previously, we blindly created a mode for the output based on surface size
and completely ignoring the output transform.  This caused modesets to fail
on outputs that were transformed by 90 or 270 degrees.  We should be
swapping the width and the height in this case.
Reviewed-by: default avatarDerek Foreman <derekf@osg.samsung.com>
Tested-by: default avatarDerek Foreman <derekf@osg.samsung.com>
parent 87c862a9
......@@ -467,9 +467,28 @@ fs_output_configure_for_mode(struct fs_output *fsout,
&surf_x, &surf_y,
&surf_width, &surf_height);
/* The actual output mode is in physical units. We need to
* transform the surface size to physical unit size by flipping ans
* possibly scaling it.
*/
switch (fsout->output->transform) {
case WL_OUTPUT_TRANSFORM_90:
case WL_OUTPUT_TRANSFORM_FLIPPED_90:
case WL_OUTPUT_TRANSFORM_270:
case WL_OUTPUT_TRANSFORM_FLIPPED_270:
mode.width = surf_height * fsout->output->native_scale;
mode.height = surf_width * fsout->output->native_scale;
break;
case WL_OUTPUT_TRANSFORM_NORMAL:
case WL_OUTPUT_TRANSFORM_FLIPPED:
case WL_OUTPUT_TRANSFORM_180:
case WL_OUTPUT_TRANSFORM_FLIPPED_180:
default:
mode.width = surf_width * fsout->output->native_scale;
mode.height = surf_height * fsout->output->native_scale;
}
mode.flags = 0;
mode.width = surf_width * fsout->output->native_scale;
mode.height = surf_height * fsout->output->native_scale;
mode.refresh = fsout->pending.framerate;
ret = weston_output_mode_switch_to_temporary(fsout->output, &mode,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment