<div dir="ltr">Hi Ekstrand!<div><br></div><div>I have tested it in nested compositors case; unfortunately it is not enough and doesn't work :-)</div><div><br></div><div>The reason is that drm compositor (choose_mode) function rejects the mode if width and height are swapped so similar patch is needed for choose_mode in drm compositor based on transform.</div><div><br></div><div>I tested the setup as below..</div><div>- System compositor (drm backend) with weston.ini file containing transform=90 for the output.</div><div>- Child compositor (wayland backend)</div><div><br></div><div>- child compositor receives e.g. 1920x1080 + transform= 90 info.</div><div>- it creates the surface and DOESN'T do any transformation (other than swapping width and height) as it is disabled.</div><div>- then surface is presented to system compositor's fullscreen shell</div><div>- fullscreen shell uses the outputs' data received from system compositor when module is initialized and surface data received from child compositor which may not be in sync..</div><div>- fullscreen shell then ask system compositor to switch mode</div><div>- system compositor verifies the mode first (if not it fails)</div><div>- then system compositor does the transformation </div><div><br></div><div>Hope it gives u some idea to update the patch. I would be eager to test if you update the patch :-)</div><div><br></div><div>BR<br></div><div>imran</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 8, 2015 at 6:57 PM, Jason Ekstrand <span dir="ltr"><<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Previously, we blindly created a mode for the output based on surface size<br>
and completely ignoring the output transform.  This caused modesets to fail<br>
on outputs that were transformed by 90 or 270 degrees.  We should be<br>
swapping the width and the height in this case.<br>
---<br>
 fullscreen-shell/fullscreen-shell.c | 23 +++++++++++++++++++++--<br>
 1 file changed, 21 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/fullscreen-shell/fullscreen-shell.c b/fullscreen-shell/fullscreen-shell.c<br>
index 35e6d8f..5fd7cd6 100644<br>
--- a/fullscreen-shell/fullscreen-shell.c<br>
+++ b/fullscreen-shell/fullscreen-shell.c<br>
@@ -463,9 +463,28 @@ fs_output_configure_for_mode(struct fs_output *fsout,<br>
                                        &surf_x, &surf_y,<br>
                                        &surf_width, &surf_height);<br>
<br>
+       /* The actual output mode is in physical units.  We need to<br>
+        * transform the surface size to physical unit size by flipping ans<br>
+        * possibly scaling it.<br>
+        */<br>
+       switch (fsout->output->transform) {<br>
+       case WL_OUTPUT_TRANSFORM_90:<br>
+       case WL_OUTPUT_TRANSFORM_FLIPPED_90:<br>
+       case WL_OUTPUT_TRANSFORM_270:<br>
+       case WL_OUTPUT_TRANSFORM_FLIPPED_270:<br>
+               mode.width = surf_height * fsout->output->native_scale;<br>
+               mode.height = surf_width * fsout->output->native_scale;<br>
+               break;<br>
+<br>
+       case WL_OUTPUT_TRANSFORM_NORMAL:<br>
+       case WL_OUTPUT_TRANSFORM_FLIPPED:<br>
+       case WL_OUTPUT_TRANSFORM_180:<br>
+       case WL_OUTPUT_TRANSFORM_FLIPPED_180:<br>
+       default:<br>
+               mode.width = surf_width * fsout->output->native_scale;<br>
+               mode.height = surf_height * fsout->output->native_scale;<br>
+       }<br>
        mode.flags = 0;<br>
-       mode.width = surf_width * fsout->output->native_scale;<br>
-       mode.height = surf_height * fsout->output->native_scale;<br>
        mode.refresh = fsout->pending.framerate;<br>
<br>
        ret = weston_output_mode_switch_to_temporary(fsout->output, &mode,<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.2.0<br>
<br>
_______________________________________________<br>
wayland-devel mailing list<br>
<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
</font></span></blockquote></div><br></div>