Skip to content

Custom configuration

IsmetBesic edited this page Apr 12, 2021 · 45 revisions

You can customize the configuration of d912pxy by editing the config.ini file found inside the d912pxy folder after the first time d912pxy successfully launched alongside the game.

A default config.ini file will be recreated if none can be found during startup.

Presently missing config entries will not be automatically added (e.g. when carrying over a config.ini after a d912pxy update). It is recommended that you create a copy of your current config.ini and to let a new config.ini be recreated by deleting the old one and launching the game with d912pxy installed. Afterwards you can edit the newly created config.ini and adjust previously configured settings back to your liking.

Please note that this wiki page has already been updated in anticipation of d912pxy version 2.4. If you require a reference of version 2.3.1h2 related configuration entries, please click here to open an archived version of this wiki page.

The config.ini file is divided into the following sections:

  1. [pooling]
  2. [samplers]
  3. [cleanup]
  4. [sdb]
  5. [replay]
  6. [mt]
  7. [log]
  8. [upload]
  9. [batching]
  10. [dx]
  11. [misc]
  12. [compat]
  13. [vfs]
  14. [extras]
  15. [end]

[pooling]

Configures pooling mechanism limitations and related behavior.

upload_alloc_step

Size of the memory region in megabytes allocated for upload objects to feed from.

Default: 16

Valid values: 0 - 1024.

Comment:

Use default values or configure according to your hardware's capabilities.

If you experience small hitches, try lowering this value.

Very high values (>256) can negatively affect performance.

Setting this value to 0 will increase RAM and VRAM commitment.

upload_limit

Amount of memory in megabytes that the upload pool will not unload.

Default: 128

Valid values: 0 - 2 x VRAM

Comment:

Upload objects are created for every CPU to GPU memory transfers.

DX12 object creation and memory allocation is slow, that is why d912pxy tries to keep objects in memory for some period of time.

Default configuration will never keep many objects in memory for whole run. Instead it will collect them on a GC thread for removal after some time.

By changing this value you can force objects to persist throughout the whole session - ultimately cutting down on object creation/memory allocation and object deletion/memory deallocation times.

Given the fact that GW2 creates, deletes many objects and uploads large amounts of data to the GPU in real-time, this setting can be very impactful on camera pan / dynamic object scenes.

Increasing persistent object amounts will increase RAM and VRAM usage!

Note that there is currently no memory limit checking inside of d912pxy, setting this value too high can create unwanted memory swapping!

vstream_alloc_step

Size of the memory region in megabytes allocated for vertex stream objects to feed from.

Default: 16

Valid values: 0 - 1024.

Comment:

Use default values or configure according to your hardware's capabilities.

If you experience small hitches, try lowering this value.

Very high values (>256) can negatively affect performance.

Setting this value to 0 will increase RAM and VRAM commitment.

vstream_limit

Amount of memory in megabytes that the vstream pool will not unload.

Default: 256

Valid values: 0 - VRAM

Comment:

Almost the same option as "upload_limit" but for vstream objects.

Vstream objects are index buffers and vertex buffers.

While GW2 uses some buffer caching, this is not an optimal approach as many of those buffers are destroyed/created on interframe.

Increasing persistency limit on these objects will help on camera pan and heavy dynamic scenes.

Increasing the amount of persistent objects amounts will increase RAM and VRAM usage!

Note that there is currently no memory limit checking inside of d912pxy, setting this setting to high can create unwanted memory swapping!

surface_alloc_step

Size of the memory region in megabytes allocated for texture objects to feed from.

Default: 0

Valid values: 0 - 1024.

Comment:

If set above 0 heavy memory fragmentation trashing occurs, don't use it!

surface_limits

Pooling limits for surfaces.

Default: 00000

Valid values:

String formatted as: "WXXXX"

W - Overflow object deletion - if this part is set to 1, d912pxy will remove non-persistent objects instantly on post-frame cleanup instead of collecting objects in a delayed cleanup thread.

