Graphics artifacts on rotated screen on EfusA9X linux based on buildroot B2019.11

  • I'm trying to rotate the screen 90 degrees clockwise on X11 running on EfusA9X. Linux built with the fsimx6sx-B2019.11. Buildroot configuration is based on fsimx6sx_std_defconfig with some added (QT5, x11vnc) packages. I use the x11vnc to be able to test on the device remotely.


    I was able to rotate the screen successfully using the following command:

    xrandr -o right


    The problem is, that after the rotation there are artifacts during the screen update. It looks like some of the screen parts are "rotated" wrongly, so I can see some elements (like parts of the matchbox panel) on a wrong location on the screen (somewhere in the middle). These artifacts are not visible via VNC (I use UltraVNC client on Windows 10), but only on the display. This lead me to a suspected bug in the vivante driver.


    I can easily reproduce these artifacts by connecting to the device via VNC. When I move the mouse over the screen, artifacts (like from the original not rotated screen) start to appear immediately following the cursor on the screen.


    I use the Vivante driver the same way as configured in the fsimx6sx_std_defconfig. I found on the internet, that there is a bug in Vivante with a similar description: https://community.nxp.com/thread/509185, but it looks to be for a different version of the driver.


    Is there a fix or does anybody have a hint how to fix this?

  • Hello,


    we are currently using the 6.2.4 imx-gpu-viv driver in our releases.

    You can try to downgrade your imx-gpu-viv driver to version 5.0.11 like suggested in the NXP-post.


    Replace the files at:

    package/freescale-imx/imx-gpu-viv

    with the files attached to this post and rebuild your rootfs.


    Alternatively you could try to switch to Wayland as graphical backend. It should work there.


    Your F&S Support Team

  • Hello,


    thanks for the attached file. The problem is, that is not enough.

    O had to tweak makefiles in the package/freescale-imx/imx-gpu-viv you attached.

    Additionally I had to remove the package/freescale-imx/imx-gpu-g2d as in the old version it is included in the imx-gpu-viv.

    Than there was unsatisfied dependency to imx-gpu-g2d in package/x11r7/xdriver_xf86-video-imx-viv, so I removed it from the .mk file.

    Afterwards the built failed. Probably the xdriver_xf86-video-imx-viv_rel_imx_4.9.x_1.0.0_ga is not compatible with the old NXP driver version...

  • Hello,


    you are right, downgrading the imx-gpu-viv driver seems to be a bigger issue.


    A quick hotfix for your problem would be, to add a small scaling to your rotation.


    Code
    1. xrandr --output "mxs-lcdif0" --rotate left --scale 1.00005x1

    It seems to use a different hardware acceleration, which is not affected by the driver bug.


    In general, adding a displayrotation is a performance expensive operation. Could you add your rotation to a higher level like the QT5 application?


    Your F&S Support Team

  • Also thank you for the idea of rotation on a higher level.

    Currently it's not fixed which UI will be used, so we need to rotate the screen on a lower level.

    We will consider this as well in the future.