index - downloads - photos - forum - youtube

Note! Alpha test version of a completely new SoftTH is available. See this forum post.

SoftTH allows using three monitor "triplehead" with Direct3D 8 and 9 games without special hardware. You need three monitors attached to PCI Express video cards. Only one card does all the rendering work, so secondary card can be a low end card, only Direct3D support is required.

SoftTH works by rendering the whole scene on one display adapter, which then gets split into three parts to be displayed on each monitor. While it is technically possible to use it on a AGP/PCI card, only PCI Express has the required bandwidth to get good framerates.

Look here for a diagram of it's basic operation

Official discussion forum for SoftTH is available.

Compatibility and performance

While SoftTH can theoretically be compatible with any Direct3D 8 or Direct3D 9 game, some features used by games could not be yet suppoted or they can use special features which are incompatible with SoftTH. A common problem is also that the game cannot handle the aspect ratio, which results in a stretched image.

Examples of SoftTH compatibility with some games tested:

Working correctly:

  • Live for Speed S2
  • Operation Flashpoint
  • Lock On Modern Air Combat
  • Richard Burns Rally
    * Needs forceHorizontalFOV set to 1
  • Elder Scrolls 4 - Oblivion
  • rFactor
  • X3 Reunion
  • GTR 2
  • GT Legends
  • Test Drive Unlimited
    * Enable hooks and doScaleMouseCoordinates to fix cursor clipping
  • Armed Assault
  • Trackmania series
  • BMW M3 Challenge
  • Nascar Racing 2003
  • The Witcher
  • Company of Heroes
  • Call of Duty 2
  • Call of Duty 4
  • GTR Evolution
  • Team Fortress 2
  • Fallout 3

Not working:

  • IL-2 Sturmovik
    - Doesn't work (OpenGL game, with dx8wrapper sets incorrect videomode)
  • Microsoft Flight Simulator X
    - Frame rendered only on left monitor, mouse not working correctly

Tests above are run with the following system configuration:

  • Intel Core 2 Duo E6600 overclocked to 3,4GHz
  • Gigabyte X38-DQ6
  • 2GB of memory
  • GeForce 8800GTS 512MB PCI-e 2.0 (Rendering, middle monitor and right monitor)
  • GeForce 8400GS PCI-e (Left monitor)
  • Windows XP Pro SP2

See the forums for more compatiblity information

Shots & videos

Live for Speed:

Lock on Modern Air Combat:

TES Oblivion:

GT Legends:

Video of Live for Speed (Youtube)
Video of Lock on Modern Air Combat (Youtube)
Video of Richard Burns Rally (Encoded with XViD codec)
Video of Trackmania United Forever (Encoded with XViD codec, 1920x512 50FPS)

'SoftTH' at Youtube


New! Alpha test version of SoftTH v2 is available . See this forum post.

Download old version 1.08 BETA Here (606KB) Download old version 1.07 BETA Here (518KB)
Download old version 1.06 BETA Here (468KB)
Download old version 1.05 BETA Here (456KB)
Download old version 1.04 BETA Here (456KB)
Download old version 1.03 BETA Here (462KB)
Download old version 1.01 BETA Here (421KB)
Download old version 1.0 BETA Here (417KB)

Read quickstart.txt and readme from the archive


SoftTH is made by Keijo "Kegetys" Ruotsalainen


Official SoftTH discussion forum - wide- and triplehead gaming information

Version history

* 1.08beta
 - Improved free device reference counting for better compatibility
 - Reference rasterizer support for cards without D3D acceleration
 - Fixed possible multithreading issue with secondary screen blit
 - Thread priority adjustments for smoother fps
 - Some mouse button status fixes
 - Fixed possible crash with D3D9 GetDepthStencilSurface
 - Window rect scaling
 - Improved Autosquash detection
 - Removed cylindrical correction setting
 - Added lens correction postprocessing effect
 - Depthstencil created by SoftTH now uses discard flag
   if application originally requested it
 - Pixel shader dithering in RGB16 mode for cards that
   do not support dithering (ie. GeForce 8000 and up)
 - Reduced video memory use and improved compatibility
   for antialiasing
 - Changed to global mouse hook for better compatiblity
 - Automatic screenmode & sideExtraWidth detection
 - New faster, simplier, multithread safe win32 api hooks
 - Various compatibility fixes
* 1.07beta
 - Autodetection for various settings such as secondary
   resolution, device ID, etc. (default)
 - Support for D3D9 swap chains (for Call of Duty 2, 
   Company of Heroes...)
 - Persistent win32api hooks for more reliable hooking
 - Uses debug access to write memory if regular access
   fails (requires admin/debug privileges from user)
 - Some default settings adjusted for better compatibility
 - Improved device release detection & handling
 - Mouse compatibility fixes
 - Config file settings separated for OpenGL & Direct3D
 - Global config file support in user home directory
 - Autosquash option for automatic squashing when no 3D
   elements drawn
 - Forced multihead use (useMultihead=2) for games that
   do not immediately initialize the device with the
   triplehead resolution (Such as Test Drive Unlimited)
 - Misc fixes & improvements