XXXX - Hex-formatted amount of objects to remain persistent for every width-height-format-mipLevels-rt/ds "keyed" surface

Comment:

This option works in the same manner as other limits, but has a slight difference.

Games use many surfaces with different widths, heights, formats, mip levels and even types.

This creates large amounts of unique groups that can't be easily categorized to create a config string.

Instead of a per group config, this config value is global for all surface pooling groups!

Due to wildly varying surface object sizes (from 1x1x1bpp to 1024*1024*32bpp), changing this config option will greatly increase VRAM and RAM usage while ultimately reducing frame stutter and lag.

DO NOT TOUCH THIS VALUE IF YOU HAVE LESS THEN 16 GB RAM / 4-8 GB VRAM

lifetime

Time in ms an object is held in memory before deletion.

Default: 10000

Valid values: 0 - INF

Comment:

Increasing this value will lead to objects being kept in memory for longer periods after they are put into the GC queue, increasing memory usage but lowering object recreation lag.

Decreasing this will increase object recreation lag but reduce memory usage.

host_va_reserve

Amount of virtual address space reserved for vstream/surface CPU side copy in 2^X bytes.

Default: 37

Valid values: 35 - 63

Comment:

Every vstream and surface object (texture) will take memory from this reserved virtual address space.

Change this value if you encounter "out of memory" crashes related to VA tables as long as there was still unused RAM available.

keep_resident

Controls pooled object residency rules

Default: 0

Valid values: 0 / 1

Comment:

If set to 0 and an object in pool is released, but not deleted, it will be marked for unloading from VRAM. This will decrease VRAM usage, but add some stuttering when VRAM usage is more than GPU driver wants to keep the game at.

If set to 1, it will not be marked for unloading. This will increase VRAM usage, but reduce some stuttering on high enough VRAM usage levels.

Setting this value to 1 while having less VRAM than the game will use will lead to an out of memory crash.

[samplers]

Configuraion of texture samplers.

min_lod

Minimum texture MIP level to use.

Default: 0

Valid values: 0 - INF

Comment:

The higher this value is set to, the lower the resolution of rendered textures.

Settting this to a high value will reduce texture lookup to a single value making things look a lot blurrier (like a cheap mobile game). This will also make texture lookup less resource heavy, which translates to a lower GPU usage.

[cleanup]

Defines behavior of the cleanup thread.

period

Time between cleanup runs.

Default: 10000

Valid values: 0 - INF

Comment:

Increasing this value will help to keep some objects in the GC queue for a longer time and in turn increase RAM usage, reducing recreation lag and also reducing CPU usage.

Decreasing this value will reduce RAM usage but increase CPU usage and recreation lag.

subsleep

Time to wait after object deletion.

Default: 50

Valid values: 0 - INF

Comment:

This value defines the time to wait in ms between object deletions to fight off batch-like deconstruction (which would create lots of lag).

Very high values (>1000) and very low values (<50) can negatively affect performance.

Setting this value too high can create an endless cleanup loop that will greatly reduce performance!

soft_limit

Threshold value for the amount of objects inside the GC queue to trigger no-subsleep cleanups.

Default: 3000

Valid values: 0 - INF

Comment:

When the number of objecs inside the GC queue reaches or exceeds the specified value, the GC will stop performing subsleep waits after object deletion, which will clear memory faster at the cost of increased CPU usage.

Increasing this value will increase RAM and VRAM usage, while lowering CPU based stutters.

Lowering this value will decrease RAM and VRAM usage, while inducing CPU based stutters.

hard_limit

Threshold value for the amount of objects inside the GC queue to trigger forced cleanups.

Default: 4000

Valid values: 0 - INF

Comment:

When the number of objecs inside the GC queue reaches or exceeds the specified value, the GC will perform forced cleanups.

Forced cleanups ignore object lifetime and delete it right away without any waits.

Increasing this value will increase RAM and VRAM usage, while lowering CPU based stutters.

Lowering this value will decrease RAM and VRAM usage, while inducing CPU based stutters.

after_reset_maid

Controls how many full cleanups will be performed after a device reset call.

