Shader "Hidden/Kronnect/SSR" {
Properties {
    _MainTex("", any) = "" {}
    _BumpMap("Normal Map", 2D) = "bump" {}
    _SmoothnessMap("Smoothness Map", 2D) = "white" {}
    _Color("", Color) = (1,1,1)
    _NoiseTex("", any) = "" {}
    _SSRSettings("", Vector) = (1,1,1,1)
    _SSRSettings2("", Vector) = (1,1,1,1)
}

HLSLINCLUDE
    #pragma target 3.0
ENDHLSL


Subshader {	

    Tags { "RenderType" = "Transparent" "DisableBatching"="True" "ForceNoShadowCasting"="True" }

    HLSLINCLUDE
    #pragma target 3.0
    #pragma prefer_hlslcc gles
    #pragma exclude_renderers d3d11_9x
    #include "UnityCG.cginc"
    ENDHLSL

  Pass { // 0: Copy exact
      ZWrite Off ZTest Always Cull Off
      HLSLPROGRAM
      #pragma vertex VertSSR
      #pragma fragment FragCopyExact
      #include "SSR_Blends.hlsl"
      ENDHLSL
  }

  Pass { // 1: Surface reflection
      HLSLPROGRAM
      #pragma vertex VertSSRSurf
      #pragma fragment FragSSRSurf
      #pragma multi_compile_local _ SSR_NORMALMAP
      #pragma multi_compile_local _ SSR_SMOOTHNESSMAP
      #pragma multi_compile_local _ SSR_JITTER
      #pragma multi_compile_local _ SSR_THICKNESS_FINE
      
      #include "SSR_Common.hlsl"
      #include "SSR_Surface_Pass.hlsl"
      ENDHLSL
  }

  Pass { // 2 Resolve
      ZWrite Off ZTest Always Cull Off
      HLSLPROGRAM
      #pragma vertex VertSSR
      #pragma fragment FragResolve
      #include "SSR_Solve.hlsl"
      ENDHLSL
  }    

  Pass { // 3 Blur horizontally
      ZWrite Off ZTest Always Cull Off
      HLSLPROGRAM
      #pragma vertex VertBlur
      #pragma fragment FragBlur
      #pragma multi_compile_local _ SSR_DENOISE
      #define SSR_BLUR_HORIZ
      #include "SSR_Blur.hlsl"
      ENDHLSL
  }    
      
  Pass { // 4 Blur vertically
      ZWrite Off ZTest Always Cull Off
	  HLSLPROGRAM
      #pragma vertex VertBlur
      #pragma multi_compile_local _ SSR_DENOISE
      #pragma fragment FragBlur
      #include "SSR_Blur.hlsl"
      ENDHLSL
  }    

  Pass { // 5 Debug
      ZWrite Off ZTest Always Cull Off
      Blend One Zero
	  HLSLPROGRAM
      #pragma vertex VertSSR
      #pragma fragment FragCopyExact
      #include "SSR_Blends.hlsl"
      ENDHLSL
  }    

  Pass { // 6 Combine
      ZWrite Off ZTest Always Cull Off
      Blend One One // precomputed alpha in Resolve pass
	  HLSLPROGRAM
      #pragma vertex VertSSR
      #pragma fragment FragCombine
      #include "SSR_Blends.hlsl"
      ENDHLSL
  }

  Pass { // 7 Combine with compare
      ZWrite Off ZTest Always Cull Off
      Blend One One // precomputed alpha in Resolve pass
	  HLSLPROGRAM
      #pragma vertex VertSSR
      #pragma fragment FragCombineWithCompare
      #include "SSR_Blends.hlsl"
      ENDHLSL
  }

  Pass { // 8 Deferred pass
      ZWrite Off ZTest Always Cull Off
	  HLSLPROGRAM
      #pragma vertex VertSSR
      #pragma fragment FragSSR
      #pragma multi_compile_local _ SSR_JITTER
      #pragma multi_compile_local _ SSR_THICKNESS_FINE
      #include "SSR_Common.hlsl"
      #include "SSR_GBuf_Pass.hlsl"
      ENDHLSL
  }

  Pass { // 9: Copy with bilinear filter
      ZWrite Off ZTest Always Cull Off
      HLSLPROGRAM
      #pragma vertex VertSSR
      #pragma fragment FragCopy
      #include "SSR_Blends.hlsl"
      ENDHLSL
  }

}
FallBack Off
}
