The Long Dark v.426 3D fix shadows, lights, halos, autocrosshair, blood, footprints, campfire, torc...
  2 / 3    
[quote="masterotaku"]STOP RIGHT THERE! I've noticed that the number you need is actually the FoV of the game (if it doesn't EVER change and it isn't user configurable, a static value should be fine). In the shaders fixed by the DarkStarSword Unity scripts, there are ways to calculate that. And I found something similar, so I'm going to try getting it 100% right. It's possible that this won't work, because I based it on an older Unity version. So back up your shaders and d3dx.ini first. First, you need "inverse_unity_mvp.hlsl" and "matrix.hlsl" from my Yooka-Laylee fix. Place them in the "ShaderFixes" folder. In "d3dx.ini" (yes, using the name of your vertex shader, thanks for posting it): [code] [ShaderOverrideDirectional53_9x] Hash = 2917d6a2498642c6 Resource_UnityPerCameraRare = vs-cb1 [/code] This will be "2917d6a2498642c6-vs_replace.txt": [code] // ---- Created with 3Dmigoto v1.2.61 on Sat Jun 17 19:46:16 2017 cbuffer cb3 : register(b3) { float4 cb3[21]; } cbuffer cb2 : register(b2) { float4 cb2[4]; } // UnityPerCameraRare contains the projection & inverse projection matrices // that we need to fix the shadows. The headers extracted from the asset files // show which constant buffer is UnityPerCameraRare, and then we just grab the // actual definition of the buffer from the Unity Cg source code, and replace // references to it as necessary. // cbuffer cb1 : register(b1) cbuffer UnityPerCameraRare : register(b1) { // float4 cb1[14]; uniform float4 unity_CameraWorldClipPlanes[6]; // Projection matrices of the camera. Note that this might be different from projection matrix // that is set right now, e.g. while rendering shadows the matrices below are still the projection // of original camera. row_major uniform float4x4 unity_CameraProjection; // cb1[7] - cb1[10] row_major uniform float4x4 unity_CameraInvProjection; // cb1[11] - cb1[14] } cbuffer cb0 : register(b0) { float4 cb0[6]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : POSITION0, float4 v1 : TEXCOORD0, float3 v2 : TEXCOORD1, out float4 o0 : SV_POSITION0, out float4 o1 : TEXCOORD0, out float4 o2 : TEXCOORD1, out float4 o3 : TEXCOORD2, out float3 o4 : TEXCOORD3, out float fov : TEXCOORD4) // New output to pass FOV from inverse projection matrix to pixel shaders) { float4 r0,r1; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = cb2[1].xyzw * v0.yyyy; r0.xyzw = cb2[0].xyzw * v0.xxxx + r0.xyzw; r0.xyzw = cb2[2].xyzw * v0.zzzz + r0.xyzw; r0.xyzw = cb2[3].xyzw + r0.xyzw; r1.xyzw = cb3[18].xyzw * r0.yyyy; r1.xyzw = cb3[17].xyzw * r0.xxxx + r1.xyzw; r1.xyzw = cb3[19].xyzw * r0.zzzz + r1.xyzw; r0.xyzw = cb3[20].xyzw * r0.wwww + r1.xyzw; o0.xyzw = r0.xyzw; r0.y = cb0[5].x * r0.y; r1.xzw = float3(0.5,0.5,0.5) * r0.xwy; r0.yzw = unity_CameraInvProjection[1].xyz * r0.yyy; r0.xyz = unity_CameraInvProjection[0].xyz * r0.xxx + r0.yzw; o1.zw = r1.xw + r1.zz; o1.xy = v1.xy; o2.xyz = v2.xyz; r1.xyz = -unity_CameraInvProjection[2].xyz + r0.xyz; r0.xyz = unity_CameraInvProjection[2].xyz + r0.xyz; r0.xyz = unity_CameraInvProjection[3].xyz + r0.xyz; r1.xyz = unity_CameraInvProjection[3].xyz + r1.xyz; r1.w = -r1.z; o3.xyz = r1.xyw; r0.w = -r0.z; o4.xyz = r0.xyw; fov = unity_CameraInvProjection[0].x; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sat Jun 17 19:46:16 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyz // TEXCOORD 0 xy 1 NONE float xy // TEXCOORD 1 xyz 2 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float xyzw // TEXCOORD 0 xyzw 1 NONE float xyzw // TEXCOORD 1 xyz 2 NONE float xyz // TEXCOORD 2 xyz 3 NONE float xyz // TEXCOORD 3 xyz 4 NONE float xyz // vs_4_0 dcl_constantbuffer cb0[6], immediateIndexed dcl_constantbuffer cb1[14], immediateIndexed dcl_constantbuffer cb2[4], immediateIndexed dcl_constantbuffer cb3[21], immediateIndexed dcl_input v0.xyz dcl_input v1.xy dcl_input v2.xyz dcl_output_siv o0.xyzw, position dcl_output o1.xyzw dcl_output o2.xyz dcl_output o3.xyz dcl_output o4.xyz dcl_temps 2 mul r0.xyzw, v0.yyyy, cb2[1].xyzw mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw add r0.xyzw, r0.xyzw, cb2[3].xyzw mul r1.xyzw, r0.yyyy, cb3[18].xyzw mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw mad r0.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw mov o0.xyzw, r0.xyzw mul r0.y, r0.y, cb0[5].x mul r1.xzw, r0.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000) mul r0.yzw, r0.yyyy, cb1[11].xxyz mad r0.xyz, cb1[10].xyzx, r0.xxxx, r0.yzwy add o1.zw, r1.zzzz, r1.xxxw mov o1.xy, v1.xyxx mov o2.xyz, v2.xyzx add r1.xyz, r0.xyzx, -cb1[12].xyzx add r0.xyz, r0.xyzx, cb1[12].xyzx add r0.xyz, r0.xyzx, cb1[13].xyzx add r1.xyz, r1.xyzx, cb1[13].xyzx mov r1.w, -r1.z mov o3.xyz, r1.xywx mov r0.w, -r0.z mov o4.xyz, r0.xywx ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] And this "e0e92586fcf76b94-ps_replace.txt" (using HLSL again): [code] // ---- Created with 3Dmigoto v1.2.61 on Sat Jun 17 19:46:58 2017 Texture2D<float4> t1 : register(t1); Texture2D<float4> t0 : register(t0); SamplerComparisonState s1_s : register(s1); SamplerState s0_s : register(s0); cbuffer cb2 : register(b2) { float4 cb2[25]; } cbuffer cb1 : register(b1) { float4 cb1[22]; } cbuffer cb0 : register(b0) { float4 cb0[9]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : SV_POSITION0, float4 v1 : TEXCOORD0, float4 v2 : TEXCOORD1, float4 v3 : TEXCOORD2, float3 v4 : TEXCOORD3, float fov : TEXCOORD4, // New input from vertex shader with unity_CameraInvProjection[0].x; out float4 o0 : SV_Target0) { float4 r0,r1,r2,r3; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = t0.Sample(s0_s, v1.xy).xyzw; r0.y = cb0[7].x * r0.x + cb0[7].y; r0.y = 1 / r0.y; r0.z = r0.x + -r0.y; r0.y = cb0[8].w * r0.z + r0.y; r0.x = 1 + -r0.x; r1.xyz = v4.xyz + -v3.xyz; r0.xzw = r0.xxx * r1.xyz + v3.xyz; r0.xzw = -v2.xyz * r0.yyy + r0.xzw; r1.xyz = v2.xyz * r0.yyy; r0.xyz = cb0[8].www * r0.xzw + r1.xyz; float depth = r0.z; float4 stereo = StereoParams.Load(0); float separation = stereo.x; float convergence = stereo.y; r0.x -= separation * (depth - convergence) * fov; r1.xyzw = cb1[19].xyzw * r0.yyyy; r1.xyzw = cb1[18].xyzw * r0.xxxx + r1.xyzw; r0.xyzw = cb1[20].xyzw * r0.zzzz + r1.xyzw; r0.xyzw = cb1[21].xyzw + r0.xyzw; r1.xyz = -cb2[0].xyz + r0.xyz; r1.x = dot(r1.xyz, r1.xyz); r2.xyz = -cb2[1].xyz + r0.xyz; r1.y = dot(r2.xyz, r2.xyz); r2.xyz = -cb2[2].xyz + r0.xyz; r1.z = dot(r2.xyz, r2.xyz); r2.xyz = -cb2[3].xyz + r0.xyz; r1.w = dot(r2.xyz, r2.xyz); r1.xyzw = cmp(r1.xyzw < cb2[4].xyzw); r2.xyz = r1.xyz ? float3(-1,-1,-1) : float3(-0,-0,-0); r1.xyzw = r1.xyzw ? float4(1,1,1,1) : 0; r2.xyz = r1.yzw + r2.xyz; r1.yzw = max(float3(0,0,0), r2.xyz); r2.xyz = cb2[13].xyz * r0.yyy; r2.xyz = cb2[12].xyz * r0.xxx + r2.xyz; r2.xyz = cb2[14].xyz * r0.zzz + r2.xyz; r2.xyz = cb2[15].xyz * r0.www + r2.xyz; r2.xyz = r2.xyz * r1.yyy; r3.xyz = cb2[9].xyz * r0.yyy; r3.xyz = cb2[8].xyz * r0.xxx + r3.xyz; r3.xyz = cb2[10].xyz * r0.zzz + r3.xyz; r3.xyz = cb2[11].xyz * r0.www + r3.xyz; r2.xyz = r3.xyz * r1.xxx + r2.xyz; r1.x = dot(r1.xyzw, float4(1,1,1,1)); r3.xyz = cb2[17].xyz * r0.yyy; r3.xyz = cb2[16].xyz * r0.xxx + r3.xyz; r3.xyz = cb2[18].xyz * r0.zzz + r3.xyz; r3.xyz = cb2[19].xyz * r0.www + r3.xyz; r2.xyz = r3.xyz * r1.zzz + r2.xyz; r3.xyz = cb2[21].xyz * r0.yyy; r3.xyz = cb2[20].xyz * r0.xxx + r3.xyz; r0.xyz = cb2[22].xyz * r0.zzz + r3.xyz; r0.xyz = cb2[23].xyz * r0.www + r0.xyz; r0.xyz = r0.xyz * r1.www + r2.xyz; r0.z = r0.z + -r1.x; r0.z = 1 + r0.z; r0.x = t1.SampleCmpLevelZero(s1_s, r0.xy, r0.z).x; r0.y = 1 + -cb2[24].x; o0.xyzw = r0.xxxx * r0.yyyy + cb2[24].xxxx; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sat Jun 17 19:46:58 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float // TEXCOORD 0 xyzw 1 NONE float xy // TEXCOORD 1 xyz 2 NONE float xyz // TEXCOORD 2 xyz 3 NONE float xyz // TEXCOORD 3 xyz 4 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_Target 0 xyzw 0 TARGET float xyzw // ps_4_0 dcl_constantbuffer cb0[9], immediateIndexed dcl_constantbuffer cb1[22], immediateIndexed dcl_constantbuffer cb2[25], immediateIndexed dcl_sampler s0, mode_default dcl_sampler s1, mode_comparison dcl_resource_texture2d (float,float,float,float) t0 dcl_resource_texture2d (float,float,float,float) t1 dcl_input_ps linear v1.xy dcl_input_ps linear v2.xyz dcl_input_ps linear v3.xyz dcl_input_ps linear v4.xyz dcl_output o0.xyzw dcl_temps 4 sample r0.xyzw, v1.xyxx, t0.xyzw, s0 mad r0.y, cb0[7].x, r0.x, cb0[7].y div r0.y, l(1.000000, 1.000000, 1.000000, 1.000000), r0.y add r0.z, -r0.y, r0.x mad r0.y, cb0[8].w, r0.z, r0.y add r0.x, -r0.x, l(1.000000) add r1.xyz, -v3.xyzx, v4.xyzx mad r0.xzw, r0.xxxx, r1.xxyz, v3.xxyz mad r0.xzw, -v2.xxyz, r0.yyyy, r0.xxzw mul r1.xyz, r0.yyyy, v2.xyzx mad r0.xyz, cb0[8].wwww, r0.xzwx, r1.xyzx mul r1.xyzw, r0.yyyy, cb1[19].xyzw mad r1.xyzw, cb1[18].xyzw, r0.xxxx, r1.xyzw mad r0.xyzw, cb1[20].xyzw, r0.zzzz, r1.xyzw add r0.xyzw, r0.xyzw, cb1[21].xyzw add r1.xyz, r0.xyzx, -cb2[0].xyzx dp3 r1.x, r1.xyzx, r1.xyzx add r2.xyz, r0.xyzx, -cb2[1].xyzx dp3 r1.y, r2.xyzx, r2.xyzx add r2.xyz, r0.xyzx, -cb2[2].xyzx dp3 r1.z, r2.xyzx, r2.xyzx add r2.xyz, r0.xyzx, -cb2[3].xyzx dp3 r1.w, r2.xyzx, r2.xyzx lt r1.xyzw, r1.xyzw, cb2[4].xyzw movc r2.xyz, r1.xyzx, l(-1.000000,-1.000000,-1.000000,0), l(-0.000000,-0.000000,-0.000000,0) and r1.xyzw, r1.xyzw, l(0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000) add r2.xyz, r2.xyzx, r1.yzwy max r1.yzw, r2.xxyz, l(0.000000, 0.000000, 0.000000, 0.000000) mul r2.xyz, r0.yyyy, cb2[13].xyzx mad r2.xyz, cb2[12].xyzx, r0.xxxx, r2.xyzx mad r2.xyz, cb2[14].xyzx, r0.zzzz, r2.xyzx mad r2.xyz, cb2[15].xyzx, r0.wwww, r2.xyzx mul r2.xyz, r1.yyyy, r2.xyzx mul r3.xyz, r0.yyyy, cb2[9].xyzx mad r3.xyz, cb2[8].xyzx, r0.xxxx, r3.xyzx mad r3.xyz, cb2[10].xyzx, r0.zzzz, r3.xyzx mad r3.xyz, cb2[11].xyzx, r0.wwww, r3.xyzx mad r2.xyz, r3.xyzx, r1.xxxx, r2.xyzx dp4 r1.x, r1.xyzw, l(1.000000, 1.000000, 1.000000, 1.000000) mul r3.xyz, r0.yyyy, cb2[17].xyzx mad r3.xyz, cb2[16].xyzx, r0.xxxx, r3.xyzx mad r3.xyz, cb2[18].xyzx, r0.zzzz, r3.xyzx mad r3.xyz, cb2[19].xyzx, r0.wwww, r3.xyzx mad r2.xyz, r3.xyzx, r1.zzzz, r2.xyzx mul r3.xyz, r0.yyyy, cb2[21].xyzx mad r3.xyz, cb2[20].xyzx, r0.xxxx, r3.xyzx mad r0.xyz, cb2[22].xyzx, r0.zzzz, r3.xyzx mad r0.xyz, cb2[23].xyzx, r0.wwww, r0.xyzx mad r0.xyz, r0.xyzx, r1.wwww, r2.xyzx add r0.z, -r1.x, r0.z add r0.z, r0.z, l(1.000000) sample_c_lz r0.x, r0.xyxx, t1.xxxx, s1, r0.z add r0.y, -cb2[24].x, l(1.000000) mad o0.xyzw, r0.xxxx, r0.yyyy, cb2[24].xxxx ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] If it doesn't work, try going to the vertex shader and changing the axis "unity_CameraInvProjection" is using in the code. Instead of the "[1], [0], [2], [3]" order, change it to "[0], [3], [1], [2]". If it works, it should be 100% correct at all FoV values. EDIT: wow, I spent like half an hour posting this. Now I see your new post. I'll have to think about that one for a while.[/quote] That worked perfect!!! can we use this to fix the other shader?
masterotaku said:STOP RIGHT THERE! I've noticed that the number you need is actually the FoV of the game (if it doesn't EVER change and it isn't user configurable, a static value should be fine). In the shaders fixed by the DarkStarSword Unity scripts, there are ways to calculate that. And I found something similar, so I'm going to try getting it 100% right. It's possible that this won't work, because I based it on an older Unity version. So back up your shaders and d3dx.ini first.

First, you need "inverse_unity_mvp.hlsl" and "matrix.hlsl" from my Yooka-Laylee fix. Place them in the "ShaderFixes" folder.

In "d3dx.ini" (yes, using the name of your vertex shader, thanks for posting it):
[ShaderOverrideDirectional53_9x]
Hash = 2917d6a2498642c6
Resource_UnityPerCameraRare = vs-cb1


This will be "2917d6a2498642c6-vs_replace.txt":

// ---- Created with 3Dmigoto v1.2.61 on Sat Jun 17 19:46:16 2017
cbuffer cb3 : register(b3)
{
float4 cb3[21];
}

cbuffer cb2 : register(b2)
{
float4 cb2[4];
}

// UnityPerCameraRare contains the projection & inverse projection matrices
// that we need to fix the shadows. The headers extracted from the asset files
// show which constant buffer is UnityPerCameraRare, and then we just grab the
// actual definition of the buffer from the Unity Cg source code, and replace
// references to it as necessary.

// cbuffer cb1 : register(b1)
cbuffer UnityPerCameraRare : register(b1)
{
// float4 cb1[14];
uniform float4 unity_CameraWorldClipPlanes[6];

// Projection matrices of the camera. Note that this might be different from projection matrix
// that is set right now, e.g. while rendering shadows the matrices below are still the projection
// of original camera.
row_major uniform float4x4 unity_CameraProjection; // cb1[7] - cb1[10]
row_major uniform float4x4 unity_CameraInvProjection; // cb1[11] - cb1[14]
}

cbuffer cb0 : register(b0)
{
float4 cb0[6];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : POSITION0,
float4 v1 : TEXCOORD0,
float3 v2 : TEXCOORD1,
out float4 o0 : SV_POSITION0,
out float4 o1 : TEXCOORD0,
out float4 o2 : TEXCOORD1,
out float4 o3 : TEXCOORD2,
out float3 o4 : TEXCOORD3,
out float fov : TEXCOORD4) // New output to pass FOV from inverse projection matrix to pixel shaders)
{
float4 r0,r1;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = cb2[1].xyzw * v0.yyyy;
r0.xyzw = cb2[0].xyzw * v0.xxxx + r0.xyzw;
r0.xyzw = cb2[2].xyzw * v0.zzzz + r0.xyzw;
r0.xyzw = cb2[3].xyzw + r0.xyzw;
r1.xyzw = cb3[18].xyzw * r0.yyyy;
r1.xyzw = cb3[17].xyzw * r0.xxxx + r1.xyzw;
r1.xyzw = cb3[19].xyzw * r0.zzzz + r1.xyzw;
r0.xyzw = cb3[20].xyzw * r0.wwww + r1.xyzw;
o0.xyzw = r0.xyzw;
r0.y = cb0[5].x * r0.y;
r1.xzw = float3(0.5,0.5,0.5) * r0.xwy;
r0.yzw = unity_CameraInvProjection[1].xyz * r0.yyy;
r0.xyz = unity_CameraInvProjection[0].xyz * r0.xxx + r0.yzw;
o1.zw = r1.xw + r1.zz;
o1.xy = v1.xy;
o2.xyz = v2.xyz;
r1.xyz = -unity_CameraInvProjection[2].xyz + r0.xyz;
r0.xyz = unity_CameraInvProjection[2].xyz + r0.xyz;
r0.xyz = unity_CameraInvProjection[3].xyz + r0.xyz;
r1.xyz = unity_CameraInvProjection[3].xyz + r1.xyz;
r1.w = -r1.z;
o3.xyz = r1.xyw;
r0.w = -r0.z;
o4.xyz = r0.xyw;

fov = unity_CameraInvProjection[0].x;

return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sat Jun 17 19:46:16 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyz
// TEXCOORD 0 xy 1 NONE float xy
// TEXCOORD 1 xyz 2 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyz 2 NONE float xyz
// TEXCOORD 2 xyz 3 NONE float xyz
// TEXCOORD 3 xyz 4 NONE float xyz
//
vs_4_0
dcl_constantbuffer cb0[6], immediateIndexed
dcl_constantbuffer cb1[14], immediateIndexed
dcl_constantbuffer cb2[4], immediateIndexed
dcl_constantbuffer cb3[21], immediateIndexed
dcl_input v0.xyz
dcl_input v1.xy
dcl_input v2.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_output o3.xyz
dcl_output o4.xyz
dcl_temps 2
mul r0.xyzw, v0.yyyy, cb2[1].xyzw
mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw
add r0.xyzw, r0.xyzw, cb2[3].xyzw
mul r1.xyzw, r0.yyyy, cb3[18].xyzw
mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw
mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw
mad r0.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw
mov o0.xyzw, r0.xyzw
mul r0.y, r0.y, cb0[5].x
mul r1.xzw, r0.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000)
mul r0.yzw, r0.yyyy, cb1[11].xxyz
mad r0.xyz, cb1[10].xyzx, r0.xxxx, r0.yzwy
add o1.zw, r1.zzzz, r1.xxxw
mov o1.xy, v1.xyxx
mov o2.xyz, v2.xyzx
add r1.xyz, r0.xyzx, -cb1[12].xyzx
add r0.xyz, r0.xyzx, cb1[12].xyzx
add r0.xyz, r0.xyzx, cb1[13].xyzx
add r1.xyz, r1.xyzx, cb1[13].xyzx
mov r1.w, -r1.z
mov o3.xyz, r1.xywx
mov r0.w, -r0.z
mov o4.xyz, r0.xywx
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


And this "e0e92586fcf76b94-ps_replace.txt" (using HLSL again):

// ---- Created with 3Dmigoto v1.2.61 on Sat Jun 17 19:46:58 2017
Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerComparisonState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb2 : register(b2)
{
float4 cb2[25];
}

cbuffer cb1 : register(b1)
{
float4 cb1[22];
}

