Hi Gunnar, On Fri, May 23, 2014 at 11:39 AM, Gunnar Sletta <gunnar.sle...@jolla.com>wrote:
> > On 23 May 2014, at 10:32, Jacob Kroon <jacob.kr...@gmail.com> wrote: > > > Hi, > > > > I'm experimenting with a Qt application running on the Wandboards, > > at full hd resolution, 1920x1080x32. I have a static background image, > and some small animated Qml-elements on the screen. I'm not entirely > satisfied with the resulting performance, and I think it is because of the > background image being constantly fully redrawn in each frame. > > If it cannot render a single image at that resolution, then it is not a > suitable hardware for that resolution :) > > If this is the case your options are to reduce the bit depth, reduce the > resolution or reduce the framerate (such as going for 30FPS instead of > 60FPS) > > Is the image alpha blended? If it is a JPEG it should be opaque, but if it > is a PNG it will most likely have an alpha channel (even thought it really > doesn't. I know, stupid, but that how it is). For some GPUs blending can > add a bit of overhead, and doing it fullscreen can be what tips the balance. > > For the background image, what I did was that I used a tiled noise image, and did a radial blend on it. The resulting image was cached though. But yes, the resulting image showed up as "alpha" in the renderer debug output, I've switched to having a static prepared png image, and now the background image shows up as "opaque". > I've experimented with > > > > * setClearBeforeRendering(false), since the background will be drawn > anyway, there is no point in clearing before rendering. This seemed to have > little impact on performance though. > > The effect of turning off clearing is highly hardware dependent. Some > drivers/GPUs will benefit from not clearing as the clear is just yet > another pass over all pixels. Others will use the clear as an indication of > "new frame" and will have to do all manner of nasty stuff, like storing the > depth buffer into system memory because you didn't clear it before the > frame began. > > See the performance guidelines of your GPU for the actual recommendation > for your chip. > > It seems that setting "QSG_ANTIALIASING_METHOD=msaa" gives a huge improvement on the cpu usage. Also, playing with QSG_RENDERER_BATCH_VERTEX_THRESHOLD and QSG_RENDERER_BATCH_NODE_THRESHOLD, allows me to lower the cpu usage even further. Still, the background image is taking a considerable time it seems. With bg image I get ~27 fps, without it I get ~85 fps (with vsync turned off) > > > * Letting Qt5 render into /dev/fb1 overlay on the imx6, with no > background image, but instead write the background image manually into > /dev/fb0. In this way, the IPU will blend the result onto the display. This > seemed to be even worse than letting the GPU render the background. > > > > Can the scenegraph be smart enough in such a way that it will only > "clear" dirty rectangles with a user supplied background image ? Or are > there any other tricks I am not aware of ? > > The default scene graph renderer renders the full screen. Doing partial > updates requires a lot of support from the underlying drivers and hardware. > If you really want to, you can give it a shot of course. You can copy the > existing renderer, adapt it to expose dirty areas and make use of partial > swap buffers extension if this is available (and the underlying display > stack actually does propagate the sub regions all the way to the display). > > Writing a custom renderer would have to be a final resort .. Thanks, Jacob
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest