es3fBufferObjectQueryTests.js (6272B)
1 /*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES Utilities 3 * ------------------------------------------------ 4 * 5 * Copyright 2014 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the 'License'); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an 'AS IS' BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 */ 20 21 'use strict'; 22 goog.provide('functional.gles3.es3fBufferObjectQueryTests'); 23 goog.require('framework.common.tcuTestCase'); 24 goog.require('framework.delibs.debase.deRandom'); 25 goog.require('functional.gles3.es3fApiCase'); 26 27 goog.scope(function() { 28 var es3fBufferObjectQueryTests = functional.gles3.es3fBufferObjectQueryTests; 29 var tcuTestCase = framework.common.tcuTestCase; 30 var es3fApiCase = functional.gles3.es3fApiCase; 31 var deRandom = framework.delibs.debase.deRandom; 32 33 var setParentClass = function(child, parent) { 34 child.prototype = Object.create(parent.prototype); 35 child.prototype.constructor = child; 36 }; 37 38 /** 39 * @constructor 40 * @extends {es3fApiCase.ApiCase} 41 * @param {string} name 42 * @param {string} description 43 */ 44 es3fBufferObjectQueryTests.BufferCase = function(name, description) { 45 es3fApiCase.ApiCase.call(this, name, description, gl); 46 }; 47 48 setParentClass(es3fBufferObjectQueryTests.BufferCase, es3fApiCase.ApiCase); 49 50 es3fBufferObjectQueryTests.BufferCase.prototype.test = function() { 51 var bufferTargets = [ 52 gl.ARRAY_BUFFER, gl.COPY_READ_BUFFER, 53 gl.TRANSFORM_FEEDBACK_BUFFER, gl.UNIFORM_BUFFER, 54 55 gl.COPY_WRITE_BUFFER, gl.ELEMENT_ARRAY_BUFFER, 56 gl.PIXEL_PACK_BUFFER, gl.PIXEL_UNPACK_BUFFER 57 ]; 58 59 // most test need only to be run with a subset of targets 60 var targets = this.m_testAllTargets ? bufferTargets.length : 4; 61 62 for (var ndx = 0; ndx < targets; ++ndx) { 63 this.m_bufferTarget = bufferTargets[ndx]; 64 65 var bufferId = gl.createBuffer(); 66 gl.bindBuffer(this.m_bufferTarget, bufferId); 67 68 this.testBuffer(); 69 70 gl.bindBuffer(this.m_bufferTarget, null); 71 gl.deleteBuffer(bufferId); 72 } 73 }; 74 75 /** 76 * @constructor 77 * @extends {es3fBufferObjectQueryTests.BufferCase} 78 * @param {string} name 79 * @param {string} description 80 */ 81 es3fBufferObjectQueryTests.BufferSizeCase = function(name, description) { 82 es3fBufferObjectQueryTests.BufferCase.call(this, name, description); 83 this.m_testAllTargets = true; 84 }; 85 86 setParentClass(es3fBufferObjectQueryTests.BufferSizeCase, es3fBufferObjectQueryTests.BufferCase); 87 88 es3fBufferObjectQueryTests.BufferSizeCase.prototype.testBuffer = function() { 89 var rnd = new deRandom.Random(0xabcdef); 90 91 var size = /** type {number} */ (gl.getBufferParameter(this.m_bufferTarget, gl.BUFFER_SIZE)); 92 this.check(size == 0, 'Initial size should be 0; got ' + size); 93 94 var numIterations = 16; 95 for (var i = 0; i < numIterations; ++i) { 96 var len = rnd.getInt(0, 1024); 97 gl.bufferData(this.m_bufferTarget, len, gl.STREAM_DRAW); 98 99 size = /** type {number} */ (gl.getBufferParameter(this.m_bufferTarget, gl.BUFFER_SIZE)); 100 this.check(size == len, 'Buffer size should be ' + len + ' ; got ' + size); 101 } 102 }; 103 104 /** 105 * @constructor 106 * @extends {es3fBufferObjectQueryTests.BufferCase} 107 * @param {string} name 108 * @param {string} description 109 */ 110 es3fBufferObjectQueryTests.BufferUsageCase = function(name, description) { 111 es3fBufferObjectQueryTests.BufferCase.call(this, name, description); 112 this.m_testAllTargets = false; 113 }; 114 115 setParentClass(es3fBufferObjectQueryTests.BufferUsageCase, es3fBufferObjectQueryTests.BufferCase); 116 117 es3fBufferObjectQueryTests.BufferUsageCase.prototype.testBuffer = function() { 118 var usage = /** type {number} */ (gl.getBufferParameter(this.m_bufferTarget, gl.BUFFER_USAGE)); 119 this.check(usage == gl.STATIC_DRAW, 'Initial usage should be STATIC_DRAW; got ' + wtu.glEnumToString(gl, usage)); 120 121 var usages = [ 122 gl.STREAM_DRAW, gl.STREAM_READ, 123 gl.STREAM_COPY, gl.STATIC_DRAW, 124 gl.STATIC_READ, gl.STATIC_COPY, 125 gl.DYNAMIC_DRAW, gl.DYNAMIC_READ, 126 gl.DYNAMIC_COPY 127 ]; 128 129 for (var ndx = 0; ndx < usages.length; ++ndx) { 130 gl.bufferData(this.m_bufferTarget, 16, usages[ndx]); 131 132 usage = /** type {number} */ (gl.getBufferParameter(this.m_bufferTarget, gl.BUFFER_USAGE)); 133 this.check(usage == usages[ndx], 'Buffer usage should be ' + wtu.glEnumToString(gl, usages[ndx]) + ' ; got ' + wtu.glEnumToString(gl, usage)); 134 } 135 }; 136 137 /** 138 * @constructor 139 * @extends {tcuTestCase.DeqpTest} 140 */ 141 es3fBufferObjectQueryTests.BufferObjectQueryTests = function() { 142 tcuTestCase.DeqpTest.call(this, 'buffer_object', 'Buffer Object Query tests'); 143 }; 144 145 es3fBufferObjectQueryTests.BufferObjectQueryTests.prototype = Object.create(tcuTestCase.DeqpTest.prototype); 146 es3fBufferObjectQueryTests.BufferObjectQueryTests.prototype.constructor = es3fBufferObjectQueryTests.BufferObjectQueryTests; 147 148 es3fBufferObjectQueryTests.BufferObjectQueryTests.prototype.init = function() { 149 this.addChild(new es3fBufferObjectQueryTests.BufferSizeCase('buffer_size' , 'BUFFER_SIZE')); 150 this.addChild(new es3fBufferObjectQueryTests.BufferUsageCase('buffer_usage' , 'BUFFER_USAGE')); 151 }; 152 153 /** 154 * Run test 155 * @param {WebGL2RenderingContext} context 156 */ 157 es3fBufferObjectQueryTests.run = function(context) { 158 gl = context; 159 //Set up Test Root parameters 160 var state = tcuTestCase.runner; 161 state.setRoot(new es3fBufferObjectQueryTests.BufferObjectQueryTests()); 162 163 //Set up name and description of this test series. 164 setCurrentTestName(state.testCases.fullName()); 165 description(state.testCases.getDescription()); 166 167 try { 168 //Run test cases 169 tcuTestCase.runTestCases(); 170 } 171 catch (err) { 172 testFailedOptions('Failed to es3fBufferObjectQueryTests.run tests', false); 173 tcuTestCase.runner.terminate(); 174 } 175 }; 176 177 });