cbuffer cb0 : register(b0)
{
float4 cb0[9];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : SV_POSITION0,
float4 v1 : TEXCOORD0,
float4 v2 : TEXCOORD1,
float4 v3 : TEXCOORD2,
float3 v4 : TEXCOORD3,
float fov : TEXCOORD4, // New input from vertex shader with unity_CameraInvProjection[0].x;
out float4 o0 : SV_Target0)
{
float4 r0,r1,r2,r3;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = t0.Sample(s0_s, v1.xy).xyzw;
r0.y = cb0[7].x * r0.x + cb0[7].y;
r0.y = 1 / r0.y;
r0.z = r0.x + -r0.y;
r0.y = cb0[8].w * r0.z + r0.y;
r0.x = 1 + -r0.x;
r1.xyz = v4.xyz + -v3.xyz;
r0.xzw = r0.xxx * r1.xyz + v3.xyz;
r0.xzw = -v2.xyz * r0.yyy + r0.xzw;
r1.xyz = v2.xyz * r0.yyy;
r0.xyz = cb0[8].www * r0.xzw + r1.xyz;

float depth = r0.z;
float4 stereo = StereoParams.Load(0);
float separation = stereo.x; float convergence = stereo.y;
r0.x -= separation * (depth - convergence) * fov;

r1.xyzw = cb1[19].xyzw * r0.yyyy;
r1.xyzw = cb1[18].xyzw * r0.xxxx + r1.xyzw;
r0.xyzw = cb1[20].xyzw * r0.zzzz + r1.xyzw;
r0.xyzw = cb1[21].xyzw + r0.xyzw;
r1.xyz = -cb2[0].xyz + r0.xyz;
r1.x = dot(r1.xyz, r1.xyz);
r2.xyz = -cb2[1].xyz + r0.xyz;
r1.y = dot(r2.xyz, r2.xyz);
r2.xyz = -cb2[2].xyz + r0.xyz;
r1.z = dot(r2.xyz, r2.xyz);
r2.xyz = -cb2[3].xyz + r0.xyz;
r1.w = dot(r2.xyz, r2.xyz);
r1.xyzw = cmp(r1.xyzw < cb2[4].xyzw);
r2.xyz = r1.xyz ? float3(-1,-1,-1) : float3(-0,-0,-0);
r1.xyzw = r1.xyzw ? float4(1,1,1,1) : 0;
r2.xyz = r1.yzw + r2.xyz;
r1.yzw = max(float3(0,0,0), r2.xyz);
r2.xyz = cb2[13].xyz * r0.yyy;
r2.xyz = cb2[12].xyz * r0.xxx + r2.xyz;
r2.xyz = cb2[14].xyz * r0.zzz + r2.xyz;
r2.xyz = cb2[15].xyz * r0.www + r2.xyz;
r2.xyz = r2.xyz * r1.yyy;
r3.xyz = cb2[9].xyz * r0.yyy;
r3.xyz = cb2[8].xyz * r0.xxx + r3.xyz;
r3.xyz = cb2[10].xyz * r0.zzz + r3.xyz;
r3.xyz = cb2[11].xyz * r0.www + r3.xyz;
r2.xyz = r3.xyz * r1.xxx + r2.xyz;
r1.x = dot(r1.xyzw, float4(1,1,1,1));
r3.xyz = cb2[17].xyz * r0.yyy;
r3.xyz = cb2[16].xyz * r0.xxx + r3.xyz;
r3.xyz = cb2[18].xyz * r0.zzz + r3.xyz;
r3.xyz = cb2[19].xyz * r0.www + r3.xyz;
r2.xyz = r3.xyz * r1.zzz + r2.xyz;
r3.xyz = cb2[21].xyz * r0.yyy;
r3.xyz = cb2[20].xyz * r0.xxx + r3.xyz;
r0.xyz = cb2[22].xyz * r0.zzz + r3.xyz;
r0.xyz = cb2[23].xyz * r0.www + r0.xyz;
r0.xyz = r0.xyz * r1.www + r2.xyz;
r0.z = r0.z + -r1.x;
r0.z = 1 + r0.z;
r0.x = t1.SampleCmpLevelZero(s1_s, r0.xy, r0.z).x;
r0.y = 1 + -cb2[24].x;
o0.xyzw = r0.xxxx * r0.yyyy + cb2[24].xxxx;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sat Jun 17 19:46:58 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float
// TEXCOORD 0 xyzw 1 NONE float xy
// TEXCOORD 1 xyz 2 NONE float xyz
// TEXCOORD 2 xyz 3 NONE float xyz
// TEXCOORD 3 xyz 4 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target 0 xyzw 0 TARGET float xyzw
//
ps_4_0
dcl_constantbuffer cb0[9], immediateIndexed
dcl_constantbuffer cb1[22], immediateIndexed
dcl_constantbuffer cb2[25], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_comparison
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_input_ps linear v1.xy
dcl_input_ps linear v2.xyz
dcl_input_ps linear v3.xyz
dcl_input_ps linear v4.xyz
dcl_output o0.xyzw
dcl_temps 4
sample r0.xyzw, v1.xyxx, t0.xyzw, s0
mad r0.y, cb0[7].x, r0.x, cb0[7].y
div r0.y, l(1.000000, 1.000000, 1.000000, 1.000000), r0.y
add r0.z, -r0.y, r0.x
mad r0.y, cb0[8].w, r0.z, r0.y
add r0.x, -r0.x, l(1.000000)
add r1.xyz, -v3.xyzx, v4.xyzx
mad r0.xzw, r0.xxxx, r1.xxyz, v3.xxyz
mad r0.xzw, -v2.xxyz, r0.yyyy, r0.xxzw
mul r1.xyz, r0.yyyy, v2.xyzx
mad r0.xyz, cb0[8].wwww, r0.xzwx, r1.xyzx
mul r1.xyzw, r0.yyyy, cb1[19].xyzw
mad r1.xyzw, cb1[18].xyzw, r0.xxxx, r1.xyzw
mad r0.xyzw, cb1[20].xyzw, r0.zzzz, r1.xyzw
add r0.xyzw, r0.xyzw, cb1[21].xyzw
add r1.xyz, r0.xyzx, -cb2[0].xyzx
dp3 r1.x, r1.xyzx, r1.xyzx
add r2.xyz, r0.xyzx, -cb2[1].xyzx
dp3 r1.y, r2.xyzx, r2.xyzx
add r2.xyz, r0.xyzx, -cb2[2].xyzx
dp3 r1.z, r2.xyzx, r2.xyzx
add r2.xyz, r0.xyzx, -cb2[3].xyzx
dp3 r1.w, r2.xyzx, r2.xyzx
lt r1.xyzw, r1.xyzw, cb2[4].xyzw
movc r2.xyz, r1.xyzx, l(-1.000000,-1.000000,-1.000000,0), l(-0.000000,-0.000000,-0.000000,0)
and r1.xyzw, r1.xyzw, l(0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000)
add r2.xyz, r2.xyzx, r1.yzwy
max r1.yzw, r2.xxyz, l(0.000000, 0.000000, 0.000000, 0.000000)
mul r2.xyz, r0.yyyy, cb2[13].xyzx
mad r2.xyz, cb2[12].xyzx, r0.xxxx, r2.xyzx
mad r2.xyz, cb2[14].xyzx, r0.zzzz, r2.xyzx
mad r2.xyz, cb2[15].xyzx, r0.wwww, r2.xyzx
mul r2.xyz, r1.yyyy, r2.xyzx
mul r3.xyz, r0.yyyy, cb2[9].xyzx
mad r3.xyz, cb2[8].xyzx, r0.xxxx, r3.xyzx
mad r3.xyz, cb2[10].xyzx, r0.zzzz, r3.xyzx
mad r3.xyz, cb2[11].xyzx, r0.wwww, r3.xyzx
mad r2.xyz, r3.xyzx, r1.xxxx, r2.xyzx
dp4 r1.x, r1.xyzw, l(1.000000, 1.000000, 1.000000, 1.000000)
mul r3.xyz, r0.yyyy, cb2[17].xyzx
mad r3.xyz, cb2[16].xyzx, r0.xxxx, r3.xyzx
mad r3.xyz, cb2[18].xyzx, r0.zzzz, r3.xyzx
mad r3.xyz, cb2[19].xyzx, r0.wwww, r3.xyzx
mad r2.xyz, r3.xyzx, r1.zzzz, r2.xyzx
mul r3.xyz, r0.yyyy, cb2[21].xyzx
mad r3.xyz, cb2[20].xyzx, r0.xxxx, r3.xyzx
mad r0.xyz, cb2[22].xyzx, r0.zzzz, r3.xyzx
mad r0.xyz, cb2[23].xyzx, r0.wwww, r0.xyzx
mad r0.xyz, r0.xyzx, r1.wwww, r2.xyzx
add r0.z, -r1.x, r0.z
add r0.z, r0.z, l(1.000000)
sample_c_lz r0.x, r0.xyxx, t1.xxxx, s1, r0.z
add r0.y, -cb2[24].x, l(1.000000)
mad o0.xyzw, r0.xxxx, r0.yyyy, cb2[24].xxxx
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


If it doesn't work, try going to the vertex shader and changing the axis "unity_CameraInvProjection" is using in the code. Instead of the "[1], [0], [2], [3]" order, change it to "[0], [3], [1], [2]".

If it works, it should be 100% correct at all FoV values.



EDIT: wow, I spent like half an hour posting this. Now I see your new post. I'll have to think about that one for a while.


That worked perfect!!! can we use this to fix the other shader?

#16
Posted 06/18/2017 05:10 PM   
It depends. If they are extremely similar vertex and pixel shaders, yes. For example, that torch/lanterns shader is something I haven't seen before, so I have no idea for now. Oh, and I think you should add these things to d3dx.ini just in case (they are in that file in the Yooka-Laylee fix, because you may need to know where you have to paste them. Green commented lines may look the wrong color here in the forums): [code] ;;;;;;;;;;;;;;;;;;;;;;; DARKSTARSWORD'S UNITY 5 TEMPLATE ;;;;;;;;;;;;;;;;;;;;;;; ; Custom resource declarations [Resource_UnityPerCameraRare] max_copies_per_frame = 1 [Resource_CameraDepthTexture] max_copies_per_frame = 1 [Resource_UnityPerCamera] max_copies_per_frame = 1 [Resource_UnityPerDraw] max_copies_per_frame = 1 [Resource_Inverse_MVP] type = Buffer format = R32G32B32A32_FLOAT array = 4 ;------------------------------------------------------------------------------------------------------ ; Commands to run from the Present call at the start/end of each frame ; ; Useful to clear custom resources or ini params at the start of each frame, or ; to run a custom shader to do whatever you can dream up. ;------------------------------------------------------------------------------------------------------ [Present] ; Clear custom resources on the present call to ensure we don't use stale data: Resource_UnityPerCameraRare = null Resource_CameraDepthTexture = null Resource_UnityPerCamera = null Resource_UnityPerDraw = null [/code] And: [code] [CustomShader_Inverse_Unity_MVP] max_executions_per_frame = 1 cs = ShaderFixes/inverse_unity_mvp.hlsl cs-cb11 = Resource_UnityPerDraw cs-u0 = Resource_Inverse_MVP Dispatch = 1, 1, 1 post cs-cb11 = null post cs-u0 = null [/code] I think they can help performance or be needed in some way.
It depends. If they are extremely similar vertex and pixel shaders, yes.

For example, that torch/lanterns shader is something I haven't seen before, so I have no idea for now.

Oh, and I think you should add these things to d3dx.ini just in case (they are in that file in the Yooka-Laylee fix, because you may need to know where you have to paste them. Green commented lines may look the wrong color here in the forums):

;;;;;;;;;;;;;;;;;;;;;;; DARKSTARSWORD'S UNITY 5 TEMPLATE ;;;;;;;;;;;;;;;;;;;;;;;

; Custom resource declarations
[Resource_UnityPerCameraRare]
max_copies_per_frame = 1

[Resource_CameraDepthTexture]
max_copies_per_frame = 1

[Resource_UnityPerCamera]
max_copies_per_frame = 1

[Resource_UnityPerDraw]
max_copies_per_frame = 1

[Resource_Inverse_MVP]
type = Buffer
format = R32G32B32A32_FLOAT
array = 4

;------------------------------------------------------------------------------------------------------
; Commands to run from the Present call at the start/end of each frame
;
; Useful to clear custom resources or ini params at the start of each frame, or
; to run a custom shader to do whatever you can dream up.
;------------------------------------------------------------------------------------------------------
[Present]
; Clear custom resources on the present call to ensure we don't use stale data:
Resource_UnityPerCameraRare = null
Resource_CameraDepthTexture = null
Resource_UnityPerCamera = null
Resource_UnityPerDraw = null


And:

[CustomShader_Inverse_Unity_MVP]
max_executions_per_frame = 1
cs = ShaderFixes/inverse_unity_mvp.hlsl
cs-cb11 = Resource_UnityPerDraw
cs-u0 = Resource_Inverse_MVP
Dispatch = 1, 1, 1
post cs-cb11 = null
post cs-u0 = null


I think they can help performance or be needed in some way.

CPU: Intel Core i7 7700K @ 4.9GHz
Motherboard: Gigabyte Aorus GA-Z270X-Gaming 5
RAM: GSKILL Ripjaws Z 16GB 3866MHz CL18
GPU: Gainward Phoenix 1080 GLH
Monitor: Asus PG278QR
Speakers: Logitech Z506
Donations account: masterotakusuko@gmail.com

#17
Posted 06/18/2017 05:17 PM   
@Masterotaku I don't think last shader I posted are the right shader of those latern shadows. I can't find the right shader. :(
@Masterotaku I don't think last shader I posted are the right shader of those latern shadows. I can't find the right shader. :(

#18
Posted 06/18/2017 06:36 PM   
How does that shader look like in a screenshot? "Double depth" effect with haloing? If so, maybe this will work in the vertex shader: [code] // ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 17:53:52 2017 cbuffer cb2 : register(b2) { float4 cb2[21]; } cbuffer cb1 : register(b1) { float4 cb1[4]; } cbuffer cb0 : register(b0) { float4 cb0[2]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : POSITION0, float4 v1 : TEXCOORD0, float4 v2 : TEXCOORD1, float2 v3 : TEXCOORD2, out float3 o0 : TEXCOORD0, out float4 o1 : SV_POSITION0, out float2 o2 : TEXCOORD1, out float2 p2 : TEXCOORD2, out float4 o3 : TEXCOORD3, out float4 o4 : TEXCOORD4, out float4 o5 : TEXCOORD5) { float4 r0,r1; uint4 bitmask, uiDest; float4 fDest; float4 stereo = StereoParams.Load(0); r0.xyzw = cb1[1].xyzw * v0.yyyy; r0.xyzw = cb1[0].xyzw * v0.xxxx + r0.xyzw; r0.xyzw = cb1[2].xyzw * v0.zzzz + r0.xyzw; r1.xyzw = cb1[3].xyzw * v0.wwww + r0.xyzw; r0.xyzw = cb1[3].xyzw + r0.xyzw; o0.xyz = -cb0[1].xyz + r1.xyz; o4.xyzw = r1.xyzw; r1.xyzw = cb2[18].xyzw * r0.yyyy; r1.xyzw = cb2[17].xyzw * r0.xxxx + r1.xyzw; r1.xyzw = cb2[19].xyzw * r0.zzzz + r1.xyzw; r0.xyzw = cb2[20].xyzw * r0.wwww + r1.xyzw; o1.xyzw = r0.xyzw; o5.xyzw = r0.xyzw; o5.x+=stereo.x*(o5.w-stereo.y); o2.xy = v1.xy; p2.xy = v2.xy; o3.xy = v3.xy; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sun Jun 18 17:53:52 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyzw // TEXCOORD 0 xy 1 NONE float xy // TEXCOORD 1 xy 2 NONE float xy // TEXCOORD 2 xy 3 NONE float xy // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // TEXCOORD 0 xyz 0 NONE float xyz // SV_POSITION 0 xyzw 1 POS float xyzw // TEXCOORD 1 xy 2 NONE float xy // TEXCOORD 2 zw 2 NONE float zw // TEXCOORD 3 xy 3 NONE float xy // TEXCOORD 4 xyzw 4 NONE float xyzw // TEXCOORD 5 xyzw 5 NONE float xyzw // vs_4_0 dcl_constantbuffer cb0[2], immediateIndexed dcl_constantbuffer cb1[4], immediateIndexed dcl_constantbuffer cb2[21], immediateIndexed dcl_input v0.xyzw dcl_input v1.xy dcl_input v2.xy dcl_input v3.xy dcl_output o0.xyz dcl_output_siv o1.xyzw, position dcl_output o2.xy dcl_output o2.zw dcl_output o3.xy dcl_output o4.xyzw dcl_output o5.xyzw dcl_temps 2 mul r0.xyzw, v0.yyyy, cb1[1].xyzw mad r0.xyzw, cb1[0].xyzw, v0.xxxx, r0.xyzw mad r0.xyzw, cb1[2].xyzw, v0.zzzz, r0.xyzw mad r1.xyzw, cb1[3].xyzw, v0.wwww, r0.xyzw add r0.xyzw, r0.xyzw, cb1[3].xyzw add o0.xyz, r1.xyzx, -cb0[1].xyzx mov o4.xyzw, r1.xyzw mul r1.xyzw, r0.yyyy, cb2[18].xyzw mad r1.xyzw, cb2[17].xyzw, r0.xxxx, r1.xyzw mad r1.xyzw, cb2[19].xyzw, r0.zzzz, r1.xyzw mad r0.xyzw, cb2[20].xyzw, r0.wwww, r1.xyzw mov o1.xyzw, r0.xyzw mov o5.xyzw, r0.xyzw mov o2.xy, v1.xyxx mov o2.zw, v2.xxxy mov o3.xy, v3.xyxx ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] But I can't know because I don't have the game. Also the pixel shader doesn't use v5 for anything...
How does that shader look like in a screenshot? "Double depth" effect with haloing?

If so, maybe this will work in the vertex shader:

// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 17:53:52 2017
cbuffer cb2 : register(b2)
{
float4 cb2[21];
}

cbuffer cb1 : register(b1)
{
float4 cb1[4];
}

cbuffer cb0 : register(b0)
{
float4 cb0[2];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : POSITION0,
float4 v1 : TEXCOORD0,
float4 v2 : TEXCOORD1,
float2 v3 : TEXCOORD2,
out float3 o0 : TEXCOORD0,
out float4 o1 : SV_POSITION0,
out float2 o2 : TEXCOORD1,
out float2 p2 : TEXCOORD2,
out float4 o3 : TEXCOORD3,
out float4 o4 : TEXCOORD4,
out float4 o5 : TEXCOORD5)
{
float4 r0,r1;
uint4 bitmask, uiDest;
float4 fDest;

float4 stereo = StereoParams.Load(0);

r0.xyzw = cb1[1].xyzw * v0.yyyy;
r0.xyzw = cb1[0].xyzw * v0.xxxx + r0.xyzw;
r0.xyzw = cb1[2].xyzw * v0.zzzz + r0.xyzw;
r1.xyzw = cb1[3].xyzw * v0.wwww + r0.xyzw;
r0.xyzw = cb1[3].xyzw + r0.xyzw;
o0.xyz = -cb0[1].xyz + r1.xyz;
o4.xyzw = r1.xyzw;
r1.xyzw = cb2[18].xyzw * r0.yyyy;
r1.xyzw = cb2[17].xyzw * r0.xxxx + r1.xyzw;
r1.xyzw = cb2[19].xyzw * r0.zzzz + r1.xyzw;
r0.xyzw = cb2[20].xyzw * r0.wwww + r1.xyzw;
o1.xyzw = r0.xyzw;
o5.xyzw = r0.xyzw;
o5.x+=stereo.x*(o5.w-stereo.y);
o2.xy = v1.xy;
p2.xy = v2.xy;
o3.xy = v3.xy;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sun Jun 18 17:53:52 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyzw
// TEXCOORD 0 xy 1 NONE float xy
// TEXCOORD 1 xy 2 NONE float xy
// TEXCOORD 2 xy 3 NONE float xy
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// TEXCOORD 0 xyz 0 NONE float xyz
// SV_POSITION 0 xyzw 1 POS float xyzw
// TEXCOORD 1 xy 2 NONE float xy
// TEXCOORD 2 zw 2 NONE float zw
// TEXCOORD 3 xy 3 NONE float xy
// TEXCOORD 4 xyzw 4 NONE float xyzw
// TEXCOORD 5 xyzw 5 NONE float xyzw
//
vs_4_0
dcl_constantbuffer cb0[2], immediateIndexed
dcl_constantbuffer cb1[4], immediateIndexed
dcl_constantbuffer cb2[21], immediateIndexed
dcl_input v0.xyzw
dcl_input v1.xy
dcl_input v2.xy
dcl_input v3.xy
dcl_output o0.xyz
dcl_output_siv o1.xyzw, position
dcl_output o2.xy
dcl_output o2.zw
dcl_output o3.xy
dcl_output o4.xyzw
dcl_output o5.xyzw
dcl_temps 2
mul r0.xyzw, v0.yyyy, cb1[1].xyzw
mad r0.xyzw, cb1[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb1[2].xyzw, v0.zzzz, r0.xyzw
mad r1.xyzw, cb1[3].xyzw, v0.wwww, r0.xyzw
add r0.xyzw, r0.xyzw, cb1[3].xyzw
add o0.xyz, r1.xyzx, -cb0[1].xyzx
mov o4.xyzw, r1.xyzw
mul r1.xyzw, r0.yyyy, cb2[18].xyzw
mad r1.xyzw, cb2[17].xyzw, r0.xxxx, r1.xyzw
mad r1.xyzw, cb2[19].xyzw, r0.zzzz, r1.xyzw
mad r0.xyzw, cb2[20].xyzw, r0.wwww, r1.xyzw
mov o1.xyzw, r0.xyzw
mov o5.xyzw, r0.xyzw
mov o2.xy, v1.xyxx
mov o2.zw, v2.xxxy
mov o3.xy, v3.xyxx
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/



But I can't know because I don't have the game. Also the pixel shader doesn't use v5 for anything...

CPU: Intel Core i7 7700K @ 4.9GHz
Motherboard: Gigabyte Aorus GA-Z270X-Gaming 5
RAM: GSKILL Ripjaws Z 16GB 3866MHz CL18
GPU: Gainward Phoenix 1080 GLH
Monitor: Asus PG278QR
Speakers: Logitech Z506
Donations account: masterotakusuko@gmail.com

#19
Posted 06/18/2017 06:47 PM   
This is a screenshot of the broken shadow: [url]https://drive.google.com/open?id=0B7-C-G8Te2HbMHdTUmppSUZyUE0[/url]
This is a screenshot of the broken shadow:
https://drive.google.com/open?id=0B7-C-G8Te2HbMHdTUmppSUZyUE0

#20
Posted 06/18/2017 06:59 PM   
Here is the real shader: 4c9936f7f1d28f6e-vs_replace.txt [code]// lights // ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017 cbuffer cb3 : register(b3) { float4 cb3[21]; } cbuffer cb2 : register(b2) { float4 cb2[4]; } cbuffer cb1 : register(b1) { float4 cb1[6]; } cbuffer cb0 : register(b0) { float4 cb0[3]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : POSITION0, float3 v1 : NORMAL0, out float4 o0 : SV_POSITION0, out float4 o1 : TEXCOORD0, out float3 o2 : TEXCOORD1) { float4 r0,r1,r2; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = cb2[1].xyzw * v0.yyyy; r0.xyzw = cb2[0].xyzw * v0.xxxx + r0.xyzw; r0.xyzw = cb2[2].xyzw * v0.zzzz + r0.xyzw; r0.xyzw = cb2[3].xyzw + r0.xyzw; r1.xyzw = cb3[18].xyzw * r0.yyyy; r1.xyzw = cb3[17].xyzw * r0.xxxx + r1.xyzw; r1.xyzw = cb3[19].xyzw * r0.zzzz + r1.xyzw; r1.xyzw = cb3[20].xyzw * r0.wwww + r1.xyzw; o0.xyzw = r1.xyzw; r1.y = cb1[5].x * r1.y; r2.xzw = float3(0.5,0.5,0.5) * r1.xwy; o1.zw = r1.zw; o1.xy = r2.xw + r2.zz; r1.xyz = cb3[10].xyz * r0.yyy; r1.xyz = cb3[9].xyz * r0.xxx + r1.xyz; r0.xyz = cb3[11].xyz * r0.zzz + r1.xyz; r0.xyz = cb3[12].xyz * r0.www + r0.xyz; r1.xyz = float3(-1,-1,1) * r0.xyz; r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz; o2.xyz = cb0[2].xxx * r0.xyz + r1.xyz; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyz // NORMAL 0 xyz 1 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float xyzw // TEXCOORD 0 xyzw 1 NONE float xyzw // TEXCOORD 1 xyz 2 NONE float xyz // vs_4_0 dcl_constantbuffer cb0[3], immediateIndexed dcl_constantbuffer cb1[6], immediateIndexed dcl_constantbuffer cb2[4], immediateIndexed dcl_constantbuffer cb3[21], immediateIndexed dcl_input v0.xyz dcl_input v1.xyz dcl_output_siv o0.xyzw, position dcl_output o1.xyzw dcl_output o2.xyz dcl_temps 3 mul r0.xyzw, v0.yyyy, cb2[1].xyzw mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw add r0.xyzw, r0.xyzw, cb2[3].xyzw mul r1.xyzw, r0.yyyy, cb3[18].xyzw mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw mad r1.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw mov o0.xyzw, r1.xyzw mul r1.y, r1.y, cb1[5].x mul r2.xzw, r1.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000) mov o1.zw, r1.zzzw add o1.xy, r2.zzzz, r2.xwxx mul r1.xyz, r0.yyyy, cb3[10].xyzx mad r1.xyz, cb3[9].xyzx, r0.xxxx, r1.xyzx mad r0.xyz, cb3[11].xyzx, r0.zzzz, r1.xyzx mad r0.xyz, cb3[12].xyzx, r0.wwww, r0.xyzx mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000) mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx mad o2.xyz, cb0[2].xxxx, r0.xyzx, r1.xyzx ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] and the other :e3fd8a725676603e-ps_replace.txt [code]// lighs // ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017 Texture2D<float4> t5 : register(t5); Texture2D<float4> t4 : register(t4); Texture2D<float4> t3 : register(t3); TextureCube<float4> t2 : register(t2); Texture2D<float4> t1 : register(t1); Texture2D<float4> t0 : register(t0); SamplerState s5_s : register(s5); SamplerState s4_s : register(s4); SamplerState s3_s : register(s3); SamplerState s2_s : register(s2); SamplerState s1_s : register(s1); SamplerState s0_s : register(s0); cbuffer cb2 : register(b2) { float4 cb2[22]; } cbuffer cb1 : register(b1) { float4 cb1[8]; } cbuffer cb0 : register(b0) { float4 cb0[11]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : SV_POSITION0, float4 v1 : TEXCOORD0, float3 v2 : TEXCOORD1, out float4 o0 : SV_Target0) { float4 r0,r1,r2,r3,r4,r5,r6; uint4 bitmask, uiDest; float4 fDest; r0.x = cb1[5].z / v2.z; r0.xyz = v2.xyz * r0.xxx; r1.xy = v1.xy / v1.ww; r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw; r0.w = cb1[7].x * r2.x + cb1[7].y; r0.w = 1 / r0.w; r0.xyz = r0.xyz * r0.www; r2.xyz = cb2[19].xyz * r0.yyy; r0.xyw = cb2[18].xyz * r0.xxx + r2.xyz; r0.xyz = cb2[20].xyz * r0.zzz + r0.xyw; r0.xyz = cb2[21].xyz + r0.xyz; r2.xyz = -cb1[4].xyz + r0.xyz; r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r3.xyz = -cb0[4].xyz + r0.xyz; r0.w = dot(r3.xyz, r3.xyz); r1.z = rsqrt(r0.w); r0.w = cb0[4].w * r0.w; r4.xyzw = t1.Sample(s1_s, r0.ww).xyzw; r4.yzw = -r3.xyz * r1.zzz + -r2.xyz; r3.xyz = r3.xyz * r1.zzz; r0.w = dot(r4.yzw, r4.yzw); r0.w = max(0.00100000005, r0.w); r0.w = rsqrt(r0.w); r4.yzw = r4.yzw * r0.www; r5.xyzw = t5.Sample(s5_s, r1.xy).xyzw; r5.xyz = r5.xyz * float3(2,2,2) + float3(-1,-1,-1); r0.w = dot(r5.xyz, r5.xyz); r0.w = rsqrt(r0.w); r5.xyz = r5.xyz * r0.www; r0.w = saturate(dot(r5.xyz, r4.yzw)); r1.z = saturate(dot(-r3.xyz, r4.yzw)); r1.w = saturate(dot(r5.xyz, -r3.xyz)); r2.x = dot(r5.xyz, -r2.xyz); r3.xyzw = t4.Sample(s4_s, r1.xy).xyzw; r5.xyzw = t3.Sample(s3_s, r1.xy).xyzw; r6.xyzw = float4(1,1,1,1) + -r3.wxyz; r1.x = r6.x * r6.x; r1.y = r1.x * r1.x; r2.y = r0.w * r1.y + -r0.w; r0.w = r2.y * r0.w + 1; r0.w = r0.w * r0.w + 1.00000001e-007; r1.y = 0.318309873 * r1.y; r0.w = r1.y / r0.w; r1.y = -r6.x * r6.x + 1; r2.y = abs(r2.x) * r1.y + r1.x; r1.x = r1.w * r1.y + r1.x; r1.x = abs(r2.x) * r1.x; r1.y = 1 + -abs(r2.x); r1.x = r1.w * r2.y + r1.x; r1.x = 9.99999975e-006 + r1.x; r1.x = 0.5 / r1.x; r0.w = r1.x * r0.w; r0.w = 3.14159274 * r0.w; r0.w = max(9.99999975e-005, r0.w); r0.w = sqrt(r0.w); r0.w = r0.w * r1.w; r1.x = dot(r3.xyz, r3.xyz); r1.x = cmp(r1.x != 0.000000); r1.x = r1.x ? 1.000000 : 0; r0.w = r1.x * r0.w; r2.xyz = cb0[8].xyz * r0.yyy; r2.xyz = cb0[7].xyz * r0.xxx + r2.xyz; r0.xyz = cb0[9].xyz * r0.zzz + r2.xyz; r0.xyz = cb0[10].xyz + r0.xyz; r2.xyzw = t2.SampleBias(s2_s, r0.xyz, -8).xyzw; r0.x = r4.x * r2.w; r0.xyz = cb0[5].xyz * r0.xxx; r2.xyz = r0.www * r0.xyz; r0.w = 1 + -r1.z; r1.x = r1.z * r1.z; r1.x = dot(r1.xx, r6.xx); r1.x = -0.5 + r1.x; r1.z = r0.w * r0.w; r1.z = r1.z * r1.z; r0.w = r1.z * r0.w; r3.xyz = r6.yzw * r0.www + r3.xyz; r2.xyz = r3.xyz * r2.xyz; r0.w = r1.y * r1.y; r0.w = r0.w * r0.w; r0.w = r0.w * r1.y; r0.w = r1.x * r0.w + 1; r1.y = 1 + -r1.w; r1.z = r1.y * r1.y; r1.z = r1.z * r1.z; r1.y = r1.z * r1.y; r1.x = r1.x * r1.y + 1; r0.w = r1.x * r0.w; r0.w = r0.w * r1.w; r0.xyz = r0.xyz * r0.www; r0.xyz = r5.xyz * r0.xyz + r2.xyz; r0.w = 1; o0.xyzw = exp2(-r0.xyzw); return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float // TEXCOORD 0 xyzw 1 NONE float xy w // TEXCOORD 1 xyz 2 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_Target 0 xyzw 0 TARGET float xyzw // ps_4_0 dcl_constantbuffer cb0[11], immediateIndexed dcl_constantbuffer cb1[8], immediateIndexed dcl_constantbuffer cb2[22], immediateIndexed dcl_sampler s0, mode_default dcl_sampler s1, mode_default dcl_sampler s2, mode_default dcl_sampler s3, mode_default dcl_sampler s4, mode_default dcl_sampler s5, mode_default dcl_resource_texture2d (float,float,float,float) t0 dcl_resource_texture2d (float,float,float,float) t1 dcl_resource_texturecube (float,float,float,float) t2 dcl_resource_texture2d (float,float,float,float) t3 dcl_resource_texture2d (float,float,float,float) t4 dcl_resource_texture2d (float,float,float,float) t5 dcl_input_ps linear v1.xyw dcl_input_ps linear v2.xyz dcl_output o0.xyzw dcl_temps 7 div r0.x, cb1[5].z, v2.z mul r0.xyz, r0.xxxx, v2.xyzx div r1.xy, v1.xyxx, v1.wwww sample r2.xyzw, r1.xyxx, t0.xyzw, s0 mad r0.w, cb1[7].x, r2.x, cb1[7].y div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w mul r0.xyz, r0.wwww, r0.xyzx mul r2.xyz, r0.yyyy, cb2[19].xyzx mad r0.xyw, cb2[18].xyxz, r0.xxxx, r2.xyxz mad r0.xyz, cb2[20].xyzx, r0.zzzz, r0.xywx add r0.xyz, r0.xyzx, cb2[21].xyzx add r2.xyz, r0.xyzx, -cb1[4].xyzx dp3 r0.w, r2.xyzx, r2.xyzx rsq r0.w, r0.w mul r2.xyz, r0.wwww, r2.xyzx add r3.xyz, r0.xyzx, -cb0[4].xyzx dp3 r0.w, r3.xyzx, r3.xyzx rsq r1.z, r0.w mul r0.w, r0.w, cb0[4].w sample r4.xyzw, r0.wwww, t1.xyzw, s1 mad r4.yzw, -r3.xxyz, r1.zzzz, -r2.xxyz mul r3.xyz, r1.zzzz, r3.xyzx dp3 r0.w, r4.yzwy, r4.yzwy max r0.w, r0.w, l(0.001000) rsq r0.w, r0.w mul r4.yzw, r0.wwww, r4.yyzw sample r5.xyzw, r1.xyxx, t5.xyzw, s5 mad r5.xyz, r5.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) dp3 r0.w, r5.xyzx, r5.xyzx rsq r0.w, r0.w mul r5.xyz, r0.wwww, r5.xyzx dp3_sat r0.w, r5.xyzx, r4.yzwy dp3_sat r1.z, -r3.xyzx, r4.yzwy dp3_sat r1.w, r5.xyzx, -r3.xyzx dp3 r2.x, r5.xyzx, -r2.xyzx sample r3.xyzw, r1.xyxx, t4.xyzw, s4 sample r5.xyzw, r1.xyxx, t3.xyzw, s3 add r6.xyzw, -r3.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000) mul r1.x, r6.x, r6.x mul r1.y, r1.x, r1.x mad r2.y, r0.w, r1.y, -r0.w mad r0.w, r2.y, r0.w, l(1.000000) mad r0.w, r0.w, r0.w, l(1.000000012E-007) mul r1.y, r1.y, l(0.318309873) div r0.w, r1.y, r0.w mad r1.y, -r6.x, r6.x, l(1.000000) mad r2.y, |r2.x|, r1.y, r1.x mad r1.x, r1.w, r1.y, r1.x mul r1.x, r1.x, |r2.x| add r1.y, -|r2.x|, l(1.000000) mad r1.x, r1.w, r2.y, r1.x add r1.x, r1.x, l(0.000010) div r1.x, l(0.500000), r1.x mul r0.w, r0.w, r1.x mul r0.w, r0.w, l(3.14159274) max r0.w, r0.w, l(0.000100) sqrt r0.w, r0.w mul r0.w, r1.w, r0.w dp3 r1.x, r3.xyzx, r3.xyzx ne r1.x, r1.x, l(0.000000) and r1.x, r1.x, l(0x3f800000) mul r0.w, r0.w, r1.x mul r2.xyz, r0.yyyy, cb0[8].xyzx mad r2.xyz, cb0[7].xyzx, r0.xxxx, r2.xyzx mad r0.xyz, cb0[9].xyzx, r0.zzzz, r2.xyzx add r0.xyz, r0.xyzx, cb0[10].xyzx sample_b r2.xyzw, r0.xyzx, t2.xyzw, s2, l(-8.000000) mul r0.x, r2.w, r4.x mul r0.xyz, r0.xxxx, cb0[5].xyzx mul r2.xyz, r0.xyzx, r0.wwww add r0.w, -r1.z, l(1.000000) mul r1.x, r1.z, r1.z dp2 r1.x, r1.xxxx, r6.xxxx add r1.x, r1.x, l(-0.500000) mul r1.z, r0.w, r0.w mul r1.z, r1.z, r1.z mul r0.w, r0.w, r1.z mad r3.xyz, r6.yzwy, r0.wwww, r3.xyzx mul r2.xyz, r2.xyzx, r3.xyzx mul r0.w, r1.y, r1.y mul r0.w, r0.w, r0.w mul r0.w, r1.y, r0.w mad r0.w, r1.x, r0.w, l(1.000000) add r1.y, -r1.w, l(1.000000) mul r1.z, r1.y, r1.y mul r1.z, r1.z, r1.z mul r1.y, r1.y, r1.z mad r1.x, r1.x, r1.y, l(1.000000) mul r0.w, r0.w, r1.x mul r0.w, r1.w, r0.w mul r0.xyz, r0.wwww, r0.xyzx mad r0.xyz, r5.xyzx, r0.xyzx, r2.xyzx mov r0.w, l(1.000000) exp o0.xyzw, -r0.xyzw ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code]
Here is the real shader: 4c9936f7f1d28f6e-vs_replace.txt

// lights
// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017
cbuffer cb3 : register(b3)
{
float4 cb3[21];
}

cbuffer cb2 : register(b2)
{
float4 cb2[4];
}

cbuffer cb1 : register(b1)
{
float4 cb1[6];
}

cbuffer cb0 : register(b0)
{
float4 cb0[3];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : POSITION0,
float3 v1 : NORMAL0,
out float4 o0 : SV_POSITION0,
out float4 o1 : TEXCOORD0,
out float3 o2 : TEXCOORD1)
{
float4 r0,r1,r2;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = cb2[1].xyzw * v0.yyyy;
r0.xyzw = cb2[0].xyzw * v0.xxxx + r0.xyzw;
r0.xyzw = cb2[2].xyzw * v0.zzzz + r0.xyzw;
r0.xyzw = cb2[3].xyzw + r0.xyzw;
r1.xyzw = cb3[18].xyzw * r0.yyyy;
r1.xyzw = cb3[17].xyzw * r0.xxxx + r1.xyzw;
r1.xyzw = cb3[19].xyzw * r0.zzzz + r1.xyzw;
r1.xyzw = cb3[20].xyzw * r0.wwww + r1.xyzw;
o0.xyzw = r1.xyzw;
r1.y = cb1[5].x * r1.y;
r2.xzw = float3(0.5,0.5,0.5) * r1.xwy;
o1.zw = r1.zw;
o1.xy = r2.xw + r2.zz;
r1.xyz = cb3[10].xyz * r0.yyy;
r1.xyz = cb3[9].xyz * r0.xxx + r1.xyz;
r0.xyz = cb3[11].xyz * r0.zzz + r1.xyz;
r0.xyz = cb3[12].xyz * r0.www + r0.xyz;
r1.xyz = float3(-1,-1,1) * r0.xyz;
r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz;
o2.xyz = cb0[2].xxx * r0.xyz + r1.xyz;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyz
// NORMAL 0 xyz 1 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyz 2 NONE float xyz
//
vs_4_0
dcl_constantbuffer cb0[3], immediateIndexed
dcl_constantbuffer cb1[6], immediateIndexed
dcl_constantbuffer cb2[4], immediateIndexed
dcl_constantbuffer cb3[21], immediateIndexed
dcl_input v0.xyz
dcl_input v1.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_temps 3
mul r0.xyzw, v0.yyyy, cb2[1].xyzw
mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw
add r0.xyzw, r0.xyzw, cb2[3].xyzw
mul r1.xyzw, r0.yyyy, cb3[18].xyzw
mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw
mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw
mad r1.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw
mov o0.xyzw, r1.xyzw
mul r1.y, r1.y, cb1[5].x
mul r2.xzw, r1.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000)
mov o1.zw, r1.zzzw
add o1.xy, r2.zzzz, r2.xwxx
mul r1.xyz, r0.yyyy, cb3[10].xyzx
mad r1.xyz, cb3[9].xyzx, r0.xxxx, r1.xyzx
mad r0.xyz, cb3[11].xyzx, r0.zzzz, r1.xyzx
mad r0.xyz, cb3[12].xyzx, r0.wwww, r0.xyzx
mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000)
mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx
mad o2.xyz, cb0[2].xxxx, r0.xyzx, r1.xyzx
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


and the other :e3fd8a725676603e-ps_replace.txt

// lighs
// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017
Texture2D<float4> t5 : register(t5);

Texture2D<float4> t4 : register(t4);

Texture2D<float4> t3 : register(t3);

TextureCube<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s5_s : register(s5);

SamplerState s4_s : register(s4);

SamplerState s3_s : register(s3);

SamplerState s2_s : register(s2);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb2 : register(b2)
{
float4 cb2[22];
}

cbuffer cb1 : register(b1)
{
float4 cb1[8];
}

cbuffer cb0 : register(b0)
{
float4 cb0[11];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : SV_POSITION0,
float4 v1 : TEXCOORD0,
float3 v2 : TEXCOORD1,
out float4 o0 : SV_Target0)
{
float4 r0,r1,r2,r3,r4,r5,r6;
uint4 bitmask, uiDest;
float4 fDest;

r0.x = cb1[5].z / v2.z;
r0.xyz = v2.xyz * r0.xxx;
r1.xy = v1.xy / v1.ww;
r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw;
r0.w = cb1[7].x * r2.x + cb1[7].y;
r0.w = 1 / r0.w;
r0.xyz = r0.xyz * r0.www;
r2.xyz = cb2[19].xyz * r0.yyy;
r0.xyw = cb2[18].xyz * r0.xxx + r2.xyz;
r0.xyz = cb2[20].xyz * r0.zzz + r0.xyw;
r0.xyz = cb2[21].xyz + r0.xyz;
r2.xyz = -cb1[4].xyz + r0.xyz;
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r3.xyz = -cb0[4].xyz + r0.xyz;
r0.w = dot(r3.xyz, r3.xyz);
r1.z = rsqrt(r0.w);
r0.w = cb0[4].w * r0.w;
r4.xyzw = t1.Sample(s1_s, r0.ww).xyzw;
r4.yzw = -r3.xyz * r1.zzz + -r2.xyz;
r3.xyz = r3.xyz * r1.zzz;
r0.w = dot(r4.yzw, r4.yzw);
r0.w = max(0.00100000005, r0.w);
r0.w = rsqrt(r0.w);
r4.yzw = r4.yzw * r0.www;
r5.xyzw = t5.Sample(s5_s, r1.xy).xyzw;
r5.xyz = r5.xyz * float3(2,2,2) + float3(-1,-1,-1);
r0.w = dot(r5.xyz, r5.xyz);
r0.w = rsqrt(r0.w);
r5.xyz = r5.xyz * r0.www;
r0.w = saturate(dot(r5.xyz, r4.yzw));
r1.z = saturate(dot(-r3.xyz, r4.yzw));
r1.w = saturate(dot(r5.xyz, -r3.xyz));
r2.x = dot(r5.xyz, -r2.xyz);
r3.xyzw = t4.Sample(s4_s, r1.xy).xyzw;
r5.xyzw = t3.Sample(s3_s, r1.xy).xyzw;
r6.xyzw = float4(1,1,1,1) + -r3.wxyz;
r1.x = r6.x * r6.x;
r1.y = r1.x * r1.x;
r2.y = r0.w * r1.y + -r0.w;
r0.w = r2.y * r0.w + 1;
r0.w = r0.w * r0.w + 1.00000001e-007;
r1.y = 0.318309873 * r1.y;
r0.w = r1.y / r0.w;
r1.y = -r6.x * r6.x + 1;
r2.y = abs(r2.x) * r1.y + r1.x;
r1.x = r1.w * r1.y + r1.x;
r1.x = abs(r2.x) * r1.x;
r1.y = 1 + -abs(r2.x);
r1.x = r1.w * r2.y + r1.x;
r1.x = 9.99999975e-006 + r1.x;
r1.x = 0.5 / r1.x;
r0.w = r1.x * r0.w;
r0.w = 3.14159274 * r0.w;
r0.w = max(9.99999975e-005, r0.w);
r0.w = sqrt(r0.w);
r0.w = r0.w * r1.w;
r1.x = dot(r3.xyz, r3.xyz);
r1.x = cmp(r1.x != 0.000000);
r1.x = r1.x ? 1.000000 : 0;
r0.w = r1.x * r0.w;
r2.xyz = cb0[8].xyz * r0.yyy;
r2.xyz = cb0[7].xyz * r0.xxx + r2.xyz;
r0.xyz = cb0[9].xyz * r0.zzz + r2.xyz;
r0.xyz = cb0[10].xyz + r0.xyz;
r2.xyzw = t2.SampleBias(s2_s, r0.xyz, -8).xyzw;
r0.x = r4.x * r2.w;
r0.xyz = cb0[5].xyz * r0.xxx;
r2.xyz = r0.www * r0.xyz;
r0.w = 1 + -r1.z;
r1.x = r1.z * r1.z;
r1.x = dot(r1.xx, r6.xx);
r1.x = -0.5 + r1.x;
r1.z = r0.w * r0.w;
r1.z = r1.z * r1.z;
r0.w = r1.z * r0.w;
r3.xyz = r6.yzw * r0.www + r3.xyz;
r2.xyz = r3.xyz * r2.xyz;
r0.w = r1.y * r1.y;
r0.w = r0.w * r0.w;
r0.w = r0.w * r1.y;
r0.w = r1.x * r0.w + 1;
r1.y = 1 + -r1.w;
r1.z = r1.y * r1.y;
r1.z = r1.z * r1.z;
r1.y = r1.z * r1.y;
r1.x = r1.x * r1.y + 1;
r0.w = r1.x * r0.w;
r0.w = r0.w * r1.w;
r0.xyz = r0.xyz * r0.www;
r0.xyz = r5.xyz * r0.xyz + r2.xyz;
r0.w = 1;
o0.xyzw = exp2(-r0.xyzw);
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float
// TEXCOORD 0 xyzw 1 NONE float xy w
// TEXCOORD 1 xyz 2 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target 0 xyzw 0 TARGET float xyzw
//
ps_4_0
dcl_constantbuffer cb0[11], immediateIndexed
dcl_constantbuffer cb1[8], immediateIndexed
dcl_constantbuffer cb2[22], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
dcl_sampler s4, mode_default
dcl_sampler s5, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texturecube (float,float,float,float) t2
dcl_resource_texture2d (float,float,float,float) t3
dcl_resource_texture2d (float,float,float,float) t4
dcl_resource_texture2d (float,float,float,float) t5
dcl_input_ps linear v1.xyw
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 7
div r0.x, cb1[5].z, v2.z
mul r0.xyz, r0.xxxx, v2.xyzx
div r1.xy, v1.xyxx, v1.wwww
sample r2.xyzw, r1.xyxx, t0.xyzw, s0
mad r0.w, cb1[7].x, r2.x, cb1[7].y
div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mul r2.xyz, r0.yyyy, cb2[19].xyzx
mad r0.xyw, cb2[18].xyxz, r0.xxxx, r2.xyxz
mad r0.xyz, cb2[20].xyzx, r0.zzzz, r0.xywx
add r0.xyz, r0.xyzx, cb2[21].xyzx
add r2.xyz, r0.xyzx, -cb1[4].xyzx
dp3 r0.w, r2.xyzx, r2.xyzx
rsq r0.w, r0.w
mul r2.xyz, r0.wwww, r2.xyzx
add r3.xyz, r0.xyzx, -cb0[4].xyzx
dp3 r0.w, r3.xyzx, r3.xyzx
rsq r1.z, r0.w
mul r0.w, r0.w, cb0[4].w
sample r4.xyzw, r0.wwww, t1.xyzw, s1
mad r4.yzw, -r3.xxyz, r1.zzzz, -r2.xxyz
mul r3.xyz, r1.zzzz, r3.xyzx
dp3 r0.w, r4.yzwy, r4.yzwy
max r0.w, r0.w, l(0.001000)
rsq r0.w, r0.w
mul r4.yzw, r0.wwww, r4.yyzw
sample r5.xyzw, r1.xyxx, t5.xyzw, s5
mad r5.xyz, r5.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
dp3 r0.w, r5.xyzx, r5.xyzx
rsq r0.w, r0.w
mul r5.xyz, r0.wwww, r5.xyzx
dp3_sat r0.w, r5.xyzx, r4.yzwy
dp3_sat r1.z, -r3.xyzx, r4.yzwy
dp3_sat r1.w, r5.xyzx, -r3.xyzx
dp3 r2.x, r5.xyzx, -r2.xyzx
sample r3.xyzw, r1.xyxx, t4.xyzw, s4
sample r5.xyzw, r1.xyxx, t3.xyzw, s3
add r6.xyzw, -r3.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000)
mul r1.x, r6.x, r6.x
mul r1.y, r1.x, r1.x
mad r2.y, r0.w, r1.y, -r0.w
mad r0.w, r2.y, r0.w, l(1.000000)
mad r0.w, r0.w, r0.w, l(1.000000012E-007)
mul r1.y, r1.y, l(0.318309873)
div r0.w, r1.y, r0.w
mad r1.y, -r6.x, r6.x, l(1.000000)
mad r2.y, |r2.x|, r1.y, r1.x
mad r1.x, r1.w, r1.y, r1.x
mul r1.x, r1.x, |r2.x|
add r1.y, -|r2.x|, l(1.000000)
mad r1.x, r1.w, r2.y, r1.x
add r1.x, r1.x, l(0.000010)
div r1.x, l(0.500000), r1.x
mul r0.w, r0.w, r1.x
mul r0.w, r0.w, l(3.14159274)
max r0.w, r0.w, l(0.000100)
sqrt r0.w, r0.w
mul r0.w, r1.w, r0.w
dp3 r1.x, r3.xyzx, r3.xyzx
ne r1.x, r1.x, l(0.000000)
and r1.x, r1.x, l(0x3f800000)
mul r0.w, r0.w, r1.x
mul r2.xyz, r0.yyyy, cb0[8].xyzx
mad r2.xyz, cb0[7].xyzx, r0.xxxx, r2.xyzx
mad r0.xyz, cb0[9].xyzx, r0.zzzz, r2.xyzx
add r0.xyz, r0.xyzx, cb0[10].xyzx
sample_b r2.xyzw, r0.xyzx, t2.xyzw, s2, l(-8.000000)
mul r0.x, r2.w, r4.x
mul r0.xyz, r0.xxxx, cb0[5].xyzx
mul r2.xyz, r0.xyzx, r0.wwww
add r0.w, -r1.z, l(1.000000)
mul r1.x, r1.z, r1.z
dp2 r1.x, r1.xxxx, r6.xxxx
add r1.x, r1.x, l(-0.500000)
mul r1.z, r0.w, r0.w
mul r1.z, r1.z, r1.z
mul r0.w, r0.w, r1.z
mad r3.xyz, r6.yzwy, r0.wwww, r3.xyzx
mul r2.xyz, r2.xyzx, r3.xyzx
mul r0.w, r1.y, r1.y
mul r0.w, r0.w, r0.w
mul r0.w, r1.y, r0.w
mad r0.w, r1.x, r0.w, l(1.000000)
add r1.y, -r1.w, l(1.000000)
mul r1.z, r1.y, r1.y
mul r1.z, r1.z, r1.z
mul r1.y, r1.y, r1.z
mad r1.x, r1.x, r1.y, l(1.000000)
mul r0.w, r0.w, r1.x
mul r0.w, r1.w, r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mad r0.xyz, r5.xyzx, r0.xyzx, r2.xyzx
mov r0.w, l(1.000000)
exp o0.xyzw, -r0.xyzw
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#21
Posted 06/18/2017 09:32 PM   
VS: [code] // lights // ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017 cbuffer cb3 : register(b3) { float4 cb3[21]; } cbuffer cb2 : register(b2) { float4 cb2[4]; } // cbuffer cb1 : register(b1) cbuffer UnityPerCameraRare : register(b1) { // float4 cb1[11]; uniform float4 unity_CameraWorldClipPlanes[6]; // Projection matrices of the camera. Note that this might be different from projection matrix // that is set right now, e.g. while rendering shadows the matrices below are still the projection // of original camera. row_major uniform float4x4 unity_CameraProjection; // cb1[7] - cb1[10] row_major uniform float4x4 unity_CameraInvProjection; // cb1[11] - cb1[14] } cbuffer cb0 : register(b0) { float4 cb0[3]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : POSITION0, float3 v1 : NORMAL0, out float4 o0 : SV_POSITION0, out float4 o1 : TEXCOORD0, out float3 o2 : TEXCOORD1, out float fov : TEXCOORD3) { float4 r0,r1,r2; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = cb2[1].xyzw * v0.yyyy; r0.xyzw = cb2[0].xyzw * v0.xxxx + r0.xyzw; r0.xyzw = cb2[2].xyzw * v0.zzzz + r0.xyzw; r0.xyzw = cb2[3].xyzw + r0.xyzw; r1.xyzw = cb3[18].xyzw * r0.yyyy; r1.xyzw = cb3[17].xyzw * r0.xxxx + r1.xyzw; r1.xyzw = cb3[19].xyzw * r0.zzzz + r1.xyzw; r1.xyzw = cb3[20].xyzw * r0.wwww + r1.xyzw; o0.xyzw = r1.xyzw; r1.y = unity_CameraInvProjection[5].x * r1.y; r2.xzw = float3(0.5,0.5,0.5) * r1.xwy; o1.zw = r1.zw; o1.xy = r2.xw + r2.zz; r1.xyz = cb3[10].xyz * r0.yyy; r1.xyz = cb3[9].xyz * r0.xxx + r1.xyz; r0.xyz = cb3[11].xyz * r0.zzz + r1.xyz; r0.xyz = cb3[12].xyz * r0.www + r0.xyz; r1.xyz = float3(-1,-1,1) * r0.xyz; r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz; o2.xyz = cb0[2].xxx * r0.xyz + r1.xyz; fov = unity_CameraInvProjection[0].x; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyz // NORMAL 0 xyz 1 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float xyzw // TEXCOORD 0 xyzw 1 NONE float xyzw // TEXCOORD 1 xyz 2 NONE float xyz // vs_4_0 dcl_constantbuffer cb0[3], immediateIndexed dcl_constantbuffer cb1[6], immediateIndexed dcl_constantbuffer cb2[4], immediateIndexed dcl_constantbuffer cb3[21], immediateIndexed dcl_input v0.xyz dcl_input v1.xyz dcl_output_siv o0.xyzw, position dcl_output o1.xyzw dcl_output o2.xyz dcl_temps 3 mul r0.xyzw, v0.yyyy, cb2[1].xyzw mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw add r0.xyzw, r0.xyzw, cb2[3].xyzw mul r1.xyzw, r0.yyyy, cb3[18].xyzw mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw mad r1.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw mov o0.xyzw, r1.xyzw mul r1.y, r1.y, cb1[5].x mul r2.xzw, r1.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000) mov o1.zw, r1.zzzw add o1.xy, r2.zzzz, r2.xwxx mul r1.xyz, r0.yyyy, cb3[10].xyzx mad r1.xyz, cb3[9].xyzx, r0.xxxx, r1.xyzx mad r0.xyz, cb3[11].xyzx, r0.zzzz, r1.xyzx mad r0.xyz, cb3[12].xyzx, r0.wwww, r0.xyzx mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000) mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx mad o2.xyz, cb0[2].xxxx, r0.xyzx, r1.xyzx ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] PS: [code] // lighs // ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017 Texture2D<float4> t5 : register(t5); Texture2D<float4> t4 : register(t4); Texture2D<float4> t3 : register(t3); TextureCube<float4> t2 : register(t2); Texture2D<float4> t1 : register(t1); Texture2D<float4> t0 : register(t0); SamplerState s5_s : register(s5); SamplerState s4_s : register(s4); SamplerState s3_s : register(s3); SamplerState s2_s : register(s2); SamplerState s1_s : register(s1); SamplerState s0_s : register(s0); cbuffer cb2 : register(b2) { float4 cb2[22]; } cbuffer cb1 : register(b1) { float4 cb1[8]; } cbuffer cb0 : register(b0) { float4 cb0[11]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); cbuffer UnityPerDraw : register(b11) { float4x4 glstate_matrix_mvp; float4x4 glstate_matrix_modelview0; float4x4 glstate_matrix_invtrans_modelview0; #define UNITY_MATRIX_MVP glstate_matrix_mvp #define UNITY_MATRIX_MV glstate_matrix_modelview0 #define UNITY_MATRIX_IT_MV glstate_matrix_invtrans_modelview0 uniform float4x4 _Object2World; uniform float4x4 _World2Object; uniform float4 unity_LODFade; // x is the fade value ranging within [0,1]. y is x quantized into 16 levels uniform float4 unity_WorldTransformParams; // w is usually 1.0, or -1.0 for odd-negative scale transforms } #include <matrix.hlsl> void main( float4 v0 : SV_POSITION0, float4 v1 : TEXCOORD0, float3 v2 : TEXCOORD1, out float4 o0 : SV_Target0, float fov : TEXCOORD3) { float4 r0,r1,r2,r3,r4,r5,r6; uint4 bitmask, uiDest; float4 fDest; float4 stereo = StereoParams.Load(0); float separation = stereo.x, convergence = stereo.y, eye = stereo.z; // Unity reflection/specular fix inserted with DarkStarSword's hlsltool.py: // hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --ignore-other-errors --no-validate 031724f430585844-ps_replace.txt matrix _CameraToWorld = matrix(cb2[18], cb2[19], cb2[20], cb2[21]); float4 _WorldSpaceCameraPos = cb1[4]; if (fov) { _WorldSpaceCameraPos.xyz -= mul(float4(-separation * convergence * fov, 0, 0, 0), _CameraToWorld).xyz; } else { float4 clip_space_adj = float4(-separation * convergence, 0, 0, 0); float4 local_space_adj = mul(inverse(glstate_matrix_mvp), clip_space_adj); float4 world_space_adj = mul(_Object2World, local_space_adj); _WorldSpaceCameraPos.xyz -= world_space_adj.xyz; } r0.x = cb1[5].z / v2.z; r0.xyz = v2.xyz * r0.xxx; r1.xy = v1.xy / v1.ww; r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw; r0.w = cb1[7].x * r2.x + cb1[7].y; r0.w = 1 / r0.w; r0.xyz = r0.xyz * r0.www; float depth = r0.z; // Unity light/shadow fix (pixel shader stage) inserted with DarkStarSword's hlsltool.py: // hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --ignore-other-errors --no-validate 031724f430585844-ps_replace.txt if (fov) { r0.x -= separation * (depth - convergence) * fov; } r2.xyz = cb2[19].xyz * r0.yyy; r0.xyw = cb2[18].xyz * r0.xxx + r2.xyz; r0.xyz = cb2[20].xyz * r0.zzz + r0.xyw; r0.xyz = cb2[21].xyz + r0.xyz; // Fallback adjustment if the FOV was not passed from the VS: if (!fov) { float4 clip_space_adj = float4(separation * (depth - convergence), 0, 0, 0); float4 local_space_adj = mul(inverse(glstate_matrix_mvp), clip_space_adj); float4 world_space_adj = mul(_Object2World, local_space_adj); r0.xyz -= world_space_adj.xyz; } //r2.xyz = -cb1[4].xyz + r0.xyz; r2.xyz = -_WorldSpaceCameraPos.xyz + r0.xyz; r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r3.xyz = -cb0[4].xyz + r0.xyz; r0.w = dot(r3.xyz, r3.xyz); r1.z = rsqrt(r0.w); r0.w = cb0[4].w * r0.w; r4.xyzw = t1.Sample(s1_s, r0.ww).xyzw; r4.yzw = -r3.xyz * r1.zzz + -r2.xyz; r3.xyz = r3.xyz * r1.zzz; r0.w = dot(r4.yzw, r4.yzw); r0.w = max(0.00100000005, r0.w); r0.w = rsqrt(r0.w); r4.yzw = r4.yzw * r0.www; r5.xyzw = t5.Sample(s5_s, r1.xy).xyzw; r5.xyz = r5.xyz * float3(2,2,2) + float3(-1,-1,-1); r0.w = dot(r5.xyz, r5.xyz); r0.w = rsqrt(r0.w); r5.xyz = r5.xyz * r0.www; r0.w = saturate(dot(r5.xyz, r4.yzw)); r1.z = saturate(dot(-r3.xyz, r4.yzw)); r1.w = saturate(dot(r5.xyz, -r3.xyz)); r2.x = dot(r5.xyz, -r2.xyz); r3.xyzw = t4.Sample(s4_s, r1.xy).xyzw; r5.xyzw = t3.Sample(s3_s, r1.xy).xyzw; r6.xyzw = float4(1,1,1,1) + -r3.wxyz; r1.x = r6.x * r6.x; r1.y = r1.x * r1.x; r2.y = r0.w * r1.y + -r0.w; r0.w = r2.y * r0.w + 1; r0.w = r0.w * r0.w + 1.00000001e-007; r1.y = 0.318309873 * r1.y; r0.w = r1.y / r0.w; r1.y = -r6.x * r6.x + 1; r2.y = abs(r2.x) * r1.y + r1.x; r1.x = r1.w * r1.y + r1.x; r1.x = abs(r2.x) * r1.x; r1.y = 1 + -abs(r2.x); r1.x = r1.w * r2.y + r1.x; r1.x = 9.99999975e-006 + r1.x; r1.x = 0.5 / r1.x; r0.w = r1.x * r0.w; r0.w = 3.14159274 * r0.w; r0.w = max(9.99999975e-005, r0.w); r0.w = sqrt(r0.w); r0.w = r0.w * r1.w; r1.x = dot(r3.xyz, r3.xyz); r1.x = cmp(r1.x != 0.000000); r1.x = r1.x ? 1.000000 : 0; r0.w = r1.x * r0.w; r2.xyz = cb0[8].xyz * r0.yyy; r2.xyz = cb0[7].xyz * r0.xxx + r2.xyz; r0.xyz = cb0[9].xyz * r0.zzz + r2.xyz; r0.xyz = cb0[10].xyz + r0.xyz; r2.xyzw = t2.SampleBias(s2_s, r0.xyz, -8).xyzw; r0.x = r4.x * r2.w; r0.xyz = cb0[5].xyz * r0.xxx; r2.xyz = r0.www * r0.xyz; r0.w = 1 + -r1.z; r1.x = r1.z * r1.z; r1.x = dot(r1.xx, r6.xx); r1.x = -0.5 + r1.x; r1.z = r0.w * r0.w; r1.z = r1.z * r1.z; r0.w = r1.z * r0.w; r3.xyz = r6.yzw * r0.www + r3.xyz; r2.xyz = r3.xyz * r2.xyz; r0.w = r1.y * r1.y; r0.w = r0.w * r0.w; r0.w = r0.w * r1.y; r0.w = r1.x * r0.w + 1; r1.y = 1 + -r1.w; r1.z = r1.y * r1.y; r1.z = r1.z * r1.z; r1.y = r1.z * r1.y; r1.x = r1.x * r1.y + 1; r0.w = r1.x * r0.w; r0.w = r0.w * r1.w; r0.xyz = r0.xyz * r0.www; r0.xyz = r5.xyz * r0.xyz + r2.xyz; r0.w = 1; o0.xyzw = exp2(-r0.xyzw); return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float // TEXCOORD 0 xyzw 1 NONE float xy w // TEXCOORD 1 xyz 2 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_Target 0 xyzw 0 TARGET float xyzw // ps_4_0 dcl_constantbuffer cb0[11], immediateIndexed dcl_constantbuffer cb1[8], immediateIndexed dcl_constantbuffer cb2[22], immediateIndexed dcl_sampler s0, mode_default dcl_sampler s1, mode_default dcl_sampler s2, mode_default dcl_sampler s3, mode_default dcl_sampler s4, mode_default dcl_sampler s5, mode_default dcl_resource_texture2d (float,float,float,float) t0 dcl_resource_texture2d (float,float,float,float) t1 dcl_resource_texturecube (float,float,float,float) t2 dcl_resource_texture2d (float,float,float,float) t3 dcl_resource_texture2d (float,float,float,float) t4 dcl_resource_texture2d (float,float,float,float) t5 dcl_input_ps linear v1.xyw dcl_input_ps linear v2.xyz dcl_output o0.xyzw dcl_temps 7 div r0.x, cb1[5].z, v2.z mul r0.xyz, r0.xxxx, v2.xyzx div r1.xy, v1.xyxx, v1.wwww sample r2.xyzw, r1.xyxx, t0.xyzw, s0 mad r0.w, cb1[7].x, r2.x, cb1[7].y div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w mul r0.xyz, r0.wwww, r0.xyzx mul r2.xyz, r0.yyyy, cb2[19].xyzx mad r0.xyw, cb2[18].xyxz, r0.xxxx, r2.xyxz mad r0.xyz, cb2[20].xyzx, r0.zzzz, r0.xywx add r0.xyz, r0.xyzx, cb2[21].xyzx add r2.xyz, r0.xyzx, -cb1[4].xyzx dp3 r0.w, r2.xyzx, r2.xyzx rsq r0.w, r0.w mul r2.xyz, r0.wwww, r2.xyzx add r3.xyz, r0.xyzx, -cb0[4].xyzx dp3 r0.w, r3.xyzx, r3.xyzx rsq r1.z, r0.w mul r0.w, r0.w, cb0[4].w sample r4.xyzw, r0.wwww, t1.xyzw, s1 mad r4.yzw, -r3.xxyz, r1.zzzz, -r2.xxyz mul r3.xyz, r1.zzzz, r3.xyzx dp3 r0.w, r4.yzwy, r4.yzwy max r0.w, r0.w, l(0.001000) rsq r0.w, r0.w mul r4.yzw, r0.wwww, r4.yyzw sample r5.xyzw, r1.xyxx, t5.xyzw, s5 mad r5.xyz, r5.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) dp3 r0.w, r5.xyzx, r5.xyzx rsq r0.w, r0.w mul r5.xyz, r0.wwww, r5.xyzx dp3_sat r0.w, r5.xyzx, r4.yzwy dp3_sat r1.z, -r3.xyzx, r4.yzwy dp3_sat r1.w, r5.xyzx, -r3.xyzx dp3 r2.x, r5.xyzx, -r2.xyzx sample r3.xyzw, r1.xyxx, t4.xyzw, s4 sample r5.xyzw, r1.xyxx, t3.xyzw, s3 add r6.xyzw, -r3.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000) mul r1.x, r6.x, r6.x mul r1.y, r1.x, r1.x mad r2.y, r0.w, r1.y, -r0.w mad r0.w, r2.y, r0.w, l(1.000000) mad r0.w, r0.w, r0.w, l(1.000000012E-007) mul r1.y, r1.y, l(0.318309873) div r0.w, r1.y, r0.w mad r1.y, -r6.x, r6.x, l(1.000000) mad r2.y, |r2.x|, r1.y, r1.x mad r1.x, r1.w, r1.y, r1.x mul r1.x, r1.x, |r2.x| add r1.y, -|r2.x|, l(1.000000) mad r1.x, r1.w, r2.y, r1.x add r1.x, r1.x, l(0.000010) div r1.x, l(0.500000), r1.x mul r0.w, r0.w, r1.x mul r0.w, r0.w, l(3.14159274) max r0.w, r0.w, l(0.000100) sqrt r0.w, r0.w mul r0.w, r1.w, r0.w dp3 r1.x, r3.xyzx, r3.xyzx ne r1.x, r1.x, l(0.000000) and r1.x, r1.x, l(0x3f800000) mul r0.w, r0.w, r1.x mul r2.xyz, r0.yyyy, cb0[8].xyzx mad r2.xyz, cb0[7].xyzx, r0.xxxx, r2.xyzx mad r0.xyz, cb0[9].xyzx, r0.zzzz, r2.xyzx add r0.xyz, r0.xyzx, cb0[10].xyzx sample_b r2.xyzw, r0.xyzx, t2.xyzw, s2, l(-8.000000) mul r0.x, r2.w, r4.x mul r0.xyz, r0.xxxx, cb0[5].xyzx mul r2.xyz, r0.xyzx, r0.wwww add r0.w, -r1.z, l(1.000000) mul r1.x, r1.z, r1.z dp2 r1.x, r1.xxxx, r6.xxxx add r1.x, r1.x, l(-0.500000) mul r1.z, r0.w, r0.w mul r1.z, r1.z, r1.z mul r0.w, r0.w, r1.z mad r3.xyz, r6.yzwy, r0.wwww, r3.xyzx mul r2.xyz, r2.xyzx, r3.xyzx mul r0.w, r1.y, r1.y mul r0.w, r0.w, r0.w mul r0.w, r1.y, r0.w mad r0.w, r1.x, r0.w, l(1.000000) add r1.y, -r1.w, l(1.000000) mul r1.z, r1.y, r1.y mul r1.z, r1.z, r1.z mul r1.y, r1.y, r1.z mad r1.x, r1.x, r1.y, l(1.000000) mul r0.w, r0.w, r1.x mul r0.w, r1.w, r0.w mul r0.xyz, r0.wwww, r0.xyzx mad r0.xyz, r5.xyzx, r0.xyzx, r2.xyzx mov r0.w, l(1.000000) exp o0.xyzw, -r0.xyzw ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] d3dx.ini: [code] [ShaderOverride_e3fd8a725676603e] hash = e3fd8a725676603e ps-cb11 = Resource_UnityPerDraw Resource_CameraDepthTexture = ps-t0 Resource_UnityPerCamera = ps-cb1 [ShaderOverrideDirectional] Hash = 4c9936f7f1d28f6e Resource_UnityPerCameraRare = vs-cb1 [/code]
VS:

// lights
// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017
cbuffer cb3 : register(b3)
{
float4 cb3[21];
}

cbuffer cb2 : register(b2)
{
float4 cb2[4];
}

// cbuffer cb1 : register(b1)
cbuffer UnityPerCameraRare : register(b1)
{
// float4 cb1[11];
uniform float4 unity_CameraWorldClipPlanes[6];

// Projection matrices of the camera. Note that this might be different from projection matrix
// that is set right now, e.g. while rendering shadows the matrices below are still the projection
// of original camera.
row_major uniform float4x4 unity_CameraProjection; // cb1[7] - cb1[10]
row_major uniform float4x4 unity_CameraInvProjection; // cb1[11] - cb1[14]
}

cbuffer cb0 : register(b0)
{
float4 cb0[3];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : POSITION0,
float3 v1 : NORMAL0,
out float4 o0 : SV_POSITION0,
out float4 o1 : TEXCOORD0,
out float3 o2 : TEXCOORD1,
out float fov : TEXCOORD3)
{
float4 r0,r1,r2;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = cb2[1].xyzw * v0.yyyy;
r0.xyzw = cb2[0].xyzw * v0.xxxx + r0.xyzw;
r0.xyzw = cb2[2].xyzw * v0.zzzz + r0.xyzw;
r0.xyzw = cb2[3].xyzw + r0.xyzw;
r1.xyzw = cb3[18].xyzw * r0.yyyy;
r1.xyzw = cb3[17].xyzw * r0.xxxx + r1.xyzw;
r1.xyzw = cb3[19].xyzw * r0.zzzz + r1.xyzw;
r1.xyzw = cb3[20].xyzw * r0.wwww + r1.xyzw;
o0.xyzw = r1.xyzw;
r1.y = unity_CameraInvProjection[5].x * r1.y;
r2.xzw = float3(0.5,0.5,0.5) * r1.xwy;
o1.zw = r1.zw;
o1.xy = r2.xw + r2.zz;
r1.xyz = cb3[10].xyz * r0.yyy;
r1.xyz = cb3[9].xyz * r0.xxx + r1.xyz;
r0.xyz = cb3[11].xyz * r0.zzz + r1.xyz;
r0.xyz = cb3[12].xyz * r0.www + r0.xyz;
r1.xyz = float3(-1,-1,1) * r0.xyz;
r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz;
o2.xyz = cb0[2].xxx * r0.xyz + r1.xyz;
fov = unity_CameraInvProjection[0].x;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyz
// NORMAL 0 xyz 1 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyz 2 NONE float xyz
//
vs_4_0
dcl_constantbuffer cb0[3], immediateIndexed
dcl_constantbuffer cb1[6], immediateIndexed
dcl_constantbuffer cb2[4], immediateIndexed
dcl_constantbuffer cb3[21], immediateIndexed
dcl_input v0.xyz
dcl_input v1.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_temps 3
mul r0.xyzw, v0.yyyy, cb2[1].xyzw
mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw
add r0.xyzw, r0.xyzw, cb2[3].xyzw
mul r1.xyzw, r0.yyyy, cb3[18].xyzw
mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw
mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw
mad r1.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw
mov o0.xyzw, r1.xyzw
mul r1.y, r1.y, cb1[5].x
mul r2.xzw, r1.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000)
mov o1.zw, r1.zzzw
add o1.xy, r2.zzzz, r2.xwxx
mul r1.xyz, r0.yyyy, cb3[10].xyzx
mad r1.xyz, cb3[9].xyzx, r0.xxxx, r1.xyzx
mad r0.xyz, cb3[11].xyzx, r0.zzzz, r1.xyzx
mad r0.xyz, cb3[12].xyzx, r0.wwww, r0.xyzx
mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000)
mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx
mad o2.xyz, cb0[2].xxxx, r0.xyzx, r1.xyzx
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


PS:

// lighs
// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017
Texture2D<float4> t5 : register(t5);

Texture2D<float4> t4 : register(t4);

Texture2D<float4> t3 : register(t3);

TextureCube<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s5_s : register(s5);

SamplerState s4_s : register(s4);

SamplerState s3_s : register(s3);

SamplerState s2_s : register(s2);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb2 : register(b2)
{
float4 cb2[22];
}

cbuffer cb1 : register(b1)
{
float4 cb1[8];
}

cbuffer cb0 : register(b0)
{
float4 cb0[11];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);

cbuffer UnityPerDraw : register(b11) {
float4x4 glstate_matrix_mvp;
float4x4 glstate_matrix_modelview0;
float4x4 glstate_matrix_invtrans_modelview0;
#define UNITY_MATRIX_MVP glstate_matrix_mvp
#define UNITY_MATRIX_MV glstate_matrix_modelview0
#define UNITY_MATRIX_IT_MV glstate_matrix_invtrans_modelview0

uniform float4x4 _Object2World;
uniform float4x4 _World2Object;
uniform float4 unity_LODFade; // x is the fade value ranging within [0,1]. y is x quantized into 16 levels
uniform float4 unity_WorldTransformParams; // w is usually 1.0, or -1.0 for odd-negative scale transforms
}

#include <matrix.hlsl>

void main(
float4 v0 : SV_POSITION0,
float4 v1 : TEXCOORD0,
float3 v2 : TEXCOORD1,
out float4 o0 : SV_Target0,
float fov : TEXCOORD3)
{
float4 r0,r1,r2,r3,r4,r5,r6;
uint4 bitmask, uiDest;
float4 fDest;

float4 stereo = StereoParams.Load(0);
float separation = stereo.x, convergence = stereo.y, eye = stereo.z;

// Unity reflection/specular fix inserted with DarkStarSword's hlsltool.py:
// hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --ignore-other-errors --no-validate 031724f430585844-ps_replace.txt
matrix _CameraToWorld = matrix(cb2[18], cb2[19], cb2[20], cb2[21]);
float4 _WorldSpaceCameraPos = cb1[4];
if (fov) {
_WorldSpaceCameraPos.xyz -= mul(float4(-separation * convergence * fov, 0, 0, 0), _CameraToWorld).xyz;
} else {
float4 clip_space_adj = float4(-separation * convergence, 0, 0, 0);
float4 local_space_adj = mul(inverse(glstate_matrix_mvp), clip_space_adj);
float4 world_space_adj = mul(_Object2World, local_space_adj);
_WorldSpaceCameraPos.xyz -= world_space_adj.xyz;
}

r0.x = cb1[5].z / v2.z;
r0.xyz = v2.xyz * r0.xxx;
r1.xy = v1.xy / v1.ww;
r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw;
r0.w = cb1[7].x * r2.x + cb1[7].y;
r0.w = 1 / r0.w;
r0.xyz = r0.xyz * r0.www;

float depth = r0.z;

// Unity light/shadow fix (pixel shader stage) inserted with DarkStarSword's hlsltool.py:
// hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --ignore-other-errors --no-validate 031724f430585844-ps_replace.txt
if (fov) {
r0.x -= separation * (depth - convergence) * fov;
}

r2.xyz = cb2[19].xyz * r0.yyy;
r0.xyw = cb2[18].xyz * r0.xxx + r2.xyz;
r0.xyz = cb2[20].xyz * r0.zzz + r0.xyw;
r0.xyz = cb2[21].xyz + r0.xyz;

// Fallback adjustment if the FOV was not passed from the VS:
if (!fov) {
float4 clip_space_adj = float4(separation * (depth - convergence), 0, 0, 0);
float4 local_space_adj = mul(inverse(glstate_matrix_mvp), clip_space_adj);
float4 world_space_adj = mul(_Object2World, local_space_adj);
r0.xyz -= world_space_adj.xyz;
}

//r2.xyz = -cb1[4].xyz + r0.xyz;
r2.xyz = -_WorldSpaceCameraPos.xyz + r0.xyz;


r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r3.xyz = -cb0[4].xyz + r0.xyz;
r0.w = dot(r3.xyz, r3.xyz);
r1.z = rsqrt(r0.w);
r0.w = cb0[4].w * r0.w;
r4.xyzw = t1.Sample(s1_s, r0.ww).xyzw;
r4.yzw = -r3.xyz * r1.zzz + -r2.xyz;
r3.xyz = r3.xyz * r1.zzz;
r0.w = dot(r4.yzw, r4.yzw);
r0.w = max(0.00100000005, r0.w);
r0.w = rsqrt(r0.w);
r4.yzw = r4.yzw * r0.www;
r5.xyzw = t5.Sample(s5_s, r1.xy).xyzw;
r5.xyz = r5.xyz * float3(2,2,2) + float3(-1,-1,-1);
r0.w = dot(r5.xyz, r5.xyz);
r0.w = rsqrt(r0.w);
r5.xyz = r5.xyz * r0.www;
r0.w = saturate(dot(r5.xyz, r4.yzw));
r1.z = saturate(dot(-r3.xyz, r4.yzw));
r1.w = saturate(dot(r5.xyz, -r3.xyz));
r2.x = dot(r5.xyz, -r2.xyz);
r3.xyzw = t4.Sample(s4_s, r1.xy).xyzw;
r5.xyzw = t3.Sample(s3_s, r1.xy).xyzw;
r6.xyzw = float4(1,1,1,1) + -r3.wxyz;
r1.x = r6.x * r6.x;
r1.y = r1.x * r1.x;
r2.y = r0.w * r1.y + -r0.w;
r0.w = r2.y * r0.w + 1;
r0.w = r0.w * r0.w + 1.00000001e-007;
r1.y = 0.318309873 * r1.y;
r0.w = r1.y / r0.w;
r1.y = -r6.x * r6.x + 1;
r2.y = abs(r2.x) * r1.y + r1.x;
r1.x = r1.w * r1.y + r1.x;
r1.x = abs(r2.x) * r1.x;
r1.y = 1 + -abs(r2.x);
r1.x = r1.w * r2.y + r1.x;
r1.x = 9.99999975e-006 + r1.x;
r1.x = 0.5 / r1.x;
r0.w = r1.x * r0.w;
r0.w = 3.14159274 * r0.w;
r0.w = max(9.99999975e-005, r0.w);
r0.w = sqrt(r0.w);
r0.w = r0.w * r1.w;
r1.x = dot(r3.xyz, r3.xyz);
r1.x = cmp(r1.x != 0.000000);
r1.x = r1.x ? 1.000000 : 0;
r0.w = r1.x * r0.w;
r2.xyz = cb0[8].xyz * r0.yyy;
r2.xyz = cb0[7].xyz * r0.xxx + r2.xyz;
r0.xyz = cb0[9].xyz * r0.zzz + r2.xyz;
r0.xyz = cb0[10].xyz + r0.xyz;
r2.xyzw = t2.SampleBias(s2_s, r0.xyz, -8).xyzw;
r0.x = r4.x * r2.w;
r0.xyz = cb0[5].xyz * r0.xxx;
r2.xyz = r0.www * r0.xyz;
r0.w = 1 + -r1.z;
r1.x = r1.z * r1.z;
r1.x = dot(r1.xx, r6.xx);
r1.x = -0.5 + r1.x;
r1.z = r0.w * r0.w;
r1.z = r1.z * r1.z;
r0.w = r1.z * r0.w;
r3.xyz = r6.yzw * r0.www + r3.xyz;
r2.xyz = r3.xyz * r2.xyz;
r0.w = r1.y * r1.y;
r0.w = r0.w * r0.w;
r0.w = r0.w * r1.y;
r0.w = r1.x * r0.w + 1;
r1.y = 1 + -r1.w;
r1.z = r1.y * r1.y;
r1.z = r1.z * r1.z;
r1.y = r1.z * r1.y;
r1.x = r1.x * r1.y + 1;
r0.w = r1.x * r0.w;
r0.w = r0.w * r1.w;
r0.xyz = r0.xyz * r0.www;
r0.xyz = r5.xyz * r0.xyz + r2.xyz;
r0.w = 1;
o0.xyzw = exp2(-r0.xyzw);
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float
// TEXCOORD 0 xyzw 1 NONE float xy w
// TEXCOORD 1 xyz 2 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target 0 xyzw 0 TARGET float xyzw
//
ps_4_0
dcl_constantbuffer cb0[11], immediateIndexed
dcl_constantbuffer cb1[8], immediateIndexed
dcl_constantbuffer cb2[22], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
dcl_sampler s4, mode_default
dcl_sampler s5, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texturecube (float,float,float,float) t2
dcl_resource_texture2d (float,float,float,float) t3
dcl_resource_texture2d (float,float,float,float) t4
dcl_resource_texture2d (float,float,float,float) t5
dcl_input_ps linear v1.xyw
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 7
div r0.x, cb1[5].z, v2.z
mul r0.xyz, r0.xxxx, v2.xyzx
div r1.xy, v1.xyxx, v1.wwww
sample r2.xyzw, r1.xyxx, t0.xyzw, s0
mad r0.w, cb1[7].x, r2.x, cb1[7].y
div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mul r2.xyz, r0.yyyy, cb2[19].xyzx
mad r0.xyw, cb2[18].xyxz, r0.xxxx, r2.xyxz
mad r0.xyz, cb2[20].xyzx, r0.zzzz, r0.xywx
add r0.xyz, r0.xyzx, cb2[21].xyzx
add r2.xyz, r0.xyzx, -cb1[4].xyzx
dp3 r0.w, r2.xyzx, r2.xyzx
rsq r0.w, r0.w
mul r2.xyz, r0.wwww, r2.xyzx
add r3.xyz, r0.xyzx, -cb0[4].xyzx
dp3 r0.w, r3.xyzx, r3.xyzx
rsq r1.z, r0.w
mul r0.w, r0.w, cb0[4].w
sample r4.xyzw, r0.wwww, t1.xyzw, s1
mad r4.yzw, -r3.xxyz, r1.zzzz, -r2.xxyz
mul r3.xyz, r1.zzzz, r3.xyzx
dp3 r0.w, r4.yzwy, r4.yzwy
max r0.w, r0.w, l(0.001000)
rsq r0.w, r0.w
mul r4.yzw, r0.wwww, r4.yyzw
sample r5.xyzw, r1.xyxx, t5.xyzw, s5
mad r5.xyz, r5.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
dp3 r0.w, r5.xyzx, r5.xyzx
rsq r0.w, r0.w
mul r5.xyz, r0.wwww, r5.xyzx
dp3_sat r0.w, r5.xyzx, r4.yzwy
dp3_sat r1.z, -r3.xyzx, r4.yzwy
dp3_sat r1.w, r5.xyzx, -r3.xyzx
dp3 r2.x, r5.xyzx, -r2.xyzx
sample r3.xyzw, r1.xyxx, t4.xyzw, s4
sample r5.xyzw, r1.xyxx, t3.xyzw, s3
add r6.xyzw, -r3.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000)
mul r1.x, r6.x, r6.x
mul r1.y, r1.x, r1.x
mad r2.y, r0.w, r1.y, -r0.w
mad r0.w, r2.y, r0.w, l(1.000000)
mad r0.w, r0.w, r0.w, l(1.000000012E-007)
mul r1.y, r1.y, l(0.318309873)
div r0.w, r1.y, r0.w
mad r1.y, -r6.x, r6.x, l(1.000000)
mad r2.y, |r2.x|, r1.y, r1.x
mad r1.x, r1.w, r1.y, r1.x
mul r1.x, r1.x, |r2.x|
add r1.y, -|r2.x|, l(1.000000)
mad r1.x, r1.w, r2.y, r1.x
add r1.x, r1.x, l(0.000010)
div r1.x, l(0.500000), r1.x
mul r0.w, r0.w, r1.x
mul r0.w, r0.w, l(3.14159274)
max r0.w, r0.w, l(0.000100)
sqrt r0.w, r0.w
mul r0.w, r1.w, r0.w
dp3 r1.x, r3.xyzx, r3.xyzx
ne r1.x, r1.x, l(0.000000)
and r1.x, r1.x, l(0x3f800000)
mul r0.w, r0.w, r1.x
mul r2.xyz, r0.yyyy, cb0[8].xyzx
mad r2.xyz, cb0[7].xyzx, r0.xxxx, r2.xyzx
mad r0.xyz, cb0[9].xyzx, r0.zzzz, r2.xyzx
add r0.xyz, r0.xyzx, cb0[10].xyzx
sample_b r2.xyzw, r0.xyzx, t2.xyzw, s2, l(-8.000000)
mul r0.x, r2.w, r4.x
mul r0.xyz, r0.xxxx, cb0[5].xyzx
mul r2.xyz, r0.xyzx, r0.wwww
add r0.w, -r1.z, l(1.000000)
mul r1.x, r1.z, r1.z
dp2 r1.x, r1.xxxx, r6.xxxx
add r1.x, r1.x, l(-0.500000)
mul r1.z, r0.w, r0.w
mul r1.z, r1.z, r1.z
mul r0.w, r0.w, r1.z
mad r3.xyz, r6.yzwy, r0.wwww, r3.xyzx
mul r2.xyz, r2.xyzx, r3.xyzx
mul r0.w, r1.y, r1.y
mul r0.w, r0.w, r0.w
mul r0.w, r1.y, r0.w
mad r0.w, r1.x, r0.w, l(1.000000)
add r1.y, -r1.w, l(1.000000)
mul r1.z, r1.y, r1.y
mul r1.z, r1.z, r1.z
mul r1.y, r1.y, r1.z
mad r1.x, r1.x, r1.y, l(1.000000)
mul r0.w, r0.w, r1.x
mul r0.w, r1.w, r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mad r0.xyz, r5.xyzx, r0.xyzx, r2.xyzx
mov r0.w, l(1.000000)
exp o0.xyzw, -r0.xyzw
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


d3dx.ini:

[ShaderOverride_e3fd8a725676603e]
hash = e3fd8a725676603e
ps-cb11 = Resource_UnityPerDraw
Resource_CameraDepthTexture = ps-t0
Resource_UnityPerCamera = ps-cb1

[ShaderOverrideDirectional]
Hash = 4c9936f7f1d28f6e
Resource_UnityPerCameraRare = vs-cb1

CPU: Intel Core i7 7700K @ 4.9GHz
Motherboard: Gigabyte Aorus GA-Z270X-Gaming 5
RAM: GSKILL Ripjaws Z 16GB 3866MHz CL18
GPU: Gainward Phoenix 1080 GLH
Monitor: Asus PG278QR
Speakers: Logitech Z506
Donations account: masterotakusuko@gmail.com

#22
Posted 06/18/2017 09:57 PM   
Hi, Masterotaku I think I have the same lighting shader, but this one is of the same game "The Long Dark" but is from another older version. I have the original shader and the fixed shader fixed by DSS. Maybe you can use these shaders to fix the shader we are fighting... This is the original VS: ca5cfc8e4d8b1ce5-vs_replace.txt [code]// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 20:20:57 2017 cbuffer cb2 : register(b2) { float4 cb2[8]; } cbuffer cb1 : register(b1) { float4 cb1[6]; } cbuffer cb0 : register(b0) { float4 cb0[7]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : POSITION0, float3 v1 : NORMAL0, out float4 o0 : SV_POSITION0, out float4 o1 : TEXCOORD0, out float3 o2 : TEXCOORD1) { float4 r0,r1; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = cb2[1].xyzw * v0.yyyy; r0.xyzw = cb2[0].xyzw * v0.xxxx + r0.xyzw; r0.xyzw = cb2[2].xyzw * v0.zzzz + r0.xyzw; r0.xyzw = cb2[3].xyzw * v0.wwww + r0.xyzw; o0.xyzw = r0.xyzw; r0.y = cb1[5].x * r0.y; r1.xzw = float3(0.5,0.5,0.5) * r0.xwy; o1.zw = r0.zw; o1.xy = r1.xw + r1.zz; r0.xyz = cb2[5].xyz * v0.yyy; r0.xyz = cb2[4].xyz * v0.xxx + r0.xyz; r0.xyz = cb2[6].xyz * v0.zzz + r0.xyz; r0.xyz = cb2[7].xyz * v0.www + r0.xyz; r1.xyz = float3(-1,-1,1) * r0.xyz; r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz; o2.xyz = cb0[6].xxx * r0.xyz + r1.xyz; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sun Jun 18 20:20:57 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyzw // NORMAL 0 xyz 1 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float xyzw // TEXCOORD 0 xyzw 1 NONE float xyzw // TEXCOORD 1 xyz 2 NONE float xyz // vs_4_0 dcl_constantbuffer cb0[7], immediateIndexed dcl_constantbuffer cb1[6], immediateIndexed dcl_constantbuffer cb2[8], immediateIndexed dcl_input v0.xyzw dcl_input v1.xyz dcl_output_siv o0.xyzw, position dcl_output o1.xyzw dcl_output o2.xyz dcl_temps 2 mul r0.xyzw, v0.yyyy, cb2[1].xyzw mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw mad r0.xyzw, cb2[3].xyzw, v0.wwww, r0.xyzw mov o0.xyzw, r0.xyzw mul r0.y, r0.y, cb1[5].x mul r1.xzw, r0.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000) mov o1.zw, r0.zzzw add o1.xy, r1.zzzz, r1.xwxx mul r0.xyz, v0.yyyy, cb2[5].xyzx mad r0.xyz, cb2[4].xyzx, v0.xxxx, r0.xyzx mad r0.xyz, cb2[6].xyzx, v0.zzzz, r0.xyzx mad r0.xyz, cb2[7].xyzx, v0.wwww, r0.xyzx mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000) mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx mad o2.xyz, cb0[6].xxxx, r0.xyzx, r1.xyzx ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] This is the VS shader fixed by DSS [code]// 3DMigoto: ca5cfc8e4d8b1ce5 | Matched 65 variants of 2 shaders: Hidden/Internal-DeferredShading, Hidden/Internal-PrePassLighting // // Unity headers extracted from Internal-DeferredShading.shader // Shader "Hidden/Internal-DeferredShading" { // Properties { // _LightTexture0 ("", any) = "" { } // _LightTextureB0 ("", 2D) = "" { } // _ShadowMapTexture ("", any) = "" { } // _SrcBlend ("", Float) = 1 // _DstBlend ("", Float) = 1 // } // Fallback Off // SubShader 1/1 { // Pass 1/2 { // Tags { "SHADOWSUPPORT"="true" } // ZWrite Off // Blend [_SrcBlend] [_DstBlend] // GpuProgramID 36028 // Program "vp" { // SubProgram "d3d11 " { // 0004000: Keywords { "DIRECTIONAL" "SHADOWS_OFF" "UNITY_HDR_ON" } // 0000002: Keywords { "DIRECTIONAL" "SHADOWS_OFF" } // 0080000: Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "UNITY_HDR_ON" } // 0000040: Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" } // 0020000: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_OFF" "UNITY_HDR_ON" } // 0000010: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_OFF" } // 0100000: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_SCREEN" "UNITY_HDR_ON" } // 0000080: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_SCREEN" } // 1000000: Keywords { "POINT" "SHADOWS_CUBE" "SHADOWS_SOFT" "UNITY_HDR_ON" } // 0000800: Keywords { "POINT" "SHADOWS_CUBE" "SHADOWS_SOFT" } // 0200000: Keywords { "POINT" "SHADOWS_CUBE" "UNITY_HDR_ON" } // 0000100: Keywords { "POINT" "SHADOWS_CUBE" } // 0002000: Keywords { "POINT" "SHADOWS_OFF" "UNITY_HDR_ON" } // 0000001: Keywords { "POINT" "SHADOWS_OFF" } // 2000000: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" "SHADOWS_SOFT" "UNITY_HDR_ON" } // 0001000: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" "SHADOWS_SOFT" } // 0400000: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" "UNITY_HDR_ON" } // 0000200: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" } // 0010000: Keywords { "POINT_COOKIE" "SHADOWS_OFF" "UNITY_HDR_ON" } // 0000008: Keywords { "POINT_COOKIE" "SHADOWS_OFF" } // 0800000: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SHADOWS_SOFT" "SPOT" "UNITY_HDR_ON" } // 0000400: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SHADOWS_SOFT" "SPOT" } // 0040000: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SPOT" "UNITY_HDR_ON" } // 0000020: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SPOT" } // 0008000: Keywords { "SHADOWS_OFF" "SPOT" "UNITY_HDR_ON" } // 0000004: Keywords { "SHADOWS_OFF" "SPOT" } // Bind "vertex" Vertex // Bind "normal" Normal // 37ffbff: ConstBuffer "$Globals" 288 // 0800400: ConstBuffer "$Globals" 352 // Float 96 [_LightAsQuad] // ConstBuffer "UnityPerCamera" 144 // Vector 80 [_ProjectionParams] // ConstBuffer "UnityPerDraw" 336 // Matrix 0 [glstate_matrix_mvp] // Matrix 64 [glstate_matrix_modelview0] // BindCB "$Globals" 0 // BindCB "UnityPerCamera" 1 // BindCB "UnityPerDraw" 2 // } // } // } // } // } // // Unity headers extracted from Internal-PrePassLighting.shader // Shader "Hidden/Internal-PrePassLighting" { // Properties { // _LightTexture0 ("", any) = "" { } // _LightTextureB0 ("", 2D) = "" { } // _ShadowMapTexture ("", any) = "" { } // } // Fallback Off // SubShader 1/1 { // 0000001fff: Pass 1/3 { // 0003ffe000: Pass 2/3 { // 7ffc000000: Pass 3/3 { // Tags { "SHADOWSUPPORT"="true" } // ZWrite Off // 0000001fff: Blend DstColor Zero // 7fffffe000: Blend One One // 0003ffe000: GpuProgramID 113408 // 7ffc000000: GpuProgramID 155461 // 0000001fff: GpuProgramID 57115 // Program "vp" { // SubProgram "d3d11 " { // 0008004002: Keywords { "DIRECTIONAL" "SHADOWS_OFF" } // 0100080040: Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" } // 0040020010: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_OFF" } // 0200100080: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_SCREEN" } // 2001000800: Keywords { "POINT" "SHADOWS_CUBE" "SHADOWS_SOFT" } // 0400200100: Keywords { "POINT" "SHADOWS_CUBE" } // 0004002001: Keywords { "POINT" "SHADOWS_OFF" } // 4002001000: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" "SHADOWS_SOFT" } // 0800400200: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" } // 0020010008: Keywords { "POINT_COOKIE" "SHADOWS_OFF" } // 1000800400: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SHADOWS_SOFT" "SPOT" } // 0080040020: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SPOT" } // 0010008004: Keywords { "SHADOWS_OFF" "SPOT" } // Bind "vertex" Vertex // Bind "normal" Normal // 6fff7ffbff: ConstBuffer "$Globals" 240 // 1000800400: ConstBuffer "$Globals" 304 // Float 96 [_LightAsQuad] // ConstBuffer "UnityPerCamera" 144 // Vector 80 [_ProjectionParams] // ConstBuffer "UnityPerDraw" 336 // Matrix 0 [glstate_matrix_mvp] // Matrix 64 [glstate_matrix_modelview0] // BindCB "$Globals" 0 // BindCB "UnityPerCamera" 1 // BindCB "UnityPerDraw" 2 // } // } // } // } // } // // Headers extracted with DarkStarSword's extract_unity_shaders.py // https://raw.githubusercontent.com/DarkStarSword/3d-fixes/master/extract_unity_shaders.py // // Shader model vs_4_0 // Replace definition with UnityPerDraw from Unity Cg source code: // Note that matrix order is transposed between Cg and HLSL, so add row_major // keywords to each float4x4 entry cbuffer cb2 : register(b2) { // float4 cb2[8]; row_major float4x4 glstate_matrix_mvp; row_major float4x4 glstate_matrix_modelview0; row_major float4x4 glstate_matrix_invtrans_modelview0; #define UNITY_MATRIX_MVP glstate_matrix_mvp #define UNITY_MATRIX_MV glstate_matrix_modelview0 #define UNITY_MATRIX_IT_MV glstate_matrix_invtrans_modelview0 row_major uniform float4x4 _Object2World; row_major uniform float4x4 _World2Object; uniform float4 unity_LODFade; // x is the fade value ranging within [0,1]. y is x quantized into 16 levels } cbuffer cb1 : register(b1) { float4 cb1[6]; } cbuffer cb0 : register(b0) { float4 cb0[7]; } // Copied from the directional lighting shader using 3DMigoto cbuffer UnityPerCameraRare : register(b13) { uniform float4 unity_CameraWorldClipPlanes[6]; // Projection matrices of the camera. Note that this might be different from projection matrix // that is set right now, e.g. while rendering shadows the matrices below are still the projection // of original camera. row_major uniform float4x4 unity_CameraProjection; row_major uniform float4x4 unity_CameraInvProjection; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : POSITION0, float3 v1 : NORMAL0, out float4 o0 : SV_POSITION0, out float4 o1 : TEXCOORD0, out float3 o2 : TEXCOORD1, out float fov : TEXCOORD2) // New output to pass FOV to pixel shaders { float4 r0,r1; uint4 bitmask, uiDest; float4 fDest; float4 stereo = StereoParams.Load(0); float separation = stereo.x; float convergence = stereo.y; r0.xyzw = UNITY_MATRIX_MVP[1].xyzw * v0.yyyy; r0.xyzw = UNITY_MATRIX_MVP[0].xyzw * v0.xxxx + r0.xyzw; r0.xyzw = UNITY_MATRIX_MVP[2].xyzw * v0.zzzz + r0.xyzw; r0.xyzw = UNITY_MATRIX_MVP[3].xyzw * v0.wwww + r0.xyzw; o0.xyzw = r0.xyzw; bool full_screen = (r0.w == 1); float depth = r0.w; if (!full_screen) { r0.x += separation * (depth - convergence); } r0.y = cb1[5].x * r0.y; r1.xzw = float3(0.5,0.5,0.5) * r0.xwy; o1.zw = r0.zw; o1.xy = r1.xw + r1.zz; r0.xyz = UNITY_MATRIX_MV[1].xyz * v0.yyy; r0.xyz = UNITY_MATRIX_MV[0].xyz * v0.xxx + r0.xyz; r0.xyz = UNITY_MATRIX_MV[2].xyz * v0.zzz + r0.xyz; r0.xyz = UNITY_MATRIX_MV[3].xyz * v0.www + r0.xyz; if (!full_screen) { // Looks like UNITY_MATRIX_IT_MV is 0, so we can't just do this: // float4x4 projection = mul(UNITY_MATRIX_IT_MV, UNITY_MATRIX_MVP); // fov = 1 / projection[0].x; // Instead, we have to calculate this the long way: // I already have an optimised version of this calculation in assembler for // Unity 4 (the committed version is for column-major order, but the optimised // row-major version was only slightly longer). I'm guessing the HLSL // determinant() function won't be optimised because it can't make assumptions // about the matrix (and that is a *large* amount of multiplications that could // be eliminated), so we can probably do better, but for now this is clearer: float det = 1 / determinant(UNITY_MATRIX_MV); float3 mvi; mvi.x = ((UNITY_MATRIX_MV._m11 * UNITY_MATRIX_MV._m22) - (UNITY_MATRIX_MV._m21 * UNITY_MATRIX_MV._m12)) * det; mvi.y = ((UNITY_MATRIX_MV._m21 * UNITY_MATRIX_MV._m02) - (UNITY_MATRIX_MV._m01 * UNITY_MATRIX_MV._m22)) * det; mvi.z = ((UNITY_MATRIX_MV._m01 * UNITY_MATRIX_MV._m12) - (UNITY_MATRIX_MV._m11 * UNITY_MATRIX_MV._m02)) * det; fov = 1 / dot(mvi, UNITY_MATRIX_MVP._m00_m10_m20); r0.x += separation * (depth - convergence) * fov; } else { // Can't determine the FOV from the values passed to this shader, so // use the FOV copied from directional lighting shader with 3DMigoto. // We could probably get away with using only this and scrapping the // above code for games that always have directional lighting enabled. fov = unity_CameraInvProjection[0].x; } r1.xyz = float3(-1,-1,1) * r0.xyz; r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz; o2.xyz = cb0[6].xxx * r0.xyz + r1.xyz; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Original ASM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyzw // NORMAL 0 xyz 1 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float xyzw // TEXCOORD 0 xyzw 1 NONE float xyzw // TEXCOORD 1 xyz 2 NONE float xyz // vs_4_0 dcl_constantbuffer cb0[7], immediateIndexed dcl_constantbuffer cb1[6], immediateIndexed dcl_constantbuffer cb2[8], immediateIndexed dcl_input v0.xyzw dcl_input v1.xyz dcl_output_siv o0.xyzw, position dcl_output o1.xyzw dcl_output o2.xyz dcl_temps 2 mul r0.xyzw, v0.yyyy, cb2[1].xyzw mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw mad r0.xyzw, cb2[3].xyzw, v0.wwww, r0.xyzw mov o0.xyzw, r0.xyzw mul r0.y, r0.y, cb1[5].x mul r1.xzw, r0.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000) mov o1.zw, r0.zzzw add o1.xy, r1.zzzz, r1.xwxx mul r0.xyz, v0.yyyy, cb2[5].xyzx mad r0.xyz, cb2[4].xyzx, v0.xxxx, r0.xyzx mad r0.xyz, cb2[6].xyzx, v0.zzzz, r0.xyzx mad r0.xyz, cb2[7].xyzx, v0.wwww, r0.xyzx mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000) mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx mad o2.xyz, cb0[6].xxxx, r0.xyzx, r1.xyzx ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Recompiled ASM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20789 // // // Buffer Definitions: // // cbuffer cb2 // { // // float4 cb2[8]; // Offset: 0 Size: 128 // // } // // cbuffer cb1 // { // // float4 cb1[6]; // Offset: 0 Size: 96 // // } // // cbuffer cb0 // { // // float4 cb0[7]; // Offset: 0 Size: 112 // // } // // // Resource Bindings: // // Name Type Format Dim Slot Elements // ------------------------------ ---------- ------- ----------- ---- -------- // cb0 cbuffer NA NA 0 1 // cb1 cbuffer NA NA 1 1 // cb2 cbuffer NA NA 2 1 // // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyzw // NORMAL 0 xyz 1 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float xyzw // TEXCOORD 0 xyzw 1 NONE float xyzw // TEXCOORD 1 xyz 2 NONE float xyz // vs_4_0 dcl_constantbuffer cb2[8], immediateIndexed dcl_constantbuffer cb1[6], immediateIndexed dcl_constantbuffer cb0[7], immediateIndexed dcl_input v0.xyzw dcl_input v1.xyz dcl_output_siv o0.xyzw, position dcl_output o1.xyzw dcl_output o2.xyz dcl_temps 2 mul r0.xyzw, v0.yyyy, cb2[1].xyzw mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw mad r0.xyzw, cb2[3].xwyz, v0.wwww, r0.xwyz mov o0.xyzw, r0.xzwy mul r0.z, r0.z, cb1[5].x mov o1.zw, r0.wwwy mul r0.xyz, r0.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000) add o1.xy, r0.yyyy, r0.xzxx mul r0.xyz, v0.yyyy, cb2[5].xyzx mad r0.xyz, cb2[4].xyzx, v0.xxxx, r0.xyzx mad r0.xyz, cb2[6].xyzx, v0.zzzz, r0.xyzx mad r0.xyz, cb2[7].xyzx, v0.wwww, r0.xyzx mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000) mad r0.xyz, r0.xyzx, l(1.000000, 1.000000, -1.000000, 0.000000), v1.xyzx mad o2.xyz, cb0[6].xxxx, r0.xyzx, r1.xyzx ret // Approximately 17 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] the PS original: adb8c8f1b20ba202-ps_replace.txt [code]// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 20:20:28 2017 Texture2D<float4> t5 : register(t5); Texture2D<float4> t4 : register(t4); Texture2D<float4> t3 : register(t3); TextureCube<float4> t2 : register(t2); Texture2D<float4> t1 : register(t1); Texture2D<float4> t0 : register(t0); SamplerState s5_s : register(s5); SamplerState s4_s : register(s4); SamplerState s3_s : register(s3); SamplerState s2_s : register(s2); SamplerState s1_s : register(s1); SamplerState s0_s : register(s0); cbuffer cb4 : register(b4) { float4 cb4[4]; } cbuffer cb3 : register(b3) { float4 cb3[25]; } cbuffer cb2 : register(b2) { float4 cb2[2]; } cbuffer cb1 : register(b1) { float4 cb1[8]; } cbuffer cb0 : register(b0) { float4 cb0[10]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : SV_POSITION0, float4 v1 : TEXCOORD0, float3 v2 : TEXCOORD1, out float4 o0 : SV_Target0) { float4 r0,r1,r2,r3,r4,r5,r6; uint4 bitmask, uiDest; float4 fDest; r0.x = cb1[5].z / v2.z; r0.xyz = v2.xyz * r0.xxx; r1.xy = v1.xy / v1.ww; r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw; r0.w = cb1[7].x * r2.x + cb1[7].y; r0.w = 1 / r0.w; r0.xyz = r0.xyz * r0.www; r2.xyz = cb4[1].xyz * r0.yyy; r0.xyw = cb4[0].xyz * r0.xxx + r2.xyz; r0.xyz = cb4[2].xyz * r0.zzz + r0.xyw; r0.xyz = cb4[3].xyz + r0.xyz; r2.xyz = -cb1[4].xyz + r0.xyz; r0.xyz = -cb0[8].xyz + r0.xyz; r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r3.xyzw = t5.Sample(s5_s, r1.xy).xyzw; r3.xyz = r3.xyz * float3(2,2,2) + float3(-1,-1,-1); r0.w = dot(r3.xyz, r3.xyz); r0.w = rsqrt(r0.w); r3.xyz = r3.xyz * r0.www; r0.w = dot(r3.xyz, -r2.xyz); r1.z = 9.99999975e-006 + -r0.w; r0.w = cmp(r0.w < 0); r4.xyz = -r2.xyz * r1.zzz + r3.xyz; r3.xyz = r0.www ? r4.xyz : r3.xyz; r0.w = dot(r0.xyz, r0.xyz); r1.z = rsqrt(r0.w); r4.xyz = -r0.xyz * r1.zzz + -r2.xyz; r1.w = dot(r3.xyz, -r2.xyz); r1.w = max(0, r1.w); r2.xyz = r1.zzz * r0.xyz; r5.xyzw = t2.Sample(s2_s, r0.xyz).xyzw; r0.x = dot(r4.xyz, r4.xyz); r0.x = max(0.00100000005, r0.x); r0.x = rsqrt(r0.x); r0.xyz = r4.xyz * r0.xxx; r1.z = dot(r3.xyz, r0.xyz); r2.w = dot(r3.xyz, -r2.xyz); r0.x = dot(-r2.xyz, r0.xyz); r0.y = max(0, r2.w); r0.z = max(0, r1.z); r0.z = r0.z * r0.z; r2.xyzw = t4.Sample(s4_s, r1.xy).xyzw; r3.xyzw = t3.Sample(s3_s, r1.xy).xyzw; r4.xyzw = float4(1,1,1,1) + -r2.wxyz; r1.x = r4.x * r4.x; r1.y = r1.x * r1.x + -1; r0.z = r0.z * r1.y + 1; r1.y = 3.14159274 * r0.z; r0.z = r1.y * r0.z + 1.00000001e-007; r1.y = r1.x * r1.x; r0.z = r1.y / r0.z; r1.y = -r4.x * r4.x + 1; r1.z = r1.w * r1.y + r1.x; r1.x = r0.y * r1.y + r1.x; r1.x = r1.w * r1.x; r1.y = 1 + -r1.w; r1.x = r0.y * r1.z + r1.x; r1.x = 9.99999975e-006 + r1.x; r1.x = 2 / r1.x; r0.z = r1.x * r0.z; r0.z = 0.785398185 * r0.z; r1.x = max(9.99999975e-005, r0.z); r1.x = sqrt(r1.x); r1.z = cmp(cb0[3].w == 0.000000); r0.z = r1.z ? r1.x : r0.z; r0.z = r0.z * r0.y; r0.xz = max(float2(0,0), r0.xz); r1.x = sqrt(r0.w); r0.w = cb0[8].w * r0.w; r6.xyzw = t1.Sample(s1_s, r0.ww).xyzw; r0.w = cb2[1].w * r1.x; r0.w = 0.970000029 * r0.w; r0.w = cmp(r5.x < r0.w); r0.w = r0.w ? cb3[24].x : 1; r0.w = r6.x * r0.w; r1.xzw = cb0[9].xyz * r0.www; r5.xyz = r1.xzw * r0.zzz; r0.z = 1 + -r0.x; r0.xw = r0.xz * r0.xz; r0.x = dot(r0.xx, r4.xx); r0.x = -0.5 + r0.x; r0.w = r0.w * r0.w; r0.z = r0.w * r0.z; r2.xyz = r4.yzw * r0.zzz + r2.xyz; r2.xyz = r5.xyz * r2.xyz; r0.z = r1.y * r1.y; r0.z = r0.z * r0.z; r0.z = r0.z * r1.y; r0.z = r0.x * r0.z + 1; r0.w = 1 + -r0.y; r1.y = r0.w * r0.w; r1.y = r1.y * r1.y; r0.w = r1.y * r0.w; r0.x = r0.x * r0.w + 1; r0.x = r0.x * r0.z; r0.x = r0.x * r0.y; r0.xyz = r1.xzw * r0.xxx; o0.xyz = r3.xyz * r0.xyz + r2.xyz; o0.w = 1; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sun Jun 18 20:20:28 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float // TEXCOORD 0 xyzw 1 NONE float xy w // TEXCOORD 1 xyz 2 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_Target 0 xyzw 0 TARGET float xyzw // ps_4_0 dcl_constantbuffer cb0[10], immediateIndexed dcl_constantbuffer cb1[8], immediateIndexed dcl_constantbuffer cb2[2], immediateIndexed dcl_constantbuffer cb3[25], immediateIndexed dcl_constantbuffer cb4[4], immediateIndexed dcl_sampler s0, mode_default dcl_sampler s1, mode_default dcl_sampler s2, mode_default dcl_sampler s3, mode_default dcl_sampler s4, mode_default dcl_sampler s5, mode_default dcl_resource_texture2d (float,float,float,float) t0 dcl_resource_texture2d (float,float,float,float) t1 dcl_resource_texturecube (float,float,float,float) t2 dcl_resource_texture2d (float,float,float,float) t3 dcl_resource_texture2d (float,float,float,float) t4 dcl_resource_texture2d (float,float,float,float) t5 dcl_input_ps linear v1.xyw dcl_input_ps linear v2.xyz dcl_output o0.xyzw dcl_temps 7 div r0.x, cb1[5].z, v2.z mul r0.xyz, r0.xxxx, v2.xyzx div r1.xy, v1.xyxx, v1.wwww sample r2.xyzw, r1.xyxx, t0.xyzw, s0 mad r0.w, cb1[7].x, r2.x, cb1[7].y div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w mul r0.xyz, r0.wwww, r0.xyzx mul r2.xyz, r0.yyyy, cb4[1].xyzx mad r0.xyw, cb4[0].xyxz, r0.xxxx, r2.xyxz mad r0.xyz, cb4[2].xyzx, r0.zzzz, r0.xywx add r0.xyz, r0.xyzx, cb4[3].xyzx add r2.xyz, r0.xyzx, -cb1[4].xyzx add r0.xyz, r0.xyzx, -cb0[8].xyzx dp3 r0.w, r2.xyzx, r2.xyzx rsq r0.w, r0.w mul r2.xyz, r0.wwww, r2.xyzx sample r3.xyzw, r1.xyxx, t5.xyzw, s5 mad r3.xyz, r3.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) dp3 r0.w, r3.xyzx, r3.xyzx rsq r0.w, r0.w mul r3.xyz, r0.wwww, r3.xyzx dp3 r0.w, r3.xyzx, -r2.xyzx add r1.z, -r0.w, l(0.000010) lt r0.w, r0.w, l(0.000000) mad r4.xyz, -r2.xyzx, r1.zzzz, r3.xyzx movc r3.xyz, r0.wwww, r4.xyzx, r3.xyzx dp3 r0.w, r0.xyzx, r0.xyzx rsq r1.z, r0.w mad r4.xyz, -r0.xyzx, r1.zzzz, -r2.xyzx dp3 r1.w, r3.xyzx, -r2.xyzx max r1.w, r1.w, l(0.000000) mul r2.xyz, r0.xyzx, r1.zzzz sample r5.xyzw, r0.xyzx, t2.xyzw, s2 dp3 r0.x, r4.xyzx, r4.xyzx max r0.x, r0.x, l(0.001000) rsq r0.x, r0.x mul r0.xyz, r0.xxxx, r4.xyzx dp3 r1.z, r3.xyzx, r0.xyzx dp3 r2.w, r3.xyzx, -r2.xyzx dp3 r0.x, -r2.xyzx, r0.xyzx max r0.y, r2.w, l(0.000000) max r0.z, r1.z, l(0.000000) mul r0.z, r0.z, r0.z sample r2.xyzw, r1.xyxx, t4.xyzw, s4 sample r3.xyzw, r1.xyxx, t3.xyzw, s3 add r4.xyzw, -r2.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000) mul r1.x, r4.x, r4.x mad r1.y, r1.x, r1.x, l(-1.000000) mad r0.z, r0.z, r1.y, l(1.000000) mul r1.y, r0.z, l(3.14159274) mad r0.z, r1.y, r0.z, l(1.000000012E-007) mul r1.y, r1.x, r1.x div r0.z, r1.y, r0.z mad r1.y, -r4.x, r4.x, l(1.000000) mad r1.z, r1.w, r1.y, r1.x mad r1.x, r0.y, r1.y, r1.x mul r1.x, r1.x, r1.w add r1.y, -r1.w, l(1.000000) mad r1.x, r0.y, r1.z, r1.x add r1.x, r1.x, l(0.000010) div r1.x, l(2.000000), r1.x mul r0.z, r0.z, r1.x mul r0.z, r0.z, l(0.785398185) max r1.x, r0.z, l(0.000100) sqrt r1.x, r1.x eq r1.z, cb0[3].w, l(0.000000) movc r0.z, r1.z, r1.x, r0.z mul r0.z, r0.y, r0.z max r0.xz, r0.xxzx, l(0.000000, 0.000000, 0.000000, 0.000000) sqrt r1.x, r0.w mul r0.w, r0.w, cb0[8].w sample r6.xyzw, r0.wwww, t1.xyzw, s1 mul r0.w, r1.x, cb2[1].w mul r0.w, r0.w, l(0.970000) lt r0.w, r5.x, r0.w movc r0.w, r0.w, cb3[24].x, l(1.000000) mul r0.w, r0.w, r6.x mul r1.xzw, r0.wwww, cb0[9].xxyz mul r5.xyz, r0.zzzz, r1.xzwx add r0.z, -r0.x, l(1.000000) mul r0.xw, r0.xxxz, r0.xxxz dp2 r0.x, r0.xxxx, r4.xxxx add r0.x, r0.x, l(-0.500000) mul r0.w, r0.w, r0.w mul r0.z, r0.z, r0.w mad r2.xyz, r4.yzwy, r0.zzzz, r2.xyzx mul r2.xyz, r2.xyzx, r5.xyzx mul r0.z, r1.y, r1.y mul r0.z, r0.z, r0.z mul r0.z, r1.y, r0.z mad r0.z, r0.x, r0.z, l(1.000000) add r0.w, -r0.y, l(1.000000) mul r1.y, r0.w, r0.w mul r1.y, r1.y, r1.y mul r0.w, r0.w, r1.y mad r0.x, r0.x, r0.w, l(1.000000) mul r0.x, r0.z, r0.x mul r0.x, r0.y, r0.x mul r0.xyz, r0.xxxx, r1.xzwx mad o0.xyz, r3.xyzx, r0.xyzx, r2.xyzx mov o0.w, l(1.000000) ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ [/code] and the fixed one by DSS [code]// hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt // 3DMigoto: adb8c8f1b20ba202 | Unity headers extracted from Internal-DeferredShading.shader // Shader "Hidden/Internal-DeferredShading" { // Properties { // _LightTexture0 ("", any) = "" { } // _LightTextureB0 ("", 2D) = "" { } // _ShadowMapTexture ("", any) = "" { } // _SrcBlend ("", Float) = 1 // _DstBlend ("", Float) = 1 // } // Fallback Off // SubShader 1/1 { // Pass 1/2 { // Tags { "SHADOWSUPPORT"="true" } // ZWrite Off // Blend [_SrcBlend] [_DstBlend] // GpuProgramID 36028 // Program "fp" { // SubProgram "d3d11 " { // GpuProgramIndex 95 // } // } // } // } // } // // Unity 5.3 headers extracted from Internal-DeferredShading.shader.decompressed: // API d3d11 // Shader model ps_4_0 // undeciphered1: 91 6 0 // Keywords { "POINT" "SHADOWS_CUBE" "UNITY_HDR_ON" } // undeciphered2: 1 6 5 6 0 // undeciphered3: 0 0 // ConstBuffer "$Globals" 272 // Vector 48 [unity_ColorSpaceLuminance] // Vector 128 [_LightPos] // Vector 144 [_LightColor] // ConstBuffer "UnityPerCamera" 144 // Vector 64 [_WorldSpaceCameraPos] 3 // Vector 80 [_ProjectionParams] // Vector 112 [_ZBufferParams] // ConstBuffer "UnityLighting" 720 // Vector 16 [_LightPositionRange] // ConstBuffer "UnityShadows" 416 // Vector 384 [_LightShadowData] // ConstBuffer "UnityPerCamera2" 64 // Matrix 0 [_CameraToWorld] // SetTexture 0 [_CameraDepthTexture] 2D 0 // SetTexture 1 [_LightTextureB0] 2D 1 // SetTexture 2 [_ShadowMapTexture] CUBE 2 // SetTexture 3 [_CameraGBufferTexture0] 2D 3 // SetTexture 4 [_CameraGBufferTexture1] 2D 4 // SetTexture 5 [_CameraGBufferTexture2] 2D 5 // BindCB "$Globals" 0 // BindCB "UnityPerCamera" 1 // BindCB "UnityLighting" 2 // BindCB "UnityShadows" 3 // BindCB "UnityPerCamera2" 4 // // Headers extracted with DarkStarSword's extract_unity53_shaders.py // https://raw.githubusercontent.com/DarkStarSword/3d-fixes/master/extract_unity53_shaders.py // ---- Created with 3Dmigoto v1.2.35 on Sat Apr 30 15:49:02 2016 Texture2D<float4> t5 : register(t5); Texture2D<float4> t4 : register(t4); Texture2D<float4> t3 : register(t3); TextureCube<float4> t2 : register(t2); Texture2D<float4> t1 : register(t1); Texture2D<float4> t0 : register(t0); SamplerState s5_s : register(s5); SamplerState s4_s : register(s4); SamplerState s3_s : register(s3); SamplerState s2_s : register(s2); SamplerState s1_s : register(s1); SamplerState s0_s : register(s0); cbuffer cb4 : register(b4) { float4 cb4[4]; } cbuffer cb3 : register(b3) { float4 cb3[25]; } cbuffer cb2 : register(b2) { float4 cb2[2]; } cbuffer cb1 : register(b1) { float4 cb1[9]; } cbuffer cb0 : register(b0) { float4 cb0[10]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : SV_POSITION0, float4 v1 : TEXCOORD0, float3 v2 : TEXCOORD1, out float4 o0 : SV_Target0, float fov : TEXCOORD3) { float4 r0,r1,r2,r3,r4,r5,r6; uint4 bitmask, uiDest; float4 fDest; float4 stereo = StereoParams.Load(0); float separation = stereo.x, convergence = stereo.y, eye = stereo.z; // Unity reflection/specular fix inserted with DarkStarSword's hlsltool.py: // hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt matrix _CameraToWorld = matrix(cb4[0], cb4[1], cb4[2], cb4[3]); float4 _WorldSpaceCameraPos = cb1[4]; _WorldSpaceCameraPos.xyz -= mul(float4(-separation * convergence * fov, 0, 0, 0), _CameraToWorld).xyz; r0.x = cb1[5].z / v2.z; r0.xyz = v2.xyz * r0.xxx; r1.xy = v1.xy / v1.ww; r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw; r0.w = cb1[7].x * r2.x + cb1[7].y; r0.w = 1 / r0.w; r0.xyz = r0.xyz * r0.www; // Unity light/shadow fix (pixel shader stage) inserted with DarkStarSword's hlsltool.py: // hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt r0.x -= separation * (r0.z - convergence) * fov; r2.xyz = cb4[1].xyz * r0.yyy; r0.xyw = cb4[0].xyz * r0.xxx + r2.xyz; r0.xyz = cb4[2].xyz * r0.zzz + r0.xyw; // depth in r0.z r0.xyz = cb4[3].xyz + r0.xyz; r2.xyz = -_WorldSpaceCameraPos.xyz + r0.xyz; r0.xyz = -cb0[8].xyz + r0.xyz; r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r3.xyzw = t5.Sample(s5_s, r1.xy).xyzw; r3.xyz = r3.xyz * float3(2,2,2) + float3(-1,-1,-1); r0.w = dot(r3.xyz, r3.xyz); r0.w = rsqrt(r0.w); r3.xyz = r3.xyz * r0.www; r0.w = dot(r3.xyz, -r2.xyz); r1.z = 9.99999975e-006 + -r0.w; r0.w = cmp(r0.w < 0); r4.xyz = -r2.xyz * r1.zzz + r3.xyz; r3.xyz = r0.www ? r4.xyz : r3.xyz; r0.w = dot(r0.xyz, r0.xyz); r1.z = rsqrt(r0.w); r4.xyz = -r0.xyz * r1.zzz + -r2.xyz; r1.w = dot(r3.xyz, -r2.xyz); r1.w = max(0, r1.w); r2.xyz = r1.zzz * r0.xyz; r5.xyzw = t2.Sample(s2_s, r0.xyz).xyzw; r0.x = dot(r4.xyz, r4.xyz); r0.x = max(0.00100000005, r0.x); r0.x = rsqrt(r0.x); r0.xyz = r4.xyz * r0.xxx; r1.z = dot(r3.xyz, r0.xyz); r2.w = dot(r3.xyz, -r2.xyz); r0.x = dot(-r2.xyz, r0.xyz); r0.y = max(0, r2.w); r0.z = max(0, r1.z); r0.z = r0.z * r0.z; r2.xyzw = t4.Sample(s4_s, r1.xy).xyzw; r3.xyzw = t3.Sample(s3_s, r1.xy).xyzw; r4.xyzw = float4(1,1,1,1) + -r2.wxyz; r1.x = r4.x * r4.x; r1.y = r1.x * r1.x + -1; r0.z = r0.z * r1.y + 1; r1.y = 3.14159274 * r0.z; r0.z = r1.y * r0.z + 1.00000001e-007; r1.y = r1.x * r1.x; r0.z = r1.y / r0.z; r1.y = -r4.x * r4.x + 1; r1.z = r1.w * r1.y + r1.x; r1.x = r0.y * r1.y + r1.x; r1.x = r1.w * r1.x; r1.y = 1 + -r1.w; r1.x = r0.y * r1.z + r1.x; r1.x = 9.99999975e-006 + r1.x; r1.x = 2 / r1.x; r0.z = r1.x * r0.z; r0.z = 0.785398185 * r0.z; r1.x = max(9.99999975e-005, r0.z); r1.x = sqrt(r1.x); r1.z = cmp(cb0[3].w == 0.000000); r0.z = r1.z ? r1.x : r0.z; r0.z = r0.z * r0.y; r0.xz = max(float2(0,0), r0.xz); r1.x = sqrt(r0.w); r0.w = cb0[8].w * r0.w; r6.xyzw = t1.Sample(s1_s, r0.ww).xyzw; r0.w = cb2[1].w * r1.x; r0.w = 0.970000029 * r0.w; r0.w = cmp(r5.x < r0.w); r0.w = r0.w ? cb3[24].x : 1; r0.w = r6.x * r0.w; r1.xzw = cb0[9].xyz * r0.www; r5.xyz = r1.xzw * r0.zzz; r0.z = 1 + -r0.x; r0.xw = r0.xz * r0.xz; r0.x = dot(r0.xx, r4.xx); r0.x = -0.5 + r0.x; r0.w = r0.w * r0.w; r0.z = r0.w * r0.z; r2.xyz = r4.yzw * r0.zzz + r2.xyz; r2.xyz = r5.xyz * r2.xyz; r0.z = r1.y * r1.y; r0.z = r0.z * r0.z; r0.z = r0.z * r1.y; r0.z = r0.x * r0.z + 1; r0.w = 1 + -r0.y; r1.y = r0.w * r0.w; r1.y = r1.y * r1.y; r0.w = r1.y * r0.w; r0.x = r0.x * r0.w + 1; r0.x = r0.x * r0.z; r0.x = r0.x * r0.y; r0.xyz = r1.xzw * r0.xxx; o0.xyz = r3.xyz * r0.xyz + r2.xyz; o0.w = 1; return; } [/code] May the force be with you....
Hi, Masterotaku I think I have the same lighting shader, but this one is of the same game "The Long Dark" but is from another older version. I have the original shader and the fixed shader fixed by DSS. Maybe you can use these shaders to fix the shader we are fighting...

This is the original VS: ca5cfc8e4d8b1ce5-vs_replace.txt
// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 20:20:57 2017
cbuffer cb2 : register(b2)
{
float4 cb2[8];
}

cbuffer cb1 : register(b1)
{
float4 cb1[6];
}

cbuffer cb0 : register(b0)
{
float4 cb0[7];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : POSITION0,
float3 v1 : NORMAL0,
out float4 o0 : SV_POSITION0,
out float4 o1 : TEXCOORD0,
out float3 o2 : TEXCOORD1)
{
float4 r0,r1;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = cb2[1].xyzw * v0.yyyy;
r0.xyzw = cb2[0].xyzw * v0.xxxx + r0.xyzw;
r0.xyzw = cb2[2].xyzw * v0.zzzz + r0.xyzw;
r0.xyzw = cb2[3].xyzw * v0.wwww + r0.xyzw;
o0.xyzw = r0.xyzw;
r0.y = cb1[5].x * r0.y;
r1.xzw = float3(0.5,0.5,0.5) * r0.xwy;
o1.zw = r0.zw;
o1.xy = r1.xw + r1.zz;
r0.xyz = cb2[5].xyz * v0.yyy;
r0.xyz = cb2[4].xyz * v0.xxx + r0.xyz;
r0.xyz = cb2[6].xyz * v0.zzz + r0.xyz;
r0.xyz = cb2[7].xyz * v0.www + r0.xyz;
r1.xyz = float3(-1,-1,1) * r0.xyz;
r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz;
o2.xyz = cb0[6].xxx * r0.xyz + r1.xyz;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sun Jun 18 20:20:57 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyzw
// NORMAL 0 xyz 1 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyz 2 NONE float xyz
//
vs_4_0
dcl_constantbuffer cb0[7], immediateIndexed
dcl_constantbuffer cb1[6], immediateIndexed
dcl_constantbuffer cb2[8], immediateIndexed
dcl_input v0.xyzw
dcl_input v1.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_temps 2
mul r0.xyzw, v0.yyyy, cb2[1].xyzw
mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw
mad r0.xyzw, cb2[3].xyzw, v0.wwww, r0.xyzw
mov o0.xyzw, r0.xyzw
mul r0.y, r0.y, cb1[5].x
mul r1.xzw, r0.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000)
mov o1.zw, r0.zzzw
add o1.xy, r1.zzzz, r1.xwxx
mul r0.xyz, v0.yyyy, cb2[5].xyzx
mad r0.xyz, cb2[4].xyzx, v0.xxxx, r0.xyzx
mad r0.xyz, cb2[6].xyzx, v0.zzzz, r0.xyzx
mad r0.xyz, cb2[7].xyzx, v0.wwww, r0.xyzx
mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000)
mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx
mad o2.xyz, cb0[6].xxxx, r0.xyzx, r1.xyzx
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


This is the VS shader fixed by DSS

// 3DMigoto: ca5cfc8e4d8b1ce5 | Matched 65 variants of 2 shaders: Hidden/Internal-DeferredShading, Hidden/Internal-PrePassLighting
//
// Unity headers extracted from Internal-DeferredShading.shader
// Shader "Hidden/Internal-DeferredShading" {
// Properties {
// _LightTexture0 ("", any) = "" { }
// _LightTextureB0 ("", 2D) = "" { }
// _ShadowMapTexture ("", any) = "" { }
// _SrcBlend ("", Float) = 1
// _DstBlend ("", Float) = 1
// }
// Fallback Off
// SubShader 1/1 {
// Pass 1/2 {
// Tags { "SHADOWSUPPORT"="true" }
// ZWrite Off
// Blend [_SrcBlend] [_DstBlend]
// GpuProgramID 36028
// Program "vp" {
// SubProgram "d3d11 " {
// 0004000: Keywords { "DIRECTIONAL" "SHADOWS_OFF" "UNITY_HDR_ON" }
// 0000002: Keywords { "DIRECTIONAL" "SHADOWS_OFF" }
// 0080000: Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "UNITY_HDR_ON" }
// 0000040: Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" }
// 0020000: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_OFF" "UNITY_HDR_ON" }
// 0000010: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_OFF" }
// 0100000: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_SCREEN" "UNITY_HDR_ON" }
// 0000080: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_SCREEN" }
// 1000000: Keywords { "POINT" "SHADOWS_CUBE" "SHADOWS_SOFT" "UNITY_HDR_ON" }
// 0000800: Keywords { "POINT" "SHADOWS_CUBE" "SHADOWS_SOFT" }
// 0200000: Keywords { "POINT" "SHADOWS_CUBE" "UNITY_HDR_ON" }
// 0000100: Keywords { "POINT" "SHADOWS_CUBE" }
// 0002000: Keywords { "POINT" "SHADOWS_OFF" "UNITY_HDR_ON" }
// 0000001: Keywords { "POINT" "SHADOWS_OFF" }
// 2000000: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" "SHADOWS_SOFT" "UNITY_HDR_ON" }
// 0001000: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" "SHADOWS_SOFT" }
// 0400000: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" "UNITY_HDR_ON" }
// 0000200: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" }
// 0010000: Keywords { "POINT_COOKIE" "SHADOWS_OFF" "UNITY_HDR_ON" }
// 0000008: Keywords { "POINT_COOKIE" "SHADOWS_OFF" }
// 0800000: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SHADOWS_SOFT" "SPOT" "UNITY_HDR_ON" }
// 0000400: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SHADOWS_SOFT" "SPOT" }
// 0040000: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SPOT" "UNITY_HDR_ON" }
// 0000020: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SPOT" }
// 0008000: Keywords { "SHADOWS_OFF" "SPOT" "UNITY_HDR_ON" }
// 0000004: Keywords { "SHADOWS_OFF" "SPOT" }
// Bind "vertex" Vertex
// Bind "normal" Normal
// 37ffbff: ConstBuffer "$Globals" 288
// 0800400: ConstBuffer "$Globals" 352
// Float 96 [_LightAsQuad]
// ConstBuffer "UnityPerCamera" 144
// Vector 80 [_ProjectionParams]
// ConstBuffer "UnityPerDraw" 336
// Matrix 0 [glstate_matrix_mvp]
// Matrix 64 [glstate_matrix_modelview0]
// BindCB "$Globals" 0
// BindCB "UnityPerCamera" 1
// BindCB "UnityPerDraw" 2
// }
// }
// }
// }
// }
//
// Unity headers extracted from Internal-PrePassLighting.shader
// Shader "Hidden/Internal-PrePassLighting" {
// Properties {
// _LightTexture0 ("", any) = "" { }
// _LightTextureB0 ("", 2D) = "" { }
// _ShadowMapTexture ("", any) = "" { }
// }
// Fallback Off
// SubShader 1/1 {
// 0000001fff: Pass 1/3 {
// 0003ffe000: Pass 2/3 {
// 7ffc000000: Pass 3/3 {
// Tags { "SHADOWSUPPORT"="true" }
// ZWrite Off
// 0000001fff: Blend DstColor Zero
// 7fffffe000: Blend One One
// 0003ffe000: GpuProgramID 113408
// 7ffc000000: GpuProgramID 155461
// 0000001fff: GpuProgramID 57115
// Program "vp" {
// SubProgram "d3d11 " {
// 0008004002: Keywords { "DIRECTIONAL" "SHADOWS_OFF" }
// 0100080040: Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" }
// 0040020010: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_OFF" }
// 0200100080: Keywords { "DIRECTIONAL_COOKIE" "SHADOWS_SCREEN" }
// 2001000800: Keywords { "POINT" "SHADOWS_CUBE" "SHADOWS_SOFT" }
// 0400200100: Keywords { "POINT" "SHADOWS_CUBE" }
// 0004002001: Keywords { "POINT" "SHADOWS_OFF" }
// 4002001000: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" "SHADOWS_SOFT" }
// 0800400200: Keywords { "POINT_COOKIE" "SHADOWS_CUBE" }
// 0020010008: Keywords { "POINT_COOKIE" "SHADOWS_OFF" }
// 1000800400: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SHADOWS_SOFT" "SPOT" }
// 0080040020: Keywords { "SHADOWS_DEPTH" "SHADOWS_NATIVE" "SPOT" }
// 0010008004: Keywords { "SHADOWS_OFF" "SPOT" }
// Bind "vertex" Vertex
// Bind "normal" Normal
// 6fff7ffbff: ConstBuffer "$Globals" 240
// 1000800400: ConstBuffer "$Globals" 304
// Float 96 [_LightAsQuad]
// ConstBuffer "UnityPerCamera" 144
// Vector 80 [_ProjectionParams]
// ConstBuffer "UnityPerDraw" 336
// Matrix 0 [glstate_matrix_mvp]
// Matrix 64 [glstate_matrix_modelview0]
// BindCB "$Globals" 0
// BindCB "UnityPerCamera" 1
// BindCB "UnityPerDraw" 2
// }
// }
// }
// }
// }
//
// Headers extracted with DarkStarSword's extract_unity_shaders.py
// https://raw.githubusercontent.com/DarkStarSword/3d-fixes/master/extract_unity_shaders.py
//
// Shader model vs_4_0

// Replace definition with UnityPerDraw from Unity Cg source code:
// Note that matrix order is transposed between Cg and HLSL, so add row_major
// keywords to each float4x4 entry
cbuffer cb2 : register(b2)
{
// float4 cb2[8];

row_major float4x4 glstate_matrix_mvp;
row_major float4x4 glstate_matrix_modelview0;
row_major float4x4 glstate_matrix_invtrans_modelview0;
#define UNITY_MATRIX_MVP glstate_matrix_mvp
#define UNITY_MATRIX_MV glstate_matrix_modelview0
#define UNITY_MATRIX_IT_MV glstate_matrix_invtrans_modelview0

row_major uniform float4x4 _Object2World;
row_major uniform float4x4 _World2Object;
uniform float4 unity_LODFade; // x is the fade value ranging within [0,1]. y is x quantized into 16 levels
}

cbuffer cb1 : register(b1)
{
float4 cb1[6];
}

cbuffer cb0 : register(b0)
{
float4 cb0[7];
}


// Copied from the directional lighting shader using 3DMigoto
cbuffer UnityPerCameraRare : register(b13)
{
uniform float4 unity_CameraWorldClipPlanes[6];

// Projection matrices of the camera. Note that this might be different from projection matrix
// that is set right now, e.g. while rendering shadows the matrices below are still the projection
// of original camera.
row_major uniform float4x4 unity_CameraProjection;
row_major uniform float4x4 unity_CameraInvProjection;
}

// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : POSITION0,
float3 v1 : NORMAL0,
out float4 o0 : SV_POSITION0,
out float4 o1 : TEXCOORD0,
out float3 o2 : TEXCOORD1,
out float fov : TEXCOORD2) // New output to pass FOV to pixel shaders
{
float4 r0,r1;
uint4 bitmask, uiDest;
float4 fDest;

float4 stereo = StereoParams.Load(0);
float separation = stereo.x; float convergence = stereo.y;

r0.xyzw = UNITY_MATRIX_MVP[1].xyzw * v0.yyyy;
r0.xyzw = UNITY_MATRIX_MVP[0].xyzw * v0.xxxx + r0.xyzw;
r0.xyzw = UNITY_MATRIX_MVP[2].xyzw * v0.zzzz + r0.xyzw;
r0.xyzw = UNITY_MATRIX_MVP[3].xyzw * v0.wwww + r0.xyzw;
o0.xyzw = r0.xyzw;

bool full_screen = (r0.w == 1);
float depth = r0.w;

if (!full_screen) {
r0.x += separation * (depth - convergence);
}

r0.y = cb1[5].x * r0.y;
r1.xzw = float3(0.5,0.5,0.5) * r0.xwy;
o1.zw = r0.zw;
o1.xy = r1.xw + r1.zz;
r0.xyz = UNITY_MATRIX_MV[1].xyz * v0.yyy;
r0.xyz = UNITY_MATRIX_MV[0].xyz * v0.xxx + r0.xyz;
r0.xyz = UNITY_MATRIX_MV[2].xyz * v0.zzz + r0.xyz;
r0.xyz = UNITY_MATRIX_MV[3].xyz * v0.www + r0.xyz;

if (!full_screen) {
// Looks like UNITY_MATRIX_IT_MV is 0, so we can't just do this:
// float4x4 projection = mul(UNITY_MATRIX_IT_MV, UNITY_MATRIX_MVP);
// fov = 1 / projection[0].x;

// Instead, we have to calculate this the long way:

// I already have an optimised version of this calculation in assembler for
// Unity 4 (the committed version is for column-major order, but the optimised
// row-major version was only slightly longer). I'm guessing the HLSL
// determinant() function won't be optimised because it can't make assumptions
// about the matrix (and that is a *large* amount of multiplications that could
// be eliminated), so we can probably do better, but for now this is clearer:
float det = 1 / determinant(UNITY_MATRIX_MV);

float3 mvi;
mvi.x = ((UNITY_MATRIX_MV._m11 * UNITY_MATRIX_MV._m22) - (UNITY_MATRIX_MV._m21 * UNITY_MATRIX_MV._m12)) * det;
mvi.y = ((UNITY_MATRIX_MV._m21 * UNITY_MATRIX_MV._m02) - (UNITY_MATRIX_MV._m01 * UNITY_MATRIX_MV._m22)) * det;
mvi.z = ((UNITY_MATRIX_MV._m01 * UNITY_MATRIX_MV._m12) - (UNITY_MATRIX_MV._m11 * UNITY_MATRIX_MV._m02)) * det;

fov = 1 / dot(mvi, UNITY_MATRIX_MVP._m00_m10_m20);

r0.x += separation * (depth - convergence) * fov;
} else {
// Can't determine the FOV from the values passed to this shader, so
// use the FOV copied from directional lighting shader with 3DMigoto.
// We could probably get away with using only this and scrapping the
// above code for games that always have directional lighting enabled.

fov = unity_CameraInvProjection[0].x;
}

r1.xyz = float3(-1,-1,1) * r0.xyz;
r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz;
o2.xyz = cb0[6].xxx * r0.xyz + r1.xyz;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Original ASM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyzw
// NORMAL 0 xyz 1 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyz 2 NONE float xyz
//
vs_4_0
dcl_constantbuffer cb0[7], immediateIndexed
dcl_constantbuffer cb1[6], immediateIndexed
dcl_constantbuffer cb2[8], immediateIndexed
dcl_input v0.xyzw
dcl_input v1.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_temps 2
mul r0.xyzw, v0.yyyy, cb2[1].xyzw
mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw
mad r0.xyzw, cb2[3].xyzw, v0.wwww, r0.xyzw
mov o0.xyzw, r0.xyzw
mul r0.y, r0.y, cb1[5].x
mul r1.xzw, r0.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000)
mov o1.zw, r0.zzzw
add o1.xy, r1.zzzz, r1.xwxx
mul r0.xyz, v0.yyyy, cb2[5].xyzx
mad r0.xyz, cb2[4].xyzx, v0.xxxx, r0.xyzx
mad r0.xyz, cb2[6].xyzx, v0.zzzz, r0.xyzx
mad r0.xyz, cb2[7].xyzx, v0.wwww, r0.xyzx
mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000)
mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx
mad o2.xyz, cb0[6].xxxx, r0.xyzx, r1.xyzx
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Recompiled ASM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20789
//
//
// Buffer Definitions:
//
// cbuffer cb2
// {
//
// float4 cb2[8]; // Offset: 0 Size: 128
//
// }
//
// cbuffer cb1
// {
//
// float4 cb1[6]; // Offset: 0 Size: 96
//
// }
//
// cbuffer cb0
// {
//
// float4 cb0[7]; // Offset: 0 Size: 112
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// cb0 cbuffer NA NA 0 1
// cb1 cbuffer NA NA 1 1
// cb2 cbuffer NA NA 2 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyzw
// NORMAL 0 xyz 1 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyz 2 NONE float xyz
//
vs_4_0
dcl_constantbuffer cb2[8], immediateIndexed
dcl_constantbuffer cb1[6], immediateIndexed
dcl_constantbuffer cb0[7], immediateIndexed
dcl_input v0.xyzw
dcl_input v1.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_temps 2
mul r0.xyzw, v0.yyyy, cb2[1].xyzw
mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw
mad r0.xyzw, cb2[3].xwyz, v0.wwww, r0.xwyz
mov o0.xyzw, r0.xzwy
mul r0.z, r0.z, cb1[5].x
mov o1.zw, r0.wwwy
mul r0.xyz, r0.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000)
add o1.xy, r0.yyyy, r0.xzxx
mul r0.xyz, v0.yyyy, cb2[5].xyzx
mad r0.xyz, cb2[4].xyzx, v0.xxxx, r0.xyzx
mad r0.xyz, cb2[6].xyzx, v0.zzzz, r0.xyzx
mad r0.xyz, cb2[7].xyzx, v0.wwww, r0.xyzx
mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000)
mad r0.xyz, r0.xyzx, l(1.000000, 1.000000, -1.000000, 0.000000), v1.xyzx
mad o2.xyz, cb0[6].xxxx, r0.xyzx, r1.xyzx
ret
// Approximately 17 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


the PS original: adb8c8f1b20ba202-ps_replace.txt

// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 20:20:28 2017
Texture2D<float4> t5 : register(t5);

Texture2D<float4> t4 : register(t4);

Texture2D<float4> t3 : register(t3);

TextureCube<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s5_s : register(s5);

SamplerState s4_s : register(s4);

SamplerState s3_s : register(s3);

SamplerState s2_s : register(s2);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb4 : register(b4)
{
float4 cb4[4];
}

cbuffer cb3 : register(b3)
{
float4 cb3[25];
}

cbuffer cb2 : register(b2)
{
float4 cb2[2];
}

cbuffer cb1 : register(b1)
{
float4 cb1[8];
}

cbuffer cb0 : register(b0)
{
float4 cb0[10];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : SV_POSITION0,
float4 v1 : TEXCOORD0,
float3 v2 : TEXCOORD1,
out float4 o0 : SV_Target0)
{
float4 r0,r1,r2,r3,r4,r5,r6;
uint4 bitmask, uiDest;
float4 fDest;

r0.x = cb1[5].z / v2.z;
r0.xyz = v2.xyz * r0.xxx;
r1.xy = v1.xy / v1.ww;
r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw;
r0.w = cb1[7].x * r2.x + cb1[7].y;
r0.w = 1 / r0.w;
r0.xyz = r0.xyz * r0.www;
r2.xyz = cb4[1].xyz * r0.yyy;
r0.xyw = cb4[0].xyz * r0.xxx + r2.xyz;
r0.xyz = cb4[2].xyz * r0.zzz + r0.xyw;
r0.xyz = cb4[3].xyz + r0.xyz;
r2.xyz = -cb1[4].xyz + r0.xyz;
r0.xyz = -cb0[8].xyz + r0.xyz;
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r3.xyzw = t5.Sample(s5_s, r1.xy).xyzw;
r3.xyz = r3.xyz * float3(2,2,2) + float3(-1,-1,-1);
r0.w = dot(r3.xyz, r3.xyz);
r0.w = rsqrt(r0.w);
r3.xyz = r3.xyz * r0.www;
r0.w = dot(r3.xyz, -r2.xyz);
r1.z = 9.99999975e-006 + -r0.w;
r0.w = cmp(r0.w < 0);
r4.xyz = -r2.xyz * r1.zzz + r3.xyz;
r3.xyz = r0.www ? r4.xyz : r3.xyz;
r0.w = dot(r0.xyz, r0.xyz);
r1.z = rsqrt(r0.w);
r4.xyz = -r0.xyz * r1.zzz + -r2.xyz;
r1.w = dot(r3.xyz, -r2.xyz);
r1.w = max(0, r1.w);
r2.xyz = r1.zzz * r0.xyz;
r5.xyzw = t2.Sample(s2_s, r0.xyz).xyzw;
r0.x = dot(r4.xyz, r4.xyz);
r0.x = max(0.00100000005, r0.x);
r0.x = rsqrt(r0.x);
r0.xyz = r4.xyz * r0.xxx;
r1.z = dot(r3.xyz, r0.xyz);
r2.w = dot(r3.xyz, -r2.xyz);
r0.x = dot(-r2.xyz, r0.xyz);
r0.y = max(0, r2.w);
r0.z = max(0, r1.z);
r0.z = r0.z * r0.z;
r2.xyzw = t4.Sample(s4_s, r1.xy).xyzw;
r3.xyzw = t3.Sample(s3_s, r1.xy).xyzw;
r4.xyzw = float4(1,1,1,1) + -r2.wxyz;
r1.x = r4.x * r4.x;
r1.y = r1.x * r1.x + -1;
r0.z = r0.z * r1.y + 1;
r1.y = 3.14159274 * r0.z;
r0.z = r1.y * r0.z + 1.00000001e-007;
r1.y = r1.x * r1.x;
r0.z = r1.y / r0.z;
r1.y = -r4.x * r4.x + 1;
r1.z = r1.w * r1.y + r1.x;
r1.x = r0.y * r1.y + r1.x;
r1.x = r1.w * r1.x;
r1.y = 1 + -r1.w;
r1.x = r0.y * r1.z + r1.x;
r1.x = 9.99999975e-006 + r1.x;
r1.x = 2 / r1.x;
r0.z = r1.x * r0.z;
r0.z = 0.785398185 * r0.z;
r1.x = max(9.99999975e-005, r0.z);
r1.x = sqrt(r1.x);
r1.z = cmp(cb0[3].w == 0.000000);
r0.z = r1.z ? r1.x : r0.z;
r0.z = r0.z * r0.y;
r0.xz = max(float2(0,0), r0.xz);
r1.x = sqrt(r0.w);
r0.w = cb0[8].w * r0.w;
r6.xyzw = t1.Sample(s1_s, r0.ww).xyzw;
r0.w = cb2[1].w * r1.x;
r0.w = 0.970000029 * r0.w;
r0.w = cmp(r5.x < r0.w);
r0.w = r0.w ? cb3[24].x : 1;
r0.w = r6.x * r0.w;
r1.xzw = cb0[9].xyz * r0.www;
r5.xyz = r1.xzw * r0.zzz;
r0.z = 1 + -r0.x;
r0.xw = r0.xz * r0.xz;
r0.x = dot(r0.xx, r4.xx);
r0.x = -0.5 + r0.x;
r0.w = r0.w * r0.w;
r0.z = r0.w * r0.z;
r2.xyz = r4.yzw * r0.zzz + r2.xyz;
r2.xyz = r5.xyz * r2.xyz;
r0.z = r1.y * r1.y;
r0.z = r0.z * r0.z;
r0.z = r0.z * r1.y;
r0.z = r0.x * r0.z + 1;
r0.w = 1 + -r0.y;
r1.y = r0.w * r0.w;
r1.y = r1.y * r1.y;
r0.w = r1.y * r0.w;
r0.x = r0.x * r0.w + 1;
r0.x = r0.x * r0.z;
r0.x = r0.x * r0.y;
r0.xyz = r1.xzw * r0.xxx;
o0.xyz = r3.xyz * r0.xyz + r2.xyz;
o0.w = 1;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sun Jun 18 20:20:28 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float
// TEXCOORD 0 xyzw 1 NONE float xy w
// TEXCOORD 1 xyz 2 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target 0 xyzw 0 TARGET float xyzw
//
ps_4_0
dcl_constantbuffer cb0[10], immediateIndexed
dcl_constantbuffer cb1[8], immediateIndexed
dcl_constantbuffer cb2[2], immediateIndexed
dcl_constantbuffer cb3[25], immediateIndexed
dcl_constantbuffer cb4[4], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
dcl_sampler s4, mode_default
dcl_sampler s5, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texturecube (float,float,float,float) t2
dcl_resource_texture2d (float,float,float,float) t3
dcl_resource_texture2d (float,float,float,float) t4
dcl_resource_texture2d (float,float,float,float) t5
dcl_input_ps linear v1.xyw
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 7
div r0.x, cb1[5].z, v2.z
mul r0.xyz, r0.xxxx, v2.xyzx
div r1.xy, v1.xyxx, v1.wwww
sample r2.xyzw, r1.xyxx, t0.xyzw, s0
mad r0.w, cb1[7].x, r2.x, cb1[7].y
div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mul r2.xyz, r0.yyyy, cb4[1].xyzx
mad r0.xyw, cb4[0].xyxz, r0.xxxx, r2.xyxz
mad r0.xyz, cb4[2].xyzx, r0.zzzz, r0.xywx
add r0.xyz, r0.xyzx, cb4[3].xyzx
add r2.xyz, r0.xyzx, -cb1[4].xyzx
add r0.xyz, r0.xyzx, -cb0[8].xyzx
dp3 r0.w, r2.xyzx, r2.xyzx
rsq r0.w, r0.w
mul r2.xyz, r0.wwww, r2.xyzx
sample r3.xyzw, r1.xyxx, t5.xyzw, s5
mad r3.xyz, r3.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
dp3 r0.w, r3.xyzx, r3.xyzx
rsq r0.w, r0.w
mul r3.xyz, r0.wwww, r3.xyzx
dp3 r0.w, r3.xyzx, -r2.xyzx
add r1.z, -r0.w, l(0.000010)
lt r0.w, r0.w, l(0.000000)
mad r4.xyz, -r2.xyzx, r1.zzzz, r3.xyzx
movc r3.xyz, r0.wwww, r4.xyzx, r3.xyzx
dp3 r0.w, r0.xyzx, r0.xyzx
rsq r1.z, r0.w
mad r4.xyz, -r0.xyzx, r1.zzzz, -r2.xyzx
dp3 r1.w, r3.xyzx, -r2.xyzx
max r1.w, r1.w, l(0.000000)
mul r2.xyz, r0.xyzx, r1.zzzz
sample r5.xyzw, r0.xyzx, t2.xyzw, s2
dp3 r0.x, r4.xyzx, r4.xyzx
max r0.x, r0.x, l(0.001000)
rsq r0.x, r0.x
mul r0.xyz, r0.xxxx, r4.xyzx
dp3 r1.z, r3.xyzx, r0.xyzx
dp3 r2.w, r3.xyzx, -r2.xyzx
dp3 r0.x, -r2.xyzx, r0.xyzx
max r0.y, r2.w, l(0.000000)
max r0.z, r1.z, l(0.000000)
mul r0.z, r0.z, r0.z
sample r2.xyzw, r1.xyxx, t4.xyzw, s4
sample r3.xyzw, r1.xyxx, t3.xyzw, s3
add r4.xyzw, -r2.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000)
mul r1.x, r4.x, r4.x
mad r1.y, r1.x, r1.x, l(-1.000000)
mad r0.z, r0.z, r1.y, l(1.000000)
mul r1.y, r0.z, l(3.14159274)
mad r0.z, r1.y, r0.z, l(1.000000012E-007)
mul r1.y, r1.x, r1.x
div r0.z, r1.y, r0.z
mad r1.y, -r4.x, r4.x, l(1.000000)
mad r1.z, r1.w, r1.y, r1.x
mad r1.x, r0.y, r1.y, r1.x
mul r1.x, r1.x, r1.w
add r1.y, -r1.w, l(1.000000)
mad r1.x, r0.y, r1.z, r1.x
add r1.x, r1.x, l(0.000010)
div r1.x, l(2.000000), r1.x
mul r0.z, r0.z, r1.x
mul r0.z, r0.z, l(0.785398185)
max r1.x, r0.z, l(0.000100)
sqrt r1.x, r1.x
eq r1.z, cb0[3].w, l(0.000000)
movc r0.z, r1.z, r1.x, r0.z
mul r0.z, r0.y, r0.z
max r0.xz, r0.xxzx, l(0.000000, 0.000000, 0.000000, 0.000000)
sqrt r1.x, r0.w
mul r0.w, r0.w, cb0[8].w
sample r6.xyzw, r0.wwww, t1.xyzw, s1
mul r0.w, r1.x, cb2[1].w
mul r0.w, r0.w, l(0.970000)
lt r0.w, r5.x, r0.w
movc r0.w, r0.w, cb3[24].x, l(1.000000)
mul r0.w, r0.w, r6.x
mul r1.xzw, r0.wwww, cb0[9].xxyz
mul r5.xyz, r0.zzzz, r1.xzwx
add r0.z, -r0.x, l(1.000000)
mul r0.xw, r0.xxxz, r0.xxxz
dp2 r0.x, r0.xxxx, r4.xxxx
add r0.x, r0.x, l(-0.500000)
mul r0.w, r0.w, r0.w
mul r0.z, r0.z, r0.w
mad r2.xyz, r4.yzwy, r0.zzzz, r2.xyzx
mul r2.xyz, r2.xyzx, r5.xyzx
mul r0.z, r1.y, r1.y
mul r0.z, r0.z, r0.z
mul r0.z, r1.y, r0.z
mad r0.z, r0.x, r0.z, l(1.000000)
add r0.w, -r0.y, l(1.000000)
mul r1.y, r0.w, r0.w
mul r1.y, r1.y, r1.y
mul r0.w, r0.w, r1.y
mad r0.x, r0.x, r0.w, l(1.000000)
mul r0.x, r0.z, r0.x
mul r0.x, r0.y, r0.x
mul r0.xyz, r0.xxxx, r1.xzwx
mad o0.xyz, r3.xyzx, r0.xyzx, r2.xyzx
mov o0.w, l(1.000000)
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


