summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fAttribLocationTests.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fAttribLocationTests.js267
1 files changed, 267 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fAttribLocationTests.js b/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fAttribLocationTests.js
new file mode 100644
index 0000000000..93f91eca1d
--- /dev/null
+++ b/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fAttribLocationTests.js
@@ -0,0 +1,267 @@
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program OpenGL ES 3.0 Module
+ * -------------------------------------------------
+ *
+ * Copyright 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Attribute location test
+ *//*--------------------------------------------------------------------*/
+'use strict';
+goog.provide('functional.gles3.es3fAttribLocationTests');
+goog.require('framework.opengl.gluShaderUtil');
+goog.require('modules.shared.glsAttributeLocationTests');
+
+goog.scope(function() {
+
+ var es3fAttribLocationTests = functional.gles3.es3fAttribLocationTests;
+ var glsAttributeLocationTests = modules.shared.glsAttributeLocationTests;
+ var tcuTestCase = framework.common.tcuTestCase;
+ var gluShaderUtil = framework.opengl.gluShaderUtil;
+
+ es3fAttribLocationTests.createAttributeLocationTests = function() {
+
+ /** @type {Array<glsAttributeLocationTests.AttribType>} */
+ var types = [
+ new glsAttributeLocationTests.AttribType('float', 1, gl.FLOAT),
+ new glsAttributeLocationTests.AttribType('vec2', 1, gl.FLOAT_VEC2),
+ new glsAttributeLocationTests.AttribType('vec3', 1, gl.FLOAT_VEC3),
+ new glsAttributeLocationTests.AttribType('vec4', 1, gl.FLOAT_VEC4),
+
+ new glsAttributeLocationTests.AttribType('mat2', 2, gl.FLOAT_MAT2),
+ new glsAttributeLocationTests.AttribType('mat3', 3, gl.FLOAT_MAT3),
+ new glsAttributeLocationTests.AttribType('mat4', 4, gl.FLOAT_MAT4),
+
+ new glsAttributeLocationTests.AttribType('int', 1, gl.INT),
+ new glsAttributeLocationTests.AttribType('ivec2', 1, gl.INT_VEC2),
+ new glsAttributeLocationTests.AttribType('ivec3', 1, gl.INT_VEC3),
+ new glsAttributeLocationTests.AttribType('ivec4', 1, gl.INT_VEC4),
+
+ new glsAttributeLocationTests.AttribType('uint', 1, gl.UNSIGNED_INT),
+ new glsAttributeLocationTests.AttribType('uvec2', 1, gl.UNSIGNED_INT_VEC2),
+ new glsAttributeLocationTests.AttribType('uvec3', 1, gl.UNSIGNED_INT_VEC3),
+ new glsAttributeLocationTests.AttribType('uvec4', 1, gl.UNSIGNED_INT_VEC4),
+
+ new glsAttributeLocationTests.AttribType('mat2x2', 2, gl.FLOAT_MAT2),
+ new glsAttributeLocationTests.AttribType('mat2x3', 2, gl.FLOAT_MAT2x3),
+ new glsAttributeLocationTests.AttribType('mat2x4', 2, gl.FLOAT_MAT2x4),
+
+ new glsAttributeLocationTests.AttribType('mat3x2', 3, gl.FLOAT_MAT3x2),
+ new glsAttributeLocationTests.AttribType('mat3x3', 3, gl.FLOAT_MAT3),
+ new glsAttributeLocationTests.AttribType('mat3x4', 3, gl.FLOAT_MAT3x4),
+
+ new glsAttributeLocationTests.AttribType('mat4x2', 4, gl.FLOAT_MAT4x2),
+ new glsAttributeLocationTests.AttribType('mat4x3', 4, gl.FLOAT_MAT4x3),
+ new glsAttributeLocationTests.AttribType('mat4x4', 4, gl.FLOAT_MAT4)
+ ];
+
+ /** @type {Array<glsAttributeLocationTests.AttribType>} */
+ var es2Types = [
+ new glsAttributeLocationTests.AttribType('float', 1, gl.FLOAT),
+ new glsAttributeLocationTests.AttribType('vec2', 1, gl.FLOAT_VEC2),
+ new glsAttributeLocationTests.AttribType('vec3', 1, gl.FLOAT_VEC3),
+ new glsAttributeLocationTests.AttribType('vec4', 1, gl.FLOAT_VEC4),
+
+ new glsAttributeLocationTests.AttribType('mat2', 2, gl.FLOAT_MAT2),
+ new glsAttributeLocationTests.AttribType('mat3', 3, gl.FLOAT_MAT3),
+ new glsAttributeLocationTests.AttribType('mat4', 4, gl.FLOAT_MAT4)
+ ];
+
+ /** @type {tcuTestCase.DeqpTest} */
+ var root = tcuTestCase.newTest('attribute_location', 'Attribute location tests');
+
+ /** @type {number} */ var typeNdx;
+ /** @type {glsAttributeLocationTests.AttribType} */ var type;
+
+ // Basic bind attribute tests
+ /** @type {tcuTestCase.DeqpTest} */
+ var bindAttributeGroup = tcuTestCase.newTest('bind', 'Basic bind attribute location tests.');
+
+ root.addChild(bindAttributeGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+ bindAttributeGroup.addChild(new glsAttributeLocationTests.BindAttributeTest(type));
+ }
+
+ // Bind max number of attributes
+ /** @type {tcuTestCase.DeqpTest} */
+ var bindMaxAttributeGroup = tcuTestCase.newTest('bind_max_attributes', 'Use bind with maximum number of attributes.');
+
+ root.addChild(bindMaxAttributeGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+ bindMaxAttributeGroup.addChild(new glsAttributeLocationTests.BindMaxAttributesTest(type));
+ }
+
+ // Test filling holes in attribute location
+ /** @type {tcuTestCase.DeqpTest} */
+ var holeGroup = tcuTestCase.newTest('bind_hole', 'Bind all, but one attribute and leave hole in location space for it.');
+
+ root.addChild(holeGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+
+ // Bind first location, leave hole size of type and fill rest of locations
+ holeGroup.addChild(new glsAttributeLocationTests.BindHoleAttributeTest(type));
+ }
+
+ // Test binding at different times
+ /** @type {tcuTestCase.DeqpTest} */
+ var bindTimeGroup = tcuTestCase.newTest('bind_time', 'Bind time tests. Test binding at different stages.');
+
+ root.addChild(bindTimeGroup);
+
+ bindTimeGroup.addChild(new glsAttributeLocationTests.PreAttachBindAttributeTest());
+ bindTimeGroup.addChild(new glsAttributeLocationTests.PreLinkBindAttributeTest());
+ bindTimeGroup.addChild(new glsAttributeLocationTests.PostLinkBindAttributeTest());
+ bindTimeGroup.addChild(new glsAttributeLocationTests.BindRelinkAttributeTest());
+ bindTimeGroup.addChild(new glsAttributeLocationTests.BindReattachAttributeTest());
+
+ // Basic layout location attribute tests
+ /** @type {tcuTestCase.DeqpTest} */
+ var layoutAttributeGroup = tcuTestCase.newTest('layout', 'Basic layout location tests.');
+
+ root.addChild(layoutAttributeGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+ layoutAttributeGroup.addChild(new glsAttributeLocationTests.LocationAttributeTest(type));
+ }
+
+ // Test max attributes with layout locations
+ /** @type {tcuTestCase.DeqpTest} */
+ var layoutMaxAttributeGroup = tcuTestCase.newTest('layout_max_attributes', 'Maximum attributes used with layout location qualifiers.');
+
+ root.addChild(layoutMaxAttributeGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+ layoutMaxAttributeGroup.addChild(new glsAttributeLocationTests.LocationMaxAttributesTest(type));
+ }
+
+ // Test filling holes in attribute location
+ holeGroup = tcuTestCase.newTest('layout_hole', 'Define layout location for all, but one attribute consuming max attribute locations.');
+
+ root.addChild(holeGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+
+ // Location first location, leave hole size of type and fill rest of locations
+ holeGroup.addChild(new glsAttributeLocationTests.LocationHoleAttributeTest(type));
+ }
+
+ // Basic mixed mixed attribute tests
+ /** @type {tcuTestCase.DeqpTest} */
+ var mixedAttributeGroup = tcuTestCase.newTest('mixed', 'Basic mixed location tests.');
+
+ root.addChild(mixedAttributeGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+ mixedAttributeGroup.addChild(new glsAttributeLocationTests.MixedAttributeTest(type));
+ }
+
+ /** @type {tcuTestCase.DeqpTest} */
+ var mixedMaxAttributeGroup = tcuTestCase.newTest('mixed_max_attributes', 'Maximum attributes used with mixed binding and layout qualifiers.');
+
+ root.addChild(mixedMaxAttributeGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+ mixedMaxAttributeGroup.addChild(new glsAttributeLocationTests.MixedMaxAttributesTest(type));
+ }
+
+ // Test mixed binding at different times
+ /** @type {tcuTestCase.DeqpTest} */
+ var mixedTimeGroup = tcuTestCase.newTest('mixed_time', 'Bind time tests. Test binding at different stages.');
+
+ root.addChild(mixedTimeGroup);
+
+ mixedTimeGroup.addChild(new glsAttributeLocationTests.PreAttachMixedAttributeTest());
+ mixedTimeGroup.addChild(new glsAttributeLocationTests.PreLinkMixedAttributeTest());
+ mixedTimeGroup.addChild(new glsAttributeLocationTests.PostLinkMixedAttributeTest());
+ mixedTimeGroup.addChild(new glsAttributeLocationTests.MixedRelinkAttributeTest());
+ mixedTimeGroup.addChild(new glsAttributeLocationTests.MixedReattachAttributeTest());
+
+ holeGroup = tcuTestCase.newTest('mixed_hole', 'Use layout location qualifiers and binding. Leave hole in location space for only free attribute.');
+
+ root.addChild(holeGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+
+ holeGroup.addChild(new glsAttributeLocationTests.MixedHoleAttributeTest(type));
+ }
+
+ // Test hole in location space that moves when relinking
+ /** @type {tcuTestCase.DeqpTest} */
+ var relinkBindHoleGroup = tcuTestCase.newTest('bind_relink_hole', 'Test relinking with moving hole in attribute location space.');
+
+ root.addChild(relinkBindHoleGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+
+ relinkBindHoleGroup.addChild(new glsAttributeLocationTests.BindRelinkHoleAttributeTest(type));
+ }
+
+ // Test hole in location space that moves when relinking
+ /** @type {tcuTestCase.DeqpTest} */
+ var relinkMixedHoleGroup = tcuTestCase.newTest('mixed_relink_hole', 'Test relinking with moving hole in attribute location space.');
+
+ root.addChild(relinkMixedHoleGroup);
+
+ for (typeNdx = 0; typeNdx < types.length; typeNdx++) {
+ type = types[typeNdx];
+
+ relinkMixedHoleGroup.addChild(new glsAttributeLocationTests.MixedRelinkHoleAttributeTest(type));
+ }
+
+ return root;
+ };
+
+ es3fAttribLocationTests.run = function(context) {
+ gl = context;
+ //Set up root Test
+ var state = tcuTestCase.runner;
+
+ var test = es3fAttribLocationTests.createAttributeLocationTests();
+ var testName = test.fullName();
+ var testDescription = test.getDescription() === undefined ? '' : test.getDescription();
+
+ state.testName = testName;
+ state.setRoot(test);
+ //Set up name and description of this test series.
+ setCurrentTestName(testName);
+ description(testDescription);
+
+ try {
+ //Create test cases
+ test.init();
+ //Run test cases
+ tcuTestCase.runTestCases();
+ }
+ catch (err) {
+ bufferedLogToConsole('Exception: ' + err);
+ testFailedOptions('Failed to es3fAttribLocationTests.run tests', false);
+ tcuTestCase.runner.terminate();
+ }
+ };
+});