experiments with fresnel and shadergraph
[WindSway-HDRP.git] / Library / PackageCache / com.unity.postprocessing@2.1.6 / PostProcessing / Shaders / Debug / Histogram.shader
blobabdd9a0520080534a48a679423172d5244a47ce7
1 Shader "Hidden/PostProcessing/Debug/Histogram"
3     HLSLINCLUDE
5         #pragma exclude_renderers gles gles3 d3d11_9x
6         #pragma target 4.5
7         #include "../StdLib.hlsl"
9         #if SHADER_API_GLES3
10             #define HISTOGRAM_BINS 128
11         #else
12             #define HISTOGRAM_BINS 256
13         #endif
15         struct VaryingsHistogram
16         {
17             float4 vertex : SV_POSITION;
18             float2 texcoord : TEXCOORD0;
19             float maxValue : TEXCOORD1;
20         };
22         StructuredBuffer<uint> _HistogramBuffer;
23         float2 _Params; // x: width, y: height
25         float FindMaxHistogramValue()
26         {
27             uint maxValue = 0u;
29             UNITY_UNROLL
30             for (uint i = 0; i < HISTOGRAM_BINS; i++)
31             {
32                 uint h = _HistogramBuffer[i];
33                 maxValue = max(maxValue, h);
34             }
36             return float(maxValue);
37         }
39         VaryingsHistogram Vert(AttributesDefault v)
40         {
41             VaryingsHistogram o;
42             o.vertex = float4(v.vertex.xy, 0.0, 1.0);
43             o.texcoord = TransformTriangleVertexToUV(v.vertex.xy);
45         #if UNITY_UV_STARTS_AT_TOP
46             o.texcoord = o.texcoord * float2(1.0, -1.0) + float2(0.0, 1.0);
47         #endif
49         #if SHADER_API_GLES3 // No texture loopup in VS on GLES3/Android
50             o.maxValue = 0;
51         #else
52             o.maxValue = _Params.y / FindMaxHistogramValue();
53         #endif
54         
55             return o;
56         }
58         float4 Frag(VaryingsHistogram i) : SV_Target
59         {
60         #if SHADER_API_GLES3
61             float maxValue = _Params.y / FindMaxHistogramValue();
62         #else
63             float maxValue = i.maxValue;
64         #endif
66             const float kBinsMinusOne = HISTOGRAM_BINS - 1.0;
67             float remapI = i.texcoord.x * kBinsMinusOne;
68             uint index = floor(remapI);
69             float delta = frac(remapI);
70             float v1 = float(_HistogramBuffer[index]) * maxValue;
71             float v2 = float(_HistogramBuffer[min(index + 1, kBinsMinusOne)]) * maxValue;
72             float h = v1 * (1.0 - delta) + v2 * delta;
73             uint y = (uint)round(i.texcoord.y * _Params.y);
75             float3 color = (0.0).xxx;
76             float fill = step(y, h);
77             color = lerp(color, (1.0).xxx, fill);
78             return float4(color, 1.0);
79         }
81     ENDHLSL
83     SubShader
84     {
85         Cull Off ZWrite Off ZTest Always
87         Pass
88         {
89             HLSLPROGRAM
91                 #pragma vertex Vert
92                 #pragma fragment Frag
94             ENDHLSL
95         }
96     }