//
// Generated by Microsoft (R) HLSL Shader Compiler 10.0.10011.16384
//
//   using 3Dmigoto v1.3.16 on Sun Jan 16 18:30:39 2022
//
//
// Note: shader requires additional functionality:
//       64 UAV slots
//
//
// Buffer Definitions:
//
// cbuffer ConstBuf__passData
// {
//
//   struct SSAOBlurData
//   {
//
//       uint g_TilesHorz;              // Index:    0
//       uint firstGroupOffset;         // Index:    0.y
//       uint permutationOffset;        // Index:    0.z
//       uint EnableSSDO;               // Index:    0.w
//       uint EnableSSGI;               // Index:    1
//
//   } resourceTables__passData;        // Index:    0-1.x            Components:     5
                                        // Textures:  t0-t4
//
// }
//
// Resource bind info for resourceTables__passData.texLights
// {
//
//   uint $Element;                     // Index:    0.x              Components:     1
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// resourceTables__passData.texLights    texture  struct         r/o    1        1
// resourceTables__passData.InputTextureSSAO    texture   uint2          2d    3        1
// resourceTables__passData.InputTextureSSGI    texture  float3          2d    4        1
// resourceTables__passData.OutputTextureSSAO        UAV  float4          2d    8        1
// resourceTables__passData.OutputTextureSSGI        UAV  float3          2d    9        1
// ConstBuf__passData                cbuffer      NA          NA    0        1
//
//
//
// 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_immediateConstantBuffer { { 0.356642, 0, 0, 0},
                              { 0.239400, 0, 0, 0},
                              { 0.072410, 0, 0, 0},
                              { 0.009869, 0, 0, 0} }
dcl_constantbuffer cb0[2], immediateIndexed
dcl_resource_structured t1, 4
dcl_resource_texture2d (uint,uint,uint,uint) t3
dcl_resource_texture2d (float,float,float,float) t4
dcl_uav_typed_texture2d (float,float,float,float) u8
dcl_uav_typed_texture2d (float,float,float,float) u9
dcl_input vThreadIDInGroupFlattened
dcl_input vThreadGroupID.x
dcl_temps 50
dcl_tgsm_structured g0, 4, 144
dcl_tgsm_structured g1, 16, 144
dcl_thread_group 64, 1, 1
dcl_resource_texture2d (float,float,float,float) t125
ld_indexable(texture2d)(float,float,float,float) r40.xyzw, l(0, 0, 0, 0), t125.xyzw
iadd r0.x, vThreadGroupID.x, cb0[0].y
udiv r1.x, r2.x, r0.x, cb0[0].x
imul null, r0.x, r0.x, l(3)
ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r0.x, r0.x, l(0), t1.xxxx
and r0.x, r0.x, l(0x00100000)
and r3.x, vThreadIDInGroupFlattened.x, l(7)
ushr r3.y, vThreadIDInGroupFlattened.x, l(3)
mov r2.y, r1.x
ishl r0.yz, r2.xxyx, l(0, 3, 3, 0)
bfi r1.xy, l(29, 29, 0, 0), l(3, 3, 0, 0), r2.xyxx, r3.xyxx
iadd r0.yz, r0.yyzy, l(0, -2, -2, 0)
udiv r2.y, null, vThreadIDInGroupFlattened.x, l(12)
imad r2.x, r2.y, l(-12), vThreadIDInGroupFlattened.x
iadd r2.xy, r0.yzyy, r2.xyxx
mov r2.zw, l(0,0,0,0)

//utof r32.xyzw, r2.xyzw
//mad r32.x, r40.x, l(1280.0), r32.x
//ftoi r32.xyzw, r32.xyzw

