//Ambient occlusion CS. 2025-04-25 update.
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v0.6.198 on Sat Apr 26 10:25:22 2025
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// no Input
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// no Output
cs_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer CB0[19], dynamicIndexed
dcl_constantbuffer CB1[53], immediateIndexed
dcl_constantbuffer CB2[3], immediateIndexed
dcl_sampler s0, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texture2d (uint,uint,uint,uint) t2
dcl_uav_typed_texture2d (uint,uint,uint,uint) u0
dcl_input vThreadID.xy
dcl_temps 39
dcl_resource_texture2d (float,float,float,float) t125
dcl_thread_group 8, 8, 1

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

mov r0.xy, vThreadID.xyxx
mov r0.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r1.x, r0.xyww, t0.xyzw
ld_indexable(texture2d)(uint,uint,uint,uint) r0.x, r0.xyzw, t2.xyzw
mul r2.z, r1.x, r1.x
itof r0.yz, vThreadID.xxyx
mul r0.yz, r0.yyzy, cb0[18].zzwz
mad r0.yz, r0.yyzy, l(0.000000, 0.500000, 0.500000, 0.000000), l(0.000000, -0.500000, -0.500000, 0.000000)
mul r0.yz, r0.yyzy, l(0.000000, 2.000000, -2.000000, 0.000000)

mul r23.xyzw, r0.zzzz, cb1[33].xyzw
mad r23.xyzw, r0.yyyy, cb1[32].xyzw, r23.xyzw
mad r23.xyzw, r2.zzzz, cb1[34].xyzw, r23.xyzw
add r23.xyzw, r23.xyzw, cb1[35].xyzw

mov r20.yz, r0.yyzy
mad r26.x, r25.y, r23.w, l(-1.0)
mad r20.y, r25.x, r26.x, r20.y

mul r3.xyzw, r0.zzzz, cb1[33].xyzw
mad r3.xyzw, r20.yyyy, cb1[32].xyzw, r3.xyzw
mad r3.xyzw, r2.zzzz, cb1[34].xyzw, r3.xyzw
add r3.xyzw, r3.xyzw, cb1[35].xyzw
div r1.yzw, r3.xxyz, r3.wwww
imul null, r3.xy, vThreadID.xyxx, l(0x0000aaab, 0x0000aaab, 0, 0)
ushr r3.xy, r3.xyxx, l(17, 17, 0, 0)
imad r3.xy, r3.xyxx, l(-3, -3, 0, 0), vThreadID.xyxx
imad r0.w, r3.y, l(3), r3.x
ishl r2.w, r0.w, l(3)
itof r0.w, r0.w
add r0.w, r0.w, l(0.500000)
mul r3.xyzw, r1.zzzz, cb1[1].xyzw
mad r3.xyzw, r1.yyyy, cb1[0].xyzw, r3.xyzw
mad r3.xyzw, r1.wwww, cb1[2].xyzw, r3.xyzw
add r3.xyzw, r3.xyzw, cb1[3].xyzw

add r26.x, r3.w, -r25.y
mad r3.x, r25.x, r26.x, r3.x

