/*------------------------------------------------------------------------- * 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.es3fBufferObjectQueryTests'); goog.require('framework.common.tcuTestCase'); goog.require('framework.delibs.debase.deRandom'); goog.require('functional.gles3.es3fApiCase'); goog.scope(function() { var es3fBufferObjectQueryTests = functional.gles3.es3fBufferObjectQueryTests; var tcuTestCase = framework.common.tcuTestCase; 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 */ es3fBufferObjectQueryTests.BufferCase = function(name, description) { es3fApiCase.ApiCase.call(this, name, description, gl); }; setParentClass(es3fBufferObjectQueryTests.BufferCase, es3fApiCase.ApiCase); es3fBufferObjectQueryTests.BufferCase.prototype.test = function() { var bufferTargets = [ gl.ARRAY_BUFFER, gl.COPY_READ_BUFFER, gl.TRANSFORM_FEEDBACK_BUFFER, gl.UNIFORM_BUFFER, gl.COPY_WRITE_BUFFER, gl.ELEMENT_ARRAY_BUFFER, gl.PIXEL_PACK_BUFFER, gl.PIXEL_UNPACK_BUFFER ]; // most test need only to be run with a subset of targets var targets = this.m_testAllTargets ? bufferTargets.length : 4; for (var ndx = 0; ndx < targets; ++ndx) { this.m_bufferTarget = bufferTargets[ndx]; var bufferId = gl.createBuffer(); gl.bindBuffer(this.m_bufferTarget, bufferId); this.testBuffer(); gl.bindBuffer(this.m_bufferTarget, null); gl.deleteBuffer(bufferId); } }; /** * @constructor * @extends {es3fBufferObjectQueryTests.BufferCase} * @param {string} name * @param {string} description */ es3fBufferObjectQueryTests.BufferSizeCase = function(name, description) { es3fBufferObjectQueryTests.BufferCase.call(this, name, description); this.m_testAllTargets = true; }; setParentClass(es3fBufferObjectQueryTests.BufferSizeCase, es3fBufferObjectQueryTests.BufferCase); es3fBufferObjectQueryTests.BufferSizeCase.prototype.testBuffer = function() { var rnd = new deRandom.Random(0xabcdef); var size = /** type {number} */ (gl.getBufferParameter(this.m_bufferTarget, gl.BUFFER_SIZE)); this.check(size == 0, 'Initial size should be 0; got ' + size); var numIterations = 16; for (var i = 0; i < numIterations; ++i) { var len = rnd.getInt(0, 1024); gl.bufferData(this.m_bufferTarget, len, gl.STREAM_DRAW); size = /** type {number} */ (gl.getBufferParameter(this.m_bufferTarget, gl.BUFFER_SIZE)); this.check(size == len, 'Buffer size should be ' + len + ' ; got ' + size); } }; /** * @constructor * @extends {es3fBufferObjectQueryTests.BufferCase} * @param {string} name * @param {string} description */ es3fBufferObjectQueryTests.BufferUsageCase = function(name, description) { es3fBufferObjectQueryTests.BufferCase.call(this, name, description); this.m_testAllTargets = false; }; setParentClass(es3fBufferObjectQueryTests.BufferUsageCase, es3fBufferObjectQueryTests.BufferCase); es3fBufferObjectQueryTests.BufferUsageCase.prototype.testBuffer = function() { var usage = /** type {number} */ (gl.getBufferParameter(this.m_bufferTarget, gl.BUFFER_USAGE)); this.check(usage == gl.STATIC_DRAW, 'Initial usage should be STATIC_DRAW; got ' + wtu.glEnumToString(gl, usage)); var usages = [ gl.STREAM_DRAW, gl.STREAM_READ, gl.STREAM_COPY, gl.STATIC_DRAW, gl.STATIC_READ, gl.STATIC_COPY, gl.DYNAMIC_DRAW, gl.DYNAMIC_READ, gl.DYNAMIC_COPY ]; for (var ndx = 0; ndx < usages.length; ++ndx) { gl.bufferData(this.m_bufferTarget, 16, usages[ndx]); usage = /** type {number} */ (gl.getBufferParameter(this.m_bufferTarget, gl.BUFFER_USAGE)); this.check(usage == usages[ndx], 'Buffer usage should be ' + wtu.glEnumToString(gl, usages[ndx]) + ' ; got ' + wtu.glEnumToString(gl, usage)); } }; /** * @constructor * @extends {tcuTestCase.DeqpTest} */ es3fBufferObjectQueryTests.BufferObjectQueryTests = function() { tcuTestCase.DeqpTest.call(this, 'buffer_object', 'Buffer Object Query tests'); }; es3fBufferObjectQueryTests.BufferObjectQueryTests.prototype = Object.create(tcuTestCase.DeqpTest.prototype); es3fBufferObjectQueryTests.BufferObjectQueryTests.prototype.constructor = es3fBufferObjectQueryTests.BufferObjectQueryTests; es3fBufferObjectQueryTests.BufferObjectQueryTests.prototype.init = function() { this.addChild(new es3fBufferObjectQueryTests.BufferSizeCase('buffer_size' , 'BUFFER_SIZE')); this.addChild(new es3fBufferObjectQueryTests.BufferUsageCase('buffer_usage' , 'BUFFER_USAGE')); }; /** * Run test * @param {WebGL2RenderingContext} context */ es3fBufferObjectQueryTests.run = function(context) { gl = context; //Set up Test Root parameters var state = tcuTestCase.runner; state.setRoot(new es3fBufferObjectQueryTests.BufferObjectQueryTests()); //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 es3fBufferObjectQueryTests.run tests', false); tcuTestCase.runner.terminate(); } }; });