Bug 1918529 - fix some subpixel misalignment issues with gfx.webrender.svg-filter...
[gecko.git] / dom / canvas / test / webgl-conf / checkout / conformance / glsl / misc / shared.html
blob77786bb3850690fe081a3b7f16aaa04068b42c3a
1 <!--
2 Copyright (c) 2019 The Khronos Group Inc.
3 Use of this source code is governed by an MIT-style license that can be
4 found in the LICENSE.txt file.
5 -->
7 <!DOCTYPE html>
8 <html>
9 <head>
10 <meta charset="utf-8">
11 <title>WebGL GLSL Conformance Tests</title>
12 <link rel="stylesheet" href="../../../resources/js-test-style.css"/>
13 <link rel="stylesheet" href="../../../resources/glsl-feature-tests.css"/>
14 <script src="../../../js/js-test-pre.js"></script>
15 <script src="../../../js/webgl-test-utils.js"></script>
16 <script src="../../../js/glsl-conformance-test.js"></script>
17 </head>
18 <body>
19 <div id="description"></div>
20 <div id="console"></div>
21 <script id="sharedVertexShader" type="text/something-not-javascript">
22 // shared vertex shader should succeed.
23 uniform mat4 viewProjection;
24 uniform vec3 worldPosition;
25 uniform vec3 nextPosition;
26 uniform float fishLength;
27 uniform float fishWaveLength;
28 uniform float fishBendAmount;
29 attribute vec4 position;
30 attribute vec2 texCoord;
31 varying vec4 v_position;
32 varying vec2 v_texCoord;
33 varying vec3 v_surfaceToLight;
34 void main() {
35 vec3 vz = normalize(worldPosition - nextPosition);
36 vec3 vx = normalize(cross(vec3(0,1,0), vz));
37 vec3 vy = cross(vz, vx);
38 mat4 orientMat = mat4(
39 vec4(vx, 0),
40 vec4(vy, 0),
41 vec4(vz, 0),
42 vec4(worldPosition, 1));
43 mat4 world = orientMat;
44 mat4 worldViewProjection = viewProjection * world;
45 mat4 worldInverseTranspose = world;
47 v_texCoord = texCoord;
48 // NOTE:If you change this you need to change the laser code to match!
49 float mult = position.z > 0.0 ?
50 (position.z / fishLength) :
51 (-position.z / fishLength * 2.0);
52 float s = sin(mult * fishWaveLength);
53 float a = sign(s);
54 float offset = pow(mult, 2.0) * s * fishBendAmount;
55 v_position = (
56 worldViewProjection *
57 (position +
58 vec4(offset, 0, 0, 0)));
59 v_surfaceToLight = (world * position).xyz;
60 gl_Position = v_position;
62 </script>
63 <script id="fragmentShaderA" type="text/something-not-javascript">
64 // shared fragment shader should succeed.
65 precision mediump float;
66 uniform vec4 lightColor;
67 varying vec4 v_position;
68 varying vec2 v_texCoord;
69 varying vec3 v_surfaceToLight;
71 uniform vec4 ambient;
72 uniform sampler2D diffuse;
73 uniform vec4 specular;
74 uniform float shininess;
75 uniform float specularFactor;
76 // #fogUniforms
78 vec4 lit(float l ,float h, float m) {
79 return vec4(1.0,
80 max(l, 0.0),
81 (l > 0.0) ? pow(max(0.0, h), m) : 0.0,
82 1.0);
84 void main() {
85 vec4 diffuseColor = texture2D(diffuse, v_texCoord);
86 vec4 normalSpec = vec4(0,0,0,0); // #noNormalMap
87 vec3 surfaceToLight = normalize(v_surfaceToLight);
88 vec3 halfVector = normalize(surfaceToLight);
89 vec4 litR = lit(1.0, 1.0, shininess);
90 vec4 outColor = vec4(
91 (lightColor * (diffuseColor * litR.y + diffuseColor * ambient +
92 specular * litR.z * specularFactor * normalSpec.a)).rgb,
93 diffuseColor.a);
94 // #fogCode
95 gl_FragColor = outColor;
97 </script>
98 <script id="fragmentShaderB" type="text/something-not-javascript">
99 // shared fragment shader should succeed.
100 precision mediump float;
101 varying vec4 v_position;
102 varying vec2 v_texCoord;
103 varying vec3 v_surfaceToLight;
105 // #fogUniforms
107 vec4 lit(float l ,float h, float m) {
108 return vec4(1.0,
109 max(l, 0.0),
110 (l > 0.0) ? pow(max(0.0, h), m) : 0.0,
111 1.0);
113 void main() {
114 vec4 normalSpec = vec4(0,0,0,0); // #noNormalMap
115 vec4 reflection = vec4(0,0,0,0); // #noReflection
116 vec3 surfaceToLight = normalize(v_surfaceToLight);
117 vec4 skyColor = vec4(0.5,0.5,1,1); // #noReflection
119 vec3 halfVector = normalize(surfaceToLight);
120 vec4 litR = lit(1.0, 1.0, 10.0);
121 vec4 outColor = vec4(mix(
122 skyColor,
123 vec4(1,2,3,4) * (litR.y + litR.z * normalSpec.a),
124 1.0 - reflection.r).rgb,
125 1.0);
126 // #fogCode
127 gl_FragColor = outColor;
129 </script>
130 <script>
131 "use strict";
132 GLSLConformanceTester.runTests([
133 { vShaderSource: document.getElementById("sharedVertexShader").text,
134 vShaderSuccess: true,
135 fShaderSource: document.getElementById("fragmentShaderA").text,
136 fShaderSuccess: true,
137 linkSuccess: true,
138 passMsg: 'shared fragment shader should succeed',
140 { vShaderSource: document.getElementById("sharedVertexShader").text,
141 vShaderSuccess: true,
142 fShaderSource: document.getElementById("fragmentShaderB").text,
143 fShaderSuccess: true,
144 linkSuccess: true,
145 passMsg: 'shared fragment shader should succeed',
148 var successfullyParsed = true;
149 </script>
150 </body>
151 </html>