<!--
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>GLSL dynamic vector and matrix indexing 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="fshaderLValueVectorBeingIndexedHasSideEffects" type="x-shader/x-fragment">#version 300 es
precision mediump float;

out vec4 my_FragColor;

uniform int u_zero;

int sideEffectCounter = 0;

int funcWithSideEffects() {
    sideEffectCounter++;
    return 1;
}

void main() {
    vec4 V[2];
    V[0] = vec4(1.0, 2.0, 3.0, 4.0);
    V[1] = vec4(5.0, 6.0, 7.0, 8.0);
    // In case this is broken down to two expressions where one reads V[funcWithSideEffects()]
    // and another writes it, it needs to be made sure that funcWithSideEffects() only gets called once.
    V[funcWithSideEffects()][u_zero + 1]++;
    vec4 expectedV0 = vec4(1.0, 2.0, 3.0, 4.0);
    vec4 expectedV1 = vec4(5.0, 7.0, 7.0, 8.0);
    float f = 1.0 - distance(V[0], expectedV0) - distance(V[1], expectedV1);
    if (sideEffectCounter != 1) {
        f = 0.0;
    }
    my_FragColor = vec4(1.0 - f, f, 0.0, 1.0);
}
</script>
<script type="application/javascript">
"use strict";
description("Dynamic indexing of vectors and matrices should work.");

debug("This test exposes a NVidia driver bug on Linux");

GLSLConformanceTester.runRenderTests([
{
  fShaderId: 'fshaderLValueVectorBeingIndexedHasSideEffects',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: 'Index a vector expression that itself has side effects, in an l-value'
},
], 2);
</script>
</body>
</html>