and the fixed one by DSS

// hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt
// 3DMigoto: adb8c8f1b20ba202 | Unity headers extracted from Internal-DeferredShading.shader
// Shader "Hidden/Internal-DeferredShading" {
// Properties {
// _LightTexture0 ("", any) = "" { }
// _LightTextureB0 ("", 2D) = "" { }
// _ShadowMapTexture ("", any) = "" { }
// _SrcBlend ("", Float) = 1
// _DstBlend ("", Float) = 1
// }
// Fallback Off
// SubShader 1/1 {
// Pass 1/2 {
// Tags { "SHADOWSUPPORT"="true" }
// ZWrite Off
// Blend [_SrcBlend] [_DstBlend]
// GpuProgramID 36028
// Program "fp" {
// SubProgram "d3d11 " {
// GpuProgramIndex 95
// }
// }
// }
// }
// }
//
// Unity 5.3 headers extracted from Internal-DeferredShading.shader.decompressed:
// API d3d11
// Shader model ps_4_0
// undeciphered1: 91 6 0
// Keywords { "POINT" "SHADOWS_CUBE" "UNITY_HDR_ON" }
// undeciphered2: 1 6 5 6 0
// undeciphered3: 0 0
// ConstBuffer "$Globals" 272
// Vector 48 [unity_ColorSpaceLuminance]
// Vector 128 [_LightPos]
// Vector 144 [_LightColor]
// ConstBuffer "UnityPerCamera" 144
// Vector 64 [_WorldSpaceCameraPos] 3
// Vector 80 [_ProjectionParams]
// Vector 112 [_ZBufferParams]
// ConstBuffer "UnityLighting" 720
// Vector 16 [_LightPositionRange]
// ConstBuffer "UnityShadows" 416
// Vector 384 [_LightShadowData]
// ConstBuffer "UnityPerCamera2" 64
// Matrix 0 [_CameraToWorld]
// SetTexture 0 [_CameraDepthTexture] 2D 0
// SetTexture 1 [_LightTextureB0] 2D 1
// SetTexture 2 [_ShadowMapTexture] CUBE 2
// SetTexture 3 [_CameraGBufferTexture0] 2D 3
// SetTexture 4 [_CameraGBufferTexture1] 2D 4
// SetTexture 5 [_CameraGBufferTexture2] 2D 5
// BindCB "$Globals" 0
// BindCB "UnityPerCamera" 1
// BindCB "UnityLighting" 2
// BindCB "UnityShadows" 3
// BindCB "UnityPerCamera2" 4
//
// Headers extracted with DarkStarSword's extract_unity53_shaders.py
// https://raw.githubusercontent.com/DarkStarSword/3d-fixes/master/extract_unity53_shaders.py

