diff --git a/DirectX11/DirectX11.vcxproj b/DirectX11/DirectX11.vcxproj index af10f0ea7..0f4bbe226 100644 --- a/DirectX11/DirectX11.vcxproj +++ b/DirectX11/DirectX11.vcxproj @@ -1184,7 +1184,7 @@ REM Use 7zip command tool to create a full release that can be unzipped into gam REM On game specific builds, this also includes the ShaderFixes folder. REM And, the d3dx.ini from game specific folder -7zip\7za a $(ConfigurationName)\3Dmigoto-$(ConfigurationName)-Ver.zip .\$(ConfigurationName)\d3dx.ini .\$(ConfigurationName)\ShaderFixes\ $(TargetDir)*.dll .\$(ConfigurationName)\uninstall.bat +7zip\7za a $(ConfigurationName)\3Dmigoto-$(ConfigurationName)-Ver.zip $(TargetDir)*.dll .\$(ConfigurationName)\d3dx.ini .\$(ConfigurationName)\ShaderFixes\ .\$(ConfigurationName)\uninstall.bat .\$(ConfigurationName)\User.cfg diff --git a/DragonAge/ShaderFixes/002d3a9aead314ab-ps_replace.txt b/DragonAge/ShaderFixes/002d3a9aead314ab-ps_replace.txt new file mode 100644 index 000000000..f26c9e800 --- /dev/null +++ b/DragonAge/ShaderFixes/002d3a9aead314ab-ps_replace.txt @@ -0,0 +1,583 @@ +//Local lights +cbuffer _Globals : register(b0) +{ + float2 g_invScreenSize : packoffset(c0); + float4x4 g_invViewProjMatrix : packoffset(c1); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c5); + float g_subRolloff : packoffset(c6); + float4 g_exposureMultipliers : packoffset(c7); + uint4 g_shadowmapDimensions : packoffset(c8); +} + +//Added by Mike +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +Texture2D g_depthTexture : register(t0); +Texture2D g_gbufferTexture0 : register(t1); +Texture2D g_gbufferTexture1 : register(t2); +Texture2D g_gbufferTexture2 : register(t3); +Texture2D g_gbufferTexture4 : register(t4); + +Texture2D StereoParams : register(t125); +Texture1D IniParams : register(t120); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + float4 v5 : TEXCOORD4, + float4 v6 : TEXCOORD5, + float4 v7 : TEXCOORD6, + float4 v8 : TEXCOORD7, + float4 v9 : TEXCOORD8, + float4 v10 : TEXCOORD9, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = g_invScreenSize.xy * v0.xy; + r1.xy = (int2)v0.xy; + r1.zw = float2(0.000000e+000,0.000000e+000); + r2.xyzw = g_gbufferTexture0.Load(r1.xyw).xyzw; + r3.xyzw = g_gbufferTexture1.Load(r1.xyw).xyzw; + r0.z = g_gbufferTexture2.Load(r1.xyw).w; + r4.z = g_depthTexture.Load(r1.xyw).x; + r0.z = 2.550000000e+002 * r0.z; + r0.z = round(r0.z); + r0.z = (int)r0.z; + r5.xy = r0.zz == float2(4.000000e+000,2.000000e+000); + if (r5.x != 0) { + r1.xyzw = g_gbufferTexture4.Load(r1.xyz).xyzw; + r6.xyzw = r2.xyzw * float4(4.000000e+000,4.000000e+000,4.000000e+000,4.000000e+000) + float4(-2.000000e+000,-2.000000e+000,-2.000000e+000,-2.000000e+000); + r0.w = dot(r6.xy, r6.xy); + r7.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r7.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r7.xy = r6.xy * r0.ww; + r0.w = dot(r7.xyw, r7.xyw); + r0.w = rsqrt(r0.w); + r7.xyz = r7.xyw * r0.www; + r0.w = dot(r6.zw, r6.zw); + r8.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r8.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r8.xy = r6.zw * r0.ww; + r0.w = dot(r8.xyw, r8.xyw); + r0.w = rsqrt(r0.w); + r6.xyz = r8.xyw * r0.www; + r0.w = dot(r1.xy, float2(6.528000e+004,2.550000e+002)); + r0.w = round(r0.w); + r1.x = 3.125000000e-002 * r0.w; + r1.x = trunc(r1.x); + r8.z = r0.w * 3.125000000e-002 + -r1.x; + r0.w = 1.562500000e-002 * r1.x; + r8.x = trunc(r0.w); + r8.y = r1.x * 1.562500000e-002 + -r8.x; + r8.xyz = float3(3.225806e-002,1.015873e+000,1.032258e+000) * r8.xyz; + r1.xy = float2(2.550000e+002,2.550000e+002) * r1.zw; + r1.xy = round(r1.xy); + r1.zw = float2(6.250000e-002,6.250000e-002) * r1.xy; + r9.xy = trunc(r1.zw); + r9.zw = r1.xy * float2(6.250000e-002,6.250000e-002) + -r9.xy; + r1.xw = float2(1.066667e+000,6.666667e-002) * r9.wy; + r1.yz = r9.xz * float2(8.000001e-001,1.280000e+001) + float2(1.000000e+000,1.000000e+000); + r1.yz = exp2(r1.yz); + r1.yz = r1.yz * float2(1.443000e+000,1.443000e+000) + float2(1.443000e+000,1.443000e+000); + r9.xyzw = r3.xyzw * r3.xyzw; + r10.xyz = r9.www; + } else { + r2.xyz = r2.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r2.xyz, r2.xyz); + r0.w = rsqrt(r0.w); + r7.xyz = r2.xyz * r0.www; + r3.xyzw = r3.xyzw * r3.xyzw; + r0.w = r0.z == 5; + if (r0.w != 0) { + r9.xyz = r3.xyz * r3.www; + r10.xyz = r3.xyz; + } else { + r0.z = r0.z == 1; + if (r0.z != 0) { + r10.xyz = r3.www * r3.xyz; + } else { + r10.xyz = r3.www; + } + r9.xyz = r3.xyz; + } + r0.z = 0.000000000e+000 < r10.x; + r0.z = r0.z ? r2.w : 0; + r0.z = r0.z * 1.200000000e+001 + 1.000000000e+000; + r0.z = exp2(r0.z); + r1.y = r0.z * 1.442999959e+000 + 1.442999959e+000; + r6.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r1.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r8.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + } + r0.xy = r0.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r4.xy = float2(1.000000e+000,-1.000000e+000) * r0.xy; + r4.w = 1.000000000e+000; + +// float4 stereo = StereoParams.Load(0); +// float depth, C; +// depth = projMatrix._m22 + projMatrix._m32/r4.z; +// C = projMatrix._m22 + projMatrix._m32/stereo.y; +// r4.x -= stereo.x * (-depth - C)*0.38; +// r4.x += stereo.x * (depth - stereo.y)*projMatrix._m00; +// r4.x += stereo.x * (r4.z - stereo.y)*2; + + r0.x = dot(r4.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r0.y = dot(r4.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r0.z = dot(r4.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.w = dot(r4.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + + + + + r0.w = 1.000000e+000 / r0.w; + r2.xyz = r0.xyz * r0.www; + +float4 r25, r23; +r23.xyzw = r2.xyzw; +r23.w=1; + +r25.x = dot(r23.xyzw, b1.xyzw); +r25.y = dot(r23.xyzw, b2.xyzw); +r25.z = dot(r23.xyzw, b3.xyzw); +r25.w = dot(r23.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r23.x = dot(r25.xyzw, a1.xyzw); +r23.y = dot(r25.xyzw, a2.xyzw); +r23.z = dot(r25.xyzw, a3.xyzw); +r23.w = dot(r25.xyzw, a4.xyzw); + + r2.w = dot(r23.xyz, r23.xyz); + r2.w = rsqrt(r2.w); + r2.xyz = r23.xyz * r2.www; + + r0.xyz = -r23.xyz + v1.xyz; + // r0.xyz = -r0.xyz * r0.www + v1.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r2.w = rsqrt(r0.w); + r3.xyz = r2.www * r0.xyz; + r0.w = v3.w + r0.w; + r0.w = 1.000000e+000 / r0.w; + r0.w = v1.w + r0.w; + r0.w = max(r0.w, 0.000000000e+000); + r3.w = dot(v6.xyz, r3.xyz); + r3.w = saturate(r3.w * v5.x + v5.y); + r3.w = 1.000000000e+000 + -r3.w; + r0.w = r3.w * r0.w; + r3.x = dot(r7.xyz, r3.xyz); + r3.y = saturate(r3.x); + r4.xyz = v2.xyz * r3.yyy; + r4.xyz = r4.xyz * r0.www; + if (r5.x != 0) { + r1.x = saturate(r1.x); + r3.z = r1.x * 5.000000000e-001 + r3.x; + r1.x = r1.x * 5.000000000e-001 + 1.000000000e+000; + r1.x = saturate(r3.z / r1.x); + r11.xyz = v2.xyz * r1.xxx; + r11.xyz = r11.xyz * r0.www; + r12.xyz = -r7.xyz * r1.www + r6.xyz; + r1.x = dot(r12.xyz, r12.xyz); + r1.x = rsqrt(r1.x); + r12.xyz = r12.xyz * r1.xxx; + r13.xyz = r0.xyz * r2.www + -r2.xyz; + r1.x = dot(r13.xyz, r13.xyz); + r1.x = rsqrt(r1.x); + r13.xyz = r13.xyz * r1.xxx; + r1.x = dot(r6.xyz, r13.xyz); + r1.x = -r1.x * r1.x + 1.000000000e+000; + r1.x = max(r1.x, 0.000000000e+000); + r1.x = sqrt(r1.x); + r1.x = log2(r1.x); + r1.x = r1.y * r1.x; + r1.x = exp2(r1.x); + r1.w = dot(r12.xyz, r13.xyz); + r1.w = -r1.w * r1.w + 1.000000000e+000; + r1.w = max(r1.w, 0.000000000e+000); + r1.w = sqrt(r1.w); + r1.w = log2(r1.w); + r1.z = r1.z * r1.w; + r1.z = exp2(r1.z); + r6.xyz = r1.zzz * r8.xyz; + r1.xzw = r1.xxx * r10.xxx + r6.xyz; + r1.xzw = r4.xyz * r1.xzw; + r1.xzw = v2.www * r1.xzw; + r1.xzw = float3(1.500000e-001,1.500000e-001,1.500000e-001) * r1.xzw; + r4.xyz = r11.xyz; + } else { + r0.xyz = r0.xyz * r2.www + -r2.xyz; + r2.x = dot(r0.xyz, r0.xyz); + r2.x = rsqrt(r2.x); + r0.xyz = r2.xxx * r0.xyz; + r0.x = saturate(dot(r7.xyz, r0.xyz)); + r0.y = r1.y * 8.662509918e-002 + 8.750000000e-001; + r0.x = r0.x * r1.y + -r1.y; + r0.x = exp2(r0.x); + r0.x = r0.y * r0.x; + r0.xyz = r4.xyz * r0.xxx; + r1.xzw = v2.www * r0.xyz; + } + if (r5.y != 0) { + r0.x = 1.000000000e+000 + g_subRolloff; + r0.y = g_subRolloff + r3.x; + r0.x = 1.000000e+000 / r0.x; + r0.x = saturate(r0.y * r0.x); + r0.y = r0.x * -2.000000000e+000 + 3.000000000e+000; + r0.x = r0.x * r0.x; + r0.z = r3.y * -2.000000000e+000 + 3.000000000e+000; + r1.y = r3.y * r3.y; + r0.z = r1.y * r0.z; + r0.x = r0.y * r0.x + -r0.z; + r0.x = max(r0.x, 0.000000000e+000); + r0.xyz = v3.xyz * r0.xxx; + r4.xyz = r0.xyz * r0.www + r4.xyz; + } + if (r5.x == 0) { + r1.xzw = r1.xzw * r10.xyz; + } + o0.xyz = r4.xyz * r9.xyz + r1.xzw; + o0.w = 0.000000000e+000; + + +// o0=0; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer $Globals +// { +// +// float2 g_invScreenSize; // Offset: 0 Size: 8 +// float4x4 g_invViewProjMatrix; // Offset: 16 Size: 64 +// float4 g_shadowmapHalfSizeAndInvHalfSize;// Offset: 80 Size: 16 [unused] +// float g_subRolloff; // Offset: 96 Size: 4 +// float4 g_exposureMultipliers; // Offset: 112 Size: 16 [unused] +// uint4 g_shadowmapDimensions; // Offset: 128 Size: 16 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// g_depthTexture texture float4 2d 0 1 +// g_gbufferTexture0 texture float4 2d 1 1 +// g_gbufferTexture1 texture float4 2d 2 1 +// g_gbufferTexture2 texture float4 2d 3 1 +// g_gbufferTexture4 texture float4 2d 4 1 +// $Globals cbuffer NA NA 0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float xyzw +// TEXCOORD 1 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float xyzw +// TEXCOORD 3 xyzw 4 NONE float +// TEXCOORD 4 xyzw 5 NONE float xy +// TEXCOORD 5 xyzw 6 NONE float xyz +// TEXCOORD 6 xyzw 7 NONE float +// TEXCOORD 7 xyzw 8 NONE float +// TEXCOORD 8 xyzw 9 NONE float +// TEXCOORD 9 xyzw 10 NONE float +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb0[7], immediateIndexed +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (float,float,float,float) t2 +dcl_resource_texture2d (float,float,float,float) t3 +dcl_resource_texture2d (float,float,float,float) t4 +dcl_input_ps_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.xyzw +dcl_input_ps linear v2.xyzw +dcl_input_ps linear v3.xyzw +dcl_input_ps linear v5.xy +dcl_input_ps linear v6.xyz +dcl_output o0.xyzw +dcl_temps 14 +mul r0.xy, v0.xyxx, cb0[0].xyxx +ftoi r1.xy, v0.xyxx +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r1.xyww, t1.xyzw +ld_indexable(texture2d)(float,float,float,float) r3.xyzw, r1.xyww, t2.xyzw +ld_indexable(texture2d)(float,float,float,float) r0.z, r1.xyww, t3.xywz +ld_indexable(texture2d)(float,float,float,float) r4.z, r1.xyww, t0.yzxw +mul r0.z, r0.z, l(255.000000) +round_ne r0.z, r0.z +ftoi r0.z, r0.z +ieq r5.xy, r0.zzzz, l(4, 2, 0, 0) +if_nz r5.x + ld_indexable(texture2d)(float,float,float,float) r1.xyzw, r1.xyzw, t4.xyzw + mad r6.xyzw, r2.xyzw, l(4.000000, 4.000000, 4.000000, 4.000000), l(-2.000000, -2.000000, -2.000000, -2.000000) + dp2 r0.w, r6.xyxx, r6.xyxx + mad r7.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r7.z, l(0.000000) + sqrt r0.w, r0.w + mul r7.xy, r0.wwww, r6.xyxx + dp3 r0.w, r7.xywx, r7.xywx + rsq r0.w, r0.w + mul r7.xyz, r0.wwww, r7.xywx + dp2 r0.w, r6.zwzz, r6.zwzz + mad r8.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r8.z, l(0.000000) + sqrt r0.w, r0.w + mul r8.xy, r0.wwww, r6.zwzz + dp3 r0.w, r8.xywx, r8.xywx + rsq r0.w, r0.w + mul r6.xyz, r0.wwww, r8.xywx + dp2 r0.w, r1.xyxx, l(65280.000000, 255.000000, 0.000000, 0.000000) + round_ne r0.w, r0.w + mul r1.x, r0.w, l(0.031250) + round_z r1.x, r1.x + mad r8.z, r0.w, l(0.031250), -r1.x + mul r0.w, r1.x, l(0.015625) + round_z r8.x, r0.w + mad r8.y, r1.x, l(0.015625), -r8.x + mul r8.xyz, r8.xyzx, l(0.032258, 1.015873, 1.032258, 0.000000) + mul r1.xy, r1.zwzz, l(255.000000, 255.000000, 0.000000, 0.000000) + round_ne r1.xy, r1.xyxx + mul r1.zw, r1.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500) + round_z r9.xy, r1.zwzz + mad r9.zw, r1.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500), -r9.xxxy + mul r1.xw, r9.wwwy, l(1.066667, 0.000000, 0.000000, 0.066667) + mad r1.yz, r9.xxzx, l(0.000000, 0.800000, 12.800001, 0.000000), l(0.000000, 1.000000, 1.000000, 0.000000) + exp r1.yz, r1.yyzy + mad r1.yz, r1.yyzy, l(0.000000, 1.443000, 1.443000, 0.000000), l(0.000000, 1.443000, 1.443000, 0.000000) + mul r9.xyzw, r3.xyzw, r3.xyzw + mov r10.xyz, r9.wwww +else + mad r2.xyz, r2.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) + dp3 r0.w, r2.xyzx, r2.xyzx + rsq r0.w, r0.w + mul r7.xyz, r0.wwww, r2.xyzx + mul r3.xyzw, r3.xyzw, r3.xyzw + ieq r0.w, r0.z, l(5) + if_nz r0.w + mul r9.xyz, r3.wwww, r3.xyzx + mov r10.xyz, r3.xyzx + else + ieq r0.z, r0.z, l(1) + if_nz r0.z + mul r10.xyz, r3.xyzx, r3.wwww + else + mov r10.xyz, r3.wwww + endif + mov r9.xyz, r3.xyzx + endif + lt r0.z, l(0.000000), r10.x + and r0.z, r2.w, r0.z + mad r0.z, r0.z, l(12.000000), l(1.000000) + exp r0.z, r0.z + mad r1.y, r0.z, l(1.443000), l(1.443000) + mov r6.xyz, l(0,0,0,0) + mov r1.xzw, l(0,0,0,0) + mov r8.xyz, l(0,0,0,0) +endif +mad r0.xy, r0.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r4.xy, r0.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000) +mov r4.w, l(1.000000) +dp4 r0.x, r4.xyzw, cb0[1].xyzw +dp4 r0.y, r4.xyzw, cb0[2].xyzw +dp4 r0.z, r4.xyzw, cb0[3].xyzw +dp4 r0.w, r4.xyzw, cb0[4].xyzw +div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w +mul r2.xyz, r0.wwww, r0.xyzx +dp3 r2.w, r2.xyzx, r2.xyzx +rsq r2.w, r2.w +mul r2.xyz, r2.wwww, r2.xyzx +mad r0.xyz, -r0.xyzx, r0.wwww, v1.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r2.w, r0.w +mul r3.xyz, r0.xyzx, r2.wwww +add r0.w, r0.w, v3.w +div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w +add r0.w, r0.w, v1.w +max r0.w, r0.w, l(0.000000) +dp3 r3.w, v6.xyzx, r3.xyzx +mad_sat r3.w, r3.w, v5.x, v5.y +add r3.w, -r3.w, l(1.000000) +mul r0.w, r0.w, r3.w +dp3 r3.x, r7.xyzx, r3.xyzx +mov_sat r3.y, r3.x +mul r4.xyz, r3.yyyy, v2.xyzx +mul r4.xyz, r0.wwww, r4.xyzx +if_nz r5.x + mov_sat r1.x, r1.x + mad r3.z, r1.x, l(0.500000), r3.x + mad r1.x, r1.x, l(0.500000), l(1.000000) + div_sat r1.x, r3.z, r1.x + mul r11.xyz, r1.xxxx, v2.xyzx + mul r11.xyz, r0.wwww, r11.xyzx + mad r12.xyz, -r7.xyzx, r1.wwww, r6.xyzx + dp3 r1.x, r12.xyzx, r12.xyzx + rsq r1.x, r1.x + mul r12.xyz, r1.xxxx, r12.xyzx + mad r13.xyz, r0.xyzx, r2.wwww, -r2.xyzx + dp3 r1.x, r13.xyzx, r13.xyzx + rsq r1.x, r1.x + mul r13.xyz, r1.xxxx, r13.xyzx + dp3 r1.x, r6.xyzx, r13.xyzx + mad r1.x, -r1.x, r1.x, l(1.000000) + max r1.x, r1.x, l(0.000000) + sqrt r1.x, r1.x + log r1.x, r1.x + mul r1.x, r1.x, r1.y + exp r1.x, r1.x + dp3 r1.w, r12.xyzx, r13.xyzx + mad r1.w, -r1.w, r1.w, l(1.000000) + max r1.w, r1.w, l(0.000000) + sqrt r1.w, r1.w + log r1.w, r1.w + mul r1.z, r1.w, r1.z + exp r1.z, r1.z + mul r6.xyz, r8.xyzx, r1.zzzz + mad r1.xzw, r1.xxxx, r10.xxxx, r6.xxyz + mul r1.xzw, r1.xxzw, r4.xxyz + mul r1.xzw, r1.xxzw, v2.wwww + mul r1.xzw, r1.xxzw, l(0.150000, 0.000000, 0.150000, 0.150000) + mov r4.xyz, r11.xyzx +else + mad r0.xyz, r0.xyzx, r2.wwww, -r2.xyzx + dp3 r2.x, r0.xyzx, r0.xyzx + rsq r2.x, r2.x + mul r0.xyz, r0.xyzx, r2.xxxx + dp3_sat r0.x, r7.xyzx, r0.xyzx + mad r0.y, r1.y, l(0.086625), l(0.875000) + mad r0.x, r0.x, r1.y, -r1.y + exp r0.x, r0.x + mul r0.x, r0.x, r0.y + mul r0.xyz, r0.xxxx, r4.xyzx + mul r1.xzw, r0.xxyz, v2.wwww +endif +if_nz r5.y + add r0.x, cb0[6].x, l(1.000000) + add r0.y, r3.x, cb0[6].x + div r0.x, l(1.000000, 1.000000, 1.000000, 1.000000), r0.x + mul_sat r0.x, r0.x, r0.y + mad r0.y, r0.x, l(-2.000000), l(3.000000) + mul r0.x, r0.x, r0.x + mad r0.z, r3.y, l(-2.000000), l(3.000000) + mul r1.y, r3.y, r3.y + mul r0.z, r0.z, r1.y + mad r0.x, r0.y, r0.x, -r0.z + max r0.x, r0.x, l(0.000000) + mul r0.xyz, r0.xxxx, v3.xyzx + mad r4.xyz, r0.xyzx, r0.wwww, r4.xyzx +endif +if_z r5.x + mul r1.xzw, r10.xxyz, r1.xxzw +endif +mad o0.xyz, r4.xyzx, r9.xyzx, r1.xzwx +mov o0.w, l(0) +ret +// Approximately 175 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/DragonAge/ShaderFixes/0096e678e7e3bf7f-ps_replace.txt b/DragonAge/ShaderFixes/0096e678e7e3bf7f-ps_replace.txt new file mode 100644 index 000000000..66ad95ddb --- /dev/null +++ b/DragonAge/ShaderFixes/0096e678e7e3bf7f-ps_replace.txt @@ -0,0 +1,287 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2DMS g_depthTexture : register(t3); +Texture2DMS g_gbufferTexture0 : register(t4); +Texture2DMS g_gbufferTexture2 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.xyz = g_gbufferTexture0.Load(r0.xyw,v1.x).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz,v1.x).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.xy * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.xyz = r1.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.xyz, r1.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r1.xyz * r0.www; + } + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r7.x = r1.z; + r1.w = 1.000000000e+000; + while (true) { + r2.w = g_pcssFilterParameters0.z < r1.w; + r3.x = (int)r6.y < (int)r3.y; + r2.w = r2.w ? r3.x : 0; + if (r2.w == 0) break; + r2.w = (int)r3.z + (int)r6.y; + r3.x = r6.x; + r5.y = r6.y; + while (true) { + r3.w = (int)r5.y >= (int)r2.w; + if (r3.w != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r3.w = sqrt(r4.x); + r4.x = 6.283185482e+000 * r4.z; + sincos(r4.x, r4.x, r8.x); + r9.x = r4.x * r3.w; + r9.y = r8.x * r3.w; + r4.xz = r9.xy * r0.zz; + r3.w = dot(r0.xy, r4.xz); + r3.w = r3.w + r2.z; + r4.xz = r9.xy * r0.zz + r2.xy; + r3.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.xz, r3.w).x; + r3.w = dot(r3.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.x = r3.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.x; + r6.y = r5.y; + r2.w = r6.y; + r2.w = r6.x / r2.w; + r3.w = r2.w + -r7.x; + r4.x = r2.w + r7.x; + r4.x = 5.000000000e-001 * r4.x; + r1.w = r3.w / r4.x; + r7.x = r2.w; + r1.w = abs(r1.w); + } + } else { + r7.x = 1.000000000e+000; + } + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + r7.y = min(r0.z, r0.x); + o0.xyzw = r7.xxxy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/0ae7ea6f76da0f5e-ps_replace.txt b/DragonAge/ShaderFixes/0ae7ea6f76da0f5e-ps_replace.txt new file mode 100644 index 000000000..5c11e2ffb --- /dev/null +++ b/DragonAge/ShaderFixes/0ae7ea6f76da0f5e-ps_replace.txt @@ -0,0 +1,274 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2DMS g_depthTexture : register(t4); +Texture2DMS g_gbufferTexture0 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz,v1.x).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r1.w = r1.z; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r2.z; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r1.w; + r4.z = r3.x + r1.w; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r1.w = r3.x; + r2.w = abs(r2.w); + } + } else { + r1.w = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyz = r1.www * r0.xxx; + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + o0.w = min(r0.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/0ec8666e559d7139-ps_replace.txt b/DragonAge/ShaderFixes/0ec8666e559d7139-ps_replace.txt new file mode 100644 index 000000000..0443b12ed --- /dev/null +++ b/DragonAge/ShaderFixes/0ec8666e559d7139-ps_replace.txt @@ -0,0 +1,287 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2D g_depthTexture : register(t3); +Texture2D g_gbufferTexture0 : register(t4); +Texture2D g_gbufferTexture2 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.xyz = g_gbufferTexture0.Load(r0.xyw).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.xy * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.xyz = r1.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.xyz, r1.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r1.xyz * r0.www; + } + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r7.x = r1.z; + r1.w = 1.000000000e+000; + while (true) { + r2.w = g_pcssFilterParameters0.z < r1.w; + r3.x = (int)r6.y < (int)r3.y; + r2.w = r2.w ? r3.x : 0; + if (r2.w == 0) break; + r2.w = (int)r3.z + (int)r6.y; + r3.x = r6.x; + r5.y = r6.y; + while (true) { + r3.w = (int)r5.y >= (int)r2.w; + if (r3.w != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r3.w = sqrt(r4.x); + r4.x = 6.283185482e+000 * r4.z; + sincos(r4.x, r4.x, r8.x); + r9.x = r4.x * r3.w; + r9.y = r8.x * r3.w; + r4.xz = r9.xy * r0.zz; + r3.w = dot(r0.xy, r4.xz); + r3.w = r3.w + r2.z; + r4.xz = r9.xy * r0.zz + r2.xy; + r3.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.xz, r3.w).x; + r3.w = dot(r3.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.x = r3.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.x; + r6.y = r5.y; + r2.w = r6.y; + r2.w = r6.x / r2.w; + r3.w = r2.w + -r7.x; + r4.x = r2.w + r7.x; + r4.x = 5.000000000e-001 * r4.x; + r1.w = r3.w / r4.x; + r7.x = r2.w; + r1.w = abs(r1.w); + } + } else { + r7.x = 1.000000000e+000; + } + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + r7.y = min(r0.z, r0.x); + o0.xyzw = r7.xxxy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/12b273239f0ed83b-ps_replace.txt b/DragonAge/ShaderFixes/12b273239f0ed83b-ps_replace.txt new file mode 100644 index 000000000..3e03a1d66 --- /dev/null +++ b/DragonAge/ShaderFixes/12b273239f0ed83b-ps_replace.txt @@ -0,0 +1,199 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.y = g_shadowmapDimensions.x; + r0.zw = r0.yy * r1.xy + float2(5.000000e-001,5.000000e-001); + r0.y = 1.000000e+000 / r0.y; + r1.xy = floor(r0.zw); + r0.zw = -r1.xy + r0.zw; + r1.xy = r1.xy * r0.yy; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(2,0)).xyzw; + r0.y = r0.z * 2.000000000e+000 + 2.000000000e+000; + r1.zw = float2(4.000000e+000,1.000000e+000) + -r0.zw; + r3.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(0,0)).xyzw; + r4.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.zzzz; + r5.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.zzzz; + r6.x = -r0.z * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(-2,0)).xyzw; + r6.y = r0.z * -2.000000000e+000 + 4.000000000e+000; + r6.zw = r7.wx * r6.xx; + r6.yz = r7.zy * r6.yy + r6.zw; + r6.z = r7.z * r5.z + r6.z; + r6.z = r7.w * r6.x + r6.z; + r6.z = r3.y * r4.y + r6.z; + r6.z = r3.x * r5.w + r6.z; + r6.z = r3.z * r4.z + r6.z; + r6.z = r3.w * r1.z + r6.z; + r2.y = dot(r2.yy, r0.zz); + r6.z = r2.y + r6.z; + r6.z = r2.x * r0.y + r6.z; + r2.z = dot(r2.zz, r0.zz); + r6.z = r2.z + r6.z; + r8.y = r2.w * r4.w + r6.z; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(0,-2)).xyzw; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(-2,-2)).xyzw; + r6.y = r10.y * r5.z + r6.y; + r6.y = r10.x * r6.x + r6.y; + r10.xyzw = r10.wzxy * r5.xyxy; + r6.zw = r10.xz + r10.yw; + r6.zw = r9.zy * float2(2.000000e+000,2.000000e+000) + r6.zw; + r6.zw = r9.wx * float2(2.000000e+000,2.000000e+000) + r6.zw; + r3.z = r3.z * r4.y + r6.y; + r3.z = r3.w * r5.w + r3.z; + r3.z = r9.y * r4.z + r3.z; + r3.z = r9.x * r1.z + r3.z; + r2.z = r3.z + r2.z; + r0.y = r2.w * r0.y + r2.z; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(2,-2)).xyzw; + r2.z = r9.y * r0.z; + r0.y = r2.z * 2.000000000e+000 + r0.y; + r8.x = r9.x * r4.w + r0.y; + r2.zw = r9.zy * r0.zz + r6.zw; + r2.zw = r9.wx * r4.xx + r2.zw; + r2.zw = r2.zw + r8.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r5.xyxy; + r3.zw = r9.xz + r9.yw; + r0.y = r8.z * r5.z + r3.w; + r0.y = r8.w * r6.x + r0.y; + r3.z = r7.y * r5.z + r3.z; + r3.z = r7.x * r6.x + r3.z; + r5.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(0,2)).xyzw; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(2,2)).xyzw; + r0.x = r5.y * 2.000000000e+000 + r0.y; + r0.x = r5.x * 2.000000000e+000 + r0.x; + r0.x = r5.z * r4.z + r0.x; + r0.x = r5.w * r1.z + r0.x; + r0.x = r6.y * r0.z + r0.x; + r0.x = r6.x * r4.x + r0.x; + r0.y = r6.z * r0.z; + r0.x = r0.y * 2.000000000e+000 + r0.x; + r0.y = r6.w * r4.w + r0.x; + r1.x = r5.z * 2.000000000e+000 + r3.z; + r1.x = r5.w * 2.000000000e+000 + r1.x; + r1.x = r3.y * r4.z + r1.x; + r1.x = r3.x * r1.z + r1.x; + r0.z = r6.z * r0.z + r1.x; + r0.z = r6.w * r4.x + r0.z; + r0.z = r2.y + r0.z; + r0.x = r2.x * r4.w + r0.z; + r0.xy = r2.zw + r0.xy; + r0.y = r0.y * r0.w; + r0.x = r0.x * r1.w + r0.y; + o0.xyzw = float4(1.694915e-002,1.694915e-002,1.694915e-002,1.694915e-002) * r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/1522c6879ac263f0-ps_replace.txt b/DragonAge/ShaderFixes/1522c6879ac263f0-ps_replace.txt new file mode 100644 index 000000000..697318f11 --- /dev/null +++ b/DragonAge/ShaderFixes/1522c6879ac263f0-ps_replace.txt @@ -0,0 +1,206 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.x = g_shadowmapDimensions.x; + r0.yz = r0.xx * r1.xy + float2(5.000000e-001,5.000000e-001); + r1.xyw = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r1.xyw = saturate(abs(r1.xyw) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = 1.000000e+000 / r0.x; + r2.xy = floor(r0.yz); + r0.yz = -r2.xy + r0.yz; + r0.xw = r2.xy * r0.xx; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,0)).xyzw; + r3.x = r0.y * 2.000000000e+000 + 2.000000000e+000; + r3.yz = float2(4.000000e+000,1.000000e+000) + -r0.yz; + r4.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,0)).xyzw; + r5.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.yyyy; + r6.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.yyyy; + r3.w = -r0.y * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,0)).xyzw; + r8.x = r0.y * -2.000000000e+000 + 4.000000000e+000; + r8.yz = r7.wx * r3.ww; + r8.xy = r7.zy * r8.xx + r8.yz; + r7.z = r7.z * r6.z + r8.y; + r7.z = r7.w * r3.w + r7.z; + r7.z = r4.y * r5.y + r7.z; + r7.z = r4.x * r6.w + r7.z; + r7.z = r4.z * r5.z + r7.z; + r7.z = r4.w * r3.y + r7.z; + r2.y = dot(r2.yy, r0.yy); + r7.z = r2.y + r7.z; + r7.z = r2.x * r3.x + r7.z; + r2.z = dot(r2.zz, r0.yy); + r7.z = r2.z + r7.z; + r9.y = r2.w * r5.w + r7.z; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,-2)).xyzw; + r11.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,-2)).xyzw; + r7.z = r11.y * r6.z + r8.x; + r7.z = r11.x * r3.w + r7.z; + r8.xyzw = r11.wzxy * r6.xyxy; + r8.xy = r8.xz + r8.yw; + r8.xy = r10.zy * float2(2.000000e+000,2.000000e+000) + r8.xy; + r8.xy = r10.wx * float2(2.000000e+000,2.000000e+000) + r8.xy; + r4.z = r4.z * r5.y + r7.z; + r4.z = r4.w * r6.w + r4.z; + r4.z = r10.y * r5.z + r4.z; + r4.z = r10.x * r3.y + r4.z; + r2.z = r4.z + r2.z; + r2.z = r2.w * r3.x + r2.z; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,-2)).xyzw; + r2.w = r10.y * r0.y; + r2.z = r2.w * 2.000000000e+000 + r2.z; + r9.x = r10.x * r5.w + r2.z; + r2.zw = r10.zy * r0.yy + r8.xy; + r2.zw = r10.wx * r5.xx + r2.zw; + r2.zw = r2.zw + r9.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r6.xyxy; + r4.zw = r9.xz + r9.yw; + r3.x = r8.z * r6.z + r4.w; + r3.x = r8.w * r3.w + r3.x; + r4.z = r7.y * r6.z + r4.z; + r3.w = r7.x * r3.w + r4.z; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,2)).xyzw; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,2)).xyzw; + r0.x = r6.y * 2.000000000e+000 + r3.x; + r0.x = r6.x * 2.000000000e+000 + r0.x; + r0.x = r6.z * r5.z + r0.x; + r0.x = r6.w * r3.y + r0.x; + r0.x = r7.y * r0.y + r0.x; + r0.x = r7.x * r5.x + r0.x; + r0.w = r7.z * r0.y; + r0.x = r0.w * 2.000000000e+000 + r0.x; + r6.y = r7.w * r5.w + r0.x; + r0.x = r6.z * 2.000000000e+000 + r3.w; + r0.x = r6.w * 2.000000000e+000 + r0.x; + r0.x = r4.y * r5.z + r0.x; + r0.x = r4.x * r3.y + r0.x; + r0.x = r7.z * r0.y + r0.x; + r0.x = r7.w * r5.x + r0.x; + r0.x = r2.y + r0.x; + r6.x = r2.x * r5.w + r0.x; + r0.xy = r6.xy + r2.zw; + r0.y = r0.y * r0.z; + r0.x = r0.x * r3.z + r0.y; + o0.xyz = float3(1.694915e-002,1.694915e-002,1.694915e-002) * r0.xxx; + r0.x = min(r1.y, r1.x); + o0.w = min(r1.w, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/16f31f3d379beb8a-vs_replace.txt b/DragonAge/ShaderFixes/16f31f3d379beb8a-vs_replace.txt new file mode 100644 index 000000000..744c20110 Binary files /dev/null and b/DragonAge/ShaderFixes/16f31f3d379beb8a-vs_replace.txt differ diff --git a/DragonAge/ShaderFixes/19a0a417eb510de1-ps_replace.txt b/DragonAge/ShaderFixes/19a0a417eb510de1-ps_replace.txt new file mode 100644 index 000000000..e1528d6a3 --- /dev/null +++ b/DragonAge/ShaderFixes/19a0a417eb510de1-ps_replace.txt @@ -0,0 +1,132 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r1.xy, r1.z).x; + r0.yzw = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r1.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r1.xy, 0.000000000e+000).x; + r1.x = 1.000000000e+000 + -r1.x; + o0.xyz = r1.xxx * r0.xxx; + r0.xyz = saturate(abs(r0.yzw) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + o0.w = min(r0.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/202009901078a530-ps_replace.txt b/DragonAge/ShaderFixes/202009901078a530-ps_replace.txt new file mode 100644 index 000000000..ffc59eeef --- /dev/null +++ b/DragonAge/ShaderFixes/202009901078a530-ps_replace.txt @@ -0,0 +1,273 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2D g_depthTexture : register(t4); +Texture2D g_gbufferTexture0 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r1.w = r1.z; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r2.z; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r1.w; + r4.z = r3.x + r1.w; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r1.w = r3.x; + r2.w = abs(r2.w); + } + } else { + r1.w = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyz = r1.www * r0.xxx; + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + o0.w = min(r0.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/20b03277c097870c-ps_replace.txt b/DragonAge/ShaderFixes/20b03277c097870c-ps_replace.txt new file mode 100644 index 000000000..6592efad7 --- /dev/null +++ b/DragonAge/ShaderFixes/20b03277c097870c-ps_replace.txt @@ -0,0 +1,270 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2DMS g_depthTexture : register(t3); +Texture2DMS g_gbufferTexture0 : register(t4); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz,v1.x).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r7.x = r1.z; + r1.w = 1.000000000e+000; + while (true) { + r2.w = g_pcssFilterParameters0.z < r1.w; + r3.x = (int)r6.y < (int)r3.y; + r2.w = r2.w ? r3.x : 0; + if (r2.w == 0) break; + r2.w = (int)r3.z + (int)r6.y; + r3.x = r6.x; + r5.y = r6.y; + while (true) { + r3.w = (int)r5.y >= (int)r2.w; + if (r3.w != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r3.w = sqrt(r4.x); + r4.x = 6.283185482e+000 * r4.z; + sincos(r4.x, r4.x, r8.x); + r9.x = r4.x * r3.w; + r9.y = r8.x * r3.w; + r4.xz = r9.xy * r0.zz; + r3.w = dot(r0.xy, r4.xz); + r3.w = r3.w + r2.z; + r4.xz = r9.xy * r0.zz + r2.xy; + r3.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.xz, r3.w).x; + r3.w = dot(r3.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.x = r3.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.x; + r6.y = r5.y; + r2.w = r6.y; + r2.w = r6.x / r2.w; + r3.w = r2.w + -r7.x; + r4.x = r2.w + r7.x; + r4.x = 5.000000000e-001 * r4.x; + r1.w = r3.w / r4.x; + r7.x = r2.w; + r1.w = abs(r1.w); + } + } else { + r7.x = 1.000000000e+000; + } + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + r7.y = min(r0.z, r0.x); + o0.xyzw = r7.xxxy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/210275c5b1f99145-ps_replace.txt b/DragonAge/ShaderFixes/210275c5b1f99145-ps_replace.txt new file mode 100644 index 000000000..0fa074246 --- /dev/null +++ b/DragonAge/ShaderFixes/210275c5b1f99145-ps_replace.txt @@ -0,0 +1,269 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2D g_depthTexture : register(t3); +Texture2D g_gbufferTexture0 : register(t4); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r7.x = r1.z; + r1.w = 1.000000000e+000; + while (true) { + r2.w = g_pcssFilterParameters0.z < r1.w; + r3.x = (int)r6.y < (int)r3.y; + r2.w = r2.w ? r3.x : 0; + if (r2.w == 0) break; + r2.w = (int)r3.z + (int)r6.y; + r3.x = r6.x; + r5.y = r6.y; + while (true) { + r3.w = (int)r5.y >= (int)r2.w; + if (r3.w != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r3.w = sqrt(r4.x); + r4.x = 6.283185482e+000 * r4.z; + sincos(r4.x, r4.x, r8.x); + r9.x = r4.x * r3.w; + r9.y = r8.x * r3.w; + r4.xz = r9.xy * r0.zz; + r3.w = dot(r0.xy, r4.xz); + r3.w = r3.w + r2.z; + r4.xz = r9.xy * r0.zz + r2.xy; + r3.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.xz, r3.w).x; + r3.w = dot(r3.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.x = r3.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.x; + r6.y = r5.y; + r2.w = r6.y; + r2.w = r6.x / r2.w; + r3.w = r2.w + -r7.x; + r4.x = r2.w + r7.x; + r4.x = 5.000000000e-001 * r4.x; + r1.w = r3.w / r4.x; + r7.x = r2.w; + r1.w = abs(r1.w); + } + } else { + r7.x = 1.000000000e+000; + } + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + r7.y = min(r0.z, r0.x); + o0.xyzw = r7.xxxy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/21ab670e4799dcb3-vs_replace.txt b/DragonAge/ShaderFixes/21ab670e4799dcb3-vs_replace.txt new file mode 100644 index 000000000..cf14fbc76 Binary files /dev/null and b/DragonAge/ShaderFixes/21ab670e4799dcb3-vs_replace.txt differ diff --git a/DragonAge/ShaderFixes/26fd17c8da889234-ps_replace.txt b/DragonAge/ShaderFixes/26fd17c8da889234-ps_replace.txt new file mode 100644 index 000000000..34e410c09 --- /dev/null +++ b/DragonAge/ShaderFixes/26fd17c8da889234-ps_replace.txt @@ -0,0 +1,292 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2DMS g_depthTexture : register(t4); +Texture2DMS g_gbufferTexture0 : register(t5); +Texture2DMS g_gbufferTexture2 : register(t6); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.xyz = g_gbufferTexture0.Load(r0.xyw,v1.x).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz,v1.x).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.xy * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.xyz = r1.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.xyz, r1.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r1.xyz * r0.www; + } + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r1.w = r1.z; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r2.z; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r1.w; + r4.z = r3.x + r1.w; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r1.w = r3.x; + r2.w = abs(r2.w); + } + } else { + r1.w = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyz = r1.www * r0.xxx; + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + o0.w = min(r0.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/30e03c5b3d15d370-ps_replace.txt b/DragonAge/ShaderFixes/30e03c5b3d15d370-ps_replace.txt new file mode 100644 index 000000000..8d007a9fb --- /dev/null +++ b/DragonAge/ShaderFixes/30e03c5b3d15d370-ps_replace.txt @@ -0,0 +1,281 @@ +//Wall Decal +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +cbuffer externalConstants : register(b1) +{ + float2 external_Atlas_RowsColumns : packoffset(c0); + float2 vc_pad0 : packoffset(c0.z); + float4 external_viewMatrix1 : packoffset(c1); + float4 external_viewMatrix2 : packoffset(c2); + float4 external_viewMatrix3 : packoffset(c3); + float4 external_viewMatrix4 : packoffset(c4); +} +SamplerState sampler0_s : register(s0); +SamplerState sampler1_s : register(s1); +Texture2D texture_depthBufferTexture : register(t1); +Texture2D texture_Diffuse : register(t2); +Texture2D texture_Normal : register(t3); + +Texture2D StereoParams : register(t125); +Texture1D IniParams : register(t120); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + float4 v5 : TEXCOORD4, + float4 v6 : TEXCOORD5, + out float4 o0 : SV_Target0, + out float4 o1 : SV_Target1) +{ + float4 r0,r1,r2; + uint4 bitmask; + r0.xyz = external_viewMatrix2.xyz * v6.yyy; + r0.xyz = external_viewMatrix1.xyz * v6.xxx + r0.xyz; + r0.xyz = external_viewMatrix3.xyz * v6.zzz + r0.xyz; + r0.xyz = external_viewMatrix4.xyz + r0.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r0.xyz = r0.xyz / -r0.zzz; + r1.xy = screenSize.zw * v0.xy; + r0.w = texture_depthBufferTexture.Sample(sampler0_s, r1.xy).x; + +float4 r26; +r26.xyz = r0.xyz * r0.www; +r26.w = 1.0; + +float4 stereo = StereoParams.Load(0); +r26.x -= stereo.x * (-r26.z - stereo.y)/projMatrix._m00; +r0.xyz = r26.xyz + -external_viewMatrix4.xyz; + + // r0.xyz = r0.xyz * r0.www + -external_viewMatrix4.xyz; + r1.x = dot(external_viewMatrix1.xyz, r0.xyz); + r1.y = dot(external_viewMatrix2.xyz, r0.xyz); + r1.z = dot(external_viewMatrix3.xyz, r0.xyz); + r1.w = 1.000000000e+000; + r0.x = dot(r1.xyzw, v2.xyzw); + r0.y = dot(r1.xyzw, v3.xyzw); + r0.z = dot(r1.xyzw, v4.xyzw); + r0.w = dot(r1.xyzw, v5.xyzw); + r0.xyz = r0.xyz / r0.www; + r1.xyz = float3(5.000000e-001,5.000000e-001,5.000000e-001) + -abs(-r0.xyz); + r0.xy = float2(5.000000e-001,5.000000e-001) + r0.xz; + r0.xy = v1.zy + r0.xy; + r0.xy = r0.xy / external_Atlas_RowsColumns.yx; + r1.xyz = r1.xyz < float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.z = (int)r1.y | (int)r1.x; + r0.z = (int)r1.z | (int)r0.z; + if (r0.z != 0) discard; + r1.xyz = texture_Normal.Sample(sampler1_s, r0.xy).xyw; + r0.xyzw = texture_Diffuse.Sample(sampler1_s, r0.xy).xyzw; + r1.x = r1.x * r1.z; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xyz = v4.xyz * r1.yyy; + r2.xyz = v2.xyz * r1.xxx + r2.xyz; + r1.x = dot(r1.xy, r1.xy); + r1.x = 1.000000000e+000 + -r1.x; + r1.x = max(r1.x, 0.000000000e+000); + r1.x = sqrt(r1.x); + r1.xyz = v3.xyz * r1.xxx + r2.xyz; + r1.w = dot(r1.xyz, r1.xyz); + r1.w = rsqrt(r1.w); + r1.xyz = r1.xyz * r1.www; + r1.xyz = r1.xyz * float3(5.000000e-001,5.000000e-001,5.000000e-001) + float3(5.000000e-001,5.000000e-001,5.000000e-001); + o0.xyz = r1.xyz * r0.www; + o0.w = r0.w; + o1.w = r0.w; + r0.xyz = sqrt(r0.xyz); + o1.xyz = r0.xyz * r0.www; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer viewConstants +// { +// +// float1 time; // Offset: 0 Size: 4 [unused] +// float3 vc_pad0_; // Offset: 4 Size: 12 [unused] +// float4 screenSize; // Offset: 16 Size: 16 +// float3 debugNonFiniteColor; // Offset: 32 Size: 12 [unused] +// float1 vc_pad2_; // Offset: 44 Size: 4 [unused] +// float4x4 viewMatrix; // Offset: 48 Size: 64 [unused] +// float4x4 projMatrix; // Offset: 112 Size: 64 [unused] +// float4x4 viewProjMatrix; // Offset: 176 Size: 64 [unused] +// float4x4 crViewProjMatrix; // Offset: 240 Size: 64 [unused] +// float4 projectionKxKyKzKw; // Offset: 304 Size: 16 [unused] +// float3 cameraPos; // Offset: 320 Size: 12 [unused] +// float1 vc_pad8_; // Offset: 332 Size: 4 [unused] +// float3 transparentStartAndSlopeAndClamp;// Offset: 336 Size: 12 [unused] +// float1 vc_pad9_; // Offset: 348 Size: 4 [unused] +// float4 transparentCurve; // Offset: 352 Size: 16 [unused] +// float4 exposureMultipliers; // Offset: 368 Size: 16 [unused] +// float4 fogParams; // Offset: 384 Size: 16 [unused] +// float4 fogForwardScatteringParamsGradientScaleFogEnable;// Offset: 400 Size: 16 [unused] +// float4 fogForwardScatteringColorPresence;// Offset: 416 Size: 16 [unused] +// float4 fogCoefficients; // Offset: 432 Size: 16 [unused] +// float4 fogColorCoefficients; // Offset: 448 Size: 16 [unused] +// float4 fogColor; // Offset: 464 Size: 16 [unused] +// float4 fogStartDistance; // Offset: 480 Size: 16 [unused] +// float4 fogHeightFogCoefficients; // Offset: 496 Size: 16 [unused] +// float4 fogMiscParam; // Offset: 512 Size: 16 [unused] +// float2 fogEnabledMode; // Offset: 528 Size: 8 [unused] +// float2 vc_pad10_; // Offset: 536 Size: 8 [unused] +// +// } +// +// cbuffer externalConstants +// { +// +// float2 external_Atlas_RowsColumns; // Offset: 0 Size: 8 +// float2 vc_pad0; // Offset: 8 Size: 8 [unused] +// float4 external_viewMatrix1; // Offset: 16 Size: 16 +// float4 external_viewMatrix2; // Offset: 32 Size: 16 +// float4 external_viewMatrix3; // Offset: 48 Size: 16 +// float4 external_viewMatrix4; // Offset: 64 Size: 16 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// sampler0 sampler NA NA 0 1 +// sampler1 sampler NA NA 1 1 +// texture_depthBufferTexture texture float4 2d 1 1 +// texture_Diffuse texture float4 2d 2 1 +// texture_Normal texture float4 2d 3 1 +// externalConstants cbuffer NA NA 1 1 +// viewConstants cbuffer NA NA 2 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float yz +// TEXCOORD 1 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float xyzw +// TEXCOORD 3 xyzw 4 NONE float xyzw +// TEXCOORD 4 xyzw 5 NONE float xyzw +// TEXCOORD 5 xyzw 6 NONE float xyz +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// SV_Target 1 xyzw 1 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb2[2], immediateIndexed +dcl_constantbuffer cb1[5], immediateIndexed +dcl_sampler s0, mode_default +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (float,float,float,float) t2 +dcl_resource_texture2d (float,float,float,float) t3 +dcl_input_ps_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.yz +dcl_input_ps linear v2.xyzw +dcl_input_ps linear v3.xyzw +dcl_input_ps linear v4.xyzw +dcl_input_ps linear v5.xyzw +dcl_input_ps linear v6.xyz +dcl_output o0.xyzw +dcl_output o1.xyzw +dcl_temps 3 +mul r0.xyz, v6.yyyy, cb1[2].xyzx +mad r0.xyz, cb1[1].xyzx, v6.xxxx, r0.xyzx +mad r0.xyz, cb1[3].xyzx, v6.zzzz, r0.xyzx +add r0.xyz, r0.xyzx, cb1[4].xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +div r0.xyz, r0.xyzx, -r0.zzzz +mul r1.xy, v0.xyxx, cb2[1].zwzz +sample_indexable(texture2d)(float,float,float,float) r0.w, r1.xyxx, t1.yzwx, s0 +mad r0.xyz, r0.xyzx, r0.wwww, -cb1[4].xyzx +dp3 r1.x, cb1[1].xyzx, r0.xyzx +dp3 r1.y, cb1[2].xyzx, r0.xyzx +dp3 r1.z, cb1[3].xyzx, r0.xyzx +mov r1.w, l(1.000000) +dp4 r0.x, r1.xyzw, v2.xyzw +dp4 r0.y, r1.xyzw, v3.xyzw +dp4 r0.z, r1.xyzw, v4.xyzw +dp4 r0.w, r1.xyzw, v5.xyzw +div r0.xyz, r0.xyzx, r0.wwww +add r1.xyz, -|r0.xyzx|, l(0.500000, 0.500000, 0.500000, 0.000000) +add r0.xy, r0.xzxx, l(0.500000, 0.500000, 0.000000, 0.000000) +add r0.xy, r0.xyxx, v1.zyzz +div r0.xy, r0.xyxx, cb1[0].yxyy +lt r1.xyz, r1.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000) +or r0.z, r1.y, r1.x +or r0.z, r1.z, r0.z +discard_nz r0.z +sample_indexable(texture2d)(float,float,float,float) r1.xyz, r0.xyxx, t3.xywz, s1 +sample_indexable(texture2d)(float,float,float,float) r0.xyzw, r0.xyxx, t2.xyzw, s1 +mul r1.x, r1.z, r1.x +mad r1.xy, r1.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r2.xyz, r1.yyyy, v4.xyzx +mad r2.xyz, v2.xyzx, r1.xxxx, r2.xyzx +dp2 r1.x, r1.xyxx, r1.xyxx +add r1.x, -r1.x, l(1.000000) +max r1.x, r1.x, l(0.000000) +sqrt r1.x, r1.x +mad r1.xyz, v3.xyzx, r1.xxxx, r2.xyzx +dp3 r1.w, r1.xyzx, r1.xyzx +rsq r1.w, r1.w +mul r1.xyz, r1.wwww, r1.xyzx +mad r1.xyz, r1.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), l(0.500000, 0.500000, 0.500000, 0.000000) +mul o0.xyz, r0.wwww, r1.xyzx +mov o0.w, r0.w +mov o1.w, r0.w +sqrt r0.xyz, r0.xyzx +mul o1.xyz, r0.wwww, r0.xyzx +ret +// Approximately 49 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/DragonAge/ShaderFixes/32d691e0eaa8a49f-ps_replace.txt b/DragonAge/ShaderFixes/32d691e0eaa8a49f-ps_replace.txt new file mode 100644 index 000000000..21f32be64 --- /dev/null +++ b/DragonAge/ShaderFixes/32d691e0eaa8a49f-ps_replace.txt @@ -0,0 +1,200 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2DMS g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.y = g_shadowmapDimensions.x; + r0.zw = r0.yy * r1.xy + float2(5.000000e-001,5.000000e-001); + r0.y = 1.000000e+000 / r0.y; + r1.xy = floor(r0.zw); + r0.zw = -r1.xy + r0.zw; + r1.xy = r1.xy * r0.yy; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(2,0)).xyzw; + r0.y = r0.z * 2.000000000e+000 + 2.000000000e+000; + r1.zw = float2(4.000000e+000,1.000000e+000) + -r0.zw; + r3.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(0,0)).xyzw; + r4.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.zzzz; + r5.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.zzzz; + r6.x = -r0.z * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(-2,0)).xyzw; + r6.y = r0.z * -2.000000000e+000 + 4.000000000e+000; + r6.zw = r7.wx * r6.xx; + r6.yz = r7.zy * r6.yy + r6.zw; + r6.z = r7.z * r5.z + r6.z; + r6.z = r7.w * r6.x + r6.z; + r6.z = r3.y * r4.y + r6.z; + r6.z = r3.x * r5.w + r6.z; + r6.z = r3.z * r4.z + r6.z; + r6.z = r3.w * r1.z + r6.z; + r2.y = dot(r2.yy, r0.zz); + r6.z = r2.y + r6.z; + r6.z = r2.x * r0.y + r6.z; + r2.z = dot(r2.zz, r0.zz); + r6.z = r2.z + r6.z; + r8.y = r2.w * r4.w + r6.z; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(0,-2)).xyzw; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(-2,-2)).xyzw; + r6.y = r10.y * r5.z + r6.y; + r6.y = r10.x * r6.x + r6.y; + r10.xyzw = r10.wzxy * r5.xyxy; + r6.zw = r10.xz + r10.yw; + r6.zw = r9.zy * float2(2.000000e+000,2.000000e+000) + r6.zw; + r6.zw = r9.wx * float2(2.000000e+000,2.000000e+000) + r6.zw; + r3.z = r3.z * r4.y + r6.y; + r3.z = r3.w * r5.w + r3.z; + r3.z = r9.y * r4.z + r3.z; + r3.z = r9.x * r1.z + r3.z; + r2.z = r3.z + r2.z; + r0.y = r2.w * r0.y + r2.z; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(2,-2)).xyzw; + r2.z = r9.y * r0.z; + r0.y = r2.z * 2.000000000e+000 + r0.y; + r8.x = r9.x * r4.w + r0.y; + r2.zw = r9.zy * r0.zz + r6.zw; + r2.zw = r9.wx * r4.xx + r2.zw; + r2.zw = r2.zw + r8.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r5.xyxy; + r3.zw = r9.xz + r9.yw; + r0.y = r8.z * r5.z + r3.w; + r0.y = r8.w * r6.x + r0.y; + r3.z = r7.y * r5.z + r3.z; + r3.z = r7.x * r6.x + r3.z; + r5.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(0,2)).xyzw; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(2,2)).xyzw; + r0.x = r5.y * 2.000000000e+000 + r0.y; + r0.x = r5.x * 2.000000000e+000 + r0.x; + r0.x = r5.z * r4.z + r0.x; + r0.x = r5.w * r1.z + r0.x; + r0.x = r6.y * r0.z + r0.x; + r0.x = r6.x * r4.x + r0.x; + r0.y = r6.z * r0.z; + r0.x = r0.y * 2.000000000e+000 + r0.x; + r0.y = r6.w * r4.w + r0.x; + r1.x = r5.z * 2.000000000e+000 + r3.z; + r1.x = r5.w * 2.000000000e+000 + r1.x; + r1.x = r3.y * r4.z + r1.x; + r1.x = r3.x * r1.z + r1.x; + r0.z = r6.z * r0.z + r1.x; + r0.z = r6.w * r4.x + r0.z; + r0.z = r2.y + r0.z; + r0.x = r2.x * r4.w + r0.z; + r0.xy = r2.zw + r0.xy; + r0.y = r0.y * r0.w; + r0.x = r0.x * r1.w + r0.y; + o0.xyzw = float4(1.694915e-002,1.694915e-002,1.694915e-002,1.694915e-002) * r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/361a6d40093a56f5-ps_replace.txt b/DragonAge/ShaderFixes/361a6d40093a56f5-ps_replace.txt new file mode 100644 index 000000000..996d8a9f2 --- /dev/null +++ b/DragonAge/ShaderFixes/361a6d40093a56f5-ps_replace.txt @@ -0,0 +1,396 @@ +//Shadows +cbuffer _Globals : register(b0) +{ + float2 g_invScreenSize : packoffset(c0); + float4x4 g_invViewProjMatrix : packoffset(c1); + float g_indirectCubeMapMipCount : packoffset(c5); + float4 g_exposureMultipliers : packoffset(c6); + float4x4 g_cubeMapLocalToBBox : packoffset(c7); + float3 g_cubeMapExtents : packoffset(c11); + float3 g_cubeMapFadeDistInverse : packoffset(c12); + float g_cubeMapScale : packoffset(c12.w); +} +SamplerState g_indirectCubeMapSampler_s : register(s0); +TextureCube g_indirectCubeMap : register(t0); +Texture2D g_depthTexture : register(t1); +Texture2D g_gbufferTexture0 : register(t2); +Texture2D g_gbufferTexture1 : register(t3); +Texture2D g_gbufferTexture2 : register(t4); +Texture2D g_gbufferTexture4 : register(t5); + +Texture2D StereoParams : register(t125); +Texture1D IniParams : register(t120); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + out float4 o0 : SV_Target0, + out float4 o1 : SV_Target1) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + r0.xy = g_invScreenSize.xy * v0.xy; + r1.xy = (int2)v0.xy; + r1.zw = float2(0.000000e+000,0.000000e+000); + r2.xyzw = g_gbufferTexture0.Load(r1.xyw).xyzw; + r3.xyzw = g_gbufferTexture1.Load(r1.xyw).xyzw; + r0.z = g_gbufferTexture2.Load(r1.xyw).w; + r4.z = g_depthTexture.Load(r1.xyw).x; + r0.z = 2.550000000e+002 * r0.z; + r0.z = round(r0.z); + r0.z = (int)r0.z; + r5.xy = r0.zz == float2(4.000000e+000,2.000000e+000); + if (r5.x != 0) { + r1.xy = g_gbufferTexture4.Load(r1.xyz).xy; + r1.zw = r2.xy * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.w = dot(r1.zw, r1.zw); + r6.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r6.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r6.xy = r1.zw * r0.ww; + r0.w = dot(r6.xyw, r6.xyw); + r0.w = rsqrt(r0.w); + r6.xyz = r6.xyw * r0.www; + r0.w = dot(r1.xy, float2(6.528000e+004,2.550000e+002)); + r0.w = round(r0.w); + r1.x = 3.125000000e-002 * r0.w; + r1.x = trunc(r1.x); + r7.z = r0.w * 3.125000000e-002 + -r1.x; + r0.w = 1.562500000e-002 * r1.x; + r7.x = trunc(r0.w); + r7.y = r1.x * 1.562500000e-002 + -r7.x; + r1.xyz = float3(3.225806e-002,1.015873e+000,1.032258e+000) * r7.xyz; + r7.xyz = r3.www * r3.www; + r0.w = 0.000000000e+000; + } else { + r2.xyz = r2.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r1.w = dot(r2.xyz, r2.xyz); + r1.w = rsqrt(r1.w); + r6.xyz = r2.xyz * r1.www; + r7.xyzw = r3.xyzw * r3.xyzw; + r1.w = r0.z == 5; + if (r1.w == 0) { + r0.z = r0.z == 1; + if (r0.z != 0) { + r7.xyz = r7.www * r7.xyz; + } else { + r7.xyz = r7.www; + } + } + r0.z = 0.000000000e+000 < r7.x; + r0.w = r0.z ? r2.w : 0; + r1.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + } + r0.xy = r0.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r4.xy = float2(1.000000e+000,-1.000000e+000) * r0.xy; + r4.w = 1.000000000e+000; + + r0.x = dot(r4.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r0.y = dot(r4.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r0.z = dot(r4.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r4.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r0.xyz = r1.www * r0.xyz; + +float4 r25; +r0.w = 1.0; +r25.x = dot(r0.xyzw, b1.xyzw); +r25.y = dot(r0.xyzw, b2.xyzw); +r25.z = dot(r0.xyzw, b3.xyzw); +r25.w = dot(r0.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r0.x = dot(r25.xyzw, a1.xyzw); +r0.y = dot(r25.xyzw, a2.xyzw); +r0.z = dot(r25.xyzw, a3.xyzw); +r0.w = dot(r25.xyzw, a4.xyzw); + + + + r2.xyz = g_cubeMapLocalToBBox._m01_m11_m21 * r0.yyy; + r2.xyz = g_cubeMapLocalToBBox._m00_m10_m20 * r0.xxx + r2.xyz; + r2.xyz = g_cubeMapLocalToBBox._m02_m12_m22 * r0.zzz + r2.xyz; + r2.xyz = g_cubeMapLocalToBBox._m03_m13_m23 + r2.xyz; + r3.xyz = -g_cubeMapExtents.xyz + abs(r2.xyz); + r3.xyz = saturate(-r3.xyz * g_cubeMapFadeDistInverse.xyz + float3(1.000000e+000,1.000000e+000,1.000000e+000)); + r1.w = min(r3.y, r3.x); + r1.w = min(r3.z, r1.w); + r2.w = dot(r0.xyz, r0.xyz); + r2.w = rsqrt(r2.w); + r0.xyz = r2.www * r0.xyz; + r2.w = dot(r0.xyz, r6.xyz); + r2.w = r2.w + r2.w; + r0.xyz = r6.xyz * -r2.www + r0.xyz; + r3.xy = g_cubeMapExtents.xz + -r2.xz; + r3.zw = -g_cubeMapExtents.xz + -r2.xz; + r4.xy = float2(0.000000e+000,0.000000e+000) < r0.xz; + r3.xy = r4.xy ? r3.xy : r3.zw; + r3.xy = r3.xy / r0.xz; + r2.w = min(r3.y, r3.x); + r0.xyz = r0.xyz * r2.www + r2.xyz; + r2.x = g_indirectCubeMapMipCount; + r2.y = trunc(g_indirectCubeMapMipCount); + r0.w = -r0.w * 1.500000000e+001 + r2.y; + r0.w = 5.000000000e+000 + r0.w; + r2.x = (int)r2.x + -1; + r2.x = r2.x; + r0.w = max(r0.w, 0.000000000e+000); + r0.w = min(r2.x, r0.w); + r3.xyz = g_indirectCubeMap.SampleLevel(g_indirectCubeMapSampler_s, r0.xyz, r0.w).xyz; + r3.xyz = r3.xyz * r7.xyz; + r3.xyz = r3.xyz * r1.www; + r3.xyz = g_cubeMapScale * r3.xyz; + if (r5.x != 0) { + r0.w = 5.000000000e+000 + r2.y; + r0.w = max(r0.w, 0.000000000e+000); + r0.w = min(r2.x, r0.w); + r0.xyz = g_indirectCubeMap.SampleLevel(g_indirectCubeMapSampler_s, r0.xyz, r0.w).xyz; + r0.xyz = r0.xyz * r1.xyz; + r0.xyz = r0.xyz * r1.www; + r0.xyz = r0.xyz * g_cubeMapScale + r3.xyz; + r3.xyz = float3(1.500000e-001,1.500000e-001,1.500000e-001) * r0.xyz; + } + r0.x = r5.y ? 0.000000000e+000 : 1.000000000e+000; + o0.xyz = r3.xyz * r0.xxx; + o1.xyz = r3.xyz; + o1.w = 0.000000000e+000; + o0.w = 0.000000000e+000; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer $Globals +// { +// +// float2 g_invScreenSize; // Offset: 0 Size: 8 +// float4x4 g_invViewProjMatrix; // Offset: 16 Size: 64 +// float g_indirectCubeMapMipCount; // Offset: 80 Size: 4 +// float4 g_exposureMultipliers; // Offset: 96 Size: 16 [unused] +// float4x4 g_cubeMapLocalToBBox; // Offset: 112 Size: 64 +// float3 g_cubeMapExtents; // Offset: 176 Size: 12 +// float3 g_cubeMapFadeDistInverse; // Offset: 192 Size: 12 +// float g_cubeMapScale; // Offset: 204 Size: 4 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// g_indirectCubeMapSampler sampler NA NA 0 1 +// g_indirectCubeMap texture float4 cube 0 1 +// g_depthTexture texture float4 2d 1 1 +// g_gbufferTexture0 texture float4 2d 2 1 +// g_gbufferTexture1 texture float4 2d 3 1 +// g_gbufferTexture2 texture float4 2d 4 1 +// g_gbufferTexture4 texture float4 2d 5 1 +// $Globals cbuffer NA NA 0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float +// TEXCOORD 1 xyzw 2 NONE float +// TEXCOORD 2 xyzw 3 NONE float +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// SV_Target 1 xyzw 1 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb0[13], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texturecube (float,float,float,float) t0 +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (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_siv linear noperspective v0.xy, position +dcl_output o0.xyzw +dcl_output o1.xyzw +dcl_temps 8 +mul r0.xy, v0.xyxx, cb0[0].xyxx +ftoi r1.xy, v0.xyxx +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r1.xyww, t2.xyzw +ld_indexable(texture2d)(float,float,float,float) r3.xyzw, r1.xyww, t3.xyzw +ld_indexable(texture2d)(float,float,float,float) r0.z, r1.xyww, t4.xywz +ld_indexable(texture2d)(float,float,float,float) r4.z, r1.xyww, t1.yzxw +mul r0.z, r0.z, l(255.000000) +round_ne r0.z, r0.z +ftoi r0.z, r0.z +ieq r5.xy, r0.zzzz, l(4, 2, 0, 0) +if_nz r5.x + ld_indexable(texture2d)(float,float,float,float) r1.xy, r1.xyzw, t5.xyzw + mad r1.zw, r2.xxxy, l(0.000000, 0.000000, 4.000000, 4.000000), l(0.000000, 0.000000, -2.000000, -2.000000) + dp2 r0.w, r1.zwzz, r1.zwzz + mad r6.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r6.z, l(0.000000) + sqrt r0.w, r0.w + mul r6.xy, r0.wwww, r1.zwzz + dp3 r0.w, r6.xywx, r6.xywx + rsq r0.w, r0.w + mul r6.xyz, r0.wwww, r6.xywx + dp2 r0.w, r1.xyxx, l(65280.000000, 255.000000, 0.000000, 0.000000) + round_ne r0.w, r0.w + mul r1.x, r0.w, l(0.031250) + round_z r1.x, r1.x + mad r7.z, r0.w, l(0.031250), -r1.x + mul r0.w, r1.x, l(0.015625) + round_z r7.x, r0.w + mad r7.y, r1.x, l(0.015625), -r7.x + mul r1.xyz, r7.xyzx, l(0.032258, 1.015873, 1.032258, 0.000000) + mul r7.xyz, r3.wwww, r3.wwww + mov r0.w, l(0) +else + mad r2.xyz, r2.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) + dp3 r1.w, r2.xyzx, r2.xyzx + rsq r1.w, r1.w + mul r6.xyz, r1.wwww, r2.xyzx + mul r7.xyzw, r3.xyzw, r3.xyzw + ieq r1.w, r0.z, l(5) + if_z r1.w + ieq r0.z, r0.z, l(1) + if_nz r0.z + mul r7.xyz, r7.xyzx, r7.wwww + else + mov r7.xyz, r7.wwww + endif + endif + lt r0.z, l(0.000000), r7.x + and r0.w, r2.w, r0.z + mov r1.xyz, l(0,0,0,0) +endif +mad r0.xy, r0.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r4.xy, r0.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000) +mov r4.w, l(1.000000) +dp4 r0.x, r4.xyzw, cb0[1].xyzw +dp4 r0.y, r4.xyzw, cb0[2].xyzw +dp4 r0.z, r4.xyzw, cb0[3].xyzw +dp4 r1.w, r4.xyzw, cb0[4].xyzw +div r1.w, l(1.000000, 1.000000, 1.000000, 1.000000), r1.w +mul r0.xyz, r0.xyzx, r1.wwww +mul r2.xyz, r0.yyyy, cb0[8].xyzx +mad r2.xyz, cb0[7].xyzx, r0.xxxx, r2.xyzx +mad r2.xyz, cb0[9].xyzx, r0.zzzz, r2.xyzx +add r2.xyz, r2.xyzx, cb0[10].xyzx +add r3.xyz, |r2.xyzx|, -cb0[11].xyzx +mad_sat r3.xyz, -r3.xyzx, cb0[12].xyzx, l(1.000000, 1.000000, 1.000000, 0.000000) +min r1.w, r3.y, r3.x +min r1.w, r3.z, r1.w +dp3 r2.w, r0.xyzx, r0.xyzx +rsq r2.w, r2.w +mul r0.xyz, r0.xyzx, r2.wwww +dp3 r2.w, r0.xyzx, r6.xyzx +add r2.w, r2.w, r2.w +mad r0.xyz, r6.xyzx, -r2.wwww, r0.xyzx +add r3.xy, -r2.xzxx, cb0[11].xzxx +add r3.zw, -r2.xxxz, -cb0[11].xxxz +lt r4.xy, l(0.000000, 0.000000, 0.000000, 0.000000), r0.xzxx +movc r3.xy, r4.xyxx, r3.xyxx, r3.zwzz +div r3.xy, r3.xyxx, r0.xzxx +min r2.w, r3.y, r3.x +mad r0.xyz, r0.xyzx, r2.wwww, r2.xyzx +ftoi r2.x, cb0[5].x +round_z r2.y, cb0[5].x +mad r0.w, -r0.w, l(15.000000), r2.y +add r0.w, r0.w, l(5.000000) +iadd r2.x, r2.x, l(-1) +itof r2.x, r2.x +max r0.w, r0.w, l(0.000000) +min r0.w, r2.x, r0.w +sample_l_indexable(texturecube)(float,float,float,float) r3.xyz, r0.xyzx, t0.xyzw, s0, r0.w +mul r3.xyz, r7.xyzx, r3.xyzx +mul r3.xyz, r1.wwww, r3.xyzx +mul r3.xyz, r3.xyzx, cb0[12].wwww +if_nz r5.x + add r0.w, r2.y, l(5.000000) + max r0.w, r0.w, l(0.000000) + min r0.w, r2.x, r0.w + sample_l_indexable(texturecube)(float,float,float,float) r0.xyz, r0.xyzx, t0.xyzw, s0, r0.w + mul r0.xyz, r1.xyzx, r0.xyzx + mul r0.xyz, r1.wwww, r0.xyzx + mad r0.xyz, r0.xyzx, cb0[12].wwww, r3.xyzx + mul r3.xyz, r0.xyzx, l(0.150000, 0.150000, 0.150000, 0.000000) +endif +movc r0.x, r5.y, l(0), l(1.000000) +mul o0.xyz, r0.xxxx, r3.xyzx +mov o1.xyz, r3.xyzx +mov o1.w, l(0) +mov o0.w, l(0) +ret +// Approximately 110 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/DragonAge/ShaderFixes/370812edcce93f60-ps_replace.txt b/DragonAge/ShaderFixes/370812edcce93f60-ps_replace.txt new file mode 100644 index 000000000..b5feb5e53 --- /dev/null +++ b/DragonAge/ShaderFixes/370812edcce93f60-ps_replace.txt @@ -0,0 +1,291 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2D g_depthTexture : register(t4); +Texture2D g_gbufferTexture0 : register(t5); +Texture2D g_gbufferTexture2 : register(t6); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.xyz = g_gbufferTexture0.Load(r0.xyw).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.xy * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.xyz = r1.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.xyz, r1.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r1.xyz * r0.www; + } + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r1.w = r1.z; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r2.z; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r1.w; + r4.z = r3.x + r1.w; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r1.w = r3.x; + r2.w = abs(r2.w); + } + } else { + r1.w = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyz = r1.www * r0.xxx; + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + o0.w = min(r0.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/39542e3b836539c5-vs_replace.txt b/DragonAge/ShaderFixes/39542e3b836539c5-vs_replace.txt new file mode 100644 index 000000000..e86e0e11d --- /dev/null +++ b/DragonAge/ShaderFixes/39542e3b836539c5-vs_replace.txt @@ -0,0 +1,250 @@ +//Snow decals +cbuffer viewConstants : register(b2) +{ + float time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +Texture2D StereoParams : register(t125); + +void main( + float3 v0 : TEXCOORD0, + float4 v1 : TEXCOORD1, + float4 v2 : TEXCOORD2, + float4 v3 : TEXCOORD3, + float4 v4 : TEXCOORD4, + float4 v5 : TEXCOORD5, + out float4 o0 : SV_Position0, + out float4 o1 : TEXCOORD0, + out float4 o2 : TEXCOORD1, + out float4 o3 : TEXCOORD2, + out float4 o4 : TEXCOORD3, + out float4 o5 : TEXCOORD4, + out float4 o6 : TEXCOORD5) +{ + float4 r0; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = crViewProjMatrix._m00_m10_m20_m30; +a2 = crViewProjMatrix._m01_m11_m21_m31; +a3 = crViewProjMatrix._m02_m12_m22_m32; +a4 = crViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + r0.xyz = -cameraPos.xyz + v0.xyz; + r0.w = 1.000000000e+000; + +float4 r10; + + r10.x = dot(r0.xyzw, crViewProjMatrix._m00_m10_m20_m30); + r10.y = dot(r0.xyzw, crViewProjMatrix._m01_m11_m21_m31); + r10.z = dot(r0.xyzw, crViewProjMatrix._m02_m12_m22_m32); + r10.w = dot(r0.xyzw, crViewProjMatrix._m03_m13_m23_m33); + +float4 r20; +r20.xyzw = r10.xyzw; + +float4 stereo = StereoParams.Load(0); +r20.x += stereo.x * (r20.w - stereo.y); + +//BACKTRANSFORM to r11 (a shifted r0) +float4 r11; + + r11.x = dot(r20.xyzw, b1.xyzw); + r11.y = dot(r20.xyzw, b2.xyzw); + r11.z = dot(r20.xyzw, b3.xyzw); + r11.w = dot(r20.xyzw, b4.xyzw); + +float4 r25; +r25.xyz = r11.xyz + cameraPos.xyz; + + +o0.xyzw = r10.xyzw; //unshifted + + o1.xyzw = v5.xyzw; + o2.xyzw = v1.xyzw; + o3.xyzw = v2.xyzw; + o4.xyzw = v3.xyzw; + o5.xyzw = v4.xyzw; + o6.xyz = r25.xyz; //v0.xyz; //SHifted + o6.w = 0.000000000e+000; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer viewConstants +// { +// +// float1 time; // Offset: 0 Size: 4 [unused] +// float3 vc_pad0_; // Offset: 4 Size: 12 [unused] +// float4 screenSize; // Offset: 16 Size: 16 [unused] +// float3 debugNonFiniteColor; // Offset: 32 Size: 12 [unused] +// float1 vc_pad2_; // Offset: 44 Size: 4 [unused] +// float4x4 viewMatrix; // Offset: 48 Size: 64 [unused] +// float4x4 projMatrix; // Offset: 112 Size: 64 [unused] +// float4x4 viewProjMatrix; // Offset: 176 Size: 64 [unused] +// float4x4 crViewProjMatrix; // Offset: 240 Size: 64 +// float4 projectionKxKyKzKw; // Offset: 304 Size: 16 [unused] +// float3 cameraPos; // Offset: 320 Size: 12 +// float1 vc_pad8_; // Offset: 332 Size: 4 [unused] +// float3 transparentStartAndSlopeAndClamp;// Offset: 336 Size: 12 [unused] +// float1 vc_pad9_; // Offset: 348 Size: 4 [unused] +// float4 transparentCurve; // Offset: 352 Size: 16 [unused] +// float4 exposureMultipliers; // Offset: 368 Size: 16 [unused] +// float4 fogParams; // Offset: 384 Size: 16 [unused] +// float4 fogForwardScatteringParamsGradientScaleFogEnable;// Offset: 400 Size: 16 [unused] +// float4 fogForwardScatteringColorPresence;// Offset: 416 Size: 16 [unused] +// float4 fogCoefficients; // Offset: 432 Size: 16 [unused] +// float4 fogColorCoefficients; // Offset: 448 Size: 16 [unused] +// float4 fogColor; // Offset: 464 Size: 16 [unused] +// float4 fogStartDistance; // Offset: 480 Size: 16 [unused] +// float4 fogHeightFogCoefficients; // Offset: 496 Size: 16 [unused] +// float4 fogMiscParam; // Offset: 512 Size: 16 [unused] +// float2 fogEnabledMode; // Offset: 528 Size: 8 [unused] +// float2 vc_pad10_; // Offset: 536 Size: 8 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// viewConstants cbuffer NA NA 2 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// TEXCOORD 0 xyz 0 NONE float xyz +// TEXCOORD 1 xyzw 1 NONE float xyzw +// TEXCOORD 2 xyzw 2 NONE float xyzw +// TEXCOORD 3 xyzw 3 NONE float xyzw +// TEXCOORD 4 xyzw 4 NONE float xyzw +// TEXCOORD 5 xyzw 5 NONE float xyzw +// +// +// 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 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float xyzw +// TEXCOORD 3 xyzw 4 NONE float xyzw +// TEXCOORD 4 xyzw 5 NONE float xyzw +// TEXCOORD 5 xyzw 6 NONE float xyzw +// +vs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb2[21], immediateIndexed +dcl_input v0.xyz +dcl_input v1.xyzw +dcl_input v2.xyzw +dcl_input v3.xyzw +dcl_input v4.xyzw +dcl_input v5.xyzw +dcl_output_siv o0.xyzw, position +dcl_output o1.xyzw +dcl_output o2.xyzw +dcl_output o3.xyzw +dcl_output o4.xyzw +dcl_output o5.xyzw +dcl_output o6.xyzw +dcl_temps 1 +add r0.xyz, v0.xyzx, -cb2[20].xyzx +mov r0.w, l(1.000000) +dp4 o0.x, r0.xyzw, cb2[15].xyzw +dp4 o0.y, r0.xyzw, cb2[16].xyzw +dp4 o0.z, r0.xyzw, cb2[17].xyzw +dp4 o0.w, r0.xyzw, cb2[18].xyzw +mov o1.xyzw, v5.xyzw +mov o2.xyzw, v1.xyzw +mov o3.xyzw, v2.xyzw +mov o4.xyzw, v3.xyzw +mov o5.xyzw, v4.xyzw +mov o6.xyz, v0.xyzx +mov o6.w, l(0) +ret +// Approximately 14 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ + \ No newline at end of file diff --git a/DragonAge/ShaderFixes/3a204b3af89fd2ac-ps_replace.txt b/DragonAge/ShaderFixes/3a204b3af89fd2ac-ps_replace.txt new file mode 100644 index 000000000..6c84ab69b --- /dev/null +++ b/DragonAge/ShaderFixes/3a204b3af89fd2ac-ps_replace.txt @@ -0,0 +1,125 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r2.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r2.xy, r1.x).x; + r0.y = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.y = 1.000000000e+000 + -r0.y; + o0.xyzw = r0.xxxx * r0.yyyy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/3abc0ddd6df9b9d0-ps_replace.txt b/DragonAge/ShaderFixes/3abc0ddd6df9b9d0-ps_replace.txt new file mode 100644 index 000000000..276816f19 --- /dev/null +++ b/DragonAge/ShaderFixes/3abc0ddd6df9b9d0-ps_replace.txt @@ -0,0 +1,538 @@ +//Local lights +cbuffer _Globals : register(b0) +{ + float2 g_invScreenSize : packoffset(c0); + float4x4 g_invViewProjMatrix : packoffset(c1); + float g_subRolloff : packoffset(c5); + float4 g_exposureMultipliers : packoffset(c6); +} + +//Added by Mike +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +Texture2D g_depthTexture : register(t0); +Texture2D g_gbufferTexture0 : register(t1); +Texture2D g_gbufferTexture1 : register(t2); +Texture2D g_gbufferTexture2 : register(t3); +Texture2D g_gbufferTexture4 : register(t4); + +Texture2D StereoParams : register(t125); +Texture1D IniParams : register(t120); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + out float4 o0 : SV_Target0, + out float4 o1 : SV_Target1) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + r0.xy = g_invScreenSize.xy * v0.xy; + r1.xy = (int2)v0.xy; + r1.zw = float2(0.000000e+000,0.000000e+000); + r2.xyzw = g_gbufferTexture0.Load(r1.xyw).xyzw; + r3.xyzw = g_gbufferTexture1.Load(r1.xyw).xyzw; + r0.z = g_gbufferTexture2.Load(r1.xyw).w; + r4.z = g_depthTexture.Load(r1.xyw).x; + r0.z = 2.550000000e+002 * r0.z; + r0.z = round(r0.z); + r0.z = (int)r0.z; + r5.xy = r0.zz == float2(4.000000e+000,2.000000e+000); + if (r5.x != 0) { + r1.xyzw = g_gbufferTexture4.Load(r1.xyz).xyzw; + r6.xyzw = r2.xyzw * float4(4.000000e+000,4.000000e+000,4.000000e+000,4.000000e+000) + float4(-2.000000e+000,-2.000000e+000,-2.000000e+000,-2.000000e+000); + r0.w = dot(r6.xy, r6.xy); + r7.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r7.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r7.xy = r6.xy * r0.ww; + r0.w = dot(r7.xyw, r7.xyw); + r0.w = rsqrt(r0.w); + r7.xyz = r7.xyw * r0.www; + r0.w = dot(r6.zw, r6.zw); + r8.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r8.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r8.xy = r6.zw * r0.ww; + r0.w = dot(r8.xyw, r8.xyw); + r0.w = rsqrt(r0.w); + r6.xyz = r8.xyw * r0.www; + r0.w = dot(r1.xy, float2(6.528000e+004,2.550000e+002)); + r0.w = round(r0.w); + r1.x = 3.125000000e-002 * r0.w; + r1.x = trunc(r1.x); + r8.z = r0.w * 3.125000000e-002 + -r1.x; + r0.w = 1.562500000e-002 * r1.x; + r8.x = trunc(r0.w); + r8.y = r1.x * 1.562500000e-002 + -r8.x; + r8.xyz = float3(3.225806e-002,1.015873e+000,1.032258e+000) * r8.xyz; + r1.xy = float2(2.550000e+002,2.550000e+002) * r1.zw; + r1.xy = round(r1.xy); + r1.zw = float2(6.250000e-002,6.250000e-002) * r1.xy; + r9.xy = trunc(r1.zw); + r9.zw = r1.xy * float2(6.250000e-002,6.250000e-002) + -r9.xy; + r1.xw = float2(1.066667e+000,6.666667e-002) * r9.wy; + r1.yz = r9.xz * float2(8.000001e-001,1.280000e+001) + float2(1.000000e+000,1.000000e+000); + r1.yz = exp2(r1.yz); + r1.yz = r1.yz * float2(1.443000e+000,1.443000e+000) + float2(1.443000e+000,1.443000e+000); + r9.xyzw = r3.xyzw * r3.xyzw; + r10.xyz = r9.www; + } else { + r2.xyz = r2.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r2.xyz, r2.xyz); + r0.w = rsqrt(r0.w); + r7.xyz = r2.xyz * r0.www; + r3.xyzw = r3.xyzw * r3.xyzw; + r0.w = r0.z == 5; + if (r0.w != 0) { + r9.xyz = r3.xyz * r3.www; + r10.xyz = r3.xyz; + } else { + r0.z = r0.z == 1; + if (r0.z != 0) { + r10.xyz = r3.www * r3.xyz; + } else { + r10.xyz = r3.www; + } + r9.xyz = r3.xyz; + } + r0.z = 0.000000000e+000 < r10.x; + r0.z = r0.z ? r2.w : 0; + r0.z = r0.z * 1.200000000e+001 + 1.000000000e+000; + r0.z = exp2(r0.z); + r1.y = r0.z * 1.442999959e+000 + 1.442999959e+000; + r6.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r1.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r8.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + } + r0.xy = r0.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r4.xy = float2(1.000000e+000,-1.000000e+000) * r0.xy; + r4.w = 1.000000000e+000; + +// float4 stereo = StereoParams.Load(0); +// float depth, C; +// depth = projMatrix._m22 + projMatrix._m32 / r4.z; +// r4.x += stereo.x * (-depth - stereo.y)*17; //VERY GOOD FIT OVER ALL Z, BUT VARIES WITH C (need a different, multiplier) +// depth = projMatrix._m22 + projMatrix._m32/r4.z; +// C = projMatrix._m22 + projMatrix._m32/stereo.y; +// r4.x -= stereo.x * (-depth - C)*0.38; +// r4.x -= stereo.x * (-depth - stereo.y)/projMatrix._m00; +// r4.x += stereo.x * (-r4.w - stereo.y+2)*0.5*r4.z*projMatrix._m00; +// r4.x += stereo.x * (r4.z - stereo.y - 1.0)*projMatrix._m00; +// r4.x += stereo.x *projMatrix._m00; + + r0.x = dot(r4.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r0.y = dot(r4.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r0.z = dot(r4.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.w = dot(r4.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + + r0.w = 1.000000e+000 / r0.w; + r2.xyz = r0.xyz * r0.www; + +float4 r25, r23; +r23.xyzw = r2.xyzw; + +r23.w = 1.0; +r25.x = dot(r23.xyzw, b1.xyzw); +r25.y = dot(r23.xyzw, b2.xyzw); +r25.z = dot(r23.xyzw, b3.xyzw); +r25.w = dot(r23.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r23.x = dot(r25.xyzw, a1.xyzw); +r23.y = dot(r25.xyzw, a2.xyzw); +r23.z = dot(r25.xyzw, a3.xyzw); +r23.w = dot(r25.xyzw, a4.xyzw); + + r2.w = dot(r23.xyz, r23.xyz); + r2.w = rsqrt(r2.w); + r2.xyz = r23.xyz * r2.www; + + +r0.xyz = -r23.xyz + v1.xyz; + + // r0.xyz = -r0.xyz * r0.www + v1.xyz; // NEED TO CORRECT HERE AS WELL + r0.w = dot(r0.xyz, r0.xyz); + r2.w = rsqrt(r0.w); + r3.xyz = r2.www * r0.xyz; + r0.w = v3.w + r0.w; + r0.w = 1.000000e+000 / r0.w; + r0.w = v1.w + r0.w; + r0.w = max(r0.w, 0.000000000e+000); + r3.x = dot(r7.xyz, r3.xyz); + r3.y = saturate(r3.x); + r3.yzw = v2.xyz * r3.yyy; + r3.yzw = r3.yzw * r0.www; + if (r5.x != 0) { + r1.x = saturate(r1.x); + r3.x = r1.x * 5.000000000e-001 + r3.x; + r1.x = r1.x * 5.000000000e-001 + 1.000000000e+000; + r1.x = saturate(r3.x / r1.x); + r4.xyz = v2.xyz * r1.xxx; + r4.xyz = r4.xyz * r0.www; + r11.xyz = -r7.xyz * r1.www + r6.xyz; + r0.w = dot(r11.xyz, r11.xyz); + r0.w = rsqrt(r0.w); + r11.xyz = r11.xyz * r0.www; + r12.xyz = r0.xyz * r2.www + -r2.xyz; + r0.w = dot(r12.xyz, r12.xyz); + r0.w = rsqrt(r0.w); + r12.xyz = r12.xyz * r0.www; + r0.w = dot(r6.xyz, r12.xyz); + r0.w = -r0.w * r0.w + 1.000000000e+000; + r0.w = max(r0.w, 0.000000000e+000); + r0.w = sqrt(r0.w); + r0.w = log2(r0.w); + r0.w = r1.y * r0.w; + r0.w = exp2(r0.w); + r1.x = dot(r11.xyz, r12.xyz); + r1.x = -r1.x * r1.x + 1.000000000e+000; + r1.x = max(r1.x, 0.000000000e+000); + r1.x = sqrt(r1.x); + r1.x = log2(r1.x); + r1.x = r1.z * r1.x; + r1.x = exp2(r1.x); + r1.xzw = r1.xxx * r8.xyz; + r1.xzw = r0.www * r10.xxx + r1.xzw; + r1.xzw = r3.yzw * r1.xzw; + r1.xzw = v2.www * r1.xzw; + r1.xzw = float3(1.500000e-001,1.500000e-001,1.500000e-001) * r1.xzw; + r3.yzw = r4.xyz; + } else { + r0.xyz = r0.xyz * r2.www + -r2.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r0.x = saturate(dot(r7.xyz, r0.xyz)); + r0.y = r1.y * 8.662509918e-002 + 8.750000000e-001; + r0.x = r0.x * r1.y + -r1.y; + r0.x = exp2(r0.x); + r0.x = r0.y * r0.x; + r0.xyz = r3.yzw * r0.xxx; + r1.xzw = v2.www * r0.xyz; + } + if (r5.x == 0) { + r1.xzw = r1.xzw * r10.xyz; + } + r0.x = r5.y ? 0.000000000e+000 : 1.000000000e+000; + r0.xyz = r1.xzw * r0.xxx; + o0.xyz = r3.yzw * r9.xyz + r0.xyz; + o1.xyz = r1.xzw; + o1.w = 0.000000000e+000; + o0.w = 0.000000000e+000; + + // o0=0; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer $Globals +// { +// +// float2 g_invScreenSize; // Offset: 0 Size: 8 +// float4x4 g_invViewProjMatrix; // Offset: 16 Size: 64 +// float g_subRolloff; // Offset: 80 Size: 4 [unused] +// float4 g_exposureMultipliers; // Offset: 96 Size: 16 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// g_depthTexture texture float4 2d 0 1 +// g_gbufferTexture0 texture float4 2d 1 1 +// g_gbufferTexture1 texture float4 2d 2 1 +// g_gbufferTexture2 texture float4 2d 3 1 +// g_gbufferTexture4 texture float4 2d 4 1 +// $Globals cbuffer NA NA 0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float xyzw +// TEXCOORD 1 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float w +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// SV_Target 1 xyzw 1 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb0[5], immediateIndexed +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (float,float,float,float) t2 +dcl_resource_texture2d (float,float,float,float) t3 +dcl_resource_texture2d (float,float,float,float) t4 +dcl_input_ps_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.xyzw +dcl_input_ps linear v2.xyzw +dcl_input_ps linear v3.w +dcl_output o0.xyzw +dcl_output o1.xyzw +dcl_temps 13 +mul r0.xy, v0.xyxx, cb0[0].xyxx +ftoi r1.xy, v0.xyxx +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r1.xyww, t1.xyzw +ld_indexable(texture2d)(float,float,float,float) r3.xyzw, r1.xyww, t2.xyzw +ld_indexable(texture2d)(float,float,float,float) r0.z, r1.xyww, t3.xywz +ld_indexable(texture2d)(float,float,float,float) r4.z, r1.xyww, t0.yzxw +mul r0.z, r0.z, l(255.000000) +round_ne r0.z, r0.z +ftoi r0.z, r0.z +ieq r5.xy, r0.zzzz, l(4, 2, 0, 0) +if_nz r5.x + ld_indexable(texture2d)(float,float,float,float) r1.xyzw, r1.xyzw, t4.xyzw + mad r6.xyzw, r2.xyzw, l(4.000000, 4.000000, 4.000000, 4.000000), l(-2.000000, -2.000000, -2.000000, -2.000000) + dp2 r0.w, r6.xyxx, r6.xyxx + mad r7.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r7.z, l(0.000000) + sqrt r0.w, r0.w + mul r7.xy, r0.wwww, r6.xyxx + dp3 r0.w, r7.xywx, r7.xywx + rsq r0.w, r0.w + mul r7.xyz, r0.wwww, r7.xywx + dp2 r0.w, r6.zwzz, r6.zwzz + mad r8.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r8.z, l(0.000000) + sqrt r0.w, r0.w + mul r8.xy, r0.wwww, r6.zwzz + dp3 r0.w, r8.xywx, r8.xywx + rsq r0.w, r0.w + mul r6.xyz, r0.wwww, r8.xywx + dp2 r0.w, r1.xyxx, l(65280.000000, 255.000000, 0.000000, 0.000000) + round_ne r0.w, r0.w + mul r1.x, r0.w, l(0.031250) + round_z r1.x, r1.x + mad r8.z, r0.w, l(0.031250), -r1.x + mul r0.w, r1.x, l(0.015625) + round_z r8.x, r0.w + mad r8.y, r1.x, l(0.015625), -r8.x + mul r8.xyz, r8.xyzx, l(0.032258, 1.015873, 1.032258, 0.000000) + mul r1.xy, r1.zwzz, l(255.000000, 255.000000, 0.000000, 0.000000) + round_ne r1.xy, r1.xyxx + mul r1.zw, r1.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500) + round_z r9.xy, r1.zwzz + mad r9.zw, r1.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500), -r9.xxxy + mul r1.xw, r9.wwwy, l(1.066667, 0.000000, 0.000000, 0.066667) + mad r1.yz, r9.xxzx, l(0.000000, 0.800000, 12.800001, 0.000000), l(0.000000, 1.000000, 1.000000, 0.000000) + exp r1.yz, r1.yyzy + mad r1.yz, r1.yyzy, l(0.000000, 1.443000, 1.443000, 0.000000), l(0.000000, 1.443000, 1.443000, 0.000000) + mul r9.xyzw, r3.xyzw, r3.xyzw + mov r10.xyz, r9.wwww +else + mad r2.xyz, r2.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) + dp3 r0.w, r2.xyzx, r2.xyzx + rsq r0.w, r0.w + mul r7.xyz, r0.wwww, r2.xyzx + mul r3.xyzw, r3.xyzw, r3.xyzw + ieq r0.w, r0.z, l(5) + if_nz r0.w + mul r9.xyz, r3.wwww, r3.xyzx + mov r10.xyz, r3.xyzx + else + ieq r0.z, r0.z, l(1) + if_nz r0.z + mul r10.xyz, r3.xyzx, r3.wwww + else + mov r10.xyz, r3.wwww + endif + mov r9.xyz, r3.xyzx + endif + lt r0.z, l(0.000000), r10.x + and r0.z, r2.w, r0.z + mad r0.z, r0.z, l(12.000000), l(1.000000) + exp r0.z, r0.z + mad r1.y, r0.z, l(1.443000), l(1.443000) + mov r6.xyz, l(0,0,0,0) + mov r1.xzw, l(0,0,0,0) + mov r8.xyz, l(0,0,0,0) +endif +mad r0.xy, r0.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r4.xy, r0.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000) +mov r4.w, l(1.000000) +dp4 r0.x, r4.xyzw, cb0[1].xyzw +dp4 r0.y, r4.xyzw, cb0[2].xyzw +dp4 r0.z, r4.xyzw, cb0[3].xyzw +dp4 r0.w, r4.xyzw, cb0[4].xyzw +div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w +mul r2.xyz, r0.wwww, r0.xyzx +dp3 r2.w, r2.xyzx, r2.xyzx +rsq r2.w, r2.w +mul r2.xyz, r2.wwww, r2.xyzx +mad r0.xyz, -r0.xyzx, r0.wwww, v1.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r2.w, r0.w +mul r3.xyz, r0.xyzx, r2.wwww +add r0.w, r0.w, v3.w +div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w +add r0.w, r0.w, v1.w +max r0.w, r0.w, l(0.000000) +dp3 r3.x, r7.xyzx, r3.xyzx +mov_sat r3.y, r3.x +mul r3.yzw, r3.yyyy, v2.xxyz +mul r3.yzw, r0.wwww, r3.yyzw +if_nz r5.x + mov_sat r1.x, r1.x + mad r3.x, r1.x, l(0.500000), r3.x + mad r1.x, r1.x, l(0.500000), l(1.000000) + div_sat r1.x, r3.x, r1.x + mul r4.xyz, r1.xxxx, v2.xyzx + mul r4.xyz, r0.wwww, r4.xyzx + mad r11.xyz, -r7.xyzx, r1.wwww, r6.xyzx + dp3 r0.w, r11.xyzx, r11.xyzx + rsq r0.w, r0.w + mul r11.xyz, r0.wwww, r11.xyzx + mad r12.xyz, r0.xyzx, r2.wwww, -r2.xyzx + dp3 r0.w, r12.xyzx, r12.xyzx + rsq r0.w, r0.w + mul r12.xyz, r0.wwww, r12.xyzx + dp3 r0.w, r6.xyzx, r12.xyzx + mad r0.w, -r0.w, r0.w, l(1.000000) + max r0.w, r0.w, l(0.000000) + sqrt r0.w, r0.w + log r0.w, r0.w + mul r0.w, r0.w, r1.y + exp r0.w, r0.w + dp3 r1.x, r11.xyzx, r12.xyzx + mad r1.x, -r1.x, r1.x, l(1.000000) + max r1.x, r1.x, l(0.000000) + sqrt r1.x, r1.x + log r1.x, r1.x + mul r1.x, r1.x, r1.z + exp r1.x, r1.x + mul r1.xzw, r8.xxyz, r1.xxxx + mad r1.xzw, r0.wwww, r10.xxxx, r1.xxzw + mul r1.xzw, r1.xxzw, r3.yyzw + mul r1.xzw, r1.xxzw, v2.wwww + mul r1.xzw, r1.xxzw, l(0.150000, 0.000000, 0.150000, 0.150000) + mov r3.yzw, r4.xxyz +else + mad r0.xyz, r0.xyzx, r2.wwww, -r2.xyzx + dp3 r0.w, r0.xyzx, r0.xyzx + rsq r0.w, r0.w + mul r0.xyz, r0.wwww, r0.xyzx + dp3_sat r0.x, r7.xyzx, r0.xyzx + mad r0.y, r1.y, l(0.086625), l(0.875000) + mad r0.x, r0.x, r1.y, -r1.y + exp r0.x, r0.x + mul r0.x, r0.x, r0.y + mul r0.xyz, r0.xxxx, r3.yzwy + mul r1.xzw, r0.xxyz, v2.wwww +endif +if_z r5.x + mul r1.xzw, r10.xxyz, r1.xxzw +endif +movc r0.x, r5.y, l(0), l(1.000000) +mul r0.xyz, r0.xxxx, r1.xzwx +mad o0.xyz, r3.yzwy, r9.xyzx, r0.xyzx +mov o1.xyz, r1.xzwx +mov o1.w, l(0) +mov o0.w, l(0) +ret +// Approximately 160 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ + \ No newline at end of file diff --git a/DragonAge/ShaderFixes/3b458242e755a369-ps_replace.txt b/DragonAge/ShaderFixes/3b458242e755a369-ps_replace.txt new file mode 100644 index 000000000..3b6ee3963 --- /dev/null +++ b/DragonAge/ShaderFixes/3b458242e755a369-ps_replace.txt @@ -0,0 +1,212 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2DMS g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.x = g_shadowmapDimensions.x; + r0.yz = r0.xx * r1.xy + float2(5.000000e-001,5.000000e-001); + r0.x = 1.000000e+000 / r0.x; + r2.xy = floor(r0.yz); + r0.yz = -r2.xy + r0.yz; + r0.xw = r2.xy * r0.xx; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,0)).xyzw; + r1.w = r0.y * 2.000000000e+000 + 2.000000000e+000; + r3.xy = float2(4.000000e+000,1.000000e+000) + -r0.yz; + r4.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,0)).xyzw; + r5.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.yyyy; + r6.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.yyyy; + r3.z = -r0.y * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,0)).xyzw; + r3.w = r0.y * -2.000000000e+000 + 4.000000000e+000; + r8.xy = r7.wx * r3.zz; + r8.xy = r7.zy * r3.ww + r8.xy; + r3.w = r7.z * r6.z + r8.y; + r3.w = r7.w * r3.z + r3.w; + r3.w = r4.y * r5.y + r3.w; + r3.w = r4.x * r6.w + r3.w; + r3.w = r4.z * r5.z + r3.w; + r3.w = r4.w * r3.x + r3.w; + r2.y = dot(r2.yy, r0.yy); + r3.w = r2.y + r3.w; + r3.w = r2.x * r1.w + r3.w; + r2.z = dot(r2.zz, r0.yy); + r3.w = r2.z + r3.w; + r9.y = r2.w * r5.w + r3.w; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,-2)).xyzw; + r11.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,-2)).xyzw; + r3.w = r11.y * r6.z + r8.x; + r3.w = r11.x * r3.z + r3.w; + r8.xyzw = r11.wzxy * r6.xyxy; + r7.zw = r8.xz + r8.yw; + r7.zw = r10.zy * float2(2.000000e+000,2.000000e+000) + r7.zw; + r7.zw = r10.wx * float2(2.000000e+000,2.000000e+000) + r7.zw; + r3.w = r4.z * r5.y + r3.w; + r3.w = r4.w * r6.w + r3.w; + r3.w = r10.y * r5.z + r3.w; + r3.w = r10.x * r3.x + r3.w; + r2.z = r3.w + r2.z; + r1.w = r2.w * r1.w + r2.z; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,-2)).xyzw; + r2.z = r8.y * r0.y; + r1.w = r2.z * 2.000000000e+000 + r1.w; + r9.x = r8.x * r5.w + r1.w; + r2.zw = r8.zy * r0.yy + r7.zw; + r2.zw = r8.wx * r5.xx + r2.zw; + r2.zw = r2.zw + r9.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r6.xyxy; + r4.zw = r9.xz + r9.yw; + r1.w = r8.z * r6.z + r4.w; + r3.w = r7.y * r6.z + r4.z; + r3.w = r7.x * r3.z + r3.w; + r1.w = r8.w * r3.z + r1.w; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,2)).xyzw; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,2)).xyzw; + r8.xyz = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r1.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + r1.xyz = saturate(abs(r8.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.w = r6.y * 2.000000000e+000 + r1.w; + r0.w = r6.x * 2.000000000e+000 + r0.w; + r0.w = r6.z * r5.z + r0.w; + r0.w = r6.w * r3.x + r0.w; + r0.w = r7.y * r0.y + r0.w; + r0.w = r7.x * r5.x + r0.w; + r1.w = r7.z * r0.y; + r0.w = r1.w * 2.000000000e+000 + r0.w; + r6.y = r7.w * r5.w + r0.w; + r0.w = r6.z * 2.000000000e+000 + r3.w; + r0.w = r6.w * 2.000000000e+000 + r0.w; + r0.w = r4.y * r5.z + r0.w; + r0.w = r4.x * r3.x + r0.w; + r0.y = r7.z * r0.y + r0.w; + r0.y = r7.w * r5.x + r0.y; + r0.y = r2.y + r0.y; + r6.x = r2.x * r5.w + r0.y; + r0.yw = r6.xy + r2.zw; + r0.z = r0.w * r0.z; + r0.y = r0.y * r3.y + r0.z; + r0.y = 1.694915257e-002 * r0.y; + o0.xyz = r0.yyy * r0.xxx; + r0.x = min(r1.y, r1.x); + o0.w = min(r1.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/3b92477c509a6f64-ps_replace.txt b/DragonAge/ShaderFixes/3b92477c509a6f64-ps_replace.txt new file mode 100644 index 000000000..70ce56ab0 --- /dev/null +++ b/DragonAge/ShaderFixes/3b92477c509a6f64-ps_replace.txt @@ -0,0 +1,274 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2DMS g_depthTexture : register(t4); +Texture2DMS g_gbufferTexture0 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz,v1.x).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r1.w = r1.z; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r2.z; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r1.w; + r4.z = r3.x + r1.w; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r1.w = r3.x; + r2.w = abs(r2.w); + } + } else { + r1.w = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyz = r1.www * r0.xxx; + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + o0.w = min(r0.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/3ca56f966335ea42-ps_replace.txt b/DragonAge/ShaderFixes/3ca56f966335ea42-ps_replace.txt new file mode 100644 index 000000000..4a871a23e --- /dev/null +++ b/DragonAge/ShaderFixes/3ca56f966335ea42-ps_replace.txt @@ -0,0 +1,133 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2DMS g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r1.xy, r1.z).x; + r0.yzw = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r1.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r1.xy, 0.000000000e+000).x; + r1.x = 1.000000000e+000 + -r1.x; + o0.xyz = r1.xxx * r0.xxx; + r0.xyz = saturate(abs(r0.yzw) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + o0.w = min(r0.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/49535b6271e2ef87-ps_replace.txt b/DragonAge/ShaderFixes/49535b6271e2ef87-ps_replace.txt new file mode 100644 index 000000000..17c3d4461 --- /dev/null +++ b/DragonAge/ShaderFixes/49535b6271e2ef87-ps_replace.txt @@ -0,0 +1,517 @@ +//Magic decal +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +cbuffer externalConstants : register(b1) +{ + float3 external_PerAxisAlpha_XYZ : packoffset(c0); + float1 vc_pad0 : packoffset(c0.w); + float4 external_viewMatrix1 : packoffset(c1); + float4 external_viewMatrix2 : packoffset(c2); + float4 external_viewMatrix3 : packoffset(c3); + float4 external_viewMatrix4 : packoffset(c4); + float3 external_Mask_RGB_Switch : packoffset(c5); + float1 vc_pad5 : packoffset(c5.w); + float4 external_UVDistortPower_Speed_Tile : packoffset(c6); + float external_g_emitterTime : packoffset(c7); + float3 vc_pad7 : packoffset(c7.y); + float3 external_Diff_01_RGB_Switch : packoffset(c8); + float1 vc_pad8 : packoffset(c8.w); + float4 external_ADepthTB_AAngle : packoffset(c9); +} +SamplerState sampler0_s : register(s0); +SamplerState sampler1_s : register(s1); +SamplerState sampler2_s : register(s2); +Texture2D texture_depthBufferTexture : register(t1); +Texture2D texture_normalBufferTexture : register(t2); +Texture2D texture_Mask : register(t3); +Texture2D texture_Diff_01 : register(t4); +Texture2D texture_DistortionClouds : register(t5); + +Texture2D StereoParams : register(t125); +Texture1D IniParams : register(t120); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + float4 v5 : TEXCOORD4, + float4 v6 : TEXCOORD5, + float4 v7 : TEXCOORD6, + float4 v8 : TEXCOORD7, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6; + uint4 bitmask; + r0.xyz = external_viewMatrix2.xyz * v8.yyy; + r0.xyz = external_viewMatrix1.xyz * v8.xxx + r0.xyz; + r0.xyz = external_viewMatrix3.xyz * v8.zzz + r0.xyz; + r0.xyz = external_viewMatrix4.xyz + r0.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r0.xyz = r0.xyz / -r0.zzz; + r1.xy = screenSize.zw * v0.xy; + r0.w = texture_depthBufferTexture.Sample(sampler0_s, r1.xy).x; + r1.xyz = texture_normalBufferTexture.Sample(sampler0_s, r1.xy).xyz; + r1.xyz = r1.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + +float4 r26; +r26.xyz = r0.xyz * r0.www; +r26.w = 1.0; + +float4 stereo = StereoParams.Load(0); +r26.x -= stereo.x * (-r26.z - stereo.y)/projMatrix._m00; +r0.xyz = r26.xyz + -external_viewMatrix4.xyz; + + // r0.xyz = r0.xyz * r0.www + -external_viewMatrix4.xyz; + r2.x = dot(external_viewMatrix1.xyz, r0.xyz); + r2.y = dot(external_viewMatrix2.xyz, r0.xyz); + r2.z = dot(external_viewMatrix3.xyz, r0.xyz); + r2.w = 1.000000000e+000; + r0.z = dot(r2.xyzw, v1.xyzw); + r0.y = dot(r2.xyzw, v2.xyzw); + r0.x = dot(r2.xyzw, v3.xyzw); + r0.w = dot(r2.xyzw, v4.xyzw); + r0.xyz = r0.xyz / r0.www; + r2.xyz = float3(5.000000e-001,5.000000e-001,5.000000e-001) + -abs(-r0.zyx); + r2.xyz = r2.xyz < float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = (int)r2.y | (int)r2.x; + r0.w = (int)r2.z | (int)r0.w; + if (r0.w != 0) discard; + r2.xyz = max(abs(r0.yxy), abs(r0.zzx)); + r2.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) / r2.xyz; + r3.xyz = min(abs(r0.yxy), abs(r0.zzx)); + r2.xyz = r3.xyz * r2.xyz; + r3.xyz = r2.xyz * r2.xyz; + r4.xyz = r3.xyz * float3(2.083510e-002,2.083510e-002,2.083510e-002) + float3(-8.513300e-002,-8.513300e-002,-8.513300e-002); + r4.xyz = r3.xyz * r4.xyz + float3(1.801410e-001,1.801410e-001,1.801410e-001); + r4.xyz = r3.xyz * r4.xyz + float3(-3.302995e-001,-3.302995e-001,-3.302995e-001); + r3.xyz = r3.xyz * r4.xyz + float3(9.998660e-001,9.998660e-001,9.998660e-001); + r4.xyz = r3.xyz * r2.xyz; + r4.xyz = r4.xyz * float3(-2.000000e+000,-2.000000e+000,-2.000000e+000) + float3(1.570796e+000,1.570796e+000,1.570796e+000); + r5.xyz = abs(r0.yxy) < abs(r0.zzx); + r4.xyz = r5.xyz ? r4.xyz : 0; + r2.xyz = r2.xyz * r3.xyz + r4.xyz; + r3.xyz = r0.yxy < -r0.yxy; + r3.xyz = r3.xyz ? float3(-3.141593e+000,-3.141593e+000,-3.141593e+000) : 0; + r2.xyz = r3.xyz + r2.xyz; + r3.xyz = min(r0.yxy, r0.zzx); + r3.xyz = r3.xyz < -r3.xyz; + r4.xyz = max(r0.yxy, r0.zzx); + r4.xyz = r4.xyz >= -r4.xyz; + r3.xyz = r3.xyz ? r4.xyz : 0; + r2.xyz = r3.xyz ? -r2.xyz : r2.xyz; + r2.yzw = external_UVDistortPower_Speed_Tile.www * r2.yxz; + r0.w = dot(r0.yz, r0.yz); + r0.w = sqrt(r0.w); + r2.x = external_g_emitterTime * external_UVDistortPower_Speed_Tile.y + r0.w; + r3.x = external_UVDistortPower_Speed_Tile.z; + r3.y = 1.591549516e-001; + r3.zw = r2.xz * r3.xy + v5.xy; + r4.xyz = texture_DistortionClouds.Sample(sampler2_s, r3.zw).xyw; + r4.x = r4.x * r4.z; + r3.zw = r4.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r3.zw = r3.zw * r0.ww; + r4.xyz = float3(5.000000e-001,5.000000e-001,5.000000e-001) + r0.xyz; + r3.zw = r3.zw * external_UVDistortPower_Speed_Tile.xx + r4.zy; + r5.xyz = texture_Diff_01.Sample(sampler1_s, r3.zw).xyz; + r0.w = saturate(dot(r5.xyz, external_Diff_01_RGB_Switch.xyz)); + r0.w = r0.w * v6.w + -v6.z; + r0.w = log2(r0.w); + r0.w = v6.y * r0.w; + r0.w = exp2(r0.w); + r0.w = v6.x * r0.w; + r5.xyz = texture_Mask.Sample(sampler1_s, r4.zy).xyz; + r1.w = saturate(dot(r5.xyz, external_Mask_RGB_Switch.xyz)); + r0.w = r1.w * r0.w; + r5.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r4.xyz; + r5.xyz = log2(r5.xyz); + r5.xyz = external_ADepthTB_AAngle.yyy * r5.xyz; + r5.xyz = exp2(r5.xyz); + r6.xyz = log2(r4.xyz); + r6.xyz = external_ADepthTB_AAngle.xxx * r6.xyz; + r6.xyz = exp2(r6.xyz); + r5.xyz = r6.xyz + r5.xyz; + r5.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r5.xyz; + r1.w = dot(v3.xyz, v3.xyz); + r1.w = rsqrt(r1.w); + r6.xyz = v3.xyz * r1.www; + r1.w = dot(r1.xyz, r6.xyz); + r1.w = external_ADepthTB_AAngle.z + -abs(-r1.w); + r3.z = external_ADepthTB_AAngle.w + -external_ADepthTB_AAngle.z; + r1.w = r1.w / r3.z; + r1.w = saturate(1.000000000e+000 + r1.w); + r1.w = r5.x * r1.w; + r0.w = r1.w * r0.w; + r0.w = external_PerAxisAlpha_XYZ.z * r0.w; + r0.z = dot(r0.xz, r0.xz); + r0.x = dot(r0.xy, r0.xy); + r0.xy = sqrt(r0.xz); + r2.x = external_g_emitterTime * external_UVDistortPower_Speed_Tile.y + r0.y; + r2.xy = r2.xy * r3.xy + v5.xy; + r6.xyz = texture_DistortionClouds.Sample(sampler2_s, r2.xy).xyw; + r6.x = r6.x * r6.z; + r2.xy = r6.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.yz = r2.xy * r0.yy; + r0.yz = r0.yz * external_UVDistortPower_Speed_Tile.xx + r4.zx; + r6.xyz = texture_Diff_01.Sample(sampler1_s, r0.yz).xyz; + r0.y = saturate(dot(r6.xyz, external_Diff_01_RGB_Switch.xyz)); + r0.y = r0.y * v6.w + -v6.z; + r0.y = log2(r0.y); + r0.y = v6.y * r0.y; + r0.y = exp2(r0.y); + r0.y = v6.x * r0.y; + r6.xyz = texture_Mask.Sample(sampler1_s, r4.zx).xyz; + r0.z = saturate(dot(r6.xyz, external_Mask_RGB_Switch.xyz)); + r0.y = r0.z * r0.y; + r0.z = dot(v2.xyz, v2.xyz); + r0.z = rsqrt(r0.z); + r6.xyz = v2.xyz * r0.zzz; + r0.z = dot(r1.xyz, r6.xyz); + r0.z = external_ADepthTB_AAngle.z + -abs(-r0.z); + r0.z = r0.z / r3.z; + r0.z = saturate(1.000000000e+000 + r0.z); + r0.z = r5.y * r0.z; + r0.y = r0.y * r0.z; + r0.y = r0.y * external_PerAxisAlpha_XYZ.y + r0.w; + r2.z = external_g_emitterTime * external_UVDistortPower_Speed_Tile.y + r0.x; + r0.zw = r2.zw * r3.xy + v5.xy; + r2.xyz = texture_DistortionClouds.Sample(sampler2_s, r0.zw).xyw; + r2.x = r2.x * r2.z; + r0.zw = r2.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xz = r0.xx * r0.zw; + r0.xz = r0.xz * external_UVDistortPower_Speed_Tile.xx + r4.xy; + r2.xyz = texture_Mask.Sample(sampler1_s, r4.xy).xyz; + r0.w = saturate(dot(r2.xyz, external_Mask_RGB_Switch.xyz)); + r2.xyz = texture_Diff_01.Sample(sampler1_s, r0.xz).xyz; + r0.x = saturate(dot(r2.xyz, external_Diff_01_RGB_Switch.xyz)); + r0.x = r0.x * v6.w + -v6.z; + r0.x = log2(r0.x); + r0.x = v6.y * r0.x; + r0.x = exp2(r0.x); + r0.x = v6.x * r0.x; + r0.x = r0.w * r0.x; + r0.z = dot(v1.xyz, v1.xyz); + r0.z = rsqrt(r0.z); + r2.xyz = v1.xyz * r0.zzz; + r0.z = dot(r1.xyz, r2.xyz); + r0.z = external_ADepthTB_AAngle.z + -abs(-r0.z); + r0.z = r0.z / r3.z; + r0.z = saturate(1.000000000e+000 + r0.z); + r0.z = r5.z * r0.z; + r0.x = r0.x * r0.z; + r0.x = saturate(r0.x * external_PerAxisAlpha_XYZ.x + r0.y); + o0.xyz = v7.xyz * r0.xxx; + o0.w = r0.x; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer viewConstants +// { +// +// float1 time; // Offset: 0 Size: 4 [unused] +// float3 vc_pad0_; // Offset: 4 Size: 12 [unused] +// float4 screenSize; // Offset: 16 Size: 16 +// float3 debugNonFiniteColor; // Offset: 32 Size: 12 [unused] +// float1 vc_pad2_; // Offset: 44 Size: 4 [unused] +// float4x4 viewMatrix; // Offset: 48 Size: 64 [unused] +// float4x4 projMatrix; // Offset: 112 Size: 64 [unused] +// float4x4 viewProjMatrix; // Offset: 176 Size: 64 [unused] +// float4x4 crViewProjMatrix; // Offset: 240 Size: 64 [unused] +// float4 projectionKxKyKzKw; // Offset: 304 Size: 16 [unused] +// float3 cameraPos; // Offset: 320 Size: 12 [unused] +// float1 vc_pad8_; // Offset: 332 Size: 4 [unused] +// float3 transparentStartAndSlopeAndClamp;// Offset: 336 Size: 12 [unused] +// float1 vc_pad9_; // Offset: 348 Size: 4 [unused] +// float4 transparentCurve; // Offset: 352 Size: 16 [unused] +// float4 exposureMultipliers; // Offset: 368 Size: 16 [unused] +// float4 fogParams; // Offset: 384 Size: 16 [unused] +// float4 fogForwardScatteringParamsGradientScaleFogEnable;// Offset: 400 Size: 16 [unused] +// float4 fogForwardScatteringColorPresence;// Offset: 416 Size: 16 [unused] +// float4 fogCoefficients; // Offset: 432 Size: 16 [unused] +// float4 fogColorCoefficients; // Offset: 448 Size: 16 [unused] +// float4 fogColor; // Offset: 464 Size: 16 [unused] +// float4 fogStartDistance; // Offset: 480 Size: 16 [unused] +// float4 fogHeightFogCoefficients; // Offset: 496 Size: 16 [unused] +// float4 fogMiscParam; // Offset: 512 Size: 16 [unused] +// float2 fogEnabledMode; // Offset: 528 Size: 8 [unused] +// float2 vc_pad10_; // Offset: 536 Size: 8 [unused] +// +// } +// +// cbuffer externalConstants +// { +// +// float3 external_PerAxisAlpha_XYZ; // Offset: 0 Size: 12 +// float1 vc_pad0; // Offset: 12 Size: 4 [unused] +// float4 external_viewMatrix1; // Offset: 16 Size: 16 +// float4 external_viewMatrix2; // Offset: 32 Size: 16 +// float4 external_viewMatrix3; // Offset: 48 Size: 16 +// float4 external_viewMatrix4; // Offset: 64 Size: 16 +// float3 external_Mask_RGB_Switch; // Offset: 80 Size: 12 +// float1 vc_pad5; // Offset: 92 Size: 4 [unused] +// float4 external_UVDistortPower_Speed_Tile;// Offset: 96 Size: 16 +// float external_g_emitterTime; // Offset: 112 Size: 4 +// float3 vc_pad7; // Offset: 116 Size: 12 [unused] +// float3 external_Diff_01_RGB_Switch;// Offset: 128 Size: 12 +// float1 vc_pad8; // Offset: 140 Size: 4 [unused] +// float4 external_ADepthTB_AAngle; // Offset: 144 Size: 16 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// sampler0 sampler NA NA 0 1 +// sampler1 sampler NA NA 1 1 +// sampler2 sampler NA NA 2 1 +// texture_depthBufferTexture texture float4 2d 1 1 +// texture_normalBufferTexture texture float4 2d 2 1 +// texture_Mask texture float4 2d 3 1 +// texture_Diff_01 texture float4 2d 4 1 +// texture_DistortionClouds texture float4 2d 5 1 +// externalConstants cbuffer NA NA 1 1 +// viewConstants cbuffer NA NA 2 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float xyzw +// TEXCOORD 1 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float xyzw +// TEXCOORD 3 xyzw 4 NONE float xyzw +// TEXCOORD 4 xyzw 5 NONE float xy +// TEXCOORD 5 xyzw 6 NONE float xyzw +// TEXCOORD 6 xyzw 7 NONE float xyz +// TEXCOORD 7 xyzw 8 NONE float xyz +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb2[2], immediateIndexed +dcl_constantbuffer cb1[10], immediateIndexed +dcl_sampler s0, mode_default +dcl_sampler s1, mode_default +dcl_sampler s2, mode_default +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (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_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.xyzw +dcl_input_ps linear v2.xyzw +dcl_input_ps linear v3.xyzw +dcl_input_ps linear v4.xyzw +dcl_input_ps linear v5.xy +dcl_input_ps linear v6.xyzw +dcl_input_ps linear v7.xyz +dcl_input_ps linear v8.xyz +dcl_output o0.xyzw +dcl_temps 7 +mul r0.xyz, v8.yyyy, cb1[2].xyzx +mad r0.xyz, cb1[1].xyzx, v8.xxxx, r0.xyzx +mad r0.xyz, cb1[3].xyzx, v8.zzzz, r0.xyzx +add r0.xyz, r0.xyzx, cb1[4].xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +div r0.xyz, r0.xyzx, -r0.zzzz +mul r1.xy, v0.xyxx, cb2[1].zwzz +sample_indexable(texture2d)(float,float,float,float) r0.w, r1.xyxx, t1.yzwx, s0 +sample_indexable(texture2d)(float,float,float,float) r1.xyz, r1.xyxx, t2.xyzw, s0 +mad r1.xyz, r1.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) +mad r0.xyz, r0.xyzx, r0.wwww, -cb1[4].xyzx +dp3 r2.x, cb1[1].xyzx, r0.xyzx +dp3 r2.y, cb1[2].xyzx, r0.xyzx +dp3 r2.z, cb1[3].xyzx, r0.xyzx +mov r2.w, l(1.000000) +dp4 r0.z, r2.xyzw, v1.xyzw +dp4 r0.y, r2.xyzw, v2.xyzw +dp4 r0.x, r2.xyzw, v3.xyzw +dp4 r0.w, r2.xyzw, v4.xyzw +div r0.xyz, r0.xyzx, r0.wwww +add r2.xyz, -|r0.zyxz|, l(0.500000, 0.500000, 0.500000, 0.000000) +lt r2.xyz, r2.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000) +or r0.w, r2.y, r2.x +or r0.w, r2.z, r0.w +discard_nz r0.w +max r2.xyz, |r0.yxyy|, |r0.zzxz| +div r2.xyz, l(1.000000, 1.000000, 1.000000, 1.000000), r2.xyzx +min r3.xyz, |r0.yxyy|, |r0.zzxz| +mul r2.xyz, r2.xyzx, r3.xyzx +mul r3.xyz, r2.xyzx, r2.xyzx +mad r4.xyz, r3.xyzx, l(0.020835, 0.020835, 0.020835, 0.000000), l(-0.085133, -0.085133, -0.085133, 0.000000) +mad r4.xyz, r3.xyzx, r4.xyzx, l(0.180141, 0.180141, 0.180141, 0.000000) +mad r4.xyz, r3.xyzx, r4.xyzx, l(-0.330299, -0.330299, -0.330299, 0.000000) +mad r3.xyz, r3.xyzx, r4.xyzx, l(0.999866, 0.999866, 0.999866, 0.000000) +mul r4.xyz, r2.xyzx, r3.xyzx +mad r4.xyz, r4.xyzx, l(-2.000000, -2.000000, -2.000000, 0.000000), l(1.570796, 1.570796, 1.570796, 0.000000) +lt r5.xyz, |r0.yxyy|, |r0.zzxz| +and r4.xyz, r4.xyzx, r5.xyzx +mad r2.xyz, r2.xyzx, r3.xyzx, r4.xyzx +lt r3.xyz, r0.yxyy, -r0.yxyy +and r3.xyz, r3.xyzx, l(0xc0490fdb, 0xc0490fdb, 0xc0490fdb, 0) +add r2.xyz, r2.xyzx, r3.xyzx +min r3.xyz, r0.yxyy, r0.zzxz +lt r3.xyz, r3.xyzx, -r3.xyzx +max r4.xyz, r0.yxyy, r0.zzxz +ge r4.xyz, r4.xyzx, -r4.xyzx +and r3.xyz, r3.xyzx, r4.xyzx +movc r2.xyz, r3.xyzx, -r2.xyzx, r2.xyzx +mul r2.yzw, r2.yyxz, cb1[6].wwww +dp2 r0.w, r0.yzyy, r0.yzyy +sqrt r0.w, r0.w +mad r2.x, cb1[7].x, cb1[6].y, r0.w +mov r3.x, cb1[6].z +mov r3.y, l(0.159155) +mad r3.zw, r2.xxxz, r3.xxxy, v5.xxxy +sample_indexable(texture2d)(float,float,float,float) r4.xyz, r3.zwzz, t5.xywz, s2 +mul r4.x, r4.z, r4.x +mad r3.zw, r4.xxxy, l(0.000000, 0.000000, 2.000000, 2.000000), l(0.000000, 0.000000, -1.000000, -1.000000) +mul r3.zw, r0.wwww, r3.zzzw +add r4.xyz, r0.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000) +mad r3.zw, r3.zzzw, cb1[6].xxxx, r4.zzzy +sample_indexable(texture2d)(float,float,float,float) r5.xyz, r3.zwzz, t4.xyzw, s1 +dp3_sat r0.w, r5.xyzx, cb1[8].xyzx +mad r0.w, r0.w, v6.w, -v6.z +log r0.w, r0.w +mul r0.w, r0.w, v6.y +exp r0.w, r0.w +mul r0.w, r0.w, v6.x +sample_indexable(texture2d)(float,float,float,float) r5.xyz, r4.zyzz, t3.xyzw, s1 +dp3_sat r1.w, r5.xyzx, cb1[5].xyzx +mul r0.w, r0.w, r1.w +add r5.xyz, -r4.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000) +log r5.xyz, r5.xyzx +mul r5.xyz, r5.xyzx, cb1[9].yyyy +exp r5.xyz, r5.xyzx +log r6.xyz, r4.xyzx +mul r6.xyz, r6.xyzx, cb1[9].xxxx +exp r6.xyz, r6.xyzx +add r5.xyz, r5.xyzx, r6.xyzx +add r5.xyz, -r5.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000) +dp3 r1.w, v3.xyzx, v3.xyzx +rsq r1.w, r1.w +mul r6.xyz, r1.wwww, v3.xyzx +dp3 r1.w, r1.xyzx, r6.xyzx +add r1.w, -|r1.w|, cb1[9].z +add r3.z, -cb1[9].z, cb1[9].w +div r1.w, r1.w, r3.z +add_sat r1.w, r1.w, l(1.000000) +mul r1.w, r1.w, r5.x +mul r0.w, r0.w, r1.w +mul r0.w, r0.w, cb1[0].z +dp2 r0.z, r0.xzxx, r0.xzxx +dp2 r0.x, r0.xyxx, r0.xyxx +sqrt r0.xy, r0.xzxx +mad r2.x, cb1[7].x, cb1[6].y, r0.y +mad r2.xy, r2.xyxx, r3.xyxx, v5.xyxx +sample_indexable(texture2d)(float,float,float,float) r6.xyz, r2.xyxx, t5.xywz, s2 +mul r6.x, r6.z, r6.x +mad r2.xy, r6.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r0.yz, r0.yyyy, r2.xxyx +mad r0.yz, r0.yyzy, cb1[6].xxxx, r4.zzxz +sample_indexable(texture2d)(float,float,float,float) r6.xyz, r0.yzyy, t4.xyzw, s1 +dp3_sat r0.y, r6.xyzx, cb1[8].xyzx +mad r0.y, r0.y, v6.w, -v6.z +log r0.y, r0.y +mul r0.y, r0.y, v6.y +exp r0.y, r0.y +mul r0.y, r0.y, v6.x +sample_indexable(texture2d)(float,float,float,float) r6.xyz, r4.zxzz, t3.xyzw, s1 +dp3_sat r0.z, r6.xyzx, cb1[5].xyzx +mul r0.y, r0.y, r0.z +dp3 r0.z, v2.xyzx, v2.xyzx +rsq r0.z, r0.z +mul r6.xyz, r0.zzzz, v2.xyzx +dp3 r0.z, r1.xyzx, r6.xyzx +add r0.z, -|r0.z|, cb1[9].z +div r0.z, r0.z, r3.z +add_sat r0.z, r0.z, l(1.000000) +mul r0.z, r0.z, r5.y +mul r0.y, r0.z, r0.y +mad r0.y, r0.y, cb1[0].y, r0.w +mad r2.z, cb1[7].x, cb1[6].y, r0.x +mad r0.zw, r2.zzzw, r3.xxxy, v5.xxxy +sample_indexable(texture2d)(float,float,float,float) r2.xyz, r0.zwzz, t5.xywz, s2 +mul r2.x, r2.z, r2.x +mad r0.zw, r2.xxxy, l(0.000000, 0.000000, 2.000000, 2.000000), l(0.000000, 0.000000, -1.000000, -1.000000) +mul r0.xz, r0.zzwz, r0.xxxx +mad r0.xz, r0.xxzx, cb1[6].xxxx, r4.xxyx +sample_indexable(texture2d)(float,float,float,float) r2.xyz, r4.xyxx, t3.xyzw, s1 +dp3_sat r0.w, r2.xyzx, cb1[5].xyzx +sample_indexable(texture2d)(float,float,float,float) r2.xyz, r0.xzxx, t4.xyzw, s1 +dp3_sat r0.x, r2.xyzx, cb1[8].xyzx +mad r0.x, r0.x, v6.w, -v6.z +log r0.x, r0.x +mul r0.x, r0.x, v6.y +exp r0.x, r0.x +mul r0.x, r0.x, v6.x +mul r0.x, r0.x, r0.w +dp3 r0.z, v1.xyzx, v1.xyzx +rsq r0.z, r0.z +mul r2.xyz, r0.zzzz, v1.xyzx +dp3 r0.z, r1.xyzx, r2.xyzx +add r0.z, -|r0.z|, cb1[9].z +div r0.z, r0.z, r3.z +add_sat r0.z, r0.z, l(1.000000) +mul r0.z, r0.z, r5.z +mul r0.x, r0.z, r0.x +mad_sat r0.x, r0.x, cb1[0].x, r0.y +mul o0.xyz, r0.xxxx, v7.xyzx +mov o0.w, r0.x +ret +// Approximately 153 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/DragonAge/ShaderFixes/4d7f94580ccefe87-ps_replace.txt b/DragonAge/ShaderFixes/4d7f94580ccefe87-ps_replace.txt new file mode 100644 index 000000000..c2be96b3b --- /dev/null +++ b/DragonAge/ShaderFixes/4d7f94580ccefe87-ps_replace.txt @@ -0,0 +1,282 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2DMS g_depthTexture : register(t3); +Texture2DMS g_gbufferTexture0 : register(t4); +Texture2DMS g_gbufferTexture2 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.yzw = g_gbufferTexture0.Load(r0.xyw,v1.x).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz,v1.x).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.yz * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.yzw, r1.yzw); + r0.w = rsqrt(r0.w); + r0.xyz = r1.yzw * r0.www; + } + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + o0.xyzw = r2.zzzz; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/4dc97c4fb5b65981-ps_replace.txt b/DragonAge/ShaderFixes/4dc97c4fb5b65981-ps_replace.txt new file mode 100644 index 000000000..8de441c03 --- /dev/null +++ b/DragonAge/ShaderFixes/4dc97c4fb5b65981-ps_replace.txt @@ -0,0 +1,285 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2D g_depthTexture : register(t4); +Texture2D g_gbufferTexture0 : register(t5); +Texture2D g_gbufferTexture2 : register(t6); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.yzw = g_gbufferTexture0.Load(r0.xyw).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.yz * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.yzw, r1.yzw); + r0.w = rsqrt(r0.w); + r0.xyz = r1.yzw * r0.www; + } + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyzw = r2.zzzz * r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/54cb5a3967a3f56e-ps_replace.txt b/DragonAge/ShaderFixes/54cb5a3967a3f56e-ps_replace.txt new file mode 100644 index 000000000..ed1d5b052 --- /dev/null +++ b/DragonAge/ShaderFixes/54cb5a3967a3f56e-ps_replace.txt @@ -0,0 +1,286 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2DMS g_depthTexture : register(t4); +Texture2DMS g_gbufferTexture0 : register(t5); +Texture2DMS g_gbufferTexture2 : register(t6); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.yzw = g_gbufferTexture0.Load(r0.xyw,v1.x).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz,v1.x).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.yz * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.yzw, r1.yzw); + r0.w = rsqrt(r0.w); + r0.xyz = r1.yzw * r0.www; + } + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyzw = r2.zzzz * r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/58086923b2ca4243-ps_replace.txt b/DragonAge/ShaderFixes/58086923b2ca4243-ps_replace.txt new file mode 100644 index 000000000..8ee8585b5 --- /dev/null +++ b/DragonAge/ShaderFixes/58086923b2ca4243-ps_replace.txt @@ -0,0 +1,264 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2DMS g_depthTexture : register(t3); +Texture2DMS g_gbufferTexture0 : register(t4); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz,v1.x).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + o0.xyzw = r2.zzzz; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/5ce84d37f8b551f2-ps_replace.txt b/DragonAge/ShaderFixes/5ce84d37f8b551f2-ps_replace.txt new file mode 100644 index 000000000..34086e0c6 --- /dev/null +++ b/DragonAge/ShaderFixes/5ce84d37f8b551f2-ps_replace.txt @@ -0,0 +1,212 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2DMS g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.x = g_shadowmapDimensions.x; + r0.yz = r0.xx * r1.xy + float2(5.000000e-001,5.000000e-001); + r0.x = 1.000000e+000 / r0.x; + r2.xy = floor(r0.yz); + r0.yz = -r2.xy + r0.yz; + r0.xw = r2.xy * r0.xx; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,0)).xyzw; + r1.w = r0.y * 2.000000000e+000 + 2.000000000e+000; + r3.xy = float2(4.000000e+000,1.000000e+000) + -r0.yz; + r4.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,0)).xyzw; + r5.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.yyyy; + r6.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.yyyy; + r3.z = -r0.y * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,0)).xyzw; + r3.w = r0.y * -2.000000000e+000 + 4.000000000e+000; + r8.xy = r7.wx * r3.zz; + r8.xy = r7.zy * r3.ww + r8.xy; + r3.w = r7.z * r6.z + r8.y; + r3.w = r7.w * r3.z + r3.w; + r3.w = r4.y * r5.y + r3.w; + r3.w = r4.x * r6.w + r3.w; + r3.w = r4.z * r5.z + r3.w; + r3.w = r4.w * r3.x + r3.w; + r2.y = dot(r2.yy, r0.yy); + r3.w = r2.y + r3.w; + r3.w = r2.x * r1.w + r3.w; + r2.z = dot(r2.zz, r0.yy); + r3.w = r2.z + r3.w; + r9.y = r2.w * r5.w + r3.w; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,-2)).xyzw; + r11.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,-2)).xyzw; + r3.w = r11.y * r6.z + r8.x; + r3.w = r11.x * r3.z + r3.w; + r8.xyzw = r11.wzxy * r6.xyxy; + r7.zw = r8.xz + r8.yw; + r7.zw = r10.zy * float2(2.000000e+000,2.000000e+000) + r7.zw; + r7.zw = r10.wx * float2(2.000000e+000,2.000000e+000) + r7.zw; + r3.w = r4.z * r5.y + r3.w; + r3.w = r4.w * r6.w + r3.w; + r3.w = r10.y * r5.z + r3.w; + r3.w = r10.x * r3.x + r3.w; + r2.z = r3.w + r2.z; + r1.w = r2.w * r1.w + r2.z; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,-2)).xyzw; + r2.z = r8.y * r0.y; + r1.w = r2.z * 2.000000000e+000 + r1.w; + r9.x = r8.x * r5.w + r1.w; + r2.zw = r8.zy * r0.yy + r7.zw; + r2.zw = r8.wx * r5.xx + r2.zw; + r2.zw = r2.zw + r9.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r6.xyxy; + r4.zw = r9.xz + r9.yw; + r1.w = r8.z * r6.z + r4.w; + r3.w = r7.y * r6.z + r4.z; + r3.w = r7.x * r3.z + r3.w; + r1.w = r8.w * r3.z + r1.w; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,2)).xyzw; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,2)).xyzw; + r8.xyz = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r1.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + r1.xyz = saturate(abs(r8.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.w = r6.y * 2.000000000e+000 + r1.w; + r0.w = r6.x * 2.000000000e+000 + r0.w; + r0.w = r6.z * r5.z + r0.w; + r0.w = r6.w * r3.x + r0.w; + r0.w = r7.y * r0.y + r0.w; + r0.w = r7.x * r5.x + r0.w; + r1.w = r7.z * r0.y; + r0.w = r1.w * 2.000000000e+000 + r0.w; + r6.y = r7.w * r5.w + r0.w; + r0.w = r6.z * 2.000000000e+000 + r3.w; + r0.w = r6.w * 2.000000000e+000 + r0.w; + r0.w = r4.y * r5.z + r0.w; + r0.w = r4.x * r3.x + r0.w; + r0.y = r7.z * r0.y + r0.w; + r0.y = r7.w * r5.x + r0.y; + r0.y = r2.y + r0.y; + r6.x = r2.x * r5.w + r0.y; + r0.yw = r6.xy + r2.zw; + r0.z = r0.w * r0.z; + r0.y = r0.y * r3.y + r0.z; + r0.y = 1.694915257e-002 * r0.y; + o0.xyz = r0.yyy * r0.xxx; + r0.x = min(r1.y, r1.x); + o0.w = min(r1.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/62835f61cd7ed9ad-ps_replace.txt b/DragonAge/ShaderFixes/62835f61cd7ed9ad-ps_replace.txt new file mode 100644 index 000000000..f17fa1dea --- /dev/null +++ b/DragonAge/ShaderFixes/62835f61cd7ed9ad-ps_replace.txt @@ -0,0 +1,205 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.y = g_shadowmapDimensions.x; + r0.zw = r0.yy * r1.xy + float2(5.000000e-001,5.000000e-001); + r1.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r1.xy, 0.000000000e+000).x; + r1.x = 1.000000000e+000 + -r1.x; + r0.y = 1.000000e+000 / r0.y; + r1.yz = floor(r0.zw); + r0.zw = -r1.yz + r0.zw; + r1.yz = r1.yz * r0.yy; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(2,0)).xyzw; + r0.y = r0.z * 2.000000000e+000 + 2.000000000e+000; + r3.xy = float2(4.000000e+000,1.000000e+000) + -r0.zw; + r4.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(0,0)).xyzw; + r5.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.zzzz; + r6.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.zzzz; + r1.w = -r0.z * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(-2,0)).xyzw; + r3.z = r0.z * -2.000000000e+000 + 4.000000000e+000; + r8.xy = r7.wx * r1.ww; + r3.zw = r7.zy * r3.zz + r8.xy; + r3.w = r7.z * r6.z + r3.w; + r3.w = r7.w * r1.w + r3.w; + r3.w = r4.y * r5.y + r3.w; + r3.w = r4.x * r6.w + r3.w; + r3.w = r4.z * r5.z + r3.w; + r3.w = r4.w * r3.x + r3.w; + r2.y = dot(r2.yy, r0.zz); + r3.w = r2.y + r3.w; + r3.w = r2.x * r0.y + r3.w; + r2.z = dot(r2.zz, r0.zz); + r3.w = r2.z + r3.w; + r8.y = r2.w * r5.w + r3.w; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(0,-2)).xyzw; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(-2,-2)).xyzw; + r3.z = r10.y * r6.z + r3.z; + r3.z = r10.x * r1.w + r3.z; + r10.xyzw = r10.wzxy * r6.xyxy; + r7.zw = r10.xz + r10.yw; + r7.zw = r9.zy * float2(2.000000e+000,2.000000e+000) + r7.zw; + r7.zw = r9.wx * float2(2.000000e+000,2.000000e+000) + r7.zw; + r3.z = r4.z * r5.y + r3.z; + r3.z = r4.w * r6.w + r3.z; + r3.z = r9.y * r5.z + r3.z; + r3.z = r9.x * r3.x + r3.z; + r2.z = r3.z + r2.z; + r0.y = r2.w * r0.y + r2.z; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(2,-2)).xyzw; + r2.z = r9.y * r0.z; + r0.y = r2.z * 2.000000000e+000 + r0.y; + r8.x = r9.x * r5.w + r0.y; + r2.zw = r9.zy * r0.zz + r7.zw; + r2.zw = r9.wx * r5.xx + r2.zw; + r2.zw = r2.zw + r8.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r6.xyxy; + r3.zw = r9.xz + r9.yw; + r0.y = r8.z * r6.z + r3.w; + r0.y = r8.w * r1.w + r0.y; + r3.z = r7.y * r6.z + r3.z; + r1.w = r7.x * r1.w + r3.z; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(0,2)).xyzw; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(2,2)).xyzw; + r0.x = r6.y * 2.000000000e+000 + r0.y; + r0.x = r6.x * 2.000000000e+000 + r0.x; + r0.x = r6.z * r5.z + r0.x; + r0.x = r6.w * r3.x + r0.x; + r0.x = r7.y * r0.z + r0.x; + r0.x = r7.x * r5.x + r0.x; + r0.y = r7.z * r0.z; + r0.x = r0.y * 2.000000000e+000 + r0.x; + r0.y = r7.w * r5.w + r0.x; + r1.y = r6.z * 2.000000000e+000 + r1.w; + r1.y = r6.w * 2.000000000e+000 + r1.y; + r1.y = r4.y * r5.z + r1.y; + r1.y = r4.x * r3.x + r1.y; + r0.z = r7.z * r0.z + r1.y; + r0.z = r7.w * r5.x + r0.z; + r0.z = r2.y + r0.z; + r0.x = r2.x * r5.w + r0.z; + r0.xy = r2.zw + r0.xy; + r0.y = r0.y * r0.w; + r0.x = r0.x * r3.y + r0.y; + r0.x = 1.694915257e-002 * r0.x; + o0.xyzw = r0.xxxx * r1.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/64722f854716a0dc-ps_replace.txt b/DragonAge/ShaderFixes/64722f854716a0dc-ps_replace.txt new file mode 100644 index 000000000..8d4bdf300 --- /dev/null +++ b/DragonAge/ShaderFixes/64722f854716a0dc-ps_replace.txt @@ -0,0 +1,717 @@ +//Specular Reflections on Ice +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4 g_cloudOffsetAndScale : packoffset(c6); + float4 g_cloudCoverageExponentAndFade : packoffset(c7); + float3 g_lightDir : packoffset(c8); + float4 g_keyColor : packoffset(c9); + float2 g_lightAngularRadius : packoffset(c10); + float4 g_keyTranslucencyParams : packoffset(c11); + float4 g_subParams : packoffset(c12); + float4 g_envmapParams : packoffset(c13); + float g_skyEnvmap8BitTexInvScale : packoffset(c14); + float4 g_exposureMultipliers : packoffset(c15); + float4 g_envmapsMipmapCount : packoffset(c16); + int g_drawReference : packoffset(c17); + float g_skyEnvmapMipmapCount : packoffset(c17.y); +} + +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +SamplerState g_cloudShadowSampler_s : register(s0); +SamplerState g_skyEnvmapSampler_s : register(s1); +SamplerState g_customSampler_s : register(s2); +SamplerState g_diffuseOcclusionSampler_s : register(s3); +Texture2D g_cloudShadowTexture : register(t0); +TextureCube g_skyEnvmap : register(t1); +TextureCube g_customEnvmap : register(t2); +Texture2D g_diffuseOcclusionTexture : register(t3); +Texture2D g_depthTexture : register(t4); +Texture2D g_gbufferTexture0 : register(t5); +Texture2D g_gbufferTexture1 : register(t6); +Texture2D g_gbufferTexture2 : register(t7); +Texture2D g_gbufferTexture3 : register(t8); +Texture2D g_gbufferTexture4 : register(t9); +Texture2D g_shadowAccumTexture : register(t10); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0, + out float4 o1 : SV_Target1) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = g_invScreenSize.xy * v0.xy; + r1.xy = (int2)v0.xy; + r1.zw = float2(0.000000e+000,0.000000e+000); + r2.xyzw = g_gbufferTexture0.Load(r1.xyw).xyzw; + r3.xyzw = g_gbufferTexture1.Load(r1.xyw).xyzw; + r4.xyzw = g_gbufferTexture2.Load(r1.xyw).yxzw; + r5.xyz = g_gbufferTexture3.Load(r1.xyw).xyz; + r6.z = g_depthTexture.Load(r1.xyw).x; + r0.z = 2.550000000e+002 * r4.w; + r0.z = round(r0.z); + r0.z = (int)r0.z; + r7.xy = r0.zz == float2(4.000000e+000,2.000000e+000); + if (r7.x != 0) { + r8.xyzw = g_gbufferTexture4.Load(r1.xyw).xyzw; + r9.xyzw = r2.xyzw * float4(4.000000e+000,4.000000e+000,4.000000e+000,4.000000e+000) + float4(-2.000000e+000,-2.000000e+000,-2.000000e+000,-2.000000e+000); + r0.w = dot(r9.xy, r9.xy); + r10.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r10.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r10.xy = r9.xy * r0.ww; + r0.w = dot(r10.xyw, r10.xyw); + r0.w = rsqrt(r0.w); + r10.xyz = r10.xyw * r0.www; + r0.w = dot(r9.zw, r9.zw); + r11.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r11.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r11.xy = r9.zw * r0.ww; + r0.w = dot(r11.xyw, r11.xyw); + r0.w = rsqrt(r0.w); + r9.xyz = r11.xyw * r0.www; + r0.w = dot(r8.xy, float2(6.528000e+004,2.550000e+002)); + r0.w = round(r0.w); + r5.w = 3.125000000e-002 * r0.w; + r5.w = trunc(r5.w); + r11.z = r0.w * 3.125000000e-002 + -r5.w; + r0.w = 1.562500000e-002 * r5.w; + r11.x = trunc(r0.w); + r11.y = r5.w * 1.562500000e-002 + -r11.x; + r11.xyz = float3(3.225806e-002,1.015873e+000,1.032258e+000) * r11.xyz; + r7.zw = float2(2.550000e+002,2.550000e+002) * r8.zw; + r7.zw = round(r7.zw); + r8.xy = float2(6.250000e-002,6.250000e-002) * r7.zw; + r8.xy = trunc(r8.xy); + r8.zw = r7.zw * float2(6.250000e-002,6.250000e-002) + -r8.xy; + r12.xw = float2(6.666667e-002,1.066667e+000) * r8.yw; + r7.zw = r8.xz * float2(8.000001e-001,1.280000e+001) + float2(1.000000e+000,1.000000e+000); + r7.zw = exp2(r7.zw); + r7.zw = r7.zw * float2(1.443000e+000,1.443000e+000) + float2(1.443000e+000,1.443000e+000); + r8.xyzw = r3.xyzw * r3.xyzw; + r13.xyz = r8.www; + r0.w = 0.000000000e+000; + } else { + r2.xyz = r2.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r5.w = dot(r2.xyz, r2.xyz); + r5.w = rsqrt(r5.w); + r10.xyz = r5.www * r2.xyz; + r3.xyzw = r3.xyzw * r3.xyzw; + r2.x = r0.z == 5; + if (r2.x != 0) { + r8.xyz = r3.xyz * r3.www; + r13.xyz = r3.xyz; + } else { + r2.x = r0.z == 1; + if (r2.x != 0) { + r13.xyz = r3.www * r3.xyz; + } else { + r13.xyz = r3.www; + } + r8.xyz = r3.xyz; + } + r2.x = 0.000000000e+000 < r13.x; + r0.w = r2.x ? r2.w : 0; + r2.x = r0.w * 1.200000000e+001 + 1.000000000e+000; + r2.x = exp2(r2.x); + r7.z = r2.x * 1.442999959e+000 + 1.442999959e+000; + r7.w = 0.000000000e+000; + r11.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r9.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r12.xw = float2(0.000000e+000,0.000000e+000); + } + r2.xy = r0.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r6.xy = float2(1.000000e+000,-1.000000e+000) * r2.xy; + r6.w = 1.000000000e+000; + + +// float4 stereo = StereoParams.Load(0); +// float depth, C; +// depth = projMatrix._m22 + projMatrix._m32/r6.z; +// C = projMatrix._m22 + projMatrix._m32/stereo.y; +// r6.x -= stereo.x * (-depth - C)*0.38; + + + r2.x = dot(r6.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r6.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r6.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r2.w = dot(r6.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r2.w = 1.000000e+000 / r2.w; + +float4 r25, r23, r24; +r23.xyz = r2.xyz * r2.www; +r23.w=1; + +r25.x = dot(r23.xyzw, b1.xyzw); +r25.y = dot(r23.xyzw, b2.xyzw); +r25.z = dot(r23.xyzw, b3.xyzw); +r25.w = dot(r23.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r23.x = dot(r25.xyzw, a1.xyzw); +r23.y = dot(r25.xyzw, a2.xyzw); +r23.z = dot(r25.xyzw, a3.xyzw); +r23.w = dot(r25.xyzw, a4.xyzw); +r23.xyz /= r2.www; + + r3.xyz = r23.xzy * r2.www; + + + + + r2.x = dot(r3.xyz, r3.xyz); + r2.z = rsqrt(r2.x); + r6.xyz = r3.xzy * r2.zzz; + + + r3.w = log2(abs(r4.y)); + r3.w = g_envmapParams.z * r3.w; + r3.w = exp2(r3.w); + r1.x = g_shadowAccumTexture.Load(r1.xyz).x; + r1.y = r2.y * r2.w + g_cameraPos.y; + r1.yz = g_lightDir.xz * r1.yy; +// r1.yz = r1.yz * g_cloudOffsetAndScale.ww + r23.xy; + r1.yz = r1.yz * g_cloudOffsetAndScale.ww + r3.xy; + r1.yz = r1.yz * g_cloudOffsetAndScale.zz + g_cloudOffsetAndScale.xy; + r1.y = g_cloudShadowTexture.SampleLevel(g_cloudShadowSampler_s, r1.yz, 0.000000000e+000).x; + r1.y = saturate(g_cloudCoverageExponentAndFade.x + r1.y); + r1.y = log2(r1.y); + r1.y = g_cloudCoverageExponentAndFade.y * r1.y; + r1.y = exp2(r1.y); + r1.z = sqrt(r2.x); + r1.z = -g_cloudCoverageExponentAndFade.z + r1.z; + r1.z = saturate(g_cloudCoverageExponentAndFade.w * r1.z); + r1.z = r1.z * r1.z; + r1.w = 1.000000000e+000 + -r1.y; + r1.y = r1.z * r1.w + r1.y; + r1.x = r1.x * r1.y; + + r1.y = dot(r10.xyz, g_lightDir.xyz); + + r1.z = saturate(r1.y); + r2.xyw = g_keyColor.xyz * r1.zzz; + r2.xyw = r2.xyw * r1.xxx; + if (r7.x != 0) { + r12.w = saturate(r12.w); + r1.y = r12.w * 5.000000000e-001 + r1.y; + r1.z = r12.w * 5.000000000e-001 + 1.000000000e+000; + r1.y = saturate(r1.y / r1.z); + r1.yzw = g_keyColor.xyz * r1.yyy; + r1.yzw = r1.yzw * r1.xxx; + r12.xyz = -r10.xyz * r12.xxx + r9.xyz; + r4.y = dot(r12.xyz, r12.xyz); + r4.y = rsqrt(r4.y); + r12.xyz = r12.xyz * r4.yyy; +// r14.xyz = -r23.xzy * r2.zzz + g_lightDir.xyz; + r14.xyz = -r3.xzy * r2.zzz + g_lightDir.xyz; + r4.y = dot(r14.xyz, r14.xyz); + r4.y = rsqrt(r4.y); + r14.xyz = r14.xyz * r4.yyy; + r4.y = dot(r9.xyz, r14.xyz); + r4.y = -r4.y * r4.y + 1.000000000e+000; + r4.y = max(r4.y, 0.000000000e+000); + r4.y = sqrt(r4.y); + r4.y = log2(r4.y); + r4.y = r7.z * r4.y; + r4.y = exp2(r4.y); + r5.w = dot(r12.xyz, r14.xyz); + r5.w = -r5.w * r5.w + 1.000000000e+000; + r5.w = max(r5.w, 0.000000000e+000); + r5.w = sqrt(r5.w); + r5.w = log2(r5.w); + r5.w = r7.w * r5.w; + r5.w = exp2(r5.w); + r9.xyz = r5.www * r11.xyz; + r9.xyz = r4.yyy * r13.xxx + r9.xyz; + r9.xyz = float3(1.500000e-001,1.500000e-001,1.500000e-001) * r9.xyz; + r9.xyz = r9.xyz * r2.xyw; + r9.xyz = g_keyColor.www * r9.xyz; + r2.xyw = r1.yzw; + } else { +// r1.yzw = -r23.xzy * r2.zzz + g_lightDir.xyz; + r1.yzw = -r3.xzy * r2.zzz + g_lightDir.xyz; + r2.z = dot(r1.yzw, r1.yzw); + r2.z = rsqrt(r2.z); + r1.yzw = r2.zzz * r1.yzw; + r1.y = saturate(dot(r10.xyz, r1.yzw)); + r1.z = r7.z * 8.662509918e-002 + 8.750000000e-001; + r1.y = r1.y * r7.z + -r7.z; + r1.y = exp2(r1.y); + r1.y = r1.z * r1.y; + r1.yzw = r2.xyw * r1.yyy; + r9.xyz = g_keyColor.www * r1.yzw; + } + r1.yzw = r5.xyz * g_exposureMultipliers.yyy + r2.xyw; + r2.x = r0.z != 4; + if (r2.x != 0) { + r2.x = dot(r6.xyz, r10.xyz); + r2.x = r2.x + r2.x; + r2.xyz = r10.xyz * -r2.xxx + r6.xyz; + r11.xyzw = r4.zzzz == float4(0.000000e+000,3.922000e-003,7.843000e-003,1.176500e-002); + r11.xyzw = r11.xyzw ? g_envmapParams.xxxx : 0; + r2.w = 1.000000000e+000 + -g_envmapParams.w; + r2.w = r1.x * r2.w + g_envmapParams.w; + r2.w = r2.w * r3.w; + r3.xy = (int2)g_envmapsMipmapCount.xy; + r4.yz = trunc(g_envmapsMipmapCount.xy); + r4.yz = -r0.ww * float2(1.500000e+001,1.500000e+001) + r4.yz; + r4.yz = float2(5.000000e+000,5.000000e+000) + r4.yz; + r3.xy = (int2)r3.xy + int2(-1,-1); + r3.xy = r3.xy; + r4.yz = max(r4.yz, float2(0.000000e+000,0.000000e+000)); + r3.xy = min(r3.xy, r4.yz); + r12.xyzw = g_customEnvmap.SampleLevel(g_customSampler_s, r2.xyz, r3.y).xyzw; + r0.w = dot(r11.xyzw, r12.xyzw); + r2.xyz = g_skyEnvmap.SampleLevel(g_skyEnvmapSampler_s, r2.xyz, r3.x).xyz; + r2.xyz = r2.xyz * r2.www; + r9.xyz = r2.xyz * g_skyEnvmap8BitTexInvScale + r9.xyz; + } else { + r0.w = 0.000000000e+000; + } + r2.xyz = r5.xyz * g_exposureMultipliers.yyy + g_envmapParams.yyy; + r2.xyz = r2.xyz * r0.www; + r0.w = 1.000000000e+000 + -r3.w; + r2.xyz = r2.xyz * r0.www + r9.xyz; + r0.z = (int)r0.z >= (int)6; + if (r0.z != 0) { + r0.z = saturate(-2.352941222e-002 + r4.w); + r3.y = 1.000000000e+000 + -r0.z; + r4.x = saturate(r4.x); + r3.x = 1.000000000e+000 + -r4.x; + r4.xyz = r10.xyz * g_keyTranslucencyParams.www + g_lightDir.xyz; + r0.z = saturate(dot(-r6.xyz, -r4.xyz)); + r3.xy = g_keyTranslucencyParams.yy * r3.xy; + r3.xy = float2(-1.442695e+000,-1.442695e+000) * r3.xy; + r3.xy = exp2(r3.xy); + r0.z = r0.z * g_keyTranslucencyParams.z + g_keyTranslucencyParams.x; + r0.z = dot(r0.zz, r3.xy); + r0.z = r0.z * r1.x; + r1.yzw = r0.zzz * g_keyColor.xyz + r1.yzw; + } + if (r7.x == 0) { + r2.xyz = r2.xyz * r13.xyz; + } + r0.z = r7.y ? 0.000000000e+000 : 1.000000000e+000; + r3.xyz = r2.xyz * r0.zzz; + o0.xyz = r1.yzw * r8.xyz + r3.xyz; + r0.xyzw = g_diffuseOcclusionTexture.Gather(g_diffuseOcclusionSampler_s, r0.xy).xyzw; + r0.x = min(r0.y, r0.x); + r0.x = min(r0.z, r0.x); + o0.w = min(r0.w, r0.x); + o1.xyz = r2.xyz; + o1.w = 1.000000000e+000; + + //o0.xyzw = 0.0; + //o1.xyzw = 0.0; + + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer $Globals +// { +// +// float3 g_cameraPos; // Offset: 0 Size: 12 +// float2 g_invScreenSize; // Offset: 16 Size: 8 +// float4x4 g_invViewProjMatrix; // Offset: 32 Size: 64 +// float4 g_cloudOffsetAndScale; // Offset: 96 Size: 16 +// float4 g_cloudCoverageExponentAndFade;// Offset: 112 Size: 16 +// float3 g_lightDir; // Offset: 128 Size: 12 +// float4 g_keyColor; // Offset: 144 Size: 16 +// float2 g_lightAngularRadius; // Offset: 160 Size: 8 [unused] +// float4 g_keyTranslucencyParams; // Offset: 176 Size: 16 +// float4 g_subParams; // Offset: 192 Size: 16 [unused] +// float4 g_envmapParams; // Offset: 208 Size: 16 +// float g_skyEnvmap8BitTexInvScale; // Offset: 224 Size: 4 +// float4 g_exposureMultipliers; // Offset: 240 Size: 16 +// float4 g_envmapsMipmapCount; // Offset: 256 Size: 16 +// int g_drawReference; // Offset: 272 Size: 4 [unused] +// float g_skyEnvmapMipmapCount; // Offset: 276 Size: 4 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// g_cloudShadowSampler sampler NA NA 0 1 +// g_skyEnvmapSampler sampler NA NA 1 1 +// g_customSampler sampler NA NA 2 1 +// g_diffuseOcclusionSampler sampler NA NA 3 1 +// g_cloudShadowTexture texture float4 2d 0 1 +// g_skyEnvmap texture float4 cube 1 1 +// g_customEnvmap texture float4 cube 2 1 +// g_diffuseOcclusionTexture texture float4 2d 3 1 +// g_depthTexture texture float4 2d 4 1 +// g_gbufferTexture0 texture float4 2d 5 1 +// g_gbufferTexture1 texture float4 2d 6 1 +// g_gbufferTexture2 texture float4 2d 7 1 +// g_gbufferTexture3 texture float4 2d 8 1 +// g_gbufferTexture4 texture float4 2d 9 1 +// g_shadowAccumTexture texture float4 2d 10 1 +// $Globals cbuffer NA NA 0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// SV_Target 1 xyzw 1 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb0[17], immediateIndexed +dcl_sampler s0, mode_default +dcl_sampler s1, mode_default +dcl_sampler s2, mode_default +dcl_sampler s3, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texturecube (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_resource_texture2d (float,float,float,float) t6 +dcl_resource_texture2d (float,float,float,float) t7 +dcl_resource_texture2d (float,float,float,float) t8 +dcl_resource_texture2d (float,float,float,float) t9 +dcl_resource_texture2d (float,float,float,float) t10 +dcl_input_ps_siv linear noperspective v0.xy, position +dcl_output o0.xyzw +dcl_output o1.xyzw +dcl_temps 15 +mul r0.xy, v0.xyxx, cb0[1].xyxx +ftoi r1.xy, v0.xyxx +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r1.xyww, t5.xyzw +ld_indexable(texture2d)(float,float,float,float) r3.xyzw, r1.xyww, t6.xyzw +ld_indexable(texture2d)(float,float,float,float) r4.xyzw, r1.xyww, t7.yxzw +ld_indexable(texture2d)(float,float,float,float) r5.xyz, r1.xyww, t8.xyzw +ld_indexable(texture2d)(float,float,float,float) r6.z, r1.xyww, t4.yzxw +mul r0.z, r4.w, l(255.000000) +round_ne r0.z, r0.z +ftoi r0.z, r0.z +ieq r7.xy, r0.zzzz, l(4, 2, 0, 0) +if_nz r7.x + ld_indexable(texture2d)(float,float,float,float) r8.xyzw, r1.xyww, t9.xyzw + mad r9.xyzw, r2.xyzw, l(4.000000, 4.000000, 4.000000, 4.000000), l(-2.000000, -2.000000, -2.000000, -2.000000) + dp2 r0.w, r9.xyxx, r9.xyxx + mad r10.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r10.z, l(0.000000) + sqrt r0.w, r0.w + mul r10.xy, r0.wwww, r9.xyxx + dp3 r0.w, r10.xywx, r10.xywx + rsq r0.w, r0.w + mul r10.xyz, r0.wwww, r10.xywx + dp2 r0.w, r9.zwzz, r9.zwzz + mad r11.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r11.z, l(0.000000) + sqrt r0.w, r0.w + mul r11.xy, r0.wwww, r9.zwzz + dp3 r0.w, r11.xywx, r11.xywx + rsq r0.w, r0.w + mul r9.xyz, r0.wwww, r11.xywx + dp2 r0.w, r8.xyxx, l(65280.000000, 255.000000, 0.000000, 0.000000) + round_ne r0.w, r0.w + mul r5.w, r0.w, l(0.031250) + round_z r5.w, r5.w + mad r11.z, r0.w, l(0.031250), -r5.w + mul r0.w, r5.w, l(0.015625) + round_z r11.x, r0.w + mad r11.y, r5.w, l(0.015625), -r11.x + mul r11.xyz, r11.xyzx, l(0.032258, 1.015873, 1.032258, 0.000000) + mul r7.zw, r8.zzzw, l(0.000000, 0.000000, 255.000000, 255.000000) + round_ne r7.zw, r7.zzzw + mul r8.xy, r7.zwzz, l(0.062500, 0.062500, 0.000000, 0.000000) + round_z r8.xy, r8.xyxx + mad r8.zw, r7.zzzw, l(0.000000, 0.000000, 0.062500, 0.062500), -r8.xxxy + mul r12.xw, r8.yyyw, l(0.066667, 0.000000, 0.000000, 1.066667) + mad r7.zw, r8.xxxz, l(0.000000, 0.000000, 0.800000, 12.800001), l(0.000000, 0.000000, 1.000000, 1.000000) + exp r7.zw, r7.zzzw + mad r7.zw, r7.zzzw, l(0.000000, 0.000000, 1.443000, 1.443000), l(0.000000, 0.000000, 1.443000, 1.443000) + mul r8.xyzw, r3.xyzw, r3.xyzw + mov r13.xyz, r8.wwww + mov r0.w, l(0) +else + mad r2.xyz, r2.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) + dp3 r5.w, r2.xyzx, r2.xyzx + rsq r5.w, r5.w + mul r10.xyz, r2.xyzx, r5.wwww + mul r3.xyzw, r3.xyzw, r3.xyzw + ieq r2.x, r0.z, l(5) + if_nz r2.x + mul r8.xyz, r3.wwww, r3.xyzx + mov r13.xyz, r3.xyzx + else + ieq r2.x, r0.z, l(1) + if_nz r2.x + mul r13.xyz, r3.xyzx, r3.wwww + else + mov r13.xyz, r3.wwww + endif + mov r8.xyz, r3.xyzx + endif + lt r2.x, l(0.000000), r13.x + and r0.w, r2.w, r2.x + mad r2.x, r0.w, l(12.000000), l(1.000000) + exp r2.x, r2.x + mad r7.z, r2.x, l(1.443000), l(1.443000) + mov r7.w, l(0) + mov r11.xyz, l(0,0,0,0) + mov r9.xyz, l(0,0,0,0) + mov r12.xw, l(0,0,0,0) +endif +mad r2.xy, r0.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r6.xy, r2.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000) +mov r6.w, l(1.000000) +dp4 r2.x, r6.xyzw, cb0[2].xyzw +dp4 r2.y, r6.xyzw, cb0[3].xyzw +dp4 r2.z, r6.xyzw, cb0[4].xyzw +dp4 r2.w, r6.xyzw, cb0[5].xyzw +div r2.w, l(1.000000, 1.000000, 1.000000, 1.000000), r2.w +mul r3.xyz, r2.wwww, r2.xzyx +dp3 r2.x, r3.xyzx, r3.xyzx +rsq r2.z, r2.x +mul r6.xyz, r2.zzzz, r3.xzyx +log r3.w, |r4.y| +mul r3.w, r3.w, cb0[13].z +exp r3.w, r3.w +ld_indexable(texture2d)(float,float,float,float) r1.x, r1.xyzw, t10.xyzw +mad r1.y, r2.y, r2.w, cb0[0].y +mul r1.yz, r1.yyyy, cb0[8].xxzx +mad r1.yz, r1.yyzy, cb0[6].wwww, r3.xxyx +mad r1.yz, r1.yyzy, cb0[6].zzzz, cb0[6].xxyx +sample_l_indexable(texture2d)(float,float,float,float) r1.y, r1.yzyy, t0.yxzw, s0, l(0.000000) +add_sat r1.y, r1.y, cb0[7].x +log r1.y, r1.y +mul r1.y, r1.y, cb0[7].y +exp r1.y, r1.y +sqrt r1.z, r2.x +add r1.z, r1.z, -cb0[7].z +mul_sat r1.z, r1.z, cb0[7].w +mul r1.z, r1.z, r1.z +add r1.w, -r1.y, l(1.000000) +mad r1.y, r1.z, r1.w, r1.y +mul r1.x, r1.y, r1.x +dp3 r1.y, r10.xyzx, cb0[8].xyzx +mov_sat r1.z, r1.y +mul r2.xyw, r1.zzzz, cb0[9].xyxz +mul r2.xyw, r1.xxxx, r2.xyxw +if_nz r7.x + mov_sat r12.w, r12.w + mad r1.y, r12.w, l(0.500000), r1.y + mad r1.z, r12.w, l(0.500000), l(1.000000) + div_sat r1.y, r1.y, r1.z + mul r1.yzw, r1.yyyy, cb0[9].xxyz + mul r1.yzw, r1.xxxx, r1.yyzw + mad r12.xyz, -r10.xyzx, r12.xxxx, r9.xyzx + dp3 r4.y, r12.xyzx, r12.xyzx + rsq r4.y, r4.y + mul r12.xyz, r4.yyyy, r12.xyzx + mad r14.xyz, -r3.xzyx, r2.zzzz, cb0[8].xyzx + dp3 r4.y, r14.xyzx, r14.xyzx + rsq r4.y, r4.y + mul r14.xyz, r4.yyyy, r14.xyzx + dp3 r4.y, r9.xyzx, r14.xyzx + mad r4.y, -r4.y, r4.y, l(1.000000) + max r4.y, r4.y, l(0.000000) + sqrt r4.y, r4.y + log r4.y, r4.y + mul r4.y, r4.y, r7.z + exp r4.y, r4.y + dp3 r5.w, r12.xyzx, r14.xyzx + mad r5.w, -r5.w, r5.w, l(1.000000) + max r5.w, r5.w, l(0.000000) + sqrt r5.w, r5.w + log r5.w, r5.w + mul r5.w, r5.w, r7.w + exp r5.w, r5.w + mul r9.xyz, r11.xyzx, r5.wwww + mad r9.xyz, r4.yyyy, r13.xxxx, r9.xyzx + mul r9.xyz, r9.xyzx, l(0.150000, 0.150000, 0.150000, 0.000000) + mul r9.xyz, r2.xywx, r9.xyzx + mul r9.xyz, r9.xyzx, cb0[9].wwww + mov r2.xyw, r1.yzyw +else + mad r1.yzw, -r3.xxzy, r2.zzzz, cb0[8].xxyz + dp3 r2.z, r1.yzwy, r1.yzwy + rsq r2.z, r2.z + mul r1.yzw, r1.yyzw, r2.zzzz + dp3_sat r1.y, r10.xyzx, r1.yzwy + mad r1.z, r7.z, l(0.086625), l(0.875000) + mad r1.y, r1.y, r7.z, -r7.z + exp r1.y, r1.y + mul r1.y, r1.y, r1.z + mul r1.yzw, r1.yyyy, r2.xxyw + mul r9.xyz, r1.yzwy, cb0[9].wwww +endif +mad r1.yzw, r5.xxyz, cb0[15].yyyy, r2.xxyw +ine r2.x, r0.z, l(4) +if_nz r2.x + dp3 r2.x, r6.xyzx, r10.xyzx + add r2.x, r2.x, r2.x + mad r2.xyz, r10.xyzx, -r2.xxxx, r6.xyzx + eq r11.xyzw, r4.zzzz, l(0.000000, 0.003922, 0.007843, 0.011765) + and r11.xyzw, r11.xyzw, cb0[13].xxxx + add r2.w, -cb0[13].w, l(1.000000) + mad r2.w, r1.x, r2.w, cb0[13].w + mul r2.w, r3.w, r2.w + ftoi r3.xy, cb0[16].xyxx + round_z r4.yz, cb0[16].xxyx + mad r4.yz, -r0.wwww, l(0.000000, 15.000000, 15.000000, 0.000000), r4.yyzy + add r4.yz, r4.yyzy, l(0.000000, 5.000000, 5.000000, 0.000000) + iadd r3.xy, r3.xyxx, l(-1, -1, 0, 0) + itof r3.xy, r3.xyxx + max r4.yz, r4.yyzy, l(0.000000, 0.000000, 0.000000, 0.000000) + min r3.xy, r3.xyxx, r4.yzyy + sample_l_indexable(texturecube)(float,float,float,float) r12.xyzw, r2.xyzx, t2.xyzw, s2, r3.y + dp4 r0.w, r11.xyzw, r12.xyzw + sample_l_indexable(texturecube)(float,float,float,float) r2.xyz, r2.xyzx, t1.xyzw, s1, r3.x + mul r2.xyz, r2.wwww, r2.xyzx + mad r9.xyz, r2.xyzx, cb0[14].xxxx, r9.xyzx +else + mov r0.w, l(0) +endif +mad r2.xyz, r5.xyzx, cb0[15].yyyy, cb0[13].yyyy +mul r2.xyz, r0.wwww, r2.xyzx +add r0.w, -r3.w, l(1.000000) +mad r2.xyz, r2.xyzx, r0.wwww, r9.xyzx +ige r0.z, r0.z, l(6) +if_nz r0.z + add_sat r0.z, r4.w, l(-0.023529) + add r3.y, -r0.z, l(1.000000) + mov_sat r4.x, r4.x + add r3.x, -r4.x, l(1.000000) + mad r4.xyz, r10.xyzx, cb0[11].wwww, cb0[8].xyzx + dp3_sat r0.z, -r6.xyzx, -r4.xyzx + mul r3.xy, r3.xyxx, cb0[11].yyyy + mul r3.xy, r3.xyxx, l(-1.442695, -1.442695, 0.000000, 0.000000) + exp r3.xy, r3.xyxx + mad r0.z, r0.z, cb0[11].z, cb0[11].x + dp2 r0.z, r0.zzzz, r3.xyxx + mul r0.z, r1.x, r0.z + mad r1.yzw, r0.zzzz, cb0[9].xxyz, r1.yyzw +endif +if_z r7.x + mul r2.xyz, r13.xyzx, r2.xyzx +endif +movc r0.z, r7.y, l(0), l(1.000000) +mul r3.xyz, r0.zzzz, r2.xyzx +mad o0.xyz, r1.yzwy, r8.xyzx, r3.xyzx +gather4_indexable(texture2d)(float,float,float,float) r0.xyzw, r0.xyxx, t3.xyzw, s3.x +min r0.x, r0.y, r0.x +min r0.x, r0.z, r0.x +min o0.w, r0.w, r0.x +mov o1.xyz, r2.xyzx +mov o1.w, l(1.000000) +ret +// Approximately 225 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ + \ No newline at end of file diff --git a/DragonAge/ShaderFixes/65382378c671ad08-vs_replace.txt b/DragonAge/ShaderFixes/65382378c671ad08-vs_replace.txt new file mode 100644 index 000000000..ff0282d45 Binary files /dev/null and b/DragonAge/ShaderFixes/65382378c671ad08-vs_replace.txt differ diff --git a/DragonAge/ShaderFixes/6c8e9a125ef34e74-ps_replace.txt b/DragonAge/ShaderFixes/6c8e9a125ef34e74-ps_replace.txt new file mode 100644 index 000000000..a5ec9fd40 --- /dev/null +++ b/DragonAge/ShaderFixes/6c8e9a125ef34e74-ps_replace.txt @@ -0,0 +1,268 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2DMS g_depthTexture : register(t4); +Texture2DMS g_gbufferTexture0 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz,v1.x).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyzw = r2.zzzz * r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/6d05dad1162469cf-ps_replace.txt b/DragonAge/ShaderFixes/6d05dad1162469cf-ps_replace.txt new file mode 100644 index 000000000..2241e16fd --- /dev/null +++ b/DragonAge/ShaderFixes/6d05dad1162469cf-ps_replace.txt @@ -0,0 +1,288 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2DMS g_depthTexture : register(t3); +Texture2DMS g_gbufferTexture0 : register(t4); +Texture2DMS g_gbufferTexture2 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.xyz = g_gbufferTexture0.Load(r0.xyw,v1.x).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz,v1.x).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.xy * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.xyz = r1.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.xyz, r1.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r1.xyz * r0.www; + } + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r7.x = r1.z; + r1.w = 1.000000000e+000; + while (true) { + r2.w = g_pcssFilterParameters0.z < r1.w; + r3.x = (int)r6.y < (int)r3.y; + r2.w = r2.w ? r3.x : 0; + if (r2.w == 0) break; + r2.w = (int)r3.z + (int)r6.y; + r3.x = r6.x; + r5.y = r6.y; + while (true) { + r3.w = (int)r5.y >= (int)r2.w; + if (r3.w != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r3.w = sqrt(r4.x); + r4.x = 6.283185482e+000 * r4.z; + sincos(r4.x, r4.x, r8.x); + r9.x = r4.x * r3.w; + r9.y = r8.x * r3.w; + r4.xz = r9.xy * r0.zz; + r3.w = dot(r0.xy, r4.xz); + r3.w = r3.w + r2.z; + r4.xz = r9.xy * r0.zz + r2.xy; + r3.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.xz, r3.w).x; + r3.w = dot(r3.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.x = r3.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.x; + r6.y = r5.y; + r2.w = r6.y; + r2.w = r6.x / r2.w; + r3.w = r2.w + -r7.x; + r4.x = r2.w + r7.x; + r4.x = 5.000000000e-001 * r4.x; + r1.w = r3.w / r4.x; + r7.x = r2.w; + r1.w = abs(r1.w); + } + } else { + r7.x = 1.000000000e+000; + } + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + r7.y = min(r0.z, r0.x); + o0.xyzw = r7.xxxy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/71537c80f74ee50b-ps_replace.txt b/DragonAge/ShaderFixes/71537c80f74ee50b-ps_replace.txt new file mode 100644 index 000000000..b93c425fa --- /dev/null +++ b/DragonAge/ShaderFixes/71537c80f74ee50b-ps_replace.txt @@ -0,0 +1,264 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2DMS g_depthTexture : register(t3); +Texture2DMS g_gbufferTexture0 : register(t4); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz,v1.x).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + o0.xyzw = r2.zzzz; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/73948454663078ed-ps_replace.txt b/DragonAge/ShaderFixes/73948454663078ed-ps_replace.txt new file mode 100644 index 000000000..dcd60c730 --- /dev/null +++ b/DragonAge/ShaderFixes/73948454663078ed-ps_replace.txt @@ -0,0 +1,373 @@ +//Lighting +cbuffer _Globals : register(b0) +{ + float2 g_invScreenSize : packoffset(c0); + float4x4 g_invViewProjMatrix : packoffset(c1); + float g_subRolloff : packoffset(c5); + float4 g_exposureMultipliers : packoffset(c6); +} + +//Added by Mike +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + + +Texture2D g_depthTexture : register(t0); +Texture2D g_gbufferTexture0 : register(t1); +Texture2D g_gbufferTexture1 : register(t2); +Texture2D g_gbufferTexture2 : register(t3); +Texture2D g_gbufferTexture4 : register(t4); + +Texture2D StereoParams : register(t125); +Texture1D IniParams : register(t120); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + out float4 o0 : SV_Target0, + out float4 o1 : SV_Target1) +{ + float4 r0,r1,r2,r3,r4,r5; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + r0.xy = g_invScreenSize.xy * v0.xy; + r1.xy = (int2)v0.xy; + r1.zw = float2(0.000000e+000,0.000000e+000); + r2.xyz = g_gbufferTexture0.Load(r1.xyw).xyz; + r3.xyzw = g_gbufferTexture1.Load(r1.xyw).xyzw; + r0.z = g_gbufferTexture2.Load(r1.xyw).w; + r4.z = g_depthTexture.Load(r1.xyw).x; + r0.z = 2.550000000e+002 * r0.z; + r0.z = round(r0.z); + r0.z = (int)r0.z; + r0.w = r0.z == 4; + if (r0.w != 0) { + r1.x = g_gbufferTexture4.Load(r1.xyz).w; + r1.yz = r2.xy * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r1.w = dot(r1.yz, r1.yz); + r5.zw = -r1.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r1.w = max(r5.z, 0.000000000e+000); + r1.w = sqrt(r1.w); + r5.xy = r1.yz * r1.ww; + r1.y = dot(r5.xyw, r5.xyw); + r1.y = rsqrt(r1.y); + r1.yzw = r5.xyw * r1.yyy; + r1.x = 2.550000000e+002 * r1.x; + r1.x = round(r1.x); + r2.w = 6.250000000e-002 * r1.x; + r2.w = trunc(r2.w); + r1.x = r1.x * 6.250000000e-002 + -r2.w; + r1.x = 1.066666722e+000 * r1.x; + r5.xyz = r3.xyz * r3.xyz; + } else { + r2.xyz = r2.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r2.w = dot(r2.xyz, r2.xyz); + r2.w = rsqrt(r2.w); + r1.yzw = r2.xyz * r2.www; + r5.xyzw = r3.xyzw * r3.xyzw; + r0.z = r0.z == 5; + if (r0.z != 0) { + r5.xyz = r5.xyz * r5.www; + } + r1.x = 0.000000000e+000; + } + r0.xy = r0.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r4.xy = float2(1.000000e+000,-1.000000e+000) * r0.xy; + r4.w = 1.000000000e+000; + +// float4 stereo = StereoParams.Load(0); +// float depth, C; +// depth = projMatrix._m22 + projMatrix._m32/r4.z; +// C = projMatrix._m22 + projMatrix._m32/stereo.y; +// r4.x -= stereo.x * (-depth - C)*0.38; + + + r0.x = dot(r4.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r0.y = dot(r4.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r0.z = dot(r4.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r2.x = dot(r4.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r2.x = 1.000000e+000 / r2.x; + +float4 r25, r23; +r23.xyz = r0.xyz * r2.xxx; +r23.w=1; + +r25.x = dot(r23.xyzw, b1.xyzw); +r25.y = dot(r23.xyzw, b2.xyzw); +r25.z = dot(r23.xyzw, b3.xyzw); +r25.w = dot(r23.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r23.x = dot(r25.xyzw, a1.xyzw); +r23.y = dot(r25.xyzw, a2.xyzw); +r23.z = dot(r25.xyzw, a3.xyzw); +r23.w = dot(r25.xyzw, a4.xyzw); + + + r2.yzw = r23.xyz + -v1.xyz; + // r2.yzw = r0.xyz * r2.xxx + -v1.xyz; + r2.y = dot(r2.yzw, v4.xyz); + r2.y = v4.w * r2.y; + r2.y = max(r2.y, -5.000000000e-001); + r2.y = min(r2.y, 5.000000000e-001); + r2.yzw = r2.yyy * v4.xyz + v1.xyz; + + r0.xyz = -r23.xyz + r2.yzw; + // r0.xyz = -r0.xyz * r2.xxx + r2.yzw; + r2.x = dot(r0.xyz, r0.xyz); + r2.y = rsqrt(r2.x); + r0.xyz = r2.yyy * r0.xyz; + r2.x = v3.w + r2.x; + r2.x = 1.000000e+000 / r2.x; + r2.x = v1.w + r2.x; + r2.x = max(r2.x, 0.000000000e+000); + r0.x = dot(r1.yzw, r0.xyz); + if (r0.w != 0) { + r1.x = saturate(r1.x); + r0.y = r1.x * 5.000000000e-001 + r0.x; + r0.z = r1.x * 5.000000000e-001 + 1.000000000e+000; + r0.y = saturate(r0.y / r0.z); + r0.yzw = v2.xyz * r0.yyy; + r0.yzw = r0.yzw * r2.xxx; + } else { + r0.x = saturate(r0.x); + r1.xyz = v2.xyz * r0.xxx; + r0.yzw = r1.xyz * r2.xxx; + } + o0.xyz = r0.yzw * r5.xyz; + o1.xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); + o0.w = 0.000000000e+000; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer $Globals +// { +// +// float2 g_invScreenSize; // Offset: 0 Size: 8 +// float4x4 g_invViewProjMatrix; // Offset: 16 Size: 64 +// float g_subRolloff; // Offset: 80 Size: 4 [unused] +// float4 g_exposureMultipliers; // Offset: 96 Size: 16 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// g_depthTexture texture float4 2d 0 1 +// g_gbufferTexture0 texture float4 2d 1 1 +// g_gbufferTexture1 texture float4 2d 2 1 +// g_gbufferTexture2 texture float4 2d 3 1 +// g_gbufferTexture4 texture float4 2d 4 1 +// $Globals cbuffer NA NA 0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float xyzw +// TEXCOORD 1 xyzw 2 NONE float xyz +// TEXCOORD 2 xyzw 3 NONE float w +// TEXCOORD 3 xyzw 4 NONE float xyzw +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// SV_Target 1 xyzw 1 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb0[5], immediateIndexed +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (float,float,float,float) t2 +dcl_resource_texture2d (float,float,float,float) t3 +dcl_resource_texture2d (float,float,float,float) t4 +dcl_input_ps_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.xyzw +dcl_input_ps linear v2.xyz +dcl_input_ps linear v3.w +dcl_input_ps linear v4.xyzw +dcl_output o0.xyzw +dcl_output o1.xyzw +dcl_temps 6 +mul r0.xy, v0.xyxx, cb0[0].xyxx +ftoi r1.xy, v0.xyxx +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r2.xyz, r1.xyww, t1.xyzw +ld_indexable(texture2d)(float,float,float,float) r3.xyzw, r1.xyww, t2.xyzw +ld_indexable(texture2d)(float,float,float,float) r0.z, r1.xyww, t3.xywz +ld_indexable(texture2d)(float,float,float,float) r4.z, r1.xyww, t0.yzxw +mul r0.z, r0.z, l(255.000000) +round_ne r0.z, r0.z +ftoi r0.z, r0.z +ieq r0.w, r0.z, l(4) +if_nz r0.w + ld_indexable(texture2d)(float,float,float,float) r1.x, r1.xyzw, t4.wxyz + mad r1.yz, r2.xxyx, l(0.000000, 4.000000, 4.000000, 0.000000), l(0.000000, -2.000000, -2.000000, 0.000000) + dp2 r1.w, r1.yzyy, r1.yzyy + mad r5.zw, -r1.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r1.w, r5.z, l(0.000000) + sqrt r1.w, r1.w + mul r5.xy, r1.wwww, r1.yzyy + dp3 r1.y, r5.xywx, r5.xywx + rsq r1.y, r1.y + mul r1.yzw, r1.yyyy, r5.xxyw + mul r1.x, r1.x, l(255.000000) + round_ne r1.x, r1.x + mul r2.w, r1.x, l(0.062500) + round_z r2.w, r2.w + mad r1.x, r1.x, l(0.062500), -r2.w + mul r1.x, r1.x, l(1.066667) + mul r5.xyz, r3.xyzx, r3.xyzx +else + mad r2.xyz, r2.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) + dp3 r2.w, r2.xyzx, r2.xyzx + rsq r2.w, r2.w + mul r1.yzw, r2.wwww, r2.xxyz + mul r5.xyzw, r3.xyzw, r3.xyzw + ieq r0.z, r0.z, l(5) + if_nz r0.z + mul r5.xyz, r5.wwww, r5.xyzx + endif + mov r1.x, l(0) +endif +mad r0.xy, r0.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r4.xy, r0.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000) +mov r4.w, l(1.000000) +dp4 r0.x, r4.xyzw, cb0[1].xyzw +dp4 r0.y, r4.xyzw, cb0[2].xyzw +dp4 r0.z, r4.xyzw, cb0[3].xyzw +dp4 r2.x, r4.xyzw, cb0[4].xyzw +div r2.x, l(1.000000, 1.000000, 1.000000, 1.000000), r2.x +mad r2.yzw, r0.xxyz, r2.xxxx, -v1.xxyz +dp3 r2.y, r2.yzwy, v4.xyzx +mul r2.y, r2.y, v4.w +max r2.y, r2.y, l(-0.500000) +min r2.y, r2.y, l(0.500000) +mad r2.yzw, r2.yyyy, v4.xxyz, v1.xxyz +mad r0.xyz, -r0.xyzx, r2.xxxx, r2.yzwy +dp3 r2.x, r0.xyzx, r0.xyzx +rsq r2.y, r2.x +mul r0.xyz, r0.xyzx, r2.yyyy +add r2.x, r2.x, v3.w +div r2.x, l(1.000000, 1.000000, 1.000000, 1.000000), r2.x +add r2.x, r2.x, v1.w +max r2.x, r2.x, l(0.000000) +dp3 r0.x, r1.yzwy, r0.xyzx +if_nz r0.w + mov_sat r1.x, r1.x + mad r0.y, r1.x, l(0.500000), r0.x + mad r0.z, r1.x, l(0.500000), l(1.000000) + div_sat r0.y, r0.y, r0.z + mul r0.yzw, r0.yyyy, v2.xxyz + mul r0.yzw, r2.xxxx, r0.yyzw +else + mov_sat r0.x, r0.x + mul r1.xyz, r0.xxxx, v2.xyzx + mul r0.yzw, r2.xxxx, r1.xxyz +endif +mul o0.xyz, r5.xyzx, r0.yzwy +mov o1.xyzw, l(0,0,0,0) +mov o0.w, l(0) +ret +// Approximately 80 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/DragonAge/ShaderFixes/768c9434abe74c8f-ps_replace.txt b/DragonAge/ShaderFixes/768c9434abe74c8f-ps_replace.txt new file mode 100644 index 000000000..9457a8607 --- /dev/null +++ b/DragonAge/ShaderFixes/768c9434abe74c8f-ps_replace.txt @@ -0,0 +1,352 @@ +//Fire decals +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +cbuffer externalConstants : register(b1) +{ + float4 external_DistortionSpeed_Tile : packoffset(c0); + float external_g_emitterTime : packoffset(c1); + float3 vc_pad1 : packoffset(c1.y); + float4 external_viewMatrix1 : packoffset(c2); + float4 external_viewMatrix2 : packoffset(c3); + float4 external_viewMatrix3 : packoffset(c4); + float4 external_viewMatrix4 : packoffset(c5); + float external_UVDistort_Power : packoffset(c6); + float3 vc_pad6 : packoffset(c6.y); + float4 external_TextureTile_Offset : packoffset(c7); + float3 external_Diff_01_RGB_Switch : packoffset(c8); + float1 vc_pad8 : packoffset(c8.w); + float4 external_ADepthTB_AAngle : packoffset(c9); + float3 external_Mask_RGB_Switch : packoffset(c10); + float1 vc_pad10 : packoffset(c10.w); +} +SamplerState sampler0_s : register(s0); +SamplerState sampler1_s : register(s1); +SamplerState sampler2_s : register(s2); +Texture2D texture_depthBufferTexture : register(t1); +Texture2D texture_normalBufferTexture : register(t2); +Texture2D texture_Diff_01 : register(t3); +Texture2D texture_DistortionClouds : register(t4); +Texture2D texture_Mask : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + float4 v5 : TEXCOORD4, + float4 v6 : TEXCOORD5, + float4 v7 : TEXCOORD6, + float4 v8 : TEXCOORD7, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3; + uint4 bitmask; + r0.xyz = external_viewMatrix2.xyz * v8.yyy; + r0.xyz = external_viewMatrix1.xyz * v8.xxx + r0.xyz; + r0.xyz = external_viewMatrix3.xyz * v8.zzz + r0.xyz; + r0.xyz = external_viewMatrix4.xyz + r0.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r0.xyz = r0.xyz / -r0.zzz; + r1.xy = screenSize.zw * v0.xy; + r0.w = texture_depthBufferTexture.Sample(sampler0_s, r1.xy).x; + r1.xyz = texture_normalBufferTexture.Sample(sampler0_s, r1.xy).xyz; + r1.xyz = r1.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + +float4 r26; +r26.xyz = r0.xyz * r0.www; +r26.w = 1.0; + +float4 stereo = StereoParams.Load(0); +r26.x -= stereo.x * (-r26.z - stereo.y)/projMatrix._m00; +r0.xyz = r26.xyz + -external_viewMatrix4.xyz; + + // r0.xyz = r0.xyz * r0.www + -external_viewMatrix4.xyz; + + r2.x = dot(external_viewMatrix1.xyz, r0.xyz); + r2.y = dot(external_viewMatrix2.xyz, r0.xyz); + r2.z = dot(external_viewMatrix3.xyz, r0.xyz); + r2.w = 1.000000000e+000; + r0.x = dot(r2.xyzw, v2.xyzw); + r0.y = dot(r2.xyzw, v3.xyzw); + r0.z = dot(r2.xyzw, v4.xyzw); + r0.w = dot(r2.xyzw, v5.xyzw); + r0.xyz = r0.xyz / r0.www; + r2.xyz = float3(5.000000e-001,5.000000e-001,5.000000e-001) + -abs(-r0.xyz); + r0.xyz = float3(5.000000e-001,5.000000e-001,5.000000e-001) + r0.xyz; + r2.x = r2.x < 0; + r2.y = r2.y < 0; + r2.z = r2.z < 0; + r0.w = (int)r2.y | (int)r2.x; + r0.w = (int)r2.z | (int)r0.w; + if (r0.w != 0) discard; + r2.xy = external_DistortionSpeed_Tile.zw * r0.xz; + r2.xy = external_DistortionSpeed_Tile.xy * external_g_emitterTime + r2.xy; + r2.xy = v1.xy + r2.xy; + r2.xy = texture_DistortionClouds.Sample(sampler2_s, r2.xy).xy; + r2.zw = r0.xz * external_TextureTile_Offset.xy + -external_TextureTile_Offset.zw; + r2.xy = r2.xy * external_UVDistort_Power + r2.zw; + r2.xyz = texture_Diff_01.Sample(sampler1_s, r2.xy).xyz; + r0.w = saturate(dot(r2.xyz, external_Diff_01_RGB_Switch.xyz)); + r1.w = r0.w * v7.w + -v7.z; + r2.xyz = v6.xyz * r0.www; + r0.w = log2(r1.w); + r0.w = v7.y * r0.w; + r0.w = exp2(r0.w); + r0.w = v7.x * r0.w; + r3.xyz = texture_Mask.Sample(sampler1_s, r0.xz).xyz; + r0.x = saturate(dot(r3.xyz, external_Mask_RGB_Switch.xyz)); + r0.x = r0.x * r0.w; + r0.z = 1.000000000e+000 + -r0.y; + r0.y = log2(r0.y); + r0.y = external_ADepthTB_AAngle.x * r0.y; + r0.y = exp2(r0.y); + r0.z = log2(r0.z); + r0.z = external_ADepthTB_AAngle.y * r0.z; + r0.z = exp2(r0.z); + r0.y = r0.y + r0.z; + r0.y = 1.000000000e+000 + -r0.y; + r0.x = r0.y * r0.x; + r0.yzw = r0.yyy * r2.xyz; + r1.w = dot(v3.xyz, v3.xyz); + r1.w = rsqrt(r1.w); + r2.xyz = v3.xyz * r1.www; + r1.x = dot(r1.xyz, r2.xyz); + r1.x = external_ADepthTB_AAngle.z + -abs(-r1.x); + r1.y = external_ADepthTB_AAngle.w + -external_ADepthTB_AAngle.z; + r1.x = r1.x / r1.y; + r1.x = saturate(1.000000000e+000 + r1.x); + r0.x = r1.x * r0.x; + o0.xyz = r0.yzw * r0.xxx; + o0.w = r0.x; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer viewConstants +// { +// +// float1 time; // Offset: 0 Size: 4 [unused] +// float3 vc_pad0_; // Offset: 4 Size: 12 [unused] +// float4 screenSize; // Offset: 16 Size: 16 +// float3 debugNonFiniteColor; // Offset: 32 Size: 12 [unused] +// float1 vc_pad2_; // Offset: 44 Size: 4 [unused] +// float4x4 viewMatrix; // Offset: 48 Size: 64 [unused] +// float4x4 projMatrix; // Offset: 112 Size: 64 [unused] +// float4x4 viewProjMatrix; // Offset: 176 Size: 64 [unused] +// float4x4 crViewProjMatrix; // Offset: 240 Size: 64 [unused] +// float4 projectionKxKyKzKw; // Offset: 304 Size: 16 [unused] +// float3 cameraPos; // Offset: 320 Size: 12 [unused] +// float1 vc_pad8_; // Offset: 332 Size: 4 [unused] +// float3 transparentStartAndSlopeAndClamp;// Offset: 336 Size: 12 [unused] +// float1 vc_pad9_; // Offset: 348 Size: 4 [unused] +// float4 transparentCurve; // Offset: 352 Size: 16 [unused] +// float4 exposureMultipliers; // Offset: 368 Size: 16 [unused] +// float4 fogParams; // Offset: 384 Size: 16 [unused] +// float4 fogForwardScatteringParamsGradientScaleFogEnable;// Offset: 400 Size: 16 [unused] +// float4 fogForwardScatteringColorPresence;// Offset: 416 Size: 16 [unused] +// float4 fogCoefficients; // Offset: 432 Size: 16 [unused] +// float4 fogColorCoefficients; // Offset: 448 Size: 16 [unused] +// float4 fogColor; // Offset: 464 Size: 16 [unused] +// float4 fogStartDistance; // Offset: 480 Size: 16 [unused] +// float4 fogHeightFogCoefficients; // Offset: 496 Size: 16 [unused] +// float4 fogMiscParam; // Offset: 512 Size: 16 [unused] +// float2 fogEnabledMode; // Offset: 528 Size: 8 [unused] +// float2 vc_pad10_; // Offset: 536 Size: 8 [unused] +// +// } +// +// cbuffer externalConstants +// { +// +// float4 external_DistortionSpeed_Tile;// Offset: 0 Size: 16 +// float external_g_emitterTime; // Offset: 16 Size: 4 +// float3 vc_pad1; // Offset: 20 Size: 12 [unused] +// float4 external_viewMatrix1; // Offset: 32 Size: 16 +// float4 external_viewMatrix2; // Offset: 48 Size: 16 +// float4 external_viewMatrix3; // Offset: 64 Size: 16 +// float4 external_viewMatrix4; // Offset: 80 Size: 16 +// float external_UVDistort_Power; // Offset: 96 Size: 4 +// float3 vc_pad6; // Offset: 100 Size: 12 [unused] +// float4 external_TextureTile_Offset;// Offset: 112 Size: 16 +// float3 external_Diff_01_RGB_Switch;// Offset: 128 Size: 12 +// float1 vc_pad8; // Offset: 140 Size: 4 [unused] +// float4 external_ADepthTB_AAngle; // Offset: 144 Size: 16 +// float3 external_Mask_RGB_Switch; // Offset: 160 Size: 12 +// float1 vc_pad10; // Offset: 172 Size: 4 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// sampler0 sampler NA NA 0 1 +// sampler1 sampler NA NA 1 1 +// sampler2 sampler NA NA 2 1 +// texture_depthBufferTexture texture float4 2d 1 1 +// texture_normalBufferTexture texture float4 2d 2 1 +// texture_Diff_01 texture float4 2d 3 1 +// texture_DistortionClouds texture float4 2d 4 1 +// texture_Mask texture float4 2d 5 1 +// externalConstants cbuffer NA NA 1 1 +// viewConstants cbuffer NA NA 2 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float xy +// TEXCOORD 1 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float xyzw +// TEXCOORD 3 xyzw 4 NONE float xyzw +// TEXCOORD 4 xyzw 5 NONE float xyzw +// TEXCOORD 5 xyzw 6 NONE float xyz +// TEXCOORD 6 xyzw 7 NONE float xyzw +// TEXCOORD 7 xyzw 8 NONE float xyz +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb2[2], immediateIndexed +dcl_constantbuffer cb1[11], immediateIndexed +dcl_sampler s0, mode_default +dcl_sampler s1, mode_default +dcl_sampler s2, mode_default +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (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_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.xy +dcl_input_ps linear v2.xyzw +dcl_input_ps linear v3.xyzw +dcl_input_ps linear v4.xyzw +dcl_input_ps linear v5.xyzw +dcl_input_ps linear v6.xyz +dcl_input_ps linear v7.xyzw +dcl_input_ps linear v8.xyz +dcl_output o0.xyzw +dcl_temps 4 +mul r0.xyz, v8.yyyy, cb1[3].xyzx +mad r0.xyz, cb1[2].xyzx, v8.xxxx, r0.xyzx +mad r0.xyz, cb1[4].xyzx, v8.zzzz, r0.xyzx +add r0.xyz, r0.xyzx, cb1[5].xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +div r0.xyz, r0.xyzx, -r0.zzzz +mul r1.xy, v0.xyxx, cb2[1].zwzz +sample_indexable(texture2d)(float,float,float,float) r0.w, r1.xyxx, t1.yzwx, s0 +sample_indexable(texture2d)(float,float,float,float) r1.xyz, r1.xyxx, t2.xyzw, s0 +mad r1.xyz, r1.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) +mad r0.xyz, r0.xyzx, r0.wwww, -cb1[5].xyzx +dp3 r2.x, cb1[2].xyzx, r0.xyzx +dp3 r2.y, cb1[3].xyzx, r0.xyzx +dp3 r2.z, cb1[4].xyzx, r0.xyzx +mov r2.w, l(1.000000) +dp4 r0.x, r2.xyzw, v2.xyzw +dp4 r0.y, r2.xyzw, v3.xyzw +dp4 r0.z, r2.xyzw, v4.xyzw +dp4 r0.w, r2.xyzw, v5.xyzw +div r0.xyz, r0.xyzx, r0.wwww +add r2.xyz, -|r0.xyzx|, l(0.500000, 0.500000, 0.500000, 0.000000) +add r0.xyz, r0.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000) +lt r2.xyz, r2.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000) +or r0.w, r2.y, r2.x +or r0.w, r2.z, r0.w +discard_nz r0.w +mul r2.xy, r0.xzxx, cb1[0].zwzz +mad r2.xy, cb1[0].xyxx, cb1[1].xxxx, r2.xyxx +add r2.xy, r2.xyxx, v1.xyxx +sample_indexable(texture2d)(float,float,float,float) r2.xy, r2.xyxx, t4.xyzw, s2 +mad r2.zw, r0.xxxz, cb1[7].xxxy, -cb1[7].zzzw +mad r2.xy, r2.xyxx, cb1[6].xxxx, r2.zwzz +sample_indexable(texture2d)(float,float,float,float) r2.xyz, r2.xyxx, t3.xyzw, s1 +dp3_sat r0.w, r2.xyzx, cb1[8].xyzx +mad r1.w, r0.w, v7.w, -v7.z +mul r2.xyz, r0.wwww, v6.xyzx +log r0.w, r1.w +mul r0.w, r0.w, v7.y +exp r0.w, r0.w +mul r0.w, r0.w, v7.x +sample_indexable(texture2d)(float,float,float,float) r3.xyz, r0.xzxx, t5.xyzw, s1 +dp3_sat r0.x, r3.xyzx, cb1[10].xyzx +mul r0.x, r0.w, r0.x +add r0.z, -r0.y, l(1.000000) +log r0.y, r0.y +mul r0.y, r0.y, cb1[9].x +exp r0.y, r0.y +log r0.z, r0.z +mul r0.z, r0.z, cb1[9].y +exp r0.z, r0.z +add r0.y, r0.z, r0.y +add r0.y, -r0.y, l(1.000000) +mul r0.x, r0.x, r0.y +mul r0.yzw, r2.xxyz, r0.yyyy +dp3 r1.w, v3.xyzx, v3.xyzx +rsq r1.w, r1.w +mul r2.xyz, r1.wwww, v3.xyzx +dp3 r1.x, r1.xyzx, r2.xyzx +add r1.x, -|r1.x|, cb1[9].z +add r1.y, -cb1[9].z, cb1[9].w +div r1.x, r1.x, r1.y +add_sat r1.x, r1.x, l(1.000000) +mul r0.x, r0.x, r1.x +mul o0.xyz, r0.xxxx, r0.yzwy +mov o0.w, r0.x +ret +// Approximately 68 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ + \ No newline at end of file diff --git a/DragonAge/ShaderFixes/799e5548087efdef-ps_replace.txt b/DragonAge/ShaderFixes/799e5548087efdef-ps_replace.txt new file mode 100644 index 000000000..a32067d99 --- /dev/null +++ b/DragonAge/ShaderFixes/799e5548087efdef-ps_replace.txt @@ -0,0 +1,565 @@ +//Shadows/Lights +cbuffer _Globals : register(b0) +{ + float2 g_invScreenSize : packoffset(c0); + float4x4 g_invViewProjMatrix : packoffset(c1); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c5); + float g_subRolloff : packoffset(c6); + float4 g_exposureMultipliers : packoffset(c7); + uint4 g_shadowmapDimensions : packoffset(c8); +} + +//Added by Mike +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +Texture2D g_depthTexture : register(t0); +Texture2D g_gbufferTexture0 : register(t1); +Texture2D g_gbufferTexture1 : register(t2); +Texture2D g_gbufferTexture2 : register(t3); +Texture2D g_gbufferTexture4 : register(t4); + +Texture2D StereoParams : register(t125); +Texture1D IniParams : register(t120); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + float4 v5 : TEXCOORD4, + float4 v6 : TEXCOORD5, + float4 v7 : TEXCOORD6, + float4 v8 : TEXCOORD7, + float4 v9 : TEXCOORD8, + float4 v10 : TEXCOORD9, + out float4 o0 : SV_Target0, + out float4 o1 : SV_Target1) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = g_invScreenSize.xy * v0.xy; + r1.xy = (int2)v0.xy; + r1.zw = float2(0.000000e+000,0.000000e+000); + r2.xyzw = g_gbufferTexture0.Load(r1.xyw).xyzw; + r3.xyzw = g_gbufferTexture1.Load(r1.xyw).xyzw; + r0.z = g_gbufferTexture2.Load(r1.xyw).w; + r4.z = g_depthTexture.Load(r1.xyw).x; + r0.z = 2.550000000e+002 * r0.z; + r0.z = round(r0.z); + r0.z = (int)r0.z; + r5.xy = r0.zz == float2(4.000000e+000,2.000000e+000); + if (r5.x != 0) { + r1.xyzw = g_gbufferTexture4.Load(r1.xyz).xyzw; + r6.xyzw = r2.xyzw * float4(4.000000e+000,4.000000e+000,4.000000e+000,4.000000e+000) + float4(-2.000000e+000,-2.000000e+000,-2.000000e+000,-2.000000e+000); + r0.w = dot(r6.xy, r6.xy); + r7.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r7.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r7.xy = r6.xy * r0.ww; + r0.w = dot(r7.xyw, r7.xyw); + r0.w = rsqrt(r0.w); + r7.xyz = r7.xyw * r0.www; + r0.w = dot(r6.zw, r6.zw); + r8.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r8.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r8.xy = r6.zw * r0.ww; + r0.w = dot(r8.xyw, r8.xyw); + r0.w = rsqrt(r0.w); + r6.xyz = r8.xyw * r0.www; + r0.w = dot(r1.xy, float2(6.528000e+004,2.550000e+002)); + r0.w = round(r0.w); + r1.x = 3.125000000e-002 * r0.w; + r1.x = trunc(r1.x); + r8.z = r0.w * 3.125000000e-002 + -r1.x; + r0.w = 1.562500000e-002 * r1.x; + r8.x = trunc(r0.w); + r8.y = r1.x * 1.562500000e-002 + -r8.x; + r8.xyz = float3(3.225806e-002,1.015873e+000,1.032258e+000) * r8.xyz; + r1.xy = float2(2.550000e+002,2.550000e+002) * r1.zw; + r1.xy = round(r1.xy); + r1.zw = float2(6.250000e-002,6.250000e-002) * r1.xy; + r9.xy = trunc(r1.zw); + r9.zw = r1.xy * float2(6.250000e-002,6.250000e-002) + -r9.xy; + r1.xw = float2(1.066667e+000,6.666667e-002) * r9.wy; + r1.yz = r9.xz * float2(8.000001e-001,1.280000e+001) + float2(1.000000e+000,1.000000e+000); + r1.yz = exp2(r1.yz); + r1.yz = r1.yz * float2(1.443000e+000,1.443000e+000) + float2(1.443000e+000,1.443000e+000); + r9.xyzw = r3.xyzw * r3.xyzw; + r10.xyz = r9.www; + } else { + r2.xyz = r2.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r2.xyz, r2.xyz); + r0.w = rsqrt(r0.w); + r7.xyz = r2.xyz * r0.www; + r3.xyzw = r3.xyzw * r3.xyzw; + r0.w = r0.z == 5; + if (r0.w != 0) { + r9.xyz = r3.xyz * r3.www; + r10.xyz = r3.xyz; + } else { + r0.z = r0.z == 1; + if (r0.z != 0) { + r10.xyz = r3.www * r3.xyz; + } else { + r10.xyz = r3.www; + } + r9.xyz = r3.xyz; + } + r0.z = 0.000000000e+000 < r10.x; + r0.z = r0.z ? r2.w : 0; + r0.z = r0.z * 1.200000000e+001 + 1.000000000e+000; + r0.z = exp2(r0.z); + r1.y = r0.z * 1.442999959e+000 + 1.442999959e+000; + r6.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r1.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r8.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + } + r0.xy = r0.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r4.xy = float2(1.000000e+000,-1.000000e+000) * r0.xy; + r4.w = 1.000000000e+000; + +// float4 stereo = StereoParams.Load(0); +// float depth, C; +// depth = projMatrix._m22 + projMatrix._m32/r4.z; +// C = projMatrix._m22 + projMatrix._m32/stereo.y; +// r4.x -= stereo.x * (-depth - C)*0.38; +// r4.x += stereo.x * (depth - stereo.y)*projMatrix._m00; +// r4.x += stereo.x * (r4.z - stereo.y)*2; +// r4.x += stereo.x * (-r4.w - stereo.y+2)*0.5*r4.z*projMatrix._m00; +// r4.x += stereo.x * (r4.z - stereo.y - 1.0)*projMatrix._m00; +// r4.x += stereo.x *projMatrix._m00; + + r0.x = dot(r4.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r0.y = dot(r4.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r0.z = dot(r4.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.w = dot(r4.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r0.w = 1.000000e+000 / r0.w; + r2.xyz = r0.xyz * r0.www; + + +float4 r25, r23; +r23.xyzw = r2.xyzw; +r23.w=1; + +r25.x = dot(r23.xyzw, b1.xyzw); +r25.y = dot(r23.xyzw, b2.xyzw); +r25.z = dot(r23.xyzw, b3.xyzw); +r25.w = dot(r23.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r23.x = dot(r25.xyzw, a1.xyzw); +r23.y = dot(r25.xyzw, a2.xyzw); +r23.z = dot(r25.xyzw, a3.xyzw); +r23.w = dot(r25.xyzw, a4.xyzw); + + + r2.w = dot(r23.xyz, r23.xyz); + r2.w = rsqrt(r2.w); + r2.xyz = r23.xyz * r2.www; + + r0.xyz = -r23.xyz + v1.xyz; + // r0.xyz = -r0.xyz * r0.www + v1.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r2.w = rsqrt(r0.w); + r3.xyz = r2.www * r0.xyz; + r0.w = v3.w + r0.w; + r0.w = 1.000000e+000 / r0.w; + r0.w = v1.w + r0.w; + r0.w = max(r0.w, 0.000000000e+000); + r3.w = dot(v6.xyz, r3.xyz); + r3.w = saturate(r3.w * v5.x + v5.y); + r3.w = 1.000000000e+000 + -r3.w; + r0.w = r3.w * r0.w; + r3.x = dot(r7.xyz, r3.xyz); + r3.y = saturate(r3.x); + r3.yzw = v2.xyz * r3.yyy; + r3.yzw = r3.yzw * r0.www; + if (r5.x != 0) { + r1.x = saturate(r1.x); + r3.x = r1.x * 5.000000000e-001 + r3.x; + r1.x = r1.x * 5.000000000e-001 + 1.000000000e+000; + r1.x = saturate(r3.x / r1.x); + r4.xyz = v2.xyz * r1.xxx; + r4.xyz = r4.xyz * r0.www; + r11.xyz = -r7.xyz * r1.www + r6.xyz; + r0.w = dot(r11.xyz, r11.xyz); + r0.w = rsqrt(r0.w); + r11.xyz = r11.xyz * r0.www; + r12.xyz = r0.xyz * r2.www + -r2.xyz; + r0.w = dot(r12.xyz, r12.xyz); + r0.w = rsqrt(r0.w); + r12.xyz = r12.xyz * r0.www; + r0.w = dot(r6.xyz, r12.xyz); + r0.w = -r0.w * r0.w + 1.000000000e+000; + r0.w = max(r0.w, 0.000000000e+000); + r0.w = sqrt(r0.w); + r0.w = log2(r0.w); + r0.w = r1.y * r0.w; + r0.w = exp2(r0.w); + r1.x = dot(r11.xyz, r12.xyz); + r1.x = -r1.x * r1.x + 1.000000000e+000; + r1.x = max(r1.x, 0.000000000e+000); + r1.x = sqrt(r1.x); + r1.x = log2(r1.x); + r1.x = r1.z * r1.x; + r1.x = exp2(r1.x); + r1.xzw = r1.xxx * r8.xyz; + r1.xzw = r0.www * r10.xxx + r1.xzw; + r1.xzw = r3.yzw * r1.xzw; + r1.xzw = v2.www * r1.xzw; + r1.xzw = float3(1.500000e-001,1.500000e-001,1.500000e-001) * r1.xzw; + r3.yzw = r4.xyz; + } else { + r0.xyz = r0.xyz * r2.www + -r2.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r0.x = saturate(dot(r7.xyz, r0.xyz)); + r0.y = r1.y * 8.662509918e-002 + 8.750000000e-001; + r0.x = r0.x * r1.y + -r1.y; + r0.x = exp2(r0.x); + r0.x = r0.y * r0.x; + r0.xyz = r3.yzw * r0.xxx; + r1.xzw = v2.www * r0.xyz; + } + if (r5.x == 0) { + r1.xzw = r1.xzw * r10.xyz; + } + r0.x = r5.y ? 0.000000000e+000 : 1.000000000e+000; + r0.xyz = r1.xzw * r0.xxx; + o0.xyz = r3.yzw * r9.xyz + r0.xyz; + o1.xyz = r1.xzw; + o1.w = 0.000000000e+000; + o0.w = 0.000000000e+000; + + // o0=0; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer $Globals +// { +// +// float2 g_invScreenSize; // Offset: 0 Size: 8 +// float4x4 g_invViewProjMatrix; // Offset: 16 Size: 64 +// float4 g_shadowmapHalfSizeAndInvHalfSize;// Offset: 80 Size: 16 [unused] +// float g_subRolloff; // Offset: 96 Size: 4 [unused] +// float4 g_exposureMultipliers; // Offset: 112 Size: 16 [unused] +// uint4 g_shadowmapDimensions; // Offset: 128 Size: 16 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// g_depthTexture texture float4 2d 0 1 +// g_gbufferTexture0 texture float4 2d 1 1 +// g_gbufferTexture1 texture float4 2d 2 1 +// g_gbufferTexture2 texture float4 2d 3 1 +// g_gbufferTexture4 texture float4 2d 4 1 +// $Globals cbuffer NA NA 0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float xyzw +// TEXCOORD 1 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float w +// TEXCOORD 3 xyzw 4 NONE float +// TEXCOORD 4 xyzw 5 NONE float xy +// TEXCOORD 5 xyzw 6 NONE float xyz +// TEXCOORD 6 xyzw 7 NONE float +// TEXCOORD 7 xyzw 8 NONE float +// TEXCOORD 8 xyzw 9 NONE float +// TEXCOORD 9 xyzw 10 NONE float +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// SV_Target 1 xyzw 1 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb0[5], immediateIndexed +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (float,float,float,float) t2 +dcl_resource_texture2d (float,float,float,float) t3 +dcl_resource_texture2d (float,float,float,float) t4 +dcl_input_ps_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.xyzw +dcl_input_ps linear v2.xyzw +dcl_input_ps linear v3.w +dcl_input_ps linear v5.xy +dcl_input_ps linear v6.xyz +dcl_output o0.xyzw +dcl_output o1.xyzw +dcl_temps 13 +mul r0.xy, v0.xyxx, cb0[0].xyxx +ftoi r1.xy, v0.xyxx +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r1.xyww, t1.xyzw +ld_indexable(texture2d)(float,float,float,float) r3.xyzw, r1.xyww, t2.xyzw +ld_indexable(texture2d)(float,float,float,float) r0.z, r1.xyww, t3.xywz +ld_indexable(texture2d)(float,float,float,float) r4.z, r1.xyww, t0.yzxw +mul r0.z, r0.z, l(255.000000) +round_ne r0.z, r0.z +ftoi r0.z, r0.z +ieq r5.xy, r0.zzzz, l(4, 2, 0, 0) +if_nz r5.x + ld_indexable(texture2d)(float,float,float,float) r1.xyzw, r1.xyzw, t4.xyzw + mad r6.xyzw, r2.xyzw, l(4.000000, 4.000000, 4.000000, 4.000000), l(-2.000000, -2.000000, -2.000000, -2.000000) + dp2 r0.w, r6.xyxx, r6.xyxx + mad r7.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r7.z, l(0.000000) + sqrt r0.w, r0.w + mul r7.xy, r0.wwww, r6.xyxx + dp3 r0.w, r7.xywx, r7.xywx + rsq r0.w, r0.w + mul r7.xyz, r0.wwww, r7.xywx + dp2 r0.w, r6.zwzz, r6.zwzz + mad r8.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r8.z, l(0.000000) + sqrt r0.w, r0.w + mul r8.xy, r0.wwww, r6.zwzz + dp3 r0.w, r8.xywx, r8.xywx + rsq r0.w, r0.w + mul r6.xyz, r0.wwww, r8.xywx + dp2 r0.w, r1.xyxx, l(65280.000000, 255.000000, 0.000000, 0.000000) + round_ne r0.w, r0.w + mul r1.x, r0.w, l(0.031250) + round_z r1.x, r1.x + mad r8.z, r0.w, l(0.031250), -r1.x + mul r0.w, r1.x, l(0.015625) + round_z r8.x, r0.w + mad r8.y, r1.x, l(0.015625), -r8.x + mul r8.xyz, r8.xyzx, l(0.032258, 1.015873, 1.032258, 0.000000) + mul r1.xy, r1.zwzz, l(255.000000, 255.000000, 0.000000, 0.000000) + round_ne r1.xy, r1.xyxx + mul r1.zw, r1.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500) + round_z r9.xy, r1.zwzz + mad r9.zw, r1.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500), -r9.xxxy + mul r1.xw, r9.wwwy, l(1.066667, 0.000000, 0.000000, 0.066667) + mad r1.yz, r9.xxzx, l(0.000000, 0.800000, 12.800001, 0.000000), l(0.000000, 1.000000, 1.000000, 0.000000) + exp r1.yz, r1.yyzy + mad r1.yz, r1.yyzy, l(0.000000, 1.443000, 1.443000, 0.000000), l(0.000000, 1.443000, 1.443000, 0.000000) + mul r9.xyzw, r3.xyzw, r3.xyzw + mov r10.xyz, r9.wwww +else + mad r2.xyz, r2.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) + dp3 r0.w, r2.xyzx, r2.xyzx + rsq r0.w, r0.w + mul r7.xyz, r0.wwww, r2.xyzx + mul r3.xyzw, r3.xyzw, r3.xyzw + ieq r0.w, r0.z, l(5) + if_nz r0.w + mul r9.xyz, r3.wwww, r3.xyzx + mov r10.xyz, r3.xyzx + else + ieq r0.z, r0.z, l(1) + if_nz r0.z + mul r10.xyz, r3.xyzx, r3.wwww + else + mov r10.xyz, r3.wwww + endif + mov r9.xyz, r3.xyzx + endif + lt r0.z, l(0.000000), r10.x + and r0.z, r2.w, r0.z + mad r0.z, r0.z, l(12.000000), l(1.000000) + exp r0.z, r0.z + mad r1.y, r0.z, l(1.443000), l(1.443000) + mov r6.xyz, l(0,0,0,0) + mov r1.xzw, l(0,0,0,0) + mov r8.xyz, l(0,0,0,0) +endif +mad r0.xy, r0.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r4.xy, r0.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000) +mov r4.w, l(1.000000) +dp4 r0.x, r4.xyzw, cb0[1].xyzw +dp4 r0.y, r4.xyzw, cb0[2].xyzw +dp4 r0.z, r4.xyzw, cb0[3].xyzw +dp4 r0.w, r4.xyzw, cb0[4].xyzw +div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w +mul r2.xyz, r0.wwww, r0.xyzx +dp3 r2.w, r2.xyzx, r2.xyzx +rsq r2.w, r2.w +mul r2.xyz, r2.wwww, r2.xyzx +mad r0.xyz, -r0.xyzx, r0.wwww, v1.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r2.w, r0.w +mul r3.xyz, r0.xyzx, r2.wwww +add r0.w, r0.w, v3.w +div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w +add r0.w, r0.w, v1.w +max r0.w, r0.w, l(0.000000) +dp3 r3.w, v6.xyzx, r3.xyzx +mad_sat r3.w, r3.w, v5.x, v5.y +add r3.w, -r3.w, l(1.000000) +mul r0.w, r0.w, r3.w +dp3 r3.x, r7.xyzx, r3.xyzx +mov_sat r3.y, r3.x +mul r3.yzw, r3.yyyy, v2.xxyz +mul r3.yzw, r0.wwww, r3.yyzw +if_nz r5.x + mov_sat r1.x, r1.x + mad r3.x, r1.x, l(0.500000), r3.x + mad r1.x, r1.x, l(0.500000), l(1.000000) + div_sat r1.x, r3.x, r1.x + mul r4.xyz, r1.xxxx, v2.xyzx + mul r4.xyz, r0.wwww, r4.xyzx + mad r11.xyz, -r7.xyzx, r1.wwww, r6.xyzx + dp3 r0.w, r11.xyzx, r11.xyzx + rsq r0.w, r0.w + mul r11.xyz, r0.wwww, r11.xyzx + mad r12.xyz, r0.xyzx, r2.wwww, -r2.xyzx + dp3 r0.w, r12.xyzx, r12.xyzx + rsq r0.w, r0.w + mul r12.xyz, r0.wwww, r12.xyzx + dp3 r0.w, r6.xyzx, r12.xyzx + mad r0.w, -r0.w, r0.w, l(1.000000) + max r0.w, r0.w, l(0.000000) + sqrt r0.w, r0.w + log r0.w, r0.w + mul r0.w, r0.w, r1.y + exp r0.w, r0.w + dp3 r1.x, r11.xyzx, r12.xyzx + mad r1.x, -r1.x, r1.x, l(1.000000) + max r1.x, r1.x, l(0.000000) + sqrt r1.x, r1.x + log r1.x, r1.x + mul r1.x, r1.x, r1.z + exp r1.x, r1.x + mul r1.xzw, r8.xxyz, r1.xxxx + mad r1.xzw, r0.wwww, r10.xxxx, r1.xxzw + mul r1.xzw, r1.xxzw, r3.yyzw + mul r1.xzw, r1.xxzw, v2.wwww + mul r1.xzw, r1.xxzw, l(0.150000, 0.000000, 0.150000, 0.150000) + mov r3.yzw, r4.xxyz +else + mad r0.xyz, r0.xyzx, r2.wwww, -r2.xyzx + dp3 r0.w, r0.xyzx, r0.xyzx + rsq r0.w, r0.w + mul r0.xyz, r0.wwww, r0.xyzx + dp3_sat r0.x, r7.xyzx, r0.xyzx + mad r0.y, r1.y, l(0.086625), l(0.875000) + mad r0.x, r0.x, r1.y, -r1.y + exp r0.x, r0.x + mul r0.x, r0.x, r0.y + mul r0.xyz, r0.xxxx, r3.yzwy + mul r1.xzw, r0.xxyz, v2.wwww +endif +if_z r5.x + mul r1.xzw, r10.xxyz, r1.xxzw +endif +movc r0.x, r5.y, l(0), l(1.000000) +mul r0.xyz, r0.xxxx, r1.xzwx +mad o0.xyz, r3.yzwy, r9.xyzx, r0.xyzx +mov o1.xyz, r1.xzwx +mov o1.w, l(0) +mov o0.w, l(0) +ret +// Approximately 164 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ + \ No newline at end of file diff --git a/DragonAge/ShaderFixes/84ba87e2df5ed4bc-ps_replace.txt b/DragonAge/ShaderFixes/84ba87e2df5ed4bc-ps_replace.txt new file mode 100644 index 000000000..efdb3296d --- /dev/null +++ b/DragonAge/ShaderFixes/84ba87e2df5ed4bc-ps_replace.txt @@ -0,0 +1,129 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2DMS g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r1.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r1.xy, r1.z).x; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + r1.y = min(r0.z, r0.x); + o0.xyzw = r1.xxxy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/84be68e361a62cee-ps_replace.txt b/DragonAge/ShaderFixes/84be68e361a62cee-ps_replace.txt new file mode 100644 index 000000000..583d55e83 --- /dev/null +++ b/DragonAge/ShaderFixes/84be68e361a62cee-ps_replace.txt @@ -0,0 +1,281 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2D g_depthTexture : register(t3); +Texture2D g_gbufferTexture0 : register(t4); +Texture2D g_gbufferTexture2 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.yzw = g_gbufferTexture0.Load(r0.xyw).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.yz * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.yzw, r1.yzw); + r0.w = rsqrt(r0.w); + r0.xyz = r1.yzw * r0.www; + } + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + o0.xyzw = r2.zzzz; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/8dc3c14ea75b25c1-vs_replace.txt b/DragonAge/ShaderFixes/8dc3c14ea75b25c1-vs_replace.txt new file mode 100644 index 000000000..78894da5f --- /dev/null +++ b/DragonAge/ShaderFixes/8dc3c14ea75b25c1-vs_replace.txt @@ -0,0 +1,269 @@ +//Magic effect on ground +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +Texture2D StereoParams : register(t125); + +void main( + float3 v0 : TEXCOORD0, + float4 v1 : TEXCOORD1, + float4 v2 : TEXCOORD2, + float4 v3 : TEXCOORD3, + float4 v4 : TEXCOORD4, + float4 v5 : TEXCOORD5, + float3 v6 : TEXCOORD6, + float4 v7 : TEXCOORD7, + out float4 o0 : SV_Position0, + out float4 o1 : TEXCOORD0, + out float4 o2 : TEXCOORD1, + out float4 o3 : TEXCOORD2, + out float4 o4 : TEXCOORD3, + out float4 o5 : TEXCOORD4, + out float4 o6 : TEXCOORD5, + out float4 o7 : TEXCOORD6, + out float4 o8 : TEXCOORD7) +{ + float4 r0; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = crViewProjMatrix._m00_m10_m20_m30; +a2 = crViewProjMatrix._m01_m11_m21_m31; +a3 = crViewProjMatrix._m02_m12_m22_m32; +a4 = crViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + r0.xyz = -cameraPos.xyz + v0.xyz; + r0.w = 1.000000000e+000; + +float4 r10; + + r10.x = dot(r0.xyzw, crViewProjMatrix._m00_m10_m20_m30); + r10.y = dot(r0.xyzw, crViewProjMatrix._m01_m11_m21_m31); + r10.z = dot(r0.xyzw, crViewProjMatrix._m02_m12_m22_m32); + r10.w = dot(r0.xyzw, crViewProjMatrix._m03_m13_m23_m33); + +float4 r20; +r20.xyzw = r10.xyzw; + +float4 stereo = StereoParams.Load(0); +r20.x += stereo.x * (r20.w - stereo.y); + +//BACKTRANSFORM to r11 (a shifted r0) +float4 r11; + + r11.x = dot(r20.xyzw, b1.xyzw); + r11.y = dot(r20.xyzw, b2.xyzw); + r11.z = dot(r20.xyzw, b3.xyzw); + r11.w = dot(r20.xyzw, b4.xyzw); + +float4 r25; +r25.xyz = r11.xyz + cameraPos.xyz; + + +o0.xyzw = r10.xyzw; //unshifted + + o1.xyzw = v2.xyzw; + o2.xyzw = v3.xyzw; + o3.xyzw = v4.xyzw; + o4.xyzw = v5.xyzw; + o5.xyzw = v1.xyzw; + o6.xyzw = v7.xyzw; + o7.xyz = v6.xyz; + o7.w = 0.000000000e+000; + + o8.xyz = r25.xyz; //v0.xyz; //SHifted + + o8.w = 0.000000000e+000; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer viewConstants +// { +// +// float1 time; // Offset: 0 Size: 4 [unused] +// float3 vc_pad0_; // Offset: 4 Size: 12 [unused] +// float4 screenSize; // Offset: 16 Size: 16 [unused] +// float3 debugNonFiniteColor; // Offset: 32 Size: 12 [unused] +// float1 vc_pad2_; // Offset: 44 Size: 4 [unused] +// float4x4 viewMatrix; // Offset: 48 Size: 64 [unused] +// float4x4 projMatrix; // Offset: 112 Size: 64 [unused] +// float4x4 viewProjMatrix; // Offset: 176 Size: 64 [unused] +// float4x4 crViewProjMatrix; // Offset: 240 Size: 64 +// float4 projectionKxKyKzKw; // Offset: 304 Size: 16 [unused] +// float3 cameraPos; // Offset: 320 Size: 12 +// float1 vc_pad8_; // Offset: 332 Size: 4 [unused] +// float3 transparentStartAndSlopeAndClamp;// Offset: 336 Size: 12 [unused] +// float1 vc_pad9_; // Offset: 348 Size: 4 [unused] +// float4 transparentCurve; // Offset: 352 Size: 16 [unused] +// float4 exposureMultipliers; // Offset: 368 Size: 16 [unused] +// float4 fogParams; // Offset: 384 Size: 16 [unused] +// float4 fogForwardScatteringParamsGradientScaleFogEnable;// Offset: 400 Size: 16 [unused] +// float4 fogForwardScatteringColorPresence;// Offset: 416 Size: 16 [unused] +// float4 fogCoefficients; // Offset: 432 Size: 16 [unused] +// float4 fogColorCoefficients; // Offset: 448 Size: 16 [unused] +// float4 fogColor; // Offset: 464 Size: 16 [unused] +// float4 fogStartDistance; // Offset: 480 Size: 16 [unused] +// float4 fogHeightFogCoefficients; // Offset: 496 Size: 16 [unused] +// float4 fogMiscParam; // Offset: 512 Size: 16 [unused] +// float2 fogEnabledMode; // Offset: 528 Size: 8 [unused] +// float2 vc_pad10_; // Offset: 536 Size: 8 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// viewConstants cbuffer NA NA 2 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// TEXCOORD 0 xyz 0 NONE float xyz +// TEXCOORD 1 xyzw 1 NONE float xyzw +// TEXCOORD 2 xyzw 2 NONE float xyzw +// TEXCOORD 3 xyzw 3 NONE float xyzw +// TEXCOORD 4 xyzw 4 NONE float xyzw +// TEXCOORD 5 xyzw 5 NONE float xyzw +// TEXCOORD 6 xyz 6 NONE float xyz +// TEXCOORD 7 xyzw 7 NONE float xyzw +// +// +// 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 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float xyzw +// TEXCOORD 3 xyzw 4 NONE float xyzw +// TEXCOORD 4 xyzw 5 NONE float xyzw +// TEXCOORD 5 xyzw 6 NONE float xyzw +// TEXCOORD 6 xyzw 7 NONE float xyzw +// TEXCOORD 7 xyzw 8 NONE float xyzw +// +vs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb2[21], immediateIndexed +dcl_input v0.xyz +dcl_input v1.xyzw +dcl_input v2.xyzw +dcl_input v3.xyzw +dcl_input v4.xyzw +dcl_input v5.xyzw +dcl_input v6.xyz +dcl_input v7.xyzw +dcl_output_siv o0.xyzw, position +dcl_output o1.xyzw +dcl_output o2.xyzw +dcl_output o3.xyzw +dcl_output o4.xyzw +dcl_output o5.xyzw +dcl_output o6.xyzw +dcl_output o7.xyzw +dcl_output o8.xyzw +dcl_temps 1 +add r0.xyz, v0.xyzx, -cb2[20].xyzx +mov r0.w, l(1.000000) +dp4 o0.x, r0.xyzw, cb2[15].xyzw +dp4 o0.y, r0.xyzw, cb2[16].xyzw +dp4 o0.z, r0.xyzw, cb2[17].xyzw +dp4 o0.w, r0.xyzw, cb2[18].xyzw +mov o1.xyzw, v2.xyzw +mov o2.xyzw, v3.xyzw +mov o3.xyzw, v4.xyzw +mov o4.xyzw, v5.xyzw +mov o5.xyzw, v1.xyzw +mov o6.xyzw, v7.xyzw +mov o7.xyz, v6.xyzx +mov o7.w, l(0) +mov o8.xyz, v0.xyzx +mov o8.w, l(0) +ret +// Approximately 17 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/DragonAge/ShaderFixes/90b19c0bf2c21f1e-ps_replace.txt b/DragonAge/ShaderFixes/90b19c0bf2c21f1e-ps_replace.txt new file mode 100644 index 000000000..1beb55ac0 --- /dev/null +++ b/DragonAge/ShaderFixes/90b19c0bf2c21f1e-ps_replace.txt @@ -0,0 +1,282 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2DMS g_depthTexture : register(t3); +Texture2DMS g_gbufferTexture0 : register(t4); +Texture2DMS g_gbufferTexture2 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.yzw = g_gbufferTexture0.Load(r0.xyw,v1.x).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz,v1.x).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.yz * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.yzw, r1.yzw); + r0.w = rsqrt(r0.w); + r0.xyz = r1.yzw * r0.www; + } + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + o0.xyzw = r2.zzzz; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/9705e8ec0d4078b2-ps_replace.txt b/DragonAge/ShaderFixes/9705e8ec0d4078b2-ps_replace.txt new file mode 100644 index 000000000..0b96ec3ed --- /dev/null +++ b/DragonAge/ShaderFixes/9705e8ec0d4078b2-ps_replace.txt @@ -0,0 +1,133 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2DMS g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r1.xy, r1.z).x; + r0.yzw = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r1.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r1.xy, 0.000000000e+000).x; + r1.x = 1.000000000e+000 + -r1.x; + o0.xyz = r1.xxx * r0.xxx; + r0.xyz = saturate(abs(r0.yzw) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + o0.w = min(r0.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/98e9515c5ec8ea5c-ps_replace.txt b/DragonAge/ShaderFixes/98e9515c5ec8ea5c-ps_replace.txt new file mode 100644 index 000000000..729b5a469 --- /dev/null +++ b/DragonAge/ShaderFixes/98e9515c5ec8ea5c-ps_replace.txt @@ -0,0 +1,126 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r1.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r1.xy, r1.z).x; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + r1.y = min(r0.z, r0.x); + o0.xyzw = r1.xxxy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/New/cc79d4a79b16b59c-vs_replace.txt b/DragonAge/ShaderFixes/New/cc79d4a79b16b59c-vs_replace.txt new file mode 100644 index 000000000..fdc578786 --- /dev/null +++ b/DragonAge/ShaderFixes/New/cc79d4a79b16b59c-vs_replace.txt @@ -0,0 +1,44 @@ +// manually fixed shader +// Compiles to same ASM + + struct StoredBokeh + { + float2 position; // Offset: 0 + float2 radius; // Offset: 8 + float4 colorAndWeight; // Offset: 16 + }; // Offset: 0 Size: 32 + +StructuredBuffer g_BokehBuffer : register(t3); + +Texture2D StereoParams : register(t125); + +void main( + uint v0 : SV_VertexID0, + uint v1 : SV_InstanceID0, + out float4 o0 : SV_Position0, + out float4 o1 : COLOR0, + out float2 o2 : TEXCOORD0) +{ + float4 r0,r1; + uint4 bitmask; + bitmask.x = ((~(-1 << 1)) << 1) & 0xffffffff; + r0.x = (((uint)v0.x << 1) & bitmask.x) | ((uint)0 & ~bitmask.x); + r0.z = (int)v0.x & 2; + r0.xy = r0.xz; + r0.zw = r0.xy * float2(1.000000e+000,-1.000000e+000) + float2(-1.000000e+000,1.000000e+000); + o2.xy = float2(5.000000e-001,5.000000e-001) * r0.xy; +// ld_structured_indexable(structured_buffer, stride=32)(mixed,mixed,mixed,mixed) r1.xyzw, v1.x, l(0), t3.xyzw +r1.x = g_BokehBuffer[v1.x].position.x; +r1.y = g_BokehBuffer[v1.x].position.y; +r1.z = g_BokehBuffer[v1.x].radius.x; +r1.w = g_BokehBuffer[v1.x].radius.y; + r0.xy = r1.zw + r1.zw; + o0.xy = r0.zw * r0.xy + r1.xy; + o0.zw = float2(0.000000e+000,1.000000e+000); +// ld_structured_indexable(structured_buffer, stride=32)(mixed,mixed,mixed,mixed) o1.xyzw, v1.x, l(16), t3.xyzw +o1.x = g_BokehBuffer[v1.x].colorAndWeight.x; +o1.y = g_BokehBuffer[v1.x].colorAndWeight.y; +o1.z = g_BokehBuffer[v1.x].colorAndWeight.z; +o1.w = g_BokehBuffer[v1.x].colorAndWeight.w; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/New/f49fd0ca330167c6-vs_replace.txt b/DragonAge/ShaderFixes/New/f49fd0ca330167c6-vs_replace.txt new file mode 100644 index 000000000..2df1cfde0 --- /dev/null +++ b/DragonAge/ShaderFixes/New/f49fd0ca330167c6-vs_replace.txt @@ -0,0 +1,62 @@ +// Manually fixed. +// Very similar, but not identical ASM generated. (bfi slightly different, but valid) + + struct StoredBokeh + { + + float2 position; // Offset: 0 + float2 radius; // Offset: 8 + float4 colorAndWeight; // Offset: 16 + + }; // Offset: 0 Size: 32 + +StructuredBuffer g_BokehBuffer : register(t3); + +Texture2D StereoParams : register(t125); + +void main( + uint v0 : SV_VertexID0, + uint v1 : SV_InstanceID0, + out float4 o0 : SV_Position0, + out float4 o1 : COLOR0, + out float2 o2 : TEXCOORD0) +{ + const float4 icb[] = { { 0, 0, 0, 0}, + { 1, 0, 0, 0}, + { 2, 0, 0, 0}, + { 1, 0, 0, 0}, + { 3, 0, 0, 0}, + { 2, 0, 0, 0} }; + float4 r0,r1; + uint4 bitmask; +uint1 src0; +uint1 src1; +src0 = v0.x; +src1 = 6; + r0.x = src0 % src1; + bitmask.y = ((~(-1 << 1)) << 1) & 0xffffffff; + r0.y = (((uint)icb[r0.x].x << 1) & bitmask.y) | ((uint)0 & ~bitmask.y); + r1.x = r0.y; + r0.y = 2 & (int)icb[r0.x].x; + r0.x = (int)-r0.x + (int)v0.x; +src0 = r0.x; +src1 = 6; + r0.x = src0 / src1; + r1.y = r0.y; + r0.yz = r1.xy * float2(1.000000e+000,-1.000000e+000) + float2(-1.000000e+000,1.000000e+000); + o2.xy = float2(5.000000e-001,5.000000e-001) * r1.xy; +// ld_structured_indexable(structured_buffer, stride=32)(mixed,mixed,mixed,mixed) r1.xyzw, r0.x, l(0), t3.xyzw +r1.x = g_BokehBuffer[r0.x].position.x; +r1.y = g_BokehBuffer[r0.x].position.y; +r1.z = g_BokehBuffer[r0.x].radius.x; +r1.w = g_BokehBuffer[r0.x].radius.y; +// ld_structured_indexable(structured_buffer, stride=32)(mixed,mixed,mixed,mixed) o1.xyzw, r0.x, l(16), t3.xyzw +o1.x = g_BokehBuffer[r0.x].colorAndWeight.x; +o1.y = g_BokehBuffer[r0.x].colorAndWeight.y; +o1.z = g_BokehBuffer[r0.x].colorAndWeight.z; +o1.w = g_BokehBuffer[r0.x].colorAndWeight.w; + r0.xw = r1.zw + r1.zw; + o0.xy = r0.yz * r0.xw + r1.xy; + o0.zw = float2(0.000000e+000,1.000000e+000); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/a13db999dd2dd05f-vs_replace.txt b/DragonAge/ShaderFixes/a13db999dd2dd05f-vs_replace.txt new file mode 100644 index 000000000..4b2c2a6fe Binary files /dev/null and b/DragonAge/ShaderFixes/a13db999dd2dd05f-vs_replace.txt differ diff --git a/DragonAge/ShaderFixes/a18e53c08a3bccb9-ps_replace.txt b/DragonAge/ShaderFixes/a18e53c08a3bccb9-ps_replace.txt new file mode 100644 index 000000000..a05ce228f --- /dev/null +++ b/DragonAge/ShaderFixes/a18e53c08a3bccb9-ps_replace.txt @@ -0,0 +1,205 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2DMS g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.y = g_shadowmapDimensions.x; + r0.zw = r0.yy * r1.xy + float2(5.000000e-001,5.000000e-001); + r1.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r1.xy, 0.000000000e+000).x; + r1.x = 1.000000000e+000 + -r1.x; + r0.y = 1.000000e+000 / r0.y; + r1.yz = floor(r0.zw); + r0.zw = -r1.yz + r0.zw; + r1.yz = r1.yz * r0.yy; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(2,0)).xyzw; + r0.y = r0.z * 2.000000000e+000 + 2.000000000e+000; + r3.xy = float2(4.000000e+000,1.000000e+000) + -r0.zw; + r4.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(0,0)).xyzw; + r5.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.zzzz; + r6.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.zzzz; + r1.w = -r0.z * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(-2,0)).xyzw; + r3.z = r0.z * -2.000000000e+000 + 4.000000000e+000; + r8.xy = r7.wx * r1.ww; + r3.zw = r7.zy * r3.zz + r8.xy; + r3.w = r7.z * r6.z + r3.w; + r3.w = r7.w * r1.w + r3.w; + r3.w = r4.y * r5.y + r3.w; + r3.w = r4.x * r6.w + r3.w; + r3.w = r4.z * r5.z + r3.w; + r3.w = r4.w * r3.x + r3.w; + r2.y = dot(r2.yy, r0.zz); + r3.w = r2.y + r3.w; + r3.w = r2.x * r0.y + r3.w; + r2.z = dot(r2.zz, r0.zz); + r3.w = r2.z + r3.w; + r8.y = r2.w * r5.w + r3.w; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(0,-2)).xyzw; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(-2,-2)).xyzw; + r3.z = r10.y * r6.z + r3.z; + r3.z = r10.x * r1.w + r3.z; + r10.xyzw = r10.wzxy * r6.xyxy; + r7.zw = r10.xz + r10.yw; + r7.zw = r9.zy * float2(2.000000e+000,2.000000e+000) + r7.zw; + r7.zw = r9.wx * float2(2.000000e+000,2.000000e+000) + r7.zw; + r3.z = r4.z * r5.y + r3.z; + r3.z = r4.w * r6.w + r3.z; + r3.z = r9.y * r5.z + r3.z; + r3.z = r9.x * r3.x + r3.z; + r2.z = r3.z + r2.z; + r0.y = r2.w * r0.y + r2.z; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(2,-2)).xyzw; + r2.z = r9.y * r0.z; + r0.y = r2.z * 2.000000000e+000 + r0.y; + r8.x = r9.x * r5.w + r0.y; + r2.zw = r9.zy * r0.zz + r7.zw; + r2.zw = r9.wx * r5.xx + r2.zw; + r2.zw = r2.zw + r8.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r6.xyxy; + r3.zw = r9.xz + r9.yw; + r0.y = r8.z * r6.z + r3.w; + r0.y = r8.w * r1.w + r0.y; + r3.z = r7.y * r6.z + r3.z; + r1.w = r7.x * r1.w + r3.z; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(0,2)).xyzw; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(2,2)).xyzw; + r0.x = r6.y * 2.000000000e+000 + r0.y; + r0.x = r6.x * 2.000000000e+000 + r0.x; + r0.x = r6.z * r5.z + r0.x; + r0.x = r6.w * r3.x + r0.x; + r0.x = r7.y * r0.z + r0.x; + r0.x = r7.x * r5.x + r0.x; + r0.y = r7.z * r0.z; + r0.x = r0.y * 2.000000000e+000 + r0.x; + r0.y = r7.w * r5.w + r0.x; + r1.y = r6.z * 2.000000000e+000 + r1.w; + r1.y = r6.w * 2.000000000e+000 + r1.y; + r1.y = r4.y * r5.z + r1.y; + r1.y = r4.x * r3.x + r1.y; + r0.z = r7.z * r0.z + r1.y; + r0.z = r7.w * r5.x + r0.z; + r0.z = r2.y + r0.z; + r0.x = r2.x * r5.w + r0.z; + r0.xy = r2.zw + r0.xy; + r0.y = r0.y * r0.w; + r0.x = r0.x * r3.y + r0.y; + r0.x = 1.694915257e-002 * r0.x; + o0.xyzw = r0.xxxx * r1.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/aed7d685bda29aa9-vs_replace.txt b/DragonAge/ShaderFixes/aed7d685bda29aa9-vs_replace.txt new file mode 100644 index 000000000..e5827f7a2 --- /dev/null +++ b/DragonAge/ShaderFixes/aed7d685bda29aa9-vs_replace.txt @@ -0,0 +1,269 @@ +//Fire + ring decals +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +Texture2D StereoParams : register(t125); + +void main( + float3 v0 : TEXCOORD0, + float4 v1 : TEXCOORD1, + float4 v2 : TEXCOORD2, + float4 v3 : TEXCOORD3, + float4 v4 : TEXCOORD4, + float4 v5 : TEXCOORD5, + float4 v6 : TEXCOORD6, + float4 v7 : TEXCOORD7, + out float4 o0 : SV_Position0, + out float4 o1 : TEXCOORD0, + out float4 o2 : TEXCOORD1, + out float4 o3 : TEXCOORD2, + out float4 o4 : TEXCOORD3, + out float4 o5 : TEXCOORD4, + out float4 o6 : TEXCOORD5, + out float4 o7 : TEXCOORD6, + out float4 o8 : TEXCOORD7) +{ + float4 r0; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = crViewProjMatrix._m00_m10_m20_m30; +a2 = crViewProjMatrix._m01_m11_m21_m31; +a3 = crViewProjMatrix._m02_m12_m22_m32; +a4 = crViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + + r0.xyz = -cameraPos.xyz + v0.xyz; + r0.w = 1.000000000e+000; + +float4 r10; + + r10.x = dot(r0.xyzw, crViewProjMatrix._m00_m10_m20_m30); + r10.y = dot(r0.xyzw, crViewProjMatrix._m01_m11_m21_m31); + r10.z = dot(r0.xyzw, crViewProjMatrix._m02_m12_m22_m32); + r10.w = dot(r0.xyzw, crViewProjMatrix._m03_m13_m23_m33); + +float4 r20; +r20.xyzw = r10.xyzw; + +float4 stereo = StereoParams.Load(0); +r20.x += stereo.x * (r20.w - stereo.y); + +//BACKTRANSFORM to r11 (a shifted r0) +float4 r11; + + r11.x = dot(r20.xyzw, b1.xyzw); + r11.y = dot(r20.xyzw, b2.xyzw); + r11.z = dot(r20.xyzw, b3.xyzw); + r11.w = dot(r20.xyzw, b4.xyzw); + +float4 r25; +r25.xyz = r11.xyz + cameraPos.xyz; + + +o0.xyzw = r10.xyzw; //unshifted + + o1.xyzw = v1.xyzw; + o2.xyzw = v2.xyzw; + o3.xyzw = v3.xyzw; + o4.xyzw = v4.xyzw; + o5.xyzw = v5.xyzw; + o6.xyzw = v6.xyzw; + o7.xyzw = v7.xyzw; + + o8.xyz = r25.xyz; //v0.xyz; //SHifted + o8.w = 0.000000000e+000; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer viewConstants +// { +// +// float1 time; // Offset: 0 Size: 4 [unused] +// float3 vc_pad0_; // Offset: 4 Size: 12 [unused] +// float4 screenSize; // Offset: 16 Size: 16 [unused] +// float3 debugNonFiniteColor; // Offset: 32 Size: 12 [unused] +// float1 vc_pad2_; // Offset: 44 Size: 4 [unused] +// float4x4 viewMatrix; // Offset: 48 Size: 64 [unused] +// float4x4 projMatrix; // Offset: 112 Size: 64 [unused] +// float4x4 viewProjMatrix; // Offset: 176 Size: 64 [unused] +// float4x4 crViewProjMatrix; // Offset: 240 Size: 64 +// float4 projectionKxKyKzKw; // Offset: 304 Size: 16 [unused] +// float3 cameraPos; // Offset: 320 Size: 12 +// float1 vc_pad8_; // Offset: 332 Size: 4 [unused] +// float3 transparentStartAndSlopeAndClamp;// Offset: 336 Size: 12 [unused] +// float1 vc_pad9_; // Offset: 348 Size: 4 [unused] +// float4 transparentCurve; // Offset: 352 Size: 16 [unused] +// float4 exposureMultipliers; // Offset: 368 Size: 16 [unused] +// float4 fogParams; // Offset: 384 Size: 16 [unused] +// float4 fogForwardScatteringParamsGradientScaleFogEnable;// Offset: 400 Size: 16 [unused] +// float4 fogForwardScatteringColorPresence;// Offset: 416 Size: 16 [unused] +// float4 fogCoefficients; // Offset: 432 Size: 16 [unused] +// float4 fogColorCoefficients; // Offset: 448 Size: 16 [unused] +// float4 fogColor; // Offset: 464 Size: 16 [unused] +// float4 fogStartDistance; // Offset: 480 Size: 16 [unused] +// float4 fogHeightFogCoefficients; // Offset: 496 Size: 16 [unused] +// float4 fogMiscParam; // Offset: 512 Size: 16 [unused] +// float2 fogEnabledMode; // Offset: 528 Size: 8 [unused] +// float2 vc_pad10_; // Offset: 536 Size: 8 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// viewConstants cbuffer NA NA 2 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// TEXCOORD 0 xyz 0 NONE float xyz +// TEXCOORD 1 xyzw 1 NONE float xyzw +// TEXCOORD 2 xyzw 2 NONE float xyzw +// TEXCOORD 3 xyzw 3 NONE float xyzw +// TEXCOORD 4 xyzw 4 NONE float xyzw +// TEXCOORD 5 xyzw 5 NONE float xyzw +// TEXCOORD 6 xyzw 6 NONE float xyzw +// TEXCOORD 7 xyzw 7 NONE float xyzw +// +// +// 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 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float xyzw +// TEXCOORD 3 xyzw 4 NONE float xyzw +// TEXCOORD 4 xyzw 5 NONE float xyzw +// TEXCOORD 5 xyzw 6 NONE float xyzw +// TEXCOORD 6 xyzw 7 NONE float xyzw +// TEXCOORD 7 xyzw 8 NONE float xyzw +// +vs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb2[21], immediateIndexed +dcl_input v0.xyz +dcl_input v1.xyzw +dcl_input v2.xyzw +dcl_input v3.xyzw +dcl_input v4.xyzw +dcl_input v5.xyzw +dcl_input v6.xyzw +dcl_input v7.xyzw +dcl_output_siv o0.xyzw, position +dcl_output o1.xyzw +dcl_output o2.xyzw +dcl_output o3.xyzw +dcl_output o4.xyzw +dcl_output o5.xyzw +dcl_output o6.xyzw +dcl_output o7.xyzw +dcl_output o8.xyzw +dcl_temps 1 +add r0.xyz, v0.xyzx, -cb2[20].xyzx +mov r0.w, l(1.000000) +dp4 o0.x, r0.xyzw, cb2[15].xyzw +dp4 o0.y, r0.xyzw, cb2[16].xyzw +dp4 o0.z, r0.xyzw, cb2[17].xyzw +dp4 o0.w, r0.xyzw, cb2[18].xyzw +mov o1.xyzw, v1.xyzw +mov o2.xyzw, v2.xyzw +mov o3.xyzw, v3.xyzw +mov o4.xyzw, v4.xyzw +mov o5.xyzw, v5.xyzw +mov o6.xyzw, v6.xyzw +mov o7.xyzw, v7.xyzw +mov o8.xyz, v0.xyzx +mov o8.w, l(0) +ret +// Approximately 16 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ + \ No newline at end of file diff --git a/DragonAge/ShaderFixes/b270906713966d35-ps_replace.txt b/DragonAge/ShaderFixes/b270906713966d35-ps_replace.txt new file mode 100644 index 000000000..fec3b8787 --- /dev/null +++ b/DragonAge/ShaderFixes/b270906713966d35-ps_replace.txt @@ -0,0 +1,426 @@ + +cbuffer functionConstants : register(b0) +{ + float4 lightProbeShR : packoffset(c0); + float4 lightProbeShG : packoffset(c1); + float4 lightProbeShB : packoffset(c2); + float4 lightProbeShO : packoffset(c3); +} + +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +cbuffer externalConstants : register(b1) +{ + float3 external_Metal_Smoothness : packoffset(c0); + float1 vc_pad0 : packoffset(c0.w); + float4 external_IsRaining : packoffset(c1); + float3 external_Optional_Tint : packoffset(c2); + float1 vc_pad2 : packoffset(c2.w); + float3 external_Metal_Falloff_Colour : packoffset(c3); + float1 vc_pad3 : packoffset(c3.w); +} +SamplerState sampler0_s : register(s0); +Texture2D texture_Diffuse : register(t1); +Texture2D texture_Specular : register(t2); +Texture2D texture_Normal : register(t3); +Texture2D texture_Texture3 : register(t4); +Texture2D texture_Texture1 : register(t5); + +Texture2D StereoParams : register(t125); +Texture1D IniParams : register(t120); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + float4 v5 : TEXCOORD4, + uint v6 : SV_IsFrontFace0, + out float4 o0 : SV_Target0, + out float4 o1 : SV_Target1, + out float4 o2 : SV_Target2, + out float4 o3 : SV_Target3, + out float4 o4 : SV_Target4) +{ + float4 r0,r1,r2,r3,r4; + uint4 bitmask; + r0.x = v1.w; + r0.y = v2.w; + r1.xyzw = texture_Diffuse.Sample(sampler0_s, r0.xy).xyzw; + r0.z = -5.000000000e-001 + r1.w; + r1.xyz = external_Optional_Tint.xyz * r1.xyz; + r0.z = r0.z < 0.000000000e+000; + if (r0.z != 0) discard; + r2.xy = float2(0.000000e+000,1.500000e-001) * time; + r2.z = 0.000000000e+000; + r2.xyz = v1.xyz * float3(3.000000e-001,3.000000e-001,3.000000e-001) + r2.xyz; + r3.xyz = texture_Texture3.Sample(sampler0_s, r2.zy).xyw; + r2.xyz = texture_Texture3.Sample(sampler0_s, r2.xy).xyw; + r3.x = r3.x * r3.z; + r3.xy = r3.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.z = dot(r3.xy, r3.xy); + r0.z = 1.000000000e+000 + -r0.z; + r0.z = max(r0.z, 0.000000000e+000); + r3.z = sqrt(r0.z); + r2.x = r2.x * r2.z; + r2.xy = r2.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.z = dot(r2.xy, r2.xy); + r0.z = 1.000000000e+000 + -r0.z; + r0.z = max(r0.z, 0.000000000e+000); + r2.z = sqrt(r0.z); + r3.xyz = r3.xyz + -r2.xyz; + r0.z = saturate(-v2.x); + r0.w = saturate(v2.x); + r0.z = r0.z + r0.w; + r2.xyz = r0.zzz * r3.xyz + r2.xyz; + r3.xyz = texture_Normal.Sample(sampler0_s, r0.xy).xyw; + r0.xyz = texture_Specular.Sample(sampler0_s, r0.xy).xyz; + r3.x = r3.x * r3.z; + r3.xy = r3.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.w = dot(r3.xy, r3.xy); + r0.w = 1.000000000e+000 + -r0.w; + r0.w = max(r0.w, 0.000000000e+000); + r3.z = sqrt(r0.w); + r3.xyz = v6.xxx ? r3.xyz : -r3.xyz; + r4.xyz = float3(0.000000e+000,0.000000e+000,1.000000e+000) + -r3.xyz; + r4.xyz = r4.xyz * float3(2.000000e-002,2.000000e-002,2.000000e-002) + r3.xyz; + r4.xyz = r4.xyz + -r2.xyz; + r2.xyz = r4.xyz * float3(8.300000e-001,8.300000e-001,8.300000e-001) + r2.xyz; + r2.xyz = r2.xyz + -r3.xyz; + r4.xy = float2(8.000000e-002,8.000000e-002) * v1.xz; + r0.w = texture_Texture1.Sample(sampler0_s, r4.xy).x; + r0.w = -3.000000119e-001 + r0.w; + r0.w = saturate(r0.w + r0.w); + r1.w = r0.w * -2.000000000e+000 + 3.000000000e+000; + r0.w = r0.w * r0.w; + r0.w = r1.w * r0.w; + r2.xyz = r0.www * r2.xyz; + r0.w = 6.999999881e-001 + v2.y; + r0.w = saturate(1.000000095e+001 * r0.w); + r1.w = r0.w * -2.000000000e+000 + 3.000000000e+000; + r0.w = r0.w * r0.w; + r0.w = r1.w * r0.w; + r1.w = 6.999999881e-001 + -v2.y; + r1.w = saturate(1.000000095e+001 * r1.w); + r2.w = r1.w * -2.000000000e+000 + 3.000000000e+000; + r1.w = r1.w * r1.w; + r1.w = r2.w * r1.w; + r0.w = r1.w * r0.w; + +float4 r26; +r26.xyz = r0.www * r2.xyz; +r26.w = 1.0; + +float4 stereo = StereoParams.Load(0); +r26.x -= stereo.x * (-r26.z - stereo.y)/projMatrix._m00; +r2.xyz = r26.xyz; + + // r2.xyz = r0.www * r2.xyz; + + + + + r2.xyz = external_IsRaining.xxx * r2.xyz + r3.xyz; + r3.x = dot(r2.xyz, v3.xyz); + r3.y = dot(r2.xyz, v4.xyz); + r3.z = dot(r2.xyz, v5.xyz); + r0.w = dot(r3.xyz, r3.xyz); + r0.w = rsqrt(r0.w); + r2.xyz = r3.xyz * r0.www; + o0.xyz = r2.xyz * float3(5.000000e-001,5.000000e-001,5.000000e-001) + float3(5.000000e-001,5.000000e-001,5.000000e-001); + r0.w = r0.x == 1.000000; + r0.xyz = r0.www ? external_Metal_Smoothness.xyz : r0.xyz; + o0.w = external_Metal_Smoothness.x + r0.x; + r0.xyz = -r0.xyz * float3(3.000000e+000,3.000000e+000,3.000000e+000) + float3(4.000000e+000,4.000000e+000,4.000000e+000); + r3.xyz = float3(-3.000000e-001,-3.000000e-001,-3.000000e-001) * r1.xyz; + r1.xyz = external_IsRaining.xxx * r3.xyz + r1.xyz; + r3.xyz = cameraPos.xyz + -v1.xyz; + r0.w = dot(r3.xyz, r3.xyz); + r0.w = rsqrt(r0.w); + r3.xyz = r3.xyz * r0.www; + r0.w = dot(r2.xyz, r3.xyz); + r0.w = 1.000000000e+000 + -r0.w; + r1.w = r0.w * r0.w; + r1.w = r1.w * r1.w; + r0.w = saturate(r1.w * r0.w); + r0.xyz = r0.www / r0.xyz; + r3.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r1.xyz; + r0.xyz = r3.xyz * r0.xyz; + r0.xyz = r0.xyz * external_Metal_Falloff_Colour.xyz + r1.xyz; + o1.xyz = sqrt(r0.xyz); + o1.w = 4.431027174e-002; + r2.w = 1.000000000e+000; + o2.x = dot(r2.xyzw, lightProbeShO.xyzw); + o2.yzw = float3(0.000000e+000,0.000000e+000,1.960780e-002); + r0.x = dot(r2.xyzw, lightProbeShR.xyzw); + r0.y = dot(r2.xyzw, lightProbeShG.xyzw); + r0.z = dot(r2.xyzw, lightProbeShB.xyzw); + r0.xyz = max(r0.xyz, float3(0.000000e+000,0.000000e+000,0.000000e+000)); + o3.xyz = exposureMultipliers.xxx * r0.xyz; + o3.w = 0.000000000e+000; + o4.xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer functionConstants +// { +// +// float4 lightProbeShR; // Offset: 0 Size: 16 +// float4 lightProbeShG; // Offset: 16 Size: 16 +// float4 lightProbeShB; // Offset: 32 Size: 16 +// float4 lightProbeShO; // Offset: 48 Size: 16 +// +// } +// +// cbuffer viewConstants +// { +// +// float1 time; // Offset: 0 Size: 4 +// float3 vc_pad0_; // Offset: 4 Size: 12 [unused] +// float4 screenSize; // Offset: 16 Size: 16 [unused] +// float3 debugNonFiniteColor; // Offset: 32 Size: 12 [unused] +// float1 vc_pad2_; // Offset: 44 Size: 4 [unused] +// float4x4 viewMatrix; // Offset: 48 Size: 64 [unused] +// float4x4 projMatrix; // Offset: 112 Size: 64 [unused] +// float4x4 viewProjMatrix; // Offset: 176 Size: 64 [unused] +// float4x4 crViewProjMatrix; // Offset: 240 Size: 64 [unused] +// float4 projectionKxKyKzKw; // Offset: 304 Size: 16 [unused] +// float3 cameraPos; // Offset: 320 Size: 12 +// float1 vc_pad8_; // Offset: 332 Size: 4 [unused] +// float3 transparentStartAndSlopeAndClamp;// Offset: 336 Size: 12 [unused] +// float1 vc_pad9_; // Offset: 348 Size: 4 [unused] +// float4 transparentCurve; // Offset: 352 Size: 16 [unused] +// float4 exposureMultipliers; // Offset: 368 Size: 16 +// float4 fogParams; // Offset: 384 Size: 16 [unused] +// float4 fogForwardScatteringParamsGradientScaleFogEnable;// Offset: 400 Size: 16 [unused] +// float4 fogForwardScatteringColorPresence;// Offset: 416 Size: 16 [unused] +// float4 fogCoefficients; // Offset: 432 Size: 16 [unused] +// float4 fogColorCoefficients; // Offset: 448 Size: 16 [unused] +// float4 fogColor; // Offset: 464 Size: 16 [unused] +// float4 fogStartDistance; // Offset: 480 Size: 16 [unused] +// float4 fogHeightFogCoefficients; // Offset: 496 Size: 16 [unused] +// float4 fogMiscParam; // Offset: 512 Size: 16 [unused] +// float2 fogEnabledMode; // Offset: 528 Size: 8 [unused] +// float2 vc_pad10_; // Offset: 536 Size: 8 [unused] +// +// } +// +// cbuffer externalConstants +// { +// +// float3 external_Metal_Smoothness; // Offset: 0 Size: 12 +// float1 vc_pad0; // Offset: 12 Size: 4 [unused] +// float4 external_IsRaining; // Offset: 16 Size: 16 +// float3 external_Optional_Tint; // Offset: 32 Size: 12 +// float1 vc_pad2; // Offset: 44 Size: 4 [unused] +// float3 external_Metal_Falloff_Colour;// Offset: 48 Size: 12 +// float1 vc_pad3; // Offset: 60 Size: 4 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// sampler0 sampler NA NA 0 1 +// texture_Diffuse texture float4 2d 1 1 +// texture_Specular texture float4 2d 2 1 +// texture_Normal texture float4 2d 3 1 +// texture_Texture3 texture float4 2d 4 1 +// texture_Texture1 texture float4 2d 5 1 +// functionConstants cbuffer NA NA 0 1 +// externalConstants cbuffer NA NA 1 1 +// viewConstants cbuffer NA NA 2 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float +// TEXCOORD 0 xyzw 1 NONE float xyzw +// TEXCOORD 1 xyzw 2 NONE float xy w +// TEXCOORD 2 xyzw 3 NONE float xyz +// TEXCOORD 3 xyzw 4 NONE float xyz +// TEXCOORD 4 xyzw 5 NONE float xyz +// SV_IsFrontFace 0 x 6 FFACE uint x +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// SV_Target 1 xyzw 1 TARGET float xyzw +// SV_Target 2 xyzw 2 TARGET float xyzw +// SV_Target 3 xyzw 3 TARGET float xyzw +// SV_Target 4 xyzw 4 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb0[4], immediateIndexed +dcl_constantbuffer cb2[24], immediateIndexed +dcl_constantbuffer cb1[4], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (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.xyzw +dcl_input_ps linear v2.xyw +dcl_input_ps linear v3.xyz +dcl_input_ps linear v4.xyz +dcl_input_ps linear v5.xyz +dcl_input_ps_sgv v6.x, is_front_face +dcl_output o0.xyzw +dcl_output o1.xyzw +dcl_output o2.xyzw +dcl_output o3.xyzw +dcl_output o4.xyzw +dcl_temps 5 +mov r0.x, v1.w +mov r0.y, v2.w +sample_indexable(texture2d)(float,float,float,float) r1.xyzw, r0.xyxx, t1.xyzw, s0 +add r0.z, r1.w, l(-0.500000) +mul r1.xyz, r1.xyzx, cb1[2].xyzx +lt r0.z, r0.z, l(0.000000) +discard_nz r0.z +mul r2.xy, cb2[0].xxxx, l(0.000000, 0.150000, 0.000000, 0.000000) +mov r2.z, l(0) +mad r2.xyz, v1.xyzx, l(0.300000, 0.300000, 0.300000, 0.000000), r2.xyzx +sample_indexable(texture2d)(float,float,float,float) r3.xyz, r2.zyzz, t4.xywz, s0 +sample_indexable(texture2d)(float,float,float,float) r2.xyz, r2.xyxx, t4.xywz, s0 +mul r3.x, r3.z, r3.x +mad r3.xy, r3.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +dp2 r0.z, r3.xyxx, r3.xyxx +add r0.z, -r0.z, l(1.000000) +max r0.z, r0.z, l(0.000000) +sqrt r3.z, r0.z +mul r2.x, r2.z, r2.x +mad r2.xy, r2.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +dp2 r0.z, r2.xyxx, r2.xyxx +add r0.z, -r0.z, l(1.000000) +max r0.z, r0.z, l(0.000000) +sqrt r2.z, r0.z +add r3.xyz, -r2.xyzx, r3.xyzx +mov_sat r0.z, -v2.x +mov_sat r0.w, v2.x +add r0.z, r0.w, r0.z +mad r2.xyz, r0.zzzz, r3.xyzx, r2.xyzx +sample_indexable(texture2d)(float,float,float,float) r3.xyz, r0.xyxx, t3.xywz, s0 +sample_indexable(texture2d)(float,float,float,float) r0.xyz, r0.xyxx, t2.xyzw, s0 +mul r3.x, r3.z, r3.x +mad r3.xy, r3.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +dp2 r0.w, r3.xyxx, r3.xyxx +add r0.w, -r0.w, l(1.000000) +max r0.w, r0.w, l(0.000000) +sqrt r3.z, r0.w +movc r3.xyz, v6.xxxx, r3.xyzx, -r3.xyzx +add r4.xyz, -r3.xyzx, l(0.000000, 0.000000, 1.000000, 0.000000) +mad r4.xyz, r4.xyzx, l(0.020000, 0.020000, 0.020000, 0.000000), r3.xyzx +add r4.xyz, -r2.xyzx, r4.xyzx +mad r2.xyz, r4.xyzx, l(0.830000, 0.830000, 0.830000, 0.000000), r2.xyzx +add r2.xyz, -r3.xyzx, r2.xyzx +mul r4.xy, v1.xzxx, l(0.080000, 0.080000, 0.000000, 0.000000) +sample_indexable(texture2d)(float,float,float,float) r0.w, r4.xyxx, t5.yzwx, s0 +add r0.w, r0.w, l(-0.300000) +add_sat r0.w, r0.w, r0.w +mad r1.w, r0.w, l(-2.000000), l(3.000000) +mul r0.w, r0.w, r0.w +mul r0.w, r0.w, r1.w +mul r2.xyz, r2.xyzx, r0.wwww +add r0.w, v2.y, l(0.700000) +mul_sat r0.w, r0.w, l(10.000001) +mad r1.w, r0.w, l(-2.000000), l(3.000000) +mul r0.w, r0.w, r0.w +mul r0.w, r0.w, r1.w +add r1.w, -v2.y, l(0.700000) +mul_sat r1.w, r1.w, l(10.000001) +mad r2.w, r1.w, l(-2.000000), l(3.000000) +mul r1.w, r1.w, r1.w +mul r1.w, r1.w, r2.w +mul r0.w, r0.w, r1.w +mul r2.xyz, r2.xyzx, r0.wwww +mad r2.xyz, cb1[1].xxxx, r2.xyzx, r3.xyzx +dp3 r3.x, r2.xyzx, v3.xyzx +dp3 r3.y, r2.xyzx, v4.xyzx +dp3 r3.z, r2.xyzx, v5.xyzx +dp3 r0.w, r3.xyzx, r3.xyzx +rsq r0.w, r0.w +mul r2.xyz, r0.wwww, r3.xyzx +mad o0.xyz, r2.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), l(0.500000, 0.500000, 0.500000, 0.000000) +eq r0.w, r0.x, l(1.000000) +movc r0.xyz, r0.wwww, cb1[0].xyzx, r0.xyzx +add o0.w, r0.x, cb1[0].x +mad r0.xyz, -r0.xyzx, l(3.000000, 3.000000, 3.000000, 0.000000), l(4.000000, 4.000000, 4.000000, 0.000000) +mul r3.xyz, r1.xyzx, l(-0.300000, -0.300000, -0.300000, 0.000000) +mad r1.xyz, cb1[1].xxxx, r3.xyzx, r1.xyzx +add r3.xyz, -v1.xyzx, cb2[20].xyzx +dp3 r0.w, r3.xyzx, r3.xyzx +rsq r0.w, r0.w +mul r3.xyz, r0.wwww, r3.xyzx +dp3 r0.w, r2.xyzx, r3.xyzx +add r0.w, -r0.w, l(1.000000) +mul r1.w, r0.w, r0.w +mul r1.w, r1.w, r1.w +mul_sat r0.w, r0.w, r1.w +div r0.xyz, r0.wwww, r0.xyzx +add r3.xyz, -r1.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000) +mul r0.xyz, r0.xyzx, r3.xyzx +mad r0.xyz, r0.xyzx, cb1[3].xyzx, r1.xyzx +sqrt o1.xyz, r0.xyzx +mov o1.w, l(0.044310) +mov r2.w, l(1.000000) +dp4 o2.x, r2.xyzw, cb0[3].xyzw +mov o2.yzw, l(0,0,0,0.019608) +dp4 r0.x, r2.xyzw, cb0[0].xyzw +dp4 r0.y, r2.xyzw, cb0[1].xyzw +dp4 r0.z, r2.xyzw, cb0[2].xyzw +max r0.xyz, r0.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000) +mul o3.xyz, r0.xyzx, cb2[23].xxxx +mov o3.w, l(0) +mov o4.xyzw, l(0,0,0,0) +ret +// Approximately 103 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/DragonAge/ShaderFixes/b7d3c93610449f86-ps_replace.txt b/DragonAge/ShaderFixes/b7d3c93610449f86-ps_replace.txt new file mode 100644 index 000000000..4ccf00a61 --- /dev/null +++ b/DragonAge/ShaderFixes/b7d3c93610449f86-ps_replace.txt @@ -0,0 +1,270 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_shadowmapSamplerNoCompare_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_shadowmapTextureNoCompare : register(t1); +Texture2D g_softShadowJitterTexture : register(t2); +Texture2DMS g_depthTexture : register(t3); +Texture2DMS g_gbufferTexture0 : register(t4); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz,v1.x).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r7.x = r1.z; + r1.w = 1.000000000e+000; + while (true) { + r2.w = g_pcssFilterParameters0.z < r1.w; + r3.x = (int)r6.y < (int)r3.y; + r2.w = r2.w ? r3.x : 0; + if (r2.w == 0) break; + r2.w = (int)r3.z + (int)r6.y; + r3.x = r6.x; + r5.y = r6.y; + while (true) { + r3.w = (int)r5.y >= (int)r2.w; + if (r3.w != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r3.w = sqrt(r4.x); + r4.x = 6.283185482e+000 * r4.z; + sincos(r4.x, r4.x, r8.x); + r9.x = r4.x * r3.w; + r9.y = r8.x * r3.w; + r4.xz = r9.xy * r0.zz; + r3.w = dot(r0.xy, r4.xz); + r3.w = r3.w + r2.z; + r4.xz = r9.xy * r0.zz + r2.xy; + r3.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.xz, r3.w).x; + r3.w = dot(r3.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.x = r3.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.x; + r6.y = r5.y; + r2.w = r6.y; + r2.w = r6.x / r2.w; + r3.w = r2.w + -r7.x; + r4.x = r2.w + r7.x; + r4.x = 5.000000000e-001 * r4.x; + r1.w = r3.w / r4.x; + r7.x = r2.w; + r1.w = abs(r1.w); + } + } else { + r7.x = 1.000000000e+000; + } + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + r7.y = min(r0.z, r0.x); + o0.xyzw = r7.xxxy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/b8759b1e0daa4ef5-ps_replace.txt b/DragonAge/ShaderFixes/b8759b1e0daa4ef5-ps_replace.txt new file mode 100644 index 000000000..05ed88c44 --- /dev/null +++ b/DragonAge/ShaderFixes/b8759b1e0daa4ef5-ps_replace.txt @@ -0,0 +1,129 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2DMS g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r1.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r1.xy, r1.z).x; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + r1.y = min(r0.z, r0.x); + o0.xyzw = r1.xxxy; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/ba8b1adb0dd5adcf-ps_replace.txt b/DragonAge/ShaderFixes/ba8b1adb0dd5adcf-ps_replace.txt new file mode 100644 index 000000000..5be6e361a --- /dev/null +++ b/DragonAge/ShaderFixes/ba8b1adb0dd5adcf-ps_replace.txt @@ -0,0 +1,400 @@ +//Magic effect on ground +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +cbuffer externalConstants : register(b1) +{ + float4 external_viewMatrix1 : packoffset(c0); + float4 external_viewMatrix2 : packoffset(c1); + float4 external_viewMatrix3 : packoffset(c2); + float4 external_viewMatrix4 : packoffset(c3); + float3 external_Mask_RGB_Switch : packoffset(c4); + float1 vc_pad4 : packoffset(c4.w); + float4 external_UVDistortPower_Speed_Tile : packoffset(c5); + float external_g_emitterTime : packoffset(c6); + float3 vc_pad6 : packoffset(c6.y); + float3 external_Diff_01_RGB_Switch : packoffset(c7); + float1 vc_pad7 : packoffset(c7.w); + float4 external_ADepthTB_AAngle : packoffset(c8); +} +SamplerState sampler0_s : register(s0); +SamplerState sampler1_s : register(s1); +SamplerState sampler2_s : register(s2); +Texture2D texture_depthBufferTexture : register(t1); +Texture2D texture_normalBufferTexture : register(t2); +Texture2D texture_Mask : register(t3); +Texture2D texture_Diff_01 : register(t4); +Texture2D texture_DistortionClouds : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + float4 v5 : TEXCOORD4, + float4 v6 : TEXCOORD5, + float4 v7 : TEXCOORD6, + float4 v8 : TEXCOORD7, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3; + uint4 bitmask; + r0.xyz = external_viewMatrix2.xyz * v8.yyy; + r0.xyz = external_viewMatrix1.xyz * v8.xxx + r0.xyz; + r0.xyz = external_viewMatrix3.xyz * v8.zzz + r0.xyz; + r0.xyz = external_viewMatrix4.xyz + r0.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r0.xyz = r0.xyz / -r0.zzz; + r1.xy = screenSize.zw * v0.xy; + r0.w = texture_depthBufferTexture.Sample(sampler0_s, r1.xy).x; + r1.xyz = texture_normalBufferTexture.Sample(sampler0_s, r1.xy).xyz; + r1.xyz = r1.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + +float4 r26; +r26.xyz = r0.xyz * r0.www; +r26.w = 1.0; + +float4 stereo = StereoParams.Load(0); +r26.x -= stereo.x * (-r26.z - stereo.y)/projMatrix._m00; +r0.xyz = r26.xyz + -external_viewMatrix4.xyz; + + // r0.xyz = r0.xyz * r0.www + -external_viewMatrix4.xyz; + r2.x = dot(external_viewMatrix1.xyz, r0.xyz); + r2.y = dot(external_viewMatrix2.xyz, r0.xyz); + r2.z = dot(external_viewMatrix3.xyz, r0.xyz); + r2.w = 1.000000000e+000; + r0.x = dot(r2.xyzw, v1.xyzw); + r0.y = dot(r2.xyzw, v2.xyzw); + r0.z = dot(r2.xyzw, v3.xyzw); + r0.w = dot(r2.xyzw, v4.xyzw); + r0.xyz = r0.xyz / r0.www; + r2.xyz = float3(5.000000e-001,5.000000e-001,5.000000e-001) + -abs(-r0.xyz); + r2.x = r2.x < 0; + r2.y = r2.y < 0; + r2.z = r2.z < 0; + r0.w = (int)r2.y | (int)r2.x; + r0.w = (int)r2.z | (int)r0.w; + if (r0.w != 0) discard; + r0.w = max(abs(r0.z), abs(r0.x)); + r0.w = 1.000000e+000 / r0.w; + r1.w = min(abs(r0.z), abs(r0.x)); + r0.w = r1.w * r0.w; + r1.w = r0.w * r0.w; + r2.x = r1.w * 2.083509974e-002 + -8.513300121e-002; + r2.x = r1.w * r2.x + 1.801410019e-001; + r2.x = r1.w * r2.x + -3.302994967e-001; + r1.w = r1.w * r2.x + 9.998660088e-001; + r2.x = r1.w * r0.w; + r2.x = r2.x * -2.000000000e+000 + 1.570796371e+000; + r2.y = abs(r0.z) < abs(r0.x); + r2.x = r2.y ? r2.x : 0; + r0.w = r0.w * r1.w + r2.x; + r1.w = r0.z < -r0.z; + r1.w = r1.w ? -3.141593 : 0; + r0.w = r1.w + r0.w; + r1.w = min(r0.z, r0.x); + r1.w = r1.w < -r1.w; + r2.x = max(r0.z, r0.x); + r2.x = r2.x >= -r2.x; + r1.w = r1.w ? r2.x : 0; + r0.w = r1.w ? -r0.w : r0.w; + r0.w = external_UVDistortPower_Speed_Tile.w * r0.w; + r2.y = 1.591549516e-001 * r0.w; + r0.w = dot(r0.xz, r0.xz); + r0.xyz = float3(5.000000e-001,5.000000e-001,5.000000e-001) + r0.xyz; + r0.w = sqrt(r0.w); + r1.w = external_g_emitterTime * external_UVDistortPower_Speed_Tile.y + r0.w; + r2.x = external_UVDistortPower_Speed_Tile.z * r1.w; + r2.xy = v5.xy + r2.xy; + r2.xyz = texture_DistortionClouds.Sample(sampler2_s, r2.xy).xyw; + r2.x = r2.x * r2.z; + r2.xy = r2.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = r2.xy * r0.ww; + r2.xy = r2.xy * external_UVDistortPower_Speed_Tile.xx + r0.xz; + r2.xyz = texture_Diff_01.Sample(sampler1_s, r2.xy).xyz; + r0.w = saturate(dot(r2.xyz, external_Diff_01_RGB_Switch.xyz)); + r1.w = r0.w * v6.w + -v6.z; + r2.xyz = v7.xyz * r0.www; + r0.w = log2(r1.w); + r0.w = v6.y * r0.w; + r0.w = exp2(r0.w); + r0.w = v6.x * r0.w; + r3.xyz = texture_Mask.Sample(sampler1_s, r0.xz).xyz; + r0.x = saturate(dot(r3.xyz, external_Mask_RGB_Switch.xyz)); + r0.x = r0.x * r0.w; + r0.z = 1.000000000e+000 + -r0.y; + r0.y = log2(r0.y); + r0.y = external_ADepthTB_AAngle.x * r0.y; + r0.y = exp2(r0.y); + r0.z = log2(r0.z); + r0.z = external_ADepthTB_AAngle.y * r0.z; + r0.z = exp2(r0.z); + r0.y = r0.y + r0.z; + r0.y = 1.000000000e+000 + -r0.y; + r0.z = dot(v2.xyz, v2.xyz); + r0.z = rsqrt(r0.z); + r3.xyz = v2.xyz * r0.zzz; + r0.z = dot(r1.xyz, r3.xyz); + r0.z = external_ADepthTB_AAngle.z + -abs(-r0.z); + r0.w = external_ADepthTB_AAngle.w + -external_ADepthTB_AAngle.z; + r0.z = r0.z / r0.w; + r0.z = saturate(1.000000000e+000 + r0.z); + r0.y = r0.y * r0.z; + r0.x = r0.x * r0.y; + o0.xyz = r2.xyz * r0.xxx; + o0.w = r0.x; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer viewConstants +// { +// +// float1 time; // Offset: 0 Size: 4 [unused] +// float3 vc_pad0_; // Offset: 4 Size: 12 [unused] +// float4 screenSize; // Offset: 16 Size: 16 +// float3 debugNonFiniteColor; // Offset: 32 Size: 12 [unused] +// float1 vc_pad2_; // Offset: 44 Size: 4 [unused] +// float4x4 viewMatrix; // Offset: 48 Size: 64 [unused] +// float4x4 projMatrix; // Offset: 112 Size: 64 [unused] +// float4x4 viewProjMatrix; // Offset: 176 Size: 64 [unused] +// float4x4 crViewProjMatrix; // Offset: 240 Size: 64 [unused] +// float4 projectionKxKyKzKw; // Offset: 304 Size: 16 [unused] +// float3 cameraPos; // Offset: 320 Size: 12 [unused] +// float1 vc_pad8_; // Offset: 332 Size: 4 [unused] +// float3 transparentStartAndSlopeAndClamp;// Offset: 336 Size: 12 [unused] +// float1 vc_pad9_; // Offset: 348 Size: 4 [unused] +// float4 transparentCurve; // Offset: 352 Size: 16 [unused] +// float4 exposureMultipliers; // Offset: 368 Size: 16 [unused] +// float4 fogParams; // Offset: 384 Size: 16 [unused] +// float4 fogForwardScatteringParamsGradientScaleFogEnable;// Offset: 400 Size: 16 [unused] +// float4 fogForwardScatteringColorPresence;// Offset: 416 Size: 16 [unused] +// float4 fogCoefficients; // Offset: 432 Size: 16 [unused] +// float4 fogColorCoefficients; // Offset: 448 Size: 16 [unused] +// float4 fogColor; // Offset: 464 Size: 16 [unused] +// float4 fogStartDistance; // Offset: 480 Size: 16 [unused] +// float4 fogHeightFogCoefficients; // Offset: 496 Size: 16 [unused] +// float4 fogMiscParam; // Offset: 512 Size: 16 [unused] +// float2 fogEnabledMode; // Offset: 528 Size: 8 [unused] +// float2 vc_pad10_; // Offset: 536 Size: 8 [unused] +// +// } +// +// cbuffer externalConstants +// { +// +// float4 external_viewMatrix1; // Offset: 0 Size: 16 +// float4 external_viewMatrix2; // Offset: 16 Size: 16 +// float4 external_viewMatrix3; // Offset: 32 Size: 16 +// float4 external_viewMatrix4; // Offset: 48 Size: 16 +// float3 external_Mask_RGB_Switch; // Offset: 64 Size: 12 +// float1 vc_pad4; // Offset: 76 Size: 4 [unused] +// float4 external_UVDistortPower_Speed_Tile;// Offset: 80 Size: 16 +// float external_g_emitterTime; // Offset: 96 Size: 4 +// float3 vc_pad6; // Offset: 100 Size: 12 [unused] +// float3 external_Diff_01_RGB_Switch;// Offset: 112 Size: 12 +// float1 vc_pad7; // Offset: 124 Size: 4 [unused] +// float4 external_ADepthTB_AAngle; // Offset: 128 Size: 16 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// sampler0 sampler NA NA 0 1 +// sampler1 sampler NA NA 1 1 +// sampler2 sampler NA NA 2 1 +// texture_depthBufferTexture texture float4 2d 1 1 +// texture_normalBufferTexture texture float4 2d 2 1 +// texture_Mask texture float4 2d 3 1 +// texture_Diff_01 texture float4 2d 4 1 +// texture_DistortionClouds texture float4 2d 5 1 +// externalConstants cbuffer NA NA 1 1 +// viewConstants cbuffer NA NA 2 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float xyzw +// TEXCOORD 1 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float xyzw +// TEXCOORD 3 xyzw 4 NONE float xyzw +// TEXCOORD 4 xyzw 5 NONE float xy +// TEXCOORD 5 xyzw 6 NONE float xyzw +// TEXCOORD 6 xyzw 7 NONE float xyz +// TEXCOORD 7 xyzw 8 NONE float xyz +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb2[2], immediateIndexed +dcl_constantbuffer cb1[9], immediateIndexed +dcl_sampler s0, mode_default +dcl_sampler s1, mode_default +dcl_sampler s2, mode_default +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (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_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.xyzw +dcl_input_ps linear v2.xyzw +dcl_input_ps linear v3.xyzw +dcl_input_ps linear v4.xyzw +dcl_input_ps linear v5.xy +dcl_input_ps linear v6.xyzw +dcl_input_ps linear v7.xyz +dcl_input_ps linear v8.xyz +dcl_output o0.xyzw +dcl_temps 4 +mul r0.xyz, v8.yyyy, cb1[1].xyzx +mad r0.xyz, cb1[0].xyzx, v8.xxxx, r0.xyzx +mad r0.xyz, cb1[2].xyzx, v8.zzzz, r0.xyzx +add r0.xyz, r0.xyzx, cb1[3].xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +div r0.xyz, r0.xyzx, -r0.zzzz +mul r1.xy, v0.xyxx, cb2[1].zwzz +sample_indexable(texture2d)(float,float,float,float) r0.w, r1.xyxx, t1.yzwx, s0 +sample_indexable(texture2d)(float,float,float,float) r1.xyz, r1.xyxx, t2.xyzw, s0 +mad r1.xyz, r1.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) +mad r0.xyz, r0.xyzx, r0.wwww, -cb1[3].xyzx +dp3 r2.x, cb1[0].xyzx, r0.xyzx +dp3 r2.y, cb1[1].xyzx, r0.xyzx +dp3 r2.z, cb1[2].xyzx, r0.xyzx +mov r2.w, l(1.000000) +dp4 r0.x, r2.xyzw, v1.xyzw +dp4 r0.y, r2.xyzw, v2.xyzw +dp4 r0.z, r2.xyzw, v3.xyzw +dp4 r0.w, r2.xyzw, v4.xyzw +div r0.xyz, r0.xyzx, r0.wwww +add r2.xyz, -|r0.xyzx|, l(0.500000, 0.500000, 0.500000, 0.000000) +lt r2.xyz, r2.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000) +or r0.w, r2.y, r2.x +or r0.w, r2.z, r0.w +discard_nz r0.w +max r0.w, |r0.z|, |r0.x| +div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w +min r1.w, |r0.z|, |r0.x| +mul r0.w, r0.w, r1.w +mul r1.w, r0.w, r0.w +mad r2.x, r1.w, l(0.020835), l(-0.085133) +mad r2.x, r1.w, r2.x, l(0.180141) +mad r2.x, r1.w, r2.x, l(-0.330299) +mad r1.w, r1.w, r2.x, l(0.999866) +mul r2.x, r0.w, r1.w +mad r2.x, r2.x, l(-2.000000), l(1.570796) +lt r2.y, |r0.z|, |r0.x| +and r2.x, r2.y, r2.x +mad r0.w, r0.w, r1.w, r2.x +lt r1.w, r0.z, -r0.z +and r1.w, r1.w, l(0xc0490fdb) +add r0.w, r0.w, r1.w +min r1.w, r0.z, r0.x +lt r1.w, r1.w, -r1.w +max r2.x, r0.z, r0.x +ge r2.x, r2.x, -r2.x +and r1.w, r1.w, r2.x +movc r0.w, r1.w, -r0.w, r0.w +mul r0.w, r0.w, cb1[5].w +mul r2.y, r0.w, l(0.159155) +dp2 r0.w, r0.xzxx, r0.xzxx +add r0.xyz, r0.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000) +sqrt r0.w, r0.w +mad r1.w, cb1[6].x, cb1[5].y, r0.w +mul r2.x, r1.w, cb1[5].z +add r2.xy, r2.xyxx, v5.xyxx +sample_indexable(texture2d)(float,float,float,float) r2.xyz, r2.xyxx, t5.xywz, s2 +mul r2.x, r2.z, r2.x +mad r2.xy, r2.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r2.xy, r0.wwww, r2.xyxx +mad r2.xy, r2.xyxx, cb1[5].xxxx, r0.xzxx +sample_indexable(texture2d)(float,float,float,float) r2.xyz, r2.xyxx, t4.xyzw, s1 +dp3_sat r0.w, r2.xyzx, cb1[7].xyzx +mad r1.w, r0.w, v6.w, -v6.z +mul r2.xyz, r0.wwww, v7.xyzx +log r0.w, r1.w +mul r0.w, r0.w, v6.y +exp r0.w, r0.w +mul r0.w, r0.w, v6.x +sample_indexable(texture2d)(float,float,float,float) r3.xyz, r0.xzxx, t3.xyzw, s1 +dp3_sat r0.x, r3.xyzx, cb1[4].xyzx +mul r0.x, r0.w, r0.x +add r0.z, -r0.y, l(1.000000) +log r0.y, r0.y +mul r0.y, r0.y, cb1[8].x +exp r0.y, r0.y +log r0.z, r0.z +mul r0.z, r0.z, cb1[8].y +exp r0.z, r0.z +add r0.y, r0.z, r0.y +add r0.y, -r0.y, l(1.000000) +dp3 r0.z, v2.xyzx, v2.xyzx +rsq r0.z, r0.z +mul r3.xyz, r0.zzzz, v2.xyzx +dp3 r0.z, r1.xyzx, r3.xyzx +add r0.z, -|r0.z|, cb1[8].z +add r0.w, -cb1[8].z, cb1[8].w +div r0.z, r0.z, r0.w +add_sat r0.z, r0.z, l(1.000000) +mul r0.y, r0.z, r0.y +mul r0.x, r0.y, r0.x +mul o0.xyz, r0.xxxx, r2.xyzx +mov o0.w, r0.x +ret +// Approximately 96 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/DragonAge/ShaderFixes/c128a53ea0dd455f-ps_replace.txt b/DragonAge/ShaderFixes/c128a53ea0dd455f-ps_replace.txt new file mode 100644 index 000000000..58fc3694c --- /dev/null +++ b/DragonAge/ShaderFixes/c128a53ea0dd455f-ps_replace.txt @@ -0,0 +1,292 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2DMS g_depthTexture : register(t4); +Texture2DMS g_gbufferTexture0 : register(t5); +Texture2DMS g_gbufferTexture2 : register(t6); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r2.z = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.xyz = g_gbufferTexture0.Load(r0.xyw,v1.x).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz,v1.x).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.xy * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.xyz = r1.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.xyz, r1.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r1.xyz * r0.www; + } + r1.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r1.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r1.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r1.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.xy = trunc(v0.yx); + r1.xy = r1.yx * float2(7.200000e+002,1.024000e+003) + r1.xy; + r1.xy = (uint2)r1.xy; + r1.xy = (int2)r1.xy ^ int2(0,0); + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.zw = (uint2)r1.xy >> int2(16,16); + r1.xy = (int2)r1.zw ^ (int2)r1.xy; + r1.xy = (int2)r1.xy * int2(0,0); + r1.xy = r1.xy; + r0.w = g_shadowPenumbraSize * r0.z; + r1.z = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r1.w = -9.999999747e-006 + r2.z; + r1.w = r1.z < r1.w; + r1.w = r1.w ? 1.000000 : 0; + r1.z = r1.w * r1.z; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.xy = r1.zw; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r2.z; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.z = r0.z + r0.z; + r0.w = r2.z + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.z, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.z = (int)r4.y >= (int)r3.x; + if (r1.z != 0) break; + r1.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r1.zw = r1.xy * float2(2.328306e-010,2.328306e-010) + r1.zw; + r1.zw = frac(r1.zw); + r1.z = sqrt(r1.z); + r1.w = 6.283185482e+000 * r1.w; + sincos(r1.w, r5.x, r6.x); + r5.x = r5.x * r1.z; + r5.y = r6.x * r1.z; + r1.zw = r5.xy * r0.zz; + r1.z = dot(r0.xy, r1.zw); + r1.z = r2.z + r1.z; + r5.xy = r5.xy * r0.zz + r2.xy; + r1.z = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.xy, r1.z).x; + r1.z = dot(r1.zzzz, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.z + r0.w; + r4.y = (int)r4.y + 1; + } + r1.z = r4.y; + r1.z = r0.w / r1.z; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r1.w = r1.z; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.xy * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r2.z; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r1.w; + r4.z = r3.x + r1.w; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r1.w = r3.x; + r2.w = abs(r2.w); + } + } else { + r1.w = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyz = r1.www * r0.xxx; + r0.xyz = r2.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.xyz = saturate(abs(r0.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.x = min(r0.y, r0.x); + o0.w = min(r0.z, r0.x); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/c340fcbe39883883-ps_replace.txt b/DragonAge/ShaderFixes/c340fcbe39883883-ps_replace.txt new file mode 100644 index 000000000..d7ad61041 --- /dev/null +++ b/DragonAge/ShaderFixes/c340fcbe39883883-ps_replace.txt @@ -0,0 +1,121 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r1.xy, r0.x).x; + o0.xyzw = r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/c4fc1fd41669b895-ps_replace.txt b/DragonAge/ShaderFixes/c4fc1fd41669b895-ps_replace.txt new file mode 100644 index 000000000..2452d0709 --- /dev/null +++ b/DragonAge/ShaderFixes/c4fc1fd41669b895-ps_replace.txt @@ -0,0 +1,205 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2DMS g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.y = g_shadowmapDimensions.x; + r0.zw = r0.yy * r1.xy + float2(5.000000e-001,5.000000e-001); + r1.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r1.xy, 0.000000000e+000).x; + r1.x = 1.000000000e+000 + -r1.x; + r0.y = 1.000000e+000 / r0.y; + r1.yz = floor(r0.zw); + r0.zw = -r1.yz + r0.zw; + r1.yz = r1.yz * r0.yy; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(2,0)).xyzw; + r0.y = r0.z * 2.000000000e+000 + 2.000000000e+000; + r3.xy = float2(4.000000e+000,1.000000e+000) + -r0.zw; + r4.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(0,0)).xyzw; + r5.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.zzzz; + r6.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.zzzz; + r1.w = -r0.z * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(-2,0)).xyzw; + r3.z = r0.z * -2.000000000e+000 + 4.000000000e+000; + r8.xy = r7.wx * r1.ww; + r3.zw = r7.zy * r3.zz + r8.xy; + r3.w = r7.z * r6.z + r3.w; + r3.w = r7.w * r1.w + r3.w; + r3.w = r4.y * r5.y + r3.w; + r3.w = r4.x * r6.w + r3.w; + r3.w = r4.z * r5.z + r3.w; + r3.w = r4.w * r3.x + r3.w; + r2.y = dot(r2.yy, r0.zz); + r3.w = r2.y + r3.w; + r3.w = r2.x * r0.y + r3.w; + r2.z = dot(r2.zz, r0.zz); + r3.w = r2.z + r3.w; + r8.y = r2.w * r5.w + r3.w; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(0,-2)).xyzw; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(-2,-2)).xyzw; + r3.z = r10.y * r6.z + r3.z; + r3.z = r10.x * r1.w + r3.z; + r10.xyzw = r10.wzxy * r6.xyxy; + r7.zw = r10.xz + r10.yw; + r7.zw = r9.zy * float2(2.000000e+000,2.000000e+000) + r7.zw; + r7.zw = r9.wx * float2(2.000000e+000,2.000000e+000) + r7.zw; + r3.z = r4.z * r5.y + r3.z; + r3.z = r4.w * r6.w + r3.z; + r3.z = r9.y * r5.z + r3.z; + r3.z = r9.x * r3.x + r3.z; + r2.z = r3.z + r2.z; + r0.y = r2.w * r0.y + r2.z; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(2,-2)).xyzw; + r2.z = r9.y * r0.z; + r0.y = r2.z * 2.000000000e+000 + r0.y; + r8.x = r9.x * r5.w + r0.y; + r2.zw = r9.zy * r0.zz + r7.zw; + r2.zw = r9.wx * r5.xx + r2.zw; + r2.zw = r2.zw + r8.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r6.xyxy; + r3.zw = r9.xz + r9.yw; + r0.y = r8.z * r6.z + r3.w; + r0.y = r8.w * r1.w + r0.y; + r3.z = r7.y * r6.z + r3.z; + r1.w = r7.x * r1.w + r3.z; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(0,2)).xyzw; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.yz, r0.x, int2(2,2)).xyzw; + r0.x = r6.y * 2.000000000e+000 + r0.y; + r0.x = r6.x * 2.000000000e+000 + r0.x; + r0.x = r6.z * r5.z + r0.x; + r0.x = r6.w * r3.x + r0.x; + r0.x = r7.y * r0.z + r0.x; + r0.x = r7.x * r5.x + r0.x; + r0.y = r7.z * r0.z; + r0.x = r0.y * 2.000000000e+000 + r0.x; + r0.y = r7.w * r5.w + r0.x; + r1.y = r6.z * 2.000000000e+000 + r1.w; + r1.y = r6.w * 2.000000000e+000 + r1.y; + r1.y = r4.y * r5.z + r1.y; + r1.y = r4.x * r3.x + r1.y; + r0.z = r7.z * r0.z + r1.y; + r0.z = r7.w * r5.x + r0.z; + r0.z = r2.y + r0.z; + r0.x = r2.x * r5.w + r0.z; + r0.xy = r2.zw + r0.xy; + r0.y = r0.y * r0.w; + r0.x = r0.x * r3.y + r0.y; + r0.x = 1.694915257e-002 * r0.x; + o0.xyzw = r0.xxxx * r1.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/c8f7765a3685d0a5-ps_replace.txt b/DragonAge/ShaderFixes/c8f7765a3685d0a5-ps_replace.txt new file mode 100644 index 000000000..4241f8c4b --- /dev/null +++ b/DragonAge/ShaderFixes/c8f7765a3685d0a5-ps_replace.txt @@ -0,0 +1,200 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2DMS g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.y = g_shadowmapDimensions.x; + r0.zw = r0.yy * r1.xy + float2(5.000000e-001,5.000000e-001); + r0.y = 1.000000e+000 / r0.y; + r1.xy = floor(r0.zw); + r0.zw = -r1.xy + r0.zw; + r1.xy = r1.xy * r0.yy; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(2,0)).xyzw; + r0.y = r0.z * 2.000000000e+000 + 2.000000000e+000; + r1.zw = float2(4.000000e+000,1.000000e+000) + -r0.zw; + r3.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(0,0)).xyzw; + r4.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.zzzz; + r5.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.zzzz; + r6.x = -r0.z * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(-2,0)).xyzw; + r6.y = r0.z * -2.000000000e+000 + 4.000000000e+000; + r6.zw = r7.wx * r6.xx; + r6.yz = r7.zy * r6.yy + r6.zw; + r6.z = r7.z * r5.z + r6.z; + r6.z = r7.w * r6.x + r6.z; + r6.z = r3.y * r4.y + r6.z; + r6.z = r3.x * r5.w + r6.z; + r6.z = r3.z * r4.z + r6.z; + r6.z = r3.w * r1.z + r6.z; + r2.y = dot(r2.yy, r0.zz); + r6.z = r2.y + r6.z; + r6.z = r2.x * r0.y + r6.z; + r2.z = dot(r2.zz, r0.zz); + r6.z = r2.z + r6.z; + r8.y = r2.w * r4.w + r6.z; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(0,-2)).xyzw; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(-2,-2)).xyzw; + r6.y = r10.y * r5.z + r6.y; + r6.y = r10.x * r6.x + r6.y; + r10.xyzw = r10.wzxy * r5.xyxy; + r6.zw = r10.xz + r10.yw; + r6.zw = r9.zy * float2(2.000000e+000,2.000000e+000) + r6.zw; + r6.zw = r9.wx * float2(2.000000e+000,2.000000e+000) + r6.zw; + r3.z = r3.z * r4.y + r6.y; + r3.z = r3.w * r5.w + r3.z; + r3.z = r9.y * r4.z + r3.z; + r3.z = r9.x * r1.z + r3.z; + r2.z = r3.z + r2.z; + r0.y = r2.w * r0.y + r2.z; + r9.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(2,-2)).xyzw; + r2.z = r9.y * r0.z; + r0.y = r2.z * 2.000000000e+000 + r0.y; + r8.x = r9.x * r4.w + r0.y; + r2.zw = r9.zy * r0.zz + r6.zw; + r2.zw = r9.wx * r4.xx + r2.zw; + r2.zw = r2.zw + r8.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r5.xyxy; + r3.zw = r9.xz + r9.yw; + r0.y = r8.z * r5.z + r3.w; + r0.y = r8.w * r6.x + r0.y; + r3.z = r7.y * r5.z + r3.z; + r3.z = r7.x * r6.x + r3.z; + r5.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(0,2)).xyzw; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r1.xy, r0.x, int2(2,2)).xyzw; + r0.x = r5.y * 2.000000000e+000 + r0.y; + r0.x = r5.x * 2.000000000e+000 + r0.x; + r0.x = r5.z * r4.z + r0.x; + r0.x = r5.w * r1.z + r0.x; + r0.x = r6.y * r0.z + r0.x; + r0.x = r6.x * r4.x + r0.x; + r0.y = r6.z * r0.z; + r0.x = r0.y * 2.000000000e+000 + r0.x; + r0.y = r6.w * r4.w + r0.x; + r1.x = r5.z * 2.000000000e+000 + r3.z; + r1.x = r5.w * 2.000000000e+000 + r1.x; + r1.x = r3.y * r4.z + r1.x; + r1.x = r3.x * r1.z + r1.x; + r0.z = r6.z * r0.z + r1.x; + r0.z = r6.w * r4.x + r0.z; + r0.z = r2.y + r0.z; + r0.x = r2.x * r4.w + r0.z; + r0.xy = r2.zw + r0.xy; + r0.y = r0.y * r0.w; + r0.x = r0.x * r1.w + r0.y; + o0.xyzw = float4(1.694915e-002,1.694915e-002,1.694915e-002,1.694915e-002) * r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/c991a8f34dbbcc09-ps_replace.txt b/DragonAge/ShaderFixes/c991a8f34dbbcc09-ps_replace.txt new file mode 100644 index 000000000..785c2d84e --- /dev/null +++ b/DragonAge/ShaderFixes/c991a8f34dbbcc09-ps_replace.txt @@ -0,0 +1,267 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2D g_depthTexture : register(t4); +Texture2D g_gbufferTexture0 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyzw = r2.zzzz * r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/c9c281359983ed8e-ps_replace.txt b/DragonAge/ShaderFixes/c9c281359983ed8e-ps_replace.txt new file mode 100644 index 000000000..ba6cf78fa --- /dev/null +++ b/DragonAge/ShaderFixes/c9c281359983ed8e-ps_replace.txt @@ -0,0 +1,122 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2DMS g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r1.xy, r0.x).x; + o0.xyzw = r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/cc180edf8062ac82-ps_replace.txt b/DragonAge/ShaderFixes/cc180edf8062ac82-ps_replace.txt new file mode 100644 index 000000000..4dbfa4c5a --- /dev/null +++ b/DragonAge/ShaderFixes/cc180edf8062ac82-ps_replace.txt @@ -0,0 +1,268 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2DMS g_depthTexture : register(t4); +Texture2DMS g_gbufferTexture0 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.xyz = g_gbufferTexture0.Load(r0.xyz,v1.x).xyz; + r0.xyz = r0.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyzw = r2.zzzz * r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/cc79d4a79b16b59c-vs_replace.txt b/DragonAge/ShaderFixes/cc79d4a79b16b59c-vs_replace.txt new file mode 100644 index 000000000..fdc578786 --- /dev/null +++ b/DragonAge/ShaderFixes/cc79d4a79b16b59c-vs_replace.txt @@ -0,0 +1,44 @@ +// manually fixed shader +// Compiles to same ASM + + struct StoredBokeh + { + float2 position; // Offset: 0 + float2 radius; // Offset: 8 + float4 colorAndWeight; // Offset: 16 + }; // Offset: 0 Size: 32 + +StructuredBuffer g_BokehBuffer : register(t3); + +Texture2D StereoParams : register(t125); + +void main( + uint v0 : SV_VertexID0, + uint v1 : SV_InstanceID0, + out float4 o0 : SV_Position0, + out float4 o1 : COLOR0, + out float2 o2 : TEXCOORD0) +{ + float4 r0,r1; + uint4 bitmask; + bitmask.x = ((~(-1 << 1)) << 1) & 0xffffffff; + r0.x = (((uint)v0.x << 1) & bitmask.x) | ((uint)0 & ~bitmask.x); + r0.z = (int)v0.x & 2; + r0.xy = r0.xz; + r0.zw = r0.xy * float2(1.000000e+000,-1.000000e+000) + float2(-1.000000e+000,1.000000e+000); + o2.xy = float2(5.000000e-001,5.000000e-001) * r0.xy; +// ld_structured_indexable(structured_buffer, stride=32)(mixed,mixed,mixed,mixed) r1.xyzw, v1.x, l(0), t3.xyzw +r1.x = g_BokehBuffer[v1.x].position.x; +r1.y = g_BokehBuffer[v1.x].position.y; +r1.z = g_BokehBuffer[v1.x].radius.x; +r1.w = g_BokehBuffer[v1.x].radius.y; + r0.xy = r1.zw + r1.zw; + o0.xy = r0.zw * r0.xy + r1.xy; + o0.zw = float2(0.000000e+000,1.000000e+000); +// ld_structured_indexable(structured_buffer, stride=32)(mixed,mixed,mixed,mixed) o1.xyzw, v1.x, l(16), t3.xyzw +o1.x = g_BokehBuffer[v1.x].colorAndWeight.x; +o1.y = g_BokehBuffer[v1.x].colorAndWeight.y; +o1.z = g_BokehBuffer[v1.x].colorAndWeight.z; +o1.w = g_BokehBuffer[v1.x].colorAndWeight.w; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/ce128fb3a102ee37-ps_replace.txt b/DragonAge/ShaderFixes/ce128fb3a102ee37-ps_replace.txt new file mode 100644 index 000000000..4c059f224 --- /dev/null +++ b/DragonAge/ShaderFixes/ce128fb3a102ee37-ps_replace.txt @@ -0,0 +1,754 @@ +//Shadows/Lights +cbuffer _Globals : register(b0) +{ + float2 g_invScreenSize : packoffset(c0); + float4x4 g_invViewProjMatrix : packoffset(c1); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c5); + float g_subRolloff : packoffset(c6); + float4 g_exposureMultipliers : packoffset(c7); + uint4 g_shadowmapDimensions : packoffset(c8); +} + +//Added by Mike +cbuffer viewConstants : register(b2) +{ + float1 time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float1 vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float1 vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float1 vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + + +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_depthTexture : register(t1); +Texture2D g_gbufferTexture0 : register(t2); +Texture2D g_gbufferTexture1 : register(t3); +Texture2D g_gbufferTexture2 : register(t4); +Texture2D g_gbufferTexture4 : register(t5); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + float4 v5 : TEXCOORD4, + float4 v6 : TEXCOORD5, + float4 v7 : TEXCOORD6, + float4 v8 : TEXCOORD7, + float4 v9 : TEXCOORD8, + float4 v10 : TEXCOORD9, + out float4 o0 : SV_Target0, + out float4 o1 : SV_Target1) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = g_invScreenSize.xy * v0.xy; + r1.xy = (int2)v0.xy; + r1.zw = float2(0.000000e+000,0.000000e+000); + r2.xyzw = g_gbufferTexture0.Load(r1.xyw).xyzw; + r3.xyzw = g_gbufferTexture1.Load(r1.xyw).xyzw; + r0.z = g_gbufferTexture2.Load(r1.xyw).w; + r4.z = g_depthTexture.Load(r1.xyw).x; + r0.z = 2.550000000e+002 * r0.z; + r0.z = round(r0.z); + r0.z = (int)r0.z; + r5.xy = r0.zz == float2(4.000000e+000,2.000000e+000); + if (r5.x != 0) { + r1.xyzw = g_gbufferTexture4.Load(r1.xyz).xyzw; + r6.xyzw = r2.xyzw * float4(4.000000e+000,4.000000e+000,4.000000e+000,4.000000e+000) + float4(-2.000000e+000,-2.000000e+000,-2.000000e+000,-2.000000e+000); + r0.w = dot(r6.xy, r6.xy); + r7.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r7.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r7.xy = r6.xy * r0.ww; + r0.w = dot(r7.xyw, r7.xyw); + r0.w = rsqrt(r0.w); + r7.xyz = r7.xyw * r0.www; + r0.w = dot(r6.zw, r6.zw); + r8.zw = -r0.ww * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.w = max(r8.z, 0.000000000e+000); + r0.w = sqrt(r0.w); + r8.xy = r6.zw * r0.ww; + r0.w = dot(r8.xyw, r8.xyw); + r0.w = rsqrt(r0.w); + r6.xyz = r8.xyw * r0.www; + r0.w = dot(r1.xy, float2(6.528000e+004,2.550000e+002)); + r0.w = round(r0.w); + r1.x = 3.125000000e-002 * r0.w; + r1.x = trunc(r1.x); + r8.z = r0.w * 3.125000000e-002 + -r1.x; + r0.w = 1.562500000e-002 * r1.x; + r8.x = trunc(r0.w); + r8.y = r1.x * 1.562500000e-002 + -r8.x; + r8.xyz = float3(3.225806e-002,1.015873e+000,1.032258e+000) * r8.xyz; + r1.xy = float2(2.550000e+002,2.550000e+002) * r1.zw; + r1.xy = round(r1.xy); + r1.zw = float2(6.250000e-002,6.250000e-002) * r1.xy; + r9.xy = trunc(r1.zw); + r9.zw = r1.xy * float2(6.250000e-002,6.250000e-002) + -r9.xy; + r1.xw = float2(1.066667e+000,6.666667e-002) * r9.wy; + r1.yz = r9.xz * float2(8.000001e-001,1.280000e+001) + float2(1.000000e+000,1.000000e+000); + r1.yz = exp2(r1.yz); + r1.yz = r1.yz * float2(1.443000e+000,1.443000e+000) + float2(1.443000e+000,1.443000e+000); + r9.xyzw = r3.xyzw * r3.xyzw; + r10.xyz = r9.www; + } else { + r2.xyz = r2.xyz * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r2.xyz, r2.xyz); + r0.w = rsqrt(r0.w); + r7.xyz = r2.xyz * r0.www; + r3.xyzw = r3.xyzw * r3.xyzw; + r0.w = r0.z == 5; + if (r0.w != 0) { + r9.xyz = r3.xyz * r3.www; + r10.xyz = r3.xyz; + } else { + r0.z = r0.z == 1; + if (r0.z != 0) { + r10.xyz = r3.www * r3.xyz; + } else { + r10.xyz = r3.www; + } + r9.xyz = r3.xyz; + } + r0.z = 0.000000000e+000 < r10.x; + r0.z = r0.z ? r2.w : 0; + r0.z = r0.z * 1.200000000e+001 + 1.000000000e+000; + r0.z = exp2(r0.z); + r1.y = r0.z * 1.442999959e+000 + 1.442999959e+000; + r6.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r1.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r8.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); + } + r0.xy = r0.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r4.xy = float2(1.000000e+000,-1.000000e+000) * r0.xy; + r4.w = 1.000000000e+000; + + r0.x = dot(r4.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r0.y = dot(r4.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r0.z = dot(r4.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.w = dot(r4.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r0.w = 1.000000e+000 / r0.w; + r2.xyz = r0.xyz * r0.www; + +float4 r25, r23; +r23.xyzw = r2.xyzw; +r23.w=1; + +r25.x = dot(r23.xyzw, b1.xyzw); +r25.y = dot(r23.xyzw, b2.xyzw); +r25.z = dot(r23.xyzw, b3.xyzw); +r25.w = dot(r23.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r23.x = dot(r25.xyzw, a1.xyzw); +r23.y = dot(r25.xyzw, a2.xyzw); +r23.z = dot(r25.xyzw, a3.xyzw); +r23.w = dot(r25.xyzw, a4.xyzw); + + r3.x = dot(r23.xyz, r23.xyz); + r3.x = rsqrt(r3.x); + r3.xyz = r3.xxx * r23.xyz; + + r0.xyz = -r23.xyz + v1.xyz; + // r0.xyz = -r0.xyz * r0.www + v1.xyz; + + r0.w = dot(r0.xyz, r0.xyz); + r3.w = rsqrt(r0.w); + r4.xyz = r3.www * r0.xyz; + r0.w = v3.w + r0.w; + r0.w = 1.000000e+000 / r0.w; + r0.w = v1.w + r0.w; + r0.w = max(r0.w, 0.000000000e+000); + r4.w = dot(v6.xyz, r4.xyz); + r4.w = saturate(r4.w * v5.x + v5.y); + r4.w = 1.000000000e+000 + -r4.w; + r0.w = r4.w * r0.w; + r2.w = 1.000000000e+000; + r11.x = dot(r23.xyzw, v7.xyzw); //********************MUST be r23 + r11.y = dot(r23.xyzw, v8.xyzw); + r4.w = dot(r23.xyzw, v9.xyzw); + r2.x = dot(r23.xyzw, v10.xyzw); + r2.x = 1.000000e+000 / r2.x; + r2.yz = r11.xy * r2.xx; + r2.x = r4.w * r2.x; + r2.w = max(abs(r2.z), abs(r2.y)); + r2.w = 1.000000000e+000 + -r2.w; + r2.w = min(r2.w, r4.w); + r2.w = r2.w < 0.000000000e+000; + if (r2.w != 0) discard; + r2.yz = r2.yz * float2(5.000000e-001,-5.000000e-001) + float2(5.000000e-001,5.000000e-001); + r2.w = g_shadowmapDimensions.x; + r4.w = 1.000000e+000 / r2.w; + r2.yz = r2.ww * r2.yz + float2(5.000000e-001,5.000000e-001); + r5.zw = floor(r2.yz); + r2.yz = -r5.zw + r2.yz; + r5.zw = r5.zw * r4.ww; + r11.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.zw, r2.x, int2(-2,-2)).xyzw; + r12.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r2.yyyy; + r13.xyzw = r12.xyxy * r11.wzxy; + r11.zw = r13.xz + r13.yw; + r13.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.zw, r2.x, int2(0,-2)).xyzw; + r11.zw = r13.zy * float2(2.000000e+000,2.000000e+000) + r11.zw; + r11.zw = r13.wx * float2(2.000000e+000,2.000000e+000) + r11.zw; + r14.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.zw, r2.x, int2(2,-2)).xyzw; + r15.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r2.yyyy; + r2.w = r14.y * r2.y; + r11.zw = r14.zy * r2.yy + r11.zw; + r11.zw = r14.wx * r15.xx + r11.zw; + r16.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.zw, r2.x, int2(-2,0)).xyzw; + r4.w = -r2.y * 2.000000000e+000 + 2.000000000e+000; + r13.zw = r16.wx * r4.ww; + r6.w = r2.y * -2.000000000e+000 + 4.000000000e+000; + r13.zw = r16.zy * r6.ww + r13.zw; + r6.w = r11.y * r12.z + r13.z; + r6.w = r11.x * r4.w + r6.w; + r7.w = r16.z * r12.z + r13.w; + r7.w = r16.w * r4.w + r7.w; + r17.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.zw, r2.x, int2(0,0)).xyzw; + r6.w = r17.z * r15.y + r6.w; + r6.w = r17.w * r12.w + r6.w; + r7.w = r17.y * r15.y + r7.w; + r7.w = r17.x * r12.w + r7.w; + r11.xy = float2(4.000000e+000,1.000000e+000) + -r2.yz; + r6.w = r13.y * r15.z + r6.w; + r6.w = r13.x * r11.x + r6.w; + r7.w = r17.z * r15.z + r7.w; + r7.w = r17.w * r11.x + r7.w; + r13.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.zw, r2.x, int2(2,0)).xyzw; + r8.w = r2.y * 2.000000000e+000 + 2.000000000e+000; + r9.w = dot(r13.zz, r2.yy); + r6.w = r9.w + r6.w; + r6.w = r13.w * r8.w + r6.w; + r10.w = dot(r13.yy, r2.yy); + r7.w = r10.w + r7.w; + r7.w = r13.x * r8.w + r7.w; + r2.w = r2.w * 2.000000000e+000 + r6.w; + r14.x = r14.x * r15.w + r2.w; + r2.w = r9.w + r7.w; + r14.y = r13.w * r15.w + r2.w; + r11.zw = r14.xy + r11.zw; + r14.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.zw, r2.x, int2(-2,2)).xyzw; + r18.xyzw = r14.wzxy * r12.xyxy; + r12.xy = r18.xz + r18.yw; + r2.w = r16.y * r12.z + r12.x; + r2.w = r16.x * r4.w + r2.w; + r6.w = r14.z * r12.z + r12.y; + r4.w = r14.w * r4.w + r6.w; + r12.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.zw, r2.x, int2(0,2)).xyzw; + r2.w = r12.z * 2.000000000e+000 + r2.w; + r2.w = r12.w * 2.000000000e+000 + r2.w; + r4.w = r12.y * 2.000000000e+000 + r4.w; + r4.w = r12.x * 2.000000000e+000 + r4.w; + r2.w = r17.y * r15.z + r2.w; + r2.w = r17.x * r11.x + r2.w; + r4.w = r12.z * r15.z + r4.w; + r4.w = r12.w * r11.x + r4.w; + r12.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r5.zw, r2.x, int2(2,2)).xyzw; + r2.x = r12.z * r2.y; + r2.w = r12.z * r2.y + r2.w; + r2.w = r12.w * r15.x + r2.w; + r2.y = r12.y * r2.y + r4.w; + r2.y = r12.x * r15.x + r2.y; + r2.w = r10.w + r2.w; + r12.x = r13.x * r15.w + r2.w; + r2.x = r2.x * 2.000000000e+000 + r2.y; + r12.y = r12.w * r15.w + r2.x; + r2.xy = r12.xy + r11.zw; + r2.y = r2.y * r2.z; + r2.x = r2.x * r11.y + r2.y; + r2.x = 1.694915257e-002 * r2.x; + r0.w = r2.x * r0.w; + r2.x = dot(r7.xyz, r4.xyz); + r2.y = saturate(r2.x); + r2.yzw = v2.xyz * r2.yyy; + r2.yzw = r2.yzw * r0.www; + if (r5.x != 0) { + r1.x = saturate(r1.x); + r2.x = r1.x * 5.000000000e-001 + r2.x; + r1.x = r1.x * 5.000000000e-001 + 1.000000000e+000; + r1.x = saturate(r2.x / r1.x); + r4.xyz = v2.xyz * r1.xxx; + r4.xyz = r4.xyz * r0.www; + r11.xyz = -r7.xyz * r1.www + r6.xyz; + r0.w = dot(r11.xyz, r11.xyz); + r0.w = rsqrt(r0.w); + r11.xyz = r11.xyz * r0.www; + r12.xyz = r0.xyz * r3.www + -r3.xyz; + r0.w = dot(r12.xyz, r12.xyz); + r0.w = rsqrt(r0.w); + r12.xyz = r12.xyz * r0.www; + r0.w = dot(r6.xyz, r12.xyz); + r0.w = -r0.w * r0.w + 1.000000000e+000; + r0.w = max(r0.w, 0.000000000e+000); + r0.w = sqrt(r0.w); + r0.w = log2(r0.w); + r0.w = r1.y * r0.w; + r0.w = exp2(r0.w); + r1.x = dot(r11.xyz, r12.xyz); + r1.x = -r1.x * r1.x + 1.000000000e+000; + r1.x = max(r1.x, 0.000000000e+000); + r1.x = sqrt(r1.x); + r1.x = log2(r1.x); + r1.x = r1.z * r1.x; + r1.x = exp2(r1.x); + r1.xzw = r1.xxx * r8.xyz; + r1.xzw = r0.www * r10.xxx + r1.xzw; + r1.xzw = r2.yzw * r1.xzw; + r1.xzw = v2.www * r1.xzw; + r1.xzw = float3(1.500000e-001,1.500000e-001,1.500000e-001) * r1.xzw; + r2.yzw = r4.xyz; + } else { + r0.xyz = r0.xyz * r3.www + -r3.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r0.x = saturate(dot(r7.xyz, r0.xyz)); + r0.y = r1.y * 8.662509918e-002 + 8.750000000e-001; + r0.x = r0.x * r1.y + -r1.y; + r0.x = exp2(r0.x); + r0.x = r0.y * r0.x; + r0.xyz = r2.yzw * r0.xxx; + r1.xzw = v2.www * r0.xyz; + } + if (r5.x == 0) { + r1.xzw = r1.xzw * r10.xyz; + } + r0.x = r5.y ? 0.000000000e+000 : 1.000000000e+000; + r0.xyz = r1.xzw * r0.xxx; + o0.xyz = r2.yzw * r9.xyz + r0.xyz; + o1.xyz = r1.xzw; + o1.w = 0.000000000e+000; + o0.w = 0.000000000e+000; + + // o0.xyzw = 0.0; + + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer $Globals +// { +// +// float2 g_invScreenSize; // Offset: 0 Size: 8 +// float4x4 g_invViewProjMatrix; // Offset: 16 Size: 64 +// float4 g_shadowmapHalfSizeAndInvHalfSize;// Offset: 80 Size: 16 [unused] +// float g_subRolloff; // Offset: 96 Size: 4 [unused] +// float4 g_exposureMultipliers; // Offset: 112 Size: 16 [unused] +// uint4 g_shadowmapDimensions; // Offset: 128 Size: 16 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// g_shadowmapSampler sampler_c NA NA 0 1 +// g_shadowmapTexture texture float4 2d 0 1 +// g_depthTexture texture float4 2d 1 1 +// g_gbufferTexture0 texture float4 2d 2 1 +// g_gbufferTexture1 texture float4 2d 3 1 +// g_gbufferTexture2 texture float4 2d 4 1 +// g_gbufferTexture4 texture float4 2d 5 1 +// $Globals cbuffer NA NA 0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float xyzw +// TEXCOORD 1 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float w +// TEXCOORD 3 xyzw 4 NONE float +// TEXCOORD 4 xyzw 5 NONE float xy +// TEXCOORD 5 xyzw 6 NONE float xyz +// TEXCOORD 6 xyzw 7 NONE float xyzw +// TEXCOORD 7 xyzw 8 NONE float xyzw +// TEXCOORD 8 xyzw 9 NONE float xyzw +// TEXCOORD 9 xyzw 10 NONE float xyzw +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// SV_Target 1 xyzw 1 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb0[9], immediateIndexed +dcl_sampler s0, mode_comparison +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (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_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.xyzw +dcl_input_ps linear v2.xyzw +dcl_input_ps linear v3.w +dcl_input_ps linear v5.xy +dcl_input_ps linear v6.xyz +dcl_input_ps linear v7.xyzw +dcl_input_ps linear v8.xyzw +dcl_input_ps linear v9.xyzw +dcl_input_ps linear v10.xyzw +dcl_output o0.xyzw +dcl_output o1.xyzw +dcl_temps 19 +mul r0.xy, v0.xyxx, cb0[0].xyxx +ftoi r1.xy, v0.xyxx +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r1.xyww, t2.xyzw +ld_indexable(texture2d)(float,float,float,float) r3.xyzw, r1.xyww, t3.xyzw +ld_indexable(texture2d)(float,float,float,float) r0.z, r1.xyww, t4.xywz +ld_indexable(texture2d)(float,float,float,float) r4.z, r1.xyww, t1.yzxw +mul r0.z, r0.z, l(255.000000) +round_ne r0.z, r0.z +ftoi r0.z, r0.z +ieq r5.xy, r0.zzzz, l(4, 2, 0, 0) +if_nz r5.x + ld_indexable(texture2d)(float,float,float,float) r1.xyzw, r1.xyzw, t5.xyzw + mad r6.xyzw, r2.xyzw, l(4.000000, 4.000000, 4.000000, 4.000000), l(-2.000000, -2.000000, -2.000000, -2.000000) + dp2 r0.w, r6.xyxx, r6.xyxx + mad r7.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r7.z, l(0.000000) + sqrt r0.w, r0.w + mul r7.xy, r0.wwww, r6.xyxx + dp3 r0.w, r7.xywx, r7.xywx + rsq r0.w, r0.w + mul r7.xyz, r0.wwww, r7.xywx + dp2 r0.w, r6.zwzz, r6.zwzz + mad r8.zw, -r0.wwww, l(0.000000, 0.000000, 0.250000, 0.500000), l(0.000000, 0.000000, 1.000000, 1.000000) + max r0.w, r8.z, l(0.000000) + sqrt r0.w, r0.w + mul r8.xy, r0.wwww, r6.zwzz + dp3 r0.w, r8.xywx, r8.xywx + rsq r0.w, r0.w + mul r6.xyz, r0.wwww, r8.xywx + dp2 r0.w, r1.xyxx, l(65280.000000, 255.000000, 0.000000, 0.000000) + round_ne r0.w, r0.w + mul r1.x, r0.w, l(0.031250) + round_z r1.x, r1.x + mad r8.z, r0.w, l(0.031250), -r1.x + mul r0.w, r1.x, l(0.015625) + round_z r8.x, r0.w + mad r8.y, r1.x, l(0.015625), -r8.x + mul r8.xyz, r8.xyzx, l(0.032258, 1.015873, 1.032258, 0.000000) + mul r1.xy, r1.zwzz, l(255.000000, 255.000000, 0.000000, 0.000000) + round_ne r1.xy, r1.xyxx + mul r1.zw, r1.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500) + round_z r9.xy, r1.zwzz + mad r9.zw, r1.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500), -r9.xxxy + mul r1.xw, r9.wwwy, l(1.066667, 0.000000, 0.000000, 0.066667) + mad r1.yz, r9.xxzx, l(0.000000, 0.800000, 12.800001, 0.000000), l(0.000000, 1.000000, 1.000000, 0.000000) + exp r1.yz, r1.yyzy + mad r1.yz, r1.yyzy, l(0.000000, 1.443000, 1.443000, 0.000000), l(0.000000, 1.443000, 1.443000, 0.000000) + mul r9.xyzw, r3.xyzw, r3.xyzw + mov r10.xyz, r9.wwww +else + mad r2.xyz, r2.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000) + dp3 r0.w, r2.xyzx, r2.xyzx + rsq r0.w, r0.w + mul r7.xyz, r0.wwww, r2.xyzx + mul r3.xyzw, r3.xyzw, r3.xyzw + ieq r0.w, r0.z, l(5) + if_nz r0.w + mul r9.xyz, r3.wwww, r3.xyzx + mov r10.xyz, r3.xyzx + else + ieq r0.z, r0.z, l(1) + if_nz r0.z + mul r10.xyz, r3.xyzx, r3.wwww + else + mov r10.xyz, r3.wwww + endif + mov r9.xyz, r3.xyzx + endif + lt r0.z, l(0.000000), r10.x + and r0.z, r2.w, r0.z + mad r0.z, r0.z, l(12.000000), l(1.000000) + exp r0.z, r0.z + mad r1.y, r0.z, l(1.443000), l(1.443000) + mov r6.xyz, l(0,0,0,0) + mov r1.xzw, l(0,0,0,0) + mov r8.xyz, l(0,0,0,0) +endif +mad r0.xy, r0.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r4.xy, r0.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000) +mov r4.w, l(1.000000) +dp4 r0.x, r4.xyzw, cb0[1].xyzw +dp4 r0.y, r4.xyzw, cb0[2].xyzw +dp4 r0.z, r4.xyzw, cb0[3].xyzw +dp4 r0.w, r4.xyzw, cb0[4].xyzw +div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w +mul r2.xyz, r0.wwww, r0.xyzx +dp3 r3.x, r2.xyzx, r2.xyzx +rsq r3.x, r3.x +mul r3.xyz, r2.xyzx, r3.xxxx +mad r0.xyz, -r0.xyzx, r0.wwww, v1.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r3.w, r0.w +mul r4.xyz, r0.xyzx, r3.wwww +add r0.w, r0.w, v3.w +div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w +add r0.w, r0.w, v1.w +max r0.w, r0.w, l(0.000000) +dp3 r4.w, v6.xyzx, r4.xyzx +mad_sat r4.w, r4.w, v5.x, v5.y +add r4.w, -r4.w, l(1.000000) +mul r0.w, r0.w, r4.w +mov r2.w, l(1.000000) +dp4 r11.x, r2.xyzw, v7.xyzw +dp4 r11.y, r2.xyzw, v8.xyzw +dp4 r4.w, r2.xyzw, v9.xyzw +dp4 r2.x, r2.xyzw, v10.xyzw +div r2.x, l(1.000000, 1.000000, 1.000000, 1.000000), r2.x +mul r2.yz, r2.xxxx, r11.xxyx +mul r2.x, r2.x, r4.w +max r2.w, |r2.z|, |r2.y| +add r2.w, -r2.w, l(1.000000) +min r2.w, r2.w, r4.w +lt r2.w, r2.w, l(0.000000) +discard_nz r2.w +mad r2.yz, r2.yyzy, l(0.000000, 0.500000, -0.500000, 0.000000), l(0.000000, 0.500000, 0.500000, 0.000000) +utof r2.w, cb0[8].x +div r4.w, l(1.000000, 1.000000, 1.000000, 1.000000), r2.w +mad r2.yz, r2.wwww, r2.yyzy, l(0.000000, 0.500000, 0.500000, 0.000000) +round_ni r5.zw, r2.yyyz +add r2.yz, r2.yyzy, -r5.zzwz +mul r5.zw, r4.wwww, r5.zzzw +gather4_c_aoffimmi_indexable(-2,-2,0)(texture2d)(float,float,float,float) r11.xyzw, r5.zwzz, t0.xyzw, s0.x, r2.x +add r12.xyzw, -r2.yyyy, l(1.000000, 2.000000, 3.000000, 5.000000) +mul r13.xyzw, r11.wzxy, r12.xyxy +add r11.zw, r13.yyyw, r13.xxxz +gather4_c_aoffimmi_indexable(0,-2,0)(texture2d)(float,float,float,float) r13.xyzw, r5.zwzz, t0.xyzw, s0.x, r2.x +mad r11.zw, r13.zzzy, l(0.000000, 0.000000, 2.000000, 2.000000), r11.zzzw +mad r11.zw, r13.wwwx, l(0.000000, 0.000000, 2.000000, 2.000000), r11.zzzw +gather4_c_aoffimmi_indexable(2,-2,0)(texture2d)(float,float,float,float) r14.xyzw, r5.zwzz, t0.xyzw, s0.x, r2.x +add r15.xyzw, r2.yyyy, l(1.000000, 4.000000, 3.000000, 2.000000) +mul r2.w, r2.y, r14.y +mad r11.zw, r14.zzzy, r2.yyyy, r11.zzzw +mad r11.zw, r14.wwwx, r15.xxxx, r11.zzzw +gather4_c_aoffimmi_indexable(-2,0,0)(texture2d)(float,float,float,float) r16.xyzw, r5.zwzz, t0.xyzw, s0.x, r2.x +mad r4.w, -r2.y, l(2.000000), l(2.000000) +mul r13.zw, r4.wwww, r16.wwwx +mad r6.w, r2.y, l(-2.000000), l(4.000000) +mad r13.zw, r16.zzzy, r6.wwww, r13.zzzw +mad r6.w, r11.y, r12.z, r13.z +mad r6.w, r11.x, r4.w, r6.w +mad r7.w, r16.z, r12.z, r13.w +mad r7.w, r16.w, r4.w, r7.w +gather4_c_aoffimmi_indexable(0,0,0)(texture2d)(float,float,float,float) r17.xyzw, r5.zwzz, t0.xyzw, s0.x, r2.x +mad r6.w, r17.z, r15.y, r6.w +mad r6.w, r17.w, r12.w, r6.w +mad r7.w, r17.y, r15.y, r7.w +mad r7.w, r17.x, r12.w, r7.w +add r11.xy, -r2.yzyy, l(4.000000, 1.000000, 0.000000, 0.000000) +mad r6.w, r13.y, r15.z, r6.w +mad r6.w, r13.x, r11.x, r6.w +mad r7.w, r17.z, r15.z, r7.w +mad r7.w, r17.w, r11.x, r7.w +gather4_c_aoffimmi_indexable(2,0,0)(texture2d)(float,float,float,float) r13.xyzw, r5.zwzz, t0.xyzw, s0.x, r2.x +mad r8.w, r2.y, l(2.000000), l(2.000000) +dp2 r9.w, r13.zzzz, r2.yyyy +add r6.w, r6.w, r9.w +mad r6.w, r13.w, r8.w, r6.w +dp2 r10.w, r13.yyyy, r2.yyyy +add r7.w, r7.w, r10.w +mad r7.w, r13.x, r8.w, r7.w +mad r2.w, r2.w, l(2.000000), r6.w +mad r14.x, r14.x, r15.w, r2.w +add r2.w, r7.w, r9.w +mad r14.y, r13.w, r15.w, r2.w +add r11.zw, r11.zzzw, r14.xxxy +gather4_c_aoffimmi_indexable(-2,2,0)(texture2d)(float,float,float,float) r14.xyzw, r5.zwzz, t0.xyzw, s0.x, r2.x +mul r18.xyzw, r12.xyxy, r14.wzxy +add r12.xy, r18.ywyy, r18.xzxx +mad r2.w, r16.y, r12.z, r12.x +mad r2.w, r16.x, r4.w, r2.w +mad r6.w, r14.z, r12.z, r12.y +mad r4.w, r14.w, r4.w, r6.w +gather4_c_aoffimmi_indexable(0,2,0)(texture2d)(float,float,float,float) r12.xyzw, r5.zwzz, t0.xyzw, s0.x, r2.x +mad r2.w, r12.z, l(2.000000), r2.w +mad r2.w, r12.w, l(2.000000), r2.w +mad r4.w, r12.y, l(2.000000), r4.w +mad r4.w, r12.x, l(2.000000), r4.w +mad r2.w, r17.y, r15.z, r2.w +mad r2.w, r17.x, r11.x, r2.w +mad r4.w, r12.z, r15.z, r4.w +mad r4.w, r12.w, r11.x, r4.w +gather4_c_aoffimmi_indexable(2,2,0)(texture2d)(float,float,float,float) r12.xyzw, r5.zwzz, t0.xyzw, s0.x, r2.x +mul r2.x, r2.y, r12.z +mad r2.w, r12.z, r2.y, r2.w +mad r2.w, r12.w, r15.x, r2.w +mad r2.y, r12.y, r2.y, r4.w +mad r2.y, r12.x, r15.x, r2.y +add r2.w, r2.w, r10.w +mad r12.x, r13.x, r15.w, r2.w +mad r2.x, r2.x, l(2.000000), r2.y +mad r12.y, r12.w, r15.w, r2.x +add r2.xy, r11.zwzz, r12.xyxx +mul r2.y, r2.z, r2.y +mad r2.x, r2.x, r11.y, r2.y +mul r2.x, r2.x, l(0.016949) +mul r0.w, r0.w, r2.x +dp3 r2.x, r7.xyzx, r4.xyzx +mov_sat r2.y, r2.x +mul r2.yzw, r2.yyyy, v2.xxyz +mul r2.yzw, r0.wwww, r2.yyzw +if_nz r5.x + mov_sat r1.x, r1.x + mad r2.x, r1.x, l(0.500000), r2.x + mad r1.x, r1.x, l(0.500000), l(1.000000) + div_sat r1.x, r2.x, r1.x + mul r4.xyz, r1.xxxx, v2.xyzx + mul r4.xyz, r0.wwww, r4.xyzx + mad r11.xyz, -r7.xyzx, r1.wwww, r6.xyzx + dp3 r0.w, r11.xyzx, r11.xyzx + rsq r0.w, r0.w + mul r11.xyz, r0.wwww, r11.xyzx + mad r12.xyz, r0.xyzx, r3.wwww, -r3.xyzx + dp3 r0.w, r12.xyzx, r12.xyzx + rsq r0.w, r0.w + mul r12.xyz, r0.wwww, r12.xyzx + dp3 r0.w, r6.xyzx, r12.xyzx + mad r0.w, -r0.w, r0.w, l(1.000000) + max r0.w, r0.w, l(0.000000) + sqrt r0.w, r0.w + log r0.w, r0.w + mul r0.w, r0.w, r1.y + exp r0.w, r0.w + dp3 r1.x, r11.xyzx, r12.xyzx + mad r1.x, -r1.x, r1.x, l(1.000000) + max r1.x, r1.x, l(0.000000) + sqrt r1.x, r1.x + log r1.x, r1.x + mul r1.x, r1.x, r1.z + exp r1.x, r1.x + mul r1.xzw, r8.xxyz, r1.xxxx + mad r1.xzw, r0.wwww, r10.xxxx, r1.xxzw + mul r1.xzw, r1.xxzw, r2.yyzw + mul r1.xzw, r1.xxzw, v2.wwww + mul r1.xzw, r1.xxzw, l(0.150000, 0.000000, 0.150000, 0.150000) + mov r2.yzw, r4.xxyz +else + mad r0.xyz, r0.xyzx, r3.wwww, -r3.xyzx + dp3 r0.w, r0.xyzx, r0.xyzx + rsq r0.w, r0.w + mul r0.xyz, r0.wwww, r0.xyzx + dp3_sat r0.x, r7.xyzx, r0.xyzx + mad r0.y, r1.y, l(0.086625), l(0.875000) + mad r0.x, r0.x, r1.y, -r1.y + exp r0.x, r0.x + mul r0.x, r0.x, r0.y + mul r0.xyz, r0.xxxx, r2.yzwy + mul r1.xzw, r0.xxyz, v2.wwww +endif +if_z r5.x + mul r1.xzw, r10.xxyz, r1.xxzw +endif +movc r0.x, r5.y, l(0), l(1.000000) +mul r0.xyz, r0.xxxx, r1.xzwx +mad o0.xyz, r2.yzwy, r9.xyzx, r0.xyzx +mov o1.xyz, r1.xzwx +mov o1.w, l(0) +mov o0.w, l(0) +ret +// Approximately 259 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ + \ No newline at end of file diff --git a/DragonAge/ShaderFixes/d001c59bb6ea953f-vs_replace.txt b/DragonAge/ShaderFixes/d001c59bb6ea953f-vs_replace.txt new file mode 100644 index 000000000..a1a0526ba Binary files /dev/null and b/DragonAge/ShaderFixes/d001c59bb6ea953f-vs_replace.txt differ diff --git a/DragonAge/ShaderFixes/d3ae8c1a436885d0-ps_replace.txt b/DragonAge/ShaderFixes/d3ae8c1a436885d0-ps_replace.txt new file mode 100644 index 000000000..ecc9c35bb --- /dev/null +++ b/DragonAge/ShaderFixes/d3ae8c1a436885d0-ps_replace.txt @@ -0,0 +1,122 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2DMS g_depthTexture : register(t1); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz,v1.x).x; + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r0.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r0.xyzw = r26.xyzw; + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r0.x = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.x = g_shadowmapTexture.SampleCmpLevelZero(g_shadowmapSampler_s, r1.xy, r0.x).x; + o0.xyzw = r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/d4bebd350201d00d-ps_replace.txt b/DragonAge/ShaderFixes/d4bebd350201d00d-ps_replace.txt new file mode 100644 index 000000000..bedff6c56 --- /dev/null +++ b/DragonAge/ShaderFixes/d4bebd350201d00d-ps_replace.txt @@ -0,0 +1,286 @@ + +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_lightDir : packoffset(c21); + float4x4 g_shadowmapTransform : packoffset(c22); + uint4 g_shadowmapDimensions : packoffset(c26); +} +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerState g_shadowmapSamplerNoCompare_s : register(s2); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_shadowmapTextureNoCompare : register(t2); +Texture2D g_softShadowJitterTexture : register(t3); +Texture2DMS g_depthTexture : register(t4); +Texture2DMS g_gbufferTexture0 : register(t5); +Texture2DMS g_gbufferTexture2 : register(t6); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + uint v1 : SV_SampleIndex0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r1.xy = g_invScreenSize.xy * v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r2.z = g_depthTexture.Load(r0.xyw,v1.x).x; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r2.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r2.w = 1.000000000e+000; + r1.x = dot(r2.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r1.y = dot(r2.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r1.z = dot(r2.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r1.w = dot(r2.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.w = 1.000000e+000 / r1.w; + r1.xyz = r1.xyz * r1.www; + r1.w = 1.000000000e+000; + +float4 r25, r26; +r26.xyzw = r1.xyzw; +r25.x = dot(r26.xyzw, b1.xyzw); +r25.y = dot(r26.xyzw, b2.xyzw); +r25.z = dot(r26.xyzw, b3.xyzw); +r25.w = dot(r26.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r26.x = dot(r25.xyzw, a1.xyzw); +r26.y = dot(r25.xyzw, a2.xyzw); +r26.z = dot(r25.xyzw, a3.xyzw); +r26.w = dot(r25.xyzw, a4.xyzw); +r1.xyzw = r26.xyzw; + + r2.x = dot(r1.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r2.y = dot(r1.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.x = dot(r1.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r1.yzw = g_gbufferTexture0.Load(r0.xyw,v1.x).xyz; + r0.x = g_gbufferTexture2.Load(r0.xyz,v1.x).w; + r0.x = 2.550000000e+002 * r0.x; + r0.x = round(r0.x); + r0.x = (int)r0.x; + r0.x = r0.x == 4; + if (r0.x != 0) { + r0.xy = r1.yz * float2(4.000000e+000,4.000000e+000) + float2(-2.000000e+000,-2.000000e+000); + r0.z = dot(r0.xy, r0.xy); + r3.zw = -r0.zz * float2(2.500000e-001,5.000000e-001) + float2(1.000000e+000,1.000000e+000); + r0.z = max(r3.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r3.xy = r0.xy * r0.zz; + r0.x = dot(r3.xyw, r3.xyw); + r0.x = rsqrt(r0.x); + r0.xyz = r3.xyw * r0.xxx; + } else { + r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); + r0.w = dot(r1.yzw, r1.yzw); + r0.w = rsqrt(r0.w); + r0.xyz = r1.yzw * r0.www; + } + r3.x = dot(r0.xyz, g_shadowmapViewMatrix._m00_m10_m20); + r3.y = dot(r0.xyz, g_shadowmapViewMatrix._m01_m11_m21); + r3.z = dot(r0.xyz, g_shadowmapViewMatrix._m02_m12_m22); + r0.xyz = g_shadowmapScales.xyz * r3.xyz; + r0.xy = -r0.xy / r0.zz; + r0.z = g_shadowmapDimensions.x; + r0.z = 1.000000e+000 / r0.z; + r1.yz = trunc(v0.yx); + r1.yz = r1.zy * float2(7.200000e+002,1.024000e+003) + r1.yz; + r1.yz = (uint2)r1.yz; + r1.yz = (int2)r1.yz ^ int2(0,0); + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r2.zw = (uint2)r1.yz >> int2(16,16); + r1.yz = (int2)r1.yz ^ (int2)r2.zw; + r1.yz = (int2)r1.yz * int2(0,0); + r1.yz = r1.yz; + r0.w = g_shadowPenumbraSize * r0.z; + r1.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r2.xy).x; + r2.z = -9.999999747e-006 + r1.x; + r2.z = r1.w < r2.z; + r2.z = r2.z ? 1.000000 : 0; + r1.w = r2.z * r1.w; + r3.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r4.x = r1.w; + r4.y = r2.z; + r3.y = 0.000000000e+000; + while (true) { + r2.w = (int)r3.y >= (int)16; + if (r2.w != 0) break; + r4.zw = g_softShadowJitterTexture.Load(r3.xyz).xy; + r4.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.zw; + r4.zw = frac(r4.zw); + r2.w = sqrt(r4.z); + r4.z = 6.283185482e+000 * r4.w; + sincos(r4.z, r5.x, r6.x); + r5.x = r5.x * r2.w; + r5.y = r6.x * r2.w; + r4.zw = r5.xy * r0.ww; + r5.xy = r5.xy * r0.ww + r2.xy; + r2.w = g_shadowmapTextureNoCompare.Sample(g_shadowmapSamplerNoCompare_s, r5.xy).x; + r4.z = dot(r0.xy, r4.zw); + r4.z = r4.z + r1.x; + r4.z = -9.999999747e-006 + r4.z; + r4.z = r2.w < r4.z; + r4.z = r4.z ? 1.000000 : 0; + r4.y = r4.y + r4.z; + r4.x = r4.z * r2.w + r4.x; + r3.y = (int)r3.y + 1; + } + r0.w = r4.y >= 1.000000000e+000; + if (r0.w != 0) { + r0.w = r4.x / r4.y; + r3.xyz = (int3)g_pcssFilterParameters0.xyw; + r1.w = r0.z + r0.z; + r0.w = r1.x + -r0.w; + r0.w = g_pcssFilterParameters1.x * r0.w; + r0.w = g_shadowPenumbraSize * r0.w; + r0.z = saturate(r0.w * r0.z); + r0.z = max(r1.w, r0.z); + r4.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r0.w = 0.000000000e+000; + r4.y = 0.000000000e+000; + while (true) { + r1.w = (int)r4.y >= (int)r3.x; + if (r1.w != 0) break; + r2.zw = g_softShadowJitterTexture.Load(r4.xyz).xy; + r2.zw = r1.yz * float2(2.328306e-010,2.328306e-010) + r2.zw; + r2.zw = frac(r2.zw); + r1.w = sqrt(r2.z); + r2.z = 6.283185482e+000 * r2.w; + sincos(r2.z, r5.x, r6.x); + r5.x = r5.x * r1.w; + r5.y = r6.x * r1.w; + r2.zw = r5.xy * r0.zz; + r1.w = dot(r0.xy, r2.zw); + r1.w = r1.x + r1.w; + r2.zw = r5.xy * r0.zz + r2.xy; + r1.w = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r2.zw, r1.w).x; + r1.w = dot(r1.wwww, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r0.w = r1.w + r0.w; + r4.y = (int)r4.y + 1; + } + r1.w = r4.y; + r1.w = r0.w / r1.w; + r5.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); + r6.x = r0.w; + r6.y = r4.y; + r2.z = r1.w; + r2.w = 1.000000000e+000; + while (true) { + r3.x = g_pcssFilterParameters0.z < r2.w; + r3.w = (int)r6.y < (int)r3.y; + r3.x = r3.w ? r3.x : 0; + if (r3.x == 0) break; + r3.x = (int)r3.z + (int)r6.y; + r3.w = r6.x; + r5.y = r6.y; + while (true) { + r4.x = (int)r5.y >= (int)r3.x; + if (r4.x != 0) break; + r4.xz = g_softShadowJitterTexture.Load(r5.xyz).xy; + r4.xz = r1.yz * float2(2.328306e-010,2.328306e-010) + r4.xz; + r4.xz = frac(r4.xz); + r4.x = sqrt(r4.x); + r4.z = 6.283185482e+000 * r4.z; + sincos(r4.z, r7.x, r8.x); + r7.x = r7.x * r4.x; + r7.y = r8.x * r4.x; + r4.xz = r7.xy * r0.zz; + r4.x = dot(r0.xy, r4.xz); + r4.x = r4.x + r1.x; + r4.zw = r7.xy * r0.zz + r2.xy; + r4.x = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r4.zw, r4.x).x; + r4.x = dot(r4.xxxx, float4(2.500000e-001,2.500000e-001,2.500000e-001,2.500000e-001)); + r3.w = r4.x + r3.w; + r5.y = (int)r5.y + 1; + } + r6.x = r3.w; + r6.y = r5.y; + r3.x = r6.y; + r3.x = r6.x / r3.x; + r4.x = r3.x + -r2.z; + r4.z = r3.x + r2.z; + r4.z = 5.000000000e-001 * r4.z; + r2.w = r4.x / r4.z; + r2.z = r3.x; + r2.w = abs(r2.w); + } + } else { + r2.z = 1.000000000e+000; + } + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r2.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + o0.xyzw = r2.zzzz * r0.xxxx; + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/df682774de7b526c-ps_replace.txt b/DragonAge/ShaderFixes/df682774de7b526c-ps_replace.txt new file mode 100644 index 000000000..9fbb269d8 --- /dev/null +++ b/DragonAge/ShaderFixes/df682774de7b526c-ps_replace.txt @@ -0,0 +1,315 @@ +//Snow decals +cbuffer viewConstants : register(b2) +{ + float time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + +cbuffer externalConstants : register(b1) +{ + float2 external_Atlas_RowsColumns : packoffset(c0); + float2 vc_pad0 : packoffset(c0.z); + float4 external_viewMatrix1 : packoffset(c1); + float4 external_viewMatrix2 : packoffset(c2); + float4 external_viewMatrix3 : packoffset(c3); + float4 external_viewMatrix4 : packoffset(c4); + float2 external_Diffuse_Tile : packoffset(c5); + float2 vc_pad5 : packoffset(c5.z); + float2 external_Alpha_Tile : packoffset(c6); + float2 vc_pad6 : packoffset(c6.z); + float external_Alpha_1_Opacity : packoffset(c7); + float3 vc_pad7 : packoffset(c7.y); +} +SamplerState sampler0_s : register(s0); +SamplerState sampler1_s : register(s1); +Texture2D texture_depthBufferTexture : register(t1); +Texture2D texture_Diffuse : register(t2); +Texture2D texture_Normal : register(t3); +Texture2D texture_Alpha : register(t4); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + float4 v1 : TEXCOORD0, + float4 v2 : TEXCOORD1, + float4 v3 : TEXCOORD2, + float4 v4 : TEXCOORD3, + float4 v5 : TEXCOORD4, + float4 v6 : TEXCOORD5, + out float4 o0 : SV_Target0, + out float4 o1 : SV_Target1) +{ + float4 r0,r1,r2; + uint4 bitmask; + + r0.xyz = external_viewMatrix2.xyz * v6.yyy; + r0.xyz = external_viewMatrix1.xyz * v6.xxx + r0.xyz; + r0.xyz = external_viewMatrix3.xyz * v6.zzz + r0.xyz; + r0.xyz = external_viewMatrix4.xyz + r0.xyz; + r0.w = dot(r0.xyz, r0.xyz); + r0.w = rsqrt(r0.w); + r0.xyz = r0.xyz * r0.www; + r0.xyz = r0.xyz / -r0.zzz; + r1.xy = screenSize.zw * v0.xy; + r0.w = texture_depthBufferTexture.Sample(sampler0_s, r1.xy).x; + +float4 r26; +r26.xyz = r0.xyz * r0.www; +r26.w = 1.0; + +float4 stereo = StereoParams.Load(0); +r26.x -= stereo.x * (-r26.z - stereo.y)/projMatrix._m00; + + r0.xyz = r26.xyz + -external_viewMatrix4.xyz; //r0.xyz * r0.www + -external_viewMatrix4.xyz; + + + r1.x = dot(external_viewMatrix1.xyz, r0.xyz); + r1.y = dot(external_viewMatrix2.xyz, r0.xyz); + r1.z = dot(external_viewMatrix3.xyz, r0.xyz); + r1.w = 1.000000000e+000; + + + r0.x = dot(r1.xyzw, v2.xyzw); + r0.y = dot(r1.xyzw, v3.xyzw); + r0.z = dot(r1.xyzw, v4.xyzw); + r0.w = dot(r1.xyzw, v5.xyzw); + r0.xyz = r0.xyz / r0.www; + r1.xyz = float3(5.000000e-001,5.000000e-001,5.000000e-001) + -abs(-r0.xyz); + r0.xy = v1.zy + r0.xz; + r0.xy = float2(5.000000e-001,5.000000e-001) + r0.xy; + r0.xy = r0.xy / external_Atlas_RowsColumns.yx; + r1.x = r1.x < 0; + r1.y = r1.y < 0; + r1.z = r1.z < 0; + r0.z = (int)r1.y | (int)r1.x; + r0.z = (int)r1.z | (int)r0.z; + if (r0.z != 0) discard; + r1.xyz = texture_Normal.Sample(sampler1_s, r0.xy).xyw; + r1.x = r1.x * r1.z; + r0.zw = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r1.xyz = v4.xyz * r0.www; + r1.xyz = v2.xyz * r0.zzz + r1.xyz; + r0.z = dot(r0.zw, r0.zw); + r0.z = 1.000000000e+000 + -r0.z; + r0.z = max(r0.z, 0.000000000e+000); + r0.z = sqrt(r0.z); + r1.xyz = v3.xyz * r0.zzz + r1.xyz; + r0.z = dot(r1.xyz, r1.xyz); + r0.z = rsqrt(r0.z); + r1.xyz = r1.xyz * r0.zzz; + r1.xyz = r1.xyz * float3(5.000000e-001,5.000000e-001,5.000000e-001) + float3(5.000000e-001,5.000000e-001,5.000000e-001); + r0.zw = external_Alpha_Tile.xy * r0.xy; + r0.z = texture_Alpha.Sample(sampler1_s, r0.zw).x; + r0.z = max(r0.z, external_Alpha_1_Opacity); + r0.z = min(r0.z, 1.000000000e+000); + r0.w = texture_Alpha.Sample(sampler1_s, r0.xy).y; + r0.xy = external_Diffuse_Tile.xy * r0.xy; + r2.xyz = texture_Diffuse.Sample(sampler1_s, r0.xy).xyz; + r2.xyz = sqrt(r2.xyz); + r0.x = r0.z * r0.w; + o0.xyz = r1.xyz * r0.xxx; + o0.w = r0.x; + o1.xyz = r2.xyz * r0.xxx; + o1.w = r0.x; + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer viewConstants +// { +// +// float1 time; // Offset: 0 Size: 4 [unused] +// float3 vc_pad0_; // Offset: 4 Size: 12 [unused] +// float4 screenSize; // Offset: 16 Size: 16 +// float3 debugNonFiniteColor; // Offset: 32 Size: 12 [unused] +// float1 vc_pad2_; // Offset: 44 Size: 4 [unused] +// float4x4 viewMatrix; // Offset: 48 Size: 64 [unused] +// float4x4 projMatrix; // Offset: 112 Size: 64 [unused] +// float4x4 viewProjMatrix; // Offset: 176 Size: 64 [unused] +// float4x4 crViewProjMatrix; // Offset: 240 Size: 64 [unused] +// float4 projectionKxKyKzKw; // Offset: 304 Size: 16 [unused] +// float3 cameraPos; // Offset: 320 Size: 12 [unused] +// float1 vc_pad8_; // Offset: 332 Size: 4 [unused] +// float3 transparentStartAndSlopeAndClamp;// Offset: 336 Size: 12 [unused] +// float1 vc_pad9_; // Offset: 348 Size: 4 [unused] +// float4 transparentCurve; // Offset: 352 Size: 16 [unused] +// float4 exposureMultipliers; // Offset: 368 Size: 16 [unused] +// float4 fogParams; // Offset: 384 Size: 16 [unused] +// float4 fogForwardScatteringParamsGradientScaleFogEnable;// Offset: 400 Size: 16 [unused] +// float4 fogForwardScatteringColorPresence;// Offset: 416 Size: 16 [unused] +// float4 fogCoefficients; // Offset: 432 Size: 16 [unused] +// float4 fogColorCoefficients; // Offset: 448 Size: 16 [unused] +// float4 fogColor; // Offset: 464 Size: 16 [unused] +// float4 fogStartDistance; // Offset: 480 Size: 16 [unused] +// float4 fogHeightFogCoefficients; // Offset: 496 Size: 16 [unused] +// float4 fogMiscParam; // Offset: 512 Size: 16 [unused] +// float2 fogEnabledMode; // Offset: 528 Size: 8 [unused] +// float2 vc_pad10_; // Offset: 536 Size: 8 [unused] +// +// } +// +// cbuffer externalConstants +// { +// +// float2 external_Atlas_RowsColumns; // Offset: 0 Size: 8 +// float2 vc_pad0; // Offset: 8 Size: 8 [unused] +// float4 external_viewMatrix1; // Offset: 16 Size: 16 +// float4 external_viewMatrix2; // Offset: 32 Size: 16 +// float4 external_viewMatrix3; // Offset: 48 Size: 16 +// float4 external_viewMatrix4; // Offset: 64 Size: 16 +// float2 external_Diffuse_Tile; // Offset: 80 Size: 8 +// float2 vc_pad5; // Offset: 88 Size: 8 [unused] +// float2 external_Alpha_Tile; // Offset: 96 Size: 8 +// float2 vc_pad6; // Offset: 104 Size: 8 [unused] +// float external_Alpha_1_Opacity; // Offset: 112 Size: 4 +// float3 vc_pad7; // Offset: 116 Size: 12 [unused] +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// sampler0 sampler NA NA 0 1 +// sampler1 sampler NA NA 1 1 +// texture_depthBufferTexture texture float4 2d 1 1 +// texture_Diffuse texture float4 2d 2 1 +// texture_Normal texture float4 2d 3 1 +// texture_Alpha texture float4 2d 4 1 +// externalConstants cbuffer NA NA 1 1 +// viewConstants cbuffer NA NA 2 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// TEXCOORD 0 xyzw 1 NONE float yz +// TEXCOORD 1 xyzw 2 NONE float xyzw +// TEXCOORD 2 xyzw 3 NONE float xyzw +// TEXCOORD 3 xyzw 4 NONE float xyzw +// TEXCOORD 4 xyzw 5 NONE float xyzw +// TEXCOORD 5 xyzw 6 NONE float xyz +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// SV_Target 1 xyzw 1 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb2[2], immediateIndexed +dcl_constantbuffer cb1[8], immediateIndexed +dcl_sampler s0, mode_default +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (float,float,float,float) t2 +dcl_resource_texture2d (float,float,float,float) t3 +dcl_resource_texture2d (float,float,float,float) t4 +dcl_input_ps_siv linear noperspective v0.xy, position +dcl_input_ps linear v1.yz +dcl_input_ps linear v2.xyzw +dcl_input_ps linear v3.xyzw +dcl_input_ps linear v4.xyzw +dcl_input_ps linear v5.xyzw +dcl_input_ps linear v6.xyz +dcl_output o0.xyzw +dcl_output o1.xyzw +dcl_temps 3 +mul r0.xyz, v6.yyyy, cb1[2].xyzx +mad r0.xyz, cb1[1].xyzx, v6.xxxx, r0.xyzx +mad r0.xyz, cb1[3].xyzx, v6.zzzz, r0.xyzx +add r0.xyz, r0.xyzx, cb1[4].xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +div r0.xyz, r0.xyzx, -r0.zzzz +mul r1.xy, v0.xyxx, cb2[1].zwzz +sample_indexable(texture2d)(float,float,float,float) r0.w, r1.xyxx, t1.yzwx, s0 +mad r0.xyz, r0.xyzx, r0.wwww, -cb1[4].xyzx +dp3 r1.x, cb1[1].xyzx, r0.xyzx +dp3 r1.y, cb1[2].xyzx, r0.xyzx +dp3 r1.z, cb1[3].xyzx, r0.xyzx +mov r1.w, l(1.000000) +dp4 r0.x, r1.xyzw, v2.xyzw +dp4 r0.y, r1.xyzw, v3.xyzw +dp4 r0.z, r1.xyzw, v4.xyzw +dp4 r0.w, r1.xyzw, v5.xyzw +div r0.xyz, r0.xyzx, r0.wwww +add r1.xyz, -|r0.xyzx|, l(0.500000, 0.500000, 0.500000, 0.000000) +add r0.xy, r0.xzxx, v1.zyzz +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +div r0.xy, r0.xyxx, cb1[0].yxyy +lt r1.xyz, r1.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000) +or r0.z, r1.y, r1.x +or r0.z, r1.z, r0.z +discard_nz r0.z +sample_indexable(texture2d)(float,float,float,float) r1.xyz, r0.xyxx, t3.xywz, s1 +mul r1.x, r1.z, r1.x +mad r0.zw, r1.xxxy, l(0.000000, 0.000000, 2.000000, 2.000000), l(0.000000, 0.000000, -1.000000, -1.000000) +mul r1.xyz, r0.wwww, v4.xyzx +mad r1.xyz, v2.xyzx, r0.zzzz, r1.xyzx +dp2 r0.z, r0.zwzz, r0.zwzz +add r0.z, -r0.z, l(1.000000) +max r0.z, r0.z, l(0.000000) +sqrt r0.z, r0.z +mad r1.xyz, v3.xyzx, r0.zzzz, r1.xyzx +dp3 r0.z, r1.xyzx, r1.xyzx +rsq r0.z, r0.z +mul r1.xyz, r0.zzzz, r1.xyzx +mad r1.xyz, r1.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), l(0.500000, 0.500000, 0.500000, 0.000000) +mul r0.zw, r0.xxxy, cb1[6].xxxy +sample_indexable(texture2d)(float,float,float,float) r0.z, r0.zwzz, t4.yzxw, s1 +max r0.z, r0.z, cb1[7].x +min r0.z, r0.z, l(1.000000) +sample_indexable(texture2d)(float,float,float,float) r0.w, r0.xyxx, t4.xzwy, s1 +mul r0.xy, r0.xyxx, cb1[5].xyxx +sample_indexable(texture2d)(float,float,float,float) r2.xyz, r0.xyxx, t2.xyzw, s1 +sqrt r2.xyz, r2.xyzx +mul r0.x, r0.w, r0.z +mul o0.xyz, r0.xxxx, r1.xyzx +mov o0.w, r0.x +mul o1.xyz, r0.xxxx, r2.xyzx +mov o1.w, r0.x +ret +// Approximately 56 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/DragonAge/ShaderFixes/f07e4ed1a99a0f06-ps_replace.txt b/DragonAge/ShaderFixes/f07e4ed1a99a0f06-ps_replace.txt new file mode 100644 index 000000000..8cc6698b3 --- /dev/null +++ b/DragonAge/ShaderFixes/f07e4ed1a99a0f06-ps_replace.txt @@ -0,0 +1,430 @@ +//Shadows +cbuffer _Globals : register(b0) +{ + float3 g_cameraPos : packoffset(c0); + float2 g_invScreenSize : packoffset(c1); + float4x4 g_invViewProjMatrix : packoffset(c2); + float4x4 g_viewToShadowMatrix : packoffset(c6); + float4 g_shadowmapHalfSizeAndInvHalfSize : packoffset(c10); + float4 g_shadowmapPoissonScale : packoffset(c11); + float4 g_shadowmapNoiseTilingFactor : packoffset(c12); + float g_shadowPenumbraSize : packoffset(c13); + float4 g_pcssFilterParameters0 : packoffset(c14); + float4 g_pcssFilterParameters1 : packoffset(c15); + float4x4 g_shadowmapViewMatrix : packoffset(c16); + float4 g_shadowmapScales : packoffset(c20); + float3 g_shadowBoxSize : packoffset(c21); + float3 g_shadowBoxHalfSize : packoffset(c22); + float4 g_shadowFadeOffsetAndSlope : packoffset(c23); + float3 g_lightDir : packoffset(c24); + float4x4 g_shadowmapTransform : packoffset(c25); + uint4 g_shadowmapDimensions : packoffset(c29); +} + +cbuffer viewConstants : register(b2) +{ + float time : packoffset(c0); + float3 vc_pad0_ : packoffset(c0.y); + float4 screenSize : packoffset(c1); + float3 debugNonFiniteColor : packoffset(c2); + float vc_pad2_ : packoffset(c2.w); + float4x4 viewMatrix : packoffset(c3); + float4x4 projMatrix : packoffset(c7); + float4x4 viewProjMatrix : packoffset(c11); + float4x4 crViewProjMatrix : packoffset(c15); + float4 projectionKxKyKzKw : packoffset(c19); + float3 cameraPos : packoffset(c20); + float vc_pad8_ : packoffset(c20.w); + float3 transparentStartAndSlopeAndClamp : packoffset(c21); + float vc_pad9_ : packoffset(c21.w); + float4 transparentCurve : packoffset(c22); + float4 exposureMultipliers : packoffset(c23); + float4 fogParams : packoffset(c24); + float4 fogForwardScatteringParamsGradientScaleFogEnable : packoffset(c25); + float4 fogForwardScatteringColorPresence : packoffset(c26); + float4 fogCoefficients : packoffset(c27); + float4 fogColorCoefficients : packoffset(c28); + float4 fogColor : packoffset(c29); + float4 fogStartDistance : packoffset(c30); + float4 fogHeightFogCoefficients : packoffset(c31); + float4 fogMiscParam : packoffset(c32); + float2 fogEnabledMode : packoffset(c33); + float2 vc_pad10_ : packoffset(c33.z); +} + + + +SamplerState g_transShadowmapSampler_s : register(s1); +SamplerComparisonState g_shadowmapSampler_s : register(s0); +Texture2D g_shadowmapTexture : register(t0); +Texture2D g_transShadowmapTexture : register(t1); +Texture2D g_depthTexture : register(t2); + +Texture2D StereoParams : register(t125); + +void main( + float4 v0 : SV_Position0, + out float4 o0 : SV_Target0) +{ + float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11; + uint4 bitmask; + +//Work out Inverse +//...Variables +float4 a1, a2, a3, a4; +float4 b1, b2, b3, b4; +float det; + +//...Original Matrix +a1 = g_invViewProjMatrix._m00_m10_m20_m30; +a2 = g_invViewProjMatrix._m01_m11_m21_m31; +a3 = g_invViewProjMatrix._m02_m12_m22_m32; +a4 = g_invViewProjMatrix._m03_m13_m23_m33; + +//...Determinant +det = a1.x*(a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y)); +det += a1.y*(a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.z) + a2.w*(a3.z*a4.x - a3.x*a4.z)); +det += a1.z*(a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x)); +det += a1.w*(a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y)); + +//...Inverse Matrix Elemets +b1.x = a2.y*(a3.z*a4.w - a3.w*a4.z) + a2.z*(a3.w*a4.y - a3.y*a4.w) + a2.w*(a3.y*a4.z - a3.z*a4.y); +b1.y = a1.y*(a3.w*a4.z - a3.z*a4.w) + a1.z*(a3.y*a4.w - a3.w*a4.y) + a1.w*(a3.z*a4.y - a3.y*a4.z); + +b1.z = a1.y*(a2.z*a4.w - a2.w*a4.z) + a1.z*(a2.w*a4.y - a2.y*a4.w) + a1.w*(a2.y*a4.z - a2.z*a4.y); +b1.w = a1.y*(a2.w*a3.z - a2.z*a3.w) + a1.z*(a2.y*a3.w - a2.w*a3.y) + a1.w*(a2.z*a3.y - a2.y*a3.z); + +b2.x = a2.x*(a3.w*a4.z - a3.z*a4.w) + a2.z*(a3.x*a4.w - a3.w*a4.x) + a2.w*(a3.z*a4.x - a3.x*a4.z); +b2.y = a1.x*(a3.z*a4.w - a3.w*a4.z) + a1.z*(a3.w*a4.x - a3.x*a4.w) + a1.w*(a3.x*a4.z - a3.z*a4.x); + +b2.z = a1.x*(a2.w*a4.z - a2.z*a4.w) + a1.z*(a2.x*a4.w - a2.w*a4.x) + a1.w*(a2.z*a4.x - a2.x*a4.z); +b2.w = a1.x*(a2.z*a3.w - a2.w*a3.z) + a1.z*(a2.w*a3.x - a2.x*a3.w) + a1.w*(a2.x*a3.z - a2.z*a3.x); + +b3.x = a2.x*(a3.y*a4.w - a3.w*a4.y) + a2.y*(a3.w*a4.x - a3.x*a4.w) + a2.w*(a3.x*a4.y - a3.y*a4.x); +b3.y = a1.x*(a3.w*a4.y - a3.y*a4.w) + a1.y*(a3.x*a4.w - a3.w*a4.x) + a1.w*(a3.y*a4.x - a3.x*a4.y); + +b3.z = a1.x*(a2.y*a4.w - a2.w*a4.y) + a1.y*(a2.w*a4.x - a2.x*a4.w) + a1.w*(a2.x*a4.y - a2.y*a4.x); +b3.w = a1.x*(a2.w*a3.y - a2.y*a3.w) + a1.y*(a2.x*a3.w - a2.w*a3.x) + a1.w*(a2.y*a3.x - a2.x*a3.y); + +b4.x = a2.x*(a3.z*a4.y - a3.y*a4.z) + a2.y*(a3.x*a4.z - a3.z*a4.x) + a2.z*(a3.y*a4.x - a3.x*a4.y); +b4.y = a1.x*(a3.y*a4.z - a3.z*a4.y) + a1.y*(a3.z*a4.x - a3.x*a4.z) + a1.z*(a3.x*a4.y - a3.y*a4.x); + +b4.z = a1.x*(a2.z*a4.y - a2.y*a4.z) + a1.y*(a2.x*a4.z - a2.z*a4.x) + a1.z*(a2.y*a4.x - a2.x*a4.y); +b4.w = a1.x*(a2.y*a3.z - a2.z*a3.y) + a1.y*(a2.z*a3.x - a2.x*a3.z) + a1.z*(a2.x*a3.y - a2.y*a3.x); + +b1.xyzw /= det; +b2.xyzw /= det; +b3.xyzw /= det; +b4.xyzw /= det; + +//End Inverse + + + r0.xy = (int2)v0.xy; + r0.zw = float2(0.000000e+000,0.000000e+000); + r0.z = g_depthTexture.Load(r0.xyz).x; + + + r1.xy = g_invScreenSize.xy * v0.xy; + r1.xy = r1.xy * float2(2.000000e+000,2.000000e+000) + float2(-1.000000e+000,-1.000000e+000); + r0.xy = float2(1.000000e+000,-1.000000e+000) * r1.xy; + r0.w = 1.000000000e+000; + + + + r1.x = dot(r0.xyzw, g_invViewProjMatrix._m03_m13_m23_m33); + r1.x = 1.000000e+000 / r1.x; + r2.x = dot(r0.xyzw, g_invViewProjMatrix._m00_m10_m20_m30); + r2.y = dot(r0.xyzw, g_invViewProjMatrix._m01_m11_m21_m31); + r2.z = dot(r0.xyzw, g_invViewProjMatrix._m02_m12_m22_m32); + r0.xyz = r2.xyz * r1.xxx; + r0.w = 1.000000000e+000; + +float4 r25; +r25.x = dot(r0.xyzw, b1.xyzw); +r25.y = dot(r0.xyzw, b2.xyzw); +r25.z = dot(r0.xyzw, b3.xyzw); +r25.w = dot(r0.xyzw, b4.xyzw); + +float4 stereo = StereoParams.Load(0); +r25.x -= stereo.x * (r25.w - stereo.y); + +r0.x = dot(r25.xyzw, a1.xyzw); +r0.y = dot(r25.xyzw, a2.xyzw); +r0.z = dot(r25.xyzw, a3.xyzw); +r0.w = dot(r25.xyzw, a4.xyzw); + + + r1.x = dot(r0.xyzw, g_shadowmapTransform._m00_m10_m20_m30); + r1.y = dot(r0.xyzw, g_shadowmapTransform._m01_m11_m21_m31); + r1.z = dot(r0.xyzw, g_shadowmapTransform._m02_m12_m22_m32); + r0.x = g_shadowmapDimensions.x; + r0.yz = r0.xx * r1.xy + float2(5.000000e-001,5.000000e-001); + r0.x = 1.000000e+000 / r0.x; + r2.x = floor(r0.y); + r2.y = floor(r0.z); + r0.yz = -r2.xy + r0.yz; + r0.xw = r2.xy * r0.xx; + r2.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,0)).xyzw; + r1.w = r0.y * 2.000000000e+000 + 2.000000000e+000; + r3.xy = float2(4.000000e+000,1.000000e+000) + -r0.yz; + r4.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,0)).xyzw; + r5.xyzw = float4(1.000000e+000,4.000000e+000,3.000000e+000,2.000000e+000) + r0.yyyy; + r6.xyzw = float4(1.000000e+000,2.000000e+000,3.000000e+000,5.000000e+000) + -r0.yyyy; + r3.z = -r0.y * 2.000000000e+000 + 2.000000000e+000; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,0)).xyzw; + r3.w = r0.y * -2.000000000e+000 + 4.000000000e+000; + r8.xy = r7.wx * r3.zz; + r8.xy = r7.zy * r3.ww + r8.xy; + r3.w = r7.z * r6.z + r8.y; + r3.w = r7.w * r3.z + r3.w; + r3.w = r4.y * r5.y + r3.w; + r3.w = r4.x * r6.w + r3.w; + r3.w = r4.z * r5.z + r3.w; + r3.w = r4.w * r3.x + r3.w; + r2.y = dot(r2.yy, r0.yy); + r3.w = r2.y + r3.w; + r3.w = r2.x * r1.w + r3.w; + r2.z = dot(r2.zz, r0.yy); + r3.w = r2.z + r3.w; + r9.y = r2.w * r5.w + r3.w; + r10.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,-2)).xyzw; + r11.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,-2)).xyzw; + r3.w = r11.y * r6.z + r8.x; + r3.w = r11.x * r3.z + r3.w; + r8.xyzw = r11.wzxy * r6.xyxy; + r7.zw = r8.xz + r8.yw; + r7.zw = r10.zy * float2(2.000000e+000,2.000000e+000) + r7.zw; + r7.zw = r10.wx * float2(2.000000e+000,2.000000e+000) + r7.zw; + r3.w = r4.z * r5.y + r3.w; + r3.w = r4.w * r6.w + r3.w; + r3.w = r10.y * r5.z + r3.w; + r3.w = r10.x * r3.x + r3.w; + r2.z = r3.w + r2.z; + r1.w = r2.w * r1.w + r2.z; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,-2)).xyzw; + r2.z = r8.y * r0.y; + r1.w = r2.z * 2.000000000e+000 + r1.w; + r9.x = r8.x * r5.w + r1.w; + r2.zw = r8.zy * r0.yy + r7.zw; + r2.zw = r8.wx * r5.xx + r2.zw; + r2.zw = r2.zw + r9.xy; + r8.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(-2,2)).xyzw; + r9.xyzw = r8.wzxy * r6.xyxy; + r4.zw = r9.xz + r9.yw; + r1.w = r8.z * r6.z + r4.w; + r3.w = r7.y * r6.z + r4.z; + r3.w = r7.x * r3.z + r3.w; + r1.w = r8.w * r3.z + r1.w; + r6.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(0,2)).xyzw; + r7.xyzw = g_shadowmapTexture.GatherCmp(g_shadowmapSampler_s, r0.xw, r1.z, int2(2,2)).xyzw; + r8.xyz = r1.xyz * g_shadowBoxSize.xyz + g_shadowBoxHalfSize.xyz; + r0.x = g_transShadowmapTexture.SampleLevel(g_transShadowmapSampler_s, r1.xy, 0.000000000e+000).x; + r0.x = 1.000000000e+000 + -r0.x; + r1.xyz = saturate(abs(r8.xyz) * g_shadowFadeOffsetAndSlope.www + g_shadowFadeOffsetAndSlope.xyz); + r0.w = r6.y * 2.000000000e+000 + r1.w; + r0.w = r6.x * 2.000000000e+000 + r0.w; + r0.w = r6.z * r5.z + r0.w; + r0.w = r6.w * r3.x + r0.w; + r0.w = r7.y * r0.y + r0.w; + r0.w = r7.x * r5.x + r0.w; + r1.w = r7.z * r0.y; + r0.w = r1.w * 2.000000000e+000 + r0.w; + r6.y = r7.w * r5.w + r0.w; + r0.w = r6.z * 2.000000000e+000 + r3.w; + r0.w = r6.w * 2.000000000e+000 + r0.w; + r0.w = r4.y * r5.z + r0.w; + r0.w = r4.x * r3.x + r0.w; + r0.y = r7.z * r0.y + r0.w; + r0.y = r7.w * r5.x + r0.y; + r0.y = r2.y + r0.y; + r6.x = r2.x * r5.w + r0.y; + r0.yw = r6.xy + r2.zw; + r0.z = r0.w * r0.z; + r0.y = r0.y * r3.y + r0.z; + r0.y = 1.694915257e-002 * r0.y; + o0.xyz = r0.yyy * r0.xxx; + r0.x = min(r1.y, r1.x); + o0.w = min(r1.z, r0.x); + return; +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546 +// +// +// Buffer Definitions: +// +// cbuffer $Globals +// { +// +// float3 g_cameraPos; // Offset: 0 Size: 12 [unused] +// float2 g_invScreenSize; // Offset: 16 Size: 8 +// float4x4 g_invViewProjMatrix; // Offset: 32 Size: 64 +// float4x4 g_viewToShadowMatrix; // Offset: 96 Size: 64 [unused] +// float4 g_shadowmapHalfSizeAndInvHalfSize;// Offset: 160 Size: 16 [unused] +// float4 g_shadowmapPoissonScale; // Offset: 176 Size: 16 [unused] +// float4 g_shadowmapNoiseTilingFactor;// Offset: 192 Size: 16 [unused] +// float g_shadowPenumbraSize; // Offset: 208 Size: 4 [unused] +// float4 g_pcssFilterParameters0; // Offset: 224 Size: 16 [unused] +// float4 g_pcssFilterParameters1; // Offset: 240 Size: 16 [unused] +// float4x4 g_shadowmapViewMatrix; // Offset: 256 Size: 64 [unused] +// float4 g_shadowmapScales; // Offset: 320 Size: 16 [unused] +// float3 g_shadowBoxSize; // Offset: 336 Size: 12 +// float3 g_shadowBoxHalfSize; // Offset: 352 Size: 12 +// float4 g_shadowFadeOffsetAndSlope; // Offset: 368 Size: 16 +// float3 g_lightDir; // Offset: 384 Size: 12 [unused] +// float4x4 g_shadowmapTransform; // Offset: 400 Size: 64 +// uint4 g_shadowmapDimensions; // Offset: 464 Size: 16 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim Slot Elements +// ------------------------------ ---------- ------- ----------- ---- -------- +// g_shadowmapSampler sampler_c NA NA 0 1 +// g_transShadowmapSampler sampler NA NA 1 1 +// g_shadowmapTexture texture float4 2d 0 1 +// g_transShadowmapTexture texture float4 2d 1 1 +// g_depthTexture texture float4 2d 2 1 +// $Globals cbuffer NA NA 0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Position 0 xyzw 0 POS float xy +// +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// SV_Target 0 xyzw 0 TARGET float xyzw +// +ps_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer cb0[30], immediateIndexed +dcl_sampler s0, mode_comparison +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2d (float,float,float,float) t2 +dcl_input_ps_siv linear noperspective v0.xy, position +dcl_output o0.xyzw +dcl_temps 12 +ftoi r0.xy, v0.xyxx +mov r0.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r0.z, r0.xyzw, t2.yzxw +mul r1.xy, v0.xyxx, cb0[1].xyxx +mad r1.xy, r1.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000) +mul r0.xy, r1.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000) +mov r0.w, l(1.000000) +dp4 r1.x, r0.xyzw, cb0[5].xyzw +div r1.x, l(1.000000, 1.000000, 1.000000, 1.000000), r1.x +dp4 r2.x, r0.xyzw, cb0[2].xyzw +dp4 r2.y, r0.xyzw, cb0[3].xyzw +dp4 r2.z, r0.xyzw, cb0[4].xyzw +mul r0.xyz, r1.xxxx, r2.xyzx +mov r0.w, l(1.000000) +dp4 r1.x, r0.xyzw, cb0[25].xyzw +dp4 r1.y, r0.xyzw, cb0[26].xyzw +dp4 r1.z, r0.xyzw, cb0[27].xyzw +utof r0.x, cb0[29].x +mad r0.yz, r0.xxxx, r1.xxyx, l(0.000000, 0.500000, 0.500000, 0.000000) +div r0.x, l(1.000000, 1.000000, 1.000000, 1.000000), r0.x +round_ni r2.xy, r0.yzyy +add r0.yz, r0.yyzy, -r2.xxyx +mul r0.xw, r0.xxxx, r2.xxxy +gather4_c_aoffimmi_indexable(2,0,0)(texture2d)(float,float,float,float) r2.xyzw, r0.xwxx, t0.xyzw, s0.x, r1.z +mad r1.w, r0.y, l(2.000000), l(2.000000) +add r3.xy, -r0.yzyy, l(4.000000, 1.000000, 0.000000, 0.000000) +gather4_c_aoffimmi_indexable(0,0,0)(texture2d)(float,float,float,float) r4.xyzw, r0.xwxx, t0.xyzw, s0.x, r1.z +add r5.xyzw, r0.yyyy, l(1.000000, 4.000000, 3.000000, 2.000000) +add r6.xyzw, -r0.yyyy, l(1.000000, 2.000000, 3.000000, 5.000000) +mad r3.z, -r0.y, l(2.000000), l(2.000000) +gather4_c_aoffimmi_indexable(-2,0,0)(texture2d)(float,float,float,float) r7.xyzw, r0.xwxx, t0.xyzw, s0.x, r1.z +mad r3.w, r0.y, l(-2.000000), l(4.000000) +mul r8.xy, r3.zzzz, r7.wxww +mad r8.xy, r7.zyzz, r3.wwww, r8.xyxx +mad r3.w, r7.z, r6.z, r8.y +mad r3.w, r7.w, r3.z, r3.w +mad r3.w, r4.y, r5.y, r3.w +mad r3.w, r4.x, r6.w, r3.w +mad r3.w, r4.z, r5.z, r3.w +mad r3.w, r4.w, r3.x, r3.w +dp2 r2.y, r2.yyyy, r0.yyyy +add r3.w, r3.w, r2.y +mad r3.w, r2.x, r1.w, r3.w +dp2 r2.z, r2.zzzz, r0.yyyy +add r3.w, r3.w, r2.z +mad r9.y, r2.w, r5.w, r3.w +gather4_c_aoffimmi_indexable(0,-2,0)(texture2d)(float,float,float,float) r10.xyzw, r0.xwxx, t0.xyzw, s0.x, r1.z +gather4_c_aoffimmi_indexable(-2,-2,0)(texture2d)(float,float,float,float) r11.xyzw, r0.xwxx, t0.xyzw, s0.x, r1.z +mad r3.w, r11.y, r6.z, r8.x +mad r3.w, r11.x, r3.z, r3.w +mul r8.xyzw, r6.xyxy, r11.wzxy +add r7.zw, r8.yyyw, r8.xxxz +mad r7.zw, r10.zzzy, l(0.000000, 0.000000, 2.000000, 2.000000), r7.zzzw +mad r7.zw, r10.wwwx, l(0.000000, 0.000000, 2.000000, 2.000000), r7.zzzw +mad r3.w, r4.z, r5.y, r3.w +mad r3.w, r4.w, r6.w, r3.w +mad r3.w, r10.y, r5.z, r3.w +mad r3.w, r10.x, r3.x, r3.w +add r2.z, r2.z, r3.w +mad r1.w, r2.w, r1.w, r2.z +gather4_c_aoffimmi_indexable(2,-2,0)(texture2d)(float,float,float,float) r8.xyzw, r0.xwxx, t0.xyzw, s0.x, r1.z +mul r2.z, r0.y, r8.y +mad r1.w, r2.z, l(2.000000), r1.w +mad r9.x, r8.x, r5.w, r1.w +mad r2.zw, r8.zzzy, r0.yyyy, r7.zzzw +mad r2.zw, r8.wwwx, r5.xxxx, r2.zzzw +add r2.zw, r9.xxxy, r2.zzzw +gather4_c_aoffimmi_indexable(-2,2,0)(texture2d)(float,float,float,float) r8.xyzw, r0.xwxx, t0.xyzw, s0.x, r1.z +mul r9.xyzw, r6.xyxy, r8.wzxy +add r4.zw, r9.yyyw, r9.xxxz +mad r1.w, r8.z, r6.z, r4.w +mad r3.w, r7.y, r6.z, r4.z +mad r3.w, r7.x, r3.z, r3.w +mad r1.w, r8.w, r3.z, r1.w +gather4_c_aoffimmi_indexable(0,2,0)(texture2d)(float,float,float,float) r6.xyzw, r0.xwxx, t0.xyzw, s0.x, r1.z +gather4_c_aoffimmi_indexable(2,2,0)(texture2d)(float,float,float,float) r7.xyzw, r0.xwxx, t0.xyzw, s0.x, r1.z +mad r8.xyz, r1.xyzx, cb0[21].xyzx, cb0[22].xyzx +sample_l_indexable(texture2d)(float,float,float,float) r0.x, r1.xyxx, t1.xyzw, s1, l(0.000000) +add r0.x, -r0.x, l(1.000000) +mad_sat r1.xyz, |r8.xyzx|, cb0[23].wwww, cb0[23].xyzx +mad r0.w, r6.y, l(2.000000), r1.w +mad r0.w, r6.x, l(2.000000), r0.w +mad r0.w, r6.z, r5.z, r0.w +mad r0.w, r6.w, r3.x, r0.w +mad r0.w, r7.y, r0.y, r0.w +mad r0.w, r7.x, r5.x, r0.w +mul r1.w, r0.y, r7.z +mad r0.w, r1.w, l(2.000000), r0.w +mad r6.y, r7.w, r5.w, r0.w +mad r0.w, r6.z, l(2.000000), r3.w +mad r0.w, r6.w, l(2.000000), r0.w +mad r0.w, r4.y, r5.z, r0.w +mad r0.w, r4.x, r3.x, r0.w +mad r0.y, r7.z, r0.y, r0.w +mad r0.y, r7.w, r5.x, r0.y +add r0.y, r0.y, r2.y +mad r6.x, r2.x, r5.w, r0.y +add r0.yw, r2.zzzw, r6.xxxy +mul r0.z, r0.z, r0.w +mad r0.y, r0.y, r3.y, r0.z +mul r0.y, r0.y, l(0.016949) +mul o0.xyz, r0.xxxx, r0.yyyy +min r0.x, r1.y, r1.x +min o0.w, r1.z, r0.x +ret +// Approximately 105 instruction slots used + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ + + \ No newline at end of file diff --git a/DragonAge/ShaderFixes/f1fbe4a862dbbf70-vs_replace.txt b/DragonAge/ShaderFixes/f1fbe4a862dbbf70-vs_replace.txt new file mode 100644 index 000000000..cfd5de539 Binary files /dev/null and b/DragonAge/ShaderFixes/f1fbe4a862dbbf70-vs_replace.txt differ diff --git a/DragonAge/ShaderFixes/f49fd0ca330167c6-vs_replace.txt b/DragonAge/ShaderFixes/f49fd0ca330167c6-vs_replace.txt new file mode 100644 index 000000000..2df1cfde0 --- /dev/null +++ b/DragonAge/ShaderFixes/f49fd0ca330167c6-vs_replace.txt @@ -0,0 +1,62 @@ +// Manually fixed. +// Very similar, but not identical ASM generated. (bfi slightly different, but valid) + + struct StoredBokeh + { + + float2 position; // Offset: 0 + float2 radius; // Offset: 8 + float4 colorAndWeight; // Offset: 16 + + }; // Offset: 0 Size: 32 + +StructuredBuffer g_BokehBuffer : register(t3); + +Texture2D StereoParams : register(t125); + +void main( + uint v0 : SV_VertexID0, + uint v1 : SV_InstanceID0, + out float4 o0 : SV_Position0, + out float4 o1 : COLOR0, + out float2 o2 : TEXCOORD0) +{ + const float4 icb[] = { { 0, 0, 0, 0}, + { 1, 0, 0, 0}, + { 2, 0, 0, 0}, + { 1, 0, 0, 0}, + { 3, 0, 0, 0}, + { 2, 0, 0, 0} }; + float4 r0,r1; + uint4 bitmask; +uint1 src0; +uint1 src1; +src0 = v0.x; +src1 = 6; + r0.x = src0 % src1; + bitmask.y = ((~(-1 << 1)) << 1) & 0xffffffff; + r0.y = (((uint)icb[r0.x].x << 1) & bitmask.y) | ((uint)0 & ~bitmask.y); + r1.x = r0.y; + r0.y = 2 & (int)icb[r0.x].x; + r0.x = (int)-r0.x + (int)v0.x; +src0 = r0.x; +src1 = 6; + r0.x = src0 / src1; + r1.y = r0.y; + r0.yz = r1.xy * float2(1.000000e+000,-1.000000e+000) + float2(-1.000000e+000,1.000000e+000); + o2.xy = float2(5.000000e-001,5.000000e-001) * r1.xy; +// ld_structured_indexable(structured_buffer, stride=32)(mixed,mixed,mixed,mixed) r1.xyzw, r0.x, l(0), t3.xyzw +r1.x = g_BokehBuffer[r0.x].position.x; +r1.y = g_BokehBuffer[r0.x].position.y; +r1.z = g_BokehBuffer[r0.x].radius.x; +r1.w = g_BokehBuffer[r0.x].radius.y; +// ld_structured_indexable(structured_buffer, stride=32)(mixed,mixed,mixed,mixed) o1.xyzw, r0.x, l(16), t3.xyzw +o1.x = g_BokehBuffer[r0.x].colorAndWeight.x; +o1.y = g_BokehBuffer[r0.x].colorAndWeight.y; +o1.z = g_BokehBuffer[r0.x].colorAndWeight.z; +o1.w = g_BokehBuffer[r0.x].colorAndWeight.w; + r0.xw = r1.zw + r1.zw; + o0.xy = r0.yz * r0.xw + r1.xy; + o0.zw = float2(0.000000e+000,1.000000e+000); + return; +} \ No newline at end of file diff --git a/DragonAge/ShaderFixes/fdc688ab845de7dc-vs_replace.txt b/DragonAge/ShaderFixes/fdc688ab845de7dc-vs_replace.txt new file mode 100644 index 000000000..1a5b77a03 Binary files /dev/null and b/DragonAge/ShaderFixes/fdc688ab845de7dc-vs_replace.txt differ diff --git a/DragonAge/User.cfg b/DragonAge/User.cfg new file mode 100644 index 000000000..f84e8dfb8 --- /dev/null +++ b/DragonAge/User.cfg @@ -0,0 +1,10 @@ +RenderDevice.ForceRenderAheadLimit 0 +RenderDevice.TripleBufferingEnable 0 +RenderDevice.VsyncEnable 0 +WorldRender.MotionBlurEnable 0 +WorldRender.MotionBlurForceOn 0 +WorldRender.MotionBlurFixedShutterTime 0 +WorldRender.MotionBlurMax 0 +WorldRender.MotionBlurQuality 0 +WorldRender.MotionBlurMaxSampleCount 0 +WorldRender.LightTileCsPathEnable 0 \ No newline at end of file diff --git a/DragonAge/uninstall.bat b/DragonAge/uninstall.bat index dae27b400..dbe4bb277 100644 --- a/DragonAge/uninstall.bat +++ b/DragonAge/uninstall.bat @@ -97,6 +97,9 @@ del BinaryDecompiler.lib del ShaderUsage.txt +REM delete this file too, we added it, we should delete it. +del User.cfg + rmdir /s /q ShaderFixes rmdir /s /q ShaderCache rmdir /s /q ShaderFromGame diff --git a/StereovisionHacks.sln b/StereovisionHacks.sln index 73751d7c8..9f5d1a80e 100644 --- a/StereovisionHacks.sln +++ b/StereovisionHacks.sln @@ -3756,8 +3756,85 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cmd_Decompiler", "HLSLDecom EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DragonAge", "DragonAge", "{F655151C-79C9-4A90-9C7B-E97C1F512E2A}" ProjectSection(SolutionItems) = preProject + DragonAge\cc79d4a79b16b59c-vs.txt = DragonAge\cc79d4a79b16b59c-vs.txt + DragonAge\cc79d4a79b16b59c-vs_replace.txt = DragonAge\cc79d4a79b16b59c-vs_replace.txt DragonAge\d3dx.ini = DragonAge\d3dx.ini + DragonAge\f49fd0ca330167c6-vs.txt = DragonAge\f49fd0ca330167c6-vs.txt + DragonAge\f49fd0ca330167c6-vs_replace.txt = DragonAge\f49fd0ca330167c6-vs_replace.txt DragonAge\uninstall.bat = DragonAge\uninstall.bat + DragonAge\User.cfg = DragonAge\User.cfg + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ShaderFixes", "ShaderFixes", "{A76D7245-7953-4D16-9FCD-9296BCD763A6}" + ProjectSection(SolutionItems) = preProject + DragonAge\ShaderFixes\002d3a9aead314ab-ps_replace.txt = DragonAge\ShaderFixes\002d3a9aead314ab-ps_replace.txt + DragonAge\ShaderFixes\0096e678e7e3bf7f-ps_replace.txt = DragonAge\ShaderFixes\0096e678e7e3bf7f-ps_replace.txt + DragonAge\ShaderFixes\0ae7ea6f76da0f5e-ps_replace.txt = DragonAge\ShaderFixes\0ae7ea6f76da0f5e-ps_replace.txt + DragonAge\ShaderFixes\0ec8666e559d7139-ps_replace.txt = DragonAge\ShaderFixes\0ec8666e559d7139-ps_replace.txt + DragonAge\ShaderFixes\12b273239f0ed83b-ps_replace.txt = DragonAge\ShaderFixes\12b273239f0ed83b-ps_replace.txt + DragonAge\ShaderFixes\1522c6879ac263f0-ps_replace.txt = DragonAge\ShaderFixes\1522c6879ac263f0-ps_replace.txt + DragonAge\ShaderFixes\16f31f3d379beb8a-vs_replace.txt = DragonAge\ShaderFixes\16f31f3d379beb8a-vs_replace.txt + DragonAge\ShaderFixes\19a0a417eb510de1-ps_replace.txt = DragonAge\ShaderFixes\19a0a417eb510de1-ps_replace.txt + DragonAge\ShaderFixes\202009901078a530-ps_replace.txt = DragonAge\ShaderFixes\202009901078a530-ps_replace.txt + DragonAge\ShaderFixes\20b03277c097870c-ps_replace.txt = DragonAge\ShaderFixes\20b03277c097870c-ps_replace.txt + DragonAge\ShaderFixes\210275c5b1f99145-ps_replace.txt = DragonAge\ShaderFixes\210275c5b1f99145-ps_replace.txt + DragonAge\ShaderFixes\21ab670e4799dcb3-vs_replace.txt = DragonAge\ShaderFixes\21ab670e4799dcb3-vs_replace.txt + DragonAge\ShaderFixes\26fd17c8da889234-ps_replace.txt = DragonAge\ShaderFixes\26fd17c8da889234-ps_replace.txt + DragonAge\ShaderFixes\30e03c5b3d15d370-ps_replace.txt = DragonAge\ShaderFixes\30e03c5b3d15d370-ps_replace.txt + DragonAge\ShaderFixes\32d691e0eaa8a49f-ps_replace.txt = DragonAge\ShaderFixes\32d691e0eaa8a49f-ps_replace.txt + DragonAge\ShaderFixes\361a6d40093a56f5-ps_replace.txt = DragonAge\ShaderFixes\361a6d40093a56f5-ps_replace.txt + DragonAge\ShaderFixes\370812edcce93f60-ps_replace.txt = DragonAge\ShaderFixes\370812edcce93f60-ps_replace.txt + DragonAge\ShaderFixes\39542e3b836539c5-vs_replace.txt = DragonAge\ShaderFixes\39542e3b836539c5-vs_replace.txt + DragonAge\ShaderFixes\3a204b3af89fd2ac-ps_replace.txt = DragonAge\ShaderFixes\3a204b3af89fd2ac-ps_replace.txt + DragonAge\ShaderFixes\3abc0ddd6df9b9d0-ps_replace.txt = DragonAge\ShaderFixes\3abc0ddd6df9b9d0-ps_replace.txt + DragonAge\ShaderFixes\3b458242e755a369-ps_replace.txt = DragonAge\ShaderFixes\3b458242e755a369-ps_replace.txt + DragonAge\ShaderFixes\3b92477c509a6f64-ps_replace.txt = DragonAge\ShaderFixes\3b92477c509a6f64-ps_replace.txt + DragonAge\ShaderFixes\3ca56f966335ea42-ps_replace.txt = DragonAge\ShaderFixes\3ca56f966335ea42-ps_replace.txt + DragonAge\ShaderFixes\49535b6271e2ef87-ps_replace.txt = DragonAge\ShaderFixes\49535b6271e2ef87-ps_replace.txt + DragonAge\ShaderFixes\4d7f94580ccefe87-ps_replace.txt = DragonAge\ShaderFixes\4d7f94580ccefe87-ps_replace.txt + DragonAge\ShaderFixes\4dc97c4fb5b65981-ps_replace.txt = DragonAge\ShaderFixes\4dc97c4fb5b65981-ps_replace.txt + DragonAge\ShaderFixes\54cb5a3967a3f56e-ps_replace.txt = DragonAge\ShaderFixes\54cb5a3967a3f56e-ps_replace.txt + DragonAge\ShaderFixes\58086923b2ca4243-ps_replace.txt = DragonAge\ShaderFixes\58086923b2ca4243-ps_replace.txt + DragonAge\ShaderFixes\5ce84d37f8b551f2-ps_replace.txt = DragonAge\ShaderFixes\5ce84d37f8b551f2-ps_replace.txt + DragonAge\ShaderFixes\62835f61cd7ed9ad-ps_replace.txt = DragonAge\ShaderFixes\62835f61cd7ed9ad-ps_replace.txt + DragonAge\ShaderFixes\64722f854716a0dc-ps_replace.txt = DragonAge\ShaderFixes\64722f854716a0dc-ps_replace.txt + DragonAge\ShaderFixes\65382378c671ad08-vs_replace.txt = DragonAge\ShaderFixes\65382378c671ad08-vs_replace.txt + DragonAge\ShaderFixes\6c8e9a125ef34e74-ps_replace.txt = DragonAge\ShaderFixes\6c8e9a125ef34e74-ps_replace.txt + DragonAge\ShaderFixes\6d05dad1162469cf-ps_replace.txt = DragonAge\ShaderFixes\6d05dad1162469cf-ps_replace.txt + DragonAge\ShaderFixes\71537c80f74ee50b-ps_replace.txt = DragonAge\ShaderFixes\71537c80f74ee50b-ps_replace.txt + DragonAge\ShaderFixes\73948454663078ed-ps_replace.txt = DragonAge\ShaderFixes\73948454663078ed-ps_replace.txt + DragonAge\ShaderFixes\768c9434abe74c8f-ps_replace.txt = DragonAge\ShaderFixes\768c9434abe74c8f-ps_replace.txt + DragonAge\ShaderFixes\799e5548087efdef-ps_replace.txt = DragonAge\ShaderFixes\799e5548087efdef-ps_replace.txt + DragonAge\ShaderFixes\84ba87e2df5ed4bc-ps_replace.txt = DragonAge\ShaderFixes\84ba87e2df5ed4bc-ps_replace.txt + DragonAge\ShaderFixes\84be68e361a62cee-ps_replace.txt = DragonAge\ShaderFixes\84be68e361a62cee-ps_replace.txt + DragonAge\ShaderFixes\8dc3c14ea75b25c1-vs_replace.txt = DragonAge\ShaderFixes\8dc3c14ea75b25c1-vs_replace.txt + DragonAge\ShaderFixes\90b19c0bf2c21f1e-ps_replace.txt = DragonAge\ShaderFixes\90b19c0bf2c21f1e-ps_replace.txt + DragonAge\ShaderFixes\9705e8ec0d4078b2-ps_replace.txt = DragonAge\ShaderFixes\9705e8ec0d4078b2-ps_replace.txt + DragonAge\ShaderFixes\98e9515c5ec8ea5c-ps_replace.txt = DragonAge\ShaderFixes\98e9515c5ec8ea5c-ps_replace.txt + DragonAge\ShaderFixes\a13db999dd2dd05f-vs_replace.txt = DragonAge\ShaderFixes\a13db999dd2dd05f-vs_replace.txt + DragonAge\ShaderFixes\a18e53c08a3bccb9-ps_replace.txt = DragonAge\ShaderFixes\a18e53c08a3bccb9-ps_replace.txt + DragonAge\ShaderFixes\aed7d685bda29aa9-vs_replace.txt = DragonAge\ShaderFixes\aed7d685bda29aa9-vs_replace.txt + DragonAge\ShaderFixes\b270906713966d35-ps_replace.txt = DragonAge\ShaderFixes\b270906713966d35-ps_replace.txt + DragonAge\ShaderFixes\b7d3c93610449f86-ps_replace.txt = DragonAge\ShaderFixes\b7d3c93610449f86-ps_replace.txt + DragonAge\ShaderFixes\b8759b1e0daa4ef5-ps_replace.txt = DragonAge\ShaderFixes\b8759b1e0daa4ef5-ps_replace.txt + DragonAge\ShaderFixes\ba8b1adb0dd5adcf-ps_replace.txt = DragonAge\ShaderFixes\ba8b1adb0dd5adcf-ps_replace.txt + DragonAge\ShaderFixes\c128a53ea0dd455f-ps_replace.txt = DragonAge\ShaderFixes\c128a53ea0dd455f-ps_replace.txt + DragonAge\ShaderFixes\c340fcbe39883883-ps_replace.txt = DragonAge\ShaderFixes\c340fcbe39883883-ps_replace.txt + DragonAge\ShaderFixes\c4fc1fd41669b895-ps_replace.txt = DragonAge\ShaderFixes\c4fc1fd41669b895-ps_replace.txt + DragonAge\ShaderFixes\c8f7765a3685d0a5-ps_replace.txt = DragonAge\ShaderFixes\c8f7765a3685d0a5-ps_replace.txt + DragonAge\ShaderFixes\c991a8f34dbbcc09-ps_replace.txt = DragonAge\ShaderFixes\c991a8f34dbbcc09-ps_replace.txt + DragonAge\ShaderFixes\c9c281359983ed8e-ps_replace.txt = DragonAge\ShaderFixes\c9c281359983ed8e-ps_replace.txt + DragonAge\ShaderFixes\cc180edf8062ac82-ps_replace.txt = DragonAge\ShaderFixes\cc180edf8062ac82-ps_replace.txt + DragonAge\ShaderFixes\cc79d4a79b16b59c-vs_replace.txt = DragonAge\ShaderFixes\cc79d4a79b16b59c-vs_replace.txt + DragonAge\ShaderFixes\ce128fb3a102ee37-ps_replace.txt = DragonAge\ShaderFixes\ce128fb3a102ee37-ps_replace.txt + DragonAge\ShaderFixes\d001c59bb6ea953f-vs_replace.txt = DragonAge\ShaderFixes\d001c59bb6ea953f-vs_replace.txt + DragonAge\ShaderFixes\d3ae8c1a436885d0-ps_replace.txt = DragonAge\ShaderFixes\d3ae8c1a436885d0-ps_replace.txt + DragonAge\ShaderFixes\d4bebd350201d00d-ps_replace.txt = DragonAge\ShaderFixes\d4bebd350201d00d-ps_replace.txt + DragonAge\ShaderFixes\df682774de7b526c-ps_replace.txt = DragonAge\ShaderFixes\df682774de7b526c-ps_replace.txt + DragonAge\ShaderFixes\f07e4ed1a99a0f06-ps_replace.txt = DragonAge\ShaderFixes\f07e4ed1a99a0f06-ps_replace.txt + DragonAge\ShaderFixes\f1fbe4a862dbbf70-vs_replace.txt = DragonAge\ShaderFixes\f1fbe4a862dbbf70-vs_replace.txt + DragonAge\ShaderFixes\f49fd0ca330167c6-vs_replace.txt = DragonAge\ShaderFixes\f49fd0ca330167c6-vs_replace.txt + DragonAge\ShaderFixes\fdc688ab845de7dc-vs_replace.txt = DragonAge\ShaderFixes\fdc688ab845de7dc-vs_replace.txt EndProjectSection EndProject Global @@ -4315,5 +4392,6 @@ Global {7C1981AF-4A10-4035-AA29-DF6556000AEE} = {1693604A-42AF-4848-B892-D1540FB17FDE} {E375F279-4DFD-4040-B37F-03F0F49E5200} = {7C1981AF-4A10-4035-AA29-DF6556000AEE} {F655151C-79C9-4A90-9C7B-E97C1F512E2A} = {1693604A-42AF-4848-B892-D1540FB17FDE} + {A76D7245-7953-4D16-9FCD-9296BCD763A6} = {F655151C-79C9-4A90-9C7B-E97C1F512E2A} EndGlobalSection EndGlobal