summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInternalFormatQueryTests.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInternalFormatQueryTests.js')
-rw-r--r--dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInternalFormatQueryTests.js173
1 files changed, 173 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInternalFormatQueryTests.js b/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInternalFormatQueryTests.js
new file mode 100644
index 0000000000..8eb1b0e2c0
--- /dev/null
+++ b/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInternalFormatQueryTests.js
@@ -0,0 +1,173 @@
+/*-------------------------------------------------------------------------
+ * drawElements Quality Program OpenGL ES Utilities
+ * ------------------------------------------------
+ *
+ * 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.
+ *
+ */
+
+'use strict';
+goog.provide('functional.gles3.es3fInternalFormatQueryTests');
+goog.require('framework.common.tcuTestCase');
+goog.require('functional.gles3.es3fApiCase');
+goog.require('modules.shared.glsStateQuery');
+
+goog.scope(function() {
+var es3fInternalFormatQueryTests = functional.gles3.es3fInternalFormatQueryTests;
+var tcuTestCase = framework.common.tcuTestCase;
+var glsStateQuery = modules.shared.glsStateQuery;
+var es3fApiCase = functional.gles3.es3fApiCase;
+
+var setParentClass = function(child, parent) {
+ child.prototype = Object.create(parent.prototype);
+ child.prototype.constructor = child;
+};
+
+/**
+ * @constructor
+ * @extends {es3fApiCase.ApiCase}
+ * @param {string} name
+ * @param {string} description
+ * @param {number} internalFormat
+ * @param {boolean} isIntegerInternalFormat
+ */
+es3fInternalFormatQueryTests.SamplesCase = function(name, description, internalFormat, isIntegerInternalFormat) {
+ es3fApiCase.ApiCase.call(this, name, description, gl);
+ this.m_internalFormat = internalFormat;
+ this.m_isIntegerInternalFormat = isIntegerInternalFormat;
+};
+
+setParentClass(es3fInternalFormatQueryTests.SamplesCase, es3fApiCase.ApiCase);
+
+es3fInternalFormatQueryTests.SamplesCase.prototype.test = function() {
+ var samples = gl.getInternalformatParameter(gl.RENDERBUFFER, this.m_internalFormat, gl.SAMPLES);
+
+ this.check(!this.m_isIntegerInternalFormat || samples.length == 0, 'integer internal format should have 0 samples, got ' + samples.length);
+
+ if (samples.length == 0)
+ return;
+
+ var prevSampleCount = 0;
+ var sampleCount = 0;
+ for (var ndx = 0; ndx < samples.length; ++ndx, prevSampleCount = sampleCount) {
+ sampleCount = samples[ndx];
+
+ // sample count must be > 0
+ this.check(sampleCount > 0, 'Expected sample count to be at least one; got ' + sampleCount);
+
+ // samples must be ordered descending
+ this.check(ndx == 0 || sampleCount < prevSampleCount, 'Expected sample count to be ordered in descending order; got ' + prevSampleCount + ' at index ' + (ndx - 1) + ', and ' + sampleCount + ' at index ' + ndx);
+ }
+
+ // the maximum value in SAMPLES is guaranteed to be at least the value of MAX_SAMPLES
+ var maxSamples = /** @type {number} */ (gl.getParameter(gl.MAX_SAMPLES));
+ var maximumFormatSampleCount = samples[0];
+ this.check(maximumFormatSampleCount >= maxSamples, 'Expected maximum value in SAMPLES (' + maximumFormatSampleCount + ') to be at least the value of MAX_SAMPLES (' + maxSamples + ')');
+};
+
+/**
+* @constructor
+* @extends {tcuTestCase.DeqpTest}
+*/
+es3fInternalFormatQueryTests.InternalFormatQueryTests = function() {
+ tcuTestCase.DeqpTest.call(this, 'internal_format', 'Internal Format Query tests');
+};
+
+es3fInternalFormatQueryTests.InternalFormatQueryTests.prototype = Object.create(tcuTestCase.DeqpTest.prototype);
+es3fInternalFormatQueryTests.InternalFormatQueryTests.prototype.constructor = es3fInternalFormatQueryTests.InternalFormatQueryTests;
+
+es3fInternalFormatQueryTests.InternalFormatQueryTests.prototype.init = function() {
+ var internalFormats = [
+ //name, format, is_integer
+ // color renderable and unsized
+ // \note These unsized formats seem to allowed by the spec, but they are not useful in any way. (You can't create a renderbuffer with such internalFormat)
+ ['rgba', gl.RGBA, false],
+ ['rgb', gl.RGB, false],
+
+ // color renderable
+ ['r8', gl.R8, false],
+ ['rg8', gl.RG8, false],
+ ['rgb8', gl.RGB8, false],
+ ['rgb565', gl.RGB565, false],
+ ['rgba4', gl.RGBA4, false],
+ ['rgb5_a1', gl.RGB5_A1, false],
+ ['rgba8', gl.RGBA8, false],
+ ['rgb10_a2', gl.RGB10_A2, false],
+ ['rgb10_a2ui', gl.RGB10_A2UI, true],
+ ['srgb8_alpha8', gl.SRGB8_ALPHA8, false],
+ ['r8i', gl.R8I, true],
+ ['r8ui', gl.R8UI, true],
+ ['r16i', gl.R16I, true],
+ ['r16ui', gl.R16UI, true],
+ ['r32i', gl.R32I, true],
+ ['r32ui', gl.R32UI, true],
+ ['rg8i', gl.RG8I, true],
+ ['rg8ui', gl.RG8UI, true],
+ ['rg16i', gl.RG16I, true],
+ ['rg16ui', gl.RG16UI, true],
+ ['rg32i', gl.RG32I, true],
+ ['rg32ui', gl.RG32UI, true],
+ ['rgba8i', gl.RGBA8I, true],
+ ['rgba8ui', gl.RGBA8UI, true],
+ ['rgba16i', gl.RGBA16I, true],
+ ['rgba16ui', gl.RGBA16UI, true],
+ ['rgba32i', gl.RGBA32I, true],
+ ['rgba32ui', gl.RGBA32UI, true],
+
+ // depth renderable
+ ['depth_component16', gl.DEPTH_COMPONENT16, false],
+ ['depth_component24', gl.DEPTH_COMPONENT24, false],
+ ['depth_component32f', gl.DEPTH_COMPONENT32F, false],
+ ['depth24_stencil8', gl.DEPTH24_STENCIL8, false],
+ ['depth32f_stencil8', gl.DEPTH32F_STENCIL8, false],
+
+ // stencil renderable
+ ['stencil_index8', gl.STENCIL_INDEX8, false]
+ // DEPTH24_STENCIL8, duplicate
+ // DEPTH32F_STENCIL8 duplicate
+ ];
+
+ for (var ndx = 0; ndx < internalFormats.length; ++ndx) {
+ var internalFormat = internalFormats[ndx];
+
+ this.addChild(new es3fInternalFormatQueryTests.SamplesCase(internalFormat[0] + '_samples', 'SAMPLES and NUM_SAMPLE_COUNTS', internalFormat[1], internalFormat[2]));
+ }
+};
+
+/**
+* Run test
+* @param {WebGL2RenderingContext} context
+*/
+es3fInternalFormatQueryTests.run = function(context) {
+ gl = context;
+ //Set up Test Root parameters
+ var state = tcuTestCase.runner;
+ state.setRoot(new es3fInternalFormatQueryTests.InternalFormatQueryTests());
+
+ //Set up name and description of this test series.
+ setCurrentTestName(state.testCases.fullName());
+ description(state.testCases.getDescription());
+
+ try {
+ //Run test cases
+ tcuTestCase.runTestCases();
+ }
+ catch (err) {
+ testFailedOptions('Failed to es3fInternalFormatQueryTests.run tests', false);
+ tcuTestCase.runner.terminate();
+ }
+};
+
+});