Monday, May 28, 2012

Temporal Dithering; good for colour depth, bad for extending!

I've become quite a fan of products based on Teradici - an on-the-fly compression system that allows dual-DVI w/peripherals to be extended over ethernet. It works very well and you can't tell you're not looking at something that's been packetised and extended over a network. Howver, a fly in this ointment is the current gen ATI graphics drivers on OS-X. They use a technique called Temporal Dithering;
Temporal dithering is a technique employed by some graphics cards to simulate colors that they cannot natively display by rapidly changing the colors of pixels, tricking the eye into seeing “in-between” colors. During PCoIP remote sessions, temporal dithering can cause extremely high bandwidth utilization because the rapidly changing pixels force the PCoIP protocol to constantly deliver large screen updates to the remote desktop.
The upshot of this is that when you have nothing going on screen - no mouse movement etc (where you'd expect to see no data traveling on the network) you get;

And the effect on screen is compression artifacts and a sluggish mouse pointer. The guys at Amulet Hotkey are looking into it for us, but it might be a deal-breaker.

Flailing around the web revealed someone at Disney who has produced tweaks to X's configuration file for use under Linux; unfortunately this doesn't work in OS-X as the dithering is done by the driver. However, just for reference (or the lulz!)


Section "Screen"
    Identifier "Screen0"
    Device "Videocard0"

    Monitor        "Monitor0"
    DefaultDepth    24
    Option        "CIOverlay" "On"

    Option        "CursorShadow" "Off"
    Option        "NvAgp" "3"
    Option        "TwinView" "1"
    Option        "SecondMonitorHorizSync" "21.0-140.0"
    Option        "SecondMonitorVertRefresh" "47.0-72.0"
    Option        "TwinViewOrientation" "LeftOf"
    Option        "MetaModes" "1280x1024_72,1280x1024_72; 1280x1024_60,1280x1024_60; 1024x768_72,1024x768_72"
    Option        "TwinViewXineramaInfoOrder" "DFP"
#RandR    Option        "RandRRotation" "true"   # Requires xorg 6.8.1+
#NoEDID    Option        "UseEDIDFreqs" "FALSE"
#NoEDID    Option        "UseEDIDDpi" "FALSE"
#NoEDID    Option        "ModeValidation" "NoEdidMaxPClkCheck"
#ExactMODE    Option          "ExactModeTimingsDVI" "On"
    Option        "DPI" "85x85"
    Option        "AllowGLXWithComposite" "true"
    Option        "DisableGLXRootClipping" "true"
    Option        "AddARGBGLXVisuals" "true"
    Option        "AllowSHMPixmaps" "true"
#FALSE    Option        "Dac8Bit" "true" # forced spatial dithering instead of temporal for teradici performance
#FALSE        Option        "RegistryDwords" "DitherAlgo8=3;DitherAlgo6=3"

# Other possible options. Enable at your own risk
#    Option        "RenderAccel" "On"
#    Option        "Overlay" "On"
#    Option        "SWCursor" "On"
#       Option          "TwinViewXineramaInfoOrder" "DFP-1,CRT-0"
#       Option        "ConnectedMonitor" "DFP-0,CRT-1"
# This can be used to clarify orientation
#    Option        "TwinViewOrientation" "DFP-1 LeftOf CRT-0"
#    Option        "IgnoreDisplayDevices" "CRT"

    Subsection "Display"
        Depth        24
        Modes        "1280x1024_72"

No comments: