//FSR. Temporal antialiasing.
// ---- Created with 3Dmigoto v0.6.181 on Wed Apr  3 22:21:31 2024

cbuffer M_Common_PSConstants_Camera : register(b0)
{
  float4x4 mViewProj : packoffset(c0);
  float4 mDepthConvertToOrthoCoeffsNearFar : packoffset(c4);
  float4 mDepthToTextureCoefficients : packoffset(c5);
  float4 mDepthCoefficientsMtl : packoffset(c6);
  float4 mShadowMapBiasScaleOffset : packoffset(c7);
  float4x4 mView : packoffset(c8);
  float4x4 mProj : packoffset(c12);
  float4x4 mViewInv : packoffset(c16);
  float4 mInvProj : packoffset(c20);
  float4 mEyePos : packoffset(c21);
  float3 mEyeDir : packoffset(c22);
  uint3 mDebugMode : packoffset(c23);
}

cbuffer BlurAgent_PSConstants : register(b9)
{
  float4 mDepthCoefficients : packoffset(c0);
  float4 mInvWidthHeight : packoffset(c1);
  float4 mNearFocusFarRadius : packoffset(c2);
  float4 mAutoFocusUVs1 : packoffset(c3);
  float4 mAutoFocusUVs2 : packoffset(c4);
  float4 mAutoFocusUVs3 : packoffset(c5);
  float4 mViewportConstants : packoffset(c6);
  float4 mInvProjectionScalesOffset : packoffset(c7);
  float4x4 mDeltaMatrix : packoffset(c8);
  float4 mMotionBlurControls : packoffset(c12);
  float2 mBlurViewportScale : packoffset(c13);
  float2 mUIMaskScale : packoffset(c13.z);
  float2 mTemporalJitterCorrection : packoffset(c14);
}

SamplerState depthMap_sampler_s : register(s2);
Texture2D<float4> depthMap : register(t2);


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