div r3.xyz, r3.xyzx, r3.wwww
mad r2.xy, r0.yzyy, cb1[52].xyxx, cb1[52].wzww
mad r0.y, r0.w, l(0.111111112), l(0.500000)
mul r4.xy, cb1[52].xyxx, l(16.000000, 16.000000, 0.000000, 0.000000)
mov r4.z, l(16.000000)
mov r5.w, l(1.000000)
mov r0.zw, l(0,0,0,0)
mov r3.w, r0.x
loop
  breakc_z r3.w
  firstbit_lo r4.w, r3.w
  ishl r6.x, l(1), r4.w
  xor r3.w, r3.w, r6.x
  iadd r6.x, r2.w, r4.w
  and r6.y, r6.x, l(3)
  ishr r6.x, r6.x, l(2)
  ineg r6.z, r6.y
  ult r7.xyz, r6.yyyy, l(1, 2, 3, 0)
  and r8.y, r6.z, r7.y
  iadd r6.y, r6.y, l(-3)
  movc r8.z, r7.y, l(0), r6.y
  ieq r8.w, r7.z, l(0)
  mov r8.x, r7.x
  and r6.xyzw, r8.xyzw, cb0[r6.x + 0].xyzw
  or r6.xy, r6.ywyy, r6.xzxx
  or r6.x, r6.y, r6.x
  and r6.y, r6.x, l(1023)
  iadd r6.y, r6.y, l(-511)
  itof r7.x, r6.y
  ubfe r6.xy, l(10, 10, 0, 0), l(10, 20, 0, 0), r6.xxxx
  iadd r6.xy, r6.xyxx, l(-511, -511, 0, 0)
  itof r7.yz, r6.xxyx
  dp3 r6.x, r7.xyzx, r7.xyzx
  rsq r6.x, r6.x
  mad r6.xyz, r7.xyzx, r6.xxxx, r1.yzwy
  mul r7.xyzw, r6.yyyy, cb1[1].xyzw
  mad r7.xyzw, r6.xxxx, cb1[0].xyzw, r7.xyzw
  mad r6.xyzw, r6.zzzz, cb1[2].xyzw, r7.xyzw
  add r6.xyzw, r6.xyzw, cb1[3].xyzw
  
  add r26.x, r6.w, -r25.y
  mad r6.x, r25.x, r26.x, r6.x
  
  div r6.xyz, r6.xyzx, r6.wwww
  add r6.xyz, -r3.xyzx, r6.xyzx
  mul r7.xy, |r6.xyxx|, cb2[2].xyxx
  max r6.w, r7.y, r7.x
  div r6.w, l(1.000000, 1.000000, 1.000000, 1.000000), r6.w
  mul r6.xyz, r6.wwww, r6.xyzx
  mul r6.xyz, r4.xyzx, r6.xyzx
  mad r5.xyz, r6.xyzx, r0.yyyy, r2.xyzx
  div r5.z, l(1.000000, 1.000000, 1.000000, 1.000000), r5.z
  mul r6.z, r5.z, r6.z
  mul r6.x, r6.x, cb0[18].x
  sample_l_indexable(texture2d)(float,float,float,float) r6.w, r5.xyxx, t1.yzwx, s0, l(0.000000)
  mul r6.w, r6.w, r6.w
  mad r6.w, r6.w, r5.z, l(-1.000000)
  mad_sat r7.xy, r6.wwww, l(32.000000, -256.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
  add r6.w, r7.y, r7.x
  min r6.w, r6.w, l(1.000000)
  mad r7.xyz, r6.xyzx, cb0[18].yyyy, r5.xywx
  sample_l_indexable(texture2d)(float,float,float,float) r5.x, r7.xyxx, t1.xyzw, s0, l(0.000000)
  mul r5.x, r5.x, r5.x
  mad r5.x, r5.x, r5.z, -r7.z
  mad_sat r5.xy, r5.xxxx, l(32.000000, -256.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
  add r5.x, r5.y, r5.x
  add r5.x, r5.x, l(0.062500)
  min r5.x, r5.x, l(1.000000)
  mul r5.x, r5.x, r6.w
  mad r7.xyz, r6.xyzx, cb0[18].yyyy, r7.xyzx
  sample_l_indexable(texture2d)(float,float,float,float) r5.y, r7.xyxx, t1.yxzw, s0, l(0.000000)
  mul r5.y, r5.y, r5.y
  mad r5.y, r5.y, r5.z, -r7.z
  mad_sat r8.xy, r5.yyyy, l(32.000000, -256.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
  add r5.y, r8.y, r8.x
  add r5.y, r5.y, l(0.125000)
  min r5.y, r5.y, l(1.000000)
  mul r5.x, r5.y, r5.x
  mad r7.xyz, r6.xyzx, cb0[18].yyyy, r7.xyzx
  sample_l_indexable(texture2d)(float,float,float,float) r5.y, r7.xyxx, t1.yxzw, s0, l(0.000000)
  mul r5.y, r5.y, r5.y
  mad r5.y, r5.y, r5.z, -r7.z
  mad_sat r8.xy, r5.yyyy, l(32.000000, -256.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
  add r5.y, r8.y, r8.x
  add r5.y, r5.y, l(0.187500)
  min r5.y, r5.y, l(1.000000)
  mul r5.x, r5.y, r5.x
  mad r7.xyz, r6.xyzx, cb0[18].yyyy, r7.xyzx
  sample_l_indexable(texture2d)(float,float,float,float) r5.y, r7.xyxx, t1.yxzw, s0, l(0.000000)
  mul r5.y, r5.y, r5.y
  mad r5.y, r5.y, r5.z, -r7.z
  mad_sat r8.xy, r5.yyyy, l(32.000000, -256.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
  add r5.y, r8.y, r8.x
  add r5.y, r5.y, l(0.250000)
  min r5.y, r5.y, l(1.000000)
  mul r5.x, r5.y, r5.x
  mad r7.xyz, r6.xyzx, cb0[18].yyyy, r7.xyzx
  sample_l_indexable(texture2d)(float,float,float,float) r5.y, r7.xyxx, t1.yxzw, s0, l(0.000000)
  mul r5.y, r5.y, r5.y
  mad r5.y, r5.y, r5.z, -r7.z
  mad_sat r8.xy, r5.yyyy, l(32.000000, -256.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
  add r5.y, r8.y, r8.x
  add r5.y, r5.y, l(0.312500)
  min r5.y, r5.y, l(1.000000)
  mul r5.x, r5.y, r5.x
  mad r7.xyz, r6.xyzx, cb0[18].yyyy, r7.xyzx
  sample_l_indexable(texture2d)(float,float,float,float) r5.y, r7.xyxx, t1.yxzw, s0, l(0.000000)
  mul r5.y, r5.y, r5.y
  mad r5.y, r5.y, r5.z, -r7.z
  mad_sat r8.xy, r5.yyyy, l(32.000000, -256.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
  add r5.y, r8.y, r8.x
  add r5.y, r5.y, l(0.375000)
  min r5.y, r5.y, l(1.000000)
  mul r5.x, r5.y, r5.x
  mad r6.xyz, r6.xyzx, cb0[18].yyyy, r7.xyzx
  sample_l_indexable(texture2d)(float,float,float,float) r5.y, r6.xyxx, t1.yxzw, s0, l(0.000000)
  mul r5.y, r5.y, r5.y
  mad r5.y, r5.y, r5.z, -r6.z
  mad_sat r5.yz, r5.yyyy, l(0.000000, 32.000000, -256.000000, 0.000000), l(0.000000, -1.000000, 1.000000, 0.000000)
  add r5.y, r5.z, r5.y
  add r5.y, r5.y, l(0.437500)
  min r5.y, r5.y, l(1.000000)
  mul r5.x, r5.y, r5.x
  mad r5.x, r5.x, l(63.000000), l(0.500000)
  ftou r5.x, r5.x
  imul null, r5.y, r4.w, l(6)
  uge r5.z, r4.w, l(4)
  imad r4.w, r4.w, l(6), l(-24)
  ishl r4.w, r5.x, r4.w
  and r4.w, r4.w, r5.z
  or r0.w, r0.w, r4.w
  ishl r4.w, r5.x, r5.y
  movc r4.w, r5.z, l(0), r4.w
  or r0.z, r0.z, r4.w
endloop
f32tof16 r0.x, |r1.x|
ishl r0.y, r0.x, l(24)
ushr r0.x, r0.x, l(8)
ishl r0.x, r0.x, l(24)
or r1.xyzw, r0.yxyy, r0.zwzz
store_uav_typed u0.xyzw, vThreadID.xyyy, r1.xyzw
ret
// Approximately 0 instruction slots used

///////////////////////////////// HLSL Code /////////////////////////////////
// // ---- Created with geo-11 v0.6.198 on Sat Apr 26 10:25:22 2025
// Texture2D<uint4> t2 : register(t2);
//
// Texture2D<float4> t1 : register(t1);
//
// Texture2D<float4> t0 : register(t0);
//
// SamplerState s0_s : register(s0);
//
// cbuffer cb2 : register(b2)
// {
//   float4 cb2[3];
// }
//
// cbuffer cb1 : register(b1)
// {
//   float4 cb1[53];
// }
//
// cbuffer cb0 : register(b0)
// {
//   float4 cb0[19];
// }
//
//
//
//
// // 3Dmigoto declarations
// #define cmp -
// Texture1D<float4> IniParams : register(t120);
// Texture2D<float4> StereoParams : register(t125);
//
//
// void main)
// {
// // Needs manual fix for instruction:
// // unknown dcl_: dcl_uav_typed_texture2d (uint,uint,uint,uint) u0
//   float4 r0,r1,r2,r3,r4,r5,r6,r7,r8;
//   uint4 bitmask, uiDest;
//   float4 fDest;
//
// // Needs manual fix for instruction:
// // unknown dcl_: dcl_thread_group 8, 8, 1
//   r0.xy = vThreadID.xy;
//   r0.zw = float2(0,0);
//   r1.x = t0.Load(r0.xyw).x;
//   r0.x = t2.Load(r0.xyz).x;
//   r2.z = r1.x * r1.x;
//   r0.yz = (int2)vThreadID.xy;
//   r0.yz = cb0[18].zw * r0.yz;
//   r0.yz = r0.yz * float2(0.5,0.5) + float2(-0.5,-0.5);
//   r0.yz = float2(2,-2) * r0.yz;
//   r3.xyzw = cb1[33].xyzw * r0.zzzz;
//   r3.xyzw = r0.yyyy * cb1[32].xyzw + r3.xyzw;
//   r3.xyzw = r2.zzzz * cb1[34].xyzw + r3.xyzw;
//   r3.xyzw = cb1[35].xyzw + r3.xyzw;
//   r1.yzw = r3.xyz / r3.www;
//   r3.xy = (int2)vThreadID.xy * int2(0xaaab,0xaaab);
//   r3.xy = (uint2)r3.xy >> int2(17,17);
//   r3.xy = mad((int2)r3.xy, int2(-3,-3), (int2)vThreadID.xy);
//   r0.w = mad((int)r3.y, 3, (int)r3.x);
//   r2.w = (uint)r0.w << 3;
//   r0.w = (int)r0.w;
//   r0.w = 0.5 + r0.w;
//   r3.xyzw = cb1[1].xyzw * r1.zzzz;
//   r3.xyzw = r1.yyyy * cb1[0].xyzw + r3.xyzw;
//   r3.xyzw = r1.wwww * cb1[2].xyzw + r3.xyzw;
//   r3.xyzw = cb1[3].xyzw + r3.xyzw;
//   r3.xyz = r3.xyz / r3.www;
//   r2.xy = r0.yz * cb1[52].xy + cb1[52].wz;
//   r0.y = r0.w * 0.111111112 + 0.5;
//   r4.xy = float2(16,16) * cb1[52].xy;
//   r4.z = 16;
//   r5.w = 1;
//   r0.zw = float2(0,0);
//   r3.w = r0.x;
//   while (true) {
//     if (r3.w == 0) break;
//     r4.w = firstbitlow((uint)r3.w);
//     r6.x = 1 << (int)r4.w;
//     r3.w = (int)r3.w ^ (int)r6.x;
//     r6.x = (int)r2.w + (int)r4.w;
//     r6.y = (int)r6.x & 3;
//     r6.x = (uint)r6.x >> 2;
//     r6.z = -(int)r6.y;
//     r7.xyz = cmp((uint3)r6.yyy < int3(1,2,3));
//     r8.y = r7.y ? r6.z : 0;
//     r6.y = (int)r6.y + -3;
//     r8.z = r7.y ? 0 : r6.y;
//     r8.w = cmp((int)r7.z == 0);
//     r8.x = r7.x;
//     r6.xyzw = r8.xyzw ? cb0[r6.x+0].xyzw : 0;
//     r6.xy = (int2)r6.yw | (int2)r6.xz;
//     r6.x = (int)r6.y | (int)r6.x;
//     r6.y = (int)r6.x & 1023;
//     r6.y = (int)r6.y + -511;
//     r7.x = (int)r6.y;
//     if (10 == 0) r6.x = 0; else if (10+10 < 32) {     r6.x = (uint)r6.x << (32-(10 + 10)); r6.x = (uint)r6.x >> (32-10);    } else r6.x = (uint)r6.x >> 10;
//     if (10 == 0) r6.y = 0; else if (10+20 < 32) {     r6.y = (uint)r6.x << (32-(10 + 20)); r6.y = (uint)r6.y >> (32-10);    } else r6.y = (uint)r6.x >> 20;
//     r6.xy = (int2)r6.xy + int2(-511,-511);
//     r7.yz = (int2)r6.xy;
//     r6.x = dot(r7.xyz, r7.xyz);
//     r6.x = rsqrt(r6.x);
//     r6.xyz = r7.xyz * r6.xxx + r1.yzw;
//     r7.xyzw = cb1[1].xyzw * r6.yyyy;
//     r7.xyzw = r6.xxxx * cb1[0].xyzw + r7.xyzw;
//     r6.xyzw = r6.zzzz * cb1[2].xyzw + r7.xyzw;
//     r6.xyzw = cb1[3].xyzw + r6.xyzw;
//     r6.xyz = r6.xyz / r6.www;
//     r6.xyz = r6.xyz + -r3.xyz;
//     r7.xy = cb2[2].xy * abs(r6.xy);
//     r6.w = max(r7.x, r7.y);
//     r6.w = 1 / r6.w;
//     r6.xyz = r6.xyz * r6.www;
//     r6.xyz = r6.xyz * r4.xyz;
//     r5.xyz = r6.xyz * r0.yyy + r2.xyz;
//     r5.z = 1 / r5.z;
//     r6.z = r6.z * r5.z;
//     r6.x = cb0[18].x * r6.x;
//     r6.w = t1.SampleLevel(s0_s, r5.xy, 0).x;
//     r6.w = r6.w * r6.w;
//     r6.w = r6.w * r5.z + -1;
//     r7.xy = saturate(r6.ww * float2(32,-256) + float2(-1,1));
//     r6.w = r7.x + r7.y;
//     r6.w = min(1, r6.w);
//     r7.xyz = r6.xyz * cb0[18].yyy + r5.xyw;
//     r5.x = t1.SampleLevel(s0_s, r7.xy, 0).x;
//     r5.x = r5.x * r5.x;
//     r5.x = r5.x * r5.z + -r7.z;
//     r5.xy = saturate(r5.xx * float2(32,-256) + float2(-1,1));
//     r5.x = r5.x + r5.y;
//     r5.x = 0.0625 + r5.x;
//     r5.x = min(1, r5.x);
//     r5.x = r6.w * r5.x;
//     r7.xyz = r6.xyz * cb0[18].yyy + r7.xyz;
//     r5.y = t1.SampleLevel(s0_s, r7.xy, 0).x;
//     r5.y = r5.y * r5.y;
//     r5.y = r5.y * r5.z + -r7.z;
//     r8.xy = saturate(r5.yy * float2(32,-256) + float2(-1,1));
//     r5.y = r8.x + r8.y;
//     r5.y = 0.125 + r5.y;
//     r5.y = min(1, r5.y);
//     r5.x = r5.x * r5.y;
//     r7.xyz = r6.xyz * cb0[18].yyy + r7.xyz;
//     r5.y = t1.SampleLevel(s0_s, r7.xy, 0).x;
//     r5.y = r5.y * r5.y;
//     r5.y = r5.y * r5.z + -r7.z;
//     r8.xy = saturate(r5.yy * float2(32,-256) + float2(-1,1));
//     r5.y = r8.x + r8.y;
//     r5.y = 0.1875 + r5.y;
//     r5.y = min(1, r5.y);
//     r5.x = r5.x * r5.y;
//     r7.xyz = r6.xyz * cb0[18].yyy + r7.xyz;
//     r5.y = t1.SampleLevel(s0_s, r7.xy, 0).x;
//     r5.y = r5.y * r5.y;
//     r5.y = r5.y * r5.z + -r7.z;
//     r8.xy = saturate(r5.yy * float2(32,-256) + float2(-1,1));
//     r5.y = r8.x + r8.y;
//     r5.y = 0.25 + r5.y;
//     r5.y = min(1, r5.y);
//     r5.x = r5.x * r5.y;
//     r7.xyz = r6.xyz * cb0[18].yyy + r7.xyz;
//     r5.y = t1.SampleLevel(s0_s, r7.xy, 0).x;
//     r5.y = r5.y * r5.y;
//     r5.y = r5.y * r5.z + -r7.z;
//     r8.xy = saturate(r5.yy * float2(32,-256) + float2(-1,1));
//     r5.y = r8.x + r8.y;
//     r5.y = 0.3125 + r5.y;
//     r5.y = min(1, r5.y);
//     r5.x = r5.x * r5.y;
//     r7.xyz = r6.xyz * cb0[18].yyy + r7.xyz;
//     r5.y = t1.SampleLevel(s0_s, r7.xy, 0).x;
//     r5.y = r5.y * r5.y;
//     r5.y = r5.y * r5.z + -r7.z;
//     r8.xy = saturate(r5.yy * float2(32,-256) + float2(-1,1));
//     r5.y = r8.x + r8.y;
//     r5.y = 0.375 + r5.y;
//     r5.y = min(1, r5.y);
//     r5.x = r5.x * r5.y;
//     r6.xyz = r6.xyz * cb0[18].yyy + r7.xyz;
//     r5.y = t1.SampleLevel(s0_s, r6.xy, 0).x;
//     r5.y = r5.y * r5.y;
//     r5.y = r5.y * r5.z + -r6.z;
//     r5.yz = saturate(r5.yy * float2(32,-256) + float2(-1,1));
//     r5.y = r5.y + r5.z;
//     r5.y = 0.4375 + r5.y;
//     r5.y = min(1, r5.y);
//     r5.x = r5.x * r5.y;
//     r5.x = r5.x * 63 + 0.5;
//     r5.x = (uint)r5.x;
//     r5.y = (int)r4.w * 6;
//     r5.z = cmp((uint)r4.w >= 4);
//     r4.w = mad((int)r4.w, 6, -24);
//     r4.w = (uint)r5.x << (int)r4.w;
//     r4.w = r5.z ? r4.w : 0;
//     r0.w = (int)r0.w | (int)r4.w;
//     r4.w = (uint)r5.x << (int)r5.y;
//     r4.w = r5.z ? 0 : r4.w;
//     r0.z = (int)r0.z | (int)r4.w;
//   }
//   r0.x = f32tof16(abs(r1.x));
//   r0.y = (uint)r0.x << 24;
//   r0.x = (uint)r0.x >> 8;
//   r0.x = (uint)r0.x << 24;
//   r1.xyzw = (int4)r0.yxyy | (int4)r0.zwzz;
// // No code for instruction (needs manual fix):
// store_uav_typed u0.xyzw, vThreadID.xyyy, r1.xyzw
//   return;
// }
//////////////////////////////// HLSL Errors ////////////////////////////////
// D:\SteamLibrary\steamapps\common\Days Gone\BendGame\Binaries\Win64\ShaderFixes\f1f51bbaeb4cab84-cs_replace.txt(34,10): error X3000: syntax error: unexpected token ')'
/////////////////////////////////////////////////////////////////////////////
