summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/matrix-row-major-dynamic-indexing.html
blob: ec6a9bbd1be453fb2b2c0119000eae45c38176e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<!--
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>Dynamically-indexed row-major matrix 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="fshaderIndexRowMajorMatrixArrayInUniformBlock" type="x-shader/x-fragment">#version 300 es
precision mediump float;

out vec4 my_FragColor;

uniform int u_zero;

layout(row_major) uniform a {
    mat4 u_mats[1];
};

void main() {
    float f = u_mats[u_zero + 0][2][1];
    my_FragColor = vec4(1.0 - f, f, 0.0, 1.0);
}
</script>
<script id="fshaderRowMatrixIndexedByRowMatrixInUniformBlock" type="x-shader/x-fragment">#version 300 es
precision mediump float;

uniform Stuff {
  layout(row_major) mat4 u_mat[3];
  layout(row_major) mat4 u_ndx[3];
} stuff;


out vec4 my_FragColor;

void main() {
  vec4 row = stuff.u_mat[int(stuff.u_ndx[1][1][3])][2];
  my_FragColor = row == vec4(9, 10, 11, 12) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1);
}
</script>
<script type="application/javascript">
"use strict";
description("Indexing row-major matrices within a uniform block should work");

GLSLConformanceTester.runRenderTests([
{
  fShaderId: 'fshaderIndexRowMajorMatrixArrayInUniformBlock',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: '',
  uniformBlocks: [{name: "a", value: new Float32Array([
    0, 0, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
  ])}],
},
{
  fShaderId: 'fshaderRowMatrixIndexedByRowMatrixInUniformBlock',
  fShaderSuccess: true,
  linkSuccess: true,
  passMsg: '',
  uniformBlocks: [{name: "Stuff", value: new Float32Array([
    // mat4 u_mat[3]
     1,  2,  3,  4,
     5,  6,  7,  8,
     9, 10, 11, 12,
    13, 14, 15, 16,

         //  +-- we should be pulling out this column
         //  |
         //  V
     1,  5,  9, 13,
     2,  6, 10, 14,
     3,  7, 11, 15,
     4,  8, 12, 16,

     2, 10, 18, 22,
     4, 12, 20, 28,
     6, 14, 22, 30,
     8, 16, 24, 32,

    // mat4 u_ndx[3]
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,

    0, 0, 0, 0,
    0, 0, 0, 2,
    0, 0, 0, 0,
    0, 1, 0, 0,
    // ^
    // |
    // +-- we should be reading this value as an index into u_mat

    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
  ])}],
}
], 2);
</script>
</body>
</html>