Default: 2

Valid values: 0 - INF

Comment:

If set to a value greater than 0 it will trigger full GC clean N times after device reset is called.

RAM usage will be lower on map changes/videomode changes/etc, however some lags may be incurred after such actions.

Increasing this value will decrease RAM and VRAM usage, while inducing CPU based stutters.

Lowering this value will increase RAM and VRAM usage, while lowering CPU based stutters.

[sdb]

Shader database configuration

allow_pp_suffix

Allow the HLSL recompiler to use pp suffix.

Default: 1

Valid values: 0 / 1

Comment:

Helps with shader debugging.

force_unused_regs

Forces HLSL recompiler to define unused registers.

Default: 0

Valid values: 0 / 1

Comment:

Obsolete - do not use.

nan_guard_flag

Defines how to handle DX9 NaN behavior.

Default: 81

Valid values: 0 - 255

Comment:

This is a bit field defining a number of flags for the HLSL recompiler.

Bit 0 - if set will prevent RCP opcode returning INF in VS
Bit 1 - if set will prevent RSQ opcode returning INF in VS
Bit 2 - if set will cull vertexes with NaN position
Bit 3 - if set will prevent NRM opcode returning NaN in VS
Bit 4 - if set will prevent RCP opcode returning INF in PS
Bit 5 - if set will prevent RSQ opcode returning INF in PS
Bit 6 - if set will ignore pixels with NaN color
Bit 7 - if set will prevent NRM opcode returning NaN in PS

This will only take effect after a shader cache cleanup.

precompile_limit

Limit of how many shaders will be precompiled on startup.

Default: 10000

Valid values: 0 - INF

Comment:

Increasing this value will reduce object pop-ins, but increase RAM usage and game startup time.

[replay]

Replay feature configuration.

replay

Replay multithreading behavior configuration.

Default: 1

Valid values: 0 / 1

Comment:

Setting this value to 1 will enable multithreaded replay.

Setting this value to 0 will use passthrough replay (currently not working - may only be enabled at compile time). This will reduce RAM and CPU usage but increase overall API overhead on the render thread.

replay_threads

Amount of replay threads.

Default: 1

Valid values: 1 - 4

Comment:

Increasing this value mostly helps to increase FPS in case of low draw call amounts per frame (e.g. when playing on low graphics settings). This will also help to parallelize the load on CPUs with lower single-thread performance.

Setting this value to something greater than 1 requires a powerfull GPU! If you are hitting 100% GPU usage with 30 FPS when looking at the sky, revert this value back to 1!

items_per_batch

Amount of replay items allocated for every draw call.

Default: 100

Valid values: 10 - How much your RAM can handle

Comment:

Expect crashes if set to a lower value than the average amount of replay commands required for the game.

Expect an increased base usage of RAM if set to a higher value.

[mt]

Configuration of multithreading related features.

vstream_ctor

Enables the offloading of the vstream constructor.

Default: 1

Valid values: 0 / 1

Comment:

Offloads constructors to the upload thread if set to 1. This will help to snag some lag time off of the render thread (~3ms spikes).

surface_ctor

Surface constructor offload

Default: 1

Valid values: 0 / 1

Comment:

Offloads surface construction of textures to the upload thread if set to 1. This will help to snag some lag time off of the render thread (~8-37ms spikes).

dxc_threads

Defines the amount of provisioned DXC threads for shader compilation.

Default: -1

Valid values: -1 - INF

Comment:

Setting this value to -1 will have d912pxy determine an appropriate amount of DXC threads to provision at runtime based on your CPU's logical thread count (current default calculation formula: (logical core count - 2) / 2).

Note that additional DXC threads are CPU heavy.

pso_threads

Defines the amount of provisioned PSO threads for PSO creation.

Default: -1

Valid values: -1 - INF

Comment:

Setting this value to -1 will have d912pxy determine an appropriate amount of PSO threads to provision at runtime based on your CPU's logical thread count (current default calculation formula: logical core count / 2).

[log]

p7config

