/*------------------------------------------------------------------------- * 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.es3fSamplerStateQueryTests'); 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 es3fSamplerStateQueryTests = functional.gles3.es3fSamplerStateQueryTests; 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; }; /** * @constructor * @extends {es3fApiCase.ApiCase} * @param {string} name * @param {string} description */ es3fSamplerStateQueryTests.SamplerCase = function(name, description) { es3fApiCase.ApiCase.call(this, name, description, gl); /** @type {WebGLSampler} */ this.m_sampler; }; setParentClass(es3fSamplerStateQueryTests.SamplerCase, es3fApiCase.ApiCase); es3fSamplerStateQueryTests.SamplerCase.prototype.testSampler = function() { throw new Error('Virtual function. Please override.'); }; es3fSamplerStateQueryTests.SamplerCase.prototype.test = function() { this.m_sampler = gl.createSampler(); this.testSampler(); gl.deleteSampler(this.m_sampler); }; /** * @constructor * @extends {es3fSamplerStateQueryTests.SamplerCase} * @param {string} name * @param {string} description * @param {number} valueName * @param {number} initialValue * @param {Array} valueRange */ es3fSamplerStateQueryTests.SamplerModeCase = function(name, description, valueName, initialValue, valueRange) { es3fSamplerStateQueryTests.SamplerCase.call(this, name, description); this.m_valueName = valueName; this.m_initialValue = initialValue; this.m_valueRange = valueRange; }; setParentClass(es3fSamplerStateQueryTests.SamplerModeCase, es3fSamplerStateQueryTests.SamplerCase); es3fSamplerStateQueryTests.SamplerModeCase.prototype.testSampler = function() { this.check(glsStateQuery.verifySampler(this.m_sampler, this.m_valueName, this.m_initialValue)); for (var ndx = 0; ndx < this.m_valueRange.length; ++ndx) { gl.samplerParameteri(this.m_sampler, this.m_valueName, this.m_valueRange[ndx]); this.check(glsStateQuery.verifySampler(this.m_sampler, this.m_valueName, this.m_valueRange[ndx])); } //check unit conversions with float for (var ndx = 0; ndx < this.m_valueRange.length; ++ndx) { gl.samplerParameterf(this.m_sampler, this.m_valueName, this.m_valueRange[ndx]); this.check(glsStateQuery.verifySampler(this.m_sampler, this.m_valueName, this.m_valueRange[ndx])); } }; /** * @constructor * @extends {es3fSamplerStateQueryTests.SamplerCase} * @param {string} name * @param {string} description * @param {number} lodTarget * @param {number} initialValue */ es3fSamplerStateQueryTests.SamplerLODCase = function(name, description, lodTarget, initialValue) { es3fSamplerStateQueryTests.SamplerCase.call(this, name, description); this.m_lodTarget = lodTarget; this.m_initialValue = initialValue; }; setParentClass(es3fSamplerStateQueryTests.SamplerLODCase, es3fSamplerStateQueryTests.SamplerCase); es3fSamplerStateQueryTests.SamplerLODCase.prototype.testSampler = function() { var rnd = new deRandom.Random(0xabcdef); this.check(glsStateQuery.verifySampler(this.m_sampler, this.m_lodTarget, this.m_initialValue)); var numIterations = 60; for (var ndx = 0; ndx < numIterations; ++ndx) { var ref = rnd.getFloat(-64000, 64000); gl.samplerParameterf(this.m_sampler, this.m_lodTarget, ref); this.check(glsStateQuery.verifySampler(this.m_sampler, this.m_lodTarget, ref)); } // check unit conversions with int for (var ndx = 0; ndx < numIterations; ++ndx) { var ref = rnd.getInt(-64000, 64000); gl.samplerParameteri(this.m_sampler, this.m_lodTarget, ref); this.check(glsStateQuery.verifySampler(this.m_sampler, this.m_lodTarget, ref)); } }; /** * @constructor * @extends {tcuTestCase.DeqpTest} */ es3fSamplerStateQueryTests.SamplerStateQueryTests = function() { tcuTestCase.DeqpTest.call(this, 'sampler', 'Sampler State Query tests'); }; es3fSamplerStateQueryTests.SamplerStateQueryTests.prototype = Object.create(tcuTestCase.DeqpTest.prototype); es3fSamplerStateQueryTests.SamplerStateQueryTests.prototype.constructor = es3fSamplerStateQueryTests.SamplerStateQueryTests; es3fSamplerStateQueryTests.SamplerStateQueryTests.prototype.init = function() { var wrapValues = [gl.CLAMP_TO_EDGE, gl.REPEAT, gl.MIRRORED_REPEAT]; this.addChild(new es3fSamplerStateQueryTests.SamplerModeCase('sampler_texture_wrap_s' , 'TEXTURE_WRAP_S', gl.TEXTURE_WRAP_S, gl.REPEAT, wrapValues)); this.addChild(new es3fSamplerStateQueryTests.SamplerModeCase('sampler_texture_wrap_t' , 'TEXTURE_WRAP_T', gl.TEXTURE_WRAP_T, gl.REPEAT, wrapValues)); this.addChild(new es3fSamplerStateQueryTests.SamplerModeCase('sampler_texture_wrap_r' , 'TEXTURE_WRAP_R', gl.TEXTURE_WRAP_R, gl.REPEAT, wrapValues)); var magValues = [gl.NEAREST, gl.LINEAR]; this.addChild(new es3fSamplerStateQueryTests.SamplerModeCase('sampler_texture_mag_filter' , 'TEXTURE_MAG_FILTER', gl.TEXTURE_MAG_FILTER, gl.LINEAR, magValues)); var minValues = [gl.NEAREST, gl.LINEAR, gl.NEAREST_MIPMAP_NEAREST, gl.NEAREST_MIPMAP_LINEAR, gl.LINEAR_MIPMAP_NEAREST, gl.LINEAR_MIPMAP_LINEAR]; this.addChild(new es3fSamplerStateQueryTests.SamplerModeCase('sampler_texture_min_filter' , 'TEXTURE_MIN_FILTER', gl.TEXTURE_MIN_FILTER, gl.NEAREST_MIPMAP_LINEAR, minValues)); this.addChild(new es3fSamplerStateQueryTests.SamplerLODCase('sampler_texture_min_lod' , 'TEXTURE_MIN_LOD', gl.TEXTURE_MIN_LOD, -1000)); this.addChild(new es3fSamplerStateQueryTests.SamplerLODCase('sampler_texture_max_lod' , 'TEXTURE_MAX_LOD', gl.TEXTURE_MAX_LOD, 1000)); var modes = [gl.COMPARE_REF_TO_TEXTURE, gl.NONE]; this.addChild(new es3fSamplerStateQueryTests.SamplerModeCase('sampler_texture_compare_mode' , 'TEXTURE_COMPARE_MODE', gl.TEXTURE_COMPARE_MODE, gl.NONE, modes)); var compareFuncs = [gl.LEQUAL, gl.GEQUAL, gl.LESS, gl.GREATER, gl.EQUAL, gl.NOTEQUAL, gl.ALWAYS, gl.NEVER]; this.addChild(new es3fSamplerStateQueryTests.SamplerModeCase('sampler_texture_compare_func' , 'TEXTURE_COMPARE_FUNC', gl.TEXTURE_COMPARE_FUNC, gl.LEQUAL, compareFuncs)); }; /** * Run test * @param {WebGL2RenderingContext} context */ es3fSamplerStateQueryTests.run = function(context) { gl = context; //Set up Test Root parameters var state = tcuTestCase.runner; state.setRoot(new es3fSamplerStateQueryTests.SamplerStateQueryTests()); //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 es3fSamplerStateQueryTests.run tests', false); tcuTestCase.runner.terminate(); } }; });