sglrReferenceContextTest.js (34791B)
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 'use strict'; 21 goog.provide('framework.opengl.simplereference.sglrReferenceContextTest'); 22 goog.require('framework.common.tcuLogImage'); 23 goog.require('framework.common.tcuPixelFormat'); 24 goog.require('framework.common.tcuRGBA'); 25 goog.require('framework.common.tcuSurface'); 26 goog.require('framework.common.tcuTestCase'); 27 goog.require('framework.opengl.gluDrawUtil'); 28 goog.require('framework.opengl.simplereference.sglrReferenceContext'); 29 goog.require('framework.opengl.simplereference.sglrShaderProgram'); 30 goog.require('framework.referencerenderer.rrFragmentOperations'); 31 goog.require('framework.referencerenderer.rrGenericVector'); 32 goog.require('framework.referencerenderer.rrShadingContext'); 33 goog.require('framework.referencerenderer.rrVertexAttrib'); 34 goog.require('framework.referencerenderer.rrVertexPacket'); 35 36 goog.scope(function() { 37 var sglrReferenceContextTest = framework.opengl.simplereference.sglrReferenceContextTest; 38 var sglrReferenceContext = framework.opengl.simplereference.sglrReferenceContext; 39 var tcuTestCase = framework.common.tcuTestCase; 40 var tcuPixelFormat = framework.common.tcuPixelFormat; 41 var gluDrawUtil = framework.opengl.gluDrawUtil; 42 var tcuSurface = framework.common.tcuSurface; 43 var tcuLogImage = framework.common.tcuLogImage; 44 var sglrShaderProgram = framework.opengl.simplereference.sglrShaderProgram; 45 var rrGenericVector = framework.referencerenderer.rrGenericVector; 46 var rrVertexAttrib = framework.referencerenderer.rrVertexAttrib; 47 var rrShadingContext = framework.referencerenderer.rrShadingContext; 48 var rrVertexPacket = framework.referencerenderer.rrVertexPacket; 49 var rrFragmentOperations = framework.referencerenderer.rrFragmentOperations; 50 var tcuRGBA = framework.common.tcuRGBA; 51 52 /** 53 * @constructor 54 * @extends {tcuTestCase.DeqpTest} 55 * @param {string} name 56 * @param {string} description 57 */ 58 sglrReferenceContextTest.ClearContext = function(name, description) { 59 tcuTestCase.DeqpTest.call(this, name, description); 60 }; 61 62 sglrReferenceContextTest.ClearContext.prototype = Object.create(tcuTestCase.DeqpTest.prototype); 63 sglrReferenceContextTest.ClearContext.prototype.constructor = sglrReferenceContextTest.ClearContext; 64 65 sglrReferenceContextTest.ClearContext.prototype.init = function() {}; 66 67 sglrReferenceContextTest.ClearContext.prototype.iterate = function() { 68 69 var width = 200; 70 var height = 188; 71 var samples = 1; 72 var limits = new sglrReferenceContext.ReferenceContextLimits(gl); 73 var format = new tcuPixelFormat.PixelFormat(8, 8, 8, 8); 74 var buffers = new sglrReferenceContext.ReferenceContextBuffers(format, 24, 8, width, height, samples); 75 var ctx = new sglrReferenceContext.ReferenceContext(limits, buffers.getColorbuffer(), buffers.getDepthbuffer(), buffers.getStencilbuffer()); 76 ctx.clearColor(1, 0, 0, 1); 77 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 78 var pixels = new tcuSurface.Surface(width, height); 79 ctx.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.getAccess().getDataPtr()); 80 81 var numFailedPixels = 0; 82 var redPixel = new gluDrawUtil.Pixel([255, 0, 0, 255]); 83 for (var x = 0; x < width; x++) 84 for (var y = 0; y < height; y++) { 85 var pixel = new gluDrawUtil.Pixel(pixels.getPixel(x, y)); 86 if (!pixel.equals(redPixel)) 87 numFailedPixels += 1; 88 } 89 90 var access = pixels.getAccess(); 91 92 tcuLogImage.logImage('Result', '', access); 93 94 if (numFailedPixels > 0) 95 testFailedOptions('Image comparison failed, got ' + numFailedPixels + ' non-equal pixels.', false); 96 else 97 testPassedOptions('Image comparison succeed', true); 98 99 ctx.scissor(width / 4, height / 4, width / 2, height / 2); 100 ctx.enable(gl.SCISSOR_TEST); 101 ctx.clearColor(0, 1, 1, 1); 102 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 103 ctx.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.getAccess().getDataPtr()); 104 105 numFailedPixels = 0; 106 var greenBluePixel = new gluDrawUtil.Pixel([0, 255, 255, 255]); 107 for (var x = 0; x < width; x++) 108 for (var y = 0; y < height; y++) { 109 var pixel = new gluDrawUtil.Pixel(pixels.getPixel(x, y)); 110 if ((x >= width / 4 && x < width - width / 4) && (y >= height / 4 && y < height - height / 4)) { 111 if (!pixel.equals(greenBluePixel)) 112 numFailedPixels += 1; 113 } else 114 if (!pixel.equals(redPixel)) 115 numFailedPixels += 1; 116 } 117 118 access = pixels.getAccess(); 119 120 tcuLogImage.logImage('Result', '', access); 121 122 if (numFailedPixels > 0) 123 testFailedOptions('Image comparison failed, got ' + numFailedPixels + ' non-equal pixels.', false); 124 else 125 testPassedOptions('Image comparison succeed', true); 126 127 return tcuTestCase.IterateResult.STOP; 128 }; 129 130 /** 131 * @constructor 132 * @extends {tcuTestCase.DeqpTest} 133 * @param {string} name 134 * @param {string} description 135 */ 136 sglrReferenceContextTest.Framebuffer = function(name, description) { 137 tcuTestCase.DeqpTest.call(this, name, description); 138 }; 139 140 sglrReferenceContextTest.Framebuffer.prototype = Object.create(tcuTestCase.DeqpTest.prototype); 141 sglrReferenceContextTest.Framebuffer.prototype.constructor = sglrReferenceContextTest.Framebuffer; 142 143 sglrReferenceContextTest.Framebuffer.prototype.init = function() {}; 144 145 sglrReferenceContextTest.Framebuffer.prototype.iterate = function() { 146 var limits = new sglrReferenceContext.ReferenceContextLimits(gl); 147 var format = new tcuPixelFormat.PixelFormat(8, 8, 8, 8); 148 var width = 200; 149 var height = 188; 150 var samples = 1; 151 var buffers = new sglrReferenceContext.ReferenceContextBuffers(format, 24, 8, width, height, samples); 152 var ctx = new sglrReferenceContext.ReferenceContext(limits, buffers.getColorbuffer(), buffers.getDepthbuffer(), buffers.getStencilbuffer()); 153 ctx.clearColor(0, 0, 1, 1); 154 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 155 var fbo = ctx.createFramebuffer(); 156 var rbo = ctx.createRenderbuffer(); 157 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo); 158 ctx.bindRenderbuffer(gl.RENDERBUFFER, rbo); 159 ctx.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA8, width, height); 160 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, rbo); 161 bufferedLogToConsole('Framebuffer status: ' + (ctx.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE)); 162 ctx.clearColor(1, 0, 0, 1); 163 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 164 var pixels = new tcuSurface.Surface(width, height); 165 ctx.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.getAccess().getDataPtr()); 166 var numFailedPixels = 0; 167 var redPixel = new gluDrawUtil.Pixel([255, 0, 0, 255]); 168 for (var x = 0; x < width; x++) 169 for (var y = 0; y < height; y++) { 170 var pixel = new gluDrawUtil.Pixel(pixels.getPixel(x, y)); 171 if (!pixel.equals(redPixel)) 172 numFailedPixels += 1; 173 } 174 var access = pixels.getAccess(); 175 tcuLogImage.logImage('Result', '', access); 176 177 if (numFailedPixels > 0) 178 testFailedOptions('Image comparison failed, got ' + numFailedPixels + ' non-equal pixels.', false); 179 else 180 testPassedOptions('Image comparison succeed', true); 181 182 ctx.scissor(width / 4, height / 4, width / 2, height / 2); 183 ctx.enable(gl.SCISSOR_TEST); 184 ctx.clearColor(0, 1, 1, 1); 185 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 186 ctx.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.getAccess().getDataPtr()); 187 188 numFailedPixels = 0; 189 var greenBluePixel = new gluDrawUtil.Pixel([0, 255, 255, 255]); 190 for (var x = 0; x < width; x++) 191 for (var y = 0; y < height; y++) { 192 var pixel = new gluDrawUtil.Pixel(pixels.getPixel(x, y)); 193 if ((x >= width / 4 && x < width - width / 4) && (y >= height / 4 && y < height - height / 4)) { 194 if (!pixel.equals(greenBluePixel)) 195 numFailedPixels += 1; 196 } else 197 if (!pixel.equals(redPixel)) 198 numFailedPixels += 1; 199 } 200 201 access = pixels.getAccess(); 202 203 tcuLogImage.logImage('Result', '', access); 204 205 if (numFailedPixels > 0) 206 testFailedOptions('Image comparison failed, got ' + numFailedPixels + ' non-equal pixels.', false); 207 else 208 testPassedOptions('Image comparison succeed', true); 209 210 ctx.bindFramebuffer(gl.FRAMEBUFFER, null); 211 ctx.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.getAccess().getDataPtr()); 212 213 var bluePixel = new gluDrawUtil.Pixel([0, 0, 255, 255]); 214 for (var x = 0; x < width; x++) 215 for (var y = 0; y < height; y++) { 216 var pixel = new gluDrawUtil.Pixel(pixels.getPixel(x, y)); 217 if (!pixel.equals(bluePixel)) 218 numFailedPixels += 1; 219 } 220 access = pixels.getAccess(); 221 tcuLogImage.logImage('Result', '', access); 222 223 if (numFailedPixels > 0) 224 testFailedOptions('Image comparison failed, got ' + numFailedPixels + ' non-equal pixels.', false); 225 else 226 testPassedOptions('Image comparison succeed', true); 227 228 return tcuTestCase.IterateResult.STOP; 229 }; 230 231 /** 232 * @constructor 233 * @extends {tcuTestCase.DeqpTest} 234 * @param {string} name 235 * @param {string} description 236 */ 237 sglrReferenceContextTest.Shader = function(name, description) { 238 tcuTestCase.DeqpTest.call(this, name, description); 239 }; 240 241 sglrReferenceContextTest.Shader.prototype = Object.create(tcuTestCase.DeqpTest.prototype); 242 sglrReferenceContextTest.Shader.prototype.constructor = sglrReferenceContextTest.Shader; 243 244 sglrReferenceContextTest.Shader.prototype.init = function() {}; 245 246 sglrReferenceContextTest.Shader.prototype.iterate = function() { 247 var limits = new sglrReferenceContext.ReferenceContextLimits(gl); 248 var format = new tcuPixelFormat.PixelFormat(8, 8, 8, 8); 249 var width = 200; 250 var height = 188; 251 var samples = 1; 252 var buffers = new sglrReferenceContext.ReferenceContextBuffers(format, 24, 8, width, height, samples); 253 var ctx = new sglrReferenceContext.ReferenceContext(limits, buffers.getColorbuffer(), buffers.getDepthbuffer(), buffers.getStencilbuffer()); 254 ctx.clearColor(0, 0, 1, 1); 255 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 256 257 var vertices = [ 258 -0.5, 0.5, 259 0.5, 0.5, 260 -0.5, -0.5, 261 0.5, 0.5, 262 0.5, -0.5, 263 -0.5, -0.5 264 ]; 265 266 var vertices32 = new Float32Array(vertices); 267 268 var squareVerticesBuffer = ctx.createBuffer(); 269 ctx.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer); 270 ctx.bufferData(gl.ARRAY_BUFFER, vertices32, gl.STATIC_DRAW); 271 272 var colors = [ 273 1, 0, 0, 1, 274 1, 0, 0, 1, 275 1, 0, 0, 1, 276 1, 0, 0, 1, 277 1, 0, 0, 1, 278 1, 0, 0, 1 279 ]; 280 281 var colors32 = new Float32Array(colors); 282 283 var squareColorsBuffer = ctx.createBuffer(); 284 ctx.bindBuffer(gl.ARRAY_BUFFER, squareColorsBuffer); 285 ctx.bufferData(gl.ARRAY_BUFFER, colors32, gl.STATIC_DRAW); 286 287 /** @type {sglrShaderProgram.ShaderProgramDeclaration} */ var progDecl = new sglrShaderProgram.ShaderProgramDeclaration(); 288 289 progDecl.pushVertexAttribute(new sglrShaderProgram.VertexAttribute('aVertexPosition', rrGenericVector.GenericVecType.FLOAT)); 290 291 progDecl.pushVertexAttribute(new sglrShaderProgram.VertexAttribute('aVertexColor', rrGenericVector.GenericVecType.FLOAT)); 292 293 progDecl.pushVertexSource(new sglrShaderProgram.VertexSource('')); 294 295 progDecl.pushFragmentOutput(new sglrShaderProgram.FragmentOutput(rrGenericVector.GenericVecType.FLOAT)); 296 297 progDecl.pushFragmentSource(new sglrShaderProgram.FragmentSource('')); 298 299 /** @type {sglrReferenceContextTest.ContextShaderProgram} */ var program = new sglrReferenceContextTest.ContextShaderProgram(progDecl); 300 301 //Create program 302 ctx.createProgram(program); 303 304 //Use program 305 ctx.useProgram(program); 306 307 var vertexPositionAttribute = ctx.getAttribLocation(program, 'aVertexPosition'); 308 var vertexColorAttribute = ctx.getAttribLocation(program, 'aVertexColor'); 309 ctx.enableVertexAttribArray(vertexPositionAttribute); 310 ctx.enableVertexAttribArray(vertexColorAttribute); 311 312 ctx.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer); 313 ctx.vertexAttribPointer(vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); 314 315 ctx.bindBuffer(gl.ARRAY_BUFFER, squareColorsBuffer); 316 ctx.vertexAttribPointer(vertexColorAttribute, 4, gl.FLOAT, false, 0, 0); 317 318 ctx.drawQuads(gl.TRIANGLES, 0, 6); 319 320 var pixels = new tcuSurface.Surface(width, height); 321 ctx.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.getAccess().getDataPtr()); 322 323 var numFailedPixels = 0; 324 325 var redPixel = new gluDrawUtil.Pixel([255, 0, 0, 255]); 326 var bluePixel = new gluDrawUtil.Pixel([0, 0, 255, 255]); 327 328 var pixel = new gluDrawUtil.Pixel(pixels.getPixel(0, 0)); 329 if (!pixel.equals(bluePixel)) 330 numFailedPixels += 1; 331 332 pixel = new gluDrawUtil.Pixel(pixels.getPixel(100, 94)); 333 if (!pixel.equals(redPixel)) 334 numFailedPixels += 1; 335 336 var access = pixels.getAccess(); 337 338 tcuLogImage.logImage('Result', '', access); 339 340 if (numFailedPixels > 0) 341 testFailedOptions('Image comparison failed, got ' + numFailedPixels + ' non-equal pixels.', false); 342 else 343 testPassedOptions('Image comparison succeed', true); 344 345 return tcuTestCase.IterateResult.STOP; 346 }; 347 348 /** 349 * @constructor 350 * @extends {tcuTestCase.DeqpTest} 351 * @param {string} name 352 * @param {string} description 353 */ 354 sglrReferenceContextTest.TriangleStrip = function(name, description) { 355 tcuTestCase.DeqpTest.call(this, name, description); 356 }; 357 358 sglrReferenceContextTest.TriangleStrip.prototype = Object.create(tcuTestCase.DeqpTest.prototype); 359 sglrReferenceContextTest.TriangleStrip.prototype.constructor = sglrReferenceContextTest.TriangleStrip; 360 361 sglrReferenceContextTest.TriangleStrip.prototype.init = function() {}; 362 363 sglrReferenceContextTest.TriangleStrip.prototype.iterate = function() { 364 var limits = new sglrReferenceContext.ReferenceContextLimits(gl); 365 var format = new tcuPixelFormat.PixelFormat(8, 8, 8, 8); 366 var width = 200; 367 var height = 188; 368 var samples = 1; 369 var buffers = new sglrReferenceContext.ReferenceContextBuffers(format, 24, 8, width, height, samples); 370 var ctx = new sglrReferenceContext.ReferenceContext(limits, buffers.getColorbuffer(), buffers.getDepthbuffer(), buffers.getStencilbuffer()); 371 ctx.clearColor(0, 0, 1, 1); 372 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 373 374 var vertices = [ 375 -0.5, 0.5, 376 0.5, 0.5, 377 -0.5, 0, 378 0.5, 0, 379 -0.5, -0.5, 380 0.5, -0.5 381 ]; 382 383 var vertices32 = new Float32Array(vertices); 384 385 var squareVerticesBuffer = ctx.createBuffer(); 386 ctx.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer); 387 ctx.bufferData(gl.ARRAY_BUFFER, vertices32, gl.STATIC_DRAW); 388 389 var colors = [ 390 1, 0, 0, 1, 391 1, 0, 0, 1, 392 1, 0, 0, 1, 393 1, 0, 0, 1, 394 1, 0, 0, 1, 395 1, 0, 0, 1 396 ]; 397 398 var colors32 = new Float32Array(colors); 399 400 var squareColorsBuffer = ctx.createBuffer(); 401 ctx.bindBuffer(gl.ARRAY_BUFFER, squareColorsBuffer); 402 ctx.bufferData(gl.ARRAY_BUFFER, colors32, gl.STATIC_DRAW); 403 404 /** @type {sglrShaderProgram.ShaderProgramDeclaration} */ var progDecl = new sglrShaderProgram.ShaderProgramDeclaration(); 405 406 progDecl.pushVertexAttribute(new sglrShaderProgram.VertexAttribute('aVertexPosition', rrGenericVector.GenericVecType.FLOAT)); 407 408 progDecl.pushVertexAttribute(new sglrShaderProgram.VertexAttribute('aVertexColor', rrGenericVector.GenericVecType.FLOAT)); 409 410 progDecl.pushVertexSource(new sglrShaderProgram.VertexSource('')); 411 412 progDecl.pushFragmentOutput(new sglrShaderProgram.FragmentOutput(rrGenericVector.GenericVecType.FLOAT)); 413 414 progDecl.pushFragmentSource(new sglrShaderProgram.FragmentSource('')); 415 416 /** @type {sglrReferenceContextTest.ContextShaderProgram} */ var program = new sglrReferenceContextTest.ContextShaderProgram(progDecl); 417 418 //Create program 419 ctx.createProgram(program); 420 421 //Use program 422 ctx.useProgram(program); 423 424 var vertexPositionAttribute = ctx.getAttribLocation(program, 'aVertexPosition'); 425 var vertexColorAttribute = ctx.getAttribLocation(program, 'aVertexColor'); 426 ctx.enableVertexAttribArray(vertexPositionAttribute); 427 ctx.enableVertexAttribArray(vertexColorAttribute); 428 429 ctx.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer); 430 ctx.vertexAttribPointer(vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); 431 432 ctx.bindBuffer(gl.ARRAY_BUFFER, squareColorsBuffer); 433 ctx.vertexAttribPointer(vertexColorAttribute, 4, gl.FLOAT, false, 0, 0); 434 435 ctx.drawQuads(gl.TRIANGLE_STRIP, 0, 6); 436 437 var pixels = new tcuSurface.Surface(width, height); 438 ctx.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.getAccess().getDataPtr()); 439 440 var numFailedPixels = 0; 441 442 var redPixel = new gluDrawUtil.Pixel([255, 0, 0, 255]); 443 var bluePixel = new gluDrawUtil.Pixel([0, 0, 255, 255]); 444 445 var pixel = new gluDrawUtil.Pixel(pixels.getPixel(0, 0)); 446 if (!pixel.equals(bluePixel)) 447 numFailedPixels += 1; 448 449 pixel = new gluDrawUtil.Pixel(pixels.getPixel(100, 94)); 450 if (!pixel.equals(redPixel)) 451 numFailedPixels += 1; 452 453 var access = pixels.getAccess(); 454 455 tcuLogImage.logImage('Result', '', access); 456 457 if (numFailedPixels > 0) 458 testFailedOptions('Image comparison failed, got ' + numFailedPixels + ' non-equal pixels.', false); 459 else 460 testPassedOptions('Image comparison succeed', true); 461 462 return tcuTestCase.IterateResult.STOP; 463 }; 464 465 /** 466 * @constructor 467 * @extends {tcuTestCase.DeqpTest} 468 * @param {string} name 469 * @param {string} description 470 */ 471 sglrReferenceContextTest.TriangleFan = function(name, description) { 472 tcuTestCase.DeqpTest.call(this, name, description); 473 }; 474 475 sglrReferenceContextTest.TriangleFan.prototype = Object.create(tcuTestCase.DeqpTest.prototype); 476 sglrReferenceContextTest.TriangleFan.prototype.constructor = sglrReferenceContextTest.TriangleFan; 477 478 sglrReferenceContextTest.TriangleFan.prototype.init = function() {}; 479 480 sglrReferenceContextTest.TriangleFan.prototype.iterate = function() { 481 var limits = new sglrReferenceContext.ReferenceContextLimits(gl); 482 var format = new tcuPixelFormat.PixelFormat(8, 8, 8, 8); 483 var width = 200; 484 var height = 188; 485 var samples = 1; 486 var buffers = new sglrReferenceContext.ReferenceContextBuffers(format, 24, 8, width, height, samples); 487 var ctx = new sglrReferenceContext.ReferenceContext(limits, buffers.getColorbuffer(), buffers.getDepthbuffer(), buffers.getStencilbuffer()); 488 ctx.clearColor(0, 0, 1, 1); 489 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 490 491 var vertices = [ 492 -0.5, 0, 493 -0.5, 0.5, 494 0.5, 0.5, 495 0.5, 0, 496 0.5, -0.5, 497 -0.5, -0.5 498 ]; 499 500 var vertices32 = new Float32Array(vertices); 501 502 var squareVerticesBuffer = ctx.createBuffer(); 503 ctx.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer); 504 ctx.bufferData(gl.ARRAY_BUFFER, vertices32, gl.STATIC_DRAW); 505 506 var colors = [ 507 1, 0, 0, 1, 508 1, 0, 0, 1, 509 1, 0, 0, 1, 510 1, 0, 0, 1, 511 1, 0, 0, 1, 512 1, 0, 0, 1 513 ]; 514 515 var colors32 = new Float32Array(colors); 516 517 var squareColorsBuffer = ctx.createBuffer(); 518 ctx.bindBuffer(gl.ARRAY_BUFFER, squareColorsBuffer); 519 ctx.bufferData(gl.ARRAY_BUFFER, colors32, gl.STATIC_DRAW); 520 521 /** @type {sglrShaderProgram.ShaderProgramDeclaration} */ var progDecl = new sglrShaderProgram.ShaderProgramDeclaration(); 522 523 progDecl.pushVertexAttribute(new sglrShaderProgram.VertexAttribute('aVertexPosition', rrGenericVector.GenericVecType.FLOAT)); 524 525 progDecl.pushVertexAttribute(new sglrShaderProgram.VertexAttribute('aVertexColor', rrGenericVector.GenericVecType.FLOAT)); 526 527 progDecl.pushVertexSource(new sglrShaderProgram.VertexSource('')); 528 529 progDecl.pushFragmentOutput(new sglrShaderProgram.FragmentOutput(rrGenericVector.GenericVecType.FLOAT)); 530 531 progDecl.pushFragmentSource(new sglrShaderProgram.FragmentSource('')); 532 533 /** @type {sglrReferenceContextTest.ContextShaderProgram} */ var program = new sglrReferenceContextTest.ContextShaderProgram(progDecl); 534 535 //Create program 536 ctx.createProgram(program); 537 538 //Use program 539 ctx.useProgram(program); 540 541 var vertexPositionAttribute = ctx.getAttribLocation(program, 'aVertexPosition'); 542 var vertexColorAttribute = ctx.getAttribLocation(program, 'aVertexColor'); 543 ctx.enableVertexAttribArray(vertexPositionAttribute); 544 ctx.enableVertexAttribArray(vertexColorAttribute); 545 546 ctx.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer); 547 ctx.vertexAttribPointer(vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); 548 549 ctx.bindBuffer(gl.ARRAY_BUFFER, squareColorsBuffer); 550 ctx.vertexAttribPointer(vertexColorAttribute, 4, gl.FLOAT, false, 0, 0); 551 552 ctx.drawQuads(gl.TRIANGLE_FAN, 0, 6); 553 554 var pixels = new tcuSurface.Surface(width, height); 555 ctx.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.getAccess().getDataPtr()); 556 557 var numFailedPixels = 0; 558 559 var redPixel = new gluDrawUtil.Pixel([255, 0, 0, 255]); 560 var bluePixel = new gluDrawUtil.Pixel([0, 0, 255, 255]); 561 562 var pixel = new gluDrawUtil.Pixel(pixels.getPixel(0, 0)); 563 if (!pixel.equals(bluePixel)) 564 numFailedPixels += 1; 565 566 pixel = new gluDrawUtil.Pixel(pixels.getPixel(100, 94)); 567 if (!pixel.equals(redPixel)) 568 numFailedPixels += 1; 569 570 var access = pixels.getAccess(); 571 572 tcuLogImage.logImage('Result', '', access); 573 574 if (numFailedPixels > 0) 575 testFailedOptions('Image comparison failed, got ' + numFailedPixels + ' non-equal pixels.', false); 576 else 577 testPassedOptions('Image comparison succeed', true); 578 579 return tcuTestCase.IterateResult.STOP; 580 }; 581 582 /** 583 * @constructor 584 * @extends {tcuTestCase.DeqpTest} 585 * @param {string} name 586 * @param {string} description 587 */ 588 sglrReferenceContextTest.DrawElements = function(name, description) { 589 tcuTestCase.DeqpTest.call(this, name, description); 590 }; 591 592 sglrReferenceContextTest.DrawElements.prototype = Object.create(tcuTestCase.DeqpTest.prototype); 593 sglrReferenceContextTest.DrawElements.prototype.constructor = sglrReferenceContextTest.DrawElements; 594 595 sglrReferenceContextTest.DrawElements.prototype.init = function() {}; 596 597 sglrReferenceContextTest.DrawElements.prototype.iterate = function() { 598 var limits = new sglrReferenceContext.ReferenceContextLimits(gl); 599 var format = new tcuPixelFormat.PixelFormat(8, 8, 8, 8); 600 var width = 200; 601 var height = 188; 602 var samples = 1; 603 var buffers = new sglrReferenceContext.ReferenceContextBuffers(format, 24, 8, width, height, samples); 604 var ctx = new sglrReferenceContext.ReferenceContext(limits, buffers.getColorbuffer(), buffers.getDepthbuffer(), buffers.getStencilbuffer()); 605 ctx.clearColor(0, 0, 1, 1); 606 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 607 608 var vertices = [ 609 -0.5, 0.5, 610 0, 0.5, 611 0.4, 0.5, 612 613 -0.5, 0.1, 614 0, 0.1, 615 0.4, 0.1, 616 617 -0.5, -0.7, 618 0, -0.7, 619 0.4, -0.7 620 ]; 621 622 var vertices32 = new Float32Array(vertices); 623 624 var squareVerticesBuffer = ctx.createBuffer(); 625 ctx.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer); 626 ctx.bufferData(gl.ARRAY_BUFFER, vertices32, gl.STATIC_DRAW); 627 628 var indices = [ 629 0, 1, 3, 1, 3, 4, 630 1, 2, 4, 2, 4, 5, 631 3, 4, 6, 4, 6, 7, 632 4, 5, 7, 5, 7, 8 633 ]; 634 var indicesBuffer = ctx.createBuffer(); 635 ctx.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indicesBuffer); 636 ctx.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW); 637 638 var colors = [ 639 1, 0, 0, 1, 640 0, 1, 0, 1, 641 0, 0, 1, 1, 642 1, 1, 1, 1, 643 1, 1, 0, 1, 644 0, 1, 1, 1, 645 1, 0, 1, 1, 646 0.5, 0.5, 0.5, 1, 647 0, 0, 0, 0 648 ]; 649 650 var colors32 = new Float32Array(colors); 651 652 var squareColorsBuffer = ctx.createBuffer(); 653 ctx.bindBuffer(gl.ARRAY_BUFFER, squareColorsBuffer); 654 ctx.bufferData(gl.ARRAY_BUFFER, colors32, gl.STATIC_DRAW); 655 656 /** @type {sglrShaderProgram.ShaderProgramDeclaration} */ var progDecl = new sglrShaderProgram.ShaderProgramDeclaration(); 657 658 progDecl.pushVertexAttribute(new sglrShaderProgram.VertexAttribute('aVertexPosition', rrGenericVector.GenericVecType.FLOAT)); 659 660 progDecl.pushVertexAttribute(new sglrShaderProgram.VertexAttribute('aVertexColor', rrGenericVector.GenericVecType.FLOAT)); 661 662 progDecl.pushVertexSource(new sglrShaderProgram.VertexSource('')); 663 664 progDecl.pushFragmentOutput(new sglrShaderProgram.FragmentOutput(rrGenericVector.GenericVecType.FLOAT)); 665 666 progDecl.pushFragmentSource(new sglrShaderProgram.FragmentSource('')); 667 668 /** @type {sglrReferenceContextTest.ContextShaderProgram} */ var program = new sglrReferenceContextTest.ContextShaderProgram(progDecl); 669 670 //Create program 671 ctx.createProgram(program); 672 673 //Use program 674 ctx.useProgram(program); 675 676 var vertexPositionAttribute = ctx.getAttribLocation(program, 'aVertexPosition'); 677 var vertexColorAttribute = ctx.getAttribLocation(program, 'aVertexColor'); 678 ctx.enableVertexAttribArray(vertexPositionAttribute); 679 ctx.enableVertexAttribArray(vertexColorAttribute); 680 681 ctx.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer); 682 ctx.vertexAttribPointer(vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); 683 684 ctx.bindBuffer(gl.ARRAY_BUFFER, squareColorsBuffer); 685 ctx.vertexAttribPointer(vertexColorAttribute, 4, gl.FLOAT, false, 0, 0); 686 687 ctx.drawElements(gl.TRIANGLES, indices.length, gl.UNSIGNED_SHORT, 0); 688 689 var pixels = new tcuSurface.Surface(width, height); 690 ctx.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels.getAccess().getDataPtr()); 691 692 var numFailedPixels = 0; 693 694 var access = pixels.getAccess(); 695 696 var pixelsTotest = [ 697 // location, color 698 [2, 1], [0, 0, 255, 255], 699 // The red vertex is between 140 and 141 so account for some blending with the white vertex 700 [50, 140], [255, 5, 5, 255], 701 [50, 28], [255, 0, 255, 255], 702 [139, 28], [0, 0, 0, 255], 703 [50, 102], [255, 255, 255, 255], 704 [139, 102], [0, 255, 255, 255] 705 ]; 706 707 var threshold = new tcuRGBA.RGBA([5, 5, 5, 5]); 708 709 for (var i = 0; i < pixelsTotest.length; i += 2) { 710 var location = pixelsTotest[i]; 711 var reference = new tcuRGBA.RGBA(pixelsTotest[i + 1]); 712 var color = access.getPixelInt(location[0], location[1]); 713 var pixel = new tcuRGBA.RGBA(color); 714 if (!tcuRGBA.compareThreshold(pixel, reference, threshold)) 715 numFailedPixels++; 716 } 717 718 tcuLogImage.logImage('Result', '', access); 719 720 if (numFailedPixels > 0) 721 testFailedOptions('Image comparison failed, got ' + numFailedPixels + ' non-equal pixels.', false); 722 else 723 testPassedOptions('Image comparison succeed', true); 724 725 return tcuTestCase.IterateResult.STOP; 726 }; 727 728 /** 729 * @constructor 730 * @extends {sglrShaderProgram.ShaderProgram} 731 * @param {sglrShaderProgram.ShaderProgramDeclaration} progDecl 732 */ 733 sglrReferenceContextTest.ContextShaderProgram = function(progDecl) { 734 sglrShaderProgram.ShaderProgram.call(this, progDecl); 735 }; 736 737 sglrReferenceContextTest.ContextShaderProgram.prototype = Object.create(sglrShaderProgram.ShaderProgram.prototype); 738 sglrReferenceContextTest.ContextShaderProgram.prototype.constructor = sglrReferenceContextTest.ContextShaderProgram; 739 740 /** 741 * @param {Array<rrVertexAttrib.VertexAttrib>} inputs 742 * @param {Array<rrVertexPacket.VertexPacket>} packets 743 * @param {number} numPackets 744 */ 745 sglrReferenceContextTest.ContextShaderProgram.prototype.shadeVertices = function(inputs, packets, numPackets) { 746 for (var packetNdx = 0; packetNdx < numPackets; ++packetNdx) { 747 /** @type {number} */ var varyingLocColor = 0; 748 749 /** @type {rrVertexPacket.VertexPacket} */ var packet = packets[packetNdx]; 750 751 // Calc output color 752 /** @type {Array<number>} */ var coord = [1.0, 1.0]; 753 /** @type {Array<number>} */ var color = [1.0, 1.0, 1.0]; 754 755 for (var attribNdx = 0; attribNdx < this.getVertexShader().getInputs().length; attribNdx++) { 756 /** @type {number} */ var numComponents = inputs[attribNdx].componentCount; 757 758 var attribValue = rrVertexAttrib.readVertexAttrib(inputs[attribNdx], packet.instanceNdx, packet.vertexNdx, this.getVertexShader().getInputs()[attribNdx].type); 759 760 if (attribNdx == 0) { 761 coord[0] = attribValue[0]; 762 coord[1] = attribValue[1]; 763 } else { 764 color[0] = attribValue[0] * attribValue[3]; 765 color[1] = attribValue[1] * attribValue[3]; 766 color[2] = attribValue[2] * attribValue[3]; 767 } 768 } 769 770 // Transform position 771 packet.position = [coord[0], coord[1], 1.0, 1.0]; 772 773 // Pass color to FS 774 packet.outputs[varyingLocColor] = [color[0], color[1], color[2], 1.0]; 775 } 776 }; 777 778 /** 779 * @param {Array<rrFragmentOperations.Fragment>} packets 780 * @param {rrShadingContext.FragmentShadingContext} context 781 */ 782 sglrReferenceContextTest.ContextShaderProgram.prototype.shadeFragments = function(packets, context) { 783 var varyingLocColor = 0; 784 785 // Normal shading 786 for (var packetNdx = 0; packetNdx < packets.length; ++packetNdx) 787 packets[packetNdx].value = rrShadingContext.readTriangleVarying(packets[packetNdx], context, varyingLocColor); 788 }; 789 790 sglrReferenceContextTest.init = function() { 791 var state = tcuTestCase.runner; 792 /** @type {tcuTestCase.DeqpTest} */ var testGroup = state.testCases; 793 794 /** @type {tcuTestCase.DeqpTest} */ var referenceContextGroup = tcuTestCase.newTest('reference_context', 'Test reference context'); 795 796 referenceContextGroup.addChild(new sglrReferenceContextTest.ClearContext('clear_context', 'Clear Context Test')); 797 referenceContextGroup.addChild(new sglrReferenceContextTest.Framebuffer('Framebuffer', 'Framebuffer Test')); 798 referenceContextGroup.addChild(new sglrReferenceContextTest.Shader('Shaders', 'Drawing using TRIANGLES')); 799 referenceContextGroup.addChild(new sglrReferenceContextTest.TriangleStrip('TriangleStrip', 'Drawing using TRIANGLE_STRIP')); 800 referenceContextGroup.addChild(new sglrReferenceContextTest.TriangleFan('TriangleFan', 'Drawing using TRIANGLE_FAN')); 801 referenceContextGroup.addChild(new sglrReferenceContextTest.DrawElements('DrawElements', 'Drawing using DrawElements and TRIANGLES')); 802 803 testGroup.addChild(referenceContextGroup); 804 805 }; 806 807 sglrReferenceContextTest.run = function(context) { 808 gl = context; 809 //Set up Test Root parameters 810 var testName = 'single_reference_context'; 811 var testDescription = 'Single Reference Context Tests'; 812 var state = tcuTestCase.runner; 813 814 state.testName = testName; 815 state.testCases = tcuTestCase.newTest(testName, testDescription, null); 816 817 //Set up name and description of this test series. 818 setCurrentTestName(testName); 819 description(testDescription); 820 821 try { 822 //Create test cases 823 sglrReferenceContextTest.init(); 824 //Run test cases 825 tcuTestCase.runTestCases(); 826 } 827 catch (err) { 828 bufferedLogToConsole(err); 829 tcuTestCase.runner.terminate(); 830 } 831 832 }; 833 834 });