On 27 May 2014, at 10:28, Jacob Kroon <jacob.kr...@gmail.com> wrote:

> 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.

That is a bit interesting... What are you drawing on top of this image? msaa 
based antialiasing generally adds a bit to the cost on the GPU, but it makes 
the work a lot simpler for the renderer when you have Rectangle and Image 
elements with antialiasing: true in QML. 

Is there a lot of overdrawing?

> 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)

How is the performance if you use an image which is a lot smaller? Since the 
big image causes such a big impact, maybe texture loading is a bottleneck. If 
this is the problem, then using a ShaderEffect to create the tiled-noise 
background might be an option as that would then not suffer from massive 
texture fetching.

> 
> >
> > * 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

Reply via email to