From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../functional/gles3/es3fRboStateQueryTests.js | 308 +++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRboStateQueryTests.js (limited to 'dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRboStateQueryTests.js') diff --git a/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRboStateQueryTests.js b/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRboStateQueryTests.js new file mode 100644 index 0000000000..9903102990 --- /dev/null +++ b/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRboStateQueryTests.js @@ -0,0 +1,308 @@ +/*------------------------------------------------------------------------- + * 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.es3fRboStateQueryTests'); +goog.require('framework.common.tcuTestCase'); +goog.require('framework.delibs.debase.deRandom'); +goog.require('functional.gles3.es3fApiCase'); +goog.require('modules.shared.glsStateQuery'); + +goog.scope(function() { +var es3fRboStateQueryTests = functional.gles3.es3fRboStateQueryTests; +var tcuTestCase = framework.common.tcuTestCase; +var glsStateQuery = modules.shared.glsStateQuery; +var es3fApiCase = functional.gles3.es3fApiCase; +var deRandom = framework.delibs.debase.deRandom; + +var setParentClass = function(child, parent) { + child.prototype = Object.create(parent.prototype); + child.prototype.constructor = child; +}; + +/** + * @this {es3fApiCase.ApiCase} + */ +var checkRenderbufferComponentSize = function(r, g, b, a, d, s) { + var referenceSizes = [r, g, b, a, d, s]; + var paramNames = [ + gl.RENDERBUFFER_RED_SIZE, + gl.RENDERBUFFER_GREEN_SIZE, + gl.RENDERBUFFER_BLUE_SIZE, + gl.RENDERBUFFER_ALPHA_SIZE, + gl.RENDERBUFFER_DEPTH_SIZE, + gl.RENDERBUFFER_STENCIL_SIZE + ]; + + for (var ndx = 0; ndx < referenceSizes.length; ++ndx) { + if (referenceSizes[ndx] == -1) + continue; + var value = /** @type {number} */ (gl.getRenderbufferParameter(gl.RENDERBUFFER, paramNames[ndx])); + + this.check(value >= referenceSizes[ndx], 'Expected greater or equal to ' + referenceSizes[ndx] + ' got ' + value); + } +}; + +/** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ +es3fRboStateQueryTests.RboSizeCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); +}; + +setParentClass(es3fRboStateQueryTests.RboSizeCase, es3fApiCase.ApiCase); + +es3fRboStateQueryTests.RboSizeCase.prototype.test = function() { + var rnd = new deRandom.Random(0xabcdef); + + var renderbufferID = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID); + + this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_WIDTH, 0)); + this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_HEIGHT, 0)); + + var numIterations = 60; + for (var i = 0; i < numIterations; ++i) { + var w = rnd.getInt(0, 128); + var h = rnd.getInt(0, 128); + + gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGB8, w, h); + + this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_WIDTH, w)); + this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_HEIGHT, h)); + } + gl.deleteRenderbuffer(renderbufferID); +}; + +/** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ +es3fRboStateQueryTests.RboInternalFormatCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); +}; + +setParentClass(es3fRboStateQueryTests.RboInternalFormatCase, es3fApiCase.ApiCase); + +es3fRboStateQueryTests.RboInternalFormatCase.prototype.test = function() { + var renderbufferID = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID); + + this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_INTERNAL_FORMAT, gl.RGBA4)); + + var requiredColorformats = [ + gl.R8, gl.RG8, gl.RGB8, gl.RGB565, gl.RGBA4, gl.RGB5_A1, gl.RGBA8, gl.RGB10_A2, + gl.RGB10_A2UI, gl.SRGB8_ALPHA8, gl.R8I, gl.R8UI, gl.R16I, gl.R16UI, gl.R32I, gl.R32UI, + gl.RG8I, gl.RG8UI, gl.RG16I, gl.RG16UI, gl.RG32I, gl.RG32UI, gl.RGBA8I, gl.RGBA8UI, + gl.RGBA16I, gl.RGBA16UI, gl.RGBA32I, gl.RGBA32UI + ]; + + for (var ndx = 0; ndx < requiredColorformats.length; ++ndx) { + gl.renderbufferStorage(gl.RENDERBUFFER, requiredColorformats[ndx], 128, 128); + + this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_INTERNAL_FORMAT, requiredColorformats[ndx])); + } + gl.deleteRenderbuffer(renderbufferID); +}; + +/** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ +es3fRboStateQueryTests.RboComponentSizeColorCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); +}; + +setParentClass(es3fRboStateQueryTests.RboComponentSizeColorCase, es3fApiCase.ApiCase); + +es3fRboStateQueryTests.RboComponentSizeColorCase.prototype.test = function() { + var renderbufferID = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID); + + checkRenderbufferComponentSize.bind(this, 0, 0, 0, 0, 0, 0); + + var requiredColorFormats = [ + // format, r, g, b, a + [gl.R8, 8, 0, 0, 0], + [gl.RG8, 8, 8, 0, 0], + [gl.RGB8, 8, 8, 8, 0], + [gl.RGB565, 5, 6, 5, 0], + [gl.RGBA4, 4, 4, 4, 4], + [gl.RGB5_A1, 5, 5, 5, 1], + [gl.RGBA8, 8, 8, 8, 8], + [gl.RGB10_A2, 10, 10, 10, 2], + [gl.RGB10_A2UI, 10, 10, 10, 2], + [gl.SRGB8_ALPHA8, 8, 8, 8, 8], + [gl.R8I, 8, 0, 0, 0], + [gl.R8UI, 8, 0, 0, 0], + [gl.R16I, 16, 0, 0, 0], + [gl.R16UI, 16, 0, 0, 0], + [gl.R32I, 32, 0, 0, 0], + [gl.R32UI, 32, 0, 0, 0], + [gl.RG8I, 8, 8, 0, 0], + [gl.RG8UI, 8, 8, 0, 0], + [gl.RG16I, 16, 16, 0, 0], + [gl.RG16UI, 16, 16, 0, 0], + [gl.RG32I, 32, 32, 0, 0], + [gl.RG32UI, 32, 32, 0, 0], + [gl.RGBA8I, 8, 8, 8, 8], + [gl.RGBA8UI, 8, 8, 8, 8], + [gl.RGBA16I, 16, 16, 16, 16], + [gl.RGBA16UI, 16, 16, 16, 16], + [gl.RGBA32I, 32, 32, 32, 32], + [gl.RGBA32UI, 32, 32, 32, 32] + ]; + + for (var ndx = 0; ndx < requiredColorFormats.length; ++ndx) { + gl.renderbufferStorage(gl.RENDERBUFFER, requiredColorFormats[ndx][0], 128, 128); + + checkRenderbufferComponentSize.bind(this, requiredColorFormats[ndx][1], requiredColorFormats[ndx][2], requiredColorFormats[ndx][3], requiredColorFormats[ndx][4], -1, -1); + } + gl.deleteRenderbuffer(renderbufferID); +}; + +/** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ +es3fRboStateQueryTests.RboComponentSizeDepthCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); +}; + +setParentClass(es3fRboStateQueryTests.RboComponentSizeDepthCase, es3fApiCase.ApiCase); + +es3fRboStateQueryTests.RboComponentSizeDepthCase.prototype.test = function() { + var renderbufferID = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID); + + var requiredDepthFormats = [ + // format, depth, stencil + [gl.DEPTH_COMPONENT16, 16, 0], + [gl.DEPTH_COMPONENT24, 24, 0], + [gl.DEPTH_COMPONENT32F, 32, 0], + [gl.DEPTH24_STENCIL8, 24, 8], + [gl.DEPTH32F_STENCIL8, 32, 8] + ]; + + for (var ndx = 0; ndx < requiredDepthFormats.length; ++ndx) { + gl.renderbufferStorage(gl.RENDERBUFFER, requiredDepthFormats[ndx][0], 128, 128); + + checkRenderbufferComponentSize.bind(this, -1, -1, -1, -1, requiredDepthFormats[ndx][1], requiredDepthFormats[ndx][2]); + } + + // STENCIL_INDEX8 is required, in that case sBits >= 8 + gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, 128, 128); + + var value = /** @type {number} */ (gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_STENCIL_SIZE)); + this.check(value >= 8, 'Expected greater or equal to 8; got ' + value); + + gl.deleteRenderbuffer(renderbufferID); +}; + +/** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ +es3fRboStateQueryTests.RboSamplesCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); +}; + +setParentClass(es3fRboStateQueryTests.RboSamplesCase, es3fApiCase.ApiCase); + +es3fRboStateQueryTests.RboSamplesCase.prototype.test = function() { + var rnd = new deRandom.Random(0xabcdef); + + var renderbufferID = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID); + + this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_SAMPLES, 0)); + + var max_samples = /** @type {number} */ (gl.getParameter(gl.MAX_SAMPLES)); + + // 0 samples is a special case + gl.renderbufferStorageMultisample(gl.RENDERBUFFER, 0, gl.RGBA8, 128, 128); + + this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_SAMPLES, 0)); + + // test [1, n] samples + for (var samples = 1; samples <= max_samples; ++samples) { + gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples, gl.RGBA8, 128, 128); + var value = /** @type {number} */ (gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_SAMPLES)); + this.check(value >= samples, 'Expected greater or equal to ' + samples + ' got ' + value); + } + + gl.deleteRenderbuffer(renderbufferID); +}; + +/** +* @constructor +* @extends {tcuTestCase.DeqpTest} +*/ +es3fRboStateQueryTests.RboStateQueryTests = function() { + tcuTestCase.DeqpTest.call(this, 'rbo', 'Rbo State Query tests'); +}; + +es3fRboStateQueryTests.RboStateQueryTests.prototype = Object.create(tcuTestCase.DeqpTest.prototype); +es3fRboStateQueryTests.RboStateQueryTests.prototype.constructor = es3fRboStateQueryTests.RboStateQueryTests; + +es3fRboStateQueryTests.RboStateQueryTests.prototype.init = function() { + this.addChild(new es3fRboStateQueryTests.RboSizeCase('renderbuffer_size', 'RENDERBUFFER_WIDTH and RENDERBUFFER_HEIGHT')); + this.addChild(new es3fRboStateQueryTests.RboInternalFormatCase('renderbuffer_internal_format', 'RENDERBUFFER_INTERNAL_FORMAT')); + this.addChild(new es3fRboStateQueryTests.RboComponentSizeColorCase('renderbuffer_component_size_color', 'RENDERBUFFER_x_SIZE')); + this.addChild(new es3fRboStateQueryTests.RboComponentSizeDepthCase('renderbuffer_component_size_depth', 'RENDERBUFFER_x_SIZE')); + this.addChild(new es3fRboStateQueryTests.RboSamplesCase('renderbuffer_samples', 'RENDERBUFFER_SAMPLES')); +}; + +/** +* Run test +* @param {WebGL2RenderingContext} context +*/ +es3fRboStateQueryTests.run = function(context) { + gl = context; + //Set up Test Root parameters + var state = tcuTestCase.runner; + state.setRoot(new es3fRboStateQueryTests.RboStateQueryTests()); + + //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 es3fRboStateQueryTests.run tests', false); + tcuTestCase.runner.terminate(); + } +}; + +}); -- cgit v1.2.3