// ---- Created with 3Dmigoto v1.2.35 on Sat Apr 30 15:49:02 2016
Texture2D<float4> t5 : register(t5);

Texture2D<float4> t4 : register(t4);

Texture2D<float4> t3 : register(t3);

TextureCube<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s5_s : register(s5);

SamplerState s4_s : register(s4);

SamplerState s3_s : register(s3);

SamplerState s2_s : register(s2);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb4 : register(b4)
{
float4 cb4[4];
}

cbuffer cb3 : register(b3)
{
float4 cb3[25];
}

cbuffer cb2 : register(b2)
{
float4 cb2[2];
}

cbuffer cb1 : register(b1)
{
float4 cb1[9];
}

cbuffer cb0 : register(b0)
{
float4 cb0[10];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : SV_POSITION0,
float4 v1 : TEXCOORD0,
float3 v2 : TEXCOORD1,
out float4 o0 : SV_Target0,
float fov : TEXCOORD3)
{
float4 r0,r1,r2,r3,r4,r5,r6;
uint4 bitmask, uiDest;
float4 fDest;

float4 stereo = StereoParams.Load(0);
float separation = stereo.x, convergence = stereo.y, eye = stereo.z;

// Unity reflection/specular fix inserted with DarkStarSword's hlsltool.py:
// hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt
matrix _CameraToWorld = matrix(cb4[0], cb4[1], cb4[2], cb4[3]);
float4 _WorldSpaceCameraPos = cb1[4];
_WorldSpaceCameraPos.xyz -= mul(float4(-separation * convergence * fov, 0, 0, 0), _CameraToWorld).xyz;

r0.x = cb1[5].z / v2.z;
r0.xyz = v2.xyz * r0.xxx;
r1.xy = v1.xy / v1.ww;
r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw;
r0.w = cb1[7].x * r2.x + cb1[7].y;
r0.w = 1 / r0.w;
r0.xyz = r0.xyz * r0.www;

// Unity light/shadow fix (pixel shader stage) inserted with DarkStarSword's hlsltool.py:
// hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt
r0.x -= separation * (r0.z - convergence) * fov;

r2.xyz = cb4[1].xyz * r0.yyy;
r0.xyw = cb4[0].xyz * r0.xxx + r2.xyz;
r0.xyz = cb4[2].xyz * r0.zzz + r0.xyw; // depth in r0.z
r0.xyz = cb4[3].xyz + r0.xyz;
r2.xyz = -_WorldSpaceCameraPos.xyz + r0.xyz;
r0.xyz = -cb0[8].xyz + r0.xyz;
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r3.xyzw = t5.Sample(s5_s, r1.xy).xyzw;
r3.xyz = r3.xyz * float3(2,2,2) + float3(-1,-1,-1);
r0.w = dot(r3.xyz, r3.xyz);
r0.w = rsqrt(r0.w);
r3.xyz = r3.xyz * r0.www;
r0.w = dot(r3.xyz, -r2.xyz);
r1.z = 9.99999975e-006 + -r0.w;
r0.w = cmp(r0.w < 0);
r4.xyz = -r2.xyz * r1.zzz + r3.xyz;
r3.xyz = r0.www ? r4.xyz : r3.xyz;
r0.w = dot(r0.xyz, r0.xyz);
r1.z = rsqrt(r0.w);
r4.xyz = -r0.xyz * r1.zzz + -r2.xyz;
r1.w = dot(r3.xyz, -r2.xyz);
r1.w = max(0, r1.w);
r2.xyz = r1.zzz * r0.xyz;
r5.xyzw = t2.Sample(s2_s, r0.xyz).xyzw;
r0.x = dot(r4.xyz, r4.xyz);
r0.x = max(0.00100000005, r0.x);
r0.x = rsqrt(r0.x);
r0.xyz = r4.xyz * r0.xxx;
r1.z = dot(r3.xyz, r0.xyz);
r2.w = dot(r3.xyz, -r2.xyz);
r0.x = dot(-r2.xyz, r0.xyz);
r0.y = max(0, r2.w);
r0.z = max(0, r1.z);
r0.z = r0.z * r0.z;
r2.xyzw = t4.Sample(s4_s, r1.xy).xyzw;
r3.xyzw = t3.Sample(s3_s, r1.xy).xyzw;
r4.xyzw = float4(1,1,1,1) + -r2.wxyz;
r1.x = r4.x * r4.x;
r1.y = r1.x * r1.x + -1;
r0.z = r0.z * r1.y + 1;
r1.y = 3.14159274 * r0.z;
r0.z = r1.y * r0.z + 1.00000001e-007;
r1.y = r1.x * r1.x;
r0.z = r1.y / r0.z;
r1.y = -r4.x * r4.x + 1;
r1.z = r1.w * r1.y + r1.x;
r1.x = r0.y * r1.y + r1.x;
r1.x = r1.w * r1.x;
r1.y = 1 + -r1.w;
r1.x = r0.y * r1.z + r1.x;
r1.x = 9.99999975e-006 + r1.x;
r1.x = 2 / r1.x;
r0.z = r1.x * r0.z;
r0.z = 0.785398185 * r0.z;
r1.x = max(9.99999975e-005, r0.z);
r1.x = sqrt(r1.x);
r1.z = cmp(cb0[3].w == 0.000000);
r0.z = r1.z ? r1.x : r0.z;
r0.z = r0.z * r0.y;
r0.xz = max(float2(0,0), r0.xz);
r1.x = sqrt(r0.w);
r0.w = cb0[8].w * r0.w;
r6.xyzw = t1.Sample(s1_s, r0.ww).xyzw;
r0.w = cb2[1].w * r1.x;
r0.w = 0.970000029 * r0.w;
r0.w = cmp(r5.x < r0.w);
r0.w = r0.w ? cb3[24].x : 1;
r0.w = r6.x * r0.w;
r1.xzw = cb0[9].xyz * r0.www;
r5.xyz = r1.xzw * r0.zzz;
r0.z = 1 + -r0.x;
r0.xw = r0.xz * r0.xz;
r0.x = dot(r0.xx, r4.xx);
r0.x = -0.5 + r0.x;
r0.w = r0.w * r0.w;
r0.z = r0.w * r0.z;
r2.xyz = r4.yzw * r0.zzz + r2.xyz;
r2.xyz = r5.xyz * r2.xyz;
r0.z = r1.y * r1.y;
r0.z = r0.z * r0.z;
r0.z = r0.z * r1.y;
r0.z = r0.x * r0.z + 1;
r0.w = 1 + -r0.y;
r1.y = r0.w * r0.w;
r1.y = r1.y * r1.y;
r0.w = r1.y * r0.w;
r0.x = r0.x * r0.w + 1;
r0.x = r0.x * r0.z;
r0.x = r0.x * r0.y;
r0.xyz = r1.xzw * r0.xxx;
o0.xyz = r3.xyz * r0.xyz + r2.xyz;
o0.w = 1;
return;
}


