diff options
Diffstat (limited to '')
-rw-r--r-- | dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/short-circuiting-in-loop-condition.html | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/short-circuiting-in-loop-condition.html b/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/short-circuiting-in-loop-condition.html new file mode 100644 index 0000000000..802d67aa4a --- /dev/null +++ b/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/short-circuiting-in-loop-condition.html @@ -0,0 +1,180 @@ +<!-- +Copyright (c) 2019 The Khronos Group Inc. +Use of this source code is governed by an MIT-style license that can be +found in the LICENSE.txt file. +--> + +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Short circuit in loop condition test</title> +<link rel="stylesheet" href="../../resources/js-test-style.css"/> +<script src="../../js/js-test-pre.js"></script> +<script src="../../js/webgl-test-utils.js"></script> +<script src="../../js/glsl-conformance-test.js"></script> +</head> +<body> +<div id="description"></div> +<div id="console"></div> +<script id="fshaderWhile" type="x-shader/x-fragment">#version 300 es +precision mediump float; +uniform bool u; +out vec4 result; +int sideEffectCounter; + +bool foo() { + ++sideEffectCounter; + return true; +} + +void main() { + sideEffectCounter = 0; + int iterations = 0; + + while(u && foo()) { + ++iterations; + if (iterations >= 10) { + break; + } + } + + bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0); + result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0); +} +</script> +<script id="fshaderForCondition" type="x-shader/x-fragment">#version 300 es +precision mediump float; +uniform bool u; +out vec4 result; +int sideEffectCounter; + +bool foo() { + ++sideEffectCounter; + return true; +} + +void main() { + sideEffectCounter = 0; + for(int iterations = 0; u && foo();) { + ++iterations; + if (iterations >= 10) { + break; + } + } + + bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0); + result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0); +} +</script> +<script id="fshaderFor" type="x-shader/x-fragment">#version 300 es +precision mediump float; +uniform bool u; +out vec4 result; +int sideEffectCounter; + +bool foo() { + ++sideEffectCounter; + return true; +} + +void main() { + sideEffectCounter = 0; + for(int iterations = 0; true; u && foo()) { + ++iterations; + if (iterations > 10) { + break; + } + } + + bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0); + result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0); +} +</script> +<script id="fshaderDoWhile" type="x-shader/x-fragment">#version 300 es +precision mediump float; +uniform bool u; +out vec4 result; +int sideEffectCounter; + +bool foo() { + ++sideEffectCounter; + return true; +} + +void main() { + sideEffectCounter = 0; + int iterations = 0; + + do { + ++iterations; + if (iterations > 10) { + break; + } + } while (u && foo()); + + bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0); + result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0); +} +</script> +<script id="fshaderSequence" type="x-shader/x-fragment">#version 300 es +precision mediump float; +uniform bool u; +out vec4 result; +int sideEffectCounter; + +bool foo() { + ++sideEffectCounter; + return true; +} + +void main() { + sideEffectCounter = 0; + int iterations = 0; + + while(u, u && foo()) { + ++iterations; + if (iterations >= 10) { + break; + } + } + + bool success = (u && sideEffectCounter == 10) || (!u && sideEffectCounter == 0); + result = success ? vec4(0, 1.0, 0, 1.0) : vec4(0, 1.0, 0, 0); +} +</script> +<script type="text/javascript"> +"use strict"; +description("Test behavior of a short-circuiting operator in a loop using a function call with side effects"); + +var testShaders = [ + {fShaderId: 'fshaderWhile', description: 'in while loop condition'}, + {fShaderId: 'fshaderForCondition', description: 'in for loop condition'}, + {fShaderId: 'fshaderFor', description: 'in for loop expression'}, + {fShaderId: 'fshaderDoWhile', description: 'in do-while loop condition'}, + {fShaderId: 'fshaderSequence', description: 'inside a sequence in while loop condition'} +]; + +var testList = []; + +for (var i = 0; i < testShaders.length; ++i) { + testList.push({ + fShaderId: testShaders[i].fShaderId, + fShaderSuccess: true, + linkSuccess: true, + passMsg: 'Short-circuiting operator with a true condition ' + testShaders[i].description, + uniforms: [{name: "u", functionName: "uniform1i", value: 1}] + }); + testList.push({ + fShaderId: testShaders[i].fShaderId, + fShaderSuccess: true, + linkSuccess: true, + passMsg: 'Short-circuiting operator with a false condition ' + testShaders[i].description, + uniforms: [{name: "u", functionName: "uniform1i", value: 0}] + }); +} + +GLSLConformanceTester.runRenderTests(testList, 2); +</script> +</body> +</html> |