xref: /aosp_15_r20/external/skia/resources/sksl/realistic/GaussianBlur.sksl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1layout(binding=0) sampler2D uTextureSampler_0_Stage1;
2layout (binding=0) uniform uniformBuffer
3{
4	layout(offset=0) float4 sk_RTAdjust;
5	layout(offset=16) half2 uIncrement_Stage1_c0;
6	layout(offset=32) half4 uKernel_Stage1_c0[7];
7	layout(offset=144) float3x3 umatrix_Stage1_c0_c0;
8	layout(offset=192) half4 uborder_Stage1_c0_c0_c0;
9	layout(offset=208) float4 usubset_Stage1_c0_c0_c0;
10	layout(offset=224) float4 unorm_Stage1_c0_c0_c0;
11};
12layout(location = 0) in float2 vLocalCoord_Stage0;
13half4 TextureEffect_Stage1_c0_c0_c0(half4 _input, float2 _coords)
14{
15	half4 _output;
16	float2 inCoord = _coords;
17	inCoord *= unorm_Stage1_c0_c0_c0.xy;
18	float2 subsetCoord;
19	subsetCoord.x = inCoord.x;
20	subsetCoord.y = inCoord.y;
21	float2 clampedCoord;
22	clampedCoord = subsetCoord;
23	half4 textureColor = sample(uTextureSampler_0_Stage1, (clampedCoord) * unorm_Stage1_c0_c0_c0.zw);
24	float snappedX = floor(inCoord.x + 0.001) + 0.5;
25	if (snappedX < usubset_Stage1_c0_c0_c0.x || snappedX > usubset_Stage1_c0_c0_c0.z)
26	{
27		textureColor = uborder_Stage1_c0_c0_c0;
28	}
29	return textureColor;
30}
31half4 MatrixEffect_Stage1_c0_c0(half4 _input, float2 _coords)
32{
33	half4 _output;
34	return TextureEffect_Stage1_c0_c0_c0(_input, ((umatrix_Stage1_c0_c0) * _coords.xy1).xy);
35}
36inline half4 GaussianConvolution_Stage1_c0(half4 _input)
37{
38	half4 _output;
39	_output = half4(0, 0, 0, 0);
40	float2 coord = vLocalCoord_Stage0 - 12.0 * uIncrement_Stage1_c0;
41	float2 coordSampled = half2(0, 0);
42	coordSampled = coord;
43	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[0].x;
44	coord += uIncrement_Stage1_c0;
45	coordSampled = coord;
46	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[0].y;
47	coord += uIncrement_Stage1_c0;
48	coordSampled = coord;
49	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[0].z;
50	coord += uIncrement_Stage1_c0;
51	coordSampled = coord;
52	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[0].w;
53	coord += uIncrement_Stage1_c0;
54	coordSampled = coord;
55	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[1].x;
56	coord += uIncrement_Stage1_c0;
57	coordSampled = coord;
58	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[1].y;
59	coord += uIncrement_Stage1_c0;
60	coordSampled = coord;
61	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[1].z;
62	coord += uIncrement_Stage1_c0;
63	coordSampled = coord;
64	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[1].w;
65	coord += uIncrement_Stage1_c0;
66	coordSampled = coord;
67	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[2].x;
68	coord += uIncrement_Stage1_c0;
69	coordSampled = coord;
70	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[2].y;
71	coord += uIncrement_Stage1_c0;
72	coordSampled = coord;
73	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[2].z;
74	coord += uIncrement_Stage1_c0;
75	coordSampled = coord;
76	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[2].w;
77	coord += uIncrement_Stage1_c0;
78	coordSampled = coord;
79	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[3].x;
80	coord += uIncrement_Stage1_c0;
81	coordSampled = coord;
82	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[3].y;
83	coord += uIncrement_Stage1_c0;
84	coordSampled = coord;
85	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[3].z;
86	coord += uIncrement_Stage1_c0;
87	coordSampled = coord;
88	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[3].w;
89	coord += uIncrement_Stage1_c0;
90	coordSampled = coord;
91	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[4].x;
92	coord += uIncrement_Stage1_c0;
93	coordSampled = coord;
94	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[4].y;
95	coord += uIncrement_Stage1_c0;
96	coordSampled = coord;
97	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[4].z;
98	coord += uIncrement_Stage1_c0;
99	coordSampled = coord;
100	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[4].w;
101	coord += uIncrement_Stage1_c0;
102	coordSampled = coord;
103	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[5].x;
104	coord += uIncrement_Stage1_c0;
105	coordSampled = coord;
106	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[5].y;
107	coord += uIncrement_Stage1_c0;
108	coordSampled = coord;
109	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[5].z;
110	coord += uIncrement_Stage1_c0;
111	coordSampled = coord;
112	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[5].w;
113	coord += uIncrement_Stage1_c0;
114	coordSampled = coord;
115	_output += MatrixEffect_Stage1_c0_c0(_input, coordSampled) * uKernel_Stage1_c0[6].x;
116	coord += uIncrement_Stage1_c0;
117	_output *= _input;
118	return _output;
119}
120void main()
121{
122	half4 outputColor_Stage0;
123	half4 outputCoverage_Stage0;
124	{
125		// Stage 0, QuadPerEdgeAAGeometryProcessor
126		outputColor_Stage0 = half4(1);
127		outputCoverage_Stage0 = half4(1);
128	}
129	half4 output_Stage1;
130	output_Stage1 = GaussianConvolution_Stage1_c0(outputColor_Stage0);
131	{
132		// Xfer Processor: Porter Duff
133		sk_FragColor = output_Stage1 * outputCoverage_Stage0;
134	}
135}
136