May the force be with you....

#23
Posted 06/19/2017 01:08 PM   
@masterotaku here's my homework XD. cb3 it's new in VS I don't know what to do with it X(. I've made a new version of the shaders comparing with the old ones. VS: 4c9936f7f1d28f6e-vs_replace.txt [code]// lights // ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017 cbuffer cb3 : register(b3) { float4 cb3[21]; } cbuffer cb2 : register(b2) { //float4 cb2[4]; row_major float4x4 glstate_matrix_mvp; row_major float4x4 glstate_matrix_modelview0; row_major float4x4 glstate_matrix_invtrans_modelview0; #define UNITY_MATRIX_MVP glstate_matrix_mvp #define UNITY_MATRIX_MV glstate_matrix_modelview0 #define UNITY_MATRIX_IT_MV glstate_matrix_invtrans_modelview0 row_major uniform float4x4 _Object2World; row_major uniform float4x4 _World2Object; uniform float4 unity_LODFade; // x is the fade value ranging within [0,1]. y is x quantized into 16 levels } cbuffer cb1 : register(b1) { float4 cb1[6]; } cbuffer cb0 : register(b0) { float4 cb0[3]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : POSITION0, float3 v1 : NORMAL0, out float4 o0 : SV_POSITION0, out float4 o1 : TEXCOORD0, out float3 o2 : TEXCOORD1) out float fov : TEXCOORD2) // New output to pass FOV to pixel shaders { float4 r0,r1,r2; uint4 bitmask, uiDest; float4 fDest; float4 stereo = StereoParams.Load(0); float separation = stereo.x; float convergence = stereo.y; r0.xyzw = UNITY_MATRIX_MVP[1].xyzw * v0.yyyy; //cb2 por UNITY_MATRIX_MVP r0.xyzw = UNITY_MATRIX_MVP[0].xyzw * v0.xxxx + r0.xyzw; //cb2 por UNITY_MATRIX_MVP r0.xyzw = UNITY_MATRIX_MVP[2].xyzw * v0.zzzz + r0.xyzw; //cb2 por UNITY_MATRIX_MVP r0.xyzw = UNITY_MATRIX_MVP[3].xyzw + r0.xyzw; //cb2 por UNITY_MATRIX_MVP r1.xyzw = cb3[18].xyzw * r0.yyyy; //NEW r1.xyzw = cb3[17].xyzw * r0.xxxx + r1.xyzw;//NEW r1.xyzw = cb3[19].xyzw * r0.zzzz + r1.xyzw;//NEW r1.xyzw = cb3[20].xyzw * r0.wwww + r1.xyzw;//NEW o0.xyzw = r1.xyzw; bool full_screen = (r0.w == 1); float depth = r0.w; if (!full_screen) { r0.x += separation * (depth - convergence); r1.y = cb1[5].x * r1.y; r2.xzw = float3(0.5,0.5,0.5) * r1.xwy; o1.zw = r1.zw; o1.xy = r2.xw + r2.zz; r1.xyz = cb3[10].xyz * r0.yyy; //UNITY_MATRIX_MV?cb2 in old shader r1.xyz = cb3[9].xyz * r0.xxx + r1.xyz; //UNITY_MATRIX_MV?cb2 in old shader r0.xyz = cb3[11].xyz * r0.zzz + r1.xyz;//UNITY_MATRIX_MV?cb2 in old shader r0.xyz = cb3[12].xyz * r0.www + r0.xyz;//UNITY_MATRIX_MV?cb2 in old shader if (!full_screen) { // Looks like UNITY_MATRIX_IT_MV is 0, so we can't just do this: // float4x4 projection = mul(UNITY_MATRIX_IT_MV, UNITY_MATRIX_MVP); // fov = 1 / projection[0].x; // Instead, we have to calculate this the long way: // I already have an optimised version of this calculation in assembler for // Unity 4 (the committed version is for column-major order, but the optimised // row-major version was only slightly longer). I'm guessing the HLSL // determinant() function won't be optimised because it can't make assumptions // about the matrix (and that is a *large* amount of multiplications that could // be eliminated), so we can probably do better, but for now this is clearer: float det = 1 / determinant(UNITY_MATRIX_MV); float3 mvi; mvi.x = ((UNITY_MATRIX_MV._m11 * UNITY_MATRIX_MV._m22) - (UNITY_MATRIX_MV._m21 * UNITY_MATRIX_MV._m12)) * det; mvi.y = ((UNITY_MATRIX_MV._m21 * UNITY_MATRIX_MV._m02) - (UNITY_MATRIX_MV._m01 * UNITY_MATRIX_MV._m22)) * det; mvi.z = ((UNITY_MATRIX_MV._m01 * UNITY_MATRIX_MV._m12) - (UNITY_MATRIX_MV._m11 * UNITY_MATRIX_MV._m02)) * det; fov = 1 / dot(mvi, UNITY_MATRIX_MVP._m00_m10_m20); r0.x += separation * (depth - convergence) * fov; } else { // Can't determine the FOV from the values passed to this shader, so // use the FOV copied from directional lighting shader with 3DMigoto. // We could probably get away with using only this and scrapping the // above code for games that always have directional lighting enabled. fov = unity_CameraInvProjection[0].x; } r1.xyz = float3(-1,-1,1) * r0.xyz; r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz; o2.xyz = cb0[2].xxx * r0.xyz + r1.xyz; return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyz // NORMAL 0 xyz 1 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float xyzw // TEXCOORD 0 xyzw 1 NONE float xyzw // TEXCOORD 1 xyz 2 NONE float xyz // vs_4_0 dcl_constantbuffer cb0[3], immediateIndexed dcl_constantbuffer cb1[6], immediateIndexed dcl_constantbuffer cb2[4], immediateIndexed dcl_constantbuffer cb3[21], immediateIndexed dcl_input v0.xyz dcl_input v1.xyz dcl_output_siv o0.xyzw, position dcl_output o1.xyzw dcl_output o2.xyz dcl_temps 3 mul r0.xyzw, v0.yyyy, cb2[1].xyzw mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw add r0.xyzw, r0.xyzw, cb2[3].xyzw mul r1.xyzw, r0.yyyy, cb3[18].xyzw mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw mad r1.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw mov o0.xyzw, r1.xyzw mul r1.y, r1.y, cb1[5].x mul r2.xzw, r1.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000) mov o1.zw, r1.zzzw add o1.xy, r2.zzzz, r2.xwxx mul r1.xyz, r0.yyyy, cb3[10].xyzx mad r1.xyz, cb3[9].xyzx, r0.xxxx, r1.xyzx mad r0.xyz, cb3[11].xyzx, r0.zzzz, r1.xyzx mad r0.xyz, cb3[12].xyzx, r0.wwww, r0.xyzx mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000) mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx mad o2.xyz, cb0[2].xxxx, r0.xyzx, r1.xyzx ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/[/code] PS e3fd8a725676603e-ps_replace.txt [code]// lighs // ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017 Texture2D<float4> t5 : register(t5); Texture2D<float4> t4 : register(t4); Texture2D<float4> t3 : register(t3); TextureCube<float4> t2 : register(t2); Texture2D<float4> t1 : register(t1); Texture2D<float4> t0 : register(t0); SamplerState s5_s : register(s5); SamplerState s4_s : register(s4); SamplerState s3_s : register(s3); SamplerState s2_s : register(s2); SamplerState s1_s : register(s1); SamplerState s0_s : register(s0); cbuffer cb2 : register(b2) { float4 cb2[22]; } cbuffer cb1 : register(b1) { //float4 cb1[8]; float4 cb1[9]; } cbuffer cb0 : register(b0) { float4 cb0[11]; } // 3Dmigoto declarations #define cmp - Texture1D<float4> IniParams : register(t120); Texture2D<float4> StereoParams : register(t125); void main( float4 v0 : SV_POSITION0, float4 v1 : TEXCOORD0, float3 v2 : TEXCOORD1, out float4 o0 : SV_Target0) float fov : TEXCOORD3) { float4 r0,r1,r2,r3,r4,r5,r6; uint4 bitmask, uiDest; float4 fDest; float4 stereo = StereoParams.Load(0); float separation = stereo.x, convergence = stereo.y, eye = stereo.z; // Unity reflection/specular fix inserted with DarkStarSword's hlsltool.py: // hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt matrix _CameraToWorld = matrix(cb4[0], cb4[1], cb4[2], cb4[3]); float4 _WorldSpaceCameraPos = cb1[4]; _WorldSpaceCameraPos.xyz -= mul(float4(-separation * convergence * fov, 0, 0, 0), _CameraToWorld).xyz; r0.x = cb1[5].z / v2.z; r0.xyz = v2.xyz * r0.xxx; r1.xy = v1.xy / v1.ww; r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw; r0.w = cb1[7].x * r2.x + cb1[7].y; r0.w = 1 / r0.w; r0.xyz = r0.xyz * r0.www; // Unity light/shadow fix (pixel shader stage) inserted with DarkStarSword's hlsltool.py: // hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt r0.x -= separation * (r0.z - convergence) * fov; r2.xyz = cb2[19].xyz * r0.yyy; r0.xyw = cb2[18].xyz * r0.xxx + r2.xyz; r0.xyz = cb2[20].xyz * r0.zzz + r0.xyw; // depth in r0.z? r0.xyz = cb2[21].xyz + r0.xyz; r2.xyz = -_WorldSpaceCameraPos[4].xyz + r0.xyz;//cb1 = _WorldSpaceCameraPos r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r3.xyz = -cb0[4].xyz + r0.xyz; r0.w = dot(r3.xyz, r3.xyz); r1.z = rsqrt(r0.w); r0.w = cb0[4].w * r0.w; r4.xyzw = t1.Sample(s1_s, r0.ww).xyzw; r4.yzw = -r3.xyz * r1.zzz + -r2.xyz; r3.xyz = r3.xyz * r1.zzz; r0.w = dot(r4.yzw, r4.yzw); r0.w = max(0.00100000005, r0.w); r0.w = rsqrt(r0.w); r4.yzw = r4.yzw * r0.www; r5.xyzw = t5.Sample(s5_s, r1.xy).xyzw; r5.xyz = r5.xyz * float3(2,2,2) + float3(-1,-1,-1); r0.w = dot(r5.xyz, r5.xyz); r0.w = rsqrt(r0.w); r5.xyz = r5.xyz * r0.www; r0.w = saturate(dot(r5.xyz, r4.yzw)); r1.z = saturate(dot(-r3.xyz, r4.yzw)); r1.w = saturate(dot(r5.xyz, -r3.xyz)); r2.x = dot(r5.xyz, -r2.xyz); r3.xyzw = t4.Sample(s4_s, r1.xy).xyzw; r5.xyzw = t3.Sample(s3_s, r1.xy).xyzw; r6.xyzw = float4(1,1,1,1) + -r3.wxyz; r1.x = r6.x * r6.x; r1.y = r1.x * r1.x; r2.y = r0.w * r1.y + -r0.w; r0.w = r2.y * r0.w + 1; r0.w = r0.w * r0.w + 1.00000001e-007; r1.y = 0.318309873 * r1.y; r0.w = r1.y / r0.w; r1.y = -r6.x * r6.x + 1; r2.y = abs(r2.x) * r1.y + r1.x; r1.x = r1.w * r1.y + r1.x; r1.x = abs(r2.x) * r1.x; r1.y = 1 + -abs(r2.x); r1.x = r1.w * r2.y + r1.x; r1.x = 9.99999975e-006 + r1.x; r1.x = 0.5 / r1.x; r0.w = r1.x * r0.w; r0.w = 3.14159274 * r0.w; r0.w = max(9.99999975e-005, r0.w); r0.w = sqrt(r0.w); r0.w = r0.w * r1.w; r1.x = dot(r3.xyz, r3.xyz); r1.x = cmp(r1.x != 0.000000); r1.x = r1.x ? 1.000000 : 0; r0.w = r1.x * r0.w; r2.xyz = cb0[8].xyz * r0.yyy; r2.xyz = cb0[7].xyz * r0.xxx + r2.xyz; r0.xyz = cb0[9].xyz * r0.zzz + r2.xyz; r0.xyz = cb0[10].xyz + r0.xyz; r2.xyzw = t2.SampleBias(s2_s, r0.xyz, -8).xyzw; r0.x = r4.x * r2.w; r0.xyz = cb0[5].xyz * r0.xxx; r2.xyz = r0.www * r0.xyz; r0.w = 1 + -r1.z; r1.x = r1.z * r1.z; r1.x = dot(r1.xx, r6.xx); r1.x = -0.5 + r1.x; r1.z = r0.w * r0.w; r1.z = r1.z * r1.z; r0.w = r1.z * r0.w; r3.xyz = r6.yzw * r0.www + r3.xyz; r2.xyz = r3.xyz * r2.xyz; r0.w = r1.y * r1.y; r0.w = r0.w * r0.w; r0.w = r0.w * r1.y; r0.w = r1.x * r0.w + 1; r1.y = 1 + -r1.w; r1.z = r1.y * r1.y; r1.z = r1.z * r1.z; r1.y = r1.z * r1.y; r1.x = r1.x * r1.y + 1; r0.w = r1.x * r0.w; r0.w = r0.w * r1.w; r0.xyz = r0.xyz * r0.www; r0.xyz = r5.xyz * r0.xyz + r2.xyz; r0.w = 1; o0.xyzw = exp2(-r0.xyzw); return; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float // TEXCOORD 0 xyzw 1 NONE float xy w // TEXCOORD 1 xyz 2 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_Target 0 xyzw 0 TARGET float xyzw // ps_4_0 dcl_constantbuffer cb0[11], immediateIndexed dcl_constantbuffer cb1[8], immediateIndexed dcl_constantbuffer cb2[22], immediateIndexed dcl_sampler s0, mode_default dcl_sampler s1, mode_default dcl_sampler s2, mode_default dcl_sampler s3, mode_default dcl_sampler s4, mode_default dcl_sampler s5, mode_default dcl_resource_texture2d (float,float,float,float) t0 dcl_resource_texture2d (float,float,float,float) t1 dcl_resource_texturecube (float,float,float,float) t2 dcl_resource_texture2d (float,float,float,float) t3 dcl_resource_texture2d (float,float,float,float) t4 dcl_resource_texture2d (float,float,float,float) t5 dcl_input_ps linear v1.xyw dcl_input_ps linear v2.xyz dcl_output o0.xyzw dcl_temps 7 div r0.x, cb1[5].z, v2.z mul r0.xyz, r0.xxxx, v2.xyzx div r1.xy, v1.xyxx, v1.wwww sample r2.xyzw, r1.xyxx, t0.xyzw, s0 mad r0.w, cb1[7].x, r2.x, cb1[7].y div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w mul r0.xyz, r0.wwww, r0.xyzx mul r2.xyz, r0.yyyy, cb2[19].xyzx mad r0.xyw, cb2[18].xyxz, r0.xxxx, r2.xyxz mad r0.xyz, cb2[20].xyzx, r0.zzzz, r0.xywx add r0.xyz, r0.xyzx, cb2[21].xyzx add r2.xyz, r0.xyzx, -cb1[4].xyzx dp3 r0.w, r2.xyzx, r2.xyzx rsq r0.w, r0.w mul r2.xyz, r0.wwww, r2.xyzx add r3.xyz, r0.xyzx, -cb0[4].xyzx dp3 r0.w, r3.xyzx, r3.xyzx rsq r1.z, r0.w mul r0.w, r0.w, cb0[4].w sample r4.xyzw, r0.wwww, t1.xyzw, s1 mad r4.yzw, -r3.xxyz, r1.zzzz, -r2.xxyz mul r3.xyz, r1.zzzz, r3.xyzx dp3 r0.w, r4.yzwy, r4.yzwy max r0.w, r0.w, l(0.001000) rsq r0.w, r0.w mul r4.yzw, r0.wwww, r4.yyzw sample r5.xyzw, r1.xyxx, t5.xyzw, s5 mad r5.xyz, r5.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) dp3 r0.w, r5.xyzx, r5.xyzx rsq r0.w, r0.w mul r5.xyz, r0.wwww, r5.xyzx dp3_sat r0.w, r5.xyzx, r4.yzwy dp3_sat r1.z, -r3.xyzx, r4.yzwy dp3_sat r1.w, r5.xyzx, -r3.xyzx dp3 r2.x, r5.xyzx, -r2.xyzx sample r3.xyzw, r1.xyxx, t4.xyzw, s4 sample r5.xyzw, r1.xyxx, t3.xyzw, s3 add r6.xyzw, -r3.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000) mul r1.x, r6.x, r6.x mul r1.y, r1.x, r1.x mad r2.y, r0.w, r1.y, -r0.w mad r0.w, r2.y, r0.w, l(1.000000) mad r0.w, r0.w, r0.w, l(1.000000012E-007) mul r1.y, r1.y, l(0.318309873) div r0.w, r1.y, r0.w mad r1.y, -r6.x, r6.x, l(1.000000) mad r2.y, |r2.x|, r1.y, r1.x mad r1.x, r1.w, r1.y, r1.x mul r1.x, r1.x, |r2.x| add r1.y, -|r2.x|, l(1.000000) mad r1.x, r1.w, r2.y, r1.x add r1.x, r1.x, l(0.000010) div r1.x, l(0.500000), r1.x mul r0.w, r0.w, r1.x mul r0.w, r0.w, l(3.14159274) max r0.w, r0.w, l(0.000100) sqrt r0.w, r0.w mul r0.w, r1.w, r0.w dp3 r1.x, r3.xyzx, r3.xyzx ne r1.x, r1.x, l(0.000000) and r1.x, r1.x, l(0x3f800000) mul r0.w, r0.w, r1.x mul r2.xyz, r0.yyyy, cb0[8].xyzx mad r2.xyz, cb0[7].xyzx, r0.xxxx, r2.xyzx mad r0.xyz, cb0[9].xyzx, r0.zzzz, r2.xyzx add r0.xyz, r0.xyzx, cb0[10].xyzx sample_b r2.xyzw, r0.xyzx, t2.xyzw, s2, l(-8.000000) mul r0.x, r2.w, r4.x mul r0.xyz, r0.xxxx, cb0[5].xyzx mul r2.xyz, r0.xyzx, r0.wwww add r0.w, -r1.z, l(1.000000) mul r1.x, r1.z, r1.z dp2 r1.x, r1.xxxx, r6.xxxx add r1.x, r1.x, l(-0.500000) mul r1.z, r0.w, r0.w mul r1.z, r1.z, r1.z mul r0.w, r0.w, r1.z mad r3.xyz, r6.yzwy, r0.wwww, r3.xyzx mul r2.xyz, r2.xyzx, r3.xyzx mul r0.w, r1.y, r1.y mul r0.w, r0.w, r0.w mul r0.w, r1.y, r0.w mad r0.w, r1.x, r0.w, l(1.000000) add r1.y, -r1.w, l(1.000000) mul r1.z, r1.y, r1.y mul r1.z, r1.z, r1.z mul r1.y, r1.y, r1.z mad r1.x, r1.x, r1.y, l(1.000000) mul r0.w, r0.w, r1.x mul r0.w, r1.w, r0.w mul r0.xyz, r0.wwww, r0.xyzx mad r0.xyz, r5.xyzx, r0.xyzx, r2.xyzx mov r0.w, l(1.000000) exp o0.xyzw, -r0.xyzw ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/[/code] d3dx.ini [code][ShaderOverridePhysical50] Hash = 4c9936f7f1d28f6e vs-cb13 = Resource_UnityPerCameraRare [ShaderOverride_e3fd8a725676603e] hash = e3fd8a725676603e Resource_CameraDepthTexture = ps-t0 Resource_UnityPerCamera = ps-cb1[/code]
@masterotaku here's my homework XD. cb3 it's new in VS I don't know what to do with it X(. I've made a new version of the shaders comparing with the old ones.