void main(
  float2 v0 : TEXCOORD0,
  float4 v1 : SV_POSITION0,
  out float4 o0 : SV_TARGET0)
{
  float4 r0,r1;
  uint4 bitmask, uiDest;
  float4 fDest;
  
  float4 stereo = StereoParams.Load(0);
  float4 prev = StereoParams.Load(int3(2,0,0));
  
  r0.xy = v0.xy * float2(2,2) + mInvProj.zw;
  r0.xy = float2(-1,-1) + r0.xy;
  r0.xy = mInvProj.xy * r0.xy;
  r0.zw = mBlurViewportScale.xy * v0.xy;
  r0.z = depthMap.SampleLevel(depthMap_sampler_s, r0.zw, 0).x;
  r0.z = -mDepthCoefficientsMtl.x + r0.z;
  r1.z = mDepthCoefficientsMtl.y / r0.z;
  r1.xy = r1.zz * r0.xy;
  r1.w = 1;
  
  r1.x-=stereo.x*(r1.z-stereo.y)/mProj._m00;
  
  r0.x = dot(r1.xyzw, mDeltaMatrix._m00_m10_m20_m30);
  r0.y = dot(r1.xyzw, mDeltaMatrix._m01_m11_m21_m31);
  r0.z = dot(r1.xyzw, mDeltaMatrix._m03_m13_m23_m33);
  o0.zw = r1.zw;
  
  r0.x+=prev.x*(r0.z-prev.y);
  
  r0.xy = r0.xy / r0.zz;
  r0.zw = mViewportConstants.zw + v1.xy;
  r0.xy = r0.zw * mViewportConstants.xy + -r0.xy;
  o0.xy = r0.xy * float2(0.5,-0.5) + mTemporalJitterCorrection.xy;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546
//
//   using 3Dmigoto v0.6.181 on Wed Apr  3 22:21:31 2024
//
//
// Buffer Definitions:
//
// cbuffer M_Common_PSConstants_Camera
// {
//
//   float4x4 mViewProj;                // Offset:    0 Size:    64 [unused]
//   float4 mDepthConvertToOrthoCoeffsNearFar;// Offset:   64 Size:    16 [unused]
//   float4 mDepthToTextureCoefficients;// Offset:   80 Size:    16 [unused]
//   float4 mDepthCoefficientsMtl;      // Offset:   96 Size:    16
//   float4 mShadowMapBiasScaleOffset;  // Offset:  112 Size:    16 [unused]
//   float4x4 mView;                    // Offset:  128 Size:    64 [unused]
//   float4x4 mProj;                    // Offset:  192 Size:    64 [unused]
//   float4x4 mViewInv;                 // Offset:  256 Size:    64 [unused]
//   float4 mInvProj;                   // Offset:  320 Size:    16
//   float4 mEyePos;                    // Offset:  336 Size:    16 [unused]
//   float3 mEyeDir;                    // Offset:  352 Size:    12 [unused]
//   uint3 mDebugMode;                  // Offset:  368 Size:    12 [unused]
//
// }
//
// cbuffer BlurAgent_PSConstants
// {
//
//   float4 mDepthCoefficients;         // Offset:    0 Size:    16 [unused]
//   float4 mInvWidthHeight;            // Offset:   16 Size:    16 [unused]
//   float4 mNearFocusFarRadius;        // Offset:   32 Size:    16 [unused]
//   float4 mAutoFocusUVs1;             // Offset:   48 Size:    16 [unused]
//   float4 mAutoFocusUVs2;             // Offset:   64 Size:    16 [unused]
//   float4 mAutoFocusUVs3;             // Offset:   80 Size:    16 [unused]
//   float4 mViewportConstants;         // Offset:   96 Size:    16
//   float4 mInvProjectionScalesOffset; // Offset:  112 Size:    16 [unused]
//   float4x4 mDeltaMatrix;             // Offset:  128 Size:    64
//   float4 mMotionBlurControls;        // Offset:  192 Size:    16 [unused]
//   float2 mBlurViewportScale;         // Offset:  208 Size:     8
//   float2 mUIMaskScale;               // Offset:  216 Size:     8 [unused]
//   float2 mTemporalJitterCorrection;  // Offset:  224 Size:     8
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// depthMap_sampler                  sampler      NA          NA    2        1
// depthMap                          texture  float4          2d    2        1
// M_Common_PSConstants_Camera       cbuffer      NA          NA    0        1
// BlurAgent_PSConstants             cbuffer      NA          NA    9        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// TEXCOORD                 0   xy          0     NONE   float   xy
// SV_POSITION              0   xyzw        1      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[21], immediateIndexed
dcl_constantbuffer CB9[15], immediateIndexed
dcl_sampler s2, mode_default
dcl_resource_texture2d (float,float,float,float) t2
dcl_input_ps linear v0.xy
dcl_input_ps_siv linear noperspective v1.xy, position
dcl_output o0.xyzw
dcl_temps 2
mad r0.xy, v0.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), cb0[20].zwzz
add r0.xy, r0.xyxx, l(-1.000000, -1.000000, 0.000000, 0.000000)
mul r0.xy, r0.xyxx, cb0[20].xyxx
mul r0.zw, v0.xxxy, cb9[13].xxxy
sample_l_indexable(texture2d)(float,float,float,float) r0.z, r0.zwzz, t2.yzxw, s2, l(0.000000)
add r0.z, r0.z, -cb0[6].x
div r1.z, cb0[6].y, r0.z
mul r1.xy, r0.xyxx, r1.zzzz
mov r1.w, l(1.000000)
dp4 r0.x, r1.xyzw, cb9[8].xyzw
dp4 r0.y, r1.xyzw, cb9[9].xyzw
dp4 r0.z, r1.xyzw, cb9[11].xyzw
mov o0.zw, r1.zzzw
div r0.xy, r0.xyxx, r0.zzzz
add r0.zw, v1.xxxy, cb9[6].zzzw
mad r0.xy, r0.zwzz, cb9[6].xyxx, -r0.xyxx
mad o0.xy, r0.xyxx, l(0.500000, -0.500000, 0.000000, 0.000000), cb9[14].xyxx
ret
// Approximately 18 instruction slots used

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