P7 init string.

Default: /P7.Pool=32768 /P7.Sink=FileBin

Valid values: Refer to http://baical.net/p7.html for a manual on the init string

Comment:

Used in the debug, Release_pp and Release_d builds of d912pxy.

Logs will be saved to the p7logs directory by default.

Removing the P7.Sink parameter will lead to logs being redirected to an active p7 logserver running on localhost.

perf_graph

Enables FPS vs draw calls graph saving on exit.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 0 will disable graph collection & saving.

Setting this value to 1 enables it and will save performance metrics in a performance_graph.png file.

dbg_mem_mgr_save_new_caller

Allow memory manager to save operator new callers.

Default: 0

Valid values: 0 / 1

Comment:

Debug build only high-overhead setting - use this only for troubleshooting memory related issues.

enable_veh

Defines vectored exception handler usage.

Default: 1

Valid values: 0 / 1

Comment:

Set to 0 if you want to supress debug/crash messages output to crash.txt.

As write to crash.txt is unbuffered setting this to 0 will help with preformance if there are many messages in crash.txt.

Do not report crashes with this option set to 0!

load_rdoc

Allows d912pxy to load RenderDoc.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 1 will make d912pxy try to load renderdoc.dll on startup. May be useful for debugging purposes.

[upload]

Upload threads configuration.

tex_async

Async texture upload queue.

Default: 0

Valid values: 0 - INF

Comment:

Defines the maximum length of async texture load queue. Set0 to disable.

A value greater than 0 will keep textures on the upload queue if the frame is rendered before that queue is empty.

A Range between 5-10 is recommended. Setting this to a too large value can create memory trashing if your CPU can't keep with upload requests from the game.

[batching]

Specifies options for GPU data batching algorithm.

force_new

Controls batch data set reusage

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 1 will have d912pxy force making a new batch on every draw call. Setting this value to 0 will have d912pxy reuse reuse a batch if no data is written to GPU between draw calls. This will increase performance, while probably causing some rare GPU crashes(in BnS) - set this value to 1 if you experience them.

raw_gpuw

Controls how GPU data writes are processed.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 0 will use delta compression on the CPU and unpack on the GPU.

Setting this value to 1 will use will use simple memory copy on the CPU and read it on the GPU.

Use 1 if you are GPU bottlenecked.

maxWritesPerBatch

Defines the maximum amount of GPU write operations in one batch.

Default: 128

Valid values: 1 - INF

Comment:

Space that is allocated for GPU writes in the batch buffer - affects baseline RAM usage.

Setting a too low value can lead to crashes.

maxBatchesPerIFrame

Defines the maximum amount of max batches in an internal frame.

Default: 8192

Valid values: 1 - INF

Comment:

This value limits the amount of batches in am internal frame - affects baseline RAM as well as VRAM usage.

Low values might negatively impact performance and cause "batches in one frame exceeded PXY_INNER_MAX_IFRAME_BATCH_COUNT, performing queued commands now" errors to be reported in the log.txt.

Large values may improve performance - especially in complex or unoptimized areas - by alleviating the above error. This setting is especially useful for users with ultrawide screens.

Setting a too low value may lead to crashes.

[dx]

debug

Enable DX12 debug runtime.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 1 will load the debug runtime of DX12 and DXGI, allowing you to record/debug various error/info messages.

Do not set to this value to 1 for normal usage as it will greatly increase CPU, RAM, VRAM and GPU usage as well as the general API overhead!

dxgi_frame_latency

Enables and configures DXGI frame latency feature.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 0 disables swapchain waits.

Any other set value enables swapchain waits and d912pxy will attempt to set the specified value as the maximum frame latency.

route_to_dx9

Use an internal DX9 proxy to record a DX9 performance graph.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 1 will let d912pxy run in dx9 mode and record an "FPS vs Draw Calls" graph to d912pxy/dx9_perf_graph.html.

[misc]

Miscellaneous settings without any specific category.

gpu_timeout

GPU execute timeout time in ms.

Default: 5000

Valid values: 0 - INF

