NOTICE: Account creation on the wiki has been temporarily disabled until the wiki is moved to OpenID. If you need an account before then, please request one here: http://forum.xbmc.org/showthread.php?tid=165868
Dirty regions can help speed up the GUI in XBMC and decrease the demand on your CPU and GPU. Dirty regions has no effect during video playback unless there are GUI elements (on screen buttons) visible. Using dirty regions requires XBMC v11 (Eden) or higher.
XBMC started as a project for the original XBOX where things were very different. After the move to desktops and embedded environments, many of the legacy procedures remained. One of these procedures, and a long-time thorn in XBMC’s side has long been its rendering model in which where every frame is rendered by the GPU in its entirety, typically at 60fps. As you can imagine, this is incredibly intensive and very unfriendly to low-power platforms. This is where dirty-region rendering comes in. Thanks to the work of Tobias and Jonathan (jmarshall), XBMC now has the ability to only render what has changed.
For more information see: Working with dirty regions
"Mode" 3 is currently enabled by default (as of XBMC v12), as it will reduce CPU/GPU usage without causing any flickering in the graphics. However Mode 3 will not make the GUI any faster. For that you will need mode 1 or 2. Mode 1 will provide the greatest speedup.
Some GPU/hardware configurations will have some minor issues (such as a visual "flicker"), so for those situations try mode 2 or use the default (mode 3, which requires no advancedsetting).
This example is probably the setting that most users will want to try if they want to increase the GUI speed. As noted above, if you have issues you might want to try this same setting with mode 2 or 3:
- 1. Create a text document and save it as
advancedsettings.xml(or edit the existing one if you've already made it)
- 2. Cut and paste the following into your new advancedsettings.xml file:
<advancedsettings> <gui> <algorithmdirtyregions>1</algorithmdirtyregions> <nofliptimeout>1000</nofliptimeout> </gui> </advancedsettings>
- 3. Place your advancedsettings.xml file in your userdata folder.
- 4. Done!
3 Technical notes
From the advancedsettings.xml page:
Enable dirty-region processing. Dirty regions are any parts of the screen that have changed since the last frame. By not re-rendering what hasn't changed, big speed gains can be seen. Because all GPUs work differently, only Mode 3, combined with nofliptimeout=0, is guaranteed to be safe for everyone, but current timing issues with nofliptimeout keep this from being the default.
|0||Off||The entire viewport is always rendered.|
|1||Union||All dirty regions are grouped into the smallest possible rectangle. This is typically the fastest mode for slower GPUs due to only making one pass.|
|2||Cost reduction||Each dirty region is presented separately, in as many passes as there are regions.|
|3||Whole Screen||The entire screen is rendered if there are any dirty regions. This, combined with nofliptimeout is a safe default for drivers that clear buffer contents (manifests as blinking or vibrating images). Default|
<gui> <algorithmdirtyregions>1</algorithmdirtyregions> </gui>
Specifies the timeout in milliseconds after which XBMC will not flip the graphics buffers anymore when nothing has been rendered, this lowers both CPU and GPU usage.
- -1: disabled
- 0 or higher: timeout in milliseconds (0 is default)
<gui> <nofliptimeout>1000</nofliptimeout> </gui>