; =================================================================================
; VK3DVision - A Vulkan Stereo3D driver made by Helifax for Stereo3D in Vulkan API. 
; www.http://3dsurroundgaming.com/
; PLEASE READ COMMENTS BELOW, to understand what the options DO!
; NOTE: Variables and names are CASE-SENSITIVE!!!
; =================================================================================

[General]
;============================================================================================= 
; Enable Shader Tracking and development mode
; WARNING: This mode will affect performance! Only use it when tracking shaders!
; WARNING: This mode will require a lot more RAM, as NO RESOURCES are DESTROYED!
;============================================================================================= 
DevelopmentMode = false

;============================================================================================= 
; VK3DVision will enable Stereo Rendering only for these processes.
; Up to 10 process names can be added.
;============================================================================================= 
ProcessName1 = "DetroitBecomeHuman.exe"
ProcessName2 = "DetroitBecomeHumanDemo.exe"

;============================================================================================= 
; Specify the viewing mode:
; OpenVR - Render in Virtual Reality with maximum performance! (Performance metrics show 14% performance loss only!!! vs regular 3DVision/SBS).
; Includes:
; - Curved Screen with Lumma Sharpen Shader FULLY TAILORED for Virtual Reality!
; - Full VR Controller mapping to XBOX Controller (via ViGEm) and configurable from SteamVR! (Valve Index & Vive Wands controller scheme currently included!)
; - Ability to modify VR Screen Size, VR Screen Height, VR Screen Distance!
; - Ability to Reset VR Screen Orientation to where you HMD is looking at!
; HelixVisionVR - requires HelixVision (https://store.steampowered.com/app/1127310/HelixVision/). A bigger performance hit than OpenVR mode, but provides other features.
; 3DVision - Uses DX9 to render. Works on driver ABOVE 452.06. Requires Nvidia 3D Vision Driver! DO NOT USE ANY OVERLAYS or Performance will be severly affected!
; 3DVision11 - Uses DX11 to render. Works on driver BELOW 452.06. Requires Nvidia 3D Vision Driver!
; SBS_LEFT - Side-by-side, left image first. No Nvidia 3D Vision Driver is required!
; SBS_RIGHT - Side-by-side, right image first. No Nvidia 3D Vision Driver is required!
; TB_LEFT - Top-Bottom, left image at topsas. No Nvidia 3D Vision Driver is required!
; TB_RIGHT - Top-Bottom, right image at top. No Nvidia 3D Vision Driver is required!
; MONO - standard 2D rendering. (Obviously - Default rendering)
;============================================================================================= 
Stereo3DViewMode = 3DVision

;============================================================================================= 
; Synchronise with Screen Refresh rate.
; Should always keep this ON. Disabling it, will allow for higher FPS but will introduce screen tearing and the image might feel "floaty"!
;============================================================================================= 
Vsync = true

;============================================================================================= 
; Frames Per Second Limit (MAX FPS Limiter).
; 0 - No FPS Limit.
;============================================================================================= 
FPSLimit = 0

[Stereo_Injection]
;============================================================================================= 
; Enables Stereoscopic 3D Injection.
; Enables Shader Swapping with custom ones.
;============================================================================================= 
Stereo = true 

;============================================================================================= 
; Separation & Convergence values that will be used (These will also be used for Nvidia 3D Vision. Values from NvPanel and profile WILL BE IGNORED!)
; Values from 0(%) to 1000(%).
;============================================================================================= 
; Depth that is going to be used in all modes
; Use CTRL+F3/F4 to increase/decrease it.
Separation = 70

; Convergence that is going to be used in all modes 
; Use CTRL+F5/F6 to increase/decrease it.
Convergence = 0.8

; Requires "Vk3DFrameSync.dll" which is a PER-GAME module. 
; If module not found, it doesn't do anything.
; Specify the "mode" index in which the sync will be done!
; (The module must be coded with the "mode" in mind for this to work)
FrameSync = 0

; Binding the Uniform buffer will use in shaders. 
;=============================================================================================
; WARNINNG: This needs to be adjusted per game/app!
; SEE LOG if a CLASH is detected!
; Not adjusting them correctly will CRASH the VULKAN DRIVER!
; KEEP IT AS LOW AS POSSIBLE to AVOID wasting MEMORY and Severly Degrade Performance!
;  See: https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#descriptorsets-sets
;=============================================================================================
UniformLayoutBinding = 99 

;============================================================================================= 
; USE THIS OPTION WHEN STARTING A NEW FIX FOR A GAME!!!
; Print the values used by DescriptorSets for the "UniformLayoutBinding" above.
; Check the LOG to see what values are used and adjust "UniformLayoutBinding" accordingly so there IS NO CLASH!
; (Any manually fixed shaders will not work if this value is changed after the shader was modified!!! You will need to adjust the exported shaders with the correct Layout Slot!)
;============================================================================================= 
PrintLayoutBinding = false

;============================================================================================= 
; Part of a STRING that is FOUND in all the shaders. The Uniform Buffer will be inserted after this line.
; Support for 10 Slots: UniformInjection1 - UniformInjection9
;============================================================================================= 
UniformInjection1 = "layout"             		
	
;============================================================================================= 
; Part of a STRING that is FOUND in all the SHADERS.
; Support for 99 Slots: ShaderInjectionPoint1 - ShaderInjectionPoint99
;============================================================================================= 
ShaderInjectionPoint1 = "gl_Position = _"		 

;============================================================================================= 
; Stereo Correction String
;============================================================================================= 
ShaderStereoString1 = "gl_Position.x += vk3d_params.stereo.x * (gl_Position.w - vk3d_params.stereo.y); \n"		

;============================================================================================= 
; Options:
; - insert: Will insert the "ShaderStereoString1" after all matches for "ShaderInjectionPoint1". 
; - replace: Will replace the string in "ShaderInjectionPoint1" with "ShaderStereoString1".
;============================================================================================= 
ShaderOperation1 = insert

;============================================================================================= 
; Supported Shader Types:
; Vertex   ;ShaderType1 = Vertex
; Fragment ;ShaderType1 = Fragment
; Compute  ShaderType1 = Compute
;============================================================================================= 
ShaderType1 = Vertex

; Temporal accumulation
ShaderInjectionPoint2 = "gl_Position.w ="		 
ShaderStereoString2 = "gl_Position.x += vk3d_params.stereo.x * (gl_Position.w - vk3d_params.stereo.y) * vk3d_params.custom_params.x; \n"		
ShaderOperation2 = insert
ShaderType2 = Vertex

; Temporal data gathering
; Notice the MULTIPLY by 2. If you change "DominantEye" option, the *2 must be removed as we are displacing ONE EYE
ShaderInjectionPoint3 = "prev_hpos ="		 
ShaderStereoString3 = "prev_hpos.x -= vk3d_params.stereo.x * (prev_hpos.w - vk3d_params.stereo.y) * 2; \n"	
ShaderOperation3 = insert
ShaderType3 = Vertex

[Params]
;============================================================================================= 
; Values that are sent as a vec4 PER FRAME to all shaders. Can be used for custom operations.
; Currently only ONE Vec4 is sent to shaders!
;============================================================================================= 
x = 0.5 ; Scale for contextual UI
y = 0.0
z = 0.0
w = 0.0

[Tools]
;============================================================================================= 
; This is a tool to convert the hashes of a fix made with Vk3DVision PRIOR v.2.0.0
; In V1 Mode, a shader hash was calculated on the binary supplied by the game.
; If the shader binary is recompiled (from the same source code), the hash will be different. A game update might do this!
; In V2 Mode, the hash is calculated on the Source Code of the Shader Binary, after decompilation.
; How to Use:
; Enable the option below. This will make Vk3DVision work in V1 Hash ode.
; Make sure your shaders are in "Vk3DVision/ShaderSwap".
; Start the game and play the game to load all the shaders.
; If a shader is swapped by Vk3DVision it will output the V2 Hash variant in "Vk3DVision/ShaderSwap2"
; All found shaders will be moved from "Vk3DVision/ShaderSwap" to "Vk3DVision/ShaderSwap2" with updated hashes.
; Once all hashes have been coverted, disable the option below and Rename "ShaderSwap2" to "ShaderSwap"
; Start the game again and Vk3DVision will use V2 Hash Mode.
;============================================================================================= 
ConvertHashV1ToV2 = false

;============================================================================================= 
; Enable computation of Hashes using V1 method.
; This SHOULD always be FALSE for new fixes.
; Can be used to enable Legacy compat mode with fixes made with VK3DVision v.1.0.x
;============================================================================================= 
EnableHashV1 = true

; Shortcut Keys
;============================================================================================= 
; From [Key1] to [Key50]. Key numbers MUST BE SEQUENTIAL!
; type = once, hold, toggle
; Supports: convergence, separation values
; For Keyboard Keys see: https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
;=============================================================================================
; For Xbox Controller, use these values:
;=============================================================================================
; XBOX_DPAD_UP
; XBOX_DPAD_DOWN
; XBOX_DPAD_LEFT
; XBOX_DPAD_RIGHT
; XBOX_START
; XBOX_BACK
; XBOX_LEFT_THUMB
; XBOX_RIGHT_THUMB
; XBOX_LEFT_SHOULDER
; XBOX_RIGHT_SHOULDER
; XBOX_LEFT_TRIGGER
; XBOX_RIGHT_TRIGGER
; XBOX_A
; XBOX_B
; XBOX_X
; XBOX_Y
;=============================================================================================

[Key1]
key = 4 ; MOUSE MIDDLE ; Lower Convergence for Cinematics
type = toggle
convergence = 0.35
x = 0.75
Description = "Cutscenes Convergence"

;Controller
[Key2]
key = XBOX_RIGHT_THUMB 
type = toggle
convergence = 0.35
x = 0.75
Description = "Cutscenes Convergence"

[Key3]
key = 2 ; MOUSE RIGHT ; Lower Convergence Mind Palace
type = hold
convergence = 0.35
x = 0.75

[Key4]
key = XBOX_RIGHT_TRIGGER
type = hold
convergence = 0.35
x = 0.75

; Change Synchronization Mode.
; 0 is for Gameplay.
; 1 is for Menu interface.
[Key5]
key = 112 ; F1
type = toggle
FrameSync = 1
Description = "Synchronization: 0 - Gameplay; 1 - Menus"

[Key6]
key = XBOX_LEFT_THUMB
type = toggle
FrameSync = 1
Description = "Synchronization: 0 - Gameplay; 1 - Menus"

; This section is auto-generated by Vk3DVision. See Scissor Clipping section on how to generate it.
; Scissor Clipping will be extended for the following shaders:
[ScissorClipping]
Hash1 = 28713ad788e26a48
Hash2 = 6c758883c392ad04
Hash3 = e5f605db5e5c6d0
Hash4 = 365364ca3dbd22a2
Hash5 = 6388d0032d127c08
Hash6 = bcf7a39cd5b96d9b
Hash7 = 35ffe1a92e649f1c
Hash8 = eabac60d4143e7e2
Hash9 = 3207134b7ee8d1de
Hash10 = 3050b7cc3abcdf5a
Hash11 = 825822ca68cb119a
Hash12 = 11a8feaf093e5cad
Hash13 = cd6b6863fbf0766d
Hash14 = 82908a2fd26f7b5c
Hash15 = 277109b34087cfb7
Hash16 = cc7563e22b6b31ac
Hash17 = 6a198755753d19ec
Hash18 = 24aa7a1b3899ed0f
Hash19 = d191e0a5dec11327
Hash20 = 914b651a7370fb6
Hash21 = 6073046a276ed61c
Hash22 = c53048c50aef8298
Hash23 = 29866b6052f50c3
Hash24 = 52475e28a653e0bb
Hash25 = d4fb2aa68e45e08d
Hash26 = 3592379986792dfa
Hash27 = 7026a62da1ec1861
Hash28 = ee96555d6c7b19da
Hash29 = f1c19efdec86db0b
Hash30 = 1953182c3f02bf89
Hash31 = 1409ee225ce2df3c
Hash32 = 8fa5d55d8c4f6a10
Hash33 = 7815a003f98a21e1
Hash34 = 500673bb0daa889e
Hash35 = 6eb94bbb8a98cd27
Hash36 = eaa7d86ac645f93a
Hash37 = 6112d0bb5292de86
Hash38 = bff9d23a85b22406
Hash39 = ea54e71c36c9927f
Hash40 = 33dc5740dbc79bc4
Hash41 = 87e1303fbf59c70
Hash42 = ecb876578c2b852f
Hash43 = afbacedacc9c40f6
Hash44 = dd63c56d0f387044
Hash45 = 2f5fcd973e1735a9
Hash46 = 3be279a1f034868a
Hash47 = aa44f21f84812077
Hash48 = a7a78e894eaca665
Hash49 = f6aef6442bda018a
Hash50 = 11b299cbde961f3
Hash51 = 8a1a1979951e75b6
Hash52 = 22e5eabc3029f38f
Hash53 = 5e6a9bb14ea3470c
Hash54 = 5519f4ca90d3385
Hash55 = dca5012bb76d0f18
Hash56 = 82eb2e5a3e8210b1
Hash57 = 6e7611d5c37955ed
Hash58 = 92e6983477f47c87
Hash59 = 89f6ad8ab4f7a6bd
Hash60 = 4a313f2a8f9c61f3
Hash61 = a8a451638139deb6
Hash62 = 6ab9c0c4cf4eccd8
Hash63 = c7d090ce85736f93
Hash64 = b2af7bcfed17fb82
Hash65 = 7f40c54bf1fd5f25
Hash66 = a79893100df76131
Hash67 = 7eec49ab1cba7f87
Hash68 = e8e8154a6fd0d17c
Hash69 = ac3193253645e217
Hash70 = 6c9c535b54698ec
Hash71 = 20fc3e58b5a8f652
Hash72 = 873cfdce282a9883
Hash73 = 99fce1a686eab26b
Hash74 = ba21c648fe6f48c3
Hash75 = eedab3652bc1f8c2
Hash76 = 1215e5f358ee4d65
Hash77 = c057216e92e09d74
Hash78 = 8ae63ba2f29246e3
Hash79 = fd7c43eddada0559
Hash80 = a7c64ec46daf9863
Hash81 = a40f57c92da0819
Hash82 = 313a8d3bf7a06245
Hash83 = 9c21265c14d38160
Hash84 = fa596d7f6aaa883d
Hash85 = 4e6434e2736c3fc2
Hash86 = 4536f681450969bd
Hash87 = 8ea3ea71781b6fc5
Hash88 = 9c4a1651b00829a3
Hash89 = 214660c340415733
Hash90 = 585683d965a102f4
Hash91 = 7db3aad1a279eb73
Hash92 = b66fb05f3ae579b8
Hash93 = aa59649544bfbb4a
Hash94 = f2be74c63d7f8ad6
Hash95 = 6677d99a5ec8f1b7
Hash96 = 94bb354487032c4
Hash97 = a107d18bc4de0a00
Hash98 = 2d4b86fc3d50be32
Hash99 = 4b838de6612152ce
Hash100 = dc41d0916d05adaa
Hash101 = 5bdf66730e746201
Hash102 = 8aac8f4ec88a0254
Hash103 = cfd98d77957dbf33
Hash104 = ba68e3b7a4f2ab96
Hash105 = 664ad931f328d36e
Hash106 = 4091ad6130c01f43
Hash107 = b7d20f1fc979b24b
Hash108 = c4513689cac92620
Hash109 = 701d7a3a283147d3
Hash110 = 29bfbbf9f7677025
Hash111 = a70f54b913ad5470
Hash112 = 42a065c68e376624
Hash113 = 2480e75c1634a547
Hash114 = 82800c26b83e4f39
Hash115 = 2c8fa4af88aac70d
Hash116 = 7676dca9658f6166
Hash117 = adb3f129a4f15064
Hash118 = 8702664fea1c309b
Hash119 = 9b6d31e2bc88e16b
Hash120 = aecb987ef8d4a96e
Hash121 = 147937e9e0a5d0cf
Hash122 = b9e9ef2ff32b08a5
Hash123 = 26aeaffa200208d5
Hash124 = ebc4291bc1560cb2
Hash125 = 27bf2391c70abebd
Hash126 = e5e718f1a2950e7b
Hash127 = 873f1b0fa950d293
Hash128 = 41494c26b96be170
Hash129 = c0059e20c9ec24f
Hash130 = 335c0c2a4002eb30
Hash131 = 6e4283a9353728c0
Hash132 = e46d419d7ea5e56b
Hash133 = 6d5528f8b351c1d1
Hash134 = 14b7cdecf62515f2
Hash135 = d90eab57f3b06d7c
Hash136 = e935e824bb9b441f
Hash137 = 47716aecedde02f
Hash138 = af2420220046619d
Hash139 = f4a2f6d40172d57c
Hash140 = de30c57bf8c5f10f
Hash141 = d600861f9c2fc923
Hash142 = 6f27caf87838e55d
Hash143 = 1275f8ae2e351a60
Hash144 = 8061bab523f99759
Hash145 = b538952b45075eac
Hash146 = 48ca9ad7623df98c
Hash147 = 9655ada16c304bd2