Comment:

Windows DXGI can lock up the system's videofeed (it is 2019, welcome to the club!), so d912pxy tracks and resets a locked thread.

This lockup can occur if something like RenderDoc is capturing a frame.

This could also trigger in an unintended manner if your GPU can't handle rendering a given frame (with the default value, this would occur if you drop down to or lower than 0.2 FPS).

Setting this value too low will increase the possibility of unintentionally triggering thread resets.

Setting this value too high will increase the delay on fullscreen focus switch while preventing false triggers.

nv_disable_throttle

Allows to disable nvidia power throttle.

Default: 0

Valid values: 0 / 1

Set this value to 1 to disable nvidia gpu dynamic power managment.

WARNING: This option is unsafe as it will leave your GPU in a high-power state for an undefined period of time if the game crashes.

Revert to the default value to keep things intact.

[compat]

This section encompasses various compatibility settings.

occlusion

Defines how the occlusion query is being executed.

Default: 1

Valid values: 0-3

Comment:

If this value is set to 0 it will not execute the query and just returns 0 on all query results.

If this value is set to 1 it will not execute the query and just returns 1 on all query results.

If this value is set to 2 or 3 it will execute the query.

Query execution will create large amounts of pipeline stalls - your maximum achievable FPS will greatly decrease!

occlusion_opt_ctor

Default: 0

Comment:

Undocumented.

clear

Defines how the render target and depth/stencil surfaces is being cleared.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 0 will perform passthrough call to dx12 - low CPU overhead, probably GPU stalls

Setting this value to 1 will perform draw call based emulated surface clear - more CPU overhead, less GPU stalls

Try to set this to 1 if you see unnatural GPU load.

cpu_api_reduction

Manages extra CPU based graphics API calls reduction.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 0 will make some calls be passed to dx12 directly without extra checks. This will lead to less CPU but a higher GPU overhead.

Setting this value to 1 will add CPU based checks prior to passing calls to dx12. This will lead to a higher CPU but less GPU overhead.

This option only has any impact if the application API stream is bloated with reduntant calls.

batch_commit

Defines what type of draw call submissions will be used.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 0 will use the default passthrough like submissions.

Setting this value to 1 will use more CPU hungry state-checking submissions.

Set this value to 1 if you see instancing overdraw / wrong geometry.

omrt_viewport_reset

Enables additional viewport reset on render target switch.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 0 will not perform viewport reset on render target switch.

Setting this value to 1 will perform an aforementioned reset.

Viewport reset on render target switch is default DX9 behavior, but some applications always set viewport on render target switch through their own code.

track_rs

Default: 0

Comment:

Undocumented.

unsafe_dup

Controls Draw*PrimitiveUP safety checks.

Default: 0

Valid values: 0 / 1

Comment:

Setting this value to 1 will cut out vstream binds push/pop.

Setting this value to 0 will keep it.

If the game's API stream ensures IB/VS/Freq reset after DUP calls, this can be set 1 to cut some overhead. Otherwise keeping this value at 0 is recommended.

dheap_mode

Default: 0

Comment:

Undocumented.

explicit_d3dcompiler_dll

Default: 0

Comment:

Undocumented.

[vfs]

root

Defdh.

Default: ./d912pxy/pck

Valid values: Any valid path

Comment:

Change it if you want to keep "*.pck" files somewhere else or to load them from other path.

memcache_mask

Default: 63

Valid values: Any hex value

Comment:

Mask to define which "*.pck" files should be memcached on startup.

Bits to "*.pck" list:

0x1 - shader_cso

0x2 - shader_profiles

0x4 - pso_cache

0x8 - pso_precompile

0x10 - shader_sources

0x20 - derived_cso_vs

0x40 - derived_cso_ps

pack_data

Default: 0

Comment:

Undocumented.

write_mask

Default: 0

Valid values: Any hex value

Comment:

Mask to define which VFS group will be in ready only mode

0x1 - shader_cso

0x2 - shader_profiles

0x4 - pso_cache

