<div dir="ltr"><div><div>Hi Imran,<br></div>Looking over things some more, it looks like the patch I sent is correct and so is the DRM backend.  The problem is that weston's wayland backend isn't handling transformed outputs nicely.  In particular, it doesn't swap the width and height of the surface.  As far as I can tell, it does nothing whatsoever with the transform it receives.  It would be good if someone fixed that.<br><br>The real question is how best to handle it.  I think the answer to that is that we want to just follow the parent compositor's lead and transform the window the same way it does.  However, this gets tricky if the parent compositor says an output is transformed by 90 and the child wants it transformed by 180.  Do you add the transformations?  Just let the client override?  Lots of interesting questions there.<br><br></div>--Jason Ekstrand<br><div><div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 8, 2015 at 1:37 PM, Imran Zaman <span dir="ltr"><<a href="mailto:imran.zaman@gmail.com" target="_blank">imran.zaman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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"><div><div class="h5">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></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">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>
</div></div><span class="HOEnZb"><font color="#888888"><span><font color="#888888">--<br>
2.2.0<br>
<br>
_______________________________________________<br>
wayland-devel mailing list<br>
<a href="mailto:wayland-devel@lists.freedesktop.org" target="_blank">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></font></span></blockquote></div><br></div>
</blockquote></div><br></div></div></div></div></div></div>