diff options
Diffstat (limited to 'dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js')
-rw-r--r-- | dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js | 485 |
1 files changed, 485 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js b/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js new file mode 100644 index 0000000000..ce74648569 --- /dev/null +++ b/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js @@ -0,0 +1,485 @@ +/*------------------------------------------------------------------------- + * drawElements Quality Program OpenGL ES 3.0 Module + * ------------------------------------------------- + * + * 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. + * + *//*! + * \file + * \brief Rasterizer discard tests. + *//*--------------------------------------------------------------------*/ + +goog.provide('functional.gles3.es3fRasterizerDiscardTests'); +goog.require('framework.common.tcuLogImage'); +goog.require('framework.common.tcuSurface'); +goog.require('framework.common.tcuTestCase'); +goog.require('framework.delibs.debase.deRandom'); +goog.require('framework.delibs.debase.deString'); +goog.require('framework.opengl.gluDrawUtil'); +goog.require('framework.opengl.gluShaderProgram'); + +goog.scope(function() { +var es3fRasterizerDiscardTests = functional.gles3.es3fRasterizerDiscardTests; +var deString = framework.delibs.debase.deString; +var tcuTestCase = framework.common.tcuTestCase; +var deRandom = framework.delibs.debase.deRandom; +var gluShaderProgram = framework.opengl.gluShaderProgram; +var tcuSurface = framework.common.tcuSurface; +var gluDrawUtil = framework.opengl.gluDrawUtil; +var tcuLogImage = framework.common.tcuLogImage; + +/** @const */ var NUM_CASE_ITERATIONS = 1; +/** @const */ var FAIL_COLOR_RED = [1, 0, 0.0, 1]; +/** @const */ var PASS_COLOR_BLUE = [0, 0, 0.5, 1]; +/** @const */ var BLACK_COLOR = [0, 0, 0.0, 1]; +/** @const */ var FAIL_DEPTH = 0; +/** @const */ var FAIL_STENCIL = 1; +/** @const */ var UNIT_SQUARE = [ + 1, 1, 0.05, 1, + 1, -1, 0.05, 1, + -1, 1, 0.05, 1, + -1, -1, 0.05, 1 +]; + +/** @type {WebGL2RenderingContext} */ var gl; + +/** + * @enum + */ +es3fRasterizerDiscardTests.CaseType = { + WRITE_DEPTH: 0, + WRITE_STENCIL: 1, + CLEAR_COLOR: 2, + CLEAR_DEPTH: 3, + CLEAR_STENCIL: 4 +}; + +/** + * @enum {{useFBO: boolean, useScissor: boolean}} + */ +es3fRasterizerDiscardTests.CaseOptions = { + FBO: {useFBO: true, useScissor: false}, + SCISSOR: {useFBO: false, useScissor: true} +}; + +/** + * @constructor + * @extends {tcuTestCase.DeqpTest} + * @param {string} name + * @param {string} description + * @param {number} numPrimitives + * @param {es3fRasterizerDiscardTests.CaseType} caseType + * @param {?es3fRasterizerDiscardTests.CaseOptions} caseOptions + * @param {gluDrawUtil.primitiveType=} drawMode + */ +es3fRasterizerDiscardTests.RasterizerDiscardCase = function(name, description, numPrimitives, caseType, caseOptions, drawMode) { + tcuTestCase.DeqpTest.call(this, name, description); + this.m_numPrimitives = numPrimitives; + this.m_caseType = caseType; + this.m_caseOptions = caseOptions || {useFBO: false, useScissor: false}; + this.m_drawMode = drawMode || gluDrawUtil.primitiveType.TRIANGLES; + this.m_program = null; + this.m_fbo = null; + this.m_colorBuf = null; + this.m_depthStencilBuf = null; + this.m_iterNdx = 0; + this.m_rnd = new deRandom.Random(deString.deStringHash(name)); +}; + +es3fRasterizerDiscardTests.RasterizerDiscardCase.prototype = Object.create(tcuTestCase.DeqpTest.prototype); +es3fRasterizerDiscardTests.RasterizerDiscardCase.prototype.constructor = es3fRasterizerDiscardTests.RasterizerDiscardCase; + +/** + * @param {number} numPrimitives + * @param {deRandom.Random} rnd + * @param {gluDrawUtil.primitiveType} drawMode + * @return {Array<number>} + */ +es3fRasterizerDiscardTests.generateVertices = function(numPrimitives, rnd, drawMode) { + var dst = []; + var numVertices; + + switch (drawMode) { + case gl.POINTS: numVertices = numPrimitives; break; + case gl.LINES: numVertices = 2 * numPrimitives; break; + case gl.LINE_STRIP: numVertices = numPrimitives + 1; break; + case gl.LINE_LOOP: numVertices = numPrimitives + 2; break; + case gl.TRIANGLES: numVertices = 3 * numPrimitives; break; + case gl.TRIANGLE_STRIP: numVertices = numPrimitives + 2; break; + case gl.TRIANGLE_FAN: numVertices = numPrimitives + 2; break; + default: + throw new Error('Invalid drawMode: ' + drawMode); + } + + for (var i = 0; i < numVertices; i++) { + dst[i * 4] = rnd.getFloat(-1.0, 1.0); // x + dst[i * 4 + 1] = rnd.getFloat(-1.0, 1.0); // y + dst[i * 4 + 2] = rnd.getFloat(0.1, 0.9); // z + dst[i * 4 + 3] = 1.0; // w + } + + return dst; +}; + +es3fRasterizerDiscardTests.RasterizerDiscardCase.prototype.setupFramebufferObject = function() { + var width = gl.drawingBufferWidth; + var height = gl.drawingBufferHeight; + + // Create framebuffer object + + this.m_fbo = gl.createFramebuffer(); + this.m_colorBuf = gl.createTexture(); + this.m_depthStencilBuf = gl.createRenderbuffer(); + + // Create color texture + + gl.bindTexture(gl.TEXTURE_2D, this.m_colorBuf); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + // Create depth and stencil buffers + + gl.bindRenderbuffer(gl.RENDERBUFFER, this.m_depthStencilBuf); + gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH24_STENCIL8, width, height); + + // Attach texture and buffers to FBO + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.m_fbo); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.m_colorBuf, 0); + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, this.m_depthStencilBuf); + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, this.m_depthStencilBuf); + + var fboStatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER); + + if (fboStatus == gl.FRAMEBUFFER_UNSUPPORTED) + throw new Error('Framebuffer unsupported'); + else if (fboStatus != gl.FRAMEBUFFER_COMPLETE) + throw new Error('Failed to create framebuffer object: ' + deString.enumToString(gl, fboStatus)); +}; + +es3fRasterizerDiscardTests.RasterizerDiscardCase.prototype.deleteFramebufferObject = function() { + gl.deleteTexture(this.m_colorBuf); + gl.deleteRenderbuffer(this.m_depthStencilBuf); + gl.deleteFramebuffer(this.m_fbo); +}; + +es3fRasterizerDiscardTests.RasterizerDiscardCase.prototype.init = function() { + var vertShaderSource = + '#version 300 es\n' + + 'layout(location = 0) in mediump vec4 a_position;\n' + + '\n' + + 'void main (void)\n' + + '{\n' + + ' gl_Position = a_position;\n' + + '}\n'; + + var fragShaderSource = + '#version 300 es\n' + + 'layout(location = 0) out mediump vec4 dEQP_FragColor;\n' + + 'uniform mediump vec4 u_color;\n' + + '\n' + + 'void main (void)\n' + + '{\n' + + ' mediump float depth_gradient = gl_FragCoord.z;\n' + + ' mediump float bias = 0.1;\n' + + ' dEQP_FragColor = vec4(u_color.xyz * (depth_gradient + bias), 1.0);\n' + + '}\n'; + + this.m_program = new gluShaderProgram.ShaderProgram(gl, gluShaderProgram.makeVtxFragSources(vertShaderSource, fragShaderSource)); + + if (!this.m_program.isOk()) { + bufferedLogToConsole(this.m_program); + testFailedOptions('Failed to compile shader program', true); + } +}; + +es3fRasterizerDiscardTests.RasterizerDiscardCase.prototype.deinit = function() { + this.deleteFramebufferObject(); + this.m_program = null; +}; + +es3fRasterizerDiscardTests.RasterizerDiscardCase.prototype.iterate = function() { + var program = this.m_program.getProgram(); + var colorUnif = gl.getUniformLocation(program, 'u_color'); + var failColorFound = false; + var passColorFound = false; + var vertices; + + bufferedLogToConsole('Case iteration ' + (this.m_iterNdx + 1) + ' / ' + NUM_CASE_ITERATIONS); + + // Create and bind FBO if needed + + if (this.m_caseOptions.useFBO) { + this.setupFramebufferObject(); + } + + if (this.m_caseOptions.useScissor) { + gl.enable(gl.SCISSOR_TEST); + gl.scissor(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + bufferedLogToConsole('Scissor test enabled: glScissor(0, 0, ' + gl.drawingBufferWidth + ', ' + gl.drawingBufferHeight + ')'); + } + + gl.useProgram(this.m_program.getProgram()); + + gl.enable(gl.DEPTH_TEST); + gl.depthRange(0, 1); + gl.depthFunc(gl.LEQUAL); + + gl.enable(gl.STENCIL_TEST); + gl.stencilFunc(gl.NOTEQUAL, 1, 0xFF); + gl.stencilOp(gl.REPLACE, gl.KEEP, gl.KEEP); + + gl.clearColor(PASS_COLOR_BLUE[0], PASS_COLOR_BLUE[1], PASS_COLOR_BLUE[2], PASS_COLOR_BLUE[3]); + gl.clearDepth(1); + gl.clearStencil(0); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); + + // Generate vertices + vertices = es3fRasterizerDiscardTests.generateVertices(this.m_numPrimitives, this.m_rnd, this.m_drawMode); + var posLoc = gl.getAttribLocation(program, 'a_position'); + var vertexArrays = []; + vertexArrays.push(new gluDrawUtil.VertexArrayBinding(gl.FLOAT, posLoc, 4, vertices.length / 4, vertices)); + // Clear color to black for depth and stencil clear cases + + if (this.m_caseType == es3fRasterizerDiscardTests.CaseType.CLEAR_DEPTH || this.m_caseType == es3fRasterizerDiscardTests.CaseType.CLEAR_STENCIL) { + gl.clearColor(BLACK_COLOR[0], BLACK_COLOR[1], BLACK_COLOR[2], BLACK_COLOR[3]); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // Set fail values for color, depth and stencil + + gl.uniform4fv(colorUnif, FAIL_COLOR_RED); + gl.clearColor(FAIL_COLOR_RED[0], FAIL_COLOR_RED[1], FAIL_COLOR_RED[2], FAIL_COLOR_RED[3]); + gl.clearDepth(FAIL_DEPTH); + gl.clearStencil(FAIL_STENCIL); + + // Enable rasterizer discard + + gl.enable(gl.RASTERIZER_DISCARD); + bufferedLogToConsole('Rasterizer discard enabled'); + + // Do to-be-discarded primitive draws and buffer clears + + switch (this.m_caseType) { + case es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH: + gluDrawUtil.draw(gl, program, vertexArrays, new gluDrawUtil.PrimitiveList(this.m_drawMode, vertices.length / 4)); + break; + case es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL: + gluDrawUtil.draw(gl, program, vertexArrays, new gluDrawUtil.PrimitiveList(this.m_drawMode, vertices.length / 4)); + break; + case es3fRasterizerDiscardTests.CaseType.CLEAR_COLOR: + if (this.m_caseOptions.useFBO) + gl.clearBufferfv(gl.COLOR, 0, FAIL_COLOR_RED); + else + gl.clear(gl.COLOR_BUFFER_BIT); + break; + case es3fRasterizerDiscardTests.CaseType.CLEAR_DEPTH: + if (this.m_caseOptions.useFBO) + gl.clearBufferfv(gl.DEPTH, 0, [FAIL_DEPTH]); + else + gl.clear(gl.DEPTH_BUFFER_BIT); + break; + case es3fRasterizerDiscardTests.CaseType.CLEAR_STENCIL: + if (this.m_caseOptions.useFBO) + gl.clearBufferiv(gl.STENCIL, 0, [FAIL_STENCIL]); + else + gl.clear(gl.STENCIL_BUFFER_BIT); + break; + default: + throw new Error('Invalid case type ' + this.m_caseType); + } + + // Disable rasterizer discard + + gl.disable(gl.RASTERIZER_DISCARD); + bufferedLogToConsole('Rasterizer discard disabled'); + + if (this.m_caseType == es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL) { + if (this.m_caseOptions.useFBO || gl.getContextAttributes().stencil) { + // Draw a full-screen square that colors all pixels red if they have stencil value 1. + var square = [new gluDrawUtil.VertexArrayBinding(gl.FLOAT, posLoc, 4, UNIT_SQUARE.length / 4, UNIT_SQUARE)]; + + gl.stencilFunc(gl.EQUAL, 1, 0xFF); + gluDrawUtil.draw(gl, program, square, + new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLE_STRIP, UNIT_SQUARE.length / 4)); + } + // \note If no stencil buffers are present and test is rendering to default framebuffer, test will always pass. + } else if (this.m_caseType == es3fRasterizerDiscardTests.CaseType.CLEAR_DEPTH || this.m_caseType == es3fRasterizerDiscardTests.CaseType.CLEAR_STENCIL) { + // Draw pass-indicating primitives for depth and stencil clear cases + + gl.uniform4fv(colorUnif, PASS_COLOR_BLUE); + gluDrawUtil.draw(gl, program, vertexArrays, new gluDrawUtil.PrimitiveList(this.m_drawMode, vertices.length / 4)); + } + + gl.finish(); + gl.disable(gl.STENCIL_TEST); + gl.disable(gl.DEPTH_TEST); + gl.disable(gl.SCISSOR_TEST); + + // Read and check pixel data + + var pixels = new tcuSurface.Surface(); + pixels.readViewport(gl); + + var width = pixels.getWidth(); + var height = pixels.getHeight(); + + for (var y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + var pixel = pixels.getPixel(x, y); + if (pixel[2] != 0) + passColorFound = true; + + if (pixel[0] != 0) { + failColorFound = true; + break; + } + } + if (failColorFound) break; + } + + // Delete FBO if created + + if (this.m_caseOptions.useFBO) + this.deleteFramebufferObject(); + + // Evaluate test result + + var testOk = passColorFound && !failColorFound; + + if (!testOk) { + tcuLogImage.logImage('Result image', '', pixels.getAccess()); + testFailed('Primitive or buffer clear was not discarded.'); + return tcuTestCase.IterateResult.STOP; + } + bufferedLogToConsole('Primitive or buffer clear was discarded correctly.'); + + if (++this.m_iterNdx < NUM_CASE_ITERATIONS) + return tcuTestCase.IterateResult.CONTINUE; + + testPassed(); + return tcuTestCase.IterateResult.STOP; +}; + +es3fRasterizerDiscardTests.init = function() { + var state = tcuTestCase.runner; + var testGroup = state.testCases; + + var basic = tcuTestCase.newTest('basic', 'Rasterizer discard test for default framebuffer'); + var scissor = tcuTestCase.newTest('scissor', 'Rasterizer discard test for default framebuffer with scissor test enabled'); + var fbo = tcuTestCase.newTest('fbo', 'Rasterizer discard test for framebuffer object'); + + testGroup.addChild(basic); + testGroup.addChild(scissor); + testGroup.addChild(fbo); + + // Default framebuffer cases + + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_points', 'points', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, null, gluDrawUtil.primitiveType.POINTS)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_lines', 'lines', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, null, gluDrawUtil.primitiveType.LINES)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_line_strip', 'line_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, null, gluDrawUtil.primitiveType.LINE_STRIP)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_line_loop', 'line_loop', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, null, gluDrawUtil.primitiveType.LINE_LOOP)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_triangles', 'triangles', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, null, gluDrawUtil.primitiveType.TRIANGLES)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_triangle_strip', 'triangle_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, null, gluDrawUtil.primitiveType.TRIANGLE_STRIP)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_triangle_fan', 'triangle_fan', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, null, gluDrawUtil.primitiveType.TRIANGLE_FAN)); + + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_points', 'points', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, null, gluDrawUtil.primitiveType.POINTS)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_lines', 'lines', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, null, gluDrawUtil.primitiveType.LINES)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_line_strip', 'line_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, null, gluDrawUtil.primitiveType.LINE_STRIP)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_line_loop', 'line_loop', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, null, gluDrawUtil.primitiveType.LINE_LOOP)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_triangles', 'triangles', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, null, gluDrawUtil.primitiveType.TRIANGLES)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_triangle_strip', 'triangle_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, null, gluDrawUtil.primitiveType.TRIANGLE_STRIP)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_triangle_fan', 'triangle_fan', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, null, gluDrawUtil.primitiveType.TRIANGLE_FAN)); + + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('clear_color', 'clear_color', 4, es3fRasterizerDiscardTests.CaseType.CLEAR_COLOR, null)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('clear_depth', 'clear_depth', 4, es3fRasterizerDiscardTests.CaseType.CLEAR_DEPTH, null)); + basic.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('clear_stencil', 'clear_stencil', 4, es3fRasterizerDiscardTests.CaseType.CLEAR_STENCIL, null)); + + // Default framebuffer cases with scissor test enabled + + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_points', 'points', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.POINTS)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_lines', 'lines', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.LINES)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_line_strip', 'line_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.LINE_STRIP)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_line_loop', 'line_loop', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.LINE_LOOP)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_triangles', 'triangles', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.TRIANGLES)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_triangle_strip', 'triangle_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.TRIANGLE_STRIP)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_triangle_fan', 'triangle_fan', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.TRIANGLE_FAN)); + + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_points', 'points', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.POINTS)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_lines', 'lines', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.LINES)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_line_strip', 'line_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.LINE_STRIP)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_line_loop', 'line_loop', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.LINE_LOOP)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_triangles', 'triangles', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.TRIANGLES)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_triangle_strip', 'triangle_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.TRIANGLE_STRIP)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_triangle_fan', 'triangle_fan', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.SCISSOR, gluDrawUtil.primitiveType.TRIANGLE_FAN)); + + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('clear_color', 'clear_color', 4, es3fRasterizerDiscardTests.CaseType.CLEAR_COLOR, es3fRasterizerDiscardTests.CaseOptions.SCISSOR)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('clear_depth', 'clear_depth', 4, es3fRasterizerDiscardTests.CaseType.CLEAR_DEPTH, es3fRasterizerDiscardTests.CaseOptions.SCISSOR)); + scissor.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('clear_stencil', 'clear_stencil', 4, es3fRasterizerDiscardTests.CaseType.CLEAR_STENCIL, es3fRasterizerDiscardTests.CaseOptions.SCISSOR)); + + // FBO cases + + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_points', 'points', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.POINTS)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_lines', 'lines', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.LINES)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_line_strip', 'line_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.LINE_STRIP)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_line_loop', 'line_loop', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.LINE_LOOP)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_triangles', 'triangles', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.TRIANGLES)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_triangle_strip', 'triangle_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.TRIANGLE_STRIP)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_depth_triangle_fan', 'triangle_fan', 4, es3fRasterizerDiscardTests.CaseType.WRITE_DEPTH, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.TRIANGLE_FAN)); + + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_points', 'points', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.POINTS)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_lines', 'lines', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.LINES)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_line_strip', 'line_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.LINE_STRIP)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_line_loop', 'line_loop', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.LINE_LOOP)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_triangles', 'triangles', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.TRIANGLES)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_triangle_strip', 'triangle_strip', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.TRIANGLE_STRIP)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('write_stencil_triangle_fan', 'triangle_fan', 4, es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL, es3fRasterizerDiscardTests.CaseOptions.FBO, gluDrawUtil.primitiveType.TRIANGLE_FAN)); + + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('clear_color', 'clear_color', 4, es3fRasterizerDiscardTests.CaseType.CLEAR_COLOR, es3fRasterizerDiscardTests.CaseOptions.FBO)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('clear_depth', 'clear_depth', 4, es3fRasterizerDiscardTests.CaseType.CLEAR_DEPTH, es3fRasterizerDiscardTests.CaseOptions.FBO)); + fbo.addChild(new es3fRasterizerDiscardTests.RasterizerDiscardCase('clear_stencil', 'clear_stencil', 4, es3fRasterizerDiscardTests.CaseType.CLEAR_STENCIL, es3fRasterizerDiscardTests.CaseOptions.FBO)); +}; + +/** + * Create and execute the test cases + */ +es3fRasterizerDiscardTests.run = function(context) { + gl = context; + //Set up Test Root parameters + var testName = 'rasterizer_discard'; + var testDescription = 'Rasterizer Discard Tests'; + var state = tcuTestCase.runner; + + state.testName = testName; + state.testCases = tcuTestCase.newTest(testName, testDescription, null); + + //Set up name and description of this test series. + setCurrentTestName(testName); + description(testDescription); + + try { + es3fRasterizerDiscardTests.init(); + tcuTestCase.runTestCases(); + } catch (err) { + testFailedOptions('Failed to run tests', false); + bufferedLogToConsole(err); + tcuTestCase.runner.terminate(); + } +}; + +}); |