tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

es3fRboStateQueryTests.js (11261B)


      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.es3fRboStateQueryTests');
     23 goog.require('framework.common.tcuTestCase');
     24 goog.require('framework.delibs.debase.deRandom');
     25 goog.require('functional.gles3.es3fApiCase');
     26 goog.require('modules.shared.glsStateQuery');
     27 
     28 goog.scope(function() {
     29 var es3fRboStateQueryTests = functional.gles3.es3fRboStateQueryTests;
     30 var tcuTestCase = framework.common.tcuTestCase;
     31 var glsStateQuery = modules.shared.glsStateQuery;
     32 var es3fApiCase = functional.gles3.es3fApiCase;
     33 var deRandom = framework.delibs.debase.deRandom;
     34 
     35 var setParentClass = function(child, parent) {
     36    child.prototype = Object.create(parent.prototype);
     37    child.prototype.constructor = child;
     38 };
     39 
     40 /**
     41 * @this {es3fApiCase.ApiCase}
     42 */
     43 var checkRenderbufferComponentSize = function(r, g, b, a, d, s) {
     44    var referenceSizes = [r, g, b, a, d, s];
     45    var paramNames = [
     46        gl.RENDERBUFFER_RED_SIZE,
     47        gl.RENDERBUFFER_GREEN_SIZE,
     48        gl.RENDERBUFFER_BLUE_SIZE,
     49        gl.RENDERBUFFER_ALPHA_SIZE,
     50        gl.RENDERBUFFER_DEPTH_SIZE,
     51        gl.RENDERBUFFER_STENCIL_SIZE
     52    ];
     53 
     54    for (var ndx = 0; ndx < referenceSizes.length; ++ndx) {
     55        if (referenceSizes[ndx] == -1)
     56            continue;
     57        var value = /** @type {number} */ (gl.getRenderbufferParameter(gl.RENDERBUFFER, paramNames[ndx]));
     58 
     59        this.check(value >= referenceSizes[ndx], 'Expected greater or equal to ' + referenceSizes[ndx] + ' got ' + value);
     60    }
     61 };
     62 
     63 /**
     64 * @constructor
     65 * @extends {es3fApiCase.ApiCase}
     66 * @param {string} name
     67 * @param {string} description
     68 */
     69 es3fRboStateQueryTests.RboSizeCase = function(name, description) {
     70    es3fApiCase.ApiCase.call(this, name, description, gl);
     71 };
     72 
     73 setParentClass(es3fRboStateQueryTests.RboSizeCase, es3fApiCase.ApiCase);
     74 
     75 es3fRboStateQueryTests.RboSizeCase.prototype.test = function() {
     76    var rnd = new deRandom.Random(0xabcdef);
     77 
     78    var renderbufferID = gl.createRenderbuffer();
     79    gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID);
     80 
     81    this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_WIDTH, 0));
     82    this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_HEIGHT, 0));
     83 
     84    var numIterations = 60;
     85    for (var i = 0; i < numIterations; ++i) {
     86        var w = rnd.getInt(0, 128);
     87        var h = rnd.getInt(0, 128);
     88 
     89        gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGB8, w, h);
     90 
     91        this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_WIDTH, w));
     92        this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_HEIGHT, h));
     93    }
     94    gl.deleteRenderbuffer(renderbufferID);
     95 };
     96 
     97 /**
     98 * @constructor
     99 * @extends {es3fApiCase.ApiCase}
    100 * @param {string} name
    101 * @param {string} description
    102 */
    103 es3fRboStateQueryTests.RboInternalFormatCase = function(name, description) {
    104    es3fApiCase.ApiCase.call(this, name, description, gl);
    105 };
    106 
    107 setParentClass(es3fRboStateQueryTests.RboInternalFormatCase, es3fApiCase.ApiCase);
    108 
    109 es3fRboStateQueryTests.RboInternalFormatCase.prototype.test = function() {
    110    var renderbufferID = gl.createRenderbuffer();
    111    gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID);
    112 
    113    this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_INTERNAL_FORMAT, gl.RGBA4));
    114 
    115    var requiredColorformats = [
    116        gl.R8, gl.RG8, gl.RGB8, gl.RGB565, gl.RGBA4, gl.RGB5_A1, gl.RGBA8, gl.RGB10_A2,
    117        gl.RGB10_A2UI, gl.SRGB8_ALPHA8, gl.R8I, gl.R8UI, gl.R16I, gl.R16UI, gl.R32I, gl.R32UI,
    118        gl.RG8I, gl.RG8UI, gl.RG16I, gl.RG16UI, gl.RG32I, gl.RG32UI, gl.RGBA8I, gl.RGBA8UI,
    119        gl.RGBA16I, gl.RGBA16UI, gl.RGBA32I, gl.RGBA32UI
    120    ];
    121 
    122    for (var ndx = 0; ndx < requiredColorformats.length; ++ndx) {
    123        gl.renderbufferStorage(gl.RENDERBUFFER, requiredColorformats[ndx], 128, 128);
    124 
    125        this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_INTERNAL_FORMAT, requiredColorformats[ndx]));
    126    }
    127    gl.deleteRenderbuffer(renderbufferID);
    128 };
    129 
    130 /**
    131 * @constructor
    132 * @extends {es3fApiCase.ApiCase}
    133 * @param {string} name
    134 * @param {string} description
    135 */
    136 es3fRboStateQueryTests.RboComponentSizeColorCase = function(name, description) {
    137    es3fApiCase.ApiCase.call(this, name, description, gl);
    138 };
    139 
    140 setParentClass(es3fRboStateQueryTests.RboComponentSizeColorCase, es3fApiCase.ApiCase);
    141 
    142 es3fRboStateQueryTests.RboComponentSizeColorCase.prototype.test = function() {
    143    var renderbufferID = gl.createRenderbuffer();
    144    gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID);
    145 
    146    checkRenderbufferComponentSize.bind(this, 0, 0, 0, 0, 0, 0);
    147 
    148    var requiredColorFormats = [
    149        // format, r, g, b, a
    150        [gl.R8, 8, 0, 0, 0],
    151        [gl.RG8, 8, 8, 0, 0],
    152        [gl.RGB8, 8, 8, 8, 0],
    153        [gl.RGB565, 5, 6, 5, 0],
    154        [gl.RGBA4, 4, 4, 4, 4],
    155        [gl.RGB5_A1, 5, 5, 5, 1],
    156        [gl.RGBA8, 8, 8, 8, 8],
    157        [gl.RGB10_A2, 10, 10, 10, 2],
    158        [gl.RGB10_A2UI, 10, 10, 10, 2],
    159        [gl.SRGB8_ALPHA8, 8, 8, 8, 8],
    160        [gl.R8I, 8, 0, 0, 0],
    161        [gl.R8UI, 8, 0, 0, 0],
    162        [gl.R16I, 16, 0, 0, 0],
    163        [gl.R16UI, 16, 0, 0, 0],
    164        [gl.R32I, 32, 0, 0, 0],
    165        [gl.R32UI, 32, 0, 0, 0],
    166        [gl.RG8I, 8, 8, 0, 0],
    167        [gl.RG8UI, 8, 8, 0, 0],
    168        [gl.RG16I, 16, 16, 0, 0],
    169        [gl.RG16UI, 16, 16, 0, 0],
    170        [gl.RG32I, 32, 32, 0, 0],
    171        [gl.RG32UI, 32, 32, 0, 0],
    172        [gl.RGBA8I, 8, 8, 8, 8],
    173        [gl.RGBA8UI, 8, 8, 8, 8],
    174        [gl.RGBA16I, 16, 16, 16, 16],
    175        [gl.RGBA16UI, 16, 16, 16, 16],
    176        [gl.RGBA32I, 32, 32, 32, 32],
    177        [gl.RGBA32UI, 32, 32, 32, 32]
    178    ];
    179 
    180    for (var ndx = 0; ndx < requiredColorFormats.length; ++ndx) {
    181        gl.renderbufferStorage(gl.RENDERBUFFER, requiredColorFormats[ndx][0], 128, 128);
    182 
    183        checkRenderbufferComponentSize.bind(this, requiredColorFormats[ndx][1], requiredColorFormats[ndx][2], requiredColorFormats[ndx][3], requiredColorFormats[ndx][4], -1, -1);
    184    }
    185    gl.deleteRenderbuffer(renderbufferID);
    186 };
    187 
    188 /**
    189 * @constructor
    190 * @extends {es3fApiCase.ApiCase}
    191 * @param {string} name
    192 * @param {string} description
    193 */
    194 es3fRboStateQueryTests.RboComponentSizeDepthCase = function(name, description) {
    195    es3fApiCase.ApiCase.call(this, name, description, gl);
    196 };
    197 
    198 setParentClass(es3fRboStateQueryTests.RboComponentSizeDepthCase, es3fApiCase.ApiCase);
    199 
    200 es3fRboStateQueryTests.RboComponentSizeDepthCase.prototype.test = function() {
    201    var renderbufferID = gl.createRenderbuffer();
    202    gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID);
    203 
    204    var requiredDepthFormats = [
    205        // format, depth, stencil
    206        [gl.DEPTH_COMPONENT16, 16, 0],
    207        [gl.DEPTH_COMPONENT24, 24, 0],
    208        [gl.DEPTH_COMPONENT32F, 32, 0],
    209        [gl.DEPTH24_STENCIL8, 24, 8],
    210        [gl.DEPTH32F_STENCIL8, 32, 8]
    211    ];
    212 
    213    for (var ndx = 0; ndx < requiredDepthFormats.length; ++ndx) {
    214        gl.renderbufferStorage(gl.RENDERBUFFER, requiredDepthFormats[ndx][0], 128, 128);
    215 
    216        checkRenderbufferComponentSize.bind(this, -1, -1, -1, -1, requiredDepthFormats[ndx][1], requiredDepthFormats[ndx][2]);
    217    }
    218 
    219    // STENCIL_INDEX8 is required, in that case sBits >= 8
    220    gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, 128, 128);
    221 
    222    var value = /** @type {number} */ (gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_STENCIL_SIZE));
    223    this.check(value >= 8, 'Expected greater or equal to 8; got ' + value);
    224 
    225    gl.deleteRenderbuffer(renderbufferID);
    226 };
    227 
    228 /**
    229 * @constructor
    230 * @extends {es3fApiCase.ApiCase}
    231 * @param {string} name
    232 * @param {string} description
    233 */
    234 es3fRboStateQueryTests.RboSamplesCase = function(name, description) {
    235    es3fApiCase.ApiCase.call(this, name, description, gl);
    236 };
    237 
    238 setParentClass(es3fRboStateQueryTests.RboSamplesCase, es3fApiCase.ApiCase);
    239 
    240 es3fRboStateQueryTests.RboSamplesCase.prototype.test = function() {
    241    var rnd = new deRandom.Random(0xabcdef);
    242 
    243    var renderbufferID = gl.createRenderbuffer();
    244    gl.bindRenderbuffer(gl.RENDERBUFFER, renderbufferID);
    245 
    246    this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_SAMPLES, 0));
    247 
    248    var max_samples = /** @type {number} */ (gl.getParameter(gl.MAX_SAMPLES));
    249 
    250    // 0 samples is a special case
    251    gl.renderbufferStorageMultisample(gl.RENDERBUFFER, 0, gl.RGBA8, 128, 128);
    252 
    253    this.check(glsStateQuery.verifyRenderbuffer(gl.RENDERBUFFER_SAMPLES, 0));
    254 
    255    // test [1, n] samples
    256    for (var samples = 1; samples <= max_samples; ++samples) {
    257        gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples, gl.RGBA8, 128, 128);
    258        var value = /** @type {number} */ (gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_SAMPLES));
    259        this.check(value >= samples, 'Expected greater or equal to ' + samples + ' got ' + value);
    260    }
    261 
    262    gl.deleteRenderbuffer(renderbufferID);
    263 };
    264 
    265 /**
    266 * @constructor
    267 * @extends {tcuTestCase.DeqpTest}
    268 */
    269 es3fRboStateQueryTests.RboStateQueryTests = function() {
    270    tcuTestCase.DeqpTest.call(this, 'rbo', 'Rbo State Query tests');
    271 };
    272 
    273 es3fRboStateQueryTests.RboStateQueryTests.prototype = Object.create(tcuTestCase.DeqpTest.prototype);
    274 es3fRboStateQueryTests.RboStateQueryTests.prototype.constructor = es3fRboStateQueryTests.RboStateQueryTests;
    275 
    276 es3fRboStateQueryTests.RboStateQueryTests.prototype.init = function() {
    277    this.addChild(new es3fRboStateQueryTests.RboSizeCase('renderbuffer_size', 'RENDERBUFFER_WIDTH and RENDERBUFFER_HEIGHT'));
    278    this.addChild(new es3fRboStateQueryTests.RboInternalFormatCase('renderbuffer_internal_format', 'RENDERBUFFER_INTERNAL_FORMAT'));
    279    this.addChild(new es3fRboStateQueryTests.RboComponentSizeColorCase('renderbuffer_component_size_color', 'RENDERBUFFER_x_SIZE'));
    280    this.addChild(new es3fRboStateQueryTests.RboComponentSizeDepthCase('renderbuffer_component_size_depth', 'RENDERBUFFER_x_SIZE'));
    281    this.addChild(new es3fRboStateQueryTests.RboSamplesCase('renderbuffer_samples', 'RENDERBUFFER_SAMPLES'));
    282 };
    283 
    284 /**
    285 * Run test
    286 * @param {WebGL2RenderingContext} context
    287 */
    288 es3fRboStateQueryTests.run = function(context) {
    289    gl = context;
    290    //Set up Test Root parameters
    291    var state = tcuTestCase.runner;
    292    state.setRoot(new es3fRboStateQueryTests.RboStateQueryTests());
    293 
    294    //Set up name and description of this test series.
    295    setCurrentTestName(state.testCases.fullName());
    296    description(state.testCases.getDescription());
    297 
    298    try {
    299        //Run test cases
    300        tcuTestCase.runTestCases();
    301    }
    302    catch (err) {
    303        testFailedOptions('Failed to es3fRboStateQueryTests.run tests', false);
    304        tcuTestCase.runner.terminate();
    305    }
    306 };
    307 
    308 });