-
Notifications
You must be signed in to change notification settings - Fork 91
Custom configuration
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:
- [pooling]
- [samplers]
- [cleanup]
- [sdb]
- [replay]
- [mt]
- [log]
- [upload]
- [batching]
- [dx]
- [misc]
- [compat]
- [vfs]
- [extras]
- [end]
Configures pooling mechanism limitations and related behavior.
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.
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!
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.
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!
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!
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
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.
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.
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.
Configuraion of texture samplers.
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.
Defines behavior of the cleanup thread.
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.
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!
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.
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.
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.
Shader database configuration
Allow the HLSL recompiler to use pp suffix.
Default: 1
Valid values: 0 / 1
Comment:
Helps with shader debugging.
Forces HLSL recompiler to define unused registers.
Default: 0
Valid values: 0 / 1
Comment:
Obsolete - do not use.
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.
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 feature configuration.
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.
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!
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.
Configuration of multithreading related features.
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 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).
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.
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).
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.
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.
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.
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!
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 threads configuration.
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.
Specifies options for GPU data batching algorithm.
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.
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.
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.
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.
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!
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.
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.
Miscellaneous settings without any specific category.
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.
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.
This section encompasses various compatibility settings.
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!
Default: 0
Comment:
Undocumented.
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.
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.
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.
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.
Default: 0
Comment:
Undocumented.
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.
Default: 0
Comment:
Undocumented.
Default: 0
Comment:
Undocumented.
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.
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
Default: 0
Comment:
Undocumented.
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
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.
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.
Default: 0
Comment:
Undocumented.
Shows fps counter in overlay.
Default: 0
Valid values: 0 / 1
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.
Shows FPS graph
Default: 0
Valid values: 0 / 1
Comment:
Shows simple FPS-vs-time graph inside the overlay.
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.
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.
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.
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.
Defines the upper bound of the plotted fps graph with regards to FPS.
Default: 80
Defines the lower bound of the plotted fps graph with regards to FPS.
Default: 0
Defines the width of the plotted fps graph in pixels.
Default: 512
Defines the height of the plotted fps graph in pixels.
Default: 256
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.
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.
Default: none
Comment:
Undocumented.
(Note that the above default value is the literal default value)
Default: 0
Comment:
Undocumented.
Default: none
Comment:
Undocumented.
(Note that the above default value is the literal default value)
This marks end of config file - DO NOT TOUCH THIS SECTION.