ld_indexable(texture2d)(uint,uint,uint,uint) r3.zw, r2.xyww, t3.zwxy
ushr r0.w, r3.z, l(24)
utof r0.w, r0.w
mul r4.w, r0.w, l(0.00392156886)
f16tof32 r0.w, r3.z
ubfe r5.xy, l(8, 8, 0, 0), l(16, 8, 0, 0), r3.wwww
utof r5.xy, r5.xyxx
and r3.z, r3.w, l(255)
utof r5.z, r3.z
mad r4.xyz, r5.xyzx, l(0.00787401572, 0.00787401572, 0.00787401572, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
store_structured g0.x, vThreadIDInGroupFlattened.x, l(0), r0.w
store_structured g1.xyzw, vThreadIDInGroupFlattened.x, l(0), r4.xyzw
iadd r0.w, vThreadIDInGroupFlattened.x, l(64)
udiv r4.y, null, r0.w, l(12)
imad r4.x, r4.y, l(-12), r0.w
iadd r4.xy, r0.yzyy, r4.xyxx
mov r4.zw, l(0,0,0,0)
ld_indexable(texture2d)(uint,uint,uint,uint) r3.zw, r4.xyww, t3.zwxy
ushr r5.x, r3.z, l(24)
utof r5.x, r5.x
mul r5.w, r5.x, l(0.00392156886)
f16tof32 r3.z, r3.z
ubfe r6.xy, l(8, 8, 0, 0), l(16, 8, 0, 0), r3.wwww
utof r6.xy, r6.xyxx
and r3.w, r3.w, l(255)
utof r6.z, r3.w
mad r5.xyz, r6.xyzx, l(0.00787401572, 0.00787401572, 0.00787401572, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
store_structured g0.x, r0.w, l(0), r3.z
store_structured g1.xyzw, r0.w, l(0), r5.xyzw
ult r3.z, vThreadIDInGroupFlattened.x, l(16)
if_nz r3.z
  iadd r3.w, vThreadIDInGroupFlattened.x, l(128)
  udiv r5.y, null, r3.w, l(12)
  imad r5.x, r5.y, l(-12), r3.w
  iadd r5.xy, r0.yzyy, r5.xyxx
  mov r5.zw, l(0,0,0,0)
  ld_indexable(texture2d)(uint,uint,uint,uint) r5.xy, r5.xyzw, t3.xyzw
  ushr r5.z, r5.x, l(24)
  utof r5.z, r5.z
  mul r6.w, r5.z, l(0.00392156886)
  f16tof32 r5.x, r5.x
  ubfe r5.zw, l(0, 0, 8, 8), l(0, 0, 16, 8), r5.yyyy
  and r5.y, r5.y, l(255)
  utof r7.xyz, r5.zwyz
  mad r6.xyz, r7.xyzx, l(0.00787401572, 0.00787401572, 0.00787401572, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
  store_structured g0.x, r3.w, l(0), r5.x
  store_structured g1.xyzw, r3.w, l(0), r6.xyzw
endif
sync_g_t
iadd r3.xy, r3.xyxx, l(2, 2, 0, 0)
imad r3.w, r3.y, l(12), r3.x
ld_structured r5.x, r3.w, l(0), g0.xxxx
div r5.y, l(200.000000), |r5.x|
if_z r0.x
  ld_structured r6.xyzw, r3.w, l(0), g1.xyzw
  mul r6.xyzw, r6.xyzw, l(0.127193511, 0.127193511, 0.127193511, 0.127193511)
  mov r7.yzw, r6.xxyz
  mov r8.x, l(0.127193511)
  mov r8.y, r6.w
  mov r9.y, l(-2)
  loop
    ilt r5.z, l(2), r9.y
    breakc_nz r5.z
    imax r5.z, -r9.y, r9.y
    mov r10.xyz, r7.yzwy
    mov r5.w, r8.x
    mov r10.w, r8.y
    mov r9.x, l(-2)
    loop
      ilt r7.x, l(2), r9.x
      breakc_nz r7.x
      or r7.x, r9.y, r9.x
      if_nz r7.x
        iadd r8.zw, r3.xxxy, r9.xxxy
        imad r7.x, r8.w, l(12), r8.z
        ld_structured r8.z, r7.x, l(0), g0.xxxx
        ld_structured r11.xyzw, r7.x, l(0), g1.xyzw
        imax r7.x, -r9.x, r9.x
        mul r7.x, icb[r5.z + 0].x, icb[r7.x + 0].x
        add r8.z, -r5.x, r8.z
        mad r8.z, |r5.x|, l(-0.060000), |r8.z|
        max r8.z, r8.z, l(0.000000)
        mad r8.z, -r5.y, r8.z, l(1.000000)
        max r8.z, r8.z, l(0.000000)
        mul r8.w, r7.x, r8.z
        mad r10.xyzw, r11.xyzw, r8.wwww, r10.xyzw
        mad r5.w, r7.x, r8.z, r5.w
      endif
      iadd r9.x, r9.x, l(1)
    endloop
    mov r7.yzw, r10.xxyz
    mov r8.x, r5.w
    mov r8.y, r10.w
    iadd r9.y, r9.y, l(1)
  endloop
  mov r1.zw, l(0,0,0,0)
  ld_indexable(texture2d)(uint,uint,uint,uint) r1.z, r1.xyzw, t3.yzxw
  ubfe r1.z, l(8), l(16), r1.z
  utof r1.z, r1.z
  mul r6.x, r1.z, l(0.00392156886)
  dp3 r1.z, r7.yzwy, r7.yzwy
  rsq r1.z, r1.z
  mul r7.xyz, r1.zzzz, r7.yzwy
  div r8.y, r8.y, r8.x
  mul r1.z, r8.y, l(0.500000)
  mad r7.xyz, r7.xyzx, r1.zzzz, l(0.500000, 0.500000, 0.500000, 0.000000)
  mov r8.zw, l(0,0,1.000000,1.000000)
  movc r6.yzw, cb0[0].wwww, r7.xxyz, r8.yyzw
else
  mov r6.xyzw, l(1.000000,1.000000,1.000000,1.000000)
endif
store_uav_typed u8.xyzw, r1.xyyy, r6.xyzw
sync_g_t
ld_indexable(texture2d)(float,float,float,float) r2.xyz, r2.xyzw, t4.xyzw
store_structured g1.xyz, vThreadIDInGroupFlattened.x, l(0), r2.xyzx
ld_indexable(texture2d)(float,float,float,float) r2.xyz, r4.xyzw, t4.xyzw
store_structured g1.xyz, r0.w, l(0), r2.xyzx
if_nz r3.z
  iadd r0.w, vThreadIDInGroupFlattened.x, l(128)
  udiv r2.y, null, r0.w, l(12)
  imad r2.x, r2.y, l(-12), r0.w
  iadd r2.xy, r0.yzyy, r2.xyxx
  mov r2.zw, l(0,0,0,0)
  ld_indexable(texture2d)(float,float,float,float) r2.xyz, r2.xyzw, t4.xyzw
  store_structured g1.xyz, r0.w, l(0), r2.xyzx
endif
sync_g_t
if_nz cb0[1].x
  if_z r0.x
    ld_structured r0.xyz, r3.w, l(0), g1.xyzx
    mov r2.xyz, r0.xyzx
    mov r0.w, l(1.000000)
    mov r4.y, l(-2)
    loop
      ilt r1.z, l(2), r4.y
      breakc_nz r1.z
      mov r6.xyz, r2.xyzx
      mov r1.z, r0.w
      mov r4.x, l(-2)
      loop
        ilt r1.w, l(2), r4.x
        breakc_nz r1.w
        or r1.w, r4.y, r4.x
        if_nz r1.w
          iadd r3.zw, r3.xxxy, r4.xxxy
          imad r1.w, r3.w, l(12), r3.z
          ld_structured r2.w, r1.w, l(0), g0.xxxx
          ld_structured r7.xyz, r1.w, l(0), g1.xyzx
          add r1.w, -r5.x, r2.w
          mad r1.w, |r5.x|, l(-0.060000), |r1.w|
          max r1.w, r1.w, l(0.000000)
          mad r1.w, -r5.y, r1.w, l(1.000000)
          max r1.w, r1.w, l(0.000000)
          mad r6.xyz, r7.xyzx, r1.wwww, r6.xyzx
          add r1.z, r1.w, r1.z
        endif
        iadd r4.x, r4.x, l(1)
      endloop
      mov r2.xyz, r6.xyzx
      mov r0.w, r1.z
      iadd r4.y, r4.y, l(1)
    endloop
    div r0.xyz, r2.xyzx, r0.wwww
  else
    mov r0.xyz, l(0,0,0,0)
  endif
  store_uav_typed u9.xyzw, r1.xyyy, r0.xyzx
endif
ret
// Approximately 184 instruction slots used

///////////////////////////////// HLSL Code /////////////////////////////////
// // ---- Created with 3Dmigoto v1.3.16 on Sun Jan 16 18:30:39 2022
// groupshared struct { float val[4]; } g1[144];
// groupshared struct { float val[1]; } g0[144];
//
// cbuffer ConstBuf__passData : register(b0)
// {
//
//   struct
//   {
//     uint g_TilesHorz;
//     uint firstGroupOffset;
//     uint permutationOffset;
//     uint EnableSSDO;
//     uint EnableSSGI;
//   } resourceTables__passData : packoffset(c0);
//
//
// StructuredBuffer<uint> resourceTables__passData.texLights : register(t1);
// Texture2D<uint2> resourceTables__passData.InputTextureSSAO : register(t3);
// Texture2D<float3> resourceTables__passData.InputTextureSSGI : register(t4);
// RWTexture2D<float4> resourceTables__passData.OutputTextureSSAO : register(u8);
// RWTexture2D<float3> resourceTables__passData.OutputTextureSSGI : register(u9);
//
//
// // 3Dmigoto declarations
// #define cmp -
// Texture1D<float4> IniParams : register(t120);
// Texture2D<float4> StereoParams : register(t125);
//
//
// void main)
// {
//   Textures: = t0-t4 + ;
//   const float4 icb[] = { { 0.356642, 0, 0, 0},
//                               { 0.239400, 0, 0, 0},
//                               { 0.072410, 0, 0, 0},
//                               { 0.009869, 0, 0, 0} };
// // Needs manual fix for instruction:
// // unknown dcl_: dcl_uav_typed_texture2d (float,float,float,float) u8
// // Needs manual fix for instruction:
// // unknown dcl_: dcl_uav_typed_texture2d (float,float,float,float) u9
//   float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11;
//   uint4 bitmask, uiDest;
//   float4 fDest;
//
// // Needs manual fix for instruction:
// // unknown dcl_: dcl_thread_group 64, 1, 1
//   uiDest.x = (uint16)resourceTables__passData.firstGroupOffset / ;
//   vThreadGroupID.x = (uint16)resourceTables__passData.firstGroupOffset % ;
//   r0.x = uiDest.x;
//   r2.x = (int)r0.x * (int11)resourceTables__passData.g_TilesHorz;
//   null.x = 3[r0.x].val[r0.x/4];
//   stride=4)(mixed = (int)r0.x & (int)r0.x;
//   r0.x = (int)r0.x & 0x00100000;
//   r3.x = (uint)vThreadIDInGroupFlattened.x >> 7;
//   r3.y = vThreadIDInGroupFlattened.x;
//   r2.y = (uint)r1.x << ;
//   bitmask.y = ((~(-1 << r2.x)) << 3) & 0xffffffff;  r0.y = (((uint) << 3) & bitmask.y) | ((uint) & ~bitmask.y);
//   bitmask.z = ((~(-1 << r2.y)) << 3) & 0xffffffff;  r0.z = (((uint) << 3) & bitmask.z) | ((uint) & ~bitmask.z);
//   r1.xy = int2(29,29) + int2(3,3);
//   uiDest.yz = int2(-2,-2) / (uint13)1.68155816e-044;
//   r0.yz = uiDest.yz;
//   r2.y = mad(null, (int)vThreadIDInGroupFlattened.x, 12);
//   r2.x = (int)r2.y + -12;
//   r2.xy = float2(0,0);
//   r2.zw = .Load(float4(0,0,0,0))(null);
//   r3.zw = (uint2)r2.ww >> (uint2)t3.xy;
//   r0.w = (uint)r3.z;
//   r0.w = 0.00392156886 * r0.w;
//   r4.w = f16tof32(r0.w);
//   if (r3.z == 0) r0.w = 0; else if (r3.z+ < 32) {   r0.w = (uint) << (32-(r3.z + )); r0.w = (uint)r0.w >> (32-r3.z);  } else r0.w = (uint) >> ;
//   r5.xy = uint2(8,8);
//   r5.xy = (int2)r5.xy & ;
//   r3.z = (uint)r3.w;
//   r5.z = r3.z * 0.00787401572 + ;
//   r4[r5.x].val[0.00787401572/4] = -1;
//   g0[vThreadIDInGroupFlattened.x].val[0/4] = r0.w;
//   g0[vThreadIDInGroupFlattened.x].val[0/4+1] = r0.w;
//   g0[vThreadIDInGroupFlattened.x].val[0/4+2] = r0.w;
//   g0[vThreadIDInGroupFlattened.x].val[0/4+3] = r0.w;
//   g1.xyzw = (int)vThreadIDInGroupFlattened.x + 0;
//   uiDest.w = 64 / (uint13)1.68155816e-044;
//   r0.w = uiDest.w;
//   r4.y = mad(null, (int)r0.w, 12);
//   r4.x = (int)r4.y + -12;
//   r4.xy = float2(0,0);
//   r4.zw = .Load(float4(0,0,0,0))(null);
//   r3.zw = (uint2)r4.ww >> (uint2)t3.xy;
//   r5.x = (uint)r3.z;
//   r5.x = 0.00392156886 * r5.x;
//   r5.w = f16tof32(r5.x);
//   if (r3.z == 0) r3.z = 0; else if (r3.z+ < 32) {   r3.z = (uint) << (32-(r3.z + )); r3.z = (uint)r3.z >> (32-r3.z);  } else r3.z = (uint) >> ;
//   r6.xy = uint2(8,8);
//   r6.xy = (int2)r6.xy & ;
//   r3.w = (uint)r3.w;
//   r6.z = r3.w * 0.00787401572 + ;
//   r5[r6.x].val[0.00787401572/4] = -1;
//   g0[r0.w].val[0/4] = r3.z;
//   g0[r0.w].val[0/4+1] = r3.z;
//   g0[r0.w].val[0/4+2] = r3.z;
//   g0[r0.w].val[0/4+3] = r3.z;
//   g1.xyzw = cmp((uint)r0.w < 0);
//   if (r3.z != 0) {
//     r3.z =  + ;
//     uiDest.w = 128 / (uint13)1.68155816e-044;
//     r3.w = uiDest.w;
//     r5.y = mad(null, (int)r3.w, 12);
//     r5.x = (int)r5.y + -12;
//     r5.xy = float2(0,0);
//     r5.zw = .Load(float4(0,0,0,0))(null);
//     r5.xy = (uint2)r5.xy >> (uint2)t3.xy;
//     r5.z = (uint)r5.x;
//     r5.z = 0.00392156886 * r5.z;
//     r6.w = f16tof32(r5.z);
//     if (r5.x == 0) r5.x = 0; else if (r5.x+ < 32) {     r5.x = (uint) << (32-(r5.x + )); r5.x = (uint)r5.x >> (32-r5.x);    } else r5.x = (uint) >> ;
//     r5.zw = int2(8,8) & int2(16,8);
//     r5.y = (uint)r5.y;
//     r7.xyz = r5.zwy * float3(0.00787401572,0.00787401572,0.00787401572) + ;
//     r6[r7.x].val[0.00787401572/4] = -1;
//     g0[r3.w].val[0/4] = r5.x;
//     g0[r3.w].val[0/4+1] = r5.x;
//     g0[r3.w].val[0/4+2] = r5.x;
//     g0[r3.w].val[0/4+3] = r5.x;
//   }
//   Unknown sync instruction;
//    =  + ;
//   r3.xy = mad((int2)r3.xy, int2(2,2), );
//   r3.x = r3[r3.y].val[12/4];
//   r5.x = r3.w / 0;
//   if (r5.y == 0) {
//     r0.x = [].val[/4];
//     r0.y = [].val[/4+1];
//     r0.z = [].val[/4+2];
//     r0.w = [].val[/4+3];
//     r6.xyzw = 0 * r3.w;
//     r6.xyzw = r6.xyzw;
//     r7.yzw = r6.xyz;
//     r8.x = 0.127193511;
//     r8.y = r6.w;
//     while (true) {
//        = cmp( < );
//       if (r5.z != 0) break;
//       r5.z = max(, );
//       r5.z = -r9.y;
//       r10.xyz = r7.yzw;
//       r5.w = r8.x;
//       r10.w = r8.y;
//       while (true) {
//          = cmp( < );
//         if (r7.x != 0) break;
//         r7.x =  | ;
//         if (r7.x != 0) {
//           r7.x =  + ;
//           r8.zw = mad((int2)r3.xy, (int2)r9.xy, );
//           r7.z = r8[r8.w].val[12/4];
//           r8.x = g0[r7.x].val[0/4];
//           r8.y = g0[r7.x].val[0/4+1];
//           r8.z = g0[r7.x].val[0/4+2];
//           r8.w = g0[r7.x].val[0/4+3];
//           r11.xyzw = max(0, (int)r7.x);
//           r7.x = r9.x * -r9.x;
// }
//////////////////////////////// HLSL Errors ////////////////////////////////
// error X3506: unrecognized compiler target '                                        // Textures:  t0-t4'
/////////////////////////////////////////////////////////////////////////////
