-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathd3dx.ini
1160 lines (1020 loc) · 54.9 KB
/
d3dx.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
; ------------------------------------------------------------------------------------------------------
; Additional configuration files
; ------------------------------------------------------------------------------------------------------
[Include]
; If you were using 3DMigoto as a full modding platform for a given game
; instead of just a single stand-alone mod (e.g. facilitating mesh/texture
; replacements or other graphics mods), you can include an entire directory
; where users can extract third party mods created by others and 3DMigoto will
; include every .ini file and any external files referred to by CustomShader /
; Resource sections (Replaced shaders in these mods should still go in
; ShaderFixes for now, unless the modders want to use CustomShaders or
; ShaderRegex to keep them standalone).
;include_recursive = Mods
include_recursive = Mods
; Uncomment to enable a custom shader that allows the stereo output mode to be
; upscaled. NOTE: uncomment only if 'upscaling' and resolution are not zero in
; the [Device] section.
;include = ShaderFixes\upscale.ini
; Uncomment to enable a custom shader that implements a software mouse cursor.
; Use in games that use a hardware cursor if you want to be able to adjust the
; stereo depth of the mouse, or to work with the below 3DVision2SBS shader.
; Note that this shader has a higher latency than the hardware cursor!
;include = ShaderFixes\mouse.ini
; Uncomment to enable a custom shader that allows the stereo output mode to be
; changed to Side-by-Side or Top-and-Bottom via the F11 key. If you are using
; SLI and this isn't working properly (partially blank or stuck image) you may
; need to also set StereoFlagsDX10 = 0x00000008 in the [Profile] section. You
; can set a default mode by altering $\ShaderFixes\3dvision2sbs.ini\mode in the
; [Constants] section:
;include = ShaderFixes\3dvision2sbs.ini
;------------------------------------------------------------------------------------------------------
; Logging options.
; Comment line or set value to 0 for no logging.
;------------------------------------------------------------------------------------------------------
[Logging]
; Log all API usage
calls=1
; Log Input key actions
input=1
; Super verbose massive log
debug=0
; Unbuffered logging to avoid missing anything at file end
unbuffered=0
; Force the CPU affinity to use only a single CPU for debugging multi-threaded
force_cpu_affinity=0
; Log NVAPI convergence modifications
convergence=1
; Log NVAPI separation modifications
separation=1
; Enable 3DMigoto's deadlock detection algorithm. If you get hangs (not
; crashes) this might help find out why.
debug_locks=0
; Enable 3DMigoto's crash handler to flush the log and write out a minidump
; file in the event the game crashes. If the game hangs rather than crashes you
; can manually invoke the handler by holding down Ctrl+Alt+F11 until you hear
; the SOS tones:
crash=0
; ------------------------------------------------------------------------------------------------------
; Command list to run on launch / after config reload.
; ------------------------------------------------------------------------------------------------------
[Constants]
; Declare named global variables here to use them from other command lists,
; [Key] bindings and [Preset]s. Named variables are namespaced so that any
; included ini files can use their own without worrying about name clashes:
;global $my_named_variable = 0.0
; Mark a variable as persist[ent] to automatically save it to the
; d3dx_user.ini on exit or F10 (config_reload). Use Ctrl+Alt+F10
; (wipe_user_config) to discard persistent values:
;global persist $some_persistent_variable = 1
; Set the initial value of "IniParams" variables, which are accessible from
; within shaders, but they are not namespaced and too many can become unwieldy:
;x = 0.8
;y = 1.0
;z = 1.2
;w = 2.0
;y1 = 3
; This is used by the 3DVision2SBS custom shader. To use, find the [Include]
; section above and uncomment the 'include = ShaderFixes\3dvision2sbs.ini'
; line. F11 will cycle between these modes while playing, and the current
; value will be automatically saved to the d3dx_user.ini on exit / F10:
; 0 = Regular 3D Vision
; 1 = Reversed 3D Vision
; 2 = Side by Side
; 3 = Reversed Side by Side
; 4 = Top and Bottom
; 5 = Reversed Top and Bottom
; 6 = Line interlacing
; 7 = Reversed Line interlacing
;$\ShaderFixes\3dvision2sbs.ini\mode = 0
;------------------------------------------------------------------------------------------------------
; Custom settings override for any of [convergence, separation, x, y, z, w]
;
; Four types are supported - by default the bindings will simply load the
; configured settings, but type=hold can be specified to have a preset
; active while the button is held, type=toggle can be used to make a simple
; on/off toggle, and type=cycle can be used to cycle forwards and/or backwards
; between several presets.
;
; Delays (type=hold only) and linear or cosine trasition periods (any key type)
; can be used to better synchonrise setting changes to the game's animations,
; or to smoothly adjust UI elements over a short period of time.
;
; Key bindings: For A-Z and 0-9 on the number row, just use that single
; character. For everything else (including mouse buttons), use the virtual key
; name (with or without the VK_ prefix) or hex code from this article:
; http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
;
; Key combinations can be specified by separating key names with spaces, e.g.
; "Shift Q". It is also possible to indicate that a key must *not* be held for
; the binding to activate, e.g. "NO_ALT F1" would prevent the binding from
; activating when taking a 3D Screenshot with Alt F1. "NO_MODIFIERS" may be
; used as a shorthand for excluding all standard modifiers (Ctrl, Alt, Shift,
; Windows).
;
; Keys can also be from XBox controllers using:
; XB_LEFT_TRIGGER, XB_RIGHT_TRIGGER,
; XB_LEFT_SHOULDER, XB_RIGHT_SHOULDER,
; XB_LEFT_THUMB, XB_RIGHT_THUMB,
; XB_DPAD_UP, XB_DPAD_DOWN, XB_DPAD_LEFT, XB_DPAD_RIGHT,
; XB_A, XB_B, XB_X, XB_Y, XB_START, XB_BACK, XB_GUIDE
; By default all attached controllers are used - to associate a binding with a
; specific controller add the controller number 1-4 to the prefix, like
; XB2_LEFT_TRIGGER, though this may be more useful for hunting than playing.
;
; Multiple keys may be set in a single [Key] section to allow keyboard and xbox
; controller toggles and cycles to share the same state as each other.
;------------------------------------------------------------------------------------------------------
; Example for changing default settings
;[KeyBasicExample]
;Key = z
;separation = 100.0
;convergence = 4.0
;x = 0.98
; Named variables declared in [Constants] can be set here:
;$my_named_variable = 2
; Example to support momentary hold type overrides, like aiming. Shows how to
; bind two separate buttons to the same action.
;[KeyMomentaryHoldExample]
;Key = RBUTTON
;Key = XB_LEFT_TRIGGER
;convergence = 0.1
;type = hold
; Example for a toggle override that remembers the previous value and restores
; it automatically when pressed a second time.
;[KeyToggleExample]
;Key = q
;separation = 0.1
;type = toggle
;y = 0.0
; Example for using a smart cycle type instead of a toggle. Smart is now the
; default for cycles, and when activated it will quickly check if the current
; values match its current cycle preset and resynchronise if necessary. This is
; better than type=toggle if you always want to toggle between exactly two
; values specified here, while type=toggle is better if you want to remember
; some arbitrary current value and return to it:
;[KeySmartCycleExample]
;Key = w
;type = cycle
;smart = true
;$some_variable = 0, 1
; Example for a momentary hold, but with a delay followed by a smooth
; transition (ms) on hold and release to sync better with the game. Note that
; delay only works with type=hold (for now), while transitions will work with
; all types.
;[KeyDelayAndTransitionExample]
;Key = RBUTTON
;Key = XB_LEFT_TRIGGER
;type = hold
;y = 0.25
;delay = 100
;transition = 100
;transition_type = linear
;release_delay = 0
;release_transition = 500
;release_transition_type = cosine
; Example of a cycle transition that might be used to provide several presets
; that set both convergence and UI depth to suit different scenes in a game.
; Cosine transitions are used to smooth the changes over 1/10 of a second.
; Both keyboard and Xbox controller buttons are bound to this same cycle, so
; that they can be used interchangeably and remember the same position in the
; preset list. A second key is used to cycle backwards through the presets, and
; wrapping from one end of the list to the other is disabled.
;[KeyCycleExample]
;Key = E
;Key = XB_RIGHT_SHOULDER
;Back = Q
;Back = XB_LEFT_SHOULDER
;type = cycle
;wrap = false
;convergence = 1.45, 1.13, 0.98
;z = 0.25, 0.5, 0.75
;transition = 100
;transition_type = cosine
; Keys can only directly set variables to simple values. If you want to do
; something more advanced, you may need to call a command list from the key
; binding. type=hold/toggle keys will run the post phase of the command list on
; release.
;[KeyCommandListExample]
;key = f
;run = CommandListF
;[CommandListF]
;if $foo == 0 && cursor_showing
; $foo = $bar * 3.14 / rt_width
;else
; $foo = 0
;endif
; Example of a preset override that can be referenced by one or more [ShaderOverride*]
; sections which can be activated / deactivated automatically when one of the shader
; overrides is activated / deactivated. This is useful for setting automatic
; convergence for specific scene.
;[PresetExample]
;convergence = 0
;$some_variable = 1
;transition = 100
;transition_type = linear
;------------------------------------------------------------------------------------------------------
; Shader hunting options.
; Default setup is to use keyboard similar to Helix presets
;------------------------------------------------------------------------------------------------------
[Hunting]
; 0: Release mode is with shader hunting disabled, optimized for speed.
; 1: Hunting mode enabled
; 2: Hunting mode "soft disabled" - can be turned on via the toggle_hunting key
hunting=2
; Highlight mode of currently selected shader / rendertarget.
; "skip" = skip shader. don't render anything using the currently selected shader.
; "original" = fall back to original shader if the currently selected shader was patched.
; "pink" = make the output hot pink to make it standout.
; "mono" = disable stereo for the selected shader / rendertarget.
marking_mode=skip
; Cycle through available marking modes. VK_DECIMAL VK_NUMPAD0
; means hold the dot on the number pad while pressing numpad 0:
next_marking_mode = no_modifiers VK_DECIMAL VK_NUMPAD0
; What action(s) to take when marking a selected shader/buffer
; "hlsl" = decompile shader to HLSL and copy to ShaderFixes
; "asm" = disassemble shader and copy to ShaderFixes (if hlsl is disabled or failed)
; "regex" = output ShaderRegex patched shader if applicable (NOTE: Will lose associated command list)
; "clipboard" = copy shader/buffer hash to clipboard
; "mono_snapshot" = take mono screenshot (previously called mark_snapshot=1)
; "stereo_snapshot" = take stereo screenshot (previously called mark_snapshot=2)
; "snapshot_if_pink" = limit mono/stereo_snapshot to when marking_mode=pink
marking_actions = clipboard regex hlsl asm stereo_snapshot snapshot_if_pink
; Key bindings: For A-Z and 0-9 on the number row, just use that single
; character. For everything else (including mouse buttons), use the virtual key
; name (with or without the VK_ prefix) or hex code from this article:
; http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
;
; XBox controllers are supported using the same bindings as the [Key] sections
; (see above). If the game already uses the first controller you might try
; using the second controller for hunting with e.g. XB2_LEFT_SHOULDER
; rotate through all VISIBLE pixel shaders at the current scene.
previous_pixelshader = no_modifiers NO_VK_DECIMAL VK_NUMPAD1
next_pixelshader = no_modifiers NO_VK_DECIMAL VK_NUMPAD2
mark_pixelshader = no_modifiers NO_VK_DECIMAL VK_NUMPAD3
; rotate through all VISIBLE vertex shaders at the current scene.
previous_vertexshader = no_modifiers NO_VK_DECIMAL VK_NUMPAD4
next_vertexshader = no_modifiers NO_VK_DECIMAL VK_NUMPAD5
mark_vertexshader = no_modifiers NO_VK_DECIMAL VK_NUMPAD6
; rotate through all USED index buffers at the current scene.
previous_indexbuffer = no_modifiers NO_VK_DECIMAL VK_NUMPAD7
next_indexbuffer = no_modifiers NO_VK_DECIMAL VK_NUMPAD8
mark_indexbuffer = no_modifiers NO_VK_DECIMAL VK_NUMPAD9
; rotate through all USED vertex buffers at the current scene.
previous_vertexbuffer = no_modifiers NO_VK_DECIMAL VK_DIVIDE
next_vertexbuffer = no_modifiers NO_VK_DECIMAL VK_MULTIPLY
mark_vertexbuffer = no_modifiers NO_VK_DECIMAL VK_SUBTRACT
; rotate through all USED render targets at the current scene.
;previous_rendertarget = no_modifiers VK_INSERT
;next_rendertarget = no_modifiers VK_HOME
;mark_rendertarget = no_modifiers VK_PAGEUP
; rotate through all USED compute shaders at the current scene.
previous_computeshader = no_modifiers VK_DECIMAL VK_NUMPAD1
next_computeshader = no_modifiers VK_DECIMAL VK_NUMPAD2
mark_computeshader = no_modifiers VK_DECIMAL VK_NUMPAD3
; rotate through all VISIBLE geometry shaders at the current scene.
previous_geometryshader = no_modifiers VK_DECIMAL VK_NUMPAD4
next_geometryshader = no_modifiers VK_DECIMAL VK_NUMPAD5
mark_geometryshader = no_modifiers VK_DECIMAL VK_NUMPAD6
; rotate through all VISIBLE domain shaders at the current scene.
previous_domainshader = no_modifiers VK_DECIMAL VK_NUMPAD7
next_domainshader = no_modifiers VK_DECIMAL VK_NUMPAD8
mark_domainshader = no_modifiers VK_DECIMAL VK_NUMPAD9
; rotate through all VISIBLE hull shaders at the current scene.
previous_hullshader = no_modifiers VK_DECIMAL VK_DIVIDE
next_hullshader = no_modifiers VK_DECIMAL VK_MULTIPLY
mark_hullshader = no_modifiers VK_DECIMAL VK_SUBTRACT
; Re-enable shaders once done with hunting:
done_hunting = NO_MODIFIERS NO_VK_DECIMAL VK_ADD
; Screenshot as pns
take_screenshot = no_modifiers VK_SNAPSHOT
; reload all fixes from ShaderFixes folder
reload_fixes = no_modifiers VK_F10
; Key to turn hunting itself on/off. This will also show/hide overlay.
; Hunting must be set to either 1 or 2 to enable this toggle.
toggle_hunting = no_modifiers NO_VK_DECIMAL VK_NUMPAD0
; Key to reload the settings from the d3dx.ini without restarting. This can
; be the same key as reload_fixes for convenience, or a different key may be
; used to avoid resetting the ini parameters every time the shaders are
; reloaded. Note that not all settings can be reloaded, so if something doesn't
; work as expected you may still have to restart the game:
reload_config = no_modifiers VK_F10
; Deletes the d3dx_user.ini file and reloads settings to get a "clean slate"
wipe_user_config = ctrl alt no_shift VK_F10
; Hold this key to temporarily disable the fix - useful to quickly check what
; an effect looked like in the original game.
show_original = no_modifiers VK_F9
; Shows the CPU utilisation and performance impact of every active command list
monitor_performance = ctrl no_shift no_alt F9
; Freeze the current performance monitor display and log to the d3d11_log.txt
freeze_performance_monitor = no_ctrl shift no_alt F9
; Sets how often the performance monitor updates
monitor_performance_interval = 2.0
; Auto-repeat key rate in events per second.
repeat_rate=6
; Enabling this makes the overlay show the hashes of the currently selected
; shaders and index buffer during hunting. We don't actually recommend this,
; because writing down the hash from the screen is a bad habbit that tends to
; be very error prone - the recommended workflow is to dump the shaders to disk
; and check the most recently modified file in ShaderFixes, but advanced users
; can enable this if they want it:
verbose_overlay = 1
; tunable parameter to use in modified shaders as variable (StereoParams.Load(int3(1,0,0)).xyzw)
; enabling tuning results in a small performance hit because the parameter texture
;tune_enable=1
;tune_step=0.1
;tune1_up=VK_INSERT
;tune1_down=VK_DELETE
;tune2_up=X
;tune2_down=Z
; Dumps out a flight log of DirectX state changes and the contents of each
; render target after every immediate draw call for the next frame. Takes up a
; large amount of space, so disabled by default.
;analyse_frame = no_modifiers VK_F8
; analyse_options specifies options for the frame analysis feature. Options can
; be combined by separating them with a space.
;
; Dumping selection (also refer to the "dump" command described below):
; dump_rt: Dumps render targets and UAVs
; dump_depth: Dumps depth/stencil targets
; dump_tex: Dumps shader resources (textures)
; dump_cb: Dumps constant buffers
; dump_vb: Dumps vertex buffers
; dump_ib: Dumps index buffers
;
; Texture2D format selection:
; jpg/jps: Dumps out 2D/stereo resources as .jps files. These are the easiest
; to work with and don't take up as much space as DDS files, but
; they are not dumped for every resource and are missing some data.
; dds: Dumps out 2D/stereo resources as .dds files. WARNING: This option
; may require hundreds of gigabytes and a long time! Only use it if
; you absolutely need more information than you can get otherwise.
; jps_dds: Dumps out .jps when possible, .dds otherwise (default).
; desc: Dumps out DirectX resource descriptions to .dsc files.
;
; Buffer format selection:
; buf: Dumps out buffers as binary .buf files
; txt: Decodes buffers as text, and includes some extra metadata not
; found in the .buf files. May not correctly decode all buffers.
; Default if dump_cb/vb/ib was specified.
; desc: Dumps out DirectX resource descriptions to .dsc files.
;
; Misc options:
; hold: Continue analysing subsequent frames while the key is held
; clear_rt: Clears each render target the first time they are used in the
; frame. Makes it easier to see what is being drawn if the game
; doesn't clear them, but might cause some effects not to render.
; filename_reg: Normally the draw number is the first part of the filename so
; that the files will be sorted in the order they were used in
; the game. Sometimes it is more desirable to examine how a
; specific output changed through the frame and this option will
; place the register number first in the filename to allow that.
; mono: Dump out mono textures instead of stereo. To dump both, specify
; 'mono stereo'. If neither are specified, defaults to stereo.
; dump_on_unmap: Dumps buffers/textures whenever the game maps them to the CPU
; with the Map() / Unmap() calls. Typically used to update
; constant buffers.
; dump_on_update: Dumps buffers/textures whenever the game updates them with
; the UpdateSubresource() call. Alternative method used to
; update constant buffers.
; share_dupes: Use a folder that is shared with subsequent frame analysis
; dumps for de-duplicating dumped resources. Makes future frame
; analysis dumps faster and use less disk space if there are a
; lot of identical textures, but less trivial to delete
; individual dump folders to reclaim disk space (i.e. all or
; nothing). Individual frame analysis folders are still
; de-duplicated regardless of this setting.
; symlink: Try to use symbolic links when de-duplicating files in a
; frame analysis dump. Requires developer mode to be enabled in
; Windows 10, and will fall back to hard links or shortcuts
; when not possible. Useful to see the relationship between
; deduplicated files, especially when working with cygwin, but
; some Windows applications may behave worse when using these.
;
; Experimental Deferred Context (multi-threaded rendering) Frame Analyis Support:
; deferred_ctx_immediate: Dumps resources from deferred contexts using the
; immediate context. Not suitable for dump_rt or other
; resources altered during the frame (by the GPU or CPU). May
; be ok for static unchanging resources, such as collecting HUD
; textures for filtering. Not thread safe - potential to crash.
; Recommended (not enforced) to use in conjunction with 'mono'.
; deferred_ctx_accurate: Delays dumping resources from deferred contexts
; until after the GPU has updated them. Copies of *all*
; resources being dumped are held in memory, so it may run out
; - try to restrict using this option to specific resources
; where it is needed - preferably via the "dump" command rather
; than the global analyse_options. Works with 'stereo'.
;
; analyse_options can also be specified in [ShaderOverride*] sections (or other
; command lists) to set up triggers to change the options mid-way through a
; frame analysis, either for a single draw call (default), or permanently (by
; adding the 'persist' keyword).
;
; Alternatively, "dump" can be specified in a [ShaderOverride*] section (or
; any other command list) to dump specific resources with per-resource options
; (e.g. "dump = dump_tex dds share_dupes mono ps-t0"), dump resources at a
; specific point in time (e.g. "pre dump = o0") or dump a custom resource that
; frame analysis cannot otherwise see (e.g. "dump = ResourceDepthBuffer"). Use
; additional "dump" commands to dump multiple resources.
;
;analyse_options = dump_rt jps clear_rt
;------------------------------------------------------------------------------------------------------
; Chain load other wrapper DLLs instead of system DLLs.
;------------------------------------------------------------------------------------------------------
[System]
;proxy_d3d9=d3d9_helix.dll
;proxy_d3d11=d3d11_helix.dll
; We force all LoadLibrary calls back to the game folder, because games
; and nvidia both break the loading chain by going directly to System32.
; load_library_redirect=0 for off, allowing all through unchanged.
; load_library_redirect=1 for nvapi.dll override only, forced to game folder.
; load_library_redirect=2 for both d3d11.dll and nvapi.dll forced to game folder.
load_library_redirect=2
; Only enable key input processing when the game is in the foreground:
check_foreground_window=1
; Options to use hooking instead of wrapping. Used in MGSV. Possible objects to hook include:
; deferred_contexts
; immediate_context
; device
; all - all of the above
; recommended - settings currently recommended by the 3DMigoto developers
;hook=recommended
; Options to allow ID3D11Device to be created and wrapped. We have typically had good
; luck with returning an error for all non-dx11 requests, but some games error out
; with these checks in place.
; The allow_create_device allows D3D10 Device creation and is needed for some games.
; It has two options, allow_create_device=1, which will allow anything to go through
; without returning an error, and allow_create_device=2, which will force all requests
; to become D3D11 Devices, no matter what was passed in.
; The allow_platform_update option allows the D3D11Device1 and D3D11Context1
; interfaces introduced in Windows 8 and the platform update of Windows 7.
;
; Start with allow_check_interfaces, if that doesn't work
; then try allow_create_device=2, lastly try allow_create_device=1
;
allow_check_interface=1
allow_create_device=1
allow_platform_update=1
;------------------------------------------------------------------------------------------------------
; Settings used by the external 3DMigoto Loader
;------------------------------------------------------------------------------------------------------
[Loader]
; Target process to load into. You can optionally include part of the directory
; structure in case the game's executable name is generic.
target = Palworld-Win64-Shipping.exe
; Normally, the above target setting is only used when 3DMigoto is loaded from
; outside the game directory via the external loader (and is mandatory in that
; case). If you want to enable that test even when the loader is not in use
; (for example, to prevent 3DMigoto from interfering with a launcher or
; configuration application), uncomment this line. Note that this test occurs
; after the loader check, so 3DMigoto's DLL will still be loaded into memory
; but will not be active:
;check_target_even_without_loader = true
; This tells the loader where to find 3DMigoto. This DLL must be located
; in the same directory as 3DMigoto Loader.exe and will be loaded in the target
; process under the same name. If d3d11.dll doesn't work try 3dmigoto.dll
module = d3d11.dll
; Uncomment to always elevate the loader to support games that run as admin.
; This will display a UAC prompt so only enable it if you actually need it.
;require_admin = true
; Automatically launch the game from the loader. If you put the executable name
; here than the loader will need to be located in the game directory. You can
; use the full path, but that is not recommended to ship any fixes with since
; it will vary on a user's system. If the game is on Steam you can use the
; steam browser protocol to launch it, optionally passing it any command line
; arguments you need (unfortunately Steam pops a dialog to confirm command line
; parameters, which tends to end up behind other windows):
;launch = DOA6.exe
launch = steam://rungameid/1623730 -dx11
;launch = steam://run/237850//-window-mode exclusive/
; Delay this many extra seconds after confirming that 3DMigoto was loaded in
; the target process. For games that respawn themselves or have multiple
; executables of the same name when the first process we see may not be the
; actual one we need. Set to -1 to disable automatic shut down.
;delay = 20
;------------------------------------------------------------------------------------------------------
; Settings to force display device to a specific mode.
; Uncomment a value to force the specific setting.
;------------------------------------------------------------------------------------------------------
[Device]
; (0) - disable upscaling
; (1) - enable upscaling and allows the game to disable and enable fullscreen mode
; (2) - enable upscaling and don't allow the game to switch fullscreen mode
; (always force fullscreen). Try this if you get issues with the mouse cursor.
; Note if you enable upscaling please do not forget to:
; 1) Uncomment "run = CustomShaderUpscale" in the [Present] section,
; otherwise you will see only a black window (with game sound).
; 2) Set a custom resolution here for width and height that the game will see.
; 3) Uncomment upscale_mode here.
upscaling = 0
; Force override the screen resolution.
; If upscaling is on, the resizing functionality is disabled.
; If upscaling is on, then you MUST specify the resolution the game will be upscaled to.
; To achieve the best visual result use the native resolution of your tv or monitor.
;width=1280
;height=720
; upscale_mode = 0: 3Dmigoto creates a texture and pushes it as the back buffer for the game.
; Seems to work with only few games but everything seems to run a bit smoother.
; upscale_mode = 1: 3Dmigoto creates a second swap chain and pushes the game to use it.
; Seems to work with most games. dont forget to activate upscaling shader in [present] section
;upscale_mode = 1
; overrides refresh rate set by game.
;refresh_rate=60
; filters available video modes to those providing given refresh rates.
; some games don't explicitely set the refresh rate, but use the video mode.
; use this if setting refresh_rate doesn't work.
;filter_refresh_rate=24,59,60
; full_screen=1 forces creation of full screen devices and swap chains.
; use this for 3dtvplay if game won't active stereo mode.
; full_screen=2 will also disable SetWindowPos which might help in some games.
full_screen=0
; This attempts to force exclusive full screen when this key is pressed, and
; may be useful in games where full_screen doesn't work or has undesirable side
; effects:
;force_full_screen_on_key = no_modifiers VK_F7
; This toggles forcing the full screen mode on and off. It will not take effect
; immediately, but will change what happens the next time the game tries to
; change the fullscreen mode. This is a specific hack to workaround a bug in
; Unity games, which crash when alt+tabbing out from exclusive mode fullscreen.
;
; To switch out of a Unity game without it crashing:
; Enable this option, Press F7, Alt+Enter, Alt+Tab
;toggle_full_screen = no_modifiers VK_F7
; some games explicitely disable stereo, prohibiting any stereo attempts.
; Setting this to 1 ignores all stereo disabling calls and also calls
; NvAPI_Stereo_Enable to force stereo on.
; Setting this to 2 sets 3Dmigoto to use 3D Vision Direct Mode
force_stereo=0
; almost all DX11 games deactivate window message handling.
; setting this to 1 reenables print screen handling, alt-tab key handling etc.
;allow_windowcommands=1
; Indicates where the resolution is obtained for texture hashes. Comment this
; out to never special case hashes that match the resolution or a multiple.
; Possible values are swap_chain and depth_stencil. Recommended to test which
; works for a given game (e.g. CryEngine always creates a swap chain that
; matches the native resolution so has to use depth_stencil).
get_resolution_from = swap_chain
; This will hide the hardware mouse cursor, and will be automatically enabled
; if the software mouse configuration file is included at the top of this file.
; The hardware mouse cursor cannot be moved to depth and cannot be used in
; conjunction with the side-by-side or top-and-bottom output modes, so using a
; software mouse cursor is recommended in those cases.
; NOTE: IT IS RECOMMENDED TO RESTART THE GAME AFTER CHANGING THIS SETTING!
hide_cursor = 0
;------------------------------------------------------------------------------------------------------
; Settings for NVidia stereo driver.
;------------------------------------------------------------------------------------------------------
[Stereo]
; games which have their own stereo renderer disable the NVidia automatic
; stereo mode and render themselves into stereo buffers (Crysis 3 for example).
; Setting this to 1 disables the game stereo renderer and enables NVidia auto stereo mechanism.
; This also forces 'false' as a return for any request for NvAPI_Stereo_IsEnabled.
automatic_mode=0
; Some games (CryEngine games, for example) lock the separation & convergence
; to a specific value, which can be undesirable. Set this to 1 to ignore these
; requests from the game to unlock the separation:
unlock_separation=0
unlock_convergence=0
; games without predefined profiles can't save stereo settings.
; enabling this options automatically creates a profile for unknown games.
; Note that there is now a more flexible means to alter the game's profile -
; refer to the [Profile] section.
create_profile=0
; sets the global surface creation heuristic for NVidia stero driver.
; 0 = NVAPI_STEREO_SURFACECREATEMODE_AUTO - use driver registry profile settings for surface creation mode.
; 1 = NVAPI_STEREO_SURFACECREATEMODE_FORCESTEREO - Always create stereo surfaces.
; 2 = NVAPI_STEREO_SURFACECREATEMODE_FORCEMONO - Always create mono surfaces.
;surface_createmode=1
; overrides surface creation mode for square surfaces.
;surface_square_createmode=1
; Force the NvAPI_Initialize to return an error so that games think stereo and NVidia is unavailable.
force_no_nvapi=0
;------------------------------------------------------------------------------------------------------
; Settings for GPU manipulations.
; Render settings override
;------------------------------------------------------------------------------------------------------
[Rendering]
; GPU program manipulations.
; Type of shader hashes in use:
; 3dmigoto = Traditional hash used by 3DMigoto (unseeded software FNV-1)
; embedded = Use the first half of the MD5-like hash embedded within the
; shaders to skip the hash calculation altogether.
; bytecode = Only hash bytecode and signatures with hardware accelerated
; CRC32C. Used to minimise duplicate shaders in certain games, but
; potentially carries a higher risk of hash collisions between
; unrelated shaders in some games (e.g. that only differ in
; variable names). May occasionally avoid hash changes on game
; updates due to changes in the game developer's build environment
; (shader compiler version, build path embedded in debug info,
; constants renamed, etc). Will not avoid hash changes if the
; shader code, constant values, etc are changed.
shader_hash = 3dmigoto
; Switch to newer texture hashes that are less susceptible to corruption and
; don't have collisions if part of the image matches. May have a slight
; performance penalty since more of the image is hashes. Do not enable if
; upgrading an existing fix!
;texture_hash = 1
; Shaders in game will be replaced by these custom shaders.
override_directory=ShaderFixes
; Automatically patched shaders will be written here if caching is enabled.
cache_directory=ShaderCache
; Shaders that are directly compiled by the game, instead of binary, go here.
storage_directory=ShaderFromGame
; cache all compiled .txt shaders into .bin. this removes loading stalls.
cache_shaders=0
; Indicates whether scissor clipping should be disabled by default. A restart
; is required for this to take effect. If you need to do this on a per shader
; basis, you can use "run = BuiltInCustomShaderEnableScissorClipping" or "run =
; BuiltInCustomShaderDisableScissorClipping" from a [ShaderOverride], or define
; your own [CustomShader] section to change whatever render state you need and
; use "handling = skip" and "draw = from_caller" to transfer the draw call to
; them.
rasterizer_disable_scissor=0
; Tracks copies and updates to textures which may cause their hash to become
; out of sync with their contents - enable if texture hashes seem unreliable.
; You can also set this to 2 to disable hash contamination detection for better
; performance in hunting mode, but only do that if you are certain you won't
; be needing this in the game in question.
;track_texture_updates=1
; Registers where the StereoParams and IniParams textures will be assigned -
; change if the game already uses these registers. Newly decompiled shaders
; will use the new registers, but existing shaders will not be updated - best
; workflow is to remove ShaderCache after changing these and run a search and
; replace on all shaders in ShaderFixes. Set to -1 to disable if not required.
stereo_params = 125
ini_params = 120
; Set to 1 to assemble the Input / Output / Patch Constant signature comments
; in shader assembly to allow them to be changed for passing new values between
; pipeline stages. Be careful with these comments if this is enabled - treat
; them like code! If set to 0 the assembler will use the old behaviour and
; re-use the sections from the unmodified shaders.
assemble_signature_comments = 1
; Include raw "undecipherable custom data" when disassembling shaders for
; ShaderRegex - leaving this out is for backwards compatibility with patterns
; that may not expect to see it since we didn't used to include it. Shaders
; dumped via export or hunting always include any undecipherable data.
disassemble_undecipherable_custom_data = 1
; Replace constant buffer offsets with indices & components in the comment
; blocks when disassembling shaders so they match up with how they are accessed
; in the code, making things easier to follow and simplifying ShaderRegex.
patch_assembly_cb_offsets = 1
; Enables more sensible behaviour when including HLSL files from subdirectories
; that themselves include other files. Also disables backwards compatibility
; where files could be specified relative to the game's working directory (i.e.
; use #include "hud.hlsl" instead of #include "ShaderFixes/hud.hlsl"). Requires
; two config reloads and a cache invalidation for changes to take effect
recursive_include = 1
;------------------------------------------------------------------------------------------------------
; Analyzation options.
;
; save all autofixed shaders as HLSL
export_fixed=0
; save all shaders sent to DX11 as ASM, or as HLSL text files if compiled by game.
export_shaders=0
; save all shaders seen as HLSL code, autofixed or not. 1= HLSL only, 2=HLSL+OriginalASM, 3=HLSL+OriginalASM+RecompiledASM
export_hlsl=0
; stores a ShaderUsage.txt file on any marking button press.
dump_usage=1
;------------------------------------------------------------------------------------------------------
; Automatic shader fixes. Those settings here apply only on newly read shaders.
; All existing *_replace.txt or *_replace.bin files are not tampered with.
; If you change settings here, the best workflow is to delete all shaders in
; the shader cache directory and let them be fixed again.
; Stereoize all shader parameters with position semantic.
fix_sv_position=0
; Pixel depth evaluation.
;fix_ZRepair_DepthTexture1=SceneDepthTexture.x
;fix_ZRepair_Dependencies1=MinZ_MaxZRatio
;fix_ZRepair_ZPosCalc1=zTex * MinZ_MaxZRatio.z - MinZ_MaxZRatio.w
;fix_ZRepair_DepthTexture2=SceneDepthTexture.x
;fix_ZRepair_Dependencies2=
;fix_ZRepair_ZPosCalc2=zTex
;fix_ZRepair_PositionTexture=PositionTexture
;fix_ZRepair_PositionCalc=1024 * %s
; Inject depth texture if other depth sources are unavailable.
;fix_ZRepair_DepthTextureHash=8a19f087b004598f
; Correct inverse transformations in pixel shaders using evaluated depth.
;fix_InvTransform=ScreenToLight,InverseTranslatedViewProjectionMatrix
; Back projection coordinate fix.
;
; Available variables in expressions:
; stereoParams.x = Separation value in range [0..1] or [-0..-1] dependent on active eye
; stereoParams.y = Convergence value in w coordinates (1/z)
; stereoParams.z = -1/1 for left/right eye
; stereoParams.w = Separation value without eye separation
; stereoTune.x = tune value 1 (default is 1)
; stereoTune.y = tune value 2 (default is 1)
; stereoTune.z = tune value 3 (default is 1)
; stereoTune.w = tune value 4 (default is 1)
; stereoScreenRes.x = Primary swap chain backbuffer horizontal resolution
; stereoScreenRes.y = Primary swap chain backbuffer vertical resolution
; zpos = current pixel z position in pixel shader
; wpos = current pixel w position in pixel shader
; Send inverse transformations from vertex shaders to pixel shaders.
;fix_BackProjectionTransform1=ScreenToTranslatedWorldMatrix._m00,ScreenToTranslatedWorldMatrix._m02,ScreenToTranslatedWorldMatrix._m01
;fix_BackProjectionTransform2=ScreenToWorld._m00,ScreenToWorld._m02,ScreenToWorld._m01
; Position variables to correct in pixel shaders.
;fix_ObjectPosition1=PointPositionAndInverseRadius
;fix_ObjectPosition1Multiplier=1, (stereoScreenRes.x/stereoScreenRes.y)*0.5, -0.5
;fix_ObjectPosition2=SpotPositionAndInverseRadius
;fix_ObjectPosition2Multiplier=1, (stereoScreenRes.x/stereoScreenRes.y)*0.5, -0.5
; Matrix multiplications to correct in pixel shaders.
;fix_MatrixOperand1=TranslatedWorldToShadowMatrix
;fix_MatrixOperand1Multiplier=1, (stereoScreenRes.x/stereoScreenRes.y)*0.5 - viewDirection.z*0.05 + (0.02791946-stereoParams.x/stereoParams.w), 0
; autofix shader option: recompiles all vertex shaders. fixes minor differences in deferred rendering.
;recompile_all_vs=0
;------------------------------------------------------------------------------------------------------
; Shader manipulations without patches + shader filtering.
;------------------------------------------------------------------------------------------------------
;[ShaderOverride1]
;Hash=69732c4f23cb6c48
; Custom stereo separation value while rendering objects using this shader.
;Separation=0
; Custom stereo convergence value while rendering objects using this
; shader (e.g. convergence=0 will move an object to infinity).
;Convergence=0
; don't draw anything using this shader.
;Handling=skip
; Use replaced shader only when there is/is not an active depth buffer (for UI filtering)
; Deprecated: use 'x = oD' instead, and test for negative zero in the shader with
; if (asint(IniParams[0].x) == asint(-0.0)) { /* depth inactive */ } else { /* depth active */ }
;depth_filter = depth_inactive
;depth_filter = depth_active
; Override a value from [Constants] when this shader is used:
;x=2.0
; Pass the dimensions of the active render target and resolution (obtained with
; get_resolution_from) into the shader:
;x1=rt_width
;y1=rt_height
;z1=res_width
;w1=res_height
; Use t0 from active pixel shader for texture filtering. Will be 0 if no
; [TextureOverride*] section exists for the texture or 1 if one does. For
; advanced filtering, set a value for filter_index in the [TextureOverride]
; section. This also works with other slot types (like o0, oD, ib, etc). Will
; be -0.0 (needs a special test) if no resource bound in this slot:
;x2 = ps-t0
; Match the partner shader (any of vs/hs/ds/gs/ps/cs). Works in much the same
; way as texture filtering - set a filter_index in the [ShaderOverride] or
; [ShaderRegex] for the partner shader you want to match and it will be set in
; this variable, or 1 = ShaderOverride/Regex matched with no filter_index, 0 =
; No ShaderOverride/Regex matched, -0.0 = No shader bound. The filter_index
; from a ShaderOverride always takes priority over any matching ShaderRegex.
;local $partner = vs
; Override the shader model to allow using newer features like Texture2DMS:
;model=vs_5_0
; Activate a preset section when this shader override is in use.
;preset = PresetExample
; Enable/disable scissor clipping for this specific shader. This is an alias
; for "run = BuiltInCustomShaderDisableScissorClipping"
; or "run = BuiltInCustomShaderEnableScissorClipping"
;disable_scissor = 1
; There's also support for copying textures, constant buffers, depth buffers,
; etc. from one shader to another. This is a complex topic - see this page:
; https://github.com/bo3b/3Dmigoto/wiki/Resource-Copying
;------------------------------------------------------------------------------------------------------
; On the fly regular expression shader patching engine
;------------------------------------------------------------------------------------------------------
;
; These sections define regular expressions to match against shaders and apply
; certain classes of fixes on the fly. Only assembly shaders are supported by
; this method for reliability and performance reasons.
;
; Every pattern must have a main section prefixed with ShaderRegex:
;
;[ShaderRegex1]
; shader_model is required and must be set to the types of shaders that this
; pattern will be applied against. Multiple shader models can be specified to
; match the pattern against multiple types. There are some differences in
; instructions between shader model 4 and 5 (such as in resource load
; instructions), so in some cases you may need separate patterns for each.
;shader_model = ps_4_0 ps_5_0
;
; temps is used to give names to temporary registers that you will use in the
; pattern. 3DMigoto will identify free register numbers and automatically
; adjust dcl_temps as required.
;temps = stereo tmp1
;
; This main section also acts as a command list so that you can define actions
; that will be applied on every matching shader, just as you would on any other
; command list enabled section, such as ShaderOverride, Present, etc.
;
;
; The next section of interest is the regular expression pattern. If this
; section is omitted than every shader of with matching shader_model will be
; matched (and have the command lists and InsertDeclarations processed). The
; first part of the section name must match the main ShaderRegex section you
; defined above, and it ends with ".Pattern". The regular expression grammar
; that we support is PCRE2, which is largely compatible with the powerful Perl
; and Python grammars. You can find the syntax reference here, but generally
; speaking any regular expression tutorial will give you a good primer:
;
; http://www.pcre.org/current/doc/html/pcre2syntax.html
;
; Note that since this is parsed in an ini file that blank lines and ini
; comments are ignored, and preceding and trailing whitespace from each line
; will be stripped, so if you need to match an indented line you will need to
; explicitly match the whitespace at the start of the line with \s*
; You should also use \n to match the newline character at the end of each
; line. This should not be confused with extended mode activated by the (?x)
; switch, which will ignore *all* whitespace to allow complex patterns to be
; broken up for clarity.
;
; Multiline matching is enabled by default, as is case insensitivity (due to
; differences in the capitalisation produced by different versions of the
; disassembler), but PCRE2 provides switches for most of these options if you
; need something else.
;
; This is an example of how you might match a matrix multiply in a shader, and
; uses Python style named capture groups to pull out the registers and swizzles
; of the X and Z coordinates, and another named capture group to verify that
; the register used in the div instruction matches the one used in the multiply:
;
;[ShaderRegex1.Pattern]
;mul r\d+\.xyzw, r\d+\.yyyy, cb0\[28\]\.xyzw\n
;mad r\d+\.xyzw, (?P<pos_x>r\d+)\.(?P<swizzle_x>[xyzw])[xyzw]{3}, cb0\[27\]\.xyzw, r\d+\.xyzw\n
;mad r\d+\.xyzw, (?P<pos_z>r\d+)\.(?P<swizzle_z>[xyzw])[xyzw]{3}, cb0\[29\]\.xyzw, r\d+\.xyzw\n
;add (?P<result>r\d+)\.xyzw, r\d+\.xyzw, cb0\[30\]\.xyzw\n
;div r\d+\.[xyzw]{2}, (?P=result)\.[xyzw]{4}, r\d+\.wwww\n
;
;
; The next section specifies how to modify the matched pattern. Again the name
; must begin with the same name as the main section, and end in
; ".Pattern.Replace" (there is a reason the replacement is associated with the
; pattern, but that's coming soon). You can (and I highly encourage that you
; do) use named capture groups in the above pattern and substitute them in
; here. Temporary registers that you defined in the main ShaderRegex section
; are also available here with the same syntax as named capture groups. Use
; ${0} to indicate where the matched pattern goes, allowing you to insert code
; before and/or after it, or use additonal capture groups to insert code in the
; middle. Extended substitution is enabled in PCRE2, which among other things
; makes \n insert a newline.
;
;[ShaderRegex1.Pattern.Replace]
;\n
;// UE4 shadow correction:\n
;ld_indexable(texture2d)(float,float,float,float) ${stereo}.xyzw, l(0, 0, 0, 0), t125.xyzw\n
;add ${tmp1}.x, ${pos_z}.${swizzle_z}, -${stereo}.y\n
;mad ${pos_x}.${swizzle_x}, -${tmp1}.x, ${stereo}.x, ${pos_x}.${swizzle_x}\n
;\n
;${0}
;
;
; The final section allows you to insert new declarations into the shader, and
; 3DMigoto will check that this declaration has not already been inserted
; first. Typically this is used to get access to StereoParams in t125:
;
;[ShaderRegex1.InsertDeclarations]
;dcl_resource_texture2d (float,float,float,float) t125
;------------------------------------------------------------------------------------------------------
; texture / render target manipulations