* 1.06beta
 - Fixed crash when no depth buffer requested by application
   (for Nascar Racing 2003)
 - Fixed log output path when app changes current directory
 - Fixed config read path when app changes current directory
 - Using D3DCREATE_FPU_PRESERVE flag in secondary devices if
   requested for primary device (for Bioshock)
 - Added doScaleFromLeftScreen setting to scale mouse
   coordinates from left screen to full width (for netKar Pro)
 - Misc minor fixes and improvements
* 1.05beta
 - Fixed task switching crash in 1.04
 - Fixed refresh rate check
 - Added support for D3D9 multihead acceleration if primary
   device supports it (dual head cards)
 - Added mouseXoffset hook setting to fix misplaced mouse
   cursor position (for Armed Assault)
 - Fixed forceHorizontalFOV when using border setting
 - Added sideExtraWidth setting
 - Added cylindrical correction setting
 - Added SoftTH identifier to primary device description
 - Improved DLL load handling (for Stalker Shadow of Chernobyl)
* 1.04beta
 - Improved keyboard shortcut handling
 - Improved screenshot handling
 - Improved anti-aliasing support (Game-requested setting
   is detected by SoftTH and used automatically)
 - Experimental Win32 API hooks
 - Added hook option for scaling getCursorPos coordinates
   (For Test Drive Unlimited)
 - Added hotkey for 'squashing' output to middle monitor
 - Improved settings validation (Supported resolution check)
 - Fixed resolution returned by CreateDevice for improved
   border setting compatibility (ISI racing sims)

* 1.03beta
 - Improved performance and compatibility
 - Improved mouse compatibility
 - Added sleepBeforeRead config setting
 - Added hotkeys and setting to disable them
 - Added setting to change left/right monitor copy order

* 1.01beta
 - Some D3D9 compatibility fixes
 - Forced resolution override
 - Option to hide non-default devices
 - Set multithreading flag for D3D device
 - Option to disable multithreading flag

* 1.0beta
 - first version					


All games crash upon startup with SoftTH, I'm using Windows Vista?

There is apparently a bug with WDDM/Direct3D regarding multihead device handling in Vista. Possible solutions are:
- Disable SoftTH multiheading (multihead=0 in config). This will cause a large decrease in performance though
- Disable WDDM or use Windows XP

Can I use different aspect ratio monitors with SoftTH?

The sideExtraWidth setting in SoftTH 1.05 allows this. For example, a setup with 1360x768 widescreen on middle monitor, 1024x768 on side monitors:
- Add 1360x768x85 to the modelist at the bottom of the SoftTH.cfg file
- Set sideExtraWidth setting to (side monitor width) minus (middle monitor width), that is 1024 - 1360 so sideExtraWidth=-336
- Set secondaryWidth and secondaryHeight to 1024 and 768 (You can also use another mode, such as 800x600 here for better framerate)
- Game resolution is now (1360*3)-(336*2) = 3408 pixels wide, mode 3408x768 should appear on the modelist

How do I use the cylindrical correction option?

- Set sideExtraWidth to some positive value, such as 256. This makes the game resolution 2*256 pixels wider.
- Set cylindicalCorretionAngle to amout of correction done, for example 70.
- To find the most optimal settings try different values for sideExtraWidth and cylindicalCorretionAngle. cylindicalCorretionAngle can be modified in-game by pressing App+A and App+Z, press App+E to show the current setting. Modifying sideExtraWidth requires restarting the game and re-selecting the correct resolution.

How can I get better performance with SoftTH?

- Use a smaller game resolution, reduce game detail settings, overclock video card, etc.
- Use a smaller resolution on the secondary displays (secondaryWidth and secondaryHeight settings). This can dramatically reduce the amount of data copied over the PCI-e bus.
- Use 16bit colors on secondary displays (secondary16bpp setting, enabled by default).
- For Direct3D 9 games, set useMultihead to 1. This can take advantage of multihead cards to copy frames faster if one of the seconday monitors is located on the same card as the primary one.
- Try different values of sleepBeforeRead. This can be adjusted in-game with App+1 and App+2, App+E shows current setting.
- Try changing the swapOrder setting to 0 or 1
- If you absolutely know what you are doing, overclocking the PCI-Express bus can help.

In game X, the mouse does not move all the way to the right

- Set doHooking to 1 and doScaleMouseCoordinates to 1

Make a paypal donation