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.
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
= [
75 /** @const @type {Array<number>} */ glsSamplerObjectTest
.s_positions3D
= [
84 /** @const @type {Array<number>} */ glsSamplerObjectTest
.s_positionsCube
= [
85 -1.0, -1.0, -1.0, -0.5,
90 -1.0, -1.0, -1.0, -0.5
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
;
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
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
;
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
;
145 * @param {tcuSurface.Surface} textureRef
146 * @param {tcuSurface.Surface} samplerRef
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
);
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
);
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
);
174 * @param {tcuSurface.Surface} textureResult
175 * @param {tcuSurface.Surface} samplerResult
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
);
193 gl
.bindTexture(this.m_target
, texture
);
195 glsSamplerObjectTest
.TextureSamplerTest
.setTextureState(this.m_target
, this.m_textureState
);
196 // Render using sampler
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
);
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
);
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
: {
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));
262 case gl
.TEXTURE_3D
: {
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));
284 case gl
.TEXTURE_CUBE_MAP
: {
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));
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
);
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
);
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);
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);
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);
440 * @param {number} target
441 * @return {WebGLTexture}
443 glsSamplerObjectTest
.TextureSamplerTest
.createTexture = function(target
) {
444 /** @type {WebGLTexture} */ var texture
;
447 texture
= glsSamplerObjectTest
.TextureSamplerTest
.createTexture2D();
451 texture
= glsSamplerObjectTest
.TextureSamplerTest
.createTexture3D();
454 case gl
.TEXTURE_CUBE_MAP
:
455 texture
= glsSamplerObjectTest
.TextureSamplerTest
.createTextureCube();
459 throw new Error('Unsupported target: ' + WebGLTestUtils
.glEnumToString(gl
, target
));
467 * @param {number} target
470 glsSamplerObjectTest
.TextureSamplerTest
.selectVertexShader = function(target
) {
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' +
479 '\tv_texCoord = a_position;\n' +
480 '\tgl_Position = vec4(u_posScale * a_position, 0.0, 1.0);\n' +
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' +
490 '\tv_texCoord = a_position;\n' +
491 '\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n' +
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' +
501 '\tv_texCoord = a_position.zw;\n' +
502 '\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n' +
513 * @param {number} target
516 glsSamplerObjectTest
.TextureSamplerTest
.selectFragmentShader = function(target
) {
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' +
524 '\to_color = texture(u_sampler, v_texCoord);\n' +
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' +
533 '\to_color = texture(u_sampler, v_texCoord);\n' +
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' +
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' +
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]))
588 assertMsgOptions(isOk
, '', true, false);
590 return tcuTestCase
.IterateResult
.STOP
;
593 // glsSamplerObjectTest.MultiTextureSamplerTest
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]))
654 assertMsgOptions(isOk
, '', true, false);
656 return tcuTestCase
.IterateResult
.STOP
;
661 * @param {tcuSurface.Surface} textureRef
662 * @param {tcuSurface.Surface} samplerRef
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
);
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
);
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
);
703 * @param {tcuSurface.Surface} textureResult
704 * @param {tcuSurface.Surface} samplerResult
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
);
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
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);
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
: {
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));
808 case gl
.TEXTURE_3D
: {
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));
830 case gl
.TEXTURE_CUBE_MAP
: {
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));
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
);
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
);
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();
907 tcuTextureUtil
.fillWithComponentGradients(refTexture
.getLevel(0), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 0.5, 0.5]);
911 tcuTextureUtil
.fillWithComponentGradients(refTexture
.getLevel(0), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 1.0, 1.0]);
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);
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();
949 tcuTextureUtil
.fillWithComponentGradients(refTexture
.getLevel(0), [0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 0.5, 0.5]);
953 tcuTextureUtil
.fillWithComponentGradients(refTexture
.getLevel(0), [0.0, 0.0, 0.0, 0.0], [0.5, 0.5, 1.0, 1.0]);
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);
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);
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]);
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]);
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);
1030 * @param {number} target
1031 * @param {number} id
1032 * @return {WebGLTexture}
1034 glsSamplerObjectTest
.MultiTextureSamplerTest
.createTexture = function(target
, id
) {
1035 /** @type {WebGLTexture} */ var texture
;
1038 texture
= glsSamplerObjectTest
.MultiTextureSamplerTest
.createTexture2D(id
);
1042 texture
= glsSamplerObjectTest
.MultiTextureSamplerTest
.createTexture3D(id
);
1045 case gl
.TEXTURE_CUBE_MAP
:
1046 texture
= glsSamplerObjectTest
.MultiTextureSamplerTest
.createTextureCube(id
);
1058 * @param {number} target
1061 glsSamplerObjectTest
.MultiTextureSamplerTest
.selectVertexShader = function(target
) {
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' +
1070 '\tv_texCoord = a_position;\n' +
1071 '\tgl_Position = vec4(u_posScale * a_position, 0.0, 1.0);\n' +
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' +
1081 '\tv_texCoord = a_position;\n' +
1082 '\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n' +
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' +
1092 '\tv_texCoord = a_position.zw;\n' +
1093 '\tgl_Position = vec4(u_posScale * a_position.xy, 0.0, 1.0);\n' +
1104 * @param {number} target
1107 glsSamplerObjectTest
.MultiTextureSamplerTest
.selectFragmentShader = function(target
) {
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' +
1116 '\to_color = vec4(0.75, 0.75, 0.75, 1.0) * (texture(u_sampler1, v_texCoord) + texture(u_sampler2, v_texCoord));\n' +
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' +
1128 '\to_color = vec4(0.75, 0.75, 0.75, 1.0) * (texture(u_sampler1, v_texCoord) + texture(u_sampler2, v_texCoord));\n' +
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' +
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' +