doc/src/platforms/emb-hardwareacceleration.qdocinc
branchRCL_3
changeset 8 3f74d0d4af4c
equal deleted inserted replaced
6:dee5afe5301f 8:3f74d0d4af4c
       
     1 	\section1 Hardware Acceleration
       
     2 	
       
     3 	When designing applications for embedded devices there is often a
       
     4 	compromise between graphics effects and performance. On most
       
     5 	devices, you cannot have both simply because the hardware needed
       
     6 	for such operations just is not there. With a growing number of
       
     7 	devices that use hardware dedicated to graphics operations there is
       
     8 	less need to compromise.
       
     9 	
       
    10 	In addition to enabling dynamic graphics effects, there are two
       
    11 	other benefits to using graphics acceleration. One is that graphics
       
    12 	acceleration hardware is more power efficient than using the CPU.
       
    13 	The reason for this is that the CPU might require a clock speed
       
    14 	that is up to 20 times higher than the GPU, achieving the same
       
    15 	results. E.g. a typical hardware accelerated mobile graphics unit
       
    16 	can rasterize one or two bilinear texture fetches in one cycle,
       
    17 	while a software implementation takes easily more than 20 cycles.
       
    18 	Typical \e {System-on-a-chip} (SoC) graphics hardware generally have
       
    19 	a much lower clock speed and memory bandwidth, and different level
       
    20 	of acceleration than desktop GPUs. One example is that many GPUs
       
    21 	leave out transformation and lighting from the graphics pipeline
       
    22 	and only implements rasterization.
       
    23 	
       
    24 	Another reason to use a GPU is to offload the main CPU, either for
       
    25 	power saving or to perform other operations in parallel. Often
       
    26 	drawing speed with a GPU is not that much faster than a CPU but
       
    27 	the clear benefit of using the GPU is to free up the CPU to perform
       
    28 	other tasks which can be used to create a more responsive use
       
    29 	experience.
       
    30 	
       
    31 	The key to writing good applications for devices is therefore to
       
    32 	limit the wow factor down to what the target hardware can handle,
       
    33 	and to take advantage of any graphics dedicated hardware. Qt
       
    34 	provides several ways to both render advanced effects on the screen
       
    35 	and speed up your application using hardware accelerated graphics.
       
    36 	
       
    37 	\tableofcontents 
       
    38 	
       
    39 	\section2 Qt for Embedded Graphics pipeline
       
    40 	
       
    41 	Qt uses QPainter for all graphics operations. By using the same API
       
    42 	regardless of platform, the code can be reused on different devices.
       
    43 	QPainter use different paint engines implemented in the QPaintEngine API to
       
    44 	do the actual painting.
       
    45 	
       
    46 	The QPaintEngine API provides paint engines for each window system and
       
    47 	painting framework supported by Qt. In regards to Qt for Embedded, this
       
    48 	also includes implementations for OpenGL ES versions 1.1 and 2.0, as well
       
    49 	as OpenVG and DirectFB(Embedded Linux only).
       
    50 	
       
    51 	By using one of these paint engines, you will be able to improve the
       
    52 	graphics performance of your Qt application. However, if the graphics
       
    53 	operations used are not supported, this might as well be a trap, slowing
       
    54 	down your application significantly. This all depends on what kind of
       
    55 	graphics operations that are supported by the target devices hardware
       
    56 	configuration.
       
    57 	
       
    58 	\image platformHWAcc.png
       
    59 	
       
    60 	The paint engine will direct all graphics operations supported by the
       
    61 	devices hardware to the GPU, and from there they are sent to the
       
    62 	framebuffer. Unsupported graphics operations falls back to the
       
    63 	QRasterPaintEngine and are handled by the CPU before sent to the
       
    64 	framebuffer. In the end, the operating system sends the paint updates off
       
    65 	to the screen/display. The fallback operation is quite expensive in regards
       
    66 	to memory consumption, and should be avoided.
       
    67 	
       
    68 	\section2 Hardware configuration requirements
       
    69 	
       
    70 	Before implementing any application using hardware acceleration, it is wise
       
    71 	to get an overview of what kind of hardware accelerated graphics operations
       
    72 	that are available for the target device. 
       
    73 	
       
    74 	\note On devices with no hardware acceleration, Qt will use
       
    75 	QRasterPaintEngine, which handles the acceleration using software. On
       
    76 	devices supporting OpenGL ES, OpenVG or DirectFB(not supported by Windows
       
    77 	CE), Qt will use the
       
    78 	respective paint engines to accelerate painting. However, hardware
       
    79 	configurations that only support a limited set of hardware acceleration
       
    80 	features, might slow the application graphics down rather than speeding it
       
    81 	up when using unsupported operations that must fall back to the raster
       
    82 	engine.
       
    83 	
       
    84 	\section3 Different architectures
       
    85 	
       
    86 	Based on the architecture used in a device we can make a recommendation on
       
    87 	which hardware acceleration techniques to use. There are mainly two
       
    88 	different architectures on embedded devices. These are devices with a
       
    89 	Unified Memory Architecture (UMA), and devices with dedicated graphics
       
    90 	memory. Generally, high-end devices will have dedicated graphics memory.
       
    91 	Low-end devices will just use system memory, sometimes reserving a memory
       
    92 	region and sometimes not.
       
    93 	
       
    94 	In addition to this, we can categorize the devices into five types based on
       
    95 	the different graphics operations supported by their hardware.
       
    96 	
       
    97 	\list 1
       
    98 		\o No support for graphics acceleration.
       
    99 		\o Support for blitter and alpha blending.
       
   100 		\o Support for path based 2D vector graphics.
       
   101 		\o Support for fixed function 3D graphics.
       
   102 		\o Support for programmable 3D graphics.
       
   103 	\endlist
       
   104 	
       
   105 	Based on these characteristics the table below recommends which paint
       
   106 	engines to use with the different types of hardware configurations.
       
   107 	
       
   108 	\section3 Recommended use of hardware acceleration based on hardware
       
   109 	
       
   110 	\table
       
   111 		\header
       
   112 			\o Type
       
   113 			\o UMA
       
   114 			\o Non-UMA
       
   115 		\row
       
   116 			\o \bold {None}
       
   117 			\o Qt Raster Engine
       
   118 			\o Qt Raster Engine
       
   119 		\row
       
   120 			\o \bold {Blitter}
       
   121 			\o DirectFB
       
   122 			\o DirectFB
       
   123 		\row
       
   124 			\o \bold {2D Vector}
       
   125 			\o OpenVG
       
   126 			\o OpenVG
       
   127 		\row
       
   128 			\o \bold {Fixed 3D}
       
   129 			\o OpenGL (ES) 1.x
       
   130 			\o OpenGL (ES) 1.x
       
   131 		\row
       
   132 			\o \bold {Programmable 3D}
       
   133 			\o OpenGL (ES) 2.x
       
   134 			\o OpenGL (ES) 2.x
       
   135 	\endtable
       
   136 	
       
   137 	\note Since the DirectFB API is quite primitive, the raster paint engine
       
   138 	handles most of the operations.
       
   139 	
       
   140 	\note Blitter and Alpha blending is currently not supported on Windows CE.