VS: 4c9936f7f1d28f6e-vs_replace.txt
// lights
// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017
cbuffer cb3 : register(b3)
{
float4 cb3[21];
}

cbuffer cb2 : register(b2)
{
//float4 cb2[4];
row_major float4x4 glstate_matrix_mvp;
row_major float4x4 glstate_matrix_modelview0;
row_major float4x4 glstate_matrix_invtrans_modelview0;
#define UNITY_MATRIX_MVP glstate_matrix_mvp
#define UNITY_MATRIX_MV glstate_matrix_modelview0
#define UNITY_MATRIX_IT_MV glstate_matrix_invtrans_modelview0

row_major uniform float4x4 _Object2World;
row_major uniform float4x4 _World2Object;
uniform float4 unity_LODFade; // x is the fade value ranging within [0,1]. y is x quantized into 16 levels
}

cbuffer cb1 : register(b1)
{
float4 cb1[6];
}

cbuffer cb0 : register(b0)
{
float4 cb0[3];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : POSITION0,
float3 v1 : NORMAL0,
out float4 o0 : SV_POSITION0,
out float4 o1 : TEXCOORD0,
out float3 o2 : TEXCOORD1)
out float fov : TEXCOORD2) // New output to pass FOV to pixel shaders
{
float4 r0,r1,r2;
uint4 bitmask, uiDest;
float4 fDest;

float4 stereo = StereoParams.Load(0);
float separation = stereo.x; float convergence = stereo.y;

r0.xyzw = UNITY_MATRIX_MVP[1].xyzw * v0.yyyy; //cb2 por UNITY_MATRIX_MVP
r0.xyzw = UNITY_MATRIX_MVP[0].xyzw * v0.xxxx + r0.xyzw; //cb2 por UNITY_MATRIX_MVP
r0.xyzw = UNITY_MATRIX_MVP[2].xyzw * v0.zzzz + r0.xyzw; //cb2 por UNITY_MATRIX_MVP
r0.xyzw = UNITY_MATRIX_MVP[3].xyzw + r0.xyzw; //cb2 por UNITY_MATRIX_MVP
r1.xyzw = cb3[18].xyzw * r0.yyyy; //NEW
r1.xyzw = cb3[17].xyzw * r0.xxxx + r1.xyzw;//NEW
r1.xyzw = cb3[19].xyzw * r0.zzzz + r1.xyzw;//NEW
r1.xyzw = cb3[20].xyzw * r0.wwww + r1.xyzw;//NEW
o0.xyzw = r1.xyzw;

bool full_screen = (r0.w == 1);
float depth = r0.w;

if (!full_screen) {
r0.x += separation * (depth - convergence);

r1.y = cb1[5].x * r1.y;
r2.xzw = float3(0.5,0.5,0.5) * r1.xwy;
o1.zw = r1.zw;
o1.xy = r2.xw + r2.zz;
r1.xyz = cb3[10].xyz * r0.yyy; //UNITY_MATRIX_MV?cb2 in old shader
r1.xyz = cb3[9].xyz * r0.xxx + r1.xyz; //UNITY_MATRIX_MV?cb2 in old shader
r0.xyz = cb3[11].xyz * r0.zzz + r1.xyz;//UNITY_MATRIX_MV?cb2 in old shader
r0.xyz = cb3[12].xyz * r0.www + r0.xyz;//UNITY_MATRIX_MV?cb2 in old shader

if (!full_screen) {
// Looks like UNITY_MATRIX_IT_MV is 0, so we can't just do this:
// float4x4 projection = mul(UNITY_MATRIX_IT_MV, UNITY_MATRIX_MVP);
// fov = 1 / projection[0].x;

// Instead, we have to calculate this the long way:

// I already have an optimised version of this calculation in assembler for
// Unity 4 (the committed version is for column-major order, but the optimised
// row-major version was only slightly longer). I'm guessing the HLSL
// determinant() function won't be optimised because it can't make assumptions
// about the matrix (and that is a *large* amount of multiplications that could
// be eliminated), so we can probably do better, but for now this is clearer:
float det = 1 / determinant(UNITY_MATRIX_MV);

float3 mvi;
mvi.x = ((UNITY_MATRIX_MV._m11 * UNITY_MATRIX_MV._m22) - (UNITY_MATRIX_MV._m21 * UNITY_MATRIX_MV._m12)) * det;
mvi.y = ((UNITY_MATRIX_MV._m21 * UNITY_MATRIX_MV._m02) - (UNITY_MATRIX_MV._m01 * UNITY_MATRIX_MV._m22)) * det;
mvi.z = ((UNITY_MATRIX_MV._m01 * UNITY_MATRIX_MV._m12) - (UNITY_MATRIX_MV._m11 * UNITY_MATRIX_MV._m02)) * det;

fov = 1 / dot(mvi, UNITY_MATRIX_MVP._m00_m10_m20);

r0.x += separation * (depth - convergence) * fov;
} else {
// Can't determine the FOV from the values passed to this shader, so
// use the FOV copied from directional lighting shader with 3DMigoto.
// We could probably get away with using only this and scrapping the
// above code for games that always have directional lighting enabled.

fov = unity_CameraInvProjection[0].x;
}

r1.xyz = float3(-1,-1,1) * r0.xyz;
r0.xyz = -r0.xyz * float3(-1,-1,1) + v1.xyz;
o2.xyz = cb0[2].xxx * r0.xyz + r1.xyz;
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sun Jun 18 23:18:31 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyz
// NORMAL 0 xyz 1 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyz 2 NONE float xyz
//
vs_4_0
dcl_constantbuffer cb0[3], immediateIndexed
dcl_constantbuffer cb1[6], immediateIndexed
dcl_constantbuffer cb2[4], immediateIndexed
dcl_constantbuffer cb3[21], immediateIndexed
dcl_input v0.xyz
dcl_input v1.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_temps 3
mul r0.xyzw, v0.yyyy, cb2[1].xyzw
mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw
add r0.xyzw, r0.xyzw, cb2[3].xyzw
mul r1.xyzw, r0.yyyy, cb3[18].xyzw
mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw
mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw
mad r1.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw
mov o0.xyzw, r1.xyzw
mul r1.y, r1.y, cb1[5].x
mul r2.xzw, r1.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000)
mov o1.zw, r1.zzzw
add o1.xy, r2.zzzz, r2.xwxx
mul r1.xyz, r0.yyyy, cb3[10].xyzx
mad r1.xyz, cb3[9].xyzx, r0.xxxx, r1.xyzx
mad r0.xyz, cb3[11].xyzx, r0.zzzz, r1.xyzx
mad r0.xyz, cb3[12].xyzx, r0.wwww, r0.xyzx
mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000)
mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx
mad o2.xyz, cb0[2].xxxx, r0.xyzx, r1.xyzx
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


PS e3fd8a725676603e-ps_replace.txt
// lighs
// ---- Created with 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017
Texture2D<float4> t5 : register(t5);

Texture2D<float4> t4 : register(t4);

Texture2D<float4> t3 : register(t3);

TextureCube<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s5_s : register(s5);

SamplerState s4_s : register(s4);

SamplerState s3_s : register(s3);

SamplerState s2_s : register(s2);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb2 : register(b2)
{
float4 cb2[22];
}

cbuffer cb1 : register(b1)
{
//float4 cb1[8];
float4 cb1[9];
}

