Professional Documents
Culture Documents
08b alpha :
x86 build - for 32bit programs only
--------------------------------------------------------* alpha test version - many features are still missing *
Visit http://www.kegetys.net/forum/index.php?board=1.0
for feedback/more information.
SoftTH allows spanning Direct3D 9 games to multiple display
outputs. Any number of outputs is supported in any kind of
configuration (landscape, portrait, different resolutions).
Only one video card does all the rendering work so secondary
card(s) to which extra monitors are attached can be a low end,
only Direct3D support is required.
SoftTH 2 requires Windows 7 with WDDM drivers to work.
Make sure you have the latest DirectX 9 runtime installed
(http://www.microsoft.com/download/en/details.aspx?id=35)
To use, place the d3d9.dll into the game executable directory
(this is usually the directory where the game main EXE is located.
Sometimes the correct path can be a sub directory with DLL files
such as "bin"). When the game is run for the first time and
SoftTH is loaded a default configuration will be created. The
default config will span all detected monitors in the configuration
they are set in Windows desktop. You can open the created
config.SoftTHconfig file with a text editor to change settings.
The renderResolution that is set in the config will be added to
the list of video modes when the game enumerates them. When
the game uses this resolution (you will need to select it for
the game to use, or set it into a configuration file manually)
the game will render to a buffer that is the size of renderResolution,
and areas of this buffer will be copied to the outputs set
in the config. The 'sourceRect' setting for each output head
defines the rectangle from which the data for the output is copied.
The format is:
x-coordinate,y-coordinate,width,height
For example:
renderResolution=2000x1000
...
[head_primary]
sourceRect=1000,0,1000,1000
...
[head_1]
devID=1
sourceRect=0,0,1000,1000
Here a screen buffer of 2000x1000 pixels is defined. The
primary monitor will display the right side 1000x1000 area
of this buffer and the secondary monitor will display the
left side.
Current config settings include:
[main] section:
nonlocalFormat: Format used for non-local heads (monitors which
are not attached to the primary video card). Possible options are:
RGB32 - 32bit RGB-8888 mode
RGB16 - 16bit RGB-565 mode
RGB16D - 16bit RGB-565 mode with dithering for smoother appearance
The 16bit modes offer better performance when using non-local heads
by reducing the amount of data copied in half.
keepComposition: If set to 1, keeps Windows WDDM desktop composition
enabled. Disabling the composition usually improves frame rate.
smoothing: If set to 1, smooths the framerate by disallowing excess
render-ahead. Setting of 0 can give higher overall FPS but can result
in FPS "spiking" resulting in stuttering gameplay.
debugD3D: Enables Direct3D debug runtime and captures the output to
log. Causes a significant performance decrease.
zClear: If set to 1, a depth-buffer trick is used to avoid rendering
to any areas of the renderResolution buffer which are not covered
by any display output. This can significantly improve performance
if large areas of the render buffer are "unused". However it can
also cause problems if the depth buffer is detected wrong or if the
game uses post-processing effects to distort the rendered view.
vsync: 1 = enable vsync, 0 = disable vsync.
tripleBuffer: 1 = enable triple buffering. Recommended with vsync
enabled, but causes an extra frame of latency to the rendering.
screenshotFormat: Format of screenshots saved with printscreen.
Possible values: jpg, png, bmp
dllPathD3D9: Path to D3D9.DLL DLL to use. Set to 'auto' to use
Windows sytem32 path. If you use other "proxy" DLLs then you can
point this to the path of the other DLL.
[overrides] section:
forceResolution: If set to 1, device is forced to be created in
the resolution set in renderResolution. This can be used to force
a game into the wanted mode if the mode is not selectable in-game.
Doing this often causes problems with the game as it will not be aware
of the mode change.
antialiasing: If set to >0, forces antialiasing to set value. If
the game does not support selecting AA then using this option is
preferred over a display driver forced setting.
processAffinity: If set to 1, forces the process affinity to all
detected CPU cores. SoftTH takes use of multithreading, and if the
game forces the affinity to just one core/cpu then performance will
not be optimal. However, forced affinity can cause problems with
the game if it does not properly handle multithreading.
FOVForceHorizontal & FOVForceVertical: Attempts to force the FOV
for games which "strecth" the output. Only works with games that
noSync: Do not wait for this head to be presented. For a very slow
output device this allows the game to render at a high frame rate while
the output is updated at a lower rate.
fpsLimit: Limit the rate at which this head is updated. Can be used for
example for USB displays used as flightsim gauges/instruments to reduce
overhead from their updating.
SoftTH creates a log file to your "My Documents/SoftTH" directory.
Screenshots are also saved there.
Currently supported hotkeys are:
- Print screen: Save screenshot in TGA format
- App key + E: Toggle smoothing on/ogg
- App key + G: Toggle frame time graph on/off
- App key + B: Debug bars on/off
- App key + W: Toggle left/right monitor data copy
- App key + S: Toggle squashing, draws whole frame to middle
monitor only, helpful for using UI with games that stretch
the UI to all three monitors
- App key + F4: Force application quit
(App key is the application key next to the right windows key)
--------------------------------------------------------credits
--------------------------------------------------------SoftTH is made by Kegetys, http://www.kegetys.net
Uses the diStorm3 binary stream disassembler
Special thanks to everyone who has donated to support
the project
--------------------------------------------------------known bugs
---------------------------------------------------------
--------------------------------------------------------changelog
--------------------------------------------------------*
-
2.08 alpha
GetContainer support for textures (TES Skyrim)
Improved index- and vertexbuffer emulation
Quirk support for invalid VB locks disabled by default
Fix discard flag use with emulated index buffers (DCS A-10C)
Config settings to disable various manage-emulation modes
* 2.07 alpha
- Fixed GetTexture behaviour (NFS Shift 2, C.A.R.S, Rfactor, ...)
- Workaround for D3D9Ex non-primary swapchain backbuffer
rendering (Falcon 4 BMS)
- Device reset to windowed mode is no longer incorrectly
2.06 alpha
fpsLimit setting for non-primary heads
Managed volume texture fixes (Rise of Flight)
Fixed memory leak with GetSwapChain
Fixed memory leak with GetSurfaceLevel
SoftTH no longer incorrectly activates on windowed mode device
*
-
2.05 alpha
Improved local head performance for AMD cards
Fixed RGB16D nonlocal mode on AMD cards
Slightly improved nonlocal performance for Nvidia
cards (Restored to v2.02 level)
- Reduced CPU use when waiting for gpu synchronization
- Framerate smoothing is always disabled if all heads
are local
- Fixed potential crash with hooks
* 2.04 alpha
- Improved mouse cursor hooking (World of Warcraft)
- Fixed QueryInterface behaviour for non-D39Ex device
(Rise of Flight, Netkar Pro, Mount & Blade, ...)
- Fixed volume surface locking behaviour
* 2.03 alpha
- Fixed nonlocal performance on ATI cards
- Fixed crash with steam overlay introduced in v2.02
(Left 4 Dead 2, Team Fortress 2, ...)
- Added support for Direct3D 9Ex games (Fallout New Vegas)
* 2.02 alpha
- Fixed non-managed volume texture handling
- Improved performance with partial texture locks
- Quirk support for invalid vertex buffer locks (DCS A10C Beta)
- x64 support
* 2.01 pre-alpha
- Improved manage texture emulation (Richard Burns Rally,
X3 Terran Conflict, Bioshock 2, ...)
- Volume texture manage-emulation fixes (Portal, Left 4 Dead 2)
- Various COM interface compatibility fixes
- GetCursorInfo hook (ArmA2 v1.07)
- TrackMouseEvent messages handling (Dragon Age: Origins)
* 2.0 pre-alpha
- Re-written almost completely from scratch
- Supports any number of outputs in any configuration
- New configuration method
* 1.09beta (rc1)
- Win32 monitorInfo hooks (Flight Simulator X)
- Nonmultisampled lockable backbuffer support (UT 2004)
- Fixed default depthbuffer render state with disabled autodepthbuffer
(Race Driver Grid, Midnight Club 2 ...)
- sideExtraWidth autodetection now uses desktop resolution setting
of secondary monitors instead of secondaryWidth/Height resolution
- Experimental CUDA fame copy support for Nvidia cards
(RGB32CUDA secondaryFormat setting)