Bug 1945965 – remove new tab April Fools logo. r=home-newtab-reviewers,reemhamz
[gecko.git] / dom / canvas / test / webgl-conf / checkout / deqp / modules / shared / glsSamplerObjectTest.js
blob0d4030bd911c9f440621f9892af2b51584ec4d9e
1 /*-------------------------------------------------------------------------
2 * drawElements Quality Program OpenGL ES Utilities
3 * ------------------------------------------------
5 * Copyright 2014 The Android Open Source Project
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 'use strict';
22 goog.provide('modules.shared.glsSamplerObjectTest');
23 goog.require('framework.common.tcuImageCompare');
24 goog.require('framework.common.tcuSurface');
25 goog.require('framework.common.tcuTestCase');
26 goog.require('framework.common.tcuTexture');
27 goog.require('framework.common.tcuTextureUtil');
28 goog.require('framework.delibs.debase.deRandom');
29 goog.require('framework.delibs.debase.deString');
30 goog.require('framework.opengl.gluDrawUtil');
31 goog.require('framework.opengl.gluShaderProgram');
32 goog.require('framework.opengl.gluTextureUtil');
34 goog.scope(function() {
36 var glsSamplerObjectTest = modules.shared.glsSamplerObjectTest;
37 var tcuTestCase = framework.common.tcuTestCase;
38 var deRandom = framework.delibs.debase.deRandom;
39 var gluShaderProgram = framework.opengl.gluShaderProgram;
40 var tcuTexture = framework.common.tcuTexture;
41 var tcuSurface = framework.common.tcuSurface;
42 var tcuTextureUtil = framework.common.tcuTextureUtil;
43 var tcuImageCompare = framework.common.tcuImageCompare;
44 var gluDrawUtil = framework.opengl.gluDrawUtil;
45 var gluTextureUtil = framework.opengl.gluTextureUtil;
46 var deString = framework.delibs.debase.deString;
48 var DE_ASSERT = function(expression) {
49 if (!expression) throw new Error('Assert failed');
52 // glsSamplerObjectTest.TextureSamplerTest
54 /** @const @type {number} */ glsSamplerObjectTest.VIEWPORT_WIDTH = 128;
55 /** @const @type {number} */ glsSamplerObjectTest.VIEWPORT_HEIGHT = 128;
57 /** @const @type {number} */ glsSamplerObjectTest.TEXTURE2D_WIDTH = 32;
58 /** @const @type {number} */ glsSamplerObjectTest.TEXTURE2D_HEIGHT = 32;
60 /** @const @type {number} */ glsSamplerObjectTest.TEXTURE3D_WIDTH = 32;
61 /** @const @type {number} */ glsSamplerObjectTest.TEXTURE3D_HEIGHT = 32;
62 /** @const @type {number} */ glsSamplerObjectTest.TEXTURE3D_DEPTH = 32;
64 /** @const @type {number} */ glsSamplerObjectTest.CUBEMAP_SIZE = 32;
66 /** @const @type {Array<number>} */ glsSamplerObjectTest.s_positions = [
67 -1.0, -1.0,
68 1.0, -1.0,
69 1.0, 1.0,
70 1.0, 1.0,
71 -1.0, 1.0,
72 -1.0, -1.0
75 /** @const @type {Array<number>} */ glsSamplerObjectTest.s_positions3D = [
76 -1.0, -1.0, -1.0,
77 1.0, -1.0, 1.0,
78 1.0, 1.0, -1.0,
79 1.0, 1.0, -1.0,
80 -1.0, 1.0, 1.0,
81 -1.0, -1.0, -1.0
84 /** @const @type {Array<number>} */ glsSamplerObjectTest.s_positionsCube = [
85 -1.0, -1.0, -1.0, -0.5,
86 1.0, -1.0, 1.0, -0.5,
87 1.0, 1.0, 1.0, 0.5,
88 1.0, 1.0, 1.0, 0.5,
89 -1.0, 1.0, -1.0, 0.5,
90 -1.0, -1.0, -1.0, -0.5
93 /**
94 * @struct
95 * @constructor
97 glsSamplerObjectTest.SamplingState = function(minFilter, magFilter, wrapT, wrapS, wrapR, minLod, maxLod) {
98 /** @type {number} */ this.minFilter = minFilter;
99 /** @type {number} */ this.magFilter = magFilter;
100 /** @type {number} */ this.wrapT = wrapT;
101 /** @type {number} */ this.wrapS = wrapS;
102 /** @type {number} */ this.wrapR = wrapR;
103 /** @type {number} */ this.minLod = minLod;
104 /** @type {number} */ this.maxLod = maxLod;
108 * @struct
109 * @param {string} name
110 * @param {string} desc
111 * @param {number} target
112 * @param {glsSamplerObjectTest.SamplingState} state1
113 * @param {glsSamplerObjectTest.SamplingState} state2
114 * @param {glsSamplerObjectTest.SamplingState=} state3
115 * @constructor
117 glsSamplerObjectTest.TestSpec = function(name, desc, target, state1, state2, state3) {
118 /** @type {string} */ this.name = name;
119 /** @type {string} */ this.desc = desc;
120 /** @type {number} */ this.target = target;
121 /** @type {glsSamplerObjectTest.SamplingState} */ this.textureState = state1;
122 /** @type {glsSamplerObjectTest.SamplingState} */ this.textureState2 = state3 !== undefined ? state2 : null; // merging TST and MTST structs
123 /** @type {glsSamplerObjectTest.SamplingState} */ this.samplerState = state3 !== undefined ? state3 : state2;
127 * @constructor
128 * @extends {tcuTestCase.DeqpTest}
129 * @const @param {glsSamplerObjectTest.TestSpec} spec
131 glsSamplerObjectTest.TextureSamplerTest = function(spec) {
132 tcuTestCase.DeqpTest.call(this, spec.name, spec.desc);
133 /** @type {gluShaderProgram.ShaderProgram} */ this.m_program = null;
134 /** @type {number} */ this.m_target = spec.target;
135 /** @type {glsSamplerObjectTest.SamplingState} */ this.m_textureState = spec.textureState;
136 /** @type {glsSamplerObjectTest.SamplingState} */ this.m_samplerState = spec.samplerState;
137 /** @type {deRandom.Random} */ this.m_random = new deRandom.Random(deString.deStringHash(spec.name));
140 glsSamplerObjectTest.TextureSamplerTest.prototype = Object.create(tcuTestCase.DeqpTest.prototype);
141 glsSamplerObjectTest.TextureSamplerTest.prototype.constructor = glsSamplerObjectTest.TextureSamplerTest;
144 * @private
145 * @param {tcuSurface.Surface} textureRef
146 * @param {tcuSurface.Surface} samplerRef
147 * @param {number} x
148 * @param {number} y
150 glsSamplerObjectTest.TextureSamplerTest.prototype.renderReferences = function(textureRef, samplerRef, x, y) {
151 /** @type {WebGLTexture} */ var texture = glsSamplerObjectTest.TextureSamplerTest.createTexture(this.m_target);
153 gl.viewport(x, y, glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
155 gl.bindTexture(this.m_target, texture);
157 glsSamplerObjectTest.TextureSamplerTest.setTextureState(this.m_target, this.m_textureState);
158 this.render();
159 var texRef = textureRef.getAccess();
160 var texRefTransferFormat = gluTextureUtil.getTransferFormat(texRef.getFormat());
161 gl.readPixels(x, y, texRef.m_width, texRef.m_height, texRefTransferFormat.format, texRefTransferFormat.dataType, textureRef.m_pixels);
163 glsSamplerObjectTest.TextureSamplerTest.setTextureState(this.m_target, this.m_samplerState);
164 this.render();
165 var sampRef = samplerRef.getAccess();
166 var sampRefTransferFormat = gluTextureUtil.getTransferFormat(sampRef.getFormat());
167 gl.readPixels(x, y, sampRef.m_width, sampRef.m_height, sampRefTransferFormat.format, sampRefTransferFormat.dataType, samplerRef.m_pixels);
169 gl.deleteTexture(texture);
173 * @private
174 * @param {tcuSurface.Surface} textureResult
175 * @param {tcuSurface.Surface} samplerResult
176 * @param {number} x
177 * @param {number} y
179 glsSamplerObjectTest.TextureSamplerTest.prototype.renderResults = function(textureResult, samplerResult, x, y) {
180 /** @type {WebGLTexture} */ var texture = glsSamplerObjectTest.TextureSamplerTest.createTexture(this.m_target);
182 gl.viewport(x, y, glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
184 var sampler = gl.createSampler();
185 DE_ASSERT(sampler != -1);
187 gl.bindSampler(0, sampler);
189 // First set sampler state
190 glsSamplerObjectTest.TextureSamplerTest.setSamplerState(this.m_samplerState, sampler);
192 // Set texture state
193 gl.bindTexture(this.m_target, texture);
195 glsSamplerObjectTest.TextureSamplerTest.setTextureState(this.m_target, this.m_textureState);
196 // Render using sampler
197 this.render();
198 var sampRes = samplerResult.getAccess();
199 var sampResTransferFormat = gluTextureUtil.getTransferFormat(sampRes.getFormat());
200 gl.readPixels(x, y, sampRes.m_width, sampRes.m_height, sampResTransferFormat.format, sampResTransferFormat.dataType, samplerResult.m_pixels);
202 // Render without sampler
203 gl.bindSampler(0, null);
204 gl.deleteSampler(sampler);
206 this.render();
207 var texRes = textureResult.getAccess();
208 var texResTransferFormat = gluTextureUtil.getTransferFormat(texRes.getFormat());
209 gl.readPixels(x, y, texRes.m_width, texRes.m_height, texResTransferFormat.format, texResTransferFormat.dataType, textureResult.m_pixels);
211 gl.deleteSampler(sampler);
212 gl.deleteTexture(texture);
216 * @private
218 glsSamplerObjectTest.TextureSamplerTest.prototype.render = function() {
219 /** @type {WebGLUniformLocation} */ var samplerLoc;
220 /** @type {WebGLUniformLocation} */ var scaleLoc;
222 gl.useProgram(this.m_program.getProgram());
224 samplerLoc = gl.getUniformLocation(this.m_program.getProgram(), 'u_sampler');
225 DE_ASSERT(samplerLoc != null);
227 scaleLoc = gl.getUniformLocation(this.m_program.getProgram(), 'u_posScale');
228 DE_ASSERT(scaleLoc != null);
230 gl.clearColor(0.5, 0.5, 0.5, 1.0);
232 gl.clear(gl.COLOR_BUFFER_BIT);
234 gl.uniform1i(samplerLoc, 0);
236 gl.uniform1f(scaleLoc, 1.0);
238 /** @type {Array<gluDrawUtil.VertexArrayBinding>} */ var vertexArrays;
239 switch (this.m_target) {
240 case gl.TEXTURE_2D: {
241 vertexArrays = [
242 gluDrawUtil.vabFromBindingPointAndArrayPointer(
243 gluDrawUtil.bindingPointFromName('a_position'),
244 new gluDrawUtil.VertexArrayPointer(
245 gluDrawUtil.VertexComponentType.VTX_COMP_FLOAT,
246 gluDrawUtil.VertexComponentConversion.VTX_COMP_CONVERT_NONE,
250 glsSamplerObjectTest.s_positions))
253 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
255 gl.uniform1f(scaleLoc, 0.25);
257 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
259 break;
262 case gl.TEXTURE_3D: {
263 vertexArrays = [
264 gluDrawUtil.vabFromBindingPointAndArrayPointer(
265 gluDrawUtil.bindingPointFromName('a_position'),
266 new gluDrawUtil.VertexArrayPointer(
267 gluDrawUtil.VertexComponentType.VTX_COMP_FLOAT,
268 gluDrawUtil.VertexComponentConversion.VTX_COMP_CONVERT_NONE,
272 glsSamplerObjectTest.s_positions3D))
275 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
277 gl.uniform1f(scaleLoc, 0.25);
279 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
281 break;
284 case gl.TEXTURE_CUBE_MAP: {
285 vertexArrays = [
286 gluDrawUtil.vabFromBindingPointAndArrayPointer(
287 gluDrawUtil.bindingPointFromName('a_position'),
288 new gluDrawUtil.VertexArrayPointer(
289 gluDrawUtil.VertexComponentType.VTX_COMP_FLOAT,
290 gluDrawUtil.VertexComponentConversion.VTX_COMP_CONVERT_NONE,
294 glsSamplerObjectTest.s_positionsCube))
297 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
299 gl.uniform1f(scaleLoc, 0.25);
301 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
303 break;
306 default:
307 DE_ASSERT(false);
312 * @private
313 * @param {number} target
314 * @param {glsSamplerObjectTest.SamplingState} state
316 glsSamplerObjectTest.TextureSamplerTest.setTextureState = function(target, state) {
317 gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, state.minFilter);
318 gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, state.magFilter);
319 gl.texParameteri(target, gl.TEXTURE_WRAP_S, state.wrapS);
320 gl.texParameteri(target, gl.TEXTURE_WRAP_T, state.wrapT);
321 gl.texParameteri(target, gl.TEXTURE_WRAP_R, state.wrapR);
322 gl.texParameterf(target, gl.TEXTURE_MAX_LOD, state.maxLod);
323 gl.texParameterf(target, gl.TEXTURE_MIN_LOD, state.minLod);
327 * @private
328 * @param {glsSamplerObjectTest.SamplingState} state
329 * @param {WebGLSampler} sampler
331 glsSamplerObjectTest.TextureSamplerTest.setSamplerState = function(state, sampler) {
332 gl.samplerParameteri(sampler, gl.TEXTURE_MIN_FILTER, state.minFilter);
333 gl.samplerParameteri(sampler, gl.TEXTURE_MAG_FILTER, state.magFilter);
334 gl.samplerParameteri(sampler, gl.TEXTURE_WRAP_S, state.wrapS);
335 gl.samplerParameteri(sampler, gl.TEXTURE_WRAP_T, state.wrapT);
336 gl.samplerParameteri(sampler, gl.TEXTURE_WRAP_R, state.wrapR);
337 gl.samplerParameterf(sampler, gl.TEXTURE_MAX_LOD, state.maxLod);
338 gl.samplerParameterf(sampler, gl.TEXTURE_MIN_LOD, state.minLod);
342 * @private
343 * @return {WebGLTexture}
345 glsSamplerObjectTest.TextureSamplerTest.createTexture2D = function() {
346 /** @type {WebGLTexture} */ var texture = null;
347 /** @type {tcuTexture.Texture2D} */ var refTexture = new tcuTexture.Texture2D(
348 new tcuTexture.TextureFormat(tcuTexture.ChannelOrder.RGBA,
349 tcuTexture.ChannelType.UNORM_INT8),
350 glsSamplerObjectTest.TEXTURE2D_WIDTH,
351 glsSamplerObjectTest.TEXTURE2D_HEIGHT);
353 refTexture.allocLevel(0);
354 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevel(0), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]);
356 texture = gl.createTexture();
358 gl.bindTexture(gl.TEXTURE_2D, texture);
360 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, refTexture.getWidth(), refTexture.getHeight(), 0, gl.RGBA, gl.UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr());
362 gl.generateMipmap(gl.TEXTURE_2D);
364 gl.bindTexture(gl.TEXTURE_2D, null);
366 return texture;
370 * @private
371 * @return {WebGLTexture}
373 glsSamplerObjectTest.TextureSamplerTest.createTexture3D = function() {
374 /** @type {WebGLTexture} */ var texture = null;
375 /** @type {tcuTexture.Texture3D} */ var refTexture = new tcuTexture.Texture3D(
376 new tcuTexture.TextureFormat(tcuTexture.ChannelOrder.RGBA,
377 tcuTexture.ChannelType.UNORM_INT8),
378 glsSamplerObjectTest.TEXTURE3D_WIDTH,
379 glsSamplerObjectTest.TEXTURE3D_HEIGHT,
380 glsSamplerObjectTest.TEXTURE3D_DEPTH);
382 refTexture.allocLevel(0);
383 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevel(0), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]);
385 texture = gl.createTexture();
387 gl.bindTexture(gl.TEXTURE_3D, texture);
389 gl.texImage3D(gl.TEXTURE_3D, 0, gl.RGBA, refTexture.getWidth(), refTexture.getHeight(), refTexture.getDepth(), 0, gl.RGBA, gl.UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr());
391 gl.generateMipmap(gl.TEXTURE_3D);
393 gl.bindTexture(gl.TEXTURE_3D, null);
395 return texture;
399 * @private
400 * @return {WebGLTexture}
402 glsSamplerObjectTest.TextureSamplerTest.createTextureCube = function() {
403 /** @type {WebGLTexture} */ var texture = null;
404 /** @type {tcuTexture.TextureCube} */ var refTexture = new tcuTexture.TextureCube(
405 new tcuTexture.TextureFormat(tcuTexture.ChannelOrder.RGBA,
406 tcuTexture.ChannelType.UNORM_INT8),
407 glsSamplerObjectTest.CUBEMAP_SIZE);
409 texture = gl.createTexture();
411 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_POSITIVE_X, 0);
412 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_POSITIVE_Y, 0);
413 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_POSITIVE_Z, 0);
414 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_NEGATIVE_X, 0);
415 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Y, 0);
416 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Z, 0);
418 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_POSITIVE_X), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]);
419 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_POSITIVE_Y), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]);
420 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_POSITIVE_Z), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]);
421 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_NEGATIVE_X), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]);
422 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Y), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]);
423 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Z), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]);
425 gl.bindTexture(gl.TEXTURE_CUBE_MAP, texture);
426 // TODO: check internalFormat / format parameters in texImage2D (were RGBA8 and RGBA respectively)
427 for (var face in tcuTexture.CubeFace) {
428 /** @const @type {number} */ var target = gluTextureUtil.getGLCubeFace(tcuTexture.CubeFace[face]);
429 gl.texImage2D(target, 0, gl.RGBA, refTexture.getSize(), refTexture.getSize(), 0, gl.RGBA, gl.UNSIGNED_BYTE, refTexture.getLevelFace(0, tcuTexture.CubeFace[face]).getDataPtr());
432 gl.generateMipmap(gl.TEXTURE_CUBE_MAP);
433 gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
435 return texture;
439 * @private
440 * @param {number} target
441 * @return {WebGLTexture}
443 glsSamplerObjectTest.TextureSamplerTest.createTexture = function(target) {
444 /** @type {WebGLTexture} */ var texture;
445 switch (target) {
446 case gl.TEXTURE_2D:
447 texture = glsSamplerObjectTest.TextureSamplerTest.createTexture2D();
448 break;
450 case gl.TEXTURE_3D:
451 texture = glsSamplerObjectTest.TextureSamplerTest.createTexture3D();
452 break;
454 case gl.TEXTURE_CUBE_MAP:
455 texture = glsSamplerObjectTest.TextureSamplerTest.createTextureCube();
456 break;
458 default:
459 throw new Error('Unsupported target: ' + WebGLTestUtils.glEnumToString(gl, target));
462 return texture;
466 * @private
467 * @param {number} target
468 * @return {string}
470 glsSamplerObjectTest.TextureSamplerTest.selectVertexShader = function(target) {
471 switch (target) {
472 case gl.TEXTURE_2D:
473 return '#version 300 es\n' +
474 'in highp vec2 a_position;\n' +
475 'uniform highp float u_posScale;\n' +
476 'out mediump vec2 v_texCoord;\n' +
477 'void main (void)\n' +
478 ' {\n' +
479 '\tv_texCoord = a_position;\n' +
480 '\tgl_Position = vec4(u_posScale * a_position, 0.0, 1.0);\n' +
481 '}';
483 case gl.TEXTURE_3D:
484 return '#version 300 es\n' +
485 'in highp vec3 a_position;\n' +
486 'uniform highp float u_posScale;\n' +
487 'out mediump vec3 v_texCoord;\n' +
488 'void main (void)\n' +
489 ' {\n' +
490 '\tv_texCoord = a_position;\n' +
491 '\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n' +
492 '}';
494 case gl.TEXTURE_CUBE_MAP:
495 return '#version 300 es\n' +
496 'in highp vec4 a_position;\n' +
497 'uniform highp float u_posScale;\n' +
498 'out mediump vec2 v_texCoord;\n' +
499 'void main (void)\n' +
500 ' {\n' +
501 '\tv_texCoord = a_position.zw;\n' +
502 '\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n' +
503 '}';
505 default:
506 DE_ASSERT(false);
507 return '';
512 * @private
513 * @param {number} target
514 * @return {string}
516 glsSamplerObjectTest.TextureSamplerTest.selectFragmentShader = function(target) {
517 switch (target) {
518 case gl.TEXTURE_2D:
519 return '#version 300 es\nlayout(location = 0) out mediump vec4 o_color;\n' +
520 'uniform lowp sampler2D u_sampler;\n' +
521 'in mediump vec2 v_texCoord;\n' +
522 'void main (void)\n' +
523 ' {\n' +
524 '\to_color = texture(u_sampler, v_texCoord);\n' +
525 '}';
527 case gl.TEXTURE_3D:
528 return '#version 300 es\nlayout(location = 0) out mediump vec4 o_color;\n' +
529 'uniform lowp sampler3D u_sampler;\n' +
530 'in mediump vec3 v_texCoord;\n' +
531 'void main (void)\n' +
532 ' {\n' +
533 '\to_color = texture(u_sampler, v_texCoord);\n' +
534 '}';
536 case gl.TEXTURE_CUBE_MAP:
537 return '#version 300 es\nlayout(location = 0) out mediump vec4 o_color;\n' +
538 'uniform lowp samplerCube u_sampler;\n' +
539 'in mediump vec2 v_texCoord;\n' +
540 'void main (void)\n' +
541 ' {\n' +
542 '\to_color = texture(u_sampler, vec3(cos(3.14 * v_texCoord.y) * sin(3.14 * v_texCoord.x), sin(3.14 * v_texCoord.y), cos(3.14 * v_texCoord.y) * cos(3.14 * v_texCoord.x)));\n' +
543 '}';
545 default:
546 DE_ASSERT(false);
547 return '';
551 glsSamplerObjectTest.TextureSamplerTest.prototype.init = function() {
552 /** @const @type {string} */ var vertexShaderTemplate = glsSamplerObjectTest.TextureSamplerTest.selectVertexShader(this.m_target);
553 /** @const @type {string} */ var fragmentShaderTemplate = glsSamplerObjectTest.TextureSamplerTest.selectFragmentShader(this.m_target);
555 DE_ASSERT(!this.m_program);
556 this.m_program = new gluShaderProgram.ShaderProgram(gl,
557 gluShaderProgram.makeVtxFragSources(
558 vertexShaderTemplate,
559 fragmentShaderTemplate));
561 if (!this.m_program.isOk()) {
562 // tcu::TestLog& log = m_testCtx.getLog();
563 // log << *m_program;
564 throw new Error('Failed to compile shaders');
568 glsSamplerObjectTest.TextureSamplerTest.prototype.iterate = function() {
569 //tcu::TestLog& log = m_testCtx.getLog();
571 /** @type {tcuSurface.Surface} */ var textureRef = new tcuSurface.Surface(glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
572 /** @type {tcuSurface.Surface} */ var samplerRef = new tcuSurface.Surface(glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
574 /** @type {tcuSurface.Surface} */ var textureResult = new tcuSurface.Surface(glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
575 /** @type {tcuSurface.Surface} */ var samplerResult = new tcuSurface.Surface(glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
577 /** @type {number} */ var x = this.m_random.getInt(0, gl.drawingBufferWidth - glsSamplerObjectTest.VIEWPORT_WIDTH);
578 /** @type {number} */ var y = this.m_random.getInt(0, gl.drawingBufferHeight - glsSamplerObjectTest.VIEWPORT_HEIGHT);
580 this.renderReferences(textureRef, samplerRef, x, y);
581 this.renderResults(textureResult, samplerResult, x, y);
583 /** @type {boolean} */ var isOk = tcuImageCompare.pixelThresholdCompare('Sampler render result', 'Result from rendering with sampler', samplerRef, samplerResult, [0, 0, 0, 0]);
585 if (!tcuImageCompare.pixelThresholdCompare('Texture render result', 'Result from rendering with texture state', textureRef, textureResult, [0, 0, 0, 0]))
586 isOk = false;
588 assertMsgOptions(isOk, '', true, false);
590 return tcuTestCase.IterateResult.STOP;
593 // glsSamplerObjectTest.MultiTextureSamplerTest
596 * @constructor
597 * @extends {tcuTestCase.DeqpTest}
598 * @const @param {glsSamplerObjectTest.TestSpec} spec
600 glsSamplerObjectTest.MultiTextureSamplerTest = function(spec) {
601 tcuTestCase.DeqpTest.call(this, spec.name, spec.desc);
602 /** @type {gluShaderProgram.ShaderProgram} */ this.m_program = null;
603 /** @type {number} */ this.m_target = spec.target;
604 /** @type {glsSamplerObjectTest.SamplingState} */ this.m_textureState1 = spec.textureState;
605 /** @type {glsSamplerObjectTest.SamplingState} */ this.m_textureState2 = spec.textureState2;
606 /** @type {glsSamplerObjectTest.SamplingState} */ this.m_samplerState = spec.samplerState;
607 /** @type {deRandom.Random} */ this.m_random = new deRandom.Random(deString.deStringHash(spec.name));
610 glsSamplerObjectTest.MultiTextureSamplerTest.prototype = Object.create(tcuTestCase.DeqpTest.prototype);
611 glsSamplerObjectTest.MultiTextureSamplerTest.prototype.constructor = glsSamplerObjectTest.MultiTextureSamplerTest;
613 glsSamplerObjectTest.MultiTextureSamplerTest.prototype.init = function() {
614 /** @type {string} */ var vertexShaderTemplate = glsSamplerObjectTest.MultiTextureSamplerTest.selectVertexShader(this.m_target);
615 /** @type {string} */ var fragmentShaderTemplate = glsSamplerObjectTest.MultiTextureSamplerTest.selectFragmentShader(this.m_target);
617 DE_ASSERT(!this.m_program);
618 this.m_program = new gluShaderProgram.ShaderProgram(gl,
619 gluShaderProgram.makeVtxFragSources(
620 vertexShaderTemplate,
621 fragmentShaderTemplate));
622 if (!this.m_program.isOk()) {
623 // tcu::TestLog& log = m_testCtx.getLog();
625 // log << *m_program;
626 throw new Error('Failed to compile shaders');
630 glsSamplerObjectTest.MultiTextureSamplerTest.prototype.deinit = function() {
631 gl.activeTexture(gl.TEXTURE0);
634 glsSamplerObjectTest.MultiTextureSamplerTest.prototype.iterate = function() {
635 //tcu::TestLog& log = m_testCtx.getLog();
637 /** @type {tcuSurface.Surface} */ var textureRef = new tcuSurface.Surface(glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
638 /** @type {tcuSurface.Surface} */ var samplerRef = new tcuSurface.Surface(glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
640 /** @type {tcuSurface.Surface} */ var textureResult = new tcuSurface.Surface(glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
641 /** @type {tcuSurface.Surface} */ var samplerResult = new tcuSurface.Surface(glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
643 /** @type {number} */ var x = this.m_random.getInt(0, gl.drawingBufferWidth - glsSamplerObjectTest.VIEWPORT_WIDTH);
644 /** @type {number} */ var y = this.m_random.getInt(0, gl.drawingBufferHeight - glsSamplerObjectTest.VIEWPORT_HEIGHT);
646 this.renderReferences(textureRef, samplerRef, x, y);
647 this.renderResults(textureResult, samplerResult, x, y);
649 /** @type {boolean} */ var isOk = tcuImageCompare.pixelThresholdCompare('Sampler render result', 'Result from rendering with sampler', samplerRef, samplerResult, [0, 0, 0, 0]);
651 if (!tcuImageCompare.pixelThresholdCompare('Texture render result', 'Result from rendering with texture state', textureRef, textureResult, [0, 0, 0, 0]))
652 isOk = false;
654 assertMsgOptions(isOk, '', true, false);
656 return tcuTestCase.IterateResult.STOP;
660 * @private
661 * @param {tcuSurface.Surface} textureRef
662 * @param {tcuSurface.Surface} samplerRef
663 * @param {number} x
664 * @param {number} y
666 glsSamplerObjectTest.MultiTextureSamplerTest.prototype.renderReferences = function(textureRef, samplerRef, x, y) {
667 /** @type {WebGLTexture} */ var texture1 = glsSamplerObjectTest.MultiTextureSamplerTest.createTexture(this.m_target, 0);
668 /** @type {WebGLTexture} */ var texture2 = glsSamplerObjectTest.MultiTextureSamplerTest.createTexture(this.m_target, 1);
670 gl.viewport(x, y, glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
672 // Generate texture rendering reference
673 gl.activeTexture(gl.TEXTURE0);
674 gl.bindTexture(this.m_target, texture1);
675 glsSamplerObjectTest.MultiTextureSamplerTest.setTextureState(this.m_target, this.m_textureState1);
677 gl.activeTexture(gl.TEXTURE1);
678 gl.bindTexture(this.m_target, texture2);
679 glsSamplerObjectTest.MultiTextureSamplerTest.setTextureState(this.m_target, this.m_textureState2);
681 this.render();
682 var texRef = textureRef.getAccess();
683 var texRefTransferFormat = gluTextureUtil.getTransferFormat(texRef.getFormat());
684 gl.readPixels(x, y, texRef.m_width, texRef.m_height, texRefTransferFormat.format, texRefTransferFormat.dataType, textureRef.m_pixels);
686 // Generate sampler rendering reference
687 gl.activeTexture(gl.TEXTURE0);
688 gl.bindTexture(this.m_target, texture1);
689 glsSamplerObjectTest.MultiTextureSamplerTest.setTextureState(this.m_target, this.m_samplerState);
691 gl.activeTexture(gl.TEXTURE1);
692 gl.bindTexture(this.m_target, texture2);
693 glsSamplerObjectTest.MultiTextureSamplerTest.setTextureState(this.m_target, this.m_samplerState);
695 this.render();
696 var sampRef = samplerRef.getAccess();
697 var sampRefTransferFormat = gluTextureUtil.getTransferFormat(sampRef.getFormat());
698 gl.readPixels(x, y, sampRef.m_width, sampRef.m_height, sampRefTransferFormat.format, sampRefTransferFormat.dataType, samplerRef.m_pixels);
702 * @private
703 * @param {tcuSurface.Surface} textureResult
704 * @param {tcuSurface.Surface} samplerResult
705 * @param {number} x
706 * @param {number} y
708 glsSamplerObjectTest.MultiTextureSamplerTest.prototype.renderResults = function(textureResult, samplerResult, x, y) {
709 /** @type {WebGLTexture} */ var texture1 = glsSamplerObjectTest.MultiTextureSamplerTest.createTexture(this.m_target, 0);
710 /** @type {WebGLTexture} */ var texture2 = glsSamplerObjectTest.MultiTextureSamplerTest.createTexture(this.m_target, 1);
712 gl.viewport(x, y, glsSamplerObjectTest.VIEWPORT_WIDTH, glsSamplerObjectTest.VIEWPORT_HEIGHT);
714 /** @type {WebGLSampler} */ var sampler = gl.createSampler();
715 DE_ASSERT(sampler != -1);
717 gl.bindSampler(0, sampler);
718 gl.bindSampler(1, sampler);
720 // First set sampler state
721 glsSamplerObjectTest.MultiTextureSamplerTest.setSamplerState(this.m_samplerState, sampler);
723 // Set texture state
724 gl.bindTexture(this.m_target, texture1);
725 glsSamplerObjectTest.MultiTextureSamplerTest.setTextureState(this.m_target, this.m_textureState1);
727 gl.bindTexture(this.m_target, texture2);
728 glsSamplerObjectTest.MultiTextureSamplerTest.setTextureState(this. m_target, this.m_textureState2);
730 gl.activeTexture(gl.TEXTURE0);
731 gl.bindTexture(this.m_target, texture1);
733 gl.activeTexture(gl.TEXTURE1);
734 gl.bindTexture(this.m_target, texture2);
736 // Render using sampler
737 this.render();
738 var sampRes = samplerResult.getAccess();
739 var sampResTransferFormat = gluTextureUtil.getTransferFormat(sampRes.getFormat());
740 gl.readPixels(x, y, sampRes.m_width, sampRes.m_height, sampResTransferFormat.format, sampResTransferFormat.dataType, samplerResult.m_pixels);
742 gl.bindSampler(0, null);
743 gl.bindSampler(1, null);
745 this.render();
746 var texRes = textureResult.getAccess();
747 var texResTransferFormat = gluTextureUtil.getTransferFormat(texRes.getFormat());
748 gl.readPixels(x, y, texRes.m_width, texRes.m_height, texResTransferFormat.format, texResTransferFormat.dataType, textureResult.m_pixels);
750 gl.activeTexture(gl.TEXTURE0);
751 gl.bindTexture(this.m_target, null);
753 gl.activeTexture(gl.TEXTURE1);
754 gl.bindTexture(this.m_target, null);
756 gl.deleteSampler(sampler);
757 gl.deleteTexture(texture1);
758 gl.deleteTexture(texture2);
761 glsSamplerObjectTest.MultiTextureSamplerTest.prototype.render = function() {
763 gl.useProgram(this.m_program.getProgram());
765 /** @type {WebGLUniformLocation} */ var samplerLoc1 = gl.getUniformLocation(this.m_program.getProgram(), 'u_sampler1');
766 DE_ASSERT(samplerLoc1 != -1);
768 /** @type {WebGLUniformLocation} */ var samplerLoc2 = gl.getUniformLocation(this.m_program.getProgram(), 'u_sampler2');
769 DE_ASSERT(samplerLoc2 != -1);
771 /** @type {WebGLUniformLocation} */ var scaleLoc = gl.getUniformLocation(this.m_program.getProgram(), 'u_posScale');
772 DE_ASSERT(scaleLoc != -1);
774 gl.clearColor(0.5, 0.5, 0.5, 1.0);
776 gl.clear(gl.COLOR_BUFFER_BIT);
778 gl.uniform1i(samplerLoc1, 0);
780 gl.uniform1i(samplerLoc2, 1);
782 gl.uniform1f(scaleLoc, 1.0);
784 /** @type {Array<gluDrawUtil.VertexArrayBinding>} */ var vertexArrays;
785 switch (this.m_target) {
786 case gl.TEXTURE_2D: {
787 vertexArrays = [
788 gluDrawUtil.vabFromBindingPointAndArrayPointer(
789 gluDrawUtil.bindingPointFromName('a_position'),
790 new gluDrawUtil.VertexArrayPointer(
791 gluDrawUtil.VertexComponentType.VTX_COMP_FLOAT,
792 gluDrawUtil.VertexComponentConversion.VTX_COMP_CONVERT_NONE,
796 glsSamplerObjectTest.s_positions))
799 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
801 gl.uniform1f(scaleLoc, 0.25);
803 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
805 break;
808 case gl.TEXTURE_3D: {
809 vertexArrays = [
810 gluDrawUtil.vabFromBindingPointAndArrayPointer(
811 gluDrawUtil.bindingPointFromName('a_position'),
812 new gluDrawUtil.VertexArrayPointer(
813 gluDrawUtil.VertexComponentType.VTX_COMP_FLOAT,
814 gluDrawUtil.VertexComponentConversion.VTX_COMP_CONVERT_NONE,
818 glsSamplerObjectTest.s_positions3D))
821 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
823 gl.uniform1f(scaleLoc, 0.25);
825 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
827 break;
830 case gl.TEXTURE_CUBE_MAP: {
831 vertexArrays = [
832 gluDrawUtil.vabFromBindingPointAndArrayPointer(
833 gluDrawUtil.bindingPointFromName('a_position'),
834 new gluDrawUtil.VertexArrayPointer(
835 gluDrawUtil.VertexComponentType.VTX_COMP_FLOAT,
836 gluDrawUtil.VertexComponentConversion.VTX_COMP_CONVERT_NONE,
840 glsSamplerObjectTest.s_positionsCube))
843 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
845 gl.uniform1f(scaleLoc, 0.25);
847 gluDrawUtil.draw(gl, this.m_program.getProgram(), vertexArrays, new gluDrawUtil.PrimitiveList(gluDrawUtil.primitiveType.TRIANGLES, 6));
849 break;
852 default:
853 DE_ASSERT(false);
859 * @private
860 * @param {number} target
861 * @param {glsSamplerObjectTest.SamplingState} state
863 glsSamplerObjectTest.MultiTextureSamplerTest.setTextureState = function(target, state) {
864 gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, state.minFilter);
865 gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, state.magFilter);
866 gl.texParameteri(target, gl.TEXTURE_WRAP_S, state.wrapS);
867 gl.texParameteri(target, gl.TEXTURE_WRAP_T, state.wrapT);
868 gl.texParameteri(target, gl.TEXTURE_WRAP_R, state.wrapR);
869 gl.texParameterf(target, gl.TEXTURE_MAX_LOD, state.maxLod);
870 gl.texParameterf(target, gl.TEXTURE_MIN_LOD, state.minLod);
874 * @private
875 * @param {glsSamplerObjectTest.SamplingState} state
876 * @param {WebGLSampler} sampler
878 glsSamplerObjectTest.MultiTextureSamplerTest.setSamplerState = function(state, sampler) {
879 gl.samplerParameteri(sampler, gl.TEXTURE_MIN_FILTER, state.minFilter);
880 gl.samplerParameteri(sampler, gl.TEXTURE_MAG_FILTER, state.magFilter);
881 gl.samplerParameteri(sampler, gl.TEXTURE_WRAP_S, state.wrapS);
882 gl.samplerParameteri(sampler, gl.TEXTURE_WRAP_T, state.wrapT);
883 gl.samplerParameteri(sampler, gl.TEXTURE_WRAP_R, state.wrapR);
884 gl.samplerParameterf(sampler, gl.TEXTURE_MAX_LOD, state.maxLod);
885 gl.samplerParameterf(sampler, gl.TEXTURE_MIN_LOD, state.minLod);
889 * @private
890 * @param {number} id
891 * @return {WebGLTexture }
893 glsSamplerObjectTest.MultiTextureSamplerTest.createTexture2D = function(id) {
894 /** @type {WebGLTexture} */ var texture = null;
895 /** @type {tcuTexture.Texture2D} */ var refTexture = new tcuTexture.Texture2D(
896 new tcuTexture.TextureFormat(tcuTexture.ChannelOrder.RGBA,
897 tcuTexture.ChannelType.UNORM_INT8),
898 glsSamplerObjectTest.TEXTURE2D_WIDTH,
899 glsSamplerObjectTest.TEXTURE2D_HEIGHT);
901 refTexture.allocLevel(0);
903 texture = gl.createTexture();
905 switch (id) {
906 case 0:
907 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevel(0), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 0.5, 0.5]);
908 break;
910 case 1:
911 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevel(0), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 1.0, 1.0]);
912 break;
914 default:
915 DE_ASSERT(false);
918 gl.bindTexture(gl.TEXTURE_2D, texture);
920 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, refTexture.getWidth(), refTexture.getHeight(), 0, gl.RGBA, gl.UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr());
922 gl.generateMipmap(gl.TEXTURE_2D);
924 gl.bindTexture(gl.TEXTURE_2D, null);
926 return texture;
930 * @private
931 * @param {number} id
932 * @return {WebGLTexture}
934 glsSamplerObjectTest.MultiTextureSamplerTest.createTexture3D = function(id) {
935 /** @type {WebGLTexture} */ var texture = null;
936 /** @type {tcuTexture.Texture3D} */ var refTexture = new tcuTexture.Texture3D(
937 new tcuTexture.TextureFormat(tcuTexture.ChannelOrder.RGBA,
938 tcuTexture.ChannelType.UNORM_INT8),
939 glsSamplerObjectTest.TEXTURE3D_WIDTH,
940 glsSamplerObjectTest.TEXTURE3D_HEIGHT,
941 glsSamplerObjectTest.TEXTURE3D_DEPTH);
943 refTexture.allocLevel(0);
945 texture = gl.createTexture();
947 switch (id) {
948 case 0:
949 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevel(0), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 0.5, 0.5]);
950 break;
952 case 1:
953 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevel(0), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 1.0, 1.0]);
954 break;
956 default:
957 DE_ASSERT(false);
960 gl.bindTexture(gl.TEXTURE_3D, texture);
961 // TODO: check internalFormat and format in texImage3D
962 gl.texImage3D(gl.TEXTURE_3D, 0, gl.RGBA, refTexture.getWidth(), refTexture.getHeight(), refTexture.getDepth(), 0, gl.RGBA, gl.UNSIGNED_BYTE, refTexture.getLevel(0).getDataPtr());
964 gl.generateMipmap(gl.TEXTURE_3D);
966 gl.bindTexture(gl.TEXTURE_3D, null);
968 return texture;
972 * @private
973 * @param {number} id
974 * @return {WebGLTexture}
976 glsSamplerObjectTest.MultiTextureSamplerTest.createTextureCube = function(id) {
977 /** @type {WebGLTexture} */ var texture = null;
978 /** @type {tcuTexture.TextureCube} */ var refTexture = new tcuTexture.TextureCube(
979 new tcuTexture.TextureFormat(tcuTexture.ChannelOrder.RGBA,
980 tcuTexture.ChannelType.UNORM_INT8),
981 glsSamplerObjectTest.CUBEMAP_SIZE);
983 texture = gl.createTexture();
985 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_POSITIVE_X, 0);
986 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_POSITIVE_Y, 0);
987 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_POSITIVE_Z, 0);
988 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_NEGATIVE_X, 0);
989 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Y, 0);
990 refTexture.allocLevel(tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Z, 0);
992 switch (id) {
993 case 0:
994 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_POSITIVE_X), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 0.5, 0.5]);
995 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_POSITIVE_Y), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 0.5, 0.5]);
996 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_POSITIVE_Z), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 0.5, 0.5]);
997 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_NEGATIVE_X), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 0.5, 0.5]);
998 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Y), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 0.5, 0.5]);
999 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Z), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 0.5, 0.5]);
1000 break;
1002 case 1:
1003 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_POSITIVE_X), [0.5, 0.5, 0.5, 0.5], [1.0, 1.0, 1.0, 1.0]);
1004 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_POSITIVE_Y), [0.5, 0.5, 0.5, 0.5], [1.0, 1.0, 1.0, 1.0]);
1005 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_POSITIVE_Z), [0.5, 0.5, 0.5, 0.5], [1.0, 1.0, 1.0, 1.0]);
1006 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_NEGATIVE_X), [0.5, 0.5, 0.5, 0.5], [1.0, 1.0, 1.0, 1.0]);
1007 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Y), [0.5, 0.5, 0.5, 0.5], [1.0, 1.0, 1.0, 1.0]);
1008 tcuTextureUtil.fillWithComponentGradients(refTexture.getLevelFace(0, tcuTexture.CubeFace.CUBEFACE_NEGATIVE_Z), [0.5, 0.5, 0.5, 0.5], [1.0, 1.0, 1.0, 1.0]);
1009 break;
1011 default:
1012 DE_ASSERT(false);
1015 gl.bindTexture(gl.TEXTURE_CUBE_MAP, texture);
1017 for (var face in tcuTexture.CubeFace) {
1018 /** @const @type {number} */ var target = gluTextureUtil.getGLCubeFace(tcuTexture.CubeFace[face]);
1019 gl.texImage2D(target, 0, gl.RGBA, refTexture.getSize(), refTexture.getSize(), 0, gl.RGBA, gl.UNSIGNED_BYTE, refTexture.getLevelFace(0, tcuTexture.CubeFace[face]).getDataPtr());
1022 gl.generateMipmap(gl.TEXTURE_CUBE_MAP);
1023 gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
1025 return texture;
1029 * @private
1030 * @param {number} target
1031 * @param {number} id
1032 * @return {WebGLTexture}
1034 glsSamplerObjectTest.MultiTextureSamplerTest.createTexture = function(target, id) {
1035 /** @type {WebGLTexture} */ var texture;
1036 switch (target) {
1037 case gl.TEXTURE_2D:
1038 texture = glsSamplerObjectTest.MultiTextureSamplerTest.createTexture2D(id);
1039 break;
1041 case gl.TEXTURE_3D:
1042 texture = glsSamplerObjectTest.MultiTextureSamplerTest.createTexture3D(id);
1043 break;
1045 case gl.TEXTURE_CUBE_MAP:
1046 texture = glsSamplerObjectTest.MultiTextureSamplerTest.createTextureCube(id);
1047 break;
1049 default:
1050 DE_ASSERT(false);
1053 return texture;
1057 * @private
1058 * @param {number} target
1059 * @return {string}
1061 glsSamplerObjectTest.MultiTextureSamplerTest.selectVertexShader = function(target) {
1062 switch (target) {
1063 case gl.TEXTURE_2D:
1064 return '#version 300 es\n' +
1065 'in highp vec2 a_position;\n' +
1066 'uniform highp float u_posScale;\n' +
1067 'out mediump vec2 v_texCoord;\n' +
1068 'void main (void)\n' +
1069 ' {\n' +
1070 '\tv_texCoord = a_position;\n' +
1071 '\tgl_Position = vec4(u_posScale * a_position, 0.0, 1.0);\n' +
1072 '}';
1074 case gl.TEXTURE_3D:
1075 return '#version 300 es\n' +
1076 'in highp vec3 a_position;\n' +
1077 'uniform highp float u_posScale;\n' +
1078 'out mediump vec3 v_texCoord;\n' +
1079 'void main (void)\n' +
1080 ' {\n' +
1081 '\tv_texCoord = a_position;\n' +
1082 '\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n' +
1083 '}';
1085 case gl.TEXTURE_CUBE_MAP:
1086 return '#version 300 es\n' +
1087 'in highp vec4 a_position;\n' +
1088 'uniform highp float u_posScale;\n' +
1089 'out mediump vec2 v_texCoord;\n' +
1090 'void main (void)\n' +
1091 ' {\n' +
1092 '\tv_texCoord = a_position.zw;\n' +
1093 '\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n' +
1094 '}';
1096 default:
1097 DE_ASSERT(false);
1098 return '';
1103 * @private
1104 * @param {number} target
1105 * @return {string}
1107 glsSamplerObjectTest.MultiTextureSamplerTest.selectFragmentShader = function(target) {
1108 switch (target) {
1109 case gl.TEXTURE_2D:
1110 return '#version 300 es\nlayout(location = 0) out mediump vec4 o_color;\n' +
1111 'uniform lowp sampler2D u_sampler1;\n' +
1112 'uniform lowp sampler2D u_sampler2;\n' +
1113 'in mediump vec2 v_texCoord;\n' +
1114 'void main (void)\n' +
1115 ' {\n' +
1116 '\to_color = vec4(0.75, 0.75, 0.75, 1.0) * (texture(u_sampler1, v_texCoord) + texture(u_sampler2, v_texCoord));\n' +
1117 '}';
1119 break;
1121 case gl.TEXTURE_3D:
1122 return '#version 300 es\nlayout(location = 0) out mediump vec4 o_color;\n' +
1123 'uniform lowp sampler3D u_sampler1;\n' +
1124 'uniform lowp sampler3D u_sampler2;\n' +
1125 'in mediump vec3 v_texCoord;\n' +
1126 'void main (void)\n' +
1127 ' {\n' +
1128 '\to_color = vec4(0.75, 0.75, 0.75, 1.0) * (texture(u_sampler1, v_texCoord) + texture(u_sampler2, v_texCoord));\n' +
1129 '}';
1131 case gl.TEXTURE_CUBE_MAP:
1132 return '#version 300 es\nlayout(location = 0) out mediump vec4 o_color;\n' +
1133 'uniform lowp samplerCube u_sampler1;\n' +
1134 'uniform lowp samplerCube u_sampler2;\n' +
1135 'in mediump vec2 v_texCoord;\n' +
1136 'void main (void)\n' +
1137 ' {\n' +
1138 '\to_color = vec4(0.5, 0.5, 0.5, 1.0) * (texture(u_sampler1, vec3(cos(3.14 * v_texCoord.y) * sin(3.14 * v_texCoord.x), sin(3.14 * v_texCoord.y), cos(3.14 * v_texCoord.y) * cos(3.14 * v_texCoord.x)))' +
1139 '+ texture(u_sampler2, vec3(cos(3.14 * v_texCoord.y) * sin(3.14 * v_texCoord.x), sin(3.14 * v_texCoord.y), cos(3.14 * v_texCoord.y) * cos(3.14 * v_texCoord.x))));\n' +
1140 '}';
1142 default:
1143 DE_ASSERT(false);
1144 return '';