cbuffer cb0 : register(b0)
{
float4 cb0[11];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
float4 v0 : SV_POSITION0,
float4 v1 : TEXCOORD0,
float3 v2 : TEXCOORD1,
out float4 o0 : SV_Target0)
float fov : TEXCOORD3)
{
float4 r0,r1,r2,r3,r4,r5,r6;
uint4 bitmask, uiDest;
float4 fDest;

float4 stereo = StereoParams.Load(0);
float separation = stereo.x, convergence = stereo.y, eye = stereo.z;


// Unity reflection/specular fix inserted with DarkStarSword's hlsltool.py:
// hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt
matrix _CameraToWorld = matrix(cb4[0], cb4[1], cb4[2], cb4[3]);
float4 _WorldSpaceCameraPos = cb1[4];
_WorldSpaceCameraPos.xyz -= mul(float4(-separation * convergence * fov, 0, 0, 0), _CameraToWorld).xyz;

r0.x = cb1[5].z / v2.z;
r0.xyz = v2.xyz * r0.xxx;
r1.xy = v1.xy / v1.ww;
r2.xyzw = t0.Sample(s0_s, r1.xy).xyzw;
r0.w = cb1[7].x * r2.x + cb1[7].y;
r0.w = 1 / r0.w;
r0.xyz = r0.xyz * r0.www;

// Unity light/shadow fix (pixel shader stage) inserted with DarkStarSword's hlsltool.py:
// hlsltool.py -I ../.. --fix-unity-lighting-ps --only-autofixed --fxc /home/dss/fxc.exe adb8c8f1b20ba202-ps_replace.txt
r0.x -= separation * (r0.z - convergence) * fov;



r2.xyz = cb2[19].xyz * r0.yyy;
r0.xyw = cb2[18].xyz * r0.xxx + r2.xyz;
r0.xyz = cb2[20].xyz * r0.zzz + r0.xyw; // depth in r0.z?
r0.xyz = cb2[21].xyz + r0.xyz;
r2.xyz = -_WorldSpaceCameraPos[4].xyz + r0.xyz;//cb1 = _WorldSpaceCameraPos
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r3.xyz = -cb0[4].xyz + r0.xyz;
r0.w = dot(r3.xyz, r3.xyz);
r1.z = rsqrt(r0.w);
r0.w = cb0[4].w * r0.w;
r4.xyzw = t1.Sample(s1_s, r0.ww).xyzw;
r4.yzw = -r3.xyz * r1.zzz + -r2.xyz;
r3.xyz = r3.xyz * r1.zzz;
r0.w = dot(r4.yzw, r4.yzw);
r0.w = max(0.00100000005, r0.w);
r0.w = rsqrt(r0.w);
r4.yzw = r4.yzw * r0.www;
r5.xyzw = t5.Sample(s5_s, r1.xy).xyzw;
r5.xyz = r5.xyz * float3(2,2,2) + float3(-1,-1,-1);
r0.w = dot(r5.xyz, r5.xyz);
r0.w = rsqrt(r0.w);
r5.xyz = r5.xyz * r0.www;
r0.w = saturate(dot(r5.xyz, r4.yzw));
r1.z = saturate(dot(-r3.xyz, r4.yzw));
r1.w = saturate(dot(r5.xyz, -r3.xyz));
r2.x = dot(r5.xyz, -r2.xyz);
r3.xyzw = t4.Sample(s4_s, r1.xy).xyzw;
r5.xyzw = t3.Sample(s3_s, r1.xy).xyzw;
r6.xyzw = float4(1,1,1,1) + -r3.wxyz;
r1.x = r6.x * r6.x;
r1.y = r1.x * r1.x;
r2.y = r0.w * r1.y + -r0.w;
r0.w = r2.y * r0.w + 1;
r0.w = r0.w * r0.w + 1.00000001e-007;
r1.y = 0.318309873 * r1.y;
r0.w = r1.y / r0.w;
r1.y = -r6.x * r6.x + 1;
r2.y = abs(r2.x) * r1.y + r1.x;
r1.x = r1.w * r1.y + r1.x;
r1.x = abs(r2.x) * r1.x;
r1.y = 1 + -abs(r2.x);
r1.x = r1.w * r2.y + r1.x;
r1.x = 9.99999975e-006 + r1.x;
r1.x = 0.5 / r1.x;
r0.w = r1.x * r0.w;
r0.w = 3.14159274 * r0.w;
r0.w = max(9.99999975e-005, r0.w);
r0.w = sqrt(r0.w);
r0.w = r0.w * r1.w;
r1.x = dot(r3.xyz, r3.xyz);
r1.x = cmp(r1.x != 0.000000);
r1.x = r1.x ? 1.000000 : 0;
r0.w = r1.x * r0.w;
r2.xyz = cb0[8].xyz * r0.yyy;
r2.xyz = cb0[7].xyz * r0.xxx + r2.xyz;
r0.xyz = cb0[9].xyz * r0.zzz + r2.xyz;
r0.xyz = cb0[10].xyz + r0.xyz;
r2.xyzw = t2.SampleBias(s2_s, r0.xyz, -8).xyzw;
r0.x = r4.x * r2.w;
r0.xyz = cb0[5].xyz * r0.xxx;
r2.xyz = r0.www * r0.xyz;
r0.w = 1 + -r1.z;
r1.x = r1.z * r1.z;
r1.x = dot(r1.xx, r6.xx);
r1.x = -0.5 + r1.x;
r1.z = r0.w * r0.w;
r1.z = r1.z * r1.z;
r0.w = r1.z * r0.w;
r3.xyz = r6.yzw * r0.www + r3.xyz;
r2.xyz = r3.xyz * r2.xyz;
r0.w = r1.y * r1.y;
r0.w = r0.w * r0.w;
r0.w = r0.w * r1.y;
r0.w = r1.x * r0.w + 1;
r1.y = 1 + -r1.w;
r1.z = r1.y * r1.y;
r1.z = r1.z * r1.z;
r1.y = r1.z * r1.y;
r1.x = r1.x * r1.y + 1;
r0.w = r1.x * r0.w;
r0.w = r0.w * r1.w;
r0.xyz = r0.xyz * r0.www;
r0.xyz = r5.xyz * r0.xyz + r2.xyz;
r0.w = 1;
o0.xyzw = exp2(-r0.xyzw);
return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Sun Jun 18 23:19:23 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float
// TEXCOORD 0 xyzw 1 NONE float xy w
// TEXCOORD 1 xyz 2 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target 0 xyzw 0 TARGET float xyzw
//
ps_4_0
dcl_constantbuffer cb0[11], immediateIndexed
dcl_constantbuffer cb1[8], immediateIndexed
dcl_constantbuffer cb2[22], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
dcl_sampler s4, mode_default
dcl_sampler s5, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texturecube (float,float,float,float) t2
dcl_resource_texture2d (float,float,float,float) t3
dcl_resource_texture2d (float,float,float,float) t4
dcl_resource_texture2d (float,float,float,float) t5
dcl_input_ps linear v1.xyw
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 7
div r0.x, cb1[5].z, v2.z
mul r0.xyz, r0.xxxx, v2.xyzx
div r1.xy, v1.xyxx, v1.wwww
sample r2.xyzw, r1.xyxx, t0.xyzw, s0
mad r0.w, cb1[7].x, r2.x, cb1[7].y
div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mul r2.xyz, r0.yyyy, cb2[19].xyzx
mad r0.xyw, cb2[18].xyxz, r0.xxxx, r2.xyxz
mad r0.xyz, cb2[20].xyzx, r0.zzzz, r0.xywx
add r0.xyz, r0.xyzx, cb2[21].xyzx
add r2.xyz, r0.xyzx, -cb1[4].xyzx
dp3 r0.w, r2.xyzx, r2.xyzx
rsq r0.w, r0.w
mul r2.xyz, r0.wwww, r2.xyzx
add r3.xyz, r0.xyzx, -cb0[4].xyzx
dp3 r0.w, r3.xyzx, r3.xyzx
rsq r1.z, r0.w
mul r0.w, r0.w, cb0[4].w
sample r4.xyzw, r0.wwww, t1.xyzw, s1
mad r4.yzw, -r3.xxyz, r1.zzzz, -r2.xxyz
mul r3.xyz, r1.zzzz, r3.xyzx
dp3 r0.w, r4.yzwy, r4.yzwy
max r0.w, r0.w, l(0.001000)
rsq r0.w, r0.w
mul r4.yzw, r0.wwww, r4.yyzw
sample r5.xyzw, r1.xyxx, t5.xyzw, s5
mad r5.xyz, r5.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
dp3 r0.w, r5.xyzx, r5.xyzx
rsq r0.w, r0.w
mul r5.xyz, r0.wwww, r5.xyzx
dp3_sat r0.w, r5.xyzx, r4.yzwy
dp3_sat r1.z, -r3.xyzx, r4.yzwy
dp3_sat r1.w, r5.xyzx, -r3.xyzx
dp3 r2.x, r5.xyzx, -r2.xyzx
sample r3.xyzw, r1.xyxx, t4.xyzw, s4
sample r5.xyzw, r1.xyxx, t3.xyzw, s3
add r6.xyzw, -r3.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000)
mul r1.x, r6.x, r6.x
mul r1.y, r1.x, r1.x
mad r2.y, r0.w, r1.y, -r0.w
mad r0.w, r2.y, r0.w, l(1.000000)
mad r0.w, r0.w, r0.w, l(1.000000012E-007)
mul r1.y, r1.y, l(0.318309873)
div r0.w, r1.y, r0.w
mad r1.y, -r6.x, r6.x, l(1.000000)
mad r2.y, |r2.x|, r1.y, r1.x
mad r1.x, r1.w, r1.y, r1.x
mul r1.x, r1.x, |r2.x|
add r1.y, -|r2.x|, l(1.000000)
mad r1.x, r1.w, r2.y, r1.x
add r1.x, r1.x, l(0.000010)
div r1.x, l(0.500000), r1.x
mul r0.w, r0.w, r1.x
mul r0.w, r0.w, l(3.14159274)
max r0.w, r0.w, l(0.000100)
sqrt r0.w, r0.w
mul r0.w, r1.w, r0.w
dp3 r1.x, r3.xyzx, r3.xyzx
ne r1.x, r1.x, l(0.000000)
and r1.x, r1.x, l(0x3f800000)
mul r0.w, r0.w, r1.x
mul r2.xyz, r0.yyyy, cb0[8].xyzx
mad r2.xyz, cb0[7].xyzx, r0.xxxx, r2.xyzx
mad r0.xyz, cb0[9].xyzx, r0.zzzz, r2.xyzx
add r0.xyz, r0.xyzx, cb0[10].xyzx
sample_b r2.xyzw, r0.xyzx, t2.xyzw, s2, l(-8.000000)
mul r0.x, r2.w, r4.x
mul r0.xyz, r0.xxxx, cb0[5].xyzx
mul r2.xyz, r0.xyzx, r0.wwww
add r0.w, -r1.z, l(1.000000)
mul r1.x, r1.z, r1.z
dp2 r1.x, r1.xxxx, r6.xxxx
add r1.x, r1.x, l(-0.500000)
mul r1.z, r0.w, r0.w
mul r1.z, r1.z, r1.z
mul r0.w, r0.w, r1.z
mad r3.xyz, r6.yzwy, r0.wwww, r3.xyzx
mul r2.xyz, r2.xyzx, r3.xyzx
mul r0.w, r1.y, r1.y
mul r0.w, r0.w, r0.w
mul r0.w, r1.y, r0.w
mad r0.w, r1.x, r0.w, l(1.000000)
add r1.y, -r1.w, l(1.000000)
mul r1.z, r1.y, r1.y
mul r1.z, r1.z, r1.z
mul r1.y, r1.y, r1.z
mad r1.x, r1.x, r1.y, l(1.000000)
mul r0.w, r0.w, r1.x
mul r0.w, r1.w, r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mad r0.xyz, r5.xyzx, r0.xyzx, r2.xyzx
mov r0.w, l(1.000000)
exp o0.xyzw, -r0.xyzw
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


d3dx.ini

[ShaderOverridePhysical50]
Hash = 4c9936f7f1d28f6e
vs-cb13 = Resource_UnityPerCameraRare


[ShaderOverride_e3fd8a725676603e]
hash = e3fd8a725676603e
Resource_CameraDepthTexture = ps-t0
Resource_UnityPerCamera = ps-cb1

#24
Posted 06/19/2017 10:00 PM   
By the way these last shaders don't work X( [url]https://drive.google.com/open?id=0B7-C-G8Te2HbRm9CMHAyZENxd2s[/url]
By the way these last shaders don't work X(
https://drive.google.com/open?id=0B7-C-G8Te2HbRm9CMHAyZENxd2s

#25
Posted 06/19/2017 10:09 PM   
this is the VS fixed by asmtool: [code]// asmtool.py -I ../.. --auto-fix-vertex-halo --fix-unusual-halo-with-inconsistent-w-optimisation --fix-unity-reflection --fix-unity-frustum-world --only-autofixed 4c9936f7f1d28f6e-vs.txt // // Generated by Microsoft (R) D3D Shader Disassembler // // using 3Dmigoto v1.2.61 on Fri Jun 16 22:40:49 2017 // // // Input signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // POSITION 0 xyzw 0 NONE float xyz // NORMAL 0 xyz 1 NONE float xyz // // // Output signature: // // Name Index Mask Register SysValue Format Used // -------------------- ----- ------ -------- -------- ------- ------ // SV_POSITION 0 xyzw 0 POS float xyzw // TEXCOORD 0 xyzw 1 NONE float xyzw // TEXCOORD 1 xyz 2 NONE float xyz // vs_4_0 dcl_constantbuffer cb0[3], immediateIndexed dcl_constantbuffer cb1[6], immediateIndexed dcl_constantbuffer cb2[4], immediateIndexed dcl_constantbuffer cb3[21], immediateIndexed dcl_input v0.xyz dcl_input v1.xyz dcl_output_siv o0.xyzw, position dcl_output o1.xyzw dcl_output o2.xyz dcl_temps 4 // 3DMigoto StereoParams: dcl_resource_texture2d (float,float,float,float) t125 ld_indexable(texture2d)(float,float,float,float) r3.xyzw, l(0, 0, 0, 0), t125.xyzw mul r0.xyzw, v0.yyyy, cb2[1].xyzw mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw add r0.xyzw, r0.xyzw, cb2[3].xyzw mul r1.xyzw, r0.yyyy, cb3[18].xyzw mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw mad r1.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw mov o0.xyzw, r1.xyzw // Automatic vertex shader halo fix inserted with DarkStarSword's asmtool.py: // asmtool.py -I ../.. --auto-fix-vertex-halo --fix-unusual-halo-with-inconsistent-w-optimisation --fix-unity-reflection --fix-unity-frustum-world --only-autofixed 4c9936f7f1d28f6e-vs.txt ne r3.w, r1.w, l(1.0) if_nz r3.w add r3.w, r1.w, -r3.y mad r1.x, r3.w, r3.x, r1.x endif mul r1.y, r1.y, cb1[5].x mul r2.xzw, r1.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000) mov o1.zw, r1.zzzw add o1.xy, r2.zzzz, r2.xwxx mul r1.xyz, r0.yyyy, cb3[10].xyzx mad r1.xyz, cb3[9].xyzx, r0.xxxx, r1.xyzx mad r0.xyz, cb3[11].xyzx, r0.zzzz, r1.xyzx mad r0.xyz, cb3[12].xyzx, r0.wwww, r0.xyzx mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000) mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx mad o2.xyz, cb0[2].xxxx, r0.xyzx, r1.xyzx ret // Approximately 0 instruction slots used[/code]
this is the VS fixed by asmtool:
// asmtool.py -I ../.. --auto-fix-vertex-halo --fix-unusual-halo-with-inconsistent-w-optimisation --fix-unity-reflection --fix-unity-frustum-world --only-autofixed 4c9936f7f1d28f6e-vs.txt
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
// using 3Dmigoto v1.2.61 on Fri Jun 16 22:40:49 2017
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION 0 xyzw 0 NONE float xyz
// NORMAL 0 xyz 1 NONE float xyz
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION 0 xyzw 0 POS float xyzw
// TEXCOORD 0 xyzw 1 NONE float xyzw
// TEXCOORD 1 xyz 2 NONE float xyz
//
vs_4_0
dcl_constantbuffer cb0[3], immediateIndexed
dcl_constantbuffer cb1[6], immediateIndexed
dcl_constantbuffer cb2[4], immediateIndexed
dcl_constantbuffer cb3[21], immediateIndexed
dcl_input v0.xyz
dcl_input v1.xyz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyz
dcl_temps 4

// 3DMigoto StereoParams:
dcl_resource_texture2d (float,float,float,float) t125

ld_indexable(texture2d)(float,float,float,float) r3.xyzw, l(0, 0, 0, 0), t125.xyzw

mul r0.xyzw, v0.yyyy, cb2[1].xyzw
mad r0.xyzw, cb2[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb2[2].xyzw, v0.zzzz, r0.xyzw
add r0.xyzw, r0.xyzw, cb2[3].xyzw
mul r1.xyzw, r0.yyyy, cb3[18].xyzw
mad r1.xyzw, cb3[17].xyzw, r0.xxxx, r1.xyzw
mad r1.xyzw, cb3[19].xyzw, r0.zzzz, r1.xyzw
mad r1.xyzw, cb3[20].xyzw, r0.wwww, r1.xyzw
mov o0.xyzw, r1.xyzw

// Automatic vertex shader halo fix inserted with DarkStarSword's asmtool.py:
// asmtool.py -I ../.. --auto-fix-vertex-halo --fix-unusual-halo-with-inconsistent-w-optimisation --fix-unity-reflection --fix-unity-frustum-world --only-autofixed 4c9936f7f1d28f6e-vs.txt
ne r3.w, r1.w, l(1.0)
if_nz r3.w
add r3.w, r1.w, -r3.y
mad r1.x, r3.w, r3.x, r1.x
endif

mul r1.y, r1.y, cb1[5].x
mul r2.xzw, r1.xxwy, l(0.500000, 0.000000, 0.500000, 0.500000)
mov o1.zw, r1.zzzw
add o1.xy, r2.zzzz, r2.xwxx
mul r1.xyz, r0.yyyy, cb3[10].xyzx
mad r1.xyz, cb3[9].xyzx, r0.xxxx, r1.xyzx
mad r0.xyz, cb3[11].xyzx, r0.zzzz, r1.xyzx
mad r0.xyz, cb3[12].xyzx, r0.wwww, r0.xyzx
mul r1.xyz, r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000)
mad r0.xyz, -r0.xyzx, l(-1.000000, -1.000000, 1.000000, 0.000000), v1.xyzx
mad o2.xyz, cb0[2].xxxx, r0.xyzx, r1.xyzx
ret
// Approximately 0 instruction slots used

#26
Posted 06/19/2017 10:57 PM   
We need to fix this PS [code]ps_4_0 dcl_constantbuffer cb0[11], immediateIndexed dcl_constantbuffer cb1[8], immediateIndexed dcl_constantbuffer cb2[22], immediateIndexed dcl_sampler s0, mode_default dcl_sampler s1, mode_default dcl_sampler s2, mode_default dcl_sampler s3, mode_default dcl_sampler s4, mode_default dcl_sampler s5, mode_default dcl_resource_texture2d (float,float,float,float) t0 dcl_resource_texture2d (float,float,float,float) t1 dcl_resource_texturecube (float,float,float,float) t2 dcl_resource_texture2d (float,float,float,float) t3 dcl_resource_texture2d (float,float,float,float) t4 dcl_resource_texture2d (float,float,float,float) t5 dcl_input_ps linear v1.xyw dcl_input_ps linear v2.xyz dcl_output o0.xyzw dcl_temps 7 div r0.x, cb1[5].z, v2.z mul r0.xyz, r0.xxxx, v2.xyzx div r1.xy, v1.xyxx, v1.wwww sample r2.xyzw, r1.xyxx, t0.xyzw, s0 mad r0.w, cb1[7].x, r2.x, cb1[7].y div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w mul r0.xyz, r0.wwww, r0.xyzx mul r2.xyz, r0.yyyy, cb2[19].xyzx mad r0.xyw, cb2[18].xyxz, r0.xxxx, r2.xyxz mad r0.xyz, cb2[20].xyzx, r0.zzzz, r0.xywx add r0.xyz, r0.xyzx, cb2[21].xyzx add r2.xyz, r0.xyzx, -cb1[4].xyzx dp3 r0.w, r2.xyzx, r2.xyzx rsq r0.w, r0.w mul r2.xyz, r0.wwww, r2.xyzx add r3.xyz, r0.xyzx, -cb0[4].xyzx dp3 r0.w, r3.xyzx, r3.xyzx rsq r1.z, r0.w mul r0.w, r0.w, cb0[4].w sample r4.xyzw, r0.wwww, t1.xyzw, s1 mad r4.yzw, -r3.xxyz, r1.zzzz, -r2.xxyz mul r3.xyz, r1.zzzz, r3.xyzx dp3 r0.w, r4.yzwy, r4.yzwy max r0.w, r0.w, l(0.001000) rsq r0.w, r0.w mul r4.yzw, r0.wwww, r4.yyzw sample r5.xyzw, r1.xyxx, t5.xyzw, s5 mad r5.xyz, r5.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) dp3 r0.w, r5.xyzx, r5.xyzx rsq r0.w, r0.w mul r5.xyz, r0.wwww, r5.xyzx dp3_sat r0.w, r5.xyzx, r4.yzwy dp3_sat r1.z, -r3.xyzx, r4.yzwy dp3_sat r1.w, r5.xyzx, -r3.xyzx dp3 r2.x, r5.xyzx, -r2.xyzx sample r3.xyzw, r1.xyxx, t4.xyzw, s4 sample r5.xyzw, r1.xyxx, t3.xyzw, s3 add r6.xyzw, -r3.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000) mul r1.x, r6.x, r6.x mul r1.y, r1.x, r1.x mad r2.y, r0.w, r1.y, -r0.w mad r0.w, r2.y, r0.w, l(1.000000) mad r0.w, r0.w, r0.w, l(1.000000012E-007) mul r1.y, r1.y, l(0.318309873) div r0.w, r1.y, r0.w mad r1.y, -r6.x, r6.x, l(1.000000) mad r2.y, |r2.x|, r1.y, r1.x mad r1.x, r1.w, r1.y, r1.x mul r1.x, r1.x, |r2.x| add r1.y, -|r2.x|, l(1.000000) mad r1.x, r1.w, r2.y, r1.x add r1.x, r1.x, l(0.000010) div r1.x, l(0.500000), r1.x mul r0.w, r0.w, r1.x mul r0.w, r0.w, l(3.14159274) max r0.w, r0.w, l(0.000100) sqrt r0.w, r0.w mul r0.w, r1.w, r0.w dp3 r1.x, r3.xyzx, r3.xyzx ne r1.x, r1.x, l(0.000000) and r1.x, r1.x, l(0x3f800000) mul r0.w, r0.w, r1.x mul r2.xyz, r0.yyyy, cb0[8].xyzx mad r2.xyz, cb0[7].xyzx, r0.xxxx, r2.xyzx mad r0.xyz, cb0[9].xyzx, r0.zzzz, r2.xyzx add r0.xyz, r0.xyzx, cb0[10].xyzx sample_b r2.xyzw, r0.xyzx, t2.xyzw, s2, l(-8.000000) mul r0.x, r2.w, r4.x mul r0.xyz, r0.xxxx, cb0[5].xyzx mul r2.xyz, r0.xyzx, r0.wwww add r0.w, -r1.z, l(1.000000) mul r1.x, r1.z, r1.z dp2 r1.x, r1.xxxx, r6.xxxx add r1.x, r1.x, l(-0.500000) mul r1.z, r0.w, r0.w mul r1.z, r1.z, r1.z mul r0.w, r0.w, r1.z mad r3.xyz, r6.yzwy, r0.wwww, r3.xyzx mul r2.xyz, r2.xyzx, r3.xyzx mul r0.w, r1.y, r1.y mul r0.w, r0.w, r0.w mul r0.w, r1.y, r0.w mad r0.w, r1.x, r0.w, l(1.000000) add r1.y, -r1.w, l(1.000000) mul r1.z, r1.y, r1.y mul r1.z, r1.z, r1.z mul r1.y, r1.y, r1.z mad r1.x, r1.x, r1.y, l(1.000000) mul r0.w, r0.w, r1.x mul r0.w, r1.w, r0.w mul r0.xyz, r0.wwww, r0.xyzx mad r0.xyz, r5.xyzx, r0.xyzx, r2.xyzx mov r0.w, l(1.000000) exp o0.xyzw, -r0.xyzw ret // Approximately 0 instruction slots used ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/[/code]
We need to fix this PS
ps_4_0
dcl_constantbuffer cb0[11], immediateIndexed
dcl_constantbuffer cb1[8], immediateIndexed
dcl_constantbuffer cb2[22], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
dcl_sampler s4, mode_default
dcl_sampler s5, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texturecube (float,float,float,float) t2
dcl_resource_texture2d (float,float,float,float) t3
dcl_resource_texture2d (float,float,float,float) t4
dcl_resource_texture2d (float,float,float,float) t5
dcl_input_ps linear v1.xyw
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 7
div r0.x, cb1[5].z, v2.z
mul r0.xyz, r0.xxxx, v2.xyzx
div r1.xy, v1.xyxx, v1.wwww
sample r2.xyzw, r1.xyxx, t0.xyzw, s0
mad r0.w, cb1[7].x, r2.x, cb1[7].y
div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mul r2.xyz, r0.yyyy, cb2[19].xyzx
mad r0.xyw, cb2[18].xyxz, r0.xxxx, r2.xyxz
mad r0.xyz, cb2[20].xyzx, r0.zzzz, r0.xywx
add r0.xyz, r0.xyzx, cb2[21].xyzx
add r2.xyz, r0.xyzx, -cb1[4].xyzx
dp3 r0.w, r2.xyzx, r2.xyzx
rsq r0.w, r0.w
mul r2.xyz, r0.wwww, r2.xyzx
add r3.xyz, r0.xyzx, -cb0[4].xyzx
dp3 r0.w, r3.xyzx, r3.xyzx
rsq r1.z, r0.w
mul r0.w, r0.w, cb0[4].w
sample r4.xyzw, r0.wwww, t1.xyzw, s1
mad r4.yzw, -r3.xxyz, r1.zzzz, -r2.xxyz
mul r3.xyz, r1.zzzz, r3.xyzx
dp3 r0.w, r4.yzwy, r4.yzwy
max r0.w, r0.w, l(0.001000)
rsq r0.w, r0.w
mul r4.yzw, r0.wwww, r4.yyzw
sample r5.xyzw, r1.xyxx, t5.xyzw, s5
mad r5.xyz, r5.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
dp3 r0.w, r5.xyzx, r5.xyzx
rsq r0.w, r0.w
mul r5.xyz, r0.wwww, r5.xyzx
dp3_sat r0.w, r5.xyzx, r4.yzwy
dp3_sat r1.z, -r3.xyzx, r4.yzwy
dp3_sat r1.w, r5.xyzx, -r3.xyzx
dp3 r2.x, r5.xyzx, -r2.xyzx
sample r3.xyzw, r1.xyxx, t4.xyzw, s4
sample r5.xyzw, r1.xyxx, t3.xyzw, s3
add r6.xyzw, -r3.wxyz, l(1.000000, 1.000000, 1.000000, 1.000000)
mul r1.x, r6.x, r6.x
mul r1.y, r1.x, r1.x
mad r2.y, r0.w, r1.y, -r0.w
mad r0.w, r2.y, r0.w, l(1.000000)
mad r0.w, r0.w, r0.w, l(1.000000012E-007)
mul r1.y, r1.y, l(0.318309873)
div r0.w, r1.y, r0.w
mad r1.y, -r6.x, r6.x, l(1.000000)
mad r2.y, |r2.x|, r1.y, r1.x
mad r1.x, r1.w, r1.y, r1.x
mul r1.x, r1.x, |r2.x|
add r1.y, -|r2.x|, l(1.000000)
mad r1.x, r1.w, r2.y, r1.x
add r1.x, r1.x, l(0.000010)
div r1.x, l(0.500000), r1.x
mul r0.w, r0.w, r1.x
mul r0.w, r0.w, l(3.14159274)
max r0.w, r0.w, l(0.000100)
sqrt r0.w, r0.w
mul r0.w, r1.w, r0.w
dp3 r1.x, r3.xyzx, r3.xyzx
ne r1.x, r1.x, l(0.000000)
and r1.x, r1.x, l(0x3f800000)
mul r0.w, r0.w, r1.x
mul r2.xyz, r0.yyyy, cb0[8].xyzx
mad r2.xyz, cb0[7].xyzx, r0.xxxx, r2.xyzx
mad r0.xyz, cb0[9].xyzx, r0.zzzz, r2.xyzx
add r0.xyz, r0.xyzx, cb0[10].xyzx
sample_b r2.xyzw, r0.xyzx, t2.xyzw, s2, l(-8.000000)
mul r0.x, r2.w, r4.x
mul r0.xyz, r0.xxxx, cb0[5].xyzx
mul r2.xyz, r0.xyzx, r0.wwww
add r0.w, -r1.z, l(1.000000)
mul r1.x, r1.z, r1.z
dp2 r1.x, r1.xxxx, r6.xxxx
add r1.x, r1.x, l(-0.500000)
mul r1.z, r0.w, r0.w
mul r1.z, r1.z, r1.z
mul r0.w, r0.w, r1.z
mad r3.xyz, r6.yzwy, r0.wwww, r3.xyzx
mul r2.xyz, r2.xyzx, r3.xyzx
mul r0.w, r1.y, r1.y
mul r0.w, r0.w, r0.w
mul r0.w, r1.y, r0.w
mad r0.w, r1.x, r0.w, l(1.000000)
add r1.y, -r1.w, l(1.000000)
mul r1.z, r1.y, r1.y
mul r1.z, r1.z, r1.z
mul r1.y, r1.y, r1.z
mad r1.x, r1.x, r1.y, l(1.000000)
mul r0.w, r0.w, r1.x
mul r0.w, r1.w, r0.w
mul r0.xyz, r0.wwww, r0.xyzx
mad r0.xyz, r5.xyzx, r0.xyzx, r2.xyzx
mov r0.w, l(1.000000)
exp o0.xyzw, -r0.xyzw
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#27
Posted 06/19/2017 11:00 PM   
Suddenly it does not work anymore. Game starts with BLACK SCREEN, no matter what. It's 3D related because it works without the fix.
Suddenly it does not work anymore. Game starts with BLACK SCREEN, no matter what. It's 3D related because it works without the fix.

#28
Posted 06/28/2017 06:09 PM   
[quote="Punisher!|ITA"]Suddenly it does not work anymore. Game starts with BLACK SCREEN, no matter what. It's 3D related because it works without the fix.[/quote] Use the uninstall.bat and download the last version of the fix, [url]https://drive.google.com/open?id=0B7-C-G8Te2HbMjBvNllFZnFmeUU[/url] The game is working for me. You can try this too: In your Steam library, right click on "The Long Dark" and select "Properties" Click "Set Launch Options" In the box, type "-window-mode exclusive" without the "" And in the folder of the game edit the file d3dx.ini: find full_screen=1 and replace it for ;full_screen=0
Punisher!|ITA said:Suddenly it does not work anymore. Game starts with BLACK SCREEN, no matter what. It's 3D related because it works without the fix.

Use the uninstall.bat and download the last version of the fix, https://drive.google.com/open?id=0B7-C-G8Te2HbMjBvNllFZnFmeUU
The game is working for me.

You can try this too:
In your Steam library, right click on "The Long Dark" and select "Properties"
Click "Set Launch Options"
In the box, type "-window-mode exclusive" without the ""

And in the folder of the game edit the file d3dx.ini: find full_screen=1 and replace it for ;full_screen=0

#29
Posted 06/28/2017 09:19 PM   
[quote="cicicleta"][quote="Punisher!|ITA"]Suddenly it does not work anymore. Game starts with BLACK SCREEN, no matter what. It's 3D related because it works without the fix.[/quote] Use the uninstall.bat and download the last version of the fix, [url]https://drive.google.com/open?id=0B7-C-G8Te2HbMjBvNllFZnFmeUU[/url] The game is working for me. You can try this too: In your Steam library, right click on "The Long Dark" and select "Properties" Click "Set Launch Options" In the box, type "-window-mode exclusive" without the "" And in the folder of the game edit the file d3dx.ini: find full_screen=1 and replace it for ;full_screen=0[/quote] It works perfectely now, thanks a lot!
cicicleta said:
Punisher!|ITA said:Suddenly it does not work anymore. Game starts with BLACK SCREEN, no matter what. It's 3D related because it works without the fix.

Use the uninstall.bat and download the last version of the fix, https://drive.google.com/open?id=0B7-C-G8Te2HbMjBvNllFZnFmeUU
The game is working for me.

You can try this too:
In your Steam library, right click on "The Long Dark" and select "Properties"
Click "Set Launch Options"
In the box, type "-window-mode exclusive" without the ""

And in the folder of the game edit the file d3dx.ini: find full_screen=1 and replace it for ;full_screen=0


It works perfectely now, thanks a lot!

#30
Posted 06/29/2017 07:04 AM   
  2 / 3    
Scroll To Top