summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js
diff options
context:
space:
mode:
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.js485
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();
+ }
+};
+
+});