0x8 - pso_precompile

0x10 - shader_sources

0x20 - derived_cso_vs

0x40 - derived_cso_ps

[extras]

enable

Enables/Disables extra features.

Default: 0

Valid values: 0 / 1

Comment:

If this value is set to 0 none of the extra features listed below will be enabled. If this value is set to 1 features enabled in this config section will be initialized.

Note that the overlay's visibility cannot be toggled during play if the above value is set to 0 during launch. As such, there is currently no default hidden-state option available.

Expect a performance regression when using all of the extra features described in the following.

fps_limit

Controls the FPS limiter.

Default: 0

Valid values: 0 - 1000

Comment:

If set to a value other than 0 d912pxy will limit max FPS to the specified value.

fps_limit_inactive

Default: 0

Comment:

Undocumented.

show_fps

Shows fps counter in overlay.

Default: 0

Valid values: 0 / 1

show_draw_count

Shows draw count in overlay

Default: 0

Valid values: 0 / 1

Comment:

Shows draw count and batch count in the overlay. Batch count can be lower if some of batch data is reused.

Actual FPS depends more on batch count than on pure draw count.

show_fps_graph

Shows FPS graph

Default: 0

Valid values: 0 / 1

Comment:

Shows simple FPS-vs-time graph inside the overlay.

show_timings

Shows internal timings

Default: 0

Valid values: 0 / 1

Comment:

Currently will show time spent in Present call.

This time is equal to the sum of thread sync time and gpu wait time.

show_pso_compile_que

Shows PSO compile queue length

Default: 0

Valid values: 0 / 1

Comment:

Shows how many PSO items are queued for compilation on the PSO compile thread.

If this value is not 0 some draws are skipped while shaders are recompiled and loaded in.

If this value is stuck at a high number - even after relaunching the game - consider increasing the precompile_limit.

show_gc_que

Shows cleanup thread queue length

Default: 0

Valid values: 0 / 1

Comment:

Shows how much objects are on cleanup thread queue.

This value and its behavior can vary depending on the configuration of pooling- and cleanup-sections related settings.

If you experience too much RAM or VRAM usage and this value is high, consider changing pooling and cleanup configurations to use less RAM and VRAM.

overlay_toggle_key

Defines the enum value to a keyboard key which toggles d912pxy extra's overlay visibility in-game when pressed together with LeftCtrl + LeftAlt keys as modifiers.

Default: 78 (corresponds to the "N" key)

Comment:

Requires the "extras" setting to be enabled.

Note that there are three states for the overlay, which the hotkey combination will cycle through: Hidden, Read-Only and Edit.

fps_graph_max

Defines the upper bound of the plotted fps graph with regards to FPS.

Default: 80

fps_graph_min

Defines the lower bound of the plotted fps graph with regards to FPS.

Default: 0

fps_graph_w

Defines the width of the plotted fps graph in pixels.

Default: 512

fps_graph_h

Defines the height of the plotted fps graph in pixels.

Default: 256

enable_config_editor

Enables an in-game d912pxy config editor.

Default: 0

Valid values: 0 / 1

Comment:

Adds the functionality to edit d912pxy's configuration inside the overlay.

If any of the other "show_*" extras is enabled, a button to access the config editor will appear when the overlay is in edit mode. Otherwise, it will be the initial overlay window.

You need to restart the game in order for the applied config changes to go into effect.

show_first_install_message

This default value intends to make sure that new users of d912pxy are greeted by the d912pxy overlay to signal a successful installation upon first launch of the game.

Default: 1

Comment:

Upon first game launch the value is automatically set to 0 to disable the notification on future game launches. There is usually no need manually revert this value back to 1.

iframe_mod_source

Default: none

Comment:

Undocumented.

(Note that the above default value is the literal default value)

shader_pair_tracker

Default: 0

Comment:

Undocumented.

spair_source

Default: none

Comment:

Undocumented.

(Note that the above default value is the literal default value)

[end]

This marks end of config file - DO NOT TOUCH THIS SECTION.

Clone this wiki locally