Bug 1323122 - Update WebGL Conformance Test with html/js. r=jgilbert

---
 .../attribs/gl-bindAttribLocation-aliasing.html    |    2 +-
 .../attribs/gl-vertexattribpointer.html            |   23 +-
 .../conformance/buffers/buffer-uninitialized.html  |  123 +
 .../context/constants-and-properties.html          |   96 +-
 ...t-attributes-alpha-depth-stencil-antialias.html |   28 +-
 .../context/context-no-alpha-fbo-with-alpha.html   |   98 +
 .../checkout/conformance/context/methods.html      |    3 +
 .../extensions/angle-instanced-arrays.html         |    4 +-
 .../extensions/ext-disjoint-timer-query.html       |   60 +-
 .../conformance/extensions/ext-frag-depth.html     |    2 +-
 .../extensions/ext-texture-filter-anisotropic.html |   18 +-
 .../extensions/oes-element-index-uint.html         |    8 +-
 .../oes-vertex-array-object-bufferData.html        |   48 +-
 .../extensions/oes-vertex-array-object.html        |   30 +-
 .../extensions/webgl-compressed-texture-atc.html   |    7 +-
 .../extensions/webgl-compressed-texture-etc.html   |  154 +
 .../extensions/webgl-compressed-texture-pvrtc.html |    1 +
 .../webgl-compressed-texture-s3tc-srgb.html        |  711 ++++
 .../extensions/webgl-compressed-texture-s3tc.html  |  113 +-
 .../extensions/webgl-debug-shaders.html            |    1 +
 .../extensions/webgl-depth-texture.html            |  232 +-
 ...webgl-draw-buffers-framebuffer-unsupported.html |  147 +
 .../conformance/extensions/webgl-draw-buffers.html |  103 +-
 .../glsl/bugs/bool-type-cast-bug-int-float.html    |  333 ++
 .../bugs/compound-assignment-type-combination.html |   97 +-
 .../glsl/bugs/conditional-discard-in-loop.html     |   56 +-
 ...bal-invariant-does-not-leak-across-shaders.html |   98 +
 .../invariant-does-not-leak-across-shaders.html    |   95 +
 .../glsl/bugs/loop-if-loop-gradient.html           |    2 +-
 .../glsl/bugs/nested-sequence-operator.html        |   68 +
 .../conformance/glsl/bugs/qualcomm-crash.html      |    2 +-
 .../glsl/bugs/sampler-struct-function-arg.html     |    2 +-
 .../bugs/sequence-operator-evaluation-order.html   |  102 +-
 .../glsl/constructors/glsl-construct-bvec2.html    |    6 +-
 .../glsl/constructors/glsl-construct-bvec3.html    |    6 +-
 .../glsl/constructors/glsl-construct-bvec4.html    |    6 +-
 .../glsl/constructors/glsl-construct-ivec2.html    |    6 +-
 .../glsl/constructors/glsl-construct-ivec3.html    |    6 +-
 .../glsl/constructors/glsl-construct-ivec4.html    |    6 +-
 .../glsl/constructors/glsl-construct-mat2.html     |    6 +-
 .../glsl/constructors/glsl-construct-mat3.html     |    6 +-
 .../glsl/constructors/glsl-construct-mat4.html     |    6 +-
 .../glsl/constructors/glsl-construct-vec2.html     |    6 +-
 .../glsl/constructors/glsl-construct-vec3.html     |    6 +-
 .../glsl/constructors/glsl-construct-vec4.html     |    6 +-
 .../glsl/functions/glsl-function-distance.html     |    4 +-
 .../glsl/functions/glsl-function-dot.html          |    4 +-
 .../shader-with-short-circuiting-operators.html    |    4 +-
 .../glsl/misc/shaders-with-invariance.html         |   38 +-
 .../glsl/misc/shaders-with-uniform-structs.html    |   22 +-
 .../glsl/misc/struct-specifiers-in-uniforms.html   |    2 +-
 .../samplers/glsl-function-texture2dprojlod.html   |    4 +-
 .../glsl/variables/gl-fragcoord-xy-values.html     |   72 +-
 .../conformance/glsl/variables/gl-frontfacing.html |    6 +-
 .../conformance/misc/bad-arguments-test.html       |   64 +-
 .../checkout/conformance/misc/expando-loss.html    |    8 +-
 .../checkout/conformance/more/all_tests.html       |  114 +-
 .../conformance/more/all_tests_linkonly.html       |  114 +-
 .../conformance/more/all_tests_sequential.html     |  114 +-
 .../conformance/more/functions/texImage2D.html     |    2 +-
 .../checkout/conformance/more/index.html           |    4 +-
 .../conformance/ogles/GL/abs/abs_001_to_006.html   |   82 +-
 .../conformance/ogles/GL/acos/acos_001_to_006.html |   82 +-
 .../conformance/ogles/GL/all/all_001_to_004.html   |   54 +-
 .../conformance/ogles/GL/any/any_001_to_004.html   |   54 +-
 .../ogles/GL/array/array_001_to_006.html           |  170 +-
 .../conformance/ogles/GL/asin/asin_001_to_006.html |   82 +-
 .../conformance/ogles/GL/atan/atan_001_to_008.html |  110 +-
 .../conformance/ogles/GL/atan/atan_009_to_012.html |   54 +-
 .../GL/biConstants/biConstants_001_to_008.html     |  206 +-
 .../GL/biConstants/biConstants_009_to_016.html     |  206 +-
 .../ogles/GL/build/build_001_to_008.html           |   94 +-
 .../ogles/GL/build/build_009_to_016.html           |   94 +-
 .../ogles/GL/build/build_017_to_024.html           |   94 +-
 .../ogles/GL/build/build_025_to_032.html           |   94 +-
 .../ogles/GL/build/build_033_to_040.html           |   94 +-
 .../ogles/GL/build/build_041_to_048.html           |   94 +-
 .../ogles/GL/build/build_049_to_056.html           |   94 +-
 .../ogles/GL/build/build_057_to_064.html           |   94 +-
 .../ogles/GL/build/build_065_to_072.html           |   94 +-
 .../ogles/GL/build/build_073_to_080.html           |   94 +-
 .../ogles/GL/build/build_081_to_088.html           |   94 +-
 .../ogles/GL/build/build_089_to_096.html           |   94 +-
 .../ogles/GL/build/build_097_to_104.html           |   94 +-
 .../ogles/GL/build/build_105_to_112.html           |   94 +-
 .../ogles/GL/build/build_113_to_120.html           |   94 +-
 .../ogles/GL/build/build_121_to_128.html           |   94 +-
 .../ogles/GL/build/build_129_to_136.html           |   94 +-
 .../ogles/GL/build/build_137_to_144.html           |   94 +-
 .../ogles/GL/build/build_145_to_152.html           |   94 +-
 .../ogles/GL/build/build_153_to_160.html           |   94 +-
 .../ogles/GL/build/build_161_to_168.html           |   94 +-
 .../ogles/GL/build/build_169_to_176.html           |   94 +-
 .../ogles/GL/build/build_177_to_178.html           |   22 +-
 ..._in_varying_array_out_of_bounds_001_to_001.html |   10 +-
 .../conformance/ogles/GL/ceil/ceil_001_to_006.html |   82 +-
 .../ogles/GL/clamp/clamp_001_to_006.html           |   82 +-
 .../GL/control_flow/control_flow_001_to_008.html   |  206 +-
 .../GL/control_flow/control_flow_009_to_010.html   |   50 +-
 .../conformance/ogles/GL/cos/cos_001_to_006.html   |   82 +-
 .../ogles/GL/cross/cross_001_to_002.html           |   26 +-
 .../ogles/GL/default/default_001_to_001.html       |   12 +-
 .../ogles/GL/degrees/degrees_001_to_006.html       |   82 +-
 .../ogles/GL/discard/discard_001_to_002.html       |   38 +-
 .../ogles/GL/distance/distance_001_to_006.html     |   82 +-
 .../conformance/ogles/GL/dot/dot_001_to_006.html   |   82 +-
 .../ogles/GL/equal/equal_001_to_008.html           |  110 +-
 .../ogles/GL/equal/equal_009_to_012.html           |   54 +-
 .../conformance/ogles/GL/exp/exp_001_to_008.html   |  110 +-
 .../conformance/ogles/GL/exp/exp_009_to_012.html   |   54 +-
 .../conformance/ogles/GL/exp2/exp2_001_to_008.html |  110 +-
 .../conformance/ogles/GL/exp2/exp2_009_to_012.html |   54 +-
 .../GL/faceforward/faceforward_001_to_006.html     |   82 +-
 .../ogles/GL/floor/floor_001_to_006.html           |   82 +-
 .../ogles/GL/fract/fract_001_to_006.html           |   82 +-
 .../ogles/GL/functions/functions_001_to_008.html   |  206 +-
 .../ogles/GL/functions/functions_009_to_016.html   |  206 +-
 .../ogles/GL/functions/functions_017_to_024.html   |  206 +-
 .../ogles/GL/functions/functions_025_to_032.html   |  206 +-
 .../ogles/GL/functions/functions_033_to_040.html   |  206 +-
 .../ogles/GL/functions/functions_041_to_048.html   |  206 +-
 .../ogles/GL/functions/functions_049_to_056.html   |  206 +-
 .../ogles/GL/functions/functions_057_to_064.html   |  206 +-
 .../ogles/GL/functions/functions_065_to_072.html   |  206 +-
 .../ogles/GL/functions/functions_073_to_080.html   |  206 +-
 .../ogles/GL/functions/functions_081_to_088.html   |  206 +-
 .../ogles/GL/functions/functions_089_to_096.html   |  206 +-
 .../ogles/GL/functions/functions_097_to_104.html   |  206 +-
 .../ogles/GL/functions/functions_105_to_112.html   |  206 +-
 .../ogles/GL/functions/functions_113_to_120.html   |  206 +-
 .../ogles/GL/functions/functions_121_to_126.html   |  154 +-
 .../GL/gl_FragCoord/gl_FragCoord_001_to_003.html   |   52 +-
 .../gl_FrontFacing/gl_FrontFacing_001_to_001.html  |   12 +-
 .../GL/greaterThan/greaterThan_001_to_008.html     |  110 +-
 .../greaterThanEqual_001_to_008.html               |  110 +-
 .../GL/inversesqrt/inversesqrt_001_to_006.html     |   82 +-
 .../ogles/GL/length/length_001_to_006.html         |   82 +-
 .../ogles/GL/lessThan/lessThan_001_to_008.html     |  110 +-
 .../GL/lessThanEqual/lessThanEqual_001_to_008.html |  110 +-
 .../conformance/ogles/GL/log/log_001_to_008.html   |  110 +-
 .../conformance/ogles/GL/log/log_009_to_012.html   |   54 +-
 .../conformance/ogles/GL/log2/log2_001_to_008.html |  110 +-
 .../conformance/ogles/GL/log2/log2_009_to_012.html |   54 +-
 .../conformance/ogles/GL/mat/mat_001_to_008.html   |  206 +-
 .../conformance/ogles/GL/mat/mat_009_to_016.html   |  206 +-
 .../conformance/ogles/GL/mat/mat_017_to_024.html   |  206 +-
 .../conformance/ogles/GL/mat/mat_025_to_032.html   |  206 +-
 .../conformance/ogles/GL/mat/mat_033_to_040.html   |  206 +-
 .../conformance/ogles/GL/mat/mat_041_to_046.html   |  154 +-
 .../conformance/ogles/GL/mat3/mat3_001_to_006.html |  406 +-
 .../matrixCompMult/matrixCompMult_001_to_004.html  |   54 +-
 .../conformance/ogles/GL/max/max_001_to_006.html   |   82 +-
 .../conformance/ogles/GL/min/min_001_to_006.html   |   82 +-
 .../conformance/ogles/GL/mix/mix_001_to_006.html   |   82 +-
 .../conformance/ogles/GL/mod/mod_001_to_008.html   |  134 +-
 .../ogles/GL/normalize/normalize_001_to_006.html   |   82 +-
 .../conformance/ogles/GL/not/not_001_to_004.html   |   54 +-
 .../ogles/GL/notEqual/notEqual_001_to_008.html     |  110 +-
 .../ogles/GL/notEqual/notEqual_009_to_012.html     |   54 +-
 .../ogles/GL/operators/operators_001_to_008.html   |  206 +-
 .../ogles/GL/operators/operators_009_to_016.html   |  206 +-
 .../ogles/GL/operators/operators_017_to_024.html   |  206 +-
 .../ogles/GL/operators/operators_025_to_026.html   |   50 +-
 .../conformance/ogles/GL/pow/pow_001_to_008.html   |  110 +-
 .../conformance/ogles/GL/pow/pow_009_to_016.html   |  110 +-
 .../conformance/ogles/GL/pow/pow_017_to_024.html   |  110 +-
 .../ogles/GL/radians/radians_001_to_006.html       |   82 +-
 .../ogles/GL/reflect/reflect_001_to_006.html       |   82 +-
 .../ogles/GL/refract/refract_001_to_006.html       |   82 +-
 .../conformance/ogles/GL/sign/sign_001_to_006.html |   82 +-
 .../conformance/ogles/GL/sin/sin_001_to_006.html   |   82 +-
 .../ogles/GL/smoothstep/smoothstep_001_to_006.html |   82 +-
 .../conformance/ogles/GL/sqrt/sqrt_001_to_006.html |   82 +-
 .../conformance/ogles/GL/step/step_001_to_006.html |   82 +-
 .../ogles/GL/struct/struct_001_to_008.html         |  206 +-
 .../ogles/GL/struct/struct_009_to_016.html         |  206 +-
 .../ogles/GL/struct/struct_017_to_024.html         |  206 +-
 .../ogles/GL/struct/struct_025_to_032.html         |  206 +-
 .../ogles/GL/struct/struct_033_to_040.html         |  206 +-
 .../ogles/GL/struct/struct_041_to_048.html         |  206 +-
 .../ogles/GL/struct/struct_049_to_056.html         |  206 +-
 .../ogles/GL/swizzlers/swizzlers_001_to_008.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_009_to_016.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_017_to_024.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_025_to_032.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_033_to_040.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_041_to_048.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_049_to_056.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_057_to_064.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_065_to_072.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_073_to_080.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_081_to_088.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_089_to_096.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_097_to_104.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_105_to_112.html   |  110 +-
 .../ogles/GL/swizzlers/swizzlers_113_to_120.html   |  110 +-
 .../conformance/ogles/GL/tan/tan_001_to_006.html   |   82 +-
 .../conformance/ogles/GL/vec/vec_001_to_008.html   |  206 +-
 .../conformance/ogles/GL/vec/vec_009_to_016.html   |  206 +-
 .../conformance/ogles/GL/vec/vec_017_to_018.html   |   50 +-
 .../conformance/ogles/GL/vec3/vec3_001_to_008.html |  298 +-
 .../checkout/conformance/ogles/ogles-utils.js      |    2 +-
 .../conformance/programs/program-infolog.html      |   83 +
 .../conformance/renderbuffers/feedback-loop.html   |    2 +-
 .../framebuffer-object-attachment.html             |    4 +-
 .../rendering/clipping-wide-points.html            |   47 +
 .../rendering/default-texture-draw-bug.html        |    2 +-
 .../conformance/rendering/gl-viewport-test-2.html  |   76 +
 .../conformance/rendering/line-loop-tri-fan.html   |    2 +-
 .../rendering/out-of-bounds-index-buffers.html     |  156 +
 .../checkout/conformance/rendering/point-size.html |    4 +-
 .../conformance/rendering/polygon-offset.html      |    2 +-
 .../conformance/state/gl-enable-enum-test.html     |    6 +-
 .../checkout/conformance/state/gl-get-calls.html   |    8 +-
 .../tex-2d-rgb-rgb-unsigned_byte.html              |   57 +
 .../tex-2d-rgb-rgb-unsigned_short_5_6_5.html       |   57 +
 .../tex-2d-rgba-rgba-unsigned_byte.html            |   57 +
 .../tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html   |   57 +
 .../tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html   |   57 +
 .../conformance/textures/misc/mipmap-fbo.html      |    8 +-
 .../textures/misc/tex-sub-image-2d-bad-args.html   |   51 +-
 .../conformance/textures/misc/texture-size.html    |    2 +-
 .../textures/misc/texture-upload-size.html         |    1 +
 .../typedarrays/array-large-array-tests.html       |    2 +-
 .../conformance/typedarrays/array-unit-tests.html  |   20 +-
 .../conformance/typedarrays/data-view-test.html    |  127 +-
 .../conformance/uniforms/gl-uniform-arrays.html    |    4 +-
 .../out-of-bounds-uniform-array-access.html        |   30 +-
 ...buffer-data-and-buffer-sub-data-sub-source.html |  204 +
 .../buffers/buffer-type-restrictions.html          |    3 +-
 .../conformance2/buffers/get-buffer-sub-data.html  |  176 +
 .../buffers/one-large-uniform-buffer.html          |  152 +
 .../checkout/conformance2/context/methods-2.html   |    3 +
 .../extensions/ext-color-buffer-float.html         |  121 +-
 .../ext-disjoint-timer-query-webgl2.html           |  335 ++
 .../glsl3/array-element-increment.html             |  152 +
 .../glsl3/bool-type-cast-bug-uint-ivec-uvec.html   |  389 ++
 .../compound-assignment-type-combination.html      |   47 +
 .../checkout/conformance2/glsl3/frag-depth.html    |    2 +-
 .../conformance2/glsl3/invalid-invariant.html      |  109 +
 .../glsl3/no-attribute-vertex-shader.html          |   84 +
 .../glsl3/shader-with-invalid-characters.html      |   58 +
 .../shader-with-mis-matching-uniform-block.html    |   80 +
 .../glsl3/texture-offset-out-of-range.html         |  103 +-
 .../texture-offset-uniform-texture-coordinate.html |  191 +
 .../conformance2/glsl3/tricky-loop-conditions.html |  348 ++
 .../unary-minus-operator-in-dynamic-loop.html      |  269 ++
 .../glsl3/uniform-block-layout-match.html          |   78 +
 .../conformance2/glsl3/uniform-block-layouts.html  |   84 +
 .../conformance2/glsl3/valid-invariant.html        |  116 +
 .../vector-dynamic-indexing-nv-driver-bug.html     |   88 +
 .../glsl3/vector-dynamic-indexing.html             |   60 +-
 .../checkout/conformance2/misc/expando-loss-2.html |  145 +-
 .../getextension-while-pbo-bound-stability.html    |   78 +
 .../misc/object-deletion-behaviour-2.html          |  136 +
 .../conformance2/misc/uninitialized-test-2.html    |    2 +-
 .../conformance2/misc/views-with-offsets.html      |  341 ++
 .../conformance2/query/occlusion-query.html        |    4 +-
 .../reading/format-r11f-g11f-b10f.html             |  287 ++
 .../reading/read-pixels-from-fbo-test.html         |    4 +-
 .../read-pixels-from-rgb8-into-pbo-bug.html        |  106 +
 .../reading/read-pixels-pack-parameters.html       |  140 +-
 .../renderbuffers/invalidate-framebuffer.html      |    4 +-
 .../multisample-with-full-sample-counts.html       |  119 +
 .../conformance2/rendering/attrib-type-match.html  |  582 +++
 .../blitframebuffer-filter-outofbounds.html        |  199 +
 .../rendering/blitframebuffer-filter-srgb.html     |  183 +
 .../blitframebuffer-multisampled-readbuffer.html   |  134 +
 .../blitframebuffer-outside-readbuffer.html        |  289 ++
 .../rendering/blitframebuffer-scissor-enabled.html |  182 +
 .../rendering/blitframebuffer-size-overflow.html   |   98 +
 ...litframebuffer-srgb-and-linear-drawbuffers.html |  229 ++
 .../rendering/blitframebuffer-stencil-only.html    |  192 +
 .../rendering/blitframebuffer-test.html            |  342 ++
 .../rendering/canvas-resizing-with-pbo-bound.html  |  130 +
 .../rendering/clear-func-buffer-type-match.html    |  166 +
 .../rendering/clear-srgb-color-buffer.html         |  109 +
 .../rendering/clipping-wide-points.html            |   47 +
 .../conformance2/rendering/draw-buffers.html       |   11 +-
 .../conformance2/rendering/element-index-uint.html |    8 +-
 .../framebuffer-completeness-unaffected.html       |    9 +-
 .../rendering/framebuffer-unsupported.html         |  155 +
 .../fs-color-type-mismatch-color-buffer-type.html  |  190 +
 .../rendering/instanced-rendering-bug.html         |  275 ++
 .../out-of-bounds-index-buffers-after-copying.html |  207 +
 .../rendering-sampling-feedback-loop.html          |  148 +
 .../conformance2/rendering/rgb-format-support.html |  132 +
 .../rendering/uniform-block-buffer-size.html       |  249 ++
 .../conformance2/sync/sync-webgl-specific.html     |   87 +
 .../tex-2d-r11f_g11f_b10f-rgb-float.html           |   57 +
 .../tex-2d-r11f_g11f_b10f-rgb-half_float.html      |   57 +
 ...g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html |   57 +
 .../tex-2d-r16f-red-float.html                     |   57 +
 .../tex-2d-r16f-red-half_float.html                |   57 +
 .../tex-2d-r32f-red-float.html                     |   57 +
 .../tex-2d-r8-red-unsigned_byte.html               |   57 +
 .../tex-2d-r8ui-red_integer-unsigned_byte.html     |   57 +
 .../tex-2d-rg16f-rg-float.html                     |   57 +
 .../tex-2d-rg16f-rg-half_float.html                |   57 +
 .../tex-2d-rg32f-rg-float.html                     |   57 +
 .../tex-2d-rg8-rg-unsigned_byte.html               |   57 +
 .../tex-2d-rg8ui-rg_integer-unsigned_byte.html     |   57 +
 .../tex-2d-rgb16f-rgb-float.html                   |   57 +
 .../tex-2d-rgb16f-rgb-half_float.html              |   57 +
 .../tex-2d-rgb32f-rgb-float.html                   |   57 +
 .../tex-2d-rgb565-rgb-unsigned_byte.html           |   57 +
 .../tex-2d-rgb565-rgb-unsigned_short_5_6_5.html    |   57 +
 .../tex-2d-rgb5_a1-rgba-unsigned_byte.html         |   57 +
 ...tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html |   57 +
 .../tex-2d-rgb8-rgb-unsigned_byte.html             |   57 +
 .../tex-2d-rgb8ui-rgb_integer-unsigned_byte.html   |   57 +
 .../tex-2d-rgb9_e5-rgb-float.html                  |   57 +
 .../tex-2d-rgb9_e5-rgb-half_float.html             |   57 +
 .../tex-2d-rgba16f-rgba-float.html                 |   57 +
 .../tex-2d-rgba16f-rgba-half_float.html            |   57 +
 .../tex-2d-rgba32f-rgba-float.html                 |   57 +
 .../tex-2d-rgba4-rgba-unsigned_byte.html           |   57 +
 .../tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html  |   57 +
 .../tex-2d-rgba8-rgba-unsigned_byte.html           |   57 +
 .../tex-2d-rgba8ui-rgba_integer-unsigned_byte.html |   57 +
 .../tex-2d-srgb8-rgb-unsigned_byte.html            |   57 +
 .../tex-2d-srgb8_alpha8-rgba-unsigned_byte.html    |   57 +
 .../tex-3d-r11f_g11f_b10f-rgb-float.html           |   57 +
 .../tex-3d-r11f_g11f_b10f-rgb-half_float.html      |   57 +
 ...g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html |   57 +
 .../tex-3d-r16f-red-float.html                     |   57 +
 .../tex-3d-r16f-red-half_float.html                |   57 +
 .../tex-3d-r32f-red-float.html                     |   57 +
 .../tex-3d-r8-red-unsigned_byte.html               |   57 +
 .../tex-3d-r8ui-red_integer-unsigned_byte.html     |   57 +
 .../tex-3d-rg16f-rg-float.html                     |   57 +
 .../tex-3d-rg16f-rg-half_float.html                |   57 +
 .../tex-3d-rg32f-rg-float.html                     |   57 +
 .../tex-3d-rg8-rg-unsigned_byte.html               |   57 +
 .../tex-3d-rg8ui-rg_integer-unsigned_byte.html     |   57 +
 .../tex-3d-rgb16f-rgb-float.html                   |   57 +
 .../tex-3d-rgb16f-rgb-half_float.html              |   57 +
 .../tex-3d-rgb32f-rgb-float.html                   |   57 +
 .../tex-3d-rgb565-rgb-unsigned_byte.html           |   57 +
 .../tex-3d-rgb565-rgb-unsigned_short_5_6_5.html    |   57 +
 .../tex-3d-rgb5_a1-rgba-unsigned_byte.html         |   57 +
 ...tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html |   57 +
 .../tex-3d-rgb8-rgb-unsigned_byte.html             |   57 +
 .../tex-3d-rgb8ui-rgb_integer-unsigned_byte.html   |   57 +
 .../tex-3d-rgb9_e5-rgb-float.html                  |   57 +
 .../tex-3d-rgb9_e5-rgb-half_float.html             |   57 +
 .../tex-3d-rgba16f-rgba-float.html                 |   57 +
 .../tex-3d-rgba16f-rgba-half_float.html            |   57 +
 .../tex-3d-rgba32f-rgba-float.html                 |   57 +
 .../tex-3d-rgba4-rgba-unsigned_byte.html           |   57 +
 .../tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html  |   57 +
 .../tex-3d-rgba8-rgba-unsigned_byte.html           |   57 +
 .../tex-3d-rgba8ui-rgba_integer-unsigned_byte.html |   57 +
 .../tex-3d-srgb8-rgb-unsigned_byte.html            |   57 +
 .../tex-3d-srgb8_alpha8-rgba-unsigned_byte.html    |   57 +
 .../textures/misc/active-3d-texture-bug.html       |  145 +
 .../misc/copy-texture-image-luma-format.html       |  187 +
 .../misc/copy-texture-image-webgl-specific.html    |  324 ++
 .../integer-cubemap-specification-order-bug.html   |  190 +
 .../misc/integer-cubemap-texture-sampling.html     |  190 +
 ...ub-image-with-array-buffer-view-sub-source.html |  218 ++
 .../tex-image-with-bad-args-from-dom-elements.html |  149 +
 .../textures/misc/tex-image-with-bad-args.html     |   76 +
 .../misc/tex-image-with-different-data-source.html |   72 +
 .../textures/misc/tex-mipmap-levels.html           |   80 +
 .../textures/misc/tex-srgb-mipmap.html             |  227 ++
 .../misc/tex-storage-compressed-formats.html       |   23 +-
 .../textures/misc/tex-unpack-params.html           |  154 +-
 .../textures/misc/texel-fetch-undefined.html       |    2 +-
 .../transform_feedback/transform_feedback.html     |  147 +-
 .../two-unreferenced-varyings.html                 |  157 +
 .../unwritten-output-defaults-to-zero.html         |  154 +
 .../vertex_arrays/vertex-array-object.html         |   80 +-
 .../deqp/data/gles2/shaders/conditionals.html      |    2 +-
 .../data/gles2/shaders/constant_expressions.html   |    2 +-
 .../deqp/data/gles2/shaders/constants.html         |    2 +-
 .../deqp/data/gles2/shaders/conversions.html       |    2 +-
 .../deqp/data/gles2/shaders/declarations.html      |    2 +-
 .../checkout/deqp/data/gles2/shaders/fragdata.html |    2 +-
 .../deqp/data/gles2/shaders/functions.html         |    2 +-
 .../gles2/shaders/invalid_texture_functions.html   |    2 +-
 .../checkout/deqp/data/gles2/shaders/keywords.html |    2 +-
 .../checkout/deqp/data/gles2/shaders/linkage.html  |    2 +-
 .../deqp/data/gles2/shaders/preprocessor.html      |    2 +-
 .../data/gles2/shaders/qualification_order.html    |    2 +-
 .../data/gles2/shaders/reserved_operators.html     |    2 +-
 .../checkout/deqp/data/gles2/shaders/scoping.html  |    2 +-
 .../deqp/data/gles2/shaders/shader-lib-test.html   |  884 ++---
 .../checkout/deqp/data/gles2/shaders/swizzles.html |    2 +-
 .../checkout/deqp/data/gles2/shaders/template.html |    2 +-
 .../deqp/framework/common/tcuCompressedTexture.js  |    1 -
 .../deqp/framework/common/tcuImageCompare.js       |   22 +-
 .../checkout/deqp/framework/common/tcuRGBA.js      |   13 +
 .../checkout/deqp/framework/common/tcuSkipList.js  |  227 +-
 .../checkout/deqp/framework/common/tcuTexture.js   |    5 +-
 .../deqp/framework/delibs/debase/deMath.js         |   12 +-
 .../deqp/framework/opengl/gluShaderProgram.js      |    8 +-
 .../checkout/deqp/framework/opengl/gluTexture.js   |    2 -
 .../deqp/framework/opengl/gluTextureUtil.js        |   31 +
 .../opengl/simplereference/sglrReferenceContext.js |   27 +-
 .../simplereference/sglrReferenceContextTest.js    |    2 +-
 .../referencerenderer/rrFragmentOperations.js      |   26 +-
 .../deqp/framework/referencerenderer/rrRenderer.js |  460 ++-
 .../deqp/framework/referencerenderer/rrUtil.js     |   36 +-
 .../checkout/deqp/functional/gles3/es3fApiCase.js  |    9 +
 .../functional/gles3/es3fFboColorbufferTests.js    |   49 +-
 .../functional/gles3/es3fFboCompletenessTests.js   |    1 -
 .../functional/gles3/es3fFboDepthbufferTests.js    |    3 +
 .../functional/gles3/es3fFboInvalidateTests.js     |   34 +-
 .../functional/gles3/es3fFboMultisampleTests.js    |   27 +-
 .../deqp/functional/gles3/es3fFboRenderTest.js     |   93 +-
 .../functional/gles3/es3fFboStencilbufferTests.js  |    1 +
 .../deqp/functional/gles3/es3fFboTestCase.js       |   20 +-
 .../deqp/functional/gles3/es3fFboTestUtil.js       |   10 +-
 .../functional/gles3/es3fFragmentOutputTests.js    |   64 +-
 .../functional/gles3/es3fFramebufferBlitTests.js   |   62 +-
 .../gles3/es3fInstancedRenderingTests.js           |    8 +
 .../functional/gles3/es3fIntegerStateQueryTests.js | 4092 ++++++++++----------
 .../deqp/functional/gles3/es3fMultisampleTests.js  |   56 +-
 .../functional/gles3/es3fNegativeBufferApiTests.js |    8 +-
 .../gles3/es3fNegativeFragmentApiTests.js          |   27 +-
 .../functional/gles3/es3fNegativeShaderApiTests.js |   21 +-
 .../functional/gles3/es3fNegativeStateApiTests.js  |  127 +-
 .../gles3/es3fNegativeTextureApiTests.js           |   81 +-
 .../functional/gles3/es3fOcclusionQueryTests.js    |    4 +-
 .../functional/gles3/es3fPixelBufferObjectTest.js  |   16 +-
 .../functional/gles3/es3fPrimitiveRestartTests.js  |    4 +-
 .../functional/gles3/es3fRasterizerDiscardTests.js |   14 +-
 .../functional/gles3/es3fShaderBuiltinVarTests.js  |    2 +-
 .../gles3/es3fShaderCommonFunctionTests.js         |    7 +-
 .../functional/gles3/es3fShaderDerivateTests.js    |   41 +-
 .../gles3/es3fShaderTextureFunctionTests.js        |    7 +-
 .../deqp/functional/gles3/es3fSyncTests.js         |    7 +-
 .../functional/gles3/es3fTextureFilteringTests.js  |    8 +-
 .../functional/gles3/es3fTextureFormatTests.js     |   30 +-
 .../deqp/functional/gles3/es3fTextureWrapTests.js  |    4 +
 .../functional/gles3/es3fTransformFeedbackTests.js |    6 +-
 .../deqp/functional/gles3/es3fUniformBlockTests.js |    5 +-
 .../functional/gles3/fbocolorbuffer/blend.html     |    2 +-
 .../functional/gles3/fbocolorbuffer/tex2d_00.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex2d_01.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex2d_02.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex2d_03.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex2d_04.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex2d_05.html  |   32 +
 .../gles3/fbocolorbuffer/tex2darray_00.html        |   32 +
 .../gles3/fbocolorbuffer/tex2darray_01.html        |   32 +
 .../gles3/fbocolorbuffer/tex2darray_02.html        |   32 +
 .../gles3/fbocolorbuffer/tex2darray_03.html        |   32 +
 .../gles3/fbocolorbuffer/tex2darray_04.html        |   32 +
 .../gles3/fbocolorbuffer/tex2darray_05.html        |   32 +
 .../functional/gles3/fbocolorbuffer/tex3d_00.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex3d_01.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex3d_02.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex3d_03.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex3d_04.html  |   32 +
 .../functional/gles3/fbocolorbuffer/tex3d_05.html  |   32 +
 .../gles3/fbocolorbuffer/texcube_00.html           |   32 +
 .../gles3/fbocolorbuffer/texcube_01.html           |   32 +
 .../gles3/fbocolorbuffer/texcube_02.html           |   32 +
 .../gles3/fbocolorbuffer/texcube_03.html           |   32 +
 .../gles3/fbocolorbuffer/texcube_04.html           |   32 +
 .../gles3/fbocolorbuffer/texcube_05.html           |   32 +
 .../functional/gles3/fboinvalidate/default.html    |   32 +
 .../functional/gles3/fboinvalidate/format_00.html  |   32 +
 .../functional/gles3/fboinvalidate/format_01.html  |   32 +
 .../functional/gles3/fboinvalidate/format_02.html  |   32 +
 .../deqp/functional/gles3/fboinvalidate/sub.html   |   32 +
 .../functional/gles3/fboinvalidate/target.html     |   32 +
 .../deqp/functional/gles3/fboinvalidate/whole.html |   32 +
 .../functional/gles3/fbomultisample.2_samples.html |   24 +
 .../functional/gles3/fbomultisample.4_samples.html |   24 +
 .../functional/gles3/fbomultisample.8_samples.html |   24 +
 .../gles3/fborender/recreate_color_00.html         |   31 +
 .../gles3/fborender/recreate_color_01.html         |   31 +
 .../gles3/fborender/recreate_color_02.html         |   31 +
 .../gles3/fborender/recreate_color_03.html         |   31 +
 .../gles3/fborender/recreate_color_04.html         |   31 +
 .../gles3/fborender/recreate_color_05.html         |   31 +
 .../gles3/fborender/recreate_color_06.html         |   31 +
 .../gles3/fborender/recreate_depth_stencil.html    |   31 +
 .../deqp/functional/gles3/fborender/resize_00.html |   31 +
 .../deqp/functional/gles3/fborender/resize_01.html |   31 +
 .../deqp/functional/gles3/fborender/resize_02.html |   31 +
 .../deqp/functional/gles3/fborender/resize_03.html |   31 +
 .../gles3/fborender/shared_colorbuffer_00.html     |   31 +
 .../gles3/fborender/shared_colorbuffer_01.html     |   31 +
 .../gles3/fborender/shared_colorbuffer_02.html     |   31 +
 .../gles3/fborender/shared_colorbuffer_clear.html  |   31 +
 .../gles3/fborender/shared_depth_stencil.html      |   31 +
 .../functional/gles3/fborender/stencil_clear.html  |   31 +
 .../gles3/fragmentoutput/array.fixed.html          |   31 +
 .../gles3/fragmentoutput/array.float.html          |   31 +
 .../functional/gles3/fragmentoutput/array.int.html |   31 +
 .../gles3/fragmentoutput/array.uint.html           |   31 +
 .../gles3/fragmentoutput/basic.fixed.html          |   31 +
 .../gles3/fragmentoutput/basic.float.html          |   31 +
 .../functional/gles3/fragmentoutput/basic.int.html |   31 +
 .../gles3/fragmentoutput/basic.uint.html           |   31 +
 .../functional/gles3/fragmentoutput/random_00.html |   31 +
 .../functional/gles3/fragmentoutput/random_01.html |   31 +
 .../functional/gles3/fragmentoutput/random_02.html |   31 +
 .../gles3/framebufferblit/conversion_00.html       |   31 +
 .../gles3/framebufferblit/conversion_01.html       |   31 +
 .../gles3/framebufferblit/conversion_02.html       |   31 +
 .../gles3/framebufferblit/conversion_03.html       |   31 +
 .../gles3/framebufferblit/conversion_04.html       |   31 +
 .../gles3/framebufferblit/conversion_05.html       |   31 +
 .../gles3/framebufferblit/conversion_06.html       |   31 +
 .../gles3/framebufferblit/conversion_07.html       |   31 +
 .../gles3/framebufferblit/conversion_08.html       |   31 +
 .../gles3/framebufferblit/conversion_09.html       |   31 +
 .../gles3/framebufferblit/conversion_10.html       |   31 +
 .../gles3/framebufferblit/conversion_11.html       |   31 +
 .../gles3/framebufferblit/conversion_12.html       |   31 +
 .../gles3/framebufferblit/conversion_13.html       |   31 +
 .../gles3/framebufferblit/conversion_14.html       |   31 +
 .../gles3/framebufferblit/conversion_15.html       |   31 +
 .../gles3/framebufferblit/conversion_16.html       |   31 +
 .../gles3/framebufferblit/conversion_17.html       |   31 +
 .../gles3/framebufferblit/conversion_18.html       |   31 +
 .../gles3/framebufferblit/conversion_19.html       |   31 +
 .../gles3/framebufferblit/conversion_20.html       |   31 +
 .../gles3/framebufferblit/conversion_21.html       |   31 +
 .../gles3/framebufferblit/conversion_22.html       |   31 +
 .../gles3/framebufferblit/conversion_23.html       |   31 +
 .../gles3/framebufferblit/conversion_24.html       |   31 +
 .../gles3/framebufferblit/conversion_25.html       |   31 +
 .../gles3/framebufferblit/conversion_26.html       |   31 +
 .../gles3/framebufferblit/conversion_27.html       |   31 +
 .../gles3/framebufferblit/conversion_28.html       |   31 +
 .../gles3/framebufferblit/conversion_29.html       |   31 +
 .../gles3/framebufferblit/conversion_30.html       |   31 +
 .../gles3/framebufferblit/conversion_31.html       |   31 +
 .../gles3/framebufferblit/conversion_32.html       |   31 +
 .../gles3/framebufferblit/conversion_33.html       |   31 +
 .../gles3/framebufferblit/conversion_34.html       |   31 +
 .../framebufferblit/default_framebuffer_00.html    |   31 +
 .../framebufferblit/default_framebuffer_01.html    |   31 +
 .../framebufferblit/default_framebuffer_02.html    |   31 +
 .../framebufferblit/default_framebuffer_03.html    |   31 +
 .../framebufferblit/default_framebuffer_04.html    |   31 +
 .../framebufferblit/default_framebuffer_05.html    |   31 +
 .../framebufferblit/default_framebuffer_06.html    |   31 +
 .../gles3/framebufferblit/depth_stencil.html       |   31 +
 .../functional/gles3/framebufferblit/rect_00.html  |   31 +
 .../functional/gles3/framebufferblit/rect_01.html  |   31 +
 .../functional/gles3/framebufferblit/rect_02.html  |   31 +
 .../functional/gles3/framebufferblit/rect_03.html  |   31 +
 .../functional/gles3/framebufferblit/rect_04.html  |   31 +
 .../functional/gles3/framebufferblit/rect_05.html  |   31 +
 .../functional/gles3/framebufferblit/rect_06.html  |   31 +
 .../gles3/occlusionquery_conservative.html         |   26 +
 .../functional/gles3/occlusionquery_strict.html    |   26 +
 .../deqp/functional/gles3/pixelbufferobject.html   |    2 +-
 .../deqp/functional/gles3/primitiverestart/00.html |   31 +
 .../deqp/functional/gles3/primitiverestart/01.html |   31 +
 .../deqp/functional/gles3/primitiverestart/02.html |   31 +
 .../deqp/functional/gles3/primitiverestart/03.html |   31 +
 .../deqp/functional/gles3/primitiverestart/04.html |   31 +
 .../deqp/functional/gles3/primitiverestart/05.html |   31 +
 .../deqp/functional/gles3/primitiverestart/06.html |   31 +
 .../deqp/functional/gles3/primitiverestart/07.html |   31 +
 .../checkout/deqp/functional/gles3/readpixel.html  |    4 +-
 .../deqp/functional/gles3/shaderderivate_dfdx.html |   24 +
 .../deqp/functional/gles3/shaderderivate_dfdy.html |   24 +
 .../functional/gles3/shaderderivate_fwidth.html    |   24 +
 .../gles3/shaderoperator/common_functions.html     |   33 +
 .../deqp/modules/shared/glsBufferTestUtil.js       |    4 +-
 .../modules/shared/glsBuiltinPrecisionTests.js     |   44 +-
 .../deqp/modules/shared/glsFboCompletenessTests.js |    3 +-
 .../deqp/modules/shared/glsSamplerObjectTest.js    |    4 +
 .../deqp/modules/shared/glsShaderExecUtil.js       |    2 +-
 .../deqp/modules/shared/glsShaderLibrary.js        |    3 -
 .../deqp/modules/shared/glsShaderRenderCase.js     |    2 +-
 .../checkout/deqp/modules/shared/glsStateQuery.js  |   36 +-
 .../deqp/modules/shared/glsTextureTestUtil.js      |    9 +-
 .../deqp/modules/shared/glsVertexArrayTests.js     |    2 +-
 .../checkout/deqp/temp_externs/w3c_css.js          |    6 +
 dom/canvas/test/webgl-conf/checkout/deqp/webgl2.js |   60 -
 .../checkout/extra/big-fbos-example.html           |    2 +-
 .../extra/lots-of-polys-shader-example.html        |   22 +-
 .../webgl-conf/checkout/extra/out-of-vram.html     |    2 +-
 .../checkout/extra/tex-image-with-video-test.js    |    1 +
 .../js/glsl-constructor-tests-generator.js         |  390 +-
 .../test/webgl-conf/checkout/js/glsl-generator.js  |   18 +-
 .../test/webgl-conf/checkout/js/js-test-pre.js     |   16 +-
 .../checkout/js/tests/clipping-wide-points.js      |  109 +
 .../tests/compound-assignment-type-combination.js  |  150 +
 .../checkout/js/tests/instanceof-test.js           |    6 +-
 ...e-and-sub-image-2d-with-canvas-sub-rectangle.js |  329 ++
 .../tex-image-and-sub-image-2d-with-canvas.js      |   20 +-
 ...nd-sub-image-2d-with-image-bitmap-from-image.js |    1 +
 .../tex-image-and-sub-image-2d-with-image-data.js  |  143 +-
 .../tests/tex-image-and-sub-image-2d-with-image.js |  111 +-
 .../tests/tex-image-and-sub-image-2d-with-video.js |  105 +-
 ...tex-image-and-sub-image-2d-with-webgl-canvas.js |   17 +-
 ...e-and-sub-image-3d-with-canvas-sub-rectangle.js |  304 ++
 .../tex-image-and-sub-image-3d-with-canvas.js      |    3 +-
 ...d-sub-image-3d-with-image-bitmap-from-canvas.js |    4 +-
 .../tex-image-and-sub-image-3d-with-image-data.js  |  242 +-
 .../tests/tex-image-and-sub-image-3d-with-image.js |  248 +-
 .../tex-image-and-sub-image-3d-with-svg-image.js   |    3 +-
 .../tests/tex-image-and-sub-image-3d-with-video.js |   89 +-
 ...tex-image-and-sub-image-3d-with-webgl-canvas.js |    5 +-
 .../js/tests/tex-image-and-sub-image-utils.js      |  333 +-
 ...-image-and-sub-image-with-image-bitmap-utils.js |  236 +-
 .../webgl-conf/checkout/js/webgl-test-utils.js     |   85 +-
 .../checkout/resources/glsl-generator.js           |   18 +-
 .../checkout/webgl-conformance-tests.html          |   13 +-
 610 files changed, 37322 insertions(+), 13201 deletions(-)
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/buffers/buffer-uninitialized.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/context/context-no-alpha-fbo-with-alpha.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-etc.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-draw-buffers-framebuffer-unsupported.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/bool-type-cast-bug-int-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/global-invariant-does-not-leak-across-shaders.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/invariant-does-not-leak-across-shaders.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/nested-sequence-operator.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/programs/program-infolog.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/rendering/clipping-wide-points.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/rendering/gl-viewport-test-2.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/rendering/out-of-bounds-index-buffers.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_short_5_6_5.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/buffers/buffer-data-and-buffer-sub-data-sub-source.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/buffers/get-buffer-sub-data.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/buffers/one-large-uniform-buffer.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/extensions/ext-disjoint-timer-query-webgl2.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/array-element-increment.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/bool-type-cast-bug-uint-ivec-uvec.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/compound-assignment-type-combination.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/invalid-invariant.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/no-attribute-vertex-shader.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-invalid-characters.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-mis-matching-uniform-block.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/texture-offset-uniform-texture-coordinate.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/tricky-loop-conditions.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/unary-minus-operator-in-dynamic-loop.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layout-match.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layouts.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/valid-invariant.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/vector-dynamic-indexing-nv-driver-bug.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/misc/getextension-while-pbo-bound-stability.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/misc/object-deletion-behaviour-2.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/misc/views-with-offsets.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/reading/format-r11f-g11f-b10f.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-from-rgb8-into-pbo-bug.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/multisample-with-full-sample-counts.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/attrib-type-match.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-outofbounds.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-srgb.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-multisampled-readbuffer.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-outside-readbuffer.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-scissor-enabled.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-size-overflow.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-srgb-and-linear-drawbuffers.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-stencil-only.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-test.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/canvas-resizing-with-pbo-bound.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-func-buffer-type-match.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-srgb-color-buffer.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clipping-wide-points.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/framebuffer-unsupported.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/fs-color-type-mismatch-color-buffer-type.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/instanced-rendering-bug.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/out-of-bounds-index-buffers-after-copying.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rendering-sampling-feedback-loop.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rgb-format-support.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/rendering/uniform-block-buffer-size.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/sync/sync-webgl-specific.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r32f-red-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8-red-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8ui-red_integer-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg32f-rg-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8-rg-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8ui-rg_integer-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb32f-rgb-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8-rgb-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba32f-rgba-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8-rgba-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8-rgb-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r32f-red-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8-red-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8ui-red_integer-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg32f-rg-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8-rg-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8ui-rg_integer-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb32f-rgb-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8-rgb-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-half_float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba32f-rgba-float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8-rgba-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8-rgb-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/active-3d-texture-bug.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-luma-format.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-webgl-specific.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-specification-order-bug.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-texture-sampling.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-and-sub-image-with-array-buffer-view-sub-source.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args-from-dom-elements.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-different-data-source.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-srgb-mipmap.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/two-unreferenced-varyings.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_04.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_05.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_04.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_05.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_04.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_05.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_04.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_05.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/default.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/sub.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/target.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/whole.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.2_samples.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.4_samples.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.8_samples.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_04.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_05.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_06.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_depth_stencil.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_clear.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_depth_stencil.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/stencil_clear.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.fixed.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.int.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.uint.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.fixed.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.float.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.int.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.uint.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_04.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_05.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_06.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_07.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_08.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_09.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_10.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_11.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_12.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_13.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_14.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_15.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_16.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_17.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_18.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_19.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_20.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_21.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_22.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_23.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_24.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_25.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_26.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_27.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_28.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_29.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_30.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_31.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_32.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_33.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_34.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_04.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_05.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_06.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/depth_stencil.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_04.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_05.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_06.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_conservative.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_strict.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/00.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/01.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/02.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/03.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/04.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/05.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/06.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/07.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdx.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdy.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_fwidth.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderoperator/common_functions.html
 create mode 100644 dom/canvas/test/webgl-conf/checkout/js/tests/clipping-wide-points.js
 create mode 100644 dom/canvas/test/webgl-conf/checkout/js/tests/compound-assignment-type-combination.js
 create mode 100644 dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-canvas-sub-rectangle.js
 create mode 100644 dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-canvas-sub-rectangle.js
This commit is contained in:
vincentliu 2017-01-15 23:29:56 +08:00
parent 7a40386fed
commit 5eda50a052
610 changed files with 37325 additions and 13204 deletions

View File

@ -70,7 +70,7 @@ typeInfo.forEach(function(typeInfo1) {
var strVertexShader = wtu.replaceParams(wtu.getScript('vertexShader'), replaceParams);
var glVertexShader = wtu.loadShader(gl, strVertexShader, gl.VERTEX_SHADER);
assertMsg(glVertexShader != null, "Vertex shader compiled successfully.");
// Bind both a_1 and a_2 to the same position and verify the link fails.
// Bind both a_1 and a_2 to the same position and verify the link fails.
// Do so for all valid positions available.
for (var l = 0; l < maxAttributes; l++) {
var glProgram = gl.createProgram();

View File

@ -66,34 +66,37 @@ if (!gl) {
var vertexObject = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(0), gl.STATIC_DRAW);
if (wtu.getDefault3DContextVersion() < 2) {
gl.vertexAttribPointer(0, 1, gl.INT, 0, 0, 0);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM,
"vertexAttribPointer should not support INT");
"vertexAttribPointer should not support INT");
gl.vertexAttribPointer(0, 1, gl.UNSIGNED_INT, 0, 0, 0);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM,
"vertexAttribPointer should not support UNSIGNED_INT");
"vertexAttribPointer should not support UNSIGNED_INT");
gl.vertexAttribPointer(0, 1, gl.FIXED, 0, 0, 0);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM,
"vertexAttribPointer should not support FIXED");
"vertexAttribPointer should not support FIXED");
}
var checkVertexAttribPointer = function(
gl, err, reason, size, type, normalize, stride, offset) {
gl.vertexAttribPointer(0, size, type, normalize, stride, offset);
var succeeded = (err == gl.NO_ERROR);
wtu.glErrorShouldBe(gl, err,
"gl.vertexAttribPointer(0, " + size +
", gl." + wtu.glEnumToString(gl, type) +
", " + normalize +
", " + stride +
", " + offset +
") should " + (err == gl.NO_ERROR ? "succeed " : "fail ") + reason);
shouldBe('gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_SIZE)', size.toString());
shouldBe('gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_TYPE)', 'gl.' + wtu.glEnumToString(gl, type));
shouldBe('gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_NORMALIZED)', normalize.toString());
shouldBe('gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_STRIDE)', stride.toString());
shouldBe('gl.getVertexAttribOffset(0, gl.VERTEX_ATTRIB_ARRAY_POINTER)', offset.toString());
") should " + (succeeded ? "succeed " : "fail ") + reason);
if (succeeded) {
shouldBe('gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_SIZE)', size.toString());
shouldBe('gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_TYPE)', 'gl.' + wtu.glEnumToString(gl, type));
shouldBe('gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_NORMALIZED)', normalize.toString());
shouldBe('gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_STRIDE)', stride.toString());
shouldBe('gl.getVertexAttribOffset(0, gl.VERTEX_ATTRIB_ARRAY_POINTER)', offset.toString());
}
}
var types = [

View File

@ -0,0 +1,123 @@
<!--
/*
** Copyright (c) 2016 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src="../../js/js-test-pre.js"></script>
<script src="../../js/webgl-test-utils.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<canvas id="canvas" width="1" height="1"></canvas>
<script id="vshader" type="x-shader/x-vertex">
attribute float a_vertex;
void main()
{
gl_Position = a_vertex == 0.0 ? vec4(9, 9, 9, 1) : vec4(0.5, 0.5, 0.5, 1);
}
</script>
<script id="fshader" type="x-shader/x-fragment">
void main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
</script>
<script>
"use strict";
description("Tests that uninitialized WebGLBuffers are zeroed out");
var wtu = WebGLTestUtils;
var gl = wtu.create3DContext(document.getElementById("canvas"));
var program = wtu.setupProgram(gl, ["vshader", "fshader"], ["a_vertex"]);
shouldBeTrue("program != null");
var TEST_LENGTH = 1024;
var TEST_BUFSIZE = TEST_LENGTH * 4;
var data = new Float32Array(TEST_LENGTH / 4); // this array is zeroed
var indices = new Uint16Array(TEST_LENGTH);
for (var i = 0; i < TEST_LENGTH; i++) {
indices[i] = i;
}
gl.clearColor(0, 1, 0, 1);
function test(initFunction) {
var uninitializedBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, uninitializedBuffer);
initFunction();
var elements = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elements);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
gl.useProgram(program);
var vertexLoc = gl.getAttribLocation(program, "a_vertex");
gl.vertexAttribPointer(vertexLoc, 1, gl.FLOAT, gl.FALSE, 0, 0);
gl.enableVertexAttribArray(vertexLoc);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "no error should result from setup");
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.drawElements(gl.POINTS, TEST_LENGTH, gl.UNSIGNED_SHORT, 0);
wtu.checkCanvasRect(gl, 0, 0, 1, 1, [0, 255, 0, 255], "buffer should be initialized to zero");
gl.deleteBuffer(uninitializedBuffer);
}
var REPETITIONS = 50;
var j;
debug("");
debug("testing bufferData(..., size, ...)");
for (j = 0; j < REPETITIONS; j++) {
test(function() {
gl.bufferData(gl.ARRAY_BUFFER, TEST_BUFSIZE, gl.STATIC_DRAW);
});
}
debug("");
debug("testing bufferSubData(..., offset, data) of uninitialized buffer");
for (j = 0; j < REPETITIONS; j++) {
test(function() {
gl.bufferData(gl.ARRAY_BUFFER, TEST_BUFSIZE, gl.STATIC_DRAW);
// bufferSubData the second quarter of the buffer
gl.bufferSubData(gl.ARRAY_BUFFER, TEST_BUFSIZE / 4, data);
});
}
var successfullyParsed = true;
</script>
<script src="../../js/js-test-post.js"></script>
</body>
</html>

View File

@ -46,7 +46,7 @@ var constants = {
DEPTH_BUFFER_BIT : 0x00000100,
STENCIL_BUFFER_BIT : 0x00000400,
COLOR_BUFFER_BIT : 0x00004000,
/* BeginMode */
POINTS : 0x0000,
LINES : 0x0001,
@ -55,7 +55,7 @@ LINE_STRIP : 0x0003,
TRIANGLES : 0x0004,
TRIANGLE_STRIP : 0x0005,
TRIANGLE_FAN : 0x0006,
/* AlphaFunction (not supported in ES20) */
/* NEVER */
/* LESS */
@ -65,7 +65,7 @@ TRIANGLE_FAN : 0x0006,
/* NOTEQUAL */
/* GEQUAL */
/* ALWAYS */
/* BlendingFactorDest */
ZERO : 0,
ONE : 1,
@ -75,7 +75,7 @@ SRC_ALPHA : 0x0302,
ONE_MINUS_SRC_ALPHA : 0x0303,
DST_ALPHA : 0x0304,
ONE_MINUS_DST_ALPHA : 0x0305,
/* BlendingFactorSrc */
/* ZERO */
/* ONE */
@ -86,17 +86,17 @@ SRC_ALPHA_SATURATE : 0x0308,
/* ONE_MINUS_SRC_ALPHA */
/* DST_ALPHA */
/* ONE_MINUS_DST_ALPHA */
/* BlendEquationSeparate */
FUNC_ADD : 0x8006,
BLEND_EQUATION : 0x8009,
BLEND_EQUATION_RGB : 0x8009, /* same as BLEND_EQUATION */
BLEND_EQUATION_ALPHA : 0x883D,
/* BlendSubtract */
FUNC_SUBTRACT : 0x800A,
FUNC_REVERSE_SUBTRACT : 0x800B,
/* Separate Blend Functions */
BLEND_DST_RGB : 0x80C8,
BLEND_SRC_RGB : 0x80C9,
@ -107,27 +107,27 @@ ONE_MINUS_CONSTANT_COLOR : 0x8002,
CONSTANT_ALPHA : 0x8003,
ONE_MINUS_CONSTANT_ALPHA : 0x8004,
BLEND_COLOR : 0x8005,
/* Buffer Objects */
ARRAY_BUFFER : 0x8892,
ELEMENT_ARRAY_BUFFER : 0x8893,
ARRAY_BUFFER_BINDING : 0x8894,
ELEMENT_ARRAY_BUFFER_BINDING : 0x8895,
STREAM_DRAW : 0x88E0,
STATIC_DRAW : 0x88E4,
DYNAMIC_DRAW : 0x88E8,
BUFFER_SIZE : 0x8764,
BUFFER_USAGE : 0x8765,
CURRENT_VERTEX_ATTRIB : 0x8626,
/* CullFaceMode */
FRONT : 0x0404,
BACK : 0x0405,
FRONT_AND_BACK : 0x0408,
/* DepthFunction */
/* NEVER */
/* LESS */
@ -137,7 +137,7 @@ FRONT_AND_BACK : 0x0408,
/* NOTEQUAL */
/* GEQUAL */
/* ALWAYS */
/* EnableCap */
/* TEXTURE_2D */
CULL_FACE : 0x0B44,
@ -149,18 +149,18 @@ SCISSOR_TEST : 0x0C11,
POLYGON_OFFSET_FILL : 0x8037,
SAMPLE_ALPHA_TO_COVERAGE : 0x809E,
SAMPLE_COVERAGE : 0x80A0,
/* ErrorCode */
NO_ERROR : 0,
INVALID_ENUM : 0x0500,
INVALID_VALUE : 0x0501,
INVALID_OPERATION : 0x0502,
OUT_OF_MEMORY : 0x0505,
/* FrontFaceDirection */
CW : 0x0900,
CCW : 0x0901,
/* GetPName */
LINE_WIDTH : 0x0B21,
ALIASED_POINT_SIZE_RANGE : 0x846D,
@ -210,23 +210,23 @@ SAMPLE_BUFFERS : 0x80A8,
SAMPLES : 0x80A9,
SAMPLE_COVERAGE_VALUE : 0x80AA,
SAMPLE_COVERAGE_INVERT : 0x80AB,
/* GetTextureParameter */
/* TEXTURE_MAG_FILTER */
/* TEXTURE_MIN_FILTER */
/* TEXTURE_WRAP_S */
/* TEXTURE_WRAP_T */
COMPRESSED_TEXTURE_FORMATS : 0x86A3,
/* HintMode */
DONT_CARE : 0x1100,
FASTEST : 0x1101,
NICEST : 0x1102,
/* HintTarget */
GENERATE_MIPMAP_HINT : 0x8192,
/* DataType */
BYTE : 0x1400,
UNSIGNED_BYTE : 0x1401,
@ -235,7 +235,7 @@ UNSIGNED_SHORT : 0x1403,
INT : 0x1404,
UNSIGNED_INT : 0x1405,
FLOAT : 0x1406,
/* PixelFormat */
DEPTH_COMPONENT : 0x1902,
ALPHA : 0x1906,
@ -243,13 +243,13 @@ RGB : 0x1907,
RGBA : 0x1908,
LUMINANCE : 0x1909,
LUMINANCE_ALPHA : 0x190A,
/* PixelType */
/* UNSIGNED_BYTE */
UNSIGNED_SHORT_4_4_4_4 : 0x8033,
UNSIGNED_SHORT_5_5_5_1 : 0x8034,
UNSIGNED_SHORT_5_6_5 : 0x8363,
/* Shaders */
FRAGMENT_SHADER : 0x8B30,
VERTEX_SHADER : 0x8B31,
@ -269,7 +269,7 @@ ACTIVE_UNIFORMS : 0x8B86,
ACTIVE_ATTRIBUTES : 0x8B89,
SHADING_LANGUAGE_VERSION : 0x8B8C,
CURRENT_PROGRAM : 0x8B8D,
/* StencilFunction */
NEVER : 0x0200,
LESS : 0x0201,
@ -279,7 +279,7 @@ GREATER : 0x0204,
NOTEQUAL : 0x0205,
GEQUAL : 0x0206,
ALWAYS : 0x0207,
/* StencilOp */
/* ZERO */
KEEP : 0x1E00,
@ -289,16 +289,16 @@ DECR : 0x1E03,
INVERT : 0x150A,
INCR_WRAP : 0x8507,
DECR_WRAP : 0x8508,
/* StringName */
VENDOR : 0x1F00,
RENDERER : 0x1F01,
VERSION : 0x1F02,
/* TextureMagFilter */
NEAREST : 0x2600,
LINEAR : 0x2601,
/* TextureMinFilter */
/* NEAREST */
/* LINEAR */
@ -306,17 +306,17 @@ NEAREST_MIPMAP_NEAREST : 0x2700,
LINEAR_MIPMAP_NEAREST : 0x2701,
NEAREST_MIPMAP_LINEAR : 0x2702,
LINEAR_MIPMAP_LINEAR : 0x2703,
/* TextureParameterName */
TEXTURE_MAG_FILTER : 0x2800,
TEXTURE_MIN_FILTER : 0x2801,
TEXTURE_WRAP_S : 0x2802,
TEXTURE_WRAP_T : 0x2803,
/* TextureTarget */
TEXTURE_2D : 0x0DE1,
TEXTURE : 0x1702,
TEXTURE_CUBE_MAP : 0x8513,
TEXTURE_BINDING_CUBE_MAP : 0x8514,
TEXTURE_CUBE_MAP_POSITIVE_X : 0x8515,
@ -326,7 +326,7 @@ TEXTURE_CUBE_MAP_NEGATIVE_Y : 0x8518,
TEXTURE_CUBE_MAP_POSITIVE_Z : 0x8519,
TEXTURE_CUBE_MAP_NEGATIVE_Z : 0x851A,
MAX_CUBE_MAP_TEXTURE_SIZE : 0x851C,
/* TextureUnit */
TEXTURE0 : 0x84C0,
TEXTURE1 : 0x84C1,
@ -361,12 +361,12 @@ TEXTURE29 : 0x84DD,
TEXTURE30 : 0x84DE,
TEXTURE31 : 0x84DF,
ACTIVE_TEXTURE : 0x84E0,
/* TextureWrapMode */
REPEAT : 0x2901,
CLAMP_TO_EDGE : 0x812F,
MIRRORED_REPEAT : 0x8370,
/* Uniform Types */
FLOAT_VEC2 : 0x8B50,
FLOAT_VEC3 : 0x8B51,
@ -383,7 +383,7 @@ FLOAT_MAT3 : 0x8B5B,
FLOAT_MAT4 : 0x8B5C,
SAMPLER_2D : 0x8B5E,
SAMPLER_CUBE : 0x8B60,
/* Vertex Arrays */
VERTEX_ATTRIB_ARRAY_ENABLED : 0x8622,
VERTEX_ATTRIB_ARRAY_SIZE : 0x8623,
@ -392,14 +392,14 @@ VERTEX_ATTRIB_ARRAY_TYPE : 0x8625,
VERTEX_ATTRIB_ARRAY_NORMALIZED : 0x886A,
VERTEX_ATTRIB_ARRAY_POINTER : 0x8645,
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING : 0x889F,
/* Read Format */
IMPLEMENTATION_COLOR_READ_TYPE : 0x8B9A,
IMPLEMENTATION_COLOR_READ_FORMAT : 0x8B9B,
/* Shader Source */
COMPILE_STATUS : 0x8B81,
/* Shader Precision-Specified Types */
LOW_FLOAT : 0x8DF0,
MEDIUM_FLOAT : 0x8DF1,
@ -407,11 +407,11 @@ HIGH_FLOAT : 0x8DF2,
LOW_INT : 0x8DF3,
MEDIUM_INT : 0x8DF4,
HIGH_INT : 0x8DF5,
/* Framebuffer Object. */
FRAMEBUFFER : 0x8D40,
RENDERBUFFER : 0x8D41,
RGBA4 : 0x8056,
RGB5_A1 : 0x8057,
RGB565 : 0x8D62,
@ -419,7 +419,7 @@ DEPTH_COMPONENT16 : 0x81A5,
STENCIL_INDEX : 0x1901,
STENCIL_INDEX8 : 0x8D48,
DEPTH_STENCIL : 0x84F9,
RENDERBUFFER_WIDTH : 0x8D42,
RENDERBUFFER_HEIGHT : 0x8D43,
RENDERBUFFER_INTERNAL_FORMAT : 0x8D44,
@ -429,29 +429,29 @@ RENDERBUFFER_BLUE_SIZE : 0x8D52,
RENDERBUFFER_ALPHA_SIZE : 0x8D53,
RENDERBUFFER_DEPTH_SIZE : 0x8D54,
RENDERBUFFER_STENCIL_SIZE : 0x8D55,
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE : 0x8CD0,
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME : 0x8CD1,
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL : 0x8CD2,
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE : 0x8CD3,
COLOR_ATTACHMENT0 : 0x8CE0,
DEPTH_ATTACHMENT : 0x8D00,
STENCIL_ATTACHMENT : 0x8D20,
DEPTH_STENCIL_ATTACHMENT : 0x821A,
NONE : 0,
FRAMEBUFFER_COMPLETE : 0x8CD5,
FRAMEBUFFER_INCOMPLETE_ATTACHMENT : 0x8CD6,
FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT : 0x8CD7,
FRAMEBUFFER_INCOMPLETE_DIMENSIONS : 0x8CD9,
FRAMEBUFFER_UNSUPPORTED : 0x8CDD,
FRAMEBUFFER_BINDING : 0x8CA6,
RENDERBUFFER_BINDING : 0x8CA7,
MAX_RENDERBUFFER_SIZE : 0x84E8,
INVALID_FRAMEBUFFER_OPERATION : 0x0506,
/* WebGL-specific enums */

View File

@ -62,8 +62,7 @@ void main()
var wtu = WebGLTestUtils;
var gl;
var contextAttribs = null;
var pixel_1 = [0, 0, 0, 1];
var pixel_2 = [0, 0, 0, 1];
var redChannels = [0, 0, 0];
var correctColor = null;
var framebuffer;
var fbHasColor;
@ -302,10 +301,13 @@ function testStencilAndDepth(stencil, depth)
function testAntialias(antialias)
{
debug("Testing antialias = " + antialias);
// Both the width and height of canvas are N.
// Note that "N = 2" doesn't work for some post processing AA per the discussion at https://github.com/KhronosGroup/WebGL/pull/1977.
var N = 3;
if (antialias)
shouldBeNonNull("gl = getWebGL(2, 2, { depth: false, stencil: false, alpha: false, antialias: true }, [ 0, 0, 0, 1 ], 1, 0)");
shouldBeNonNull("gl = getWebGL(" + N + ", " + N + ", { depth: false, stencil: false, alpha: false, antialias: true }, [ 0, 0, 0, 1 ], 1, 0)");
else
shouldBeNonNull("gl = getWebGL(2, 2, { depth: false, stencil: false, alpha: false, antialias: false }, [ 0, 0, 0, 1 ], 1, 0)");
shouldBeNonNull("gl = getWebGL(" + N + ", " + N + ", { depth: false, stencil: false, alpha: false, antialias: false }, [ 0, 0, 0, 1 ], 1, 0)");
shouldBeNonNull("contextAttribs = gl.getContextAttributes()");
var vertices = new Float32Array([
@ -317,17 +319,13 @@ function testAntialias(antialias)
255, 0, 0, 255,
255, 0, 0, 255]);
drawAndReadPixel(gl, vertices, colors, 0, 0);
var buf_1 = new Uint8Array(1 * 1 * 4);
var buf_2 = new Uint8Array(1 * 1 * 4);
gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, buf_1);
gl.readPixels(0, 1, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, buf_2);
pixel_1[0] = buf_1[0];
pixel_2[0] = buf_2[0];
// For some anti-alias algorithms, effects may be not on diagonal line pixels, so that either:
// - The red channel of the pixel at (0, 0) is not 0 and not 255, or,
// - If it is 0, expect that the red channel of the pixel at (0, 1) is not 0 and not 255.
shouldBe("pixel_1[0] != 255 && pixel_1[0] != 0 || pixel_1[0] == 0 && pixel_2[0] != 255 && pixel_2[0] != 0",
"contextAttribs.antialias");
var buf = new Uint8Array(N * N * 4);
gl.readPixels(0, 0, N, N, gl.RGBA, gl.UNSIGNED_BYTE, buf);
redChannels[0] = buf[4 * (N + 1)]; // (1, 1)
redChannels[1] = buf[4 * N * (N - 1)]; // left top
redChannels[2] = buf[4 * (N - 1)]; // right bottom
shouldBeTrue("redChannels[1] == 255 && redChannels[2] == 0");
shouldBe("redChannels[0] != 255 && redChannels[0] != 0", "contextAttribs.antialias");
}
function runTest()

View File

@ -0,0 +1,98 @@
<!--
/*
** Copyright (c) 2016 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src="../../js/js-test-pre.js"></script>
<script src="../../js/webgl-test-utils.js"></script>
<script>
"use strict";
var wtu = WebGLTestUtils;
// This declaration needs to be global for "shouldBe" to see it
var gl;
function init()
{
description('Verify that a WebGL context with alpha:false still works correctly after handling textures with an alpha channel.');
runTest();
}
function getWebGL(contextAttribs)
{
return wtu.create3DContext("c", contextAttribs);
}
function runTest()
{
var buf = new Uint8Array(1 * 1 * 4);
shouldBeNonNull("gl = getWebGL({ alpha: false, antialias: false })");
// Clear to black. Alpha channel of clearColor() is ignored.
gl.clearColor(0.0, 0.0, 0.0, 0.7);
gl.clear(gl.COLOR_BUFFER_BIT);
wtu.checkCanvasRect(gl, 0, 0, 1, 1, [0, 0, 0, 255],
"Alpha channel of clearColor should be ignored");
wtu.waitForComposite(function() {
// Make a new framebuffer and attach a texture with an alpha channel.
var fbo = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
// Clear texture. Note that alpha channel is not 1.0.
gl.clearColor(1.0, 0.0, 0.0, 0.5);
gl.clear(gl.COLOR_BUFFER_BIT);
wtu.checkCanvasRect(gl, 0, 0, 1, 1, [255, 0, 0, 128],
"Alpha channel of clearColor should be obeyed for FBO with alpha channel",
1);
// Bind back buffer and check that its alpha channel is still 1.0.
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
wtu.checkCanvasRect(gl, 0, 0, 1, 1, [0, 0, 0, 255],
"Alpha channel of back buffer should still be 255");
finishTest();
});
}
</script>
</head>
<body onload="init()">
<div id="description"></div>
<div id="console"></div>
<canvas width="20" height="20" style="border: 1px solid blue;" id="c"></canvas>
</body>
</html>

View File

@ -183,6 +183,9 @@ var methods = [
// Properties to be ignored because they were added in versions of the
// spec that are backward-compatible with this version
var ignoredMethods = [
// There is no official spec for the commit API yet, the proposal link is:
// https://wiki.whatwg.org/wiki/OffscreenCanvas
"commit"
];
function assertFunction(v, f) {

View File

@ -141,7 +141,7 @@ function runSupportedTest(extensionEnabled) {
function runDivisorTestDisabled() {
debug("Testing VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE with extension disabled");
var VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x88FE;
gl.getVertexAttrib(0, VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE);
@ -615,7 +615,7 @@ function runANGLECorruptionTest()
ext.drawArraysInstancedANGLE(gl.TRIANGLES, 0, 6, instanceCount);
// Make sure each color was drawn correctly
// Make sure each color was drawn correctly
var i;
var passed = true;
for (i = 0; i < instanceCount; ++i) {

View File

@ -51,7 +51,7 @@ var elapsed_query = null;
var timestamp_query1 = null;
var timestamp_query2 = null;
var availability_retry = 500;
var timestamp_counter_bits = 0;
var timestamp_counter_bits = 0;
if (!gl) {
testFailed("WebGL context does not exist");
@ -95,18 +95,25 @@ function runSanityTests() {
shouldBe("ext.isQueryEXT(null)", "false");
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "null");
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.QUERY_COUNTER_BITS_EXT) >= 30", "true");
shouldBeTrue("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT) === null");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
shouldBeTrue("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.QUERY_COUNTER_BITS_EXT) >= 30");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
shouldBeTrue("ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.CURRENT_QUERY_EXT) === null");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
// Certain drivers set timestamp counter bits to 0 as they don't support timestamps
shouldBe("ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.QUERY_COUNTER_BITS_EXT) >= 30 || " +
"ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.QUERY_COUNTER_BITS_EXT) == 0", "true");
shouldBeTrue("ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.QUERY_COUNTER_BITS_EXT) >= 30 || " +
"ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.QUERY_COUNTER_BITS_EXT) === 0");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
debug("");
debug("Testing time elapsed query lifecycle");
query = ext.createQueryEXT();
shouldBe("ext.isQueryEXT(query)", "false");
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Query creation must succeed.");
shouldThrow("ext.beginQueryEXT(ext.TIMESTAMP_EXT, null)");
ext.beginQueryEXT(ext.TIMESTAMP_EXT, query);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "Beginning a timestamp query should fail.");
ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query);
@ -121,6 +128,7 @@ function runSanityTests() {
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query");
ext.endQueryEXT(ext.TIME_ELAPSED_EXT);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Ending an active time elapsed query should succeed.");
shouldThrow("ext.getQueryObjectEXT(null, ext.QUERY_RESULT_AVAILABLE_EXT)");
ext.getQueryObjectEXT(query, ext.QUERY_RESULT_AVAILABLE_EXT);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Fetching query result availability after query end should succeed.");
ext.endQueryEXT(ext.TIME_ELAPSED_EXT);
@ -138,9 +146,11 @@ function runSanityTests() {
debug("");
debug("Testing timestamp counter");
query = ext.createQueryEXT();
shouldThrow("ext.queryCounterEXT(null, ext.TIMESTAMP_EXT)");
ext.queryCounterEXT(query, ext.TIMESTAMP_EXT);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Timestamp counter queries should work.");
ext.deleteQueryEXT(query);
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
debug("");
debug("Performing parameter sanity checks");
@ -156,36 +166,45 @@ function runSanityTests() {
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "null");
ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query);
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
debug("");
debug("Testing failed begin query should not change the current query.");
ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query2);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "Beginning an elapsed query without ending should fail.");
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
debug("");
debug("Testing beginning a timestamp query should not change the elapsed query.");
ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query2)
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query");;
debug("Testing beginning a timestamp query is invalid and should not change the elapsed query.");
ext.beginQueryEXT(ext.TIMESTAMP_EXT, query2)
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM);
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
debug("");
debug("Testing timestamp queries end immediately so are never current.");
ext.queryCounterEXT(query2, ext.TIMESTAMP_EXT);
shouldBe("ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.CURRENT_QUERY_EXT)", "null");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
debug("");
debug("Testing ending the query should clear the current query.");
ext.endQueryEXT(ext.TIME_ELAPSED_EXT);
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "null");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
debug("");
debug("Testing beginning a elapsed query using a timestamp query should fail and not affect current query.")
ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query2);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "Switching query targets should fail.");
shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "null");
wtu.glErrorShouldBe(gl, gl.NO_ERROR);
ext.deleteQueryEXT(query);
ext.deleteQueryEXT(query2);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors at end of sanity tests");
}
function runElapsedTimeTest() {
@ -224,7 +243,7 @@ function verifyQueryResultsNotAvailable() {
var startTime = Date.now();
while (Date.now() - startTime < 2000) {
gl.finish();
if (ext.getQueryObjectEXT(elapsed_query, ext.QUERY_RESULT_AVAILABLE_EXT)) {
if (ext.getQueryObjectEXT(elapsed_query, ext.QUERY_RESULT_AVAILABLE_EXT)) {
testFailed("One of the queries' results became available too early");
return;
}
@ -241,18 +260,21 @@ function verifyQueryResultsNotAvailable() {
}
function checkQueryResults() {
if (availability_retry > 0 && (timestamp_counter_bits == 0 ||
!ext.getQueryObjectEXT(timestamp_query2, ext.QUERY_RESULT_AVAILABLE_EXT))) {
var error = gl.getError();
if (error != gl.NO_ERROR) {
testFailed("getQueryObjectEXT should have no errors: " + wtu.glEnumToString(gl, error));
debug("");
finishTest();
if (availability_retry > 0) {
// Make a reasonable attempt to wait for the queries' results to become available.
if (!ext.getQueryObjectEXT(elapsed_query, ext.QUERY_RESULT_AVAILABLE_EXT) ||
(timestamp_counter_bits > 0 && !ext.getQueryObjectEXT(timestamp_query2, ext.QUERY_RESULT_AVAILABLE_EXT))) {
var error = gl.getError();
if (error != gl.NO_ERROR) {
testFailed("getQueryObjectEXT should have no errors: " + wtu.glEnumToString(gl, error));
debug("");
finishTest();
return;
}
availability_retry--;
window.requestAnimationFrame(checkQueryResults);
return;
}
availability_retry--;
window.requestAnimationFrame(checkQueryResults);
return;
}
debug("");

View File

@ -216,7 +216,7 @@ function runOutputTests() {
canvas.width = 50; canvas.height = 50;
gl.viewport(0, 0, canvas.width, canvas.height);
// Enable depth testing with a clearDepth of 0.5
// This makes it so that fragments are only rendered when
// gl_fragDepthEXT is < 0.5

View File

@ -91,22 +91,22 @@ function runSupportedTest(extensionEnabled) {
function runHintTestDisabled() {
debug("Testing MAX_TEXTURE_MAX_ANISOTROPY_EXT with extension disabled");
var MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
gl.getParameter(MAX_TEXTURE_MAX_ANISOTROPY_EXT);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "MAX_TEXTURE_MAX_ANISOTROPY_EXT should not be queryable if extension is disabled");
debug("Testing TEXTURE_MAX_ANISOTROPY_EXT with extension disabled");
var TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.getTexParameter(gl.TEXTURE_2D, TEXTURE_MAX_ANISOTROPY_EXT);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "TEXTURE_MAX_ANISOTROPY_EXT should not be queryable if extension is disabled");
gl.texParameterf(gl.TEXTURE_2D, TEXTURE_MAX_ANISOTROPY_EXT, 1);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "TEXTURE_MAX_ANISOTROPY_EXT should not be settable if extension is disabled");
gl.texParameteri(gl.TEXTURE_2D, TEXTURE_MAX_ANISOTROPY_EXT, 1);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "TEXTURE_MAX_ANISOTROPY_EXT should not be settable if extension is disabled");
@ -127,7 +127,7 @@ function runHintTestEnabled() {
else{
testFailed("Minimum value of MAX_TEXTURE_MAX_ANISOTROPY_EXT is 2.0, returned values was: " + max_anisotropy);
}
// TODO make a texture and verify initial value == 1 and setting to less than 1 is invalid value
debug("Testing TEXTURE_MAX_ANISOTROPY_EXT with extension disabled");
@ -135,7 +135,7 @@ function runHintTestEnabled() {
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
var queried_value = gl.getTexParameter(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "TEXTURE_MAX_ANISOTROPY_EXT query should succeed if extension is enabled");
@ -148,13 +148,13 @@ function runHintTestEnabled() {
gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, 0);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "texParameterf TEXTURE_MAX_ANISOTROPY_EXT set to < 1 should be an invalid value");
gl.texParameteri(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, 0);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "texParameteri TEXTURE_MAX_ANISOTROPY_EXT set to < 1 should be an invalid value");
gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texParameterf TEXTURE_MAX_ANISOTROPY_EXT set to >= 2 should succeed");
gl.texParameteri(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texParameteri TEXTURE_MAX_ANISOTROPY_EXT set to >= 2 should succeed");

View File

@ -79,7 +79,7 @@ for (var ii = 0; ii < 2; ++ii) {
testFailed("WebGL context does not exist");
} else {
testPassed("WebGL context exists");
var drawType = (ii == 0) ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW;
debug("Testing " + ((ii == 0) ? "STATIC_DRAW" : "DYNAMIC_DRAW"));
@ -129,17 +129,17 @@ function runSupportedTest(extensionEnabled) {
function runDrawTests(drawType) {
debug("Test that draws with unsigned integer indices produce the expected results");
canvas.width = 50; canvas.height = 50;
gl.viewport(0, 0, canvas.width, canvas.height);
var program = wtu.setupSimpleColorProgram(gl);
function setupDraw(s) {
// Create a vertex buffer that cannot be fully indexed via shorts
var quadArrayLen = 65537 * 3;
var quadArray = new Float32Array(quadArrayLen);
// Leave all but the last 4 values zero-ed out
var idx = quadArrayLen - 12;

View File

@ -99,7 +99,7 @@ if (!gl) {
* namely the Nexus 5, and Nexus 7 (in 2014/01) when using bufferData before binding the VAO.
* The tested OS was Android KitKat 4.4.2, the effects were the same in all tested browsers
* (Chrome, Chrome Beta, Firefox, Firefox Beta), so it is likely a driver bug.
* These devices have the similar Adreno 320 and Adreno 330 GPUs respectively.
* These devices have the similar Adreno 320 and Adreno 330 GPUs respectively.
*
* The issuse resulted from this sequence of actions in a requestAnimationFrame loop:
* 1. upload some vertex buffers with gl.bufferData (eg. colors)
@ -107,12 +107,12 @@ if (!gl) {
* 3. clear the canvas
* 4. draw (some triangles) to the canvas
* 5. unbind the VAO
*
*
* This caused the drawn triangles to be drawn with black (0) for most of the frames, with some
* rare frames presenting the correct render results. Interestingly on both devices exactly every
* 64th frame passed (starting with the very first one), the others failed.
* 64th frame passed (starting with the very first one), the others failed.
* (Because of this, we test multiple frames.)
* When positions were uploaded, seemingly nothing was drawn, that's likely because the
* When positions were uploaded, seemingly nothing was drawn, that's likely because the
* position buffer was also all 0s.
*
* The issue did not occur:
@ -121,61 +121,61 @@ if (!gl) {
*/
function runBufferDataTest() {
debug("Testing draws with bufferData");
canvas.width = 50; canvas.height = 50;
gl.viewport(0, 0, canvas.width, canvas.height);
var testColor = [0, 255, 0, 255];
var clearColor = [255, 0, 0, 255];
// Where the issue occures, this is the sequence of success/failure every time:
// result: success fail fail fail fail ... success fail fail ...
// currentTestCount: 0 1 2 3 4 ... 64 65 66 ...
// So with just 1 test it passes, but 2 tests are enough. Here we use 3.
var numberOfTests = 3;
var numberOfTests = 3;
var currentTestCount = 0;
var positionLoc = 0;
var colorLoc = 1;
var gridRes = 1;
var program = wtu.setupSimpleVertexColorProgram(gl, positionLoc, colorLoc);
var vao0 = ext.createVertexArrayOES();
ext.bindVertexArrayOES(vao0);
var buffers = wtu.setupIndexedQuadWithOptions(gl,
{ gridRes: gridRes,
positionLocation: positionLoc
});
var colorTypedArray = createColorTypedArray();
var colorBuffer = gl.createBuffer(gl.ARRAY_BUFFER);
gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
gl.enableVertexAttribArray(colorLoc);
gl.vertexAttribPointer(colorLoc, 4, gl.FLOAT, false, 0, 0);
gl.vertexAttribPointer(colorLoc, 4, gl.FLOAT, false, 0, 0);
ext.bindVertexArrayOES(null);
testDrawing();
function testDrawing() {
// this order works fine:
// ext.bindVertexArrayOES(vao0);
// uploadColor();
// this order doesn't:
uploadColor();
ext.bindVertexArrayOES(vao0);
wtu.clearAndDrawIndexedQuad(gl, 1, clearColor);
ext.bindVertexArrayOES(null);
//debug("<span>"+currentTestCount+"</span");
wtu.checkCanvas(gl, testColor, "should be green")
if (++currentTestCount < numberOfTests) {
testDrawing();
// wtu.requestAnimFrame(testDrawing);
@ -184,12 +184,12 @@ function runBufferDataTest() {
ext.deleteVertexArrayOES(vao0);
}
}
function uploadColor() {
gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
gl.bufferData(gl.ARRAY_BUFFER, colorTypedArray, gl.STREAM_DRAW);
}
function createColorTypedArray() {
var colors = [];
var pOffset = 0;

View File

@ -624,31 +624,25 @@ function runBoundDeleteTests() {
gl.deleteBuffer(colorBuffer);
gl.deleteBuffer(positionBuffer);
var expectRetained = (ii != 0);
var shouldBeStr = (expectRetained ? "retained" : "cleared");
// The buffers should not be accessible at this point. Deleted objects that are bound
// in the current context undergo an automatic unbinding
var boundPositionBuffer = gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
if (expectRetained != (boundPositionBuffer == positionBuffer)) {
testFailed("Position attrib stored buffer should be " + shouldBeStr + ".");
if(boundPositionBuffer == positionBuffer) {
testFailed("Position buffer should be automatically unbound when deleted");
}
var boundColorBuffer = gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
if (expectRetained != (boundColorBuffer == colorBuffer)) {
testFailed("Color attrib stored buffer should be " + shouldBeStr + ".");
if(boundColorBuffer == colorBuffer) {
testFailed("Color buffer should be automatically unbound when deleted");
}
// If retained, everything should still work. If cleared, drawing should now fail.
gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_BYTE, 0);
var expectedError = (expectRetained ? gl.NO_ERROR : gl.INVALID_OPERATION);
wtu.glErrorShouldBe(gl, expectedError,
"Draw call should " + (expectRetained ? "not " : "") + "fail.");
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "Draw call should fail with unbound position and color buffers");
if (!gl.isBuffer(positionBuffer)) {
testFailed("Position buffer should count for isBuffer.");
}
if (!gl.isBuffer(colorBuffer)) {
testFailed("Color buffer should count for isBuffer.");
}
var isPositionBuffer = gl.isBuffer(positionBuffer);
var isColorBuffer = gl.isBuffer(colorBuffer);
if(isPositionBuffer) testFailed("Position buffer should no longer exist after last ref removed");
if(isColorBuffer) testFailed("Color buffer should no longer exist after last ref removed");
}
}

View File

@ -204,7 +204,12 @@ function runTestExtension() {
}
supportedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);
shouldBe("supportedFormats.length", "3");
// There should be exactly 3 formats for WebGL 1.0 and 13 formats for WebGL 2.0.
if (contextVersion < 2) {
shouldBe("supportedFormats.length", "3");
} else {
shouldBe("supportedFormats.length", "13");
}
// check that all 3 formats exist
for (var name in validFormats.length) {

View File

@ -0,0 +1,154 @@
<!--
/*
** Copyright (c) 2015-2016 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL WEBGL_compressed_texture_etc Conformance Tests</title>
<LINK rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src="../../js/js-test-pre.js"></script>
<script src="../../js/webgl-test-utils.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script>
"use strict";
description("This test verifies the functionality of the WEBGL_compressed_texture_etc extension, if it is available.");
debug("");
var COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0;
var COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1;
var COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2;
var COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3;
var COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00;
var COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02;
var ETC1_RGB8_OES = 0x8D64;
var COMPRESSED_R11_EAC = 0x9270;
var COMPRESSED_SIGNED_R11_EAC = 0x9271;
var COMPRESSED_RG11_EAC = 0x9272;
var COMPRESSED_SIGNED_RG11_EAC = 0x9273;
var COMPRESSED_RGB8_ETC2 = 0x9274;
var COMPRESSED_SRGB8_ETC2 = 0x9275;
var COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;
var COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
var COMPRESSED_RGBA8_ETC2_EAC = 0x9278;
var COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279;
var wtu = WebGLTestUtils;
var gl = wtu.create3DContext(undefined, undefined);
var WEBGL_compressed_texture_etc;
var formats = null;
function runTest() {
if (!gl) {
testFailed("context does not exist");
} else {
testPassed("context exists");
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
var haveExt = gl.getSupportedExtensions().indexOf("WEBGL_compressed_texture_etc") >= 0;
WEBGL_compressed_texture_etc = gl.getExtension("WEBGL_compressed_texture_etc");
var isPositive = true;
if (haveExt) {
if (WEBGL_compressed_texture_etc !== null) {
testPassed("WEBGL_compressed_texture_etc listed as supported and getExtension succeeded");
} else {
testFailed("WEBGL_compressed_texture_etc listed as supported but getExtension failed");
return;
}
} else {
if (WEBGL_compressed_texture_etc !== null) {
testFailed("WEBGL_compressed_texture_etc listed as supported but getExtension failed");
return;
} else {
testPassed("No WEBGL_compressed_texture_etc support -- this is legal");
isPositive = false;
}
}
if (isPositive) {
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_R11_EAC", "0x9270");
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_SIGNED_R11_EAC", "0x9271");
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_RG11_EAC", "0x9272");
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_SIGNED_RG11_EAC", "0x9273");
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_RGB8_ETC2", "0x9274");
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_SRGB8_ETC2", "0x9275");
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2", "0x9276");
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2", "0x9277");
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_RGBA8_ETC2_EAC", "0x9278");
shouldBe("WEBGL_compressed_texture_etc.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC", "0x9279");
}
wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGBA_S3TC_DXT1_EXT, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGBA_S3TC_DXT5_EXT, 4, 4, 0, new Uint8Array(16))");
wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, ETC1_RGB8_OES, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB_PVRTC_4BPPV1_IMG, 8, 8, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, 8, 8, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexImage2D(gl.TEXTURE_3D, 0, COMPRESSED_R11_EAC, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexSubImage2D(gl.TEXTURE_3D, 0, 0, 0, 4, 4, COMPRESSED_R11_EAC, new Uint8Array(8))");
var expected = isPositive ? gl.NO_ERROR : gl.INVALID_ENUM;
var expectedSub = isPositive ? gl.NO_ERROR : [gl.INVALID_ENUM, gl.INVALID_OPERATION];
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_R11_EAC, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, expectedSub, "gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 4, 4, COMPRESSED_R11_EAC, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_SIGNED_R11_EAC, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RG11_EAC, 4, 4, 0, new Uint8Array(16))");
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_SIGNED_RG11_EAC, 4, 4, 0, new Uint8Array(16))");
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB8_ETC2, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_SRGB8_ETC2, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 4, 4, 0, new Uint8Array(8))");
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGBA8_ETC2_EAC, 4, 4, 0, new Uint8Array(16))");
wtu.shouldGenerateGLError(gl, expected, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, 4, 4, 0, new Uint8Array(16))");
wtu.shouldGenerateGLError(gl, gl.NO_ERROR, "formats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS)");
shouldBeNonNull("formats");
shouldBe("formats.length", isPositive ? "10" : "0");
debug("");
shouldThrow("gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_R11_EAC, 4, 4, 0, null)");
shouldThrow("gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, COMPRESSED_R11_EAC, null)");
shouldThrow("gl.compressedTexImage3D(gl.TEXTURE_2D_ARRAY, 0, COMPRESSED_R11_EAC, 4, 4, 4, 0, null)");
shouldThrow("gl.compressedTexSubImage3D(gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, 0, 0, 0, COMPRESSED_R11_EAC, null)");
}
}
runTest();
var successfullyParsed = true;
</script>
<script src="../../js/js-test-post.js"></script>
</body>
</html>

View File

@ -177,6 +177,7 @@ function runTestExtension() {
}
supportedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);
// There should be exactly 4 formats for both WebGL 1.0 and WebGL 2.0.
shouldBe("supportedFormats.length", "4");
// check that all 4 formats exist

View File

@ -0,0 +1,711 @@
<!--
/*
** Copyright (c) 2012-2016 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src="../../js/js-test-pre.js"></script>
<script src="../../js/webgl-test-utils.js"></script>
<title>WebGL WEBGL_compressed_texture_s3tc_srgb Conformance Tests</title>
<style>
img {
border: 1px solid black;
margin-right: 1em;
}
.testimages {
}
.testimages br {
clear: both;
}
.testimages > div {
float: left;
margin: 1em;
}
</style>
</head>
<body>
<div id="description"></div>
<canvas id="canvas" width="8" height="8" style="width: 8px; height: 8px;"></canvas>
<div id="console"></div>
<script>
"use strict";
description("This test verifies the functionality of the WEBGL_compressed_texture_s3tc_srgb extension, if it is available.");
debug("");
// This is the original image from webgl-compressed-texture-s3tc.html but
// scaled to 0x40..0xbf inclusive and alpha changed from 0x69 to 0x7f.
var img_4x4_rgba_raw = new Uint8Array([
0xbf,0x40,0x40,0x7f,0x40,0xbf,0x40,0xff,0xbf,0x40,0x40,0xff,0x40,0xbf,0x40,0xff,
0x40,0xbf,0x40,0xff,0x40,0xbf,0x40,0xff,0xbf,0x40,0x40,0xff,0x40,0xbf,0x40,0xff,
0xbf,0x40,0x40,0xff,0xbf,0x40,0x40,0xff,0xbf,0x40,0x40,0xff,0x40,0xbf,0x40,0xff,
0x40,0xbf,0x40,0xff,0x40,0xbf,0x40,0xff,0x40,0xbf,0x40,0xff,0x40,0xbf,0x40,0xff,
]);
var img_4x4_rgb_dxt1 = new Uint8Array([
0x08,0xba,0xe8,0x45,0x44,0x45,0x40,0x55,
]);
var img_4x4_rgba_dxt1 = new Uint8Array([
0xa8,0x4d,0x48,0xb2,0x13,0x10,0x15,0x00,
]);
var img_4x4_rgba_dxt3 = new Uint8Array([
0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x08,0xba,0xe8,0x45,0x44,0x45,0x40,0x55,
]);
var img_4x4_rgba_dxt5 = new Uint8Array([
0xff,0x7f,0x01,0x00,0x00,0x00,0x00,0x00,0x08,0xba,0xe8,0x45,0x44,0x45,0x40,0x55,
]);
var img_8x8_rgba_raw = new Uint8Array([
0xdf,0xa0,0xa0,0x7f,0x40,0xbf,0x40,0xff,0xbf,0x40,0x40,0xff,0x40,0xbf,0x40,0xff,0xbf,0xbf,0x40,0xff,0x40,0x40,0xbf,0xff,0xbf,0xbf,0x40,0xff,0x40,0x40,0xbf,0xff,
0x40,0xbf,0x40,0x7f,0x40,0xbf,0x40,0xff,0xbf,0x40,0x40,0xff,0x40,0xbf,0x40,0xff,0x40,0x40,0xbf,0xff,0x40,0x40,0xbf,0xff,0xbf,0xbf,0x40,0xff,0x40,0x40,0xbf,0xff,
0xbf,0x40,0x40,0xff,0xbf,0x40,0x40,0xff,0xbf,0x40,0x40,0xff,0x40,0xbf,0x40,0xff,0xbf,0xbf,0x40,0xff,0xbf,0xbf,0x40,0xff,0xbf,0xbf,0x40,0xff,0x40,0x40,0xbf,0xff,
0x40,0xbf,0x40,0xff,0x40,0xbf,0x40,0xff,0x40,0xbf,0x40,0xff,0x40,0xbf,0x40,0xff,0x40,0x40,0xbf,0xff,0x40,0x40,0xbf,0xff,0x40,0x40,0xbf,0xff,0x40,0x40,0xbf,0xff,
0x40,0xbf,0x40,0xff,0xbf,0x40,0xbf,0xff,0x40,0xbf,0x40,0xff,0xbf,0x40,0xbf,0xff,0x40,0x40,0xbf,0xff,0x40,0xbf,0xbf,0xff,0x40,0x40,0xbf,0xff,0x40,0xbf,0xbf,0xff,
0xbf,0x40,0xbf,0xff,0xbf,0x40,0xbf,0xff,0x40,0xbf,0x40,0xff,0xbf,0x40,0xbf,0xff,0x40,0xbf,0xbf,0xff,0x40,0xbf,0xbf,0xff,0x40,0x40,0xbf,0xff,0x40,0xbf,0xbf,0xff,
0x40,0xbf,0x40,0x7f,0x40,0xbf,0x40,0xff,0x40,0xbf,0x40,0xff,0xbf,0x40,0xbf,0xff,0x40,0x40,0xbf,0xff,0x40,0x40,0xbf,0xff,0x40,0x40,0xbf,0xff,0x40,0xbf,0xbf,0xff,
0xbf,0x40,0xbf,0x7f,0xbf,0x40,0xbf,0xff,0xbf,0x40,0xbf,0xff,0xbf,0x40,0xbf,0xff,0x40,0xbf,0xbf,0xff,0x40,0xbf,0xbf,0xff,0x40,0xbf,0xbf,0xff,0x40,0xbf,0xbf,0xff,
]);
var img_8x8_rgb_dxt1 = new Uint8Array([
0x08,0xba,0xe8,0x45,0x44,0x45,0x40,0x55,0xe8,0xbd,0x17,0x42,0x44,0x45,0x40,0x55,0x17,0xba,0xe8,0x45,0x11,0x10,0x15,0x00,0xf7,0x45,0x17,0x42,0x11,0x10,0x15,0x00,
]);
var img_8x8_rgba_dxt1 = new Uint8Array([
0xa8,0x4d,0x48,0xb2,0x13,0x10,0x15,0x00,0xe8,0xbd,0x17,0x42,0x44,0x45,0x40,0x55,0x17,0xba,0xe8,0x45,0x11,0x10,0x15,0x00,0xf7,0x45,0x17,0x42,0x11,0x10,0x15,0x00,
]);
var img_8x8_rgba_dxt3 = new Uint8Array([
0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x08,0xba,0xe8,0x45,0x44,0x45,0x40,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe8,0xbd,0x17,0x42,0x44,0x45,0x40,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x17,0xba,0xe8,0x45,0x11,0x10,0x15,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0x45,0x17,0x42,0x11,0x10,0x15,0x00,
]);
var img_8x8_rgba_dxt5 = new Uint8Array([
0xff,0x7f,0x01,0x00,0x00,0x00,0x00,0x00,0x08,0xba,0xe8,0x45,0x44,0x45,0x40,0x55,0xff,0xff,0x49,0x92,0x24,0x49,0x92,0x24,0xe8,0xbd,0x17,0x42,0x44,0x45,0x40,0x55,0xff,0xff,0x49,0x92,0x24,0x49,0x92,0x24,0x17,0xba,0xe8,0x45,0x11,0x10,0x15,0x00,0xff,0xff,0x49,0x92,0x24,0x49,0x92,0x24,0xf7,0x45,0x17,0x42,0x11,0x10,0x15,0x00,
]);
var wtu = WebGLTestUtils;
var contextVersion = wtu.getDefault3DContextVersion();
var canvas = document.getElementById("canvas");
var gl = wtu.create3DContext(canvas, {antialias: false});
var program = wtu.setupTexturedQuad(gl);
var ext = null;
var vao = null;
var validFormats = {
COMPRESSED_SRGB_S3TC_DXT1_EXT : 0x8C4C,
COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT : 0x8C4D,
COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT : 0x8C4E,
COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT : 0x8C4F,
};
var name;
var supportedFormats;
if (!gl) {
testFailed("WebGL context does not exist");
} else {
testPassed("WebGL context exists");
// Run tests with extension disabled
runTestDisabled();
// Query the extension and store globally so shouldBe can access it
ext = wtu.getExtensionWithKnownPrefixes(gl, "WEBGL_compressed_texture_s3tc_srgb");
if (!ext) {
testPassed("No WEBGL_compressed_texture_s3tc_srgb support -- this is legal");
runSupportedTest(false);
} else {
testPassed("Successfully enabled WEBGL_compressed_texture_s3tc_srgb extension");
runSupportedTest(true);
runTestExtension();
}
}
function runSupportedTest(extensionEnabled) {
var name = wtu.getSupportedExtensionWithKnownPrefixes(gl, "WEBGL_compressed_texture_s3tc_srgb");
if (name !== undefined) {
if (extensionEnabled) {
testPassed("WEBGL_compressed_texture_s3tc_srgb listed as supported and getExtension succeeded");
} else {
testFailed("WEBGL_compressed_texture_s3tc_srgb listed as supported but getExtension failed");
}
} else {
if (extensionEnabled) {
testFailed("WEBGL_compressed_texture_s3tc_srgb not listed as supported but getExtension succeeded");
} else {
testPassed("WEBGL_compressed_texture_s3tc_srgb not listed as supported and getExtension failed -- this is legal");
}
}
}
function runTestDisabled() {
debug("Testing binding enum with extension disabled");
supportedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);
shouldBe("supportedFormats", "[]");
}
function formatExists(format, supportedFormats) {
for (var ii = 0; ii < supportedFormats.length; ++ii) {
if (format == supportedFormats[ii]) {
testPassed("supported format " + formatToString(format) + " is exists");
return;
}
}
testFailed("supported format " + formatToString(format) + " does not exist");
}
function formatToString(format) {
for (var p in ext) {
if (ext[p] == format) {
return p;
}
}
return "0x" + format.toString(16);
}
function runTestExtension() {
debug("Testing WEBGL_compressed_texture_s3tc_srgb");
// check that all format enums exist.
for (name in validFormats) {
var expected = "0x" + validFormats[name].toString(16);
var actual = "ext['" + name + "']";
shouldBe(actual, expected);
}
supportedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);
// There should be exactly 4 formats for both WebGL 1.0 and WebGL 2.0.
shouldBe("supportedFormats.length", "4");
// check that all 4 formats exist
for (var name in validFormats.length) {
formatExists(validFormats[name], supportedFormats);
}
// Test each format
testDXT1_SRGB();
testDXT1_SRGB_ALPHA();
testDXT3_SRGB_ALPHA();
testDXT5_SRGB_ALPHA();
}
function testDXT1_SRGB() {
var tests = [
{ width: 4,
height: 4,
channels: 3,
data: img_4x4_rgb_dxt1,
format: ext.COMPRESSED_SRGB_S3TC_DXT1_EXT,
hasAlpha: false,
},
{ width: 8,
height: 8,
channels: 3,
data: img_8x8_rgb_dxt1,
format: ext.COMPRESSED_SRGB_S3TC_DXT1_EXT,
hasAlpha: false,
}
];
testDXTTextures(tests);
}
function testDXT1_SRGB_ALPHA() {
var tests = [
{ width: 4,
height: 4,
channels: 4,
data: img_4x4_rgba_dxt1,
format: ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
// This is a special case -- the texture is still opaque
// though it's RGBA.
hasAlpha: false,
},
{ width: 8,
height: 8,
channels: 4,
data: img_8x8_rgba_dxt1,
format: ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
// This is a special case -- the texture is still opaque
// though it's RGBA.
hasAlpha: false,
}
];
testDXTTextures(tests);
}
function testDXT3_SRGB_ALPHA() {
var tests = [
{ width: 4,
height: 4,
channels: 4,
data: img_4x4_rgba_dxt3,
format: ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
hasAlpha: true,
},
{ width: 8,
height: 8,
channels: 4,
data: img_8x8_rgba_dxt3,
format: ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
hasAlpha: true,
}
];
testDXTTextures(tests);
}
function testDXT5_SRGB_ALPHA() {
var tests = [
{ width: 4,
height: 4,
channels: 4,
data: img_4x4_rgba_dxt5,
format: ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
hasAlpha: true,
},
{ width: 8,
height: 8,
channels: 4,
data: img_8x8_rgba_dxt5,
format: ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
hasAlpha: true,
}
];
testDXTTextures(tests);
}
function testDXTTextures(tests) {
debug("<hr/>");
for (var ii = 0; ii < tests.length; ++ii) {
testDXTTexture(tests[ii], false);
if (contextVersion >= 2) {
debug("<br/>");
testDXTTexture(tests[ii], true);
}
}
}
function uncompressDXTBlockSRGB(
destBuffer, destX, destY, destWidth, src, srcOffset, format) {
function make565(src, offset) {
return src[offset + 0] + src[offset + 1] * 256;
}
function make8888From565(c) {
return [
Math.floor(((c >> 11) & 0x1F) * 255 / 31),
Math.floor(((c >> 5) & 0x3F) * 255 / 63),
Math.floor(((c >> 0) & 0x1F) * 255 / 31),
255
];
}
function mix(mult, c0, c1, div) {
var r = [];
for (var ii = 0; ii < c0.length; ++ii) {
r[ii] = Math.floor((c0[ii] * mult + c1[ii]) / div);
}
return r;
}
var isDXT1 = format == ext.COMPRESSED_SRGB_S3TC_DXT1_EXT ||
format == ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
var colorOffset = srcOffset + (isDXT1 ? 0 : 8);
var color0 = make565(src, colorOffset + 0);
var color1 = make565(src, colorOffset + 2);
var c0gtc1 = color0 > color1 || !isDXT1;
var rgba0 = make8888From565(color0);
var rgba1 = make8888From565(color1);
var colors = [
rgba0,
rgba1,
c0gtc1 ? mix(2, rgba0, rgba1, 3) : mix(1, rgba0, rgba1, 2),
c0gtc1 ? mix(2, rgba1, rgba0, 3) : [0, 0, 0, 255]
];
// yea I know there is a lot of math in this inner loop.
// so sue me.
for (var yy = 0; yy < 4; ++yy) {
var pixels = src[colorOffset + 4 + yy];
for (var xx = 0; xx < 4; ++xx) {
var dstOff = ((destY + yy) * destWidth + destX + xx) * 4;
var code = (pixels >> (xx * 2)) & 0x3;
var srcColor = colors[code];
var alpha;
switch (format) {
case ext.COMPRESSED_SRGB_S3TC_DXT1_EXT:
alpha = 255;
break;
case ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
alpha = (code == 3 && !c0gtc1) ? 0 : 255;
break;
case ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
{
var alpha0 = src[srcOffset + yy * 2 + Math.floor(xx / 2)];
var alpha1 = (alpha0 >> ((xx % 2) * 4)) & 0xF;
alpha = alpha1 | (alpha1 << 4);
}
break;
case ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
{
var alpha0 = src[srcOffset + 0];
var alpha1 = src[srcOffset + 1];
var alphaOff = Math.floor(yy / 2) * 3 + 2;
var alphaBits =
src[srcOffset + alphaOff + 0] +
src[srcOffset + alphaOff + 1] * 256 +
src[srcOffset + alphaOff + 2] * 65536;
var alphaShift = (yy % 2) * 12 + xx * 3;
var alphaCode = (alphaBits >> alphaShift) & 0x7;
if (alpha0 > alpha1) {
switch (alphaCode) {
case 0:
alpha = alpha0;
break;
case 1:
alpha = alpha1;
break;
default:
alpha = ((8 - alphaCode) * alpha0 + (alphaCode - 1) * alpha1) / 7;
break;
}
} else {
switch (alphaCode) {
case 0:
alpha = alpha0;
break;
case 1:
alpha = alpha1;
break;
case 6:
alpha = 0;
break;
case 7:
alpha = 255;
break;
default:
alpha = ((6 - alphaCode) * alpha0 + (alphaCode - 1) * alpha1) / 5;
break;
}
}
}
break;
default:
throw "bad format";
}
destBuffer[dstOff + 0] = sRGBChannelToLinear(srcColor[0]);
destBuffer[dstOff + 1] = sRGBChannelToLinear(srcColor[1]);
destBuffer[dstOff + 2] = sRGBChannelToLinear(srcColor[2]);
destBuffer[dstOff + 3] = alpha;
}
}
}
function getBlockSize(format) {
var isDXT1 = format == ext.COMPRESSED_SRGB_S3TC_DXT1_EXT ||
format == ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
return isDXT1 ? 8 : 16;
}
function uncompressDXTSRGB(width, height, data, format) {
if (width % 4 || height % 4) throw "bad width or height";
var dest = new Uint8Array(width * height * 4);
var blocksAcross = width / 4;
var blocksDown = height / 4;
var blockSize = getBlockSize(format);
for (var yy = 0; yy < blocksDown; ++yy) {
for (var xx = 0; xx < blocksAcross; ++xx) {
uncompressDXTBlockSRGB(
dest, xx * 4, yy * 4, width, data,
(yy * blocksAcross + xx) * blockSize, format);
}
}
return dest;
}
function copyRect(data, srcX, srcY, dstX, dstY, width, height, stride) {
var bytesPerLine = width * 4;
var srcOffset = srcX * 4 + srcY * stride;
var dstOffset = dstX * 4 + dstY * stride;
for (; height > 0; --height) {
for (var ii = 0; ii < bytesPerLine; ++ii) {
data[dstOffset + ii] = data[srcOffset + ii];
}
srcOffset += stride;
dstOffset += stride;
}
}
function testDXTTexture(test, useTexStorage) {
var data = new Uint8Array(test.data);
var width = test.width;
var height = test.height;
var format = test.format;
var uncompressedData = uncompressDXTSRGB(width, height, data, format);
canvas.width = width;
canvas.height = height;
gl.viewport(0, 0, width, height);
debug("testing " + formatToString(format) + " " + width + "x" + height +
(useTexStorage ? " via texStorage2D" : " via compressedTexImage2D"));
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
if (useTexStorage) {
gl.texStorage2D(gl.TEXTURE_2D, 1, format, width, height);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "allocating compressed texture via texStorage2D");
wtu.clearAndDrawUnitQuad(gl);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad");
var clearColor = (test.hasAlpha ? [0, 0, 0, 0] : [0, 0, 0, 255]);
wtu.checkCanvas(gl, clearColor, "texture should be initialized to black");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, format, data);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture data via compressedTexSubImage2D");
} else {
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height, 0, data);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture");
}
gl.generateMipmap(gl.TEXTURE_2D);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "trying to generate mipmaps from compressed texture");
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "after clearing generateMipmap error");
wtu.clearAndDrawUnitQuad(gl);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad 1");
compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "NEAREST");
// Test again with linear filtering.
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
wtu.clearAndDrawUnitQuad(gl);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad 2");
compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "LINEAR");
if (!useTexStorage) {
// It's not allowed to redefine textures defined via texStorage2D.
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height, 1, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "non 0 border");
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width + 4, height, 0, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height + 4, 0, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width - 4, height, 0, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height - 4, 0, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width - 1, height, 0, data);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width - 2, height, 0, data);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height - 1, 0, data);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height - 2, 0, data);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
if (width == 4) {
gl.compressedTexImage2D(gl.TEXTURE_2D, 1, format, 1, height, 0, data);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "valid dimensions for level > 0");
gl.compressedTexImage2D(gl.TEXTURE_2D, 1, format, 2, height, 0, data);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "valid dimensions for level > 0");
}
if (height == 4) {
gl.compressedTexImage2D(gl.TEXTURE_2D, 1, format, width, 1, 0, data);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "valid dimensions for level > 0");
gl.compressedTexImage2D(gl.TEXTURE_2D, 1, format, width, 2, 0, data);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "valid dimensions for level > 0");
}
}
// pick a wrong format that uses the same amount of data.
var wrongFormat;
switch (format) {
case ext.COMPRESSED_SRGB_S3TC_DXT1_EXT:
wrongFormat = ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
break;
case ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
wrongFormat = ext.COMPRESSED_SRGB_S3TC_DXT1_EXT;
break;
case ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
wrongFormat = ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;
break;
case ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
wrongFormat = ext.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;
break;
}
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, wrongFormat, data);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "format does not match");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 4, 0, width, height, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "dimension out of range");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 4, width, height, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "dimension out of range");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width + 4, height, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height + 4, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width - 4, height, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height - 4, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width - 1, height, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width - 2, height, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height - 1, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height - 2, format, data);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
var subData = new Uint8Array(data.buffer, 0, getBlockSize(format));
if (width == 8 && height == 8) {
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 1, 0, 4, 4, format, subData);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid offset");
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 1, 4, 4, format, subData);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid offset");
}
var stride = width * 4;
for (var yoff = 0; yoff < height; yoff += 4) {
for (var xoff = 0; xoff < width; xoff += 4) {
copyRect(uncompressedData, 0, 0, xoff, yoff, 4, 4, stride);
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, xoff, yoff, 4, 4, format, subData);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture");
// First test NEAREST filtering.
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
wtu.clearAndDrawUnitQuad(gl);
compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "NEAREST");
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad");
// Next test LINEAR filtering.
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
wtu.clearAndDrawUnitQuad(gl);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad");
compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "LINEAR");
}
}
}
function insertImg(element, caption, img) {
var div = document.createElement("div");
div.appendChild(img);
var label = document.createElement("div");
label.appendChild(document.createTextNode(caption));
div.appendChild(label);
element.appendChild(div);
}
function makeImage(imageWidth, imageHeight, dataWidth, data, alpha) {
var scale = 8;
var c = document.createElement("canvas");
c.width = imageWidth * scale;
c.height = imageHeight * scale;
var ctx = c.getContext("2d");
for (var yy = 0; yy < imageHeight; ++yy) {
for (var xx = 0; xx < imageWidth; ++xx) {
var offset = (yy * dataWidth + xx) * 4;
ctx.fillStyle = "rgba(" +
data[offset + 0] + "," +
data[offset + 1] + "," +
data[offset + 2] + "," +
(alpha ? data[offset + 3] / 255 : 1) + ")";
ctx.fillRect(xx * scale, yy * scale, scale, scale);
}
}
return wtu.makeImageFromCanvas(c);
}
// See EXT_texture_sRGB, Section 3.8.x, sRGB Texture Color Conversion.
function sRGBChannelToLinear(value) {
value = value / 255;
if (value <= 0.04045) {
value = value / 12.92;
} else {
value = Math.pow((value + 0.055) / 1.055, 2.4);
}
return Math.trunc(value * 255 + 0.5);
}
function compareRect(
actualWidth, actualHeight, actualChannels,
dataWidth, dataHeight, expectedData,
testData, testFormat, filteringMode) {
var actual = new Uint8Array(actualWidth * actualHeight * 4);
gl.readPixels(
0, 0, actualWidth, actualHeight, gl.RGBA, gl.UNSIGNED_BYTE, actual);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "reading back pixels");
var div = document.createElement("div");
div.className = "testimages";
insertImg(div, "expected", makeImage(
actualWidth, actualHeight, dataWidth, expectedData,
actualChannels == 4));
insertImg(div, "actual", makeImage(
actualWidth, actualHeight, actualWidth, actual,
actualChannels == 4));
div.appendChild(document.createElement('br'));
document.getElementById("console").appendChild(div);
// This threshold is required because the values we get back from the
// implementation don't exactly match our javascript implementation.
// This is probably due to allowances in the way sRGB interacts with S3TC.
var threshold = 2;
var failed = false;
for (var yy = 0; yy < actualHeight; ++yy) {
for (var xx = 0; xx < actualWidth; ++xx) {
var actualOffset = (yy * actualWidth + xx) * 4;
var expectedOffset = (yy * dataWidth + xx) * 4;
var expected = [
expectedData[expectedOffset + 0],
expectedData[expectedOffset + 1],
expectedData[expectedOffset + 2],
(actualChannels == 3 ? 255 : expectedData[expectedOffset + 3])
];
for (var jj = 0; jj < 4; ++jj) {
if (Math.abs(actual[actualOffset + jj] - expected[jj]) > threshold) {
failed = true;
var was = actual.slice(actualOffset, actualOffset + 4);
testFailed('at (' + xx + ', ' + yy + ') expected: '
+ expected + ' ± ' + threshold + '; was ' + was);
}
}
}
}
if (!failed) {
testPassed("texture rendered correctly with " + filteringMode + " filtering");
}
}
debug("");
var successfullyParsed = true;
</script>
<script src="../../js/js-test-post.js"></script>
</body>
</html>

View File

@ -184,6 +184,7 @@ function runTestExtension() {
}
supportedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);
// There should be exactly 4 formats for both WebGL 1.0 and WebGL 2.0.
shouldBe("supportedFormats.length", "4");
// check that all 4 formats exist
@ -213,6 +214,11 @@ function testDXT1_RGB() {
data: img_8x8_rgb_dxt1,
format: ext.COMPRESSED_RGB_S3TC_DXT1_EXT,
hasAlpha: false,
subX0: 0,
subY0: 0,
subWidth: 4,
subHeight: 4,
subData: img_4x4_rgb_dxt1
}
];
testDXTTextures(tests);
@ -236,7 +242,6 @@ function testDXT1_RGBA() {
format: ext.COMPRESSED_RGBA_S3TC_DXT1_EXT,
// This is a special case -- the texture is still opaque
// though it's RGBA.
hasAlpha: false,
}
];
testDXTTextures(tests);
@ -257,6 +262,11 @@ function testDXT3_RGBA() {
data: img_8x8_rgba_dxt3,
format: ext.COMPRESSED_RGBA_S3TC_DXT3_EXT,
hasAlpha: true,
subX0: 0,
subY0: 0,
subWidth: 4,
subHeight: 4,
subData: img_4x4_rgba_dxt3
}
];
testDXTTextures(tests);
@ -277,6 +287,11 @@ function testDXT5_RGBA() {
data: img_8x8_rgba_dxt5,
format: ext.COMPRESSED_RGBA_S3TC_DXT5_EXT,
hasAlpha: true,
subX0: 0,
subY0: 0,
subWidth: 4,
subHeight: 4,
subData: img_4x4_rgba_dxt5
}
];
testDXTTextures(tests);
@ -429,6 +444,25 @@ function uncompressDXT(width, height, data, format) {
return dest;
}
function uncompressDXTIntoSubRegion(width, height, subX0, subY0, subWidth, subHeight, data, format)
{
if (width % 4 || height % 4 || subX0 % 4 || subY0 % 4 || subWidth % 4 || subHeight % 4)
throw "bad dimension";
var dest = new Uint8Array(width * height * 4);
var blocksAcross = subWidth / 4;
var blocksDown = subHeight / 4;
var blockSize = getBlockSize(format);
for (var yy = 0; yy < blocksDown; ++yy) {
for (var xx = 0; xx < blocksAcross; ++xx) {
uncompressDXTBlock(
dest, subX0 + xx * 4, subY0 + yy * 4, width, data,
(yy * blocksAcross + xx) * blockSize, format);
}
}
return dest;
}
function copyRect(data, srcX, srcY, dstX, dstY, width, height, stride) {
var bytesPerLine = width * 4;
var srcOffset = srcX * 4 + srcY * stride;
@ -463,6 +497,31 @@ function testDXTTexture(test, useTexStorage) {
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
if (useTexStorage) {
if (test.subData) {
var uncompressedDataSub = uncompressDXTIntoSubRegion(
width, height, test.subX0, test.subY0, test.subWidth, test.subHeight, test.subData, format);
var tex1 = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex1);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texStorage2D(gl.TEXTURE_2D, 1, format, width, height);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "allocating compressed texture via texStorage2D");
gl.compressedTexSubImage2D(
gl.TEXTURE_2D, 0, test.subX0, test.subY0, test.subWidth, test.subHeight, format, test.subData);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture data via compressedTexSubImage2D");
wtu.clearAndDrawUnitQuad(gl);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad 1");
compareRect(width, height, test.channels, uncompressedDataSub, "NEAREST");
// Clean up and recover
gl.deleteTexture(tex1);
gl.bindTexture(gl.TEXTURE_2D, tex);
}
gl.texStorage2D(gl.TEXTURE_2D, 1, format, width, height);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "allocating compressed texture via texStorage2D");
wtu.clearAndDrawUnitQuad(gl);
@ -480,13 +539,13 @@ function testDXTTexture(test, useTexStorage) {
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "after clearing generateMipmap error");
wtu.clearAndDrawUnitQuad(gl);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad 1");
compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "NEAREST");
compareRect(width, height, test.channels, uncompressedData, "NEAREST");
// Test again with linear filtering.
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
wtu.clearAndDrawUnitQuad(gl);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad 2");
compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "LINEAR");
compareRect(width, height, test.channels, uncompressedData, "LINEAR");
if (!useTexStorage) {
// It's not allowed to redefine textures defined via texStorage2D.
@ -587,14 +646,14 @@ function testDXTTexture(test, useTexStorage) {
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
wtu.clearAndDrawUnitQuad(gl);
compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "NEAREST");
compareRect(width, height, test.channels, uncompressedData, "NEAREST");
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad");
// Next test LINEAR filtering.
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
wtu.clearAndDrawUnitQuad(gl);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad");
compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "LINEAR");
compareRect(width, height, test.channels, uncompressedData, "LINEAR");
}
}
}
@ -608,7 +667,7 @@ function insertImg(element, caption, img) {
element.appendChild(div);
}
function makeImage(imageWidth, imageHeight, dataWidth, data, alpha) {
function makeImage(imageWidth, imageHeight, data, alpha) {
var scale = 8;
var c = document.createElement("canvas");
c.width = imageWidth * scale;
@ -616,7 +675,7 @@ function makeImage(imageWidth, imageHeight, dataWidth, data, alpha) {
var ctx = c.getContext("2d");
for (var yy = 0; yy < imageHeight; ++yy) {
for (var xx = 0; xx < imageWidth; ++xx) {
var offset = (yy * dataWidth + xx) * 4;
var offset = (yy * imageWidth + xx) * 4;
ctx.fillStyle = "rgba(" +
data[offset + 0] + "," +
data[offset + 1] + "," +
@ -627,43 +686,35 @@ function makeImage(imageWidth, imageHeight, dataWidth, data, alpha) {
}
return wtu.makeImageFromCanvas(c);
}
function compareRect(
actualWidth, actualHeight, actualChannels,
dataWidth, dataHeight, expectedData,
testData, testFormat, filteringMode) {
var actual = new Uint8Array(actualWidth * actualHeight * 4);
gl.readPixels(
0, 0, actualWidth, actualHeight, gl.RGBA, gl.UNSIGNED_BYTE, actual);
function compareRect(width, height, channels, expectedData, filteringMode) {
var actual = new Uint8Array(width * height * 4);
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, actual);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "reading back pixels");
var div = document.createElement("div");
div.className = "testimages";
insertImg(div, "expected", makeImage(
actualWidth, actualHeight, dataWidth, expectedData,
actualChannels == 4));
insertImg(div, "actual", makeImage(
actualWidth, actualHeight, actualWidth, actual,
actualChannels == 4));
insertImg(div, "expected", makeImage(width, height, expectedData, channels == 4));
insertImg(div, "actual", makeImage(width, height, actual, channels == 4));
div.appendChild(document.createElement('br'));
document.getElementById("console").appendChild(div);
var failed = false;
for (var yy = 0; yy < actualHeight; ++yy) {
for (var xx = 0; xx < actualWidth; ++xx) {
var actualOffset = (yy * actualWidth + xx) * 4;
var expectedOffset = (yy * dataWidth + xx) * 4;
for (var yy = 0; yy < height; ++yy) {
for (var xx = 0; xx < width; ++xx) {
var offset = (yy * width + xx) * 4;
var expected = [
expectedData[expectedOffset + 0],
expectedData[expectedOffset + 1],
expectedData[expectedOffset + 2],
(actualChannels == 3 ? 255 : expectedData[expectedOffset + 3])
expectedData[offset + 0],
expectedData[offset + 1],
expectedData[offset + 2],
(channels == 3 ? 255 : expectedData[offset + 3])
];
for (var jj = 0; jj < 4; ++jj) {
if (actual[actualOffset + jj] != expected[jj]) {
if (actual[offset + jj] != expected[jj]) {
failed = true;
var was = actual[actualOffset + 0].toString();
var was = actual[offset + 0].toString();
for (var j = 1; j < 4; ++j) {
was += "," + actual[actualOffset + j];
was += "," + actual[offset + j];
}
testFailed('at (' + xx + ', ' + yy +
') expected: ' + expected + ' was ' + was);

View File

@ -140,6 +140,7 @@ function runTestEnabled() {
gl.shaderSource(shader, "void main() { gl_FragColor = vec4(gl_FragCoord.x, 0.0, 0.0, 1.0); }");
gl.compileShader(shader);
shouldBeTrue("gl.getShaderParameter(shader, gl.COMPILE_STATUS)");
shouldThrow("ext.getTranslatedShaderSource(null)");
translatedSource = ext.getTranslatedShaderSource(shader);
shouldBeTrue('translatedSource && translatedSource.indexOf("gl_FragCoord") >= 0');
// change the source but don't compile.

View File

@ -200,133 +200,147 @@ function runTestExtension() {
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.' + targets[ii] + ', 1, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)');
}
// check 2d textures.
tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
// The WebGL_depth_texture extension supports both NEAREST and
// LINEAR filtering for depth textures, even though LINEAR
// doesn't have much meaning, and isn't supported in WebGL
// 2.0. Still, test both.
var filterModes = [
'LINEAR',
'NEAREST'
];
// test level > 0
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.TEXTURE_2D, 1, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)');
for (var jj = 0; jj < filterModes.length; ++jj) {
debug('testing ' + filterModes[jj] + ' filtering');
var filterMode = gl[filterModes[jj]];
// test with data
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', ' + typeInfo.data + ')');
// test with canvas
wtu.shouldGenerateGLError(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', gl.' + typeInfo.format + ', ' + typeStr + ', canvas2)');
// test copyTexImage2D
wtu.shouldGenerateGLError(gl, [gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', 0, 0, 1, 1, 0)');
// test real thing
wtu.shouldGenerateGLError(gl, gl.NO_ERROR, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', ' + res + ', ' + res + ', 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)');
// test texSubImage2D
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 1, 1, gl.' + typeInfo.format + ', ' + typeStr + ', ' + typeInfo.data + ')');
// test copyTexSubImage2D
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1)');
// test generateMipmap
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.generateMipmap(gl.TEXTURE_2D)');
var fbo = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl[typeInfo.attachment], gl.TEXTURE_2D, tex, 0);
// Ensure DEPTH_BITS returns >= 16 bits for UNSIGNED_SHORT and UNSIGNED_INT, >= 24 UNSIGNED_INT_24_8_WEBGL.
// If there is stencil, ensure STENCIL_BITS reports >= 8 for UNSIGNED_INT_24_8_WEBGL.
shouldBeGreaterThanOrEqual('gl.getParameter(gl.DEPTH_BITS)', typeInfo.depthBits);
if (typeInfo.stencilBits === undefined) {
shouldBe('gl.getParameter(gl.STENCIL_BITS)', '0');
} else {
shouldBeGreaterThanOrEqual('gl.getParameter(gl.STENCIL_BITS)', typeInfo.stencilBits);
}
// TODO: remove this check if the spec is updated to require these combinations to work.
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE)
{
// try adding a color buffer.
var colorTex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, colorTex);
// check 2d textures.
tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, res, res, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorTex, 0);
}
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filterMode);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filterMode);
shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
// test level > 0
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.TEXTURE_2D, 1, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)');
// use the default texture to render with while we return to the depth texture.
gl.bindTexture(gl.TEXTURE_2D, null);
// test with data
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', ' + typeInfo.data + ')');
// render the z-quad
gl.enable(gl.DEPTH_TEST);
gl.clearColor(1, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, 6);
// test with canvas
wtu.shouldGenerateGLError(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', gl.' + typeInfo.format + ', ' + typeStr + ', canvas2)');
dumpIt(gl, res, "--first--");
// test copyTexImage2D
wtu.shouldGenerateGLError(gl, [gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', 0, 0, 1, 1, 0)');
// render the depth texture.
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.clearColor(0, 0, 1, 1);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, 6);
// test real thing
wtu.shouldGenerateGLError(gl, gl.NO_ERROR, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', ' + res + ', ' + res + ', 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)');
var actualPixels = new Uint8Array(res * res * 4);
gl.readPixels(0, 0, res, res, gl.RGBA, gl.UNSIGNED_BYTE, actualPixels);
// test texSubImage2D
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 1, 1, gl.' + typeInfo.format + ', ' + typeStr + ', ' + typeInfo.data + ')');
dumpIt(gl, res, "--depth--");
// test copyTexSubImage2D
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1)');
// Check that each pixel's R value is less than that of the previous pixel
// in either direction. Basically verify we have a gradient.
var success = true;
for (var yy = 0; yy < res; ++yy) {
for (var xx = 0; xx < res; ++xx) {
var actual = (yy * res + xx) * 4;
var left = actual - 4;
var down = actual - res * 4;
// test generateMipmap
wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.generateMipmap(gl.TEXTURE_2D)');
if (xx > 0) {
if (actualPixels[actual] <= actualPixels[left]) {
testFailed("actual(" + actualPixels[actual] + ") < left(" + actualPixels[left] + ")");
success = false;
}
var fbo = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl[typeInfo.attachment], gl.TEXTURE_2D, tex, 0);
// Ensure DEPTH_BITS returns >= 16 bits for UNSIGNED_SHORT and UNSIGNED_INT, >= 24 UNSIGNED_INT_24_8_WEBGL.
// If there is stencil, ensure STENCIL_BITS reports >= 8 for UNSIGNED_INT_24_8_WEBGL.
shouldBeGreaterThanOrEqual('gl.getParameter(gl.DEPTH_BITS)', typeInfo.depthBits);
if (typeInfo.stencilBits === undefined) {
shouldBe('gl.getParameter(gl.STENCIL_BITS)', '0');
} else {
shouldBeGreaterThanOrEqual('gl.getParameter(gl.STENCIL_BITS)', typeInfo.stencilBits);
}
if (yy > 0) {
if (actualPixels[actual] <= actualPixels[down]) {
testFailed("actual(" + actualPixels[actual] + ") < down(" + actualPixels[down] + ")");
success = false;
// TODO: remove this check if the spec is updated to require these combinations to work.
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE)
{
// try adding a color buffer.
var colorTex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, colorTex);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, res, res, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorTex, 0);
}
shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
// use the default texture to render with while we return to the depth texture.
gl.bindTexture(gl.TEXTURE_2D, null);
// render the z-quad
gl.enable(gl.DEPTH_TEST);
gl.clearColor(1, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, 6);
dumpIt(gl, res, "--first--");
// render the depth texture.
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.clearColor(0, 0, 1, 1);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, 6);
var actualPixels = new Uint8Array(res * res * 4);
gl.readPixels(0, 0, res, res, gl.RGBA, gl.UNSIGNED_BYTE, actualPixels);
dumpIt(gl, res, "--depth--");
// Check that each pixel's R value is less than that of the previous pixel
// in either direction. Basically verify we have a gradient.
var success = true;
for (var yy = 0; yy < res; ++yy) {
for (var xx = 0; xx < res; ++xx) {
var actual = (yy * res + xx) * 4;
var left = actual - 4;
var down = actual - res * 4;
if (xx > 0) {
if (actualPixels[actual] <= actualPixels[left]) {
testFailed("actual(" + actualPixels[actual] + ") < left(" + actualPixels[left] + ")");
success = false;
}
}
if (yy > 0) {
if (actualPixels[actual] <= actualPixels[down]) {
testFailed("actual(" + actualPixels[actual] + ") < down(" + actualPixels[down] + ")");
success = false;
}
}
}
}
}
}
// Check that bottom left corner is vastly different thatn top right.
if (actualPixels[(res * res - 1) * 4] - actualPixels[0] < 0xC0) {
testFailed("corners are not different enough");
success = false;
}
// Check that bottom left corner is vastly different thatn top right.
if (actualPixels[(res * res - 1) * 4] - actualPixels[0] < 0xC0) {
testFailed("corners are not different enough");
success = false;
}
if (success) {
testPassed("depth texture rendered correctly.");
}
if (success) {
testPassed("depth texture rendered correctly.");
}
// check limitations
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl[typeInfo.attachment], gl.TEXTURE_2D, null, 0);
var badAttachment = typeInfo.attachment == 'DEPTH_ATTACHMENT' ? 'DEPTH_STENCIL_ATTACHMENT' : 'DEPTH_ATTACHMENT';
wtu.shouldGenerateGLError(gl, gl.NO_ERROR, 'gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.' + badAttachment + ', gl.TEXTURE_2D, tex, 0)');
shouldNotBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
wtu.shouldGenerateGLError(gl, gl.INVALID_FRAMEBUFFER_OPERATION, 'gl.clear(gl.DEPTH_BUFFER_BIT)');
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
shouldBe('gl.getError()', 'gl.NO_ERROR');
// check limitations
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl[typeInfo.attachment], gl.TEXTURE_2D, null, 0);
var badAttachment = typeInfo.attachment == 'DEPTH_ATTACHMENT' ? 'DEPTH_STENCIL_ATTACHMENT' : 'DEPTH_ATTACHMENT';
wtu.shouldGenerateGLError(gl, gl.NO_ERROR, 'gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.' + badAttachment + ', gl.TEXTURE_2D, tex, 0)');
shouldNotBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE');
wtu.shouldGenerateGLError(gl, gl.INVALID_FRAMEBUFFER_OPERATION, 'gl.clear(gl.DEPTH_BUFFER_BIT)');
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
shouldBe('gl.getError()', 'gl.NO_ERROR');
}
}
}

View File

@ -0,0 +1,147 @@
<!--
/*
** Copyright (c) 2016 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL WEBGL_draw_buffers FRAMEBUFFER_UNSUPPORTED Test</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src="../../js/js-test-pre.js"></script>
<script src="../../js/webgl-test-utils.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<canvas id="canvas" width="2" height="2"> </canvas>
<script>
"use strict";
var wtu = WebGLTestUtils;
var gl;
var canvas = document.getElementById("canvas");
var fb1 = null;
var fb2 = null;
function checkFramebuffer(expected) {
var actual = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
if (expected.indexOf(actual) < 0) {
var msg = "checkFramebufferStatus expects [";
for (var index = 0; index < expected.length; ++index) {
msg += wtu.glEnumToString(gl, expected[index]);
if (index + 1 < expected.length)
msg += ", ";
}
msg += "], was " + wtu.glEnumToString(gl, actual);
testFailed(msg);
} else {
var msg = "checkFramebufferStatus got " + wtu.glEnumToString(gl, actual) +
" as expected";
testPassed(msg);
}
}
function testImageAttachedTwoPoints() {
debug("");
debug("Checking an image is attached to more than one color attachment in a framebuffer.");
var tex1 = gl.createTexture();
var tex2 = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex1);
gl.texImage2D(gl.TEXTURE_2D,
0, // level
gl.RGBA, // internalFormat
1, // width
1, // height
0, // border
gl.RGBA, // format
gl.UNSIGNED_BYTE, // type
new Uint8Array(4)); // data
gl.bindTexture(gl.TEXTURE_2D, tex2);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(4));
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Texture creation should succeed.");
gl.bindFramebuffer(gl.FRAMEBUFFER, fb1);
gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT0_WEBGL, gl.TEXTURE_2D, tex1, 0);
checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT1_WEBGL, gl.TEXTURE_2D, tex2, 0);
checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT2_WEBGL, gl.TEXTURE_2D, tex1, 0);
checkFramebuffer([gl.FRAMEBUFFER_UNSUPPORTED]);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.bindFramebuffer(gl.FRAMEBUFFER, fb2);
var texCube = gl.createTexture();
gl.bindTexture(gl.TEXTURE_CUBE_MAP, texCube);
for (var target = gl.TEXTURE_CUBE_MAP_POSITIVE_X; target < gl.TEXTURE_CUBE_MAP_POSITIVE_X + 6; target++) {
gl.texImage2D(target, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(4));
}
gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT0_WEBGL, gl.TEXTURE_CUBE_MAP_POSITIVE_X, texCube, 0);
checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT1_WEBGL, gl.TEXTURE_CUBE_MAP_POSITIVE_Y, texCube, 0);
checkFramebuffer([gl.FRAMEBUFFER_COMPLETE]);
gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT2_WEBGL, gl.TEXTURE_CUBE_MAP_POSITIVE_X, texCube, 0);
checkFramebuffer([gl.FRAMEBUFFER_UNSUPPORTED]);
// Clean up
gl.deleteTexture(tex1);
gl.deleteTexture(tex2);
gl.deleteTexture(texCube);
}
description("This tests FRAMEBUFFER_UNSUPPORTED.");
shouldBeNonNull("gl = wtu.create3DContext(undefined, undefined, 1)");
fb1 = gl.createFramebuffer();
fb2 = gl.createFramebuffer();
var ext = gl.getExtension("WEBGL_draw_buffers");
if (!ext) {
testPassed("No WEBGL_draw_buffers support -- this is legal");
} else {
var bufs = [ext.COLOR_ATTACHMENT0_WEBGL, ext.COLOR_ATTACHMENT1_WEBGL, ext.COLOR_ATTACHMENT2_WEBGL];
gl.bindFramebuffer(gl.FRAMEBUFFER, fb1);
ext.drawBuffersWEBGL(bufs);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be able to call drawBuffersWEBGL successfully");
gl.bindFramebuffer(gl.FRAMEBUFFER, fb2);
ext.drawBuffersWEBGL(bufs);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be able to call drawBuffersWEBGL successfully");
testPassed("Successfully enabled WEBGL_draw_buffers extension");
testImageAttachedTwoPoints();
gl.deleteFramebuffer(fb1);
gl.deleteFramebuffer(fb2);
}
debug("");
var successfullyParsed = true;
</script>
<script src="../../js/js-test-post.js"></script>
</body>
</html>

View File

@ -54,12 +54,24 @@ void main() {
}
}
</script>
<script id="fshaderNoWrite" type="x-shader/x-fragment">
#extension GL_EXT_draw_buffers : require
void main() {
}
</script>
<script id="fshaderRed" type="x-shader/x-fragment">
precision mediump float;
void main() {
gl_FragColor = vec4(1,0,0,1);
}
</script>
<script id="fshaderRedWithExtension" type="x-shader/x-fragment">
#extension GL_EXT_draw_buffers : require
precision mediump float;
void main() {
gl_FragColor = vec4(1,0,0,1);
}
</script>
<script id="fshaderMacroDisabled" type="x-shader/x-fragment">
#ifdef GL_EXT_draw_buffers
bad code here
@ -102,6 +114,7 @@ var canvas = document.getElementById("canvas");
var output = document.getElementById("console");
var gl = wtu.create3DContext(canvas);
var ext = null;
var programWithMaxDrawBuffersEqualOne = null;
var extensionConstants = [
{ name: "MAX_COLOR_ATTACHMENTS_WEBGL", enum: 0x8CDF, expectedFn: function(v) { return v >= 4; }, passMsg: " should be >= 4"},
@ -254,6 +267,7 @@ function runShadersTestDisabled() {
debug("");
debug("test shaders disabled");
var sub = {numDrawingBuffers: 1};
testShaders([
{ shaders: ["vshader", "fshaderMacroDisabled"],
msg: "GL_EXT_draw_buffers should not be defined in GLSL",
@ -262,7 +276,12 @@ function runShadersTestDisabled() {
msg: "#extension GL_EXT_draw_buffers should not be allowed in GLSL",
expectFailure: true,
},
], {numDrawingBuffers: 1});
], sub);
programWithMaxDrawBuffersEqualOne = createExtDrawBuffersProgram("fshaderBuiltInConstEnabled", sub);
wtu.setupUnitQuad(gl);
wtu.clearAndDrawUnitQuad(gl);
wtu.checkCanvas(gl, [0, 255, 0, 255], "should be green");
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no errors");
}
@ -286,6 +305,14 @@ function runShadersTestEnabled() {
wtu.checkCanvas(gl, [0, 255, 0, 255], "should be green");
gl.deleteProgram(program);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no errors");
debug("");
debug("test that gl_MaxDrawBuffers is frozen at link time and enabling the extension won't change it.");
gl.useProgram(programWithMaxDrawBuffersEqualOne);
wtu.clearAndDrawUnitQuad(gl);
wtu.checkCanvas(gl, [0, 255, 0, 255], "should be green");
gl.deleteProgram(programWithMaxDrawBuffersEqualOne);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no errors");
}
function runAttachmentTestDisabled() {
@ -404,6 +431,7 @@ function runDrawTests() {
var checkProgram = wtu.setupTexturedQuad(gl);
var redProgram = wtu.setupProgram(gl, ["vshader", "fshaderRed"], ["a_position"]);
var redProgramWithExtension = wtu.setupProgram(gl, ["vshader", "fshaderRedWithExtension"], ["a_position"]);
var drawProgram = createExtDrawBuffersProgram("fshader", {numDrawingBuffers: maxDrawingBuffers});
var width = 64;
var height = 64;
@ -534,6 +562,19 @@ function runDrawTests() {
checkAttachmentsForColor(attachments, [0, 255, 0, 255]);
debug("test a fragment shader writing to neither gl_FragColor nor gl_FragData does not touch attachments");
var noWriteProgram = wtu.setupProgram(gl, ["vshader", "fshaderNoWrite"], ["a_position"]);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no GL error setting up the program");
if (!noWriteProgram) {
testFailed("Setup a program where fragment shader writes nothing failed");
} else {
gl.useProgram(noWriteProgram);
wtu.drawUnitQuad(gl);
checkAttachmentsForColor(attachments, [0, 255, 0, 255]);
gl.deleteProgram(noWriteProgram);
}
debug("test that NONE draws nothing");
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
ext.drawBuffersWEBGL(nones);
@ -542,28 +583,56 @@ function runDrawTests() {
checkAttachmentsForColor(attachments, [0, 255, 0, 255]);
debug("test that gl_FragColor broadcasts");
debug("test that gl_FragColor does not broadcast unless extension is enabled in fragment shader");
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
ext.drawBuffersWEBGL(bufs);
gl.useProgram(redProgram);
wtu.drawUnitQuad(gl);
checkAttachmentsForColorFn(attachments, function(attachment, index) {
return (index == 0) ? [255, 0, 0, 255] : [0, 255, 0, 255];
});
debug("test that gl_FragColor broadcasts if extension is enabled in fragment shader");
gl.clear(gl.COLOR_BUFFER_BIT);
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
ext.drawBuffersWEBGL(bufs);
gl.useProgram(redProgramWithExtension);
wtu.drawUnitQuad(gl);
checkAttachmentsForColor(attachments, [255, 0, 0, 255]);
if (maxUsable > 1) {
// First half of color buffers disable.
var bufs1 = makeColorAttachmentArray(maxUsable);
// Second half of color buffers disable.
var bufs2 = makeColorAttachmentArray(maxUsable);
// Color buffers with even indices disabled.
var bufs3 = makeColorAttachmentArray(maxUsable);
// Color buffers with odd indices disabled.
var bufs4 = makeColorAttachmentArray(maxUsable);
for (var ii = 0; ii < maxUsable; ++ii) {
if (ii < half) {
bufs1[ii] = gl.NONE;
} else {
bufs2[ii] = gl.NONE;
}
if (ii % 2) {
bufs3[ii] = gl.NONE;
} else {
bufs4[ii] = gl.NONE;
}
}
debug("test setting first half to NONE and clearing");
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
// We should clear all buffers rather than depending on the previous
// gl_FragColor broadcasts test to succeed and setting the colors.
ext.drawBuffersWEBGL(bufs);
gl.clearColor(1, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
ext.drawBuffersWEBGL(bufs1);
gl.clearColor(0, 1, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
@ -588,6 +657,7 @@ function runDrawTests() {
ext.drawBuffersWEBGL(bufs);
gl.clearColor(1, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
ext.drawBuffersWEBGL(bufs2);
gl.clearColor(0, 0, 1, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
@ -605,6 +675,34 @@ function runDrawTests() {
return index < half ? attachment.color : [255, 0, 0, 255];
});
debug("test setting buffers with even indices to NONE and clearing");
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
ext.drawBuffersWEBGL(bufs);
gl.clearColor(1, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
ext.drawBuffersWEBGL(bufs3);
gl.clearColor(1, 0, 1, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
checkAttachmentsForColorFn(attachments, function(attachment, index) {
return (index % 2) ? [255, 0, 0, 255] : [255, 0, 255, 255];
});
debug("test setting buffers with odd indices to NONE and drawing");
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
ext.drawBuffersWEBGL(bufs);
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.useProgram(drawProgram);
ext.drawBuffersWEBGL(bufs4);
wtu.drawUnitQuad(gl);
checkAttachmentsForColorFn(attachments, function(attachment, index) {
return (index % 2 == 0) ? [0, 0, 0, 255] : attachment.color;
});
gl.bindFramebuffer(gl.FRAMEBUFFER, halfFB1);
ext.drawBuffersWEBGL(bufs);
drawAndCheckAttachments(
@ -692,6 +790,7 @@ function runDrawTests() {
});
gl.deleteProgram(checkProgram);
gl.deleteProgram(redProgram);
gl.deleteProgram(redProgramWithExtension);
gl.deleteProgram(drawProgram);
}

View File

@ -0,0 +1,333 @@
<!--
/*
** Copyright (c) 2016 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Verify int(bool) and float(bool) work correctly (Mac AMD driver bug)</title>
<link rel="stylesheet" href="../../../resources/js-test-style.css"/>
<script src="../../../js/js-test-pre.js"></script>
<script src="../../../js/webgl-test-utils.js"></script>
</head>
<body>
<canvas id="canvas" width="2" height="2"> </canvas>
<div id="description"></div>
<div id="console"></div>
<script id="vshader-int1" type="x-shader/x-vertex">
attribute vec3 aPosition;
varying mediump float fvalue;
uniform bool bvalue;
void main() {
gl_Position = vec4(aPosition, 1);
int ivalue = int(bvalue);
if (ivalue == 0) {
fvalue = 0.0;
} else if (ivalue == 1) {
fvalue = 1.0;
} else {
fvalue = -1.0;
}
}
</script>
<script id="fshader-int1" type="x-shader/x-fragment">
varying mediump float fvalue;
void main() {
if (fvalue == 1.0)
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (fvalue == 0.0)
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script id="vshader-int2" type="x-shader/x-vertex">
attribute vec3 aPosition;
void main() {
gl_Position = vec4(aPosition, 1);
}
</script>
<script id="fshader-int2" type="x-shader/x-fragment">
uniform bool bvalue;
void main() {
int ivalue = int(bvalue);
if (ivalue == 1)
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (ivalue == 0)
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script id="vshader-float1" type="x-shader/x-vertex">
attribute vec3 aPosition;
varying mediump float fvalue;
uniform bool bvalue;
void main() {
gl_Position = vec4(aPosition, 1);
fvalue = float(bvalue);
}
</script>
<script id="fshader-float1" type="x-shader/x-fragment">
varying mediump float fvalue;
void main() {
if (fvalue == 1.0)
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (fvalue == 0.0)
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script id="vshader-float2" type="x-shader/x-vertex">
attribute vec3 aPosition;
void main() {
gl_Position = vec4(aPosition, 1);
}
</script>
<script id="fshader-float2" type="x-shader/x-fragment">
uniform bool bvalue;
void main() {
mediump float fvalue = float(bvalue);
if (fvalue == 1.0)
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (fvalue == 0.0)
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script id="vshader-vec2-1" type="x-shader/x-vertex">
attribute vec3 aPosition;
varying mediump vec2 fvalue;
uniform bool bvalue;
void main() {
gl_Position = vec4(aPosition, 1);
fvalue = vec2(bvalue);
}
</script>
<script id="fshader-vec2-1" type="x-shader/x-fragment">
varying mediump vec2 fvalue;
void main() {
if (fvalue == vec2(1.0, 1.0))
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (fvalue == vec2(0.0, 0.0))
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script id="vshader-vec2-2" type="x-shader/x-vertex">
attribute vec3 aPosition;
void main() {
gl_Position = vec4(aPosition, 1);
}
</script>
<script id="fshader-vec2-2" type="x-shader/x-fragment">
precision mediump float;
uniform bool bvalue;
void main() {
vec2 fvalue = vec2(bvalue);
if (fvalue == vec2(1.0, 1.0))
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (fvalue == vec2(0.0, 0.0))
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script id="vshader-vec3-1" type="x-shader/x-vertex">
attribute vec3 aPosition;
varying mediump vec3 fvalue;
uniform bool bvalue;
void main() {
gl_Position = vec4(aPosition, 1);
fvalue = vec3(bvalue);
}
</script>
<script id="fshader-vec3-1" type="x-shader/x-fragment">
varying mediump vec3 fvalue;
void main() {
if (fvalue == vec3(1.0, 1.0, 1.0))
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (fvalue == vec3(0.0, 0.0, 0.0))
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script id="vshader-vec3-2" type="x-shader/x-vertex">
attribute vec3 aPosition;
void main() {
gl_Position = vec4(aPosition, 1);
}
</script>
<script id="fshader-vec3-2" type="x-shader/x-fragment">
precision mediump float;
uniform bool bvalue;
void main() {
vec3 fvalue = vec3(bvalue);
if (fvalue == vec3(1.0, 1.0, 1.0))
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (fvalue == vec3(0.0, 0.0, 0.0))
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script id="vshader-vec4-1" type="x-shader/x-vertex">
attribute vec3 aPosition;
varying mediump vec4 fvalue;
uniform bool bvalue;
void main() {
gl_Position = vec4(aPosition, 1);
fvalue = vec4(bvalue);
}
</script>
<script id="fshader-vec4-1" type="x-shader/x-fragment">
varying mediump vec4 fvalue;
void main() {
if (fvalue == vec4(1.0, 1.0, 1.0, 1.0))
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (fvalue == vec4(0.0, 0.0, 0.0, 0.0))
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script id="vshader-vec4-2" type="x-shader/x-vertex">
attribute vec3 aPosition;
void main() {
gl_Position = vec4(aPosition, 1);
}
</script>
<script id="fshader-vec4-2" type="x-shader/x-fragment">
precision mediump float;
uniform bool bvalue;
void main() {
vec4 fvalue = vec4(bvalue);
if (fvalue == vec4(1.0, 1.0, 1.0, 1.0))
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else if (fvalue == vec4(0.0, 0.0, 0.0, 0.0))
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
</script>
<script type="application/javascript">
"use strict";
description("Verify int(bool) and float(bool) work correctly");
debug("");
var wtu = WebGLTestUtils;
function test() {
var gl = wtu.create3DContext("canvas");
if (!gl) {
testFailed("context does not exist");
return;
}
wtu.setupUnitQuad(gl);
var testCases = [
{ vshader: "vshader-int1", fshader: "fshader-int1", desc: "vertex shader int" },
{ vshader: "vshader-int2", fshader: "fshader-int2", desc: "fragment shader int" },
{ vshader: "vshader-float1", fshader: "fshader-float1", desc: "vertex shader float" },
{ vshader: "vshader-float2", fshader: "fshader-float2", desc: "fragment shader float" },
{ vshader: "vshader-vec2-1", fshader: "fshader-vec2-1", desc: "vertex shader vec2" },
{ vshader: "vshader-vec2-2", fshader: "fshader-vec2-2", desc: "fragment shader vec2" },
{ vshader: "vshader-vec3-1", fshader: "fshader-vec3-1", desc: "vertex shader vec3" },
{ vshader: "vshader-vec3-2", fshader: "fshader-vec3-2", desc: "fragment shader vec3" },
{ vshader: "vshader-vec4-1", fshader: "fshader-vec4-1", desc: "vertex shader vec4" },
{ vshader: "vshader-vec4-2", fshader: "fshader-vec4-2", desc: "fragment shader vec4" },
];
for (var idx = 0; idx < testCases.length; ++idx) {
var test = testCases[idx];
debug("");
var program = wtu.setupProgram(gl, [test.vshader, test.fshader], ["aPosition"]);
if (!program) {
testFailed("Fail to set up program");
} else {
var uniformLoc = gl.getUniformLocation(program, 'bvalue');
debug("Testing " + test.desc + " with false");
gl.uniform1i(uniformLoc, 0);
wtu.drawUnitQuad(gl);
wtu.checkCanvas(gl, [0, 255, 0, 255]);
debug("Testing " + test.desc + " with true");
gl.uniform1i(uniformLoc, 1);
wtu.drawUnitQuad(gl);
wtu.checkCanvas(gl, [255, 0, 0, 255]);
gl.deleteProgram(program);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from testing");
}
}
};
test();
debug("");
var successfullyParsed = true;
</script>
<script src="../../../js/js-test-post.js"></script>
</body>
</html>

View File

@ -35,106 +35,13 @@
<script src="../../../js/js-test-pre.js"></script>
<script src="../../../js/webgl-test-utils.js"></script>
<script src="../../../js/glsl-conformance-test.js"></script>
<script id="VertexTemplate" type="x-shader/x-vertex">
precision mediump float;
uniform $(rtype) ur;
uniform $(ltype) ul;
void main() {
$(ltype) a = ul;
a $(op) ur;
gl_Position = vec4(float(a$(ltypeToScalar)));
}
</script>
<script id="FragmentTemplate" type="x-shader/x-fragment">
precision mediump float;
uniform $(rtype) ur;
uniform $(ltype) ul;
void main() {
$(ltype) a = ul;
a $(op) ur;
gl_FragColor = vec4(float(a$(ltypeToScalar)));
}
</script>
<script src="../../../js/tests/compound-assignment-type-combination.js"></script>
</head>
<body onload="runTest()">
<body onload="runTest(1)">
<div id="description"></div>
<div id="console"></div>
<script type="application/javascript">
"use strict";
description();
var wtu = WebGLTestUtils;
// ESSL 1.00 spec section 5.8 (also ESSL 3.00 spec section 5.8):
// "The l-value and the expression must satisfy the semantic requirements of both op and equals (=)"
// In the semantic requirements of assignment (=):
// "The lvalue-expression and rvalue-expression must have the same type"
var runTest = function() {
var vsTemplate = document.getElementById('VertexTemplate').text;
var fsTemplate = document.getElementById('FragmentTemplate').text;
var tests = [];
var baseTypes = ['float', 'int'];
var vecTypes = [['vec2', 'vec3', 'vec4', 'mat2', 'mat3', 'mat4'], ['ivec2', 'ivec3', 'ivec4']];
var ops = ['+=', '-=', '*=', '/='];
var fs, vs;
for (var k = 0; k < ops.length; ++k) {
var op = ops[k];
for (var i = 0; i < baseTypes.length; ++i) {
var baseType = baseTypes[i];
for (var j = 0; j < vecTypes[i].length; ++j) {
var vecType = vecTypes[i][j];
var vecTypeToScalar = vecType.substring(0, 3) == 'mat' ? '[0].x' : '.x';
var pushTest = function(ltype, rtype, ltypeToScalar, expectSuccess) {
vs = wtu.replaceParams(vsTemplate, {ltype: ltype, rtype: rtype, ltypeToScalar: ltypeToScalar, op: op});
fs = wtu.replaceParams(fsTemplate, {ltype: ltype, rtype: rtype, ltypeToScalar: ltypeToScalar, op: op});
tests.push({
vShaderSource: vs,
vShaderSuccess: expectSuccess,
linkSuccess: expectSuccess,
passMsg: ltype + " " + op + " " + rtype + " in a vertex shader should " + (expectSuccess ? "succeed." : "fail.")
});
tests.push({
fShaderSource: fs,
fShaderSuccess: expectSuccess,
linkSuccess: expectSuccess,
passMsg: ltype + " " + op + " " + rtype + " in a fragment shader should " + (expectSuccess ? "succeed." : "fail.")
});
}
// "scalar op= vector" is not okay, since the result of op is a vector,
// which can't be assigned to a scalar.
pushTest(baseType, vecType, '', false);
if (j > 0) {
var vecType2 = vecTypes[i][j - 1];
// "vector1 op= vector2" is not okay when vector1 and vector2 have
// different dimensions.
pushTest(vecType, vecType2, vecTypeToScalar, false);
}
// "vector op= scalar" is okay.
pushTest(vecType, baseType, vecTypeToScalar, true);
// "vector1 op= vector2" is okay when vector1 and vector2 have the same
// type (does a component-wise operation or matrix multiplication).
pushTest(vecType, vecType, vecTypeToScalar, true);
}
}
}
GLSLConformanceTester.runTests(tests);
}
var successfullyParsed = true;
</script>
</body>
</html>

View File

@ -41,49 +41,49 @@
<script id="shader-vs" type="x-shader/x-vertex">
// Inputs
attribute vec4 a_position;
attribute vec2 a_tex_coords;
attribute vec4 a_position;
attribute vec2 a_tex_coords;
// Output
varying vec2 v_tex_coords;
void main(void) {
v_tex_coords = a_tex_coords;
varying vec2 v_tex_coords;
void main(void) {
v_tex_coords = a_tex_coords;
gl_Position = a_position;
}
}
</script>
<script id="shader-fs" type="x-shader/x-fragment">
precision mediump float;
precision mediump float;
// Constants
const float TEXEL_COUNT_V = 256.0;
const float TEXEL_HEIGHT = 1.0 / TEXEL_COUNT_V;
const float TEXEL_COUNT_V = 256.0;
const float TEXEL_HEIGHT = 1.0 / TEXEL_COUNT_V;
const float SEP_IX = TEXEL_COUNT_V / 2.0;
const vec4 GREEN = vec4(0.0, 1.0, 0.0, 1.0);
const vec4 BLUE = vec4(0.0, 0.0, 1.0, 1.0);
const vec4 GREEN = vec4(0.0, 1.0, 0.0, 1.0);
const vec4 BLUE = vec4(0.0, 0.0, 1.0, 1.0);
// Input
varying vec2 v_tex_coords;
varying vec2 v_tex_coords;
uniform sampler2D u_data;
uniform sampler2D u_data;
// Without this function or directly returning the data, the issue does not occur
mediump vec4 UnpackData(in vec4 inData) {
float s = inData.x;
// Note s is always 0
// mod(0, 1) = 0
// So return value = (0, 0, -1, 0)
// Note s is always 0
// mod(0, 1) = 0
// So return value = (0, 0, -1, 0)
return vec4(0.0, 0.0, mod(s, 1.0) - 1.0, 0.0);
// Comment out the line above and uncomment the line below and the test succeeds on angle-dx11
// return vec4(0.0, 0.0, -1.0, 0.0);
}
}
void main(void) {
// Set initial color
gl_FragColor = BLUE;
// Set initial color
gl_FragColor = BLUE;
if (gl_FragCoord.y <= SEP_IX) {
mediump vec2 addr = vec2(v_tex_coords.x, TEXEL_HEIGHT);
@ -92,8 +92,8 @@ void main(void) {
vec4 entry = texture2D(u_data, addr);
mediump vec4 unpack = UnpackData(entry);
// Buffer is filled with 0, unpack is always (0, 0, -1, 0)
// So discard is always triggered
// Buffer is filled with 0, unpack is always (0, 0, -1, 0)
// So discard is always triggered
if (unpack.z == -1.0) {
discard;
}
@ -124,7 +124,7 @@ if (!gl) {
testFailed("context does not exist");
} else {
// Create texture filled with zero's
// Create texture filled with zero's
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
@ -133,14 +133,14 @@ if (!gl) {
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
wtu.fillTexture(gl, tex, 256, 256, [0, 0, 0, 0]);
// Clear complete viewport to red
// Clear complete viewport to red
gl.clearColor(1.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
var attribBuffers = wtu.setupUnitQuad(gl, 0, 1);
var program = wtu.setupProgram(gl, ["shader-vs", "shader-fs"], ["a_position", "a_tex_coords"], [0, 1], true);
// Bind texture
// Bind texture
var uniformMap = wtu.getUniformMap(gl, program);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, tex);
@ -148,7 +148,7 @@ if (!gl) {
// Draw
wtu.drawUnitQuad(gl);
// Verify output
wtu.checkCanvasRect(gl, 0, 0, 256, 128, [ 255, 0, 0, 255 ], "should be red", 1);
wtu.checkCanvasRect(gl, 0, 128, 256, 128, [ 0, 255, 0, 255 ], "should be green", 1);

View File

@ -0,0 +1,98 @@
<!--
/*
** Copyright (c) 2016 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Global invariant does not leak across shaders</title>
<link rel="stylesheet" href="../../../resources/js-test-style.css"/>
<script src="../../../js/js-test-pre.js"></script>
<script src="../../../js/webgl-test-utils.js"></script>
<script src="../../../js/glsl-conformance-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script id="InvariantVertex" type="x-shader/x-vertex">
#pragma STDGL invariant(all)
void main()
{
gl_Position = vec4(1.0, 0.0, 0.0, 1.0);
}
</script>
<script id="Fragment" type="x-shader/x-fragment">
precision mediump float;
void main()
{
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
}
</script>
<script id="VertexWithVarying" type="x-shader/x-vertex">
varying vec2 testVarying;
void main() {
gl_Position = vec4(1.0, 0.0, 0.0, 1.0);
testVarying = vec2(0.0, 0.0);
}
</script>
<script id="FragmentWithVarying" type="x-shader/x-fragment">
precision mediump float;
varying vec2 testVarying;
void main()
{
gl_FragColor = vec4(testVarying, 0.0, 1.0);
}
</script>
<script type="text/javascript">
"use strict";
description("The use of the global invariant pragma in one shader must not affect other shaders.");
GLSLConformanceTester.runTests([
{
vShaderId: "InvariantVertex",
vShaderSuccess: true,
fShaderId: "Fragment",
fShaderSuccess: true,
linkSuccess: true,
passMsg: "Shaders using global invariant pragma should compile and link."
},
{
vShaderId: "VertexWithVarying",
vShaderSuccess: true,
fShaderId: "FragmentWithVarying",
fShaderSuccess: true,
linkSuccess: true,
passMsg: "Shaders not using global invariant pragma should compile and link."
},
]);
</script>
</body>
</html>

View File

@ -0,0 +1,95 @@
<!--
/*
** Copyright (c) 2016 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Invariant does not leak across shaders</title>
<link rel="stylesheet" href="../../../resources/js-test-style.css"/>
<script src="../../../js/js-test-pre.js"></script>
<script src="../../../js/webgl-test-utils.js"></script>
<script src="../../../js/glsl-conformance-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script id="InvariantVertex" type="x-shader/x-vertex">
varying vec4 v_varying;
invariant v_varying;
void main()
{
gl_Position = v_varying;
}
</script>
<script id="InvariantFragment" type="x-shader/x-fragment">
precision mediump float;
invariant varying vec4 v_varying;
void main()
{
gl_FragColor = v_varying;
}
</script>
<script id="VertexWithVarying" type="x-shader/x-vertex">
varying vec4 v_varying;
void main() {
gl_Position = v_varying;
}
</script>
<script type="text/javascript">
"use strict";
description("The use of the invariant qualifier in one shader must not affect other shaders.");
debug("");
debug("This is a deliberate subset of conformance/glsl/misc/shaders-with-invariance.html.");
debug("Compared with the original tests, order of the tests is different.");
debug("This test covers an ANGLE bug. See crbug.com/634813.");
GLSLConformanceTester.runTests([
{
vShaderId: "InvariantVertex",
vShaderSuccess: true,
fShaderId: "InvariantFragment",
fShaderSuccess: true,
linkSuccess: true,
passMsg: "Shaders using invariant qualifier should compile and link."
},
{
vShaderId: "VertexWithVarying",
vShaderSuccess: true,
fShaderId: "InvariantFragment",
fShaderSuccess: true,
linkSuccess: false,
passMsg: "vertex shader with variant varying and fragment shader with invariant varying must fail"
},
]);
</script>
</body>
</html>

View File

@ -35,7 +35,7 @@
<script src="../../../js/webgl-test-utils.js"></script>
<script id='vshader' type='x-shader/x-vertex'>
precision highp float;
void main() {
void main() {
gl_Position = vec4( 1.0, 1.0, 1.0, 1.0 );
}
</script>

View File

@ -0,0 +1,68 @@
<!--
/*
** Copyright (c) 2016 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Nested sequence operator</title>
<link rel="stylesheet" href="../../../resources/js-test-style.css"/>
<script src="../../../js/js-test-pre.js"></script>
<script src="../../../js/webgl-test-utils.js"></script>
<script src="../../../js/glsl-conformance-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script id="fshaderNestedSequenceOperator" type="x-shader/x-fragment">
precision mediump float;
// Note that keep_flop_positive is expected to keep its default value false.
uniform bool keep_flop_positive;
float flop;
void main()
{
flop = -1.0,
(flop *= -1.0,
keep_flop_positive ? 0.0 : flop *= -1.0),
gl_FragColor = vec4(0, -flop, 0, 1);
}
</script>
<script type="text/javascript">
"use strict";
description("Test a nested sequence operator with a ternary operator inside. The ternary operator needs to be converted into an if statement on a HLSL based WebGL backend, which makes this case tricky.");
GLSLConformanceTester.runRenderTests([
{
fShaderId: 'fshaderNestedSequenceOperator',
fShaderSuccess: true,
linkSuccess: true,
passMsg: "Nested sequence operator is evaluated in the expected order."
}
]);
</script>
</body>
</html>

View File

@ -35,7 +35,7 @@
<script src="../../../js/webgl-test-utils.js"></script>
<script id='vshader1' type='x-shader/x-vertex'>
precision highp float;
void main() {
void main() {
gl_Position = vec4( 1.0, 1.0, 1.0, 1.0 );
}
</script>

View File

@ -89,7 +89,7 @@ if (!gl) {
// Clear complete viewport to red
gl.clearColor(1.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
var attribBuffers = wtu.setupUnitQuad(gl, 0, 1);
var program = wtu.setupProgram(gl, ["shader-vs", "shader-fs"], ["a_position"], [0], true);

View File

@ -29,28 +29,22 @@
<html>
<head>
<meta charset="utf-8">
<title>GLSL ternary operator should be evaluated after previous operands in a sequence</title>
<title>GLSL short-circuiting operators should be evaluated after previous operands in a sequence</title>
<link rel="stylesheet" href="../../../resources/js-test-style.css"/>
<script src="../../../js/js-test-pre.js"></script>
<script src="../../../js/webgl-test-utils.js"></script>
<script src="../../../js/glsl-conformance-test.js"></script>
</head>
<body>
<canvas id="canvas" width="64" height="64"> </canvas>
<div id="description"></div>
<div id="console"></div>
<script id="vshader" type="x-shader/x-vertex">
attribute vec3 aPosition;
void main() {
gl_Position = vec4(aPosition, 1);
}
</script>
<script id="fshaderSequenceSideEffectsAffectTernary" type="x-shader/x-fragment">
precision mediump float;
bool correct = true;
uniform float u;
uniform float u_zero;
float wrong() {
correct = false;
@ -62,37 +56,81 @@ void main() {
// "All expressions are evaluated, in order, from left to right"
// Also use a ternary operator where the third operand has side effects to make sure
// only the second operand is evaluated.
float a = u; // Expected to be -0.5
float a = u_zero - 0.5; // Result should be -0.5.
float green = (a++, a > 0.0 ? 1.0 : wrong());
gl_FragColor = vec4(0.0, correct ? green : 0.0, 0.0, 1.0);
}
</script>
<script id="fshaderSequenceSideEffectsAffectAnd" type="x-shader/x-fragment">
precision mediump float;
uniform bool u_false;
bool sideEffectA = false;
bool funcA() {
sideEffectA = true;
return true;
}
bool sideEffectB = false;
bool funcB() {
sideEffectB = true;
return true;
}
void main() {
bool b = (funcA(), u_false == sideEffectA && funcB());
gl_FragColor = (!b && sideEffectA && !sideEffectB) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1);
}
</script>
<script id="fshaderSequenceSideEffectsAffectOr" type="x-shader/x-fragment">
precision mediump float;
uniform bool u_false;
bool sideEffectA = false;
bool funcA() {
sideEffectA = true;
return false;
}
bool sideEffectB = false;
bool funcB() {
sideEffectB = true;
return false;
}
void main() {
bool b = (funcA(), (u_false == !sideEffectA) || funcB());
gl_FragColor = (b && sideEffectA && !sideEffectB) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1);
}
</script>
<script type="application/javascript">
"use strict";
description("Ternary operator should be evaluated after previous operands in a sequence");
description();
debug("");
debug("This test is targeted to stress syntax tree transformations that might need to be done in shader translation to unfold operators.");
var wtu = WebGLTestUtils;
function test() {
var gl = wtu.create3DContext("canvas");
if (!gl) {
testFailed("WebGL context does not exist");
return;
}
wtu.setupUnitQuad(gl);
debug("");
debug("Expression where first operand of a sequence operator has side effects which affect the second operand that is a ternary operator");
var prog = wtu.setupProgram(gl, ["vshader", "fshaderSequenceSideEffectsAffectTernary"], ["aPosition"], undefined, true);
var u = gl.getUniformLocation(prog, 'u');
gl.uniform1f(u, -0.5);
wtu.clearAndDrawUnitQuad(gl);
wtu.checkCanvas(gl, [0, 255, 0, 255]);
};
test();
finishTest();
GLSLConformanceTester.runRenderTests([
{
fShaderId: 'fshaderSequenceSideEffectsAffectTernary',
fShaderSuccess: true,
linkSuccess: true,
passMsg: 'Expression where first operand of a sequence operator has side effects which affect the second operand that is a ternary operator'
},
{
fShaderId: 'fshaderSequenceSideEffectsAffectAnd',
fShaderSuccess: true,
linkSuccess: true,
passMsg: 'Expression where first operand of a sequence operator has side effects which affect the second operand that is an and operator'
},
{
fShaderId: 'fshaderSequenceSideEffectsAffectOr',
fShaderSuccess: true,
linkSuccess: true,
passMsg: 'Expression where first operand of a sequence operator has side effects which affect the second operand that is an or operator'
}
]);
</script>
</body>
</html>

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "bvec2";
var targetType = "bvec2";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "bvec3";
var targetType = "bvec3";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "bvec4";
var targetType = "bvec4";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "ivec2";
var targetType = "ivec2";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "ivec3";
var targetType = "ivec3";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "ivec4";
var targetType = "ivec4";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "mat2";
var targetType = "mat2";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "mat3";
var targetType = "mat3";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "mat4";
var targetType = "mat4";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "vec2";
var targetType = "vec2";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "vec3";
var targetType = "vec3";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -42,15 +42,15 @@
<div id="console"></div>
<script>
"use strict";
var targetType = "vec4";
var targetType = "vec4";
description("Test " + targetType + " constructor expressions.");
var testSet = GLSLConstructorTestsGenerator.getDefaultTestSet(targetType);
// Generate tests
var testCases = GLSLConstructorTestsGenerator.getConstructorTests(targetType, testSet);
// Run the tests
// Run the tests
GLSLConformanceTester.runTests(testCases);
debug("");

View File

@ -77,7 +77,7 @@ GLSLGenerator.runFeatureTest({
tests: [
["$(output) = vec4(",
" $(func)(",
" $(input).x * 8.0 - 4.0,",
" $(input).x * 8.0 - 4.0,",
" $(input).y * 8.0 - 4.0) / 8.0,",
" 0,",
" 0,",
@ -86,7 +86,7 @@ GLSLGenerator.runFeatureTest({
" 0,",
" $(func)(",
" $(input).xy * 8.0 - 4.0,",
" $(input).wz * 8.0 - 4.0) / 8.0,",
" $(input).wz * 8.0 - 4.0) / 8.0,",
" 0, 1);"].join("\n"),
["$(output) = vec4(",
" 0, 0,",

View File

@ -78,7 +78,7 @@ GLSLGenerator.runFeatureTest({
tests: [
["$(output) = vec4(",
" $(func)(",
" $(input).x * 8.0 - 4.0,",
" $(input).x * 8.0 - 4.0,",
" $(input).y * 8.0 - 4.0) / 8.0,",
" 0,",
" 0,",
@ -87,7 +87,7 @@ GLSLGenerator.runFeatureTest({
" 0,",
" $(func)(",
" $(input).xy * 8.0 - 4.0,",
" $(input).wz * 8.0 - 4.0) / 8.0,",
" $(input).wz * 8.0 - 4.0) / 8.0,",
" 0, 1);"].join("\n"),
["$(output) = vec4(",
" 0, 0,",

View File

@ -73,7 +73,7 @@ void main()
{
int x = 1;
$(variables)
if ($(condition))
{ /*do nothing*/ }
@ -90,7 +90,7 @@ void main()
{
int x = 1;
$(variables)
if ($(condition))
{ /*do nothing*/ }

View File

@ -199,7 +199,7 @@ void main()
// GLSL 1.0.17 4.3.5
"use strict";
// See GLSL ES spec 1.0.17 section 4.6.4 "Invariance and linkage".
GLSLConformanceTester.runTests([
var cases = [
{
vShaderId: "vertexShaderVariant",
vShaderSuccess: true,
@ -216,14 +216,6 @@ GLSLConformanceTester.runTests([
linkSuccess: false,
passMsg: "vertex shader with invariant varying and fragment shader with variant varying must fail",
},
{
vShaderId: "vertexShaderVariant",
vShaderSuccess: true,
fShaderId: "fragmentShaderGlobalInvariant",
fShaderSuccess: true,
linkSuccess: false,
passMsg: "vertex shader with variant varying and fragment shader with invariant (global setting) varying must fail",
},
{
vShaderId: "vertexShaderGlobalInvariant",
vShaderSuccess: true,
@ -272,14 +264,6 @@ GLSLConformanceTester.runTests([
linkSuccess: false,
passMsg: "fragment shader with invariant (separately set in wrong order) varying must fail",
},
{
vShaderId: "vertexShaderInvariant",
vShaderSuccess: true,
fShaderId: "fragmentShaderGlobalInvariant",
fShaderSuccess: true,
linkSuccess: true,
passMsg: "vertex shader with invariant varying and fragment shader with invariant (global setting) varying must succeed",
},
{
vShaderId: "vertexShaderInvariantGlPosition",
vShaderSuccess: true,
@ -344,7 +328,25 @@ GLSLConformanceTester.runTests([
linkSuccess: false,
passMsg: "fragment shader with invariant gl_FrontFacing must fail compilation",
},
]);
{
vShaderId: "vertexShaderVariant",
vShaderSuccess: true,
fShaderId: "fragmentShaderGlobalInvariant",
fShaderSuccess: true,
linkSuccess: false,
passMsg: "vertex shader with variant varying and fragment shader with invariant (global setting) varying must fail",
},
{
vShaderId: "vertexShaderInvariant",
vShaderSuccess: true,
fShaderId: "fragmentShaderGlobalInvariant",
fShaderSuccess: true,
linkSuccess: true,
passMsg: "vertex shader with invariant varying and fragment shader with invariant (global setting) varying must succeed",
}
];
GLSLConformanceTester.runTests(cases);
var successfullyParsed = true;
</script>
</body>

View File

@ -40,7 +40,7 @@
<div id="description"></div>
<div id="console"></div>
<script id="vertexShaderStructSequence" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;
@ -56,7 +56,7 @@ void main()
}
</script>
<script id="fragmentShaderStructSequence" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;
@ -72,7 +72,7 @@ void main()
}
</script>
<script id="vertexShaderStructName" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;
@ -88,7 +88,7 @@ void main()
}
</script>
<script id="fragmentShaderStructNameFailure" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;
@ -104,7 +104,7 @@ void main()
}
</script>
<script id="fragmentShaderStructNameSuccess" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;
@ -129,7 +129,7 @@ void main()
}
</script>
<script id="vertexShaderStructFieldName" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;
@ -145,7 +145,7 @@ void main()
}
</script>
<script id="fragmentShaderStructFieldName" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;
@ -161,7 +161,7 @@ void main()
}
</script>
<script id="vertexShaderStructFieldType" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;
@ -177,7 +177,7 @@ void main()
}
</script>
<script id="fragmentShaderStructFieldType" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;
@ -193,7 +193,7 @@ void main()
}
</script>
<script id="vertexShaderStructFieldPrecision" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
struct info {
@ -208,7 +208,7 @@ void main()
}
</script>
<script id="fragmentShaderStructFieldPrecision" type="text/something-not-javascript">
// Structures must have the same name, sequence of type names, and
// Structures must have the same name, sequence of type names, and
// type definitions, and field names to be considered the same type.
// GLSL 1.017 4.2.4
precision mediump float;

View File

@ -40,7 +40,7 @@
precision mediump float;
uniform struct S { $(type) field;} s;
void main() {
// All uniforms are required to be zero initialized. Add the color green
// All uniforms are required to be zero initialized. Add the color green
// to make the rendering test pass.
gl_FragColor = $(asVec4) + vec4(0.0, 1.0, 0.0, 1.0);
}

View File

@ -105,7 +105,7 @@ function runTest() {
var program = wtu.setupProgram(
gl, ['vshader2d' + ss, 'fshader2d'], ['vPosition', 'texCoord0'], [0, 1]);
wtu.setupUnitQuad(gl, 0, 1);
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texParameteri(
@ -127,7 +127,7 @@ function runTest() {
ctx.fillRect(0, 0, size, size);
ctx.fillStyle = "rgb(" + color.color[0] + "," + color.color[1] + "," + color.color[2] + ")";
ctx.fillRect(size / 2, 0, size / 2, size / 2);
gl.texImage2D(gl.TEXTURE_2D, ii, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, c);
}

View File

@ -42,12 +42,12 @@
<script id="vshader" type="x-shader/x-vertex">
// Inputs
attribute vec4 aPosInfo;
// Outputs
varying vec2 vTargetPixelCoord;
void main()
{
{
vTargetPixelCoord = aPosInfo.zw;
gl_PointSize = 1.0;
@ -59,12 +59,12 @@ void main()
precision mediump float;
// Inputs
varying vec2 vTargetPixelCoord;
varying vec2 vTargetPixelCoord;
// Colors used to signal correctness
// Colors used to signal correctness
const vec4 red = vec4(1.0, 0.0, 0.0, 1.0);
const vec4 green = vec4(0.0, 1.0, 0.0, 1.0);
void main()
{
// Check pixel index
@ -72,7 +72,7 @@ void main()
// Check fractional part of coordinates
bool fracCoordValid = all(lessThan(abs(fract(gl_FragCoord.xy) - vec2(0.5)), vec2(0.0001)));
gl_FragColor = (pixelIxValid && fracCoordValid) ? green : red;
}
</script>
@ -85,33 +85,33 @@ void main()
precision mediump float;
// Inputs
varying vec2 vTargetPixelCoord;
varying vec2 vTargetPixelCoord;
const vec2 pixSize = vec2(2.0/32.0, 2.0/32.0);
void main()
{
// Coordinates within a framebuffer pixel [0, 1>
vec2 inPixelCoord = fract(vTargetPixelCoord / pixSize);
// Create different color dependent on the position inside the framebuffer pixel
float r = (inPixelCoord.x < 0.4) ? 0.2 : (inPixelCoord.x > 0.6) ? 0.8 : 0.5;
float g = (inPixelCoord.y < 0.4) ? 0.2 : (inPixelCoord.y > 0.6) ? 0.8 : 0.5;
float r = (inPixelCoord.x < 0.4) ? 0.2 : (inPixelCoord.x > 0.6) ? 0.8 : 0.5;
float g = (inPixelCoord.y < 0.4) ? 0.2 : (inPixelCoord.y > 0.6) ? 0.8 : 0.5;
gl_FragColor = vec4(r, g, 0.0, 1.0);
}
</script>
<script>
"use strict";
// Test if gl_FragCoord.xy values are always of the form :
// (first framebuffer pixel index + 0.5, second framebuffer pixel index + 0.5)
// (if no multisampling)
// This is done by rendering a set of points which targets either the center of the
// This is done by rendering a set of points which targets either the center of the
// output pixel or the center of one of the quadrants
// Constants
var floatsPerAttribute = 4;
@ -122,48 +122,48 @@ var program;
var vxBuffer;
// Set data for one attribute (framebuffer.xy, pixel_index.xy)
function setPixelData(data, dIx, xx, yy, xSize, ySize, xOffset, yOffset)
function setPixelData(data, dIx, xx, yy, xSize, ySize, xOffset, yOffset)
{
// Frame buffer first coordinate [-1, 1]
data[dIx++] = (xx + 0.5) * xSize + xOffset - 1;
data[dIx++] = (xx + 0.5) * xSize + xOffset - 1;
// Frame buffer second coordinate [-1, 1]
data[dIx++] = (yy + 0.5) * ySize + yOffset - 1;
// Frame buffer pixel first index
data[dIx++] = xx;
data[dIx++] = xx;
// Frame buffer pixel second index
data[dIx++] = yy;
data[dIx++] = yy;
return dIx;
return dIx;
}
// Create attribute data
function createAttributeData(xOffset, yOffset)
function createAttributeData(xOffset, yOffset)
{
// Retrieve realised dimensions of viewport
var widthPx = gl.drawingBufferWidth;
var heightPx = gl.drawingBufferHeight;
var pixelCount = widthPx * heightPx;
var pixelCount = widthPx * heightPx;
// Pixel size in framebuffer coordinates
var pWidth = 2 / widthPx;
var pHeight = 2 / heightPx;
var pHeight = 2 / heightPx;
var data = new Float32Array(pixelCount * floatsPerAttribute);
var dIx = 0;
for (var yy = 0; yy < heightPx; ++yy)
for (var xx = 0; xx < widthPx; ++xx)
for (var yy = 0; yy < heightPx; ++yy)
for (var xx = 0; xx < widthPx; ++xx)
dIx = setPixelData(data, dIx, xx, yy, pWidth, pHeight, xOffset * pWidth, yOffset * pHeight);
if (dIx !== data.length)
wtu.error("gl-fragcoord-xy-values.html, createAttributeData(), index not correct at end");
return data;
return data;
}
// Initialize test
function init()
// Initialize test
function init()
{
description("tests gl_FragCoord.xy values");
@ -171,13 +171,13 @@ function init()
gl = wtu.create3DContext("canvas", { antialias: false });
program = wtu.setupProgram(gl, ["vshader", "fshader"], ["aPosInfo"]);
vxBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vxBuffer);
gl.enableVertexAttribArray(0);
gl.vertexAttribPointer(0, floatsPerAttribute, gl.FLOAT, false, 0, 0);
}
// Render data
// Render data
function render(xOffset, yOffset, passMsg)
{
// Set attribute data
@ -191,7 +191,7 @@ function render(xOffset, yOffset, passMsg)
wtu.checkCanvas(gl, green, passMsg);
}
// Run tests
// Run tests
init();
render(0, 0, "green : sampling at center of output pixel is correct");
render(0.25, 0.25, "green : sampling in top right quadrant of output pixel is correct");

View File

@ -89,9 +89,9 @@ function init()
];
var msg = "should be " + color;
wtu.checkCanvasRect(
gl,
xx + quarterStep + halfStep * ii,
yy + quarterStep + halfStep * ii,
gl,
xx + quarterStep + halfStep * ii,
yy + quarterStep + halfStep * ii,
1, 1, color, msg, 4);
}
}

View File

@ -45,13 +45,13 @@ description("Tests calling WebGL APIs with wrong argument types");
var testArguments = [
{ value: "foo",
throws: true },
throwsForNullables: true },
{ value: 0,
throws: true },
throwsForNullables: true },
{ value: null,
throws: false },
throwsForNullables: false },
{ value: undefined,
throws: false }
throwsForNullables: false }
];
var argument;
@ -72,24 +72,36 @@ wtu.loadStandardProgramAsync(context, function(success, prog) {
assertMsg(loc != null, "getUniformLocation succeeded");
for (var i = 0; i < testArguments.length; ++i) {
var func, func2;
if (testArguments[i].throws) {
argument = testArguments[i].value;
debug('Testing argument: ' + argument);
// These functions don't accept nullable arguments any more.
shouldThrow("context.compileShader(argument)");
shouldThrow("context.linkProgram(argument)");
shouldThrow("context.attachShader(program, argument)");
shouldThrow("context.attachShader(argument, shader)");
shouldThrow("context.detachShader(program, argument)");
shouldThrow("context.detachShader(argument, shader)");
shouldThrow("context.shaderSource(argument, 'foo')");
shouldThrow("context.bindAttribLocation(argument, 0, 'foo')");
shouldThrow("context.getProgramInfoLog(argument)");
shouldThrow("context.getProgramParameter(argument, 0)");
shouldThrow("context.getShaderInfoLog(argument)");
shouldThrow("context.getShaderParameter(argument, 0)");
shouldThrow("context.getShaderSource(argument)");
shouldThrow("context.getUniform(argument, loc)");
shouldThrow("context.getUniform(program, argument)");
shouldThrow("context.getUniformLocation(argument, 'u_modelViewProjMatrix')");
// The following entry points still accept nullable arguments.
var func;
if (testArguments[i].throwsForNullables) {
func = shouldThrow;
func2 = shouldThrow;
} else {
func = shouldBeUndefined;
func2 = shouldBeNull;
}
argument = testArguments[i].value;
func("context.compileShader(argument)");
func("context.linkProgram(argument)");
func("context.attachShader(program, argument)");
func("context.attachShader(argument, shader)");
func("context.detachShader(program, argument)");
func("context.detachShader(argument, shader)");
func("context.useProgram(argument)");
func("context.shaderSource(argument, 'foo')");
func("context.bindAttribLocation(argument, 0, 'foo')");
func("context.bindBuffer(context.ARRAY_BUFFER, argument)");
func("context.bindFramebuffer(context.FRAMEBUFFER, argument)");
func("context.bindRenderbuffer(context.RENDERBUFFER, argument)");
@ -99,23 +111,11 @@ wtu.loadStandardProgramAsync(context, function(success, prog) {
func("context.uniform2fv(argument, new Float32Array([0.0, 0.0]))");
func("context.uniform2iv(argument, new Int32Array([0, 0]))");
func("context.uniformMatrix2fv(argument, false, new Float32Array([0.0, 0.0, 0.0, 0.0]))");
func2("context.getProgramInfoLog(argument)");
func2("context.getProgramParameter(argument, 0)");
func2("context.getShaderInfoLog(argument)");
func2("context.getShaderParameter(argument, 0)");
func2("context.getShaderSource(argument)");
func2("context.getUniform(argument, loc)");
func2("context.getUniform(program, argument)");
func2("context.getUniformLocation(argument, 'u_modelViewProjMatrix')");
func("context.useProgram(argument)");
}
finishTest();
});
});
var successfullyParsed = true;
</script>
<script src="../../js/js-test-post.js"></script>
</body>
</html>

View File

@ -175,18 +175,18 @@ function testVertexAttributeBuffers() {
setTestExpandos(buffer);
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0);
assertMsg(buffer === gl.getVertexAttrib(position, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING),
assertMsg(buffer === gl.getVertexAttrib(position, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING),
"getVertexAttrib(VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) return instance set with vertexAttribPointer");
gl.bindBuffer(gl.ARRAY_BUFFER, null);
// Garbage collect Javascript references. Remaining references should be internal to WebGL.
buffer = null;
program = null;
program = null;
webglHarnessCollectGarbage();
var retrievedBuffer = gl.getVertexAttrib(position, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
verifyTestExpandos(retrievedBuffer, "Vertex Attribute Buffer");
shouldBeType(retrievedBuffer, 'WebGLBuffer');
shouldBeType(retrievedBuffer, 'WebGLBuffer');
debug('');
}

View File

@ -58,342 +58,342 @@
<iframe src="conformance/badArgsArityLessThanArgc.html" width="110" height="42"></iframe>
<h2><a href="conformance/badArgsArityLessThanArgc.html">conformance/badArgsArityLessThanArgc.html</a></h2>
</div>
<div>
<iframe src="conformance/constants.html" width="110" height="42"></iframe>
<h2><a href="conformance/constants.html">conformance/constants.html</a></h2>
</div>
<div>
<iframe src="conformance/fuzzTheAPI.html" width="110" height="42"></iframe>
<h2><a href="conformance/fuzzTheAPI.html">conformance/fuzzTheAPI.html</a></h2>
</div>
<div>
<iframe src="conformance/getContext.html" width="110" height="42"></iframe>
<h2><a href="conformance/getContext.html">conformance/getContext.html</a></h2>
</div>
<div>
<iframe src="conformance/methods.html" width="110" height="42"></iframe>
<h2><a href="conformance/methods.html">conformance/methods.html</a></h2>
</div>
<div>
<iframe src="conformance/quickCheckAPI.html" width="110" height="42"></iframe>
<h2><a href="conformance/quickCheckAPI.html">conformance/quickCheckAPI.html</a></h2>
</div>
<div>
<iframe src="conformance/quickCheckAPIBadArgs.html" width="110" height="42"></iframe>
<h2><a href="conformance/quickCheckAPIBadArgs.html">conformance/quickCheckAPIBadArgs.html</a></h2>
</div>
<div>
<iframe src="conformance/webGLArrays.html" width="110" height="42"></iframe>
<h2><a href="conformance/webGLArrays.html">conformance/webGLArrays.html</a></h2>
</div>
<div>
<iframe src="functions/bindBuffer.html" width="110" height="42"></iframe>
<h2><a href="functions/bindBuffer.html">functions/bindBuffer.html</a></h2>
</div>
<div>
<iframe src="functions/bindBufferBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/bindBufferBadArgs.html">functions/bindBufferBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/bindFramebufferLeaveNonZero.html" width="110" height="42"></iframe>
<h2><a href="functions/bindFramebufferLeaveNonZero.html">functions/bindFramebufferLeaveNonZero.html</a></h2>
</div>
<div>
<iframe src="functions/bufferData.html" width="110" height="42"></iframe>
<h2><a href="functions/bufferData.html">functions/bufferData.html</a></h2>
</div>
<div>
<iframe src="functions/bufferDataBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/bufferDataBadArgs.html">functions/bufferDataBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/bufferSubData.html" width="110" height="42"></iframe>
<h2><a href="functions/bufferSubData.html">functions/bufferSubData.html</a></h2>
</div>
<div>
<iframe src="functions/bufferSubDataBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/bufferSubDataBadArgs.html">functions/bufferSubDataBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/copyTexImage2D.html" width="110" height="42"></iframe>
<h2><a href="functions/copyTexImage2D.html">functions/copyTexImage2D.html</a></h2>
</div>
<div>
<iframe src="functions/copyTexImage2DBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/copyTexImage2DBadArgs.html">functions/copyTexImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/copyTexSubImage2D.html" width="110" height="42"></iframe>
<h2><a href="functions/copyTexSubImage2D.html">functions/copyTexSubImage2D.html</a></h2>
</div>
<div>
<iframe src="functions/copyTexSubImage2DBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/copyTexSubImage2DBadArgs.html">functions/copyTexSubImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/deleteBufferBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/deleteBufferBadArgs.html">functions/deleteBufferBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/drawArrays.html" width="110" height="42"></iframe>
<h2><a href="functions/drawArrays.html">functions/drawArrays.html</a></h2>
</div>
<div>
<iframe src="functions/drawArraysOutOfBounds.html" width="110" height="42"></iframe>
<h2><a href="functions/drawArraysOutOfBounds.html">functions/drawArraysOutOfBounds.html</a></h2>
</div>
<div>
<iframe src="functions/drawElements.html" width="110" height="42"></iframe>
<h2><a href="functions/drawElements.html">functions/drawElements.html</a></h2>
</div>
<div>
<iframe src="functions/drawElementsBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/drawElementsBadArgs.html">functions/drawElementsBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/getImageData.html" width="110" height="42"></iframe>
<h2><a href="functions/getImageData.html">functions/getImageData.html</a></h2>
</div>
<div>
<iframe src="functions/getImageDataBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/getImageDataBadArgs.html">functions/getImageDataBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/isTests.html" width="110" height="42"></iframe>
<h2><a href="functions/isTests.html">functions/isTests.html</a></h2>
</div>
<div>
<iframe src="functions/linkProgramBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/linkProgramBadArgs.html">functions/linkProgramBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/readPixels.html" width="110" height="42"></iframe>
<h2><a href="functions/readPixels.html">functions/readPixels.html</a></h2>
</div>
<div>
<iframe src="functions/readPixelsBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/readPixelsBadArgs.html">functions/readPixelsBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/texImage2D.html" width="110" height="42"></iframe>
<h2><a href="functions/texImage2D.html">functions/texImage2D.html</a></h2>
</div>
<div>
<iframe src="functions/texImage2DBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/texImage2DBadArgs.html">functions/texImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/texImage2DHTML.html" width="110" height="42"></iframe>
<h2><a href="functions/texImage2DHTML.html">functions/texImage2DHTML.html</a></h2>
</div>
<div>
<iframe src="functions/texImage2DHTMLBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/texImage2DHTMLBadArgs.html">functions/texImage2DHTMLBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/texSubImage2D.html" width="110" height="42"></iframe>
<h2><a href="functions/texSubImage2D.html">functions/texSubImage2D.html</a></h2>
</div>
<div>
<iframe src="functions/texSubImage2DBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/texSubImage2DBadArgs.html">functions/texSubImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/texSubImage2DHTML.html" width="110" height="42"></iframe>
<h2><a href="functions/texSubImage2DHTML.html">functions/texSubImage2DHTML.html</a></h2>
</div>
<div>
<iframe src="functions/texSubImage2DHTMLBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/texSubImage2DHTMLBadArgs.html">functions/texSubImage2DHTMLBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/uniformMatrix.html" width="110" height="42"></iframe>
<h2><a href="functions/uniformMatrix.html">functions/uniformMatrix.html</a></h2>
</div>
<div>
<iframe src="functions/uniformMatrixBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/uniformMatrixBadArgs.html">functions/uniformMatrixBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/uniformf.html" width="110" height="42"></iframe>
<h2><a href="functions/uniformf.html">functions/uniformf.html</a></h2>
</div>
<div>
<iframe src="functions/uniformfBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/uniformfBadArgs.html">functions/uniformfBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/uniformi.html" width="110" height="42"></iframe>
<h2><a href="functions/uniformi.html">functions/uniformi.html</a></h2>
</div>
<div>
<iframe src="functions/uniformiBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/uniformiBadArgs.html">functions/uniformiBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/vertexAttrib.html" width="110" height="42"></iframe>
<h2><a href="functions/vertexAttrib.html">functions/vertexAttrib.html</a></h2>
</div>
<div>
<iframe src="functions/vertexAttribBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/vertexAttribBadArgs.html">functions/vertexAttribBadArgs.html</a></h2>
</div>
<div>
<iframe src="functions/vertexAttribPointer.html" width="110" height="42"></iframe>
<h2><a href="functions/vertexAttribPointer.html">functions/vertexAttribPointer.html</a></h2>
</div>
<div>
<iframe src="functions/vertexAttribPointerBadArgs.html" width="110" height="42"></iframe>
<h2><a href="functions/vertexAttribPointerBadArgs.html">functions/vertexAttribPointerBadArgs.html</a></h2>
</div>
<div>
<iframe src="performance/CPUvsGPU.html" width="110" height="42"></iframe>
<h2><a href="performance/CPUvsGPU.html">performance/CPUvsGPU.html</a></h2>
</div>
<div>
<iframe src="performance/bandwidth.html" width="110" height="42"></iframe>
<h2><a href="performance/bandwidth.html">performance/bandwidth.html</a></h2>
</div>
<div>
<iframe src="performance/jsGCPause.html" width="110" height="42"></iframe>
<h2><a href="performance/jsGCPause.html">performance/jsGCPause.html</a></h2>
</div>
<div>
<iframe src="performance/jsMatrixMult.html" width="110" height="42"></iframe>
<h2><a href="performance/jsMatrixMult.html">performance/jsMatrixMult.html</a></h2>
</div>
<div>
<iframe src="performance/jsToGLOverhead.html" width="110" height="42"></iframe>
<h2><a href="performance/jsToGLOverhead.html">performance/jsToGLOverhead.html</a></h2>
</div>
<div>
<iframe src="glsl/arrayOutOfBounds.html" width="110" height="42"></iframe>
<h2><a href="glsl/arrayOutOfBounds.html">glsl/arrayOutOfBounds.html</a></h2>
</div>
<div>
<iframe src="glsl/longLoops.html" width="110" height="42"></iframe>
<h2><a href="glsl/longLoops.html">glsl/longLoops.html</a></h2>
</div>
<div>
<iframe src="glsl/uniformOutOfBounds.html" width="110" height="42"></iframe>
<h2><a href="glsl/uniformOutOfBounds.html">glsl/uniformOutOfBounds.html</a></h2>
</div>
<div>
<iframe src="glsl/unusedAttribsUniforms.html" width="110" height="42"></iframe>
<h2><a href="glsl/unusedAttribsUniforms.html">glsl/unusedAttribsUniforms.html</a></h2>
</div>
</body>
</html>

View File

@ -58,342 +58,342 @@
<iframe id="0" width="110" height="42"></iframe>
<h2><a onclick="loadTest(0, 'conformance/badArgsArityLessThanArgc.html');return false" href="conformance/badArgsArityLessThanArgc.html">conformance/badArgsArityLessThanArgc.html</a></h2>
</div>
<div>
<iframe id="1" width="110" height="42"></iframe>
<h2><a onclick="loadTest(1, 'conformance/constants.html');return false" href="conformance/constants.html">conformance/constants.html</a></h2>
</div>
<div>
<iframe id="2" width="110" height="42"></iframe>
<h2><a onclick="loadTest(2, 'conformance/fuzzTheAPI.html');return false" href="conformance/fuzzTheAPI.html">conformance/fuzzTheAPI.html</a></h2>
</div>
<div>
<iframe id="3" width="110" height="42"></iframe>
<h2><a onclick="loadTest(3, 'conformance/getContext.html');return false" href="conformance/getContext.html">conformance/getContext.html</a></h2>
</div>
<div>
<iframe id="4" width="110" height="42"></iframe>
<h2><a onclick="loadTest(4, 'conformance/methods.html');return false" href="conformance/methods.html">conformance/methods.html</a></h2>
</div>
<div>
<iframe id="5" width="110" height="42"></iframe>
<h2><a onclick="loadTest(5, 'conformance/quickCheckAPI.html');return false" href="conformance/quickCheckAPI.html">conformance/quickCheckAPI.html</a></h2>
</div>
<div>
<iframe id="6" width="110" height="42"></iframe>
<h2><a onclick="loadTest(6, 'conformance/quickCheckAPIBadArgs.html');return false" href="conformance/quickCheckAPIBadArgs.html">conformance/quickCheckAPIBadArgs.html</a></h2>
</div>
<div>
<iframe id="7" width="110" height="42"></iframe>
<h2><a onclick="loadTest(7, 'conformance/webGLArrays.html');return false" href="conformance/webGLArrays.html">conformance/webGLArrays.html</a></h2>
</div>
<div>
<iframe id="8" width="110" height="42"></iframe>
<h2><a onclick="loadTest(8, 'functions/bindBuffer.html');return false" href="functions/bindBuffer.html">functions/bindBuffer.html</a></h2>
</div>
<div>
<iframe id="9" width="110" height="42"></iframe>
<h2><a onclick="loadTest(9, 'functions/bindBufferBadArgs.html');return false" href="functions/bindBufferBadArgs.html">functions/bindBufferBadArgs.html</a></h2>
</div>
<div>
<iframe id="10" width="110" height="42"></iframe>
<h2><a onclick="loadTest(10, 'functions/bindFramebufferLeaveNonZero.html');return false" href="functions/bindFramebufferLeaveNonZero.html">functions/bindFramebufferLeaveNonZero.html</a></h2>
</div>
<div>
<iframe id="11" width="110" height="42"></iframe>
<h2><a onclick="loadTest(11, 'functions/bufferData.html');return false" href="functions/bufferData.html">functions/bufferData.html</a></h2>
</div>
<div>
<iframe id="12" width="110" height="42"></iframe>
<h2><a onclick="loadTest(12, 'functions/bufferDataBadArgs.html');return false" href="functions/bufferDataBadArgs.html">functions/bufferDataBadArgs.html</a></h2>
</div>
<div>
<iframe id="13" width="110" height="42"></iframe>
<h2><a onclick="loadTest(13, 'functions/bufferSubData.html');return false" href="functions/bufferSubData.html">functions/bufferSubData.html</a></h2>
</div>
<div>
<iframe id="14" width="110" height="42"></iframe>
<h2><a onclick="loadTest(14, 'functions/bufferSubDataBadArgs.html');return false" href="functions/bufferSubDataBadArgs.html">functions/bufferSubDataBadArgs.html</a></h2>
</div>
<div>
<iframe id="15" width="110" height="42"></iframe>
<h2><a onclick="loadTest(15, 'functions/copyTexImage2D.html');return false" href="functions/copyTexImage2D.html">functions/copyTexImage2D.html</a></h2>
</div>
<div>
<iframe id="16" width="110" height="42"></iframe>
<h2><a onclick="loadTest(16, 'functions/copyTexImage2DBadArgs.html');return false" href="functions/copyTexImage2DBadArgs.html">functions/copyTexImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe id="17" width="110" height="42"></iframe>
<h2><a onclick="loadTest(17, 'functions/copyTexSubImage2D.html');return false" href="functions/copyTexSubImage2D.html">functions/copyTexSubImage2D.html</a></h2>
</div>
<div>
<iframe id="18" width="110" height="42"></iframe>
<h2><a onclick="loadTest(18, 'functions/copyTexSubImage2DBadArgs.html');return false" href="functions/copyTexSubImage2DBadArgs.html">functions/copyTexSubImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe id="19" width="110" height="42"></iframe>
<h2><a onclick="loadTest(19, 'functions/deleteBufferBadArgs.html');return false" href="functions/deleteBufferBadArgs.html">functions/deleteBufferBadArgs.html</a></h2>
</div>
<div>
<iframe id="20" width="110" height="42"></iframe>
<h2><a onclick="loadTest(20, 'functions/drawArrays.html');return false" href="functions/drawArrays.html">functions/drawArrays.html</a></h2>
</div>
<div>
<iframe id="21" width="110" height="42"></iframe>
<h2><a onclick="loadTest(21, 'functions/drawArraysOutOfBounds.html');return false" href="functions/drawArraysOutOfBounds.html">functions/drawArraysOutOfBounds.html</a></h2>
</div>
<div>
<iframe id="22" width="110" height="42"></iframe>
<h2><a onclick="loadTest(22, 'functions/drawElements.html');return false" href="functions/drawElements.html">functions/drawElements.html</a></h2>
</div>
<div>
<iframe id="23" width="110" height="42"></iframe>
<h2><a onclick="loadTest(23, 'functions/drawElementsBadArgs.html');return false" href="functions/drawElementsBadArgs.html">functions/drawElementsBadArgs.html</a></h2>
</div>
<div>
<iframe id="24" width="110" height="42"></iframe>
<h2><a onclick="loadTest(24, 'functions/getImageData.html');return false" href="functions/getImageData.html">functions/getImageData.html</a></h2>
</div>
<div>
<iframe id="25" width="110" height="42"></iframe>
<h2><a onclick="loadTest(25, 'functions/getImageDataBadArgs.html');return false" href="functions/getImageDataBadArgs.html">functions/getImageDataBadArgs.html</a></h2>
</div>
<div>
<iframe id="26" width="110" height="42"></iframe>
<h2><a onclick="loadTest(26, 'functions/isTests.html');return false" href="functions/isTests.html">functions/isTests.html</a></h2>
</div>
<div>
<iframe id="27" width="110" height="42"></iframe>
<h2><a onclick="loadTest(27, 'functions/linkProgramBadArgs.html');return false" href="functions/linkProgramBadArgs.html">functions/linkProgramBadArgs.html</a></h2>
</div>
<div>
<iframe id="28" width="110" height="42"></iframe>
<h2><a onclick="loadTest(28, 'functions/readPixels.html');return false" href="functions/readPixels.html">functions/readPixels.html</a></h2>
</div>
<div>
<iframe id="29" width="110" height="42"></iframe>
<h2><a onclick="loadTest(29, 'functions/readPixelsBadArgs.html');return false" href="functions/readPixelsBadArgs.html">functions/readPixelsBadArgs.html</a></h2>
</div>
<div>
<iframe id="30" width="110" height="42"></iframe>
<h2><a onclick="loadTest(30, 'functions/texImage2D.html');return false" href="functions/texImage2D.html">functions/texImage2D.html</a></h2>
</div>
<div>
<iframe id="31" width="110" height="42"></iframe>
<h2><a onclick="loadTest(31, 'functions/texImage2DBadArgs.html');return false" href="functions/texImage2DBadArgs.html">functions/texImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe id="32" width="110" height="42"></iframe>
<h2><a onclick="loadTest(32, 'functions/texImage2DHTML.html');return false" href="functions/texImage2DHTML.html">functions/texImage2DHTML.html</a></h2>
</div>
<div>
<iframe id="33" width="110" height="42"></iframe>
<h2><a onclick="loadTest(33, 'functions/texImage2DHTMLBadArgs.html');return false" href="functions/texImage2DHTMLBadArgs.html">functions/texImage2DHTMLBadArgs.html</a></h2>
</div>
<div>
<iframe id="34" width="110" height="42"></iframe>
<h2><a onclick="loadTest(34, 'functions/texSubImage2D.html');return false" href="functions/texSubImage2D.html">functions/texSubImage2D.html</a></h2>
</div>
<div>
<iframe id="35" width="110" height="42"></iframe>
<h2><a onclick="loadTest(35, 'functions/texSubImage2DBadArgs.html');return false" href="functions/texSubImage2DBadArgs.html">functions/texSubImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe id="36" width="110" height="42"></iframe>
<h2><a onclick="loadTest(36, 'functions/texSubImage2DHTML.html');return false" href="functions/texSubImage2DHTML.html">functions/texSubImage2DHTML.html</a></h2>
</div>
<div>
<iframe id="37" width="110" height="42"></iframe>
<h2><a onclick="loadTest(37, 'functions/texSubImage2DHTMLBadArgs.html');return false" href="functions/texSubImage2DHTMLBadArgs.html">functions/texSubImage2DHTMLBadArgs.html</a></h2>
</div>
<div>
<iframe id="38" width="110" height="42"></iframe>
<h2><a onclick="loadTest(38, 'functions/uniformMatrix.html');return false" href="functions/uniformMatrix.html">functions/uniformMatrix.html</a></h2>
</div>
<div>
<iframe id="39" width="110" height="42"></iframe>
<h2><a onclick="loadTest(39, 'functions/uniformMatrixBadArgs.html');return false" href="functions/uniformMatrixBadArgs.html">functions/uniformMatrixBadArgs.html</a></h2>
</div>
<div>
<iframe id="40" width="110" height="42"></iframe>
<h2><a onclick="loadTest(40, 'functions/uniformf.html');return false" href="functions/uniformf.html">functions/uniformf.html</a></h2>
</div>
<div>
<iframe id="41" width="110" height="42"></iframe>
<h2><a onclick="loadTest(41, 'functions/uniformfBadArgs.html');return false" href="functions/uniformfBadArgs.html">functions/uniformfBadArgs.html</a></h2>
</div>
<div>
<iframe id="42" width="110" height="42"></iframe>
<h2><a onclick="loadTest(42, 'functions/uniformi.html');return false" href="functions/uniformi.html">functions/uniformi.html</a></h2>
</div>
<div>
<iframe id="43" width="110" height="42"></iframe>
<h2><a onclick="loadTest(43, 'functions/uniformiBadArgs.html');return false" href="functions/uniformiBadArgs.html">functions/uniformiBadArgs.html</a></h2>
</div>
<div>
<iframe id="44" width="110" height="42"></iframe>
<h2><a onclick="loadTest(44, 'functions/vertexAttrib.html');return false" href="functions/vertexAttrib.html">functions/vertexAttrib.html</a></h2>
</div>
<div>
<iframe id="45" width="110" height="42"></iframe>
<h2><a onclick="loadTest(45, 'functions/vertexAttribBadArgs.html');return false" href="functions/vertexAttribBadArgs.html">functions/vertexAttribBadArgs.html</a></h2>
</div>
<div>
<iframe id="46" width="110" height="42"></iframe>
<h2><a onclick="loadTest(46, 'functions/vertexAttribPointer.html');return false" href="functions/vertexAttribPointer.html">functions/vertexAttribPointer.html</a></h2>
</div>
<div>
<iframe id="47" width="110" height="42"></iframe>
<h2><a onclick="loadTest(47, 'functions/vertexAttribPointerBadArgs.html');return false" href="functions/vertexAttribPointerBadArgs.html">functions/vertexAttribPointerBadArgs.html</a></h2>
</div>
<div>
<iframe id="48" width="110" height="42"></iframe>
<h2><a onclick="loadTest(48, 'performance/CPUvsGPU.html');return false" href="performance/CPUvsGPU.html">performance/CPUvsGPU.html</a></h2>
</div>
<div>
<iframe id="49" width="110" height="42"></iframe>
<h2><a onclick="loadTest(49, 'performance/bandwidth.html');return false" href="performance/bandwidth.html">performance/bandwidth.html</a></h2>
</div>
<div>
<iframe id="50" width="110" height="42"></iframe>
<h2><a onclick="loadTest(50, 'performance/jsGCPause.html');return false" href="performance/jsGCPause.html">performance/jsGCPause.html</a></h2>
</div>
<div>
<iframe id="51" width="110" height="42"></iframe>
<h2><a onclick="loadTest(51, 'performance/jsMatrixMult.html');return false" href="performance/jsMatrixMult.html">performance/jsMatrixMult.html</a></h2>
</div>
<div>
<iframe id="52" width="110" height="42"></iframe>
<h2><a onclick="loadTest(52, 'performance/jsToGLOverhead.html');return false" href="performance/jsToGLOverhead.html">performance/jsToGLOverhead.html</a></h2>
</div>
<div>
<iframe id="53" width="110" height="42"></iframe>
<h2><a onclick="loadTest(53, 'glsl/arrayOutOfBounds.html');return false" href="glsl/arrayOutOfBounds.html">glsl/arrayOutOfBounds.html</a></h2>
</div>
<div>
<iframe id="54" width="110" height="42"></iframe>
<h2><a onclick="loadTest(54, 'glsl/longLoops.html');return false" href="glsl/longLoops.html">glsl/longLoops.html</a></h2>
</div>
<div>
<iframe id="55" width="110" height="42"></iframe>
<h2><a onclick="loadTest(55, 'glsl/uniformOutOfBounds.html');return false" href="glsl/uniformOutOfBounds.html">glsl/uniformOutOfBounds.html</a></h2>
</div>
<div>
<iframe id="56" width="110" height="42"></iframe>
<h2><a onclick="loadTest(56, 'glsl/unusedAttribsUniforms.html');return false" href="glsl/unusedAttribsUniforms.html">glsl/unusedAttribsUniforms.html</a></h2>
</div>
</body>
</html>

View File

@ -58,342 +58,342 @@
<iframe id="0" width="110" height="42"></iframe>
<h2><a id="0_link" href="conformance/badArgsArityLessThanArgc.html">conformance/badArgsArityLessThanArgc.html</a></h2>
</div>
<div>
<iframe id="1" width="110" height="42"></iframe>
<h2><a id="1_link" href="conformance/constants.html">conformance/constants.html</a></h2>
</div>
<div>
<iframe id="2" width="110" height="42"></iframe>
<h2><a id="2_link" href="conformance/fuzzTheAPI.html">conformance/fuzzTheAPI.html</a></h2>
</div>
<div>
<iframe id="3" width="110" height="42"></iframe>
<h2><a id="3_link" href="conformance/getContext.html">conformance/getContext.html</a></h2>
</div>
<div>
<iframe id="4" width="110" height="42"></iframe>
<h2><a id="4_link" href="conformance/methods.html">conformance/methods.html</a></h2>
</div>
<div>
<iframe id="5" width="110" height="42"></iframe>
<h2><a id="5_link" href="conformance/quickCheckAPI.html">conformance/quickCheckAPI.html</a></h2>
</div>
<div>
<iframe id="6" width="110" height="42"></iframe>
<h2><a id="6_link" href="conformance/quickCheckAPIBadArgs.html">conformance/quickCheckAPIBadArgs.html</a></h2>
</div>
<div>
<iframe id="7" width="110" height="42"></iframe>
<h2><a id="7_link" href="conformance/webGLArrays.html">conformance/webGLArrays.html</a></h2>
</div>
<div>
<iframe id="8" width="110" height="42"></iframe>
<h2><a id="8_link" href="functions/bindBuffer.html">functions/bindBuffer.html</a></h2>
</div>
<div>
<iframe id="9" width="110" height="42"></iframe>
<h2><a id="9_link" href="functions/bindBufferBadArgs.html">functions/bindBufferBadArgs.html</a></h2>
</div>
<div>
<iframe id="10" width="110" height="42"></iframe>
<h2><a id="10_link" href="functions/bindFramebufferLeaveNonZero.html">functions/bindFramebufferLeaveNonZero.html</a></h2>
</div>
<div>
<iframe id="11" width="110" height="42"></iframe>
<h2><a id="11_link" href="functions/bufferData.html">functions/bufferData.html</a></h2>
</div>
<div>
<iframe id="12" width="110" height="42"></iframe>
<h2><a id="12_link" href="functions/bufferDataBadArgs.html">functions/bufferDataBadArgs.html</a></h2>
</div>
<div>
<iframe id="13" width="110" height="42"></iframe>
<h2><a id="13_link" href="functions/bufferSubData.html">functions/bufferSubData.html</a></h2>
</div>
<div>
<iframe id="14" width="110" height="42"></iframe>
<h2><a id="14_link" href="functions/bufferSubDataBadArgs.html">functions/bufferSubDataBadArgs.html</a></h2>
</div>
<div>
<iframe id="15" width="110" height="42"></iframe>
<h2><a id="15_link" href="functions/copyTexImage2D.html">functions/copyTexImage2D.html</a></h2>
</div>
<div>
<iframe id="16" width="110" height="42"></iframe>
<h2><a id="16_link" href="functions/copyTexImage2DBadArgs.html">functions/copyTexImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe id="17" width="110" height="42"></iframe>
<h2><a id="17_link" href="functions/copyTexSubImage2D.html">functions/copyTexSubImage2D.html</a></h2>
</div>
<div>
<iframe id="18" width="110" height="42"></iframe>
<h2><a id="18_link" href="functions/copyTexSubImage2DBadArgs.html">functions/copyTexSubImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe id="19" width="110" height="42"></iframe>
<h2><a id="19_link" href="functions/deleteBufferBadArgs.html">functions/deleteBufferBadArgs.html</a></h2>
</div>
<div>
<iframe id="20" width="110" height="42"></iframe>
<h2><a id="20_link" href="functions/drawArrays.html">functions/drawArrays.html</a></h2>
</div>
<div>
<iframe id="21" width="110" height="42"></iframe>
<h2><a id="21_link" href="functions/drawArraysOutOfBounds.html">functions/drawArraysOutOfBounds.html</a></h2>
</div>
<div>
<iframe id="22" width="110" height="42"></iframe>
<h2><a id="22_link" href="functions/drawElements.html">functions/drawElements.html</a></h2>
</div>
<div>
<iframe id="23" width="110" height="42"></iframe>
<h2><a id="23_link" href="functions/drawElementsBadArgs.html">functions/drawElementsBadArgs.html</a></h2>
</div>
<div>
<iframe id="24" width="110" height="42"></iframe>
<h2><a id="24_link" href="functions/getImageData.html">functions/getImageData.html</a></h2>
</div>
<div>
<iframe id="25" width="110" height="42"></iframe>
<h2><a id="25_link" href="functions/getImageDataBadArgs.html">functions/getImageDataBadArgs.html</a></h2>
</div>
<div>
<iframe id="26" width="110" height="42"></iframe>
<h2><a id="26_link" href="functions/isTests.html">functions/isTests.html</a></h2>
</div>
<div>
<iframe id="27" width="110" height="42"></iframe>
<h2><a id="27_link" href="functions/linkProgramBadArgs.html">functions/linkProgramBadArgs.html</a></h2>
</div>
<div>
<iframe id="28" width="110" height="42"></iframe>
<h2><a id="28_link" href="functions/readPixels.html">functions/readPixels.html</a></h2>
</div>
<div>
<iframe id="29" width="110" height="42"></iframe>
<h2><a id="29_link" href="functions/readPixelsBadArgs.html">functions/readPixelsBadArgs.html</a></h2>
</div>
<div>
<iframe id="30" width="110" height="42"></iframe>
<h2><a id="30_link" href="functions/texImage2D.html">functions/texImage2D.html</a></h2>
</div>
<div>
<iframe id="31" width="110" height="42"></iframe>
<h2><a id="31_link" href="functions/texImage2DBadArgs.html">functions/texImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe id="32" width="110" height="42"></iframe>
<h2><a id="32_link" href="functions/texImage2DHTML.html">functions/texImage2DHTML.html</a></h2>
</div>
<div>
<iframe id="33" width="110" height="42"></iframe>
<h2><a id="33_link" href="functions/texImage2DHTMLBadArgs.html">functions/texImage2DHTMLBadArgs.html</a></h2>
</div>
<div>
<iframe id="34" width="110" height="42"></iframe>
<h2><a id="34_link" href="functions/texSubImage2D.html">functions/texSubImage2D.html</a></h2>
</div>
<div>
<iframe id="35" width="110" height="42"></iframe>
<h2><a id="35_link" href="functions/texSubImage2DBadArgs.html">functions/texSubImage2DBadArgs.html</a></h2>
</div>
<div>
<iframe id="36" width="110" height="42"></iframe>
<h2><a id="36_link" href="functions/texSubImage2DHTML.html">functions/texSubImage2DHTML.html</a></h2>
</div>
<div>
<iframe id="37" width="110" height="42"></iframe>
<h2><a id="37_link" href="functions/texSubImage2DHTMLBadArgs.html">functions/texSubImage2DHTMLBadArgs.html</a></h2>
</div>
<div>
<iframe id="38" width="110" height="42"></iframe>
<h2><a id="38_link" href="functions/uniformMatrix.html">functions/uniformMatrix.html</a></h2>
</div>
<div>
<iframe id="39" width="110" height="42"></iframe>
<h2><a id="39_link" href="functions/uniformMatrixBadArgs.html">functions/uniformMatrixBadArgs.html</a></h2>
</div>
<div>
<iframe id="40" width="110" height="42"></iframe>
<h2><a id="40_link" href="functions/uniformf.html">functions/uniformf.html</a></h2>
</div>
<div>
<iframe id="41" width="110" height="42"></iframe>
<h2><a id="41_link" href="functions/uniformfBadArgs.html">functions/uniformfBadArgs.html</a></h2>
</div>
<div>
<iframe id="42" width="110" height="42"></iframe>
<h2><a id="42_link" href="functions/uniformi.html">functions/uniformi.html</a></h2>
</div>
<div>
<iframe id="43" width="110" height="42"></iframe>
<h2><a id="43_link" href="functions/uniformiBadArgs.html">functions/uniformiBadArgs.html</a></h2>
</div>
<div>
<iframe id="44" width="110" height="42"></iframe>
<h2><a id="44_link" href="functions/vertexAttrib.html">functions/vertexAttrib.html</a></h2>
</div>
<div>
<iframe id="45" width="110" height="42"></iframe>
<h2><a id="45_link" href="functions/vertexAttribBadArgs.html">functions/vertexAttribBadArgs.html</a></h2>
</div>
<div>
<iframe id="46" width="110" height="42"></iframe>
<h2><a id="46_link" href="functions/vertexAttribPointer.html">functions/vertexAttribPointer.html</a></h2>
</div>
<div>
<iframe id="47" width="110" height="42"></iframe>
<h2><a id="47_link" href="functions/vertexAttribPointerBadArgs.html">functions/vertexAttribPointerBadArgs.html</a></h2>
</div>
<div>
<iframe id="48" width="110" height="42"></iframe>
<h2><a id="48_link" href="performance/CPUvsGPU.html">performance/CPUvsGPU.html</a></h2>
</div>
<div>
<iframe id="49" width="110" height="42"></iframe>
<h2><a id="49_link" href="performance/bandwidth.html">performance/bandwidth.html</a></h2>
</div>
<div>
<iframe id="50" width="110" height="42"></iframe>
<h2><a id="50_link" href="performance/jsGCPause.html">performance/jsGCPause.html</a></h2>
</div>
<div>
<iframe id="51" width="110" height="42"></iframe>
<h2><a id="51_link" href="performance/jsMatrixMult.html">performance/jsMatrixMult.html</a></h2>
</div>
<div>
<iframe id="52" width="110" height="42"></iframe>
<h2><a id="52_link" href="performance/jsToGLOverhead.html">performance/jsToGLOverhead.html</a></h2>
</div>
<div>
<iframe id="53" width="110" height="42"></iframe>
<h2><a id="53_link" href="glsl/arrayOutOfBounds.html">glsl/arrayOutOfBounds.html</a></h2>
</div>
<div>
<iframe id="54" width="110" height="42"></iframe>
<h2><a id="54_link" href="glsl/longLoops.html">glsl/longLoops.html</a></h2>
</div>
<div>
<iframe id="55" width="110" height="42"></iframe>
<h2><a id="55_link" href="glsl/uniformOutOfBounds.html">glsl/uniformOutOfBounds.html</a></h2>
</div>
<div>
<iframe id="56" width="110" height="42"></iframe>
<h2><a id="56_link" href="glsl/unusedAttribsUniforms.html">glsl/unusedAttribsUniforms.html</a></h2>
</div>
</body>
</html>

View File

@ -73,7 +73,7 @@ Tests.testTexImage2D = function(gl) {
}
Tests.testTexImage2DNull = function(gl) {
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1,1,0,gl.RGBA,gl.UNSIGNED_BYTE, null);
assertOk(function(){gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1,1,0,gl.RGBA,gl.UNSIGNED_BYTE, null);});
}
Tests.endUnit = function(gl) {

View File

@ -31,9 +31,9 @@
<title>WebGL tests</title>
</head>
<body>
<h1>Tests for the WebGL canvas context</h1>
<h2>These tests are intended to serve the following purposes:</h2>
<ul>
<li>Assert spec conformance (so that WebGL pages work the same across browsers and hardware)</li>

View File

@ -46,80 +46,80 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "abs_float_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "abs_float_frag_xvary.frag"
},
"name": "abs_float_frag_xvary.test.html",
},
"name": "abs_float_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "abs_vec2_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "abs_vec2_frag_xvary.frag"
},
"name": "abs_vec2_frag_xvary.test.html",
},
"name": "abs_vec2_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "abs_vec3_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "abs_vec3_frag_xvary.frag"
},
"name": "abs_vec3_frag_xvary.test.html",
},
"name": "abs_vec3_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "abs_float_vert_xvary_ref.vert",
"vertexShader": "abs_float_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "abs_float_vert_xvary.vert",
"vertexShader": "abs_float_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "abs_float_vert_xvary.test.html",
},
"name": "abs_float_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "abs_vec2_vert_xvary_ref.vert",
"vertexShader": "abs_vec2_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "abs_vec2_vert_xvary.vert",
"vertexShader": "abs_vec2_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "abs_vec2_vert_xvary.test.html",
},
"name": "abs_vec2_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "abs_vec3_vert_xvary_ref.vert",
"vertexShader": "abs_vec3_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "abs_vec3_vert_xvary.vert",
"vertexShader": "abs_vec3_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "abs_vec3_vert_xvary.test.html",
},
"name": "abs_vec3_vert_xvary.test.html",
"pattern": "compare"
}
]

View File

@ -46,80 +46,80 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "acos_float_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "acos_float_frag_xvary.frag"
},
"name": "acos_float_frag_xvary.test.html",
},
"name": "acos_float_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "acos_vec2_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "acos_vec2_frag_xvary.frag"
},
"name": "acos_vec2_frag_xvary.test.html",
},
"name": "acos_vec2_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "acos_vec3_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "acos_vec3_frag_xvary.frag"
},
"name": "acos_vec3_frag_xvary.test.html",
},
"name": "acos_vec3_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "acos_float_vert_xvary_ref.vert",
"vertexShader": "acos_float_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "acos_float_vert_xvary.vert",
"vertexShader": "acos_float_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "acos_float_vert_xvary.test.html",
},
"name": "acos_float_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "acos_vec2_vert_xvary_ref.vert",
"vertexShader": "acos_vec2_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "acos_vec2_vert_xvary.vert",
"vertexShader": "acos_vec2_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "acos_vec2_vert_xvary.test.html",
},
"name": "acos_vec2_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "acos_vec3_vert_xvary_ref.vert",
"vertexShader": "acos_vec3_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "acos_vec3_vert_xvary.vert",
"vertexShader": "acos_vec3_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "acos_vec3_vert_xvary.test.html",
},
"name": "acos_vec3_vert_xvary.test.html",
"pattern": "compare"
}
]

View File

@ -46,54 +46,54 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "all_bvec2_frag_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "all_bvec2_frag.frag"
},
"name": "all_bvec2_frag.test.html",
},
"name": "all_bvec2_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "all_bvec2_vert_ref.vert",
"vertexShader": "all_bvec2_vert_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "all_bvec2_vert.vert",
"vertexShader": "all_bvec2_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "all_bvec2_vert.test.html",
},
"name": "all_bvec2_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "all_bvec3_frag_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "all_bvec3_frag.frag"
},
"name": "all_bvec3_frag.test.html",
},
"name": "all_bvec3_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "all_bvec3_vert_ref.vert",
"vertexShader": "all_bvec3_vert_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "all_bvec3_vert.vert",
"vertexShader": "all_bvec3_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "all_bvec3_vert.test.html",
},
"name": "all_bvec3_vert.test.html",
"pattern": "compare"
}
]

View File

@ -46,54 +46,54 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "any_bvec2_frag_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "any_bvec2_frag.frag"
},
"name": "any_bvec2_frag.test.html",
},
"name": "any_bvec2_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "any_bvec2_vert_ref.vert",
"vertexShader": "any_bvec2_vert_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "any_bvec2_vert.vert",
"vertexShader": "any_bvec2_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "any_bvec2_vert.test.html",
},
"name": "any_bvec2_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "any_bvec3_frag_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "any_bvec3_frag.frag"
},
"name": "any_bvec3_frag.test.html",
},
"name": "any_bvec3_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "any_bvec3_vert_ref.vert",
"vertexShader": "any_bvec3_vert_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "any_bvec3_vert.vert",
"vertexShader": "any_bvec3_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "any_bvec3_vert.test.html",
},
"name": "any_bvec3_vert.test.html",
"pattern": "compare"
}
]

View File

@ -46,172 +46,172 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"new_mad2": {
"count": 2,
"type": "uniform1fv",
"count": 2,
"type": "uniform1fv",
"value": [
45.0,
45.0,
14.0
]
}
},
},
"fragmentShader": "empty_uniform_array_float_frag.frag"
},
"name": "empty_uniform_array_float_frag.test.html",
},
"name": "empty_uniform_array_float_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "empty_uniform_array_float_vert.vert",
"vertexShader": "empty_uniform_array_float_vert.vert",
"uniforms": {
"new_mad2": {
"count": 2,
"type": "uniform1fv",
"count": 2,
"type": "uniform1fv",
"value": [
45.0,
45.0,
14.0
]
}
},
},
"fragmentShader": "../default/default.frag"
},
"name": "empty_uniform_array_float_vert.test.html",
},
"name": "empty_uniform_array_float_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "empty_empty_array_float_frag.frag"
},
"name": "empty_empty_array_float_frag.test.html",
},
"name": "empty_empty_array_float_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "empty_empty_array_float_vert.vert",
"vertexShader": "empty_empty_array_float_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "empty_empty_array_float_vert.test.html",
},
"name": "empty_empty_array_float_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "initfunc_empty_array_float_frag.frag"
},
"name": "initfunc_empty_array_float_frag.test.html",
},
"name": "initfunc_empty_array_float_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "initfunc_empty_array_float_vert.vert",
"vertexShader": "initfunc_empty_array_float_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "initfunc_empty_array_float_vert.test.html",
},
"name": "initfunc_empty_array_float_vert.test.html",
"pattern": "compare"
}
]

View File

@ -46,80 +46,80 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "asin_float_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "asin_float_frag_xvary.frag"
},
"name": "asin_float_frag_xvary.test.html",
},
"name": "asin_float_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "asin_vec2_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "asin_vec2_frag_xvary.frag"
},
"name": "asin_vec2_frag_xvary.test.html",
},
"name": "asin_vec2_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "asin_vec3_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "asin_vec3_frag_xvary.frag"
},
"name": "asin_vec3_frag_xvary.test.html",
},
"name": "asin_vec3_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "asin_float_vert_xvary_ref.vert",
"vertexShader": "asin_float_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "asin_float_vert_xvary.vert",
"vertexShader": "asin_float_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "asin_float_vert_xvary.test.html",
},
"name": "asin_float_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "asin_vec2_vert_xvary_ref.vert",
"vertexShader": "asin_vec2_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "asin_vec2_vert_xvary.vert",
"vertexShader": "asin_vec2_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "asin_vec2_vert_xvary.test.html",
},
"name": "asin_vec2_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "asin_vec3_vert_xvary_ref.vert",
"vertexShader": "asin_vec3_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "asin_vec3_vert_xvary.vert",
"vertexShader": "asin_vec3_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "asin_vec3_vert_xvary.test.html",
},
"name": "asin_vec3_vert_xvary.test.html",
"pattern": "compare"
}
]

View File

@ -46,106 +46,106 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_float_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_float_frag_xvary.frag"
},
"name": "atan_float_frag_xvary.test.html",
},
"name": "atan_float_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_vec2_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_vec2_frag_xvary.frag"
},
"name": "atan_vec2_frag_xvary.test.html",
},
"name": "atan_vec2_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_vec3_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_vec3_frag_xvary.frag"
},
"name": "atan_vec3_frag_xvary.test.html",
},
"name": "atan_vec3_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_float_frag_xvaryyvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_float_frag_xvaryyvary.frag"
},
"name": "atan_float_frag_xvaryyvary.test.html",
},
"name": "atan_float_frag_xvaryyvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_vec2_frag_xvaryyvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_vec2_frag_xvaryyvary.frag"
},
"name": "atan_vec2_frag_xvaryyvary.test.html",
},
"name": "atan_vec2_frag_xvaryyvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_vec3_frag_xvaryyvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "atan_vec3_frag_xvaryyvary.frag"
},
"name": "atan_vec3_frag_xvaryyvary.test.html",
},
"name": "atan_vec3_frag_xvaryyvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "atan_float_vert_xvary_ref.vert",
"vertexShader": "atan_float_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "atan_float_vert_xvary.vert",
"vertexShader": "atan_float_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "atan_float_vert_xvary.test.html",
},
"name": "atan_float_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "atan_vec2_vert_xvary_ref.vert",
"vertexShader": "atan_vec2_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "atan_vec2_vert_xvary.vert",
"vertexShader": "atan_vec2_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "atan_vec2_vert_xvary.test.html",
},
"name": "atan_vec2_vert_xvary.test.html",
"pattern": "compare"
}
]

View File

@ -46,54 +46,54 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "atan_vec3_vert_xvary_ref.vert",
"vertexShader": "atan_vec3_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "atan_vec3_vert_xvary.vert",
"vertexShader": "atan_vec3_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "atan_vec3_vert_xvary.test.html",
},
"name": "atan_vec3_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "atan_float_vert_xvaryyvary_ref.vert",
"vertexShader": "atan_float_vert_xvaryyvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "atan_float_vert_xvaryyvary.vert",
"vertexShader": "atan_float_vert_xvaryyvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "atan_float_vert_xvaryyvary.test.html",
},
"name": "atan_float_vert_xvaryyvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "atan_vec2_vert_xvaryyvary_ref.vert",
"vertexShader": "atan_vec2_vert_xvaryyvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "atan_vec2_vert_xvaryyvary.vert",
"vertexShader": "atan_vec2_vert_xvaryyvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "atan_vec2_vert_xvaryyvary.test.html",
},
"name": "atan_vec2_vert_xvaryyvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "atan_vec3_vert_xvaryyvary_ref.vert",
"vertexShader": "atan_vec3_vert_xvaryyvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "atan_vec3_vert_xvaryyvary.vert",
"vertexShader": "atan_vec3_vert_xvaryyvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "atan_vec3_vert_xvaryyvary.test.html",
},
"name": "atan_vec3_vert_xvaryyvary.test.html",
"pattern": "compare"
}
]

View File

@ -46,202 +46,202 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "gl_MaxCombinedTextureImageUnits_frag.frag"
},
"name": "gl_MaxCombinedTextureImageUnits_frag.test.html",
},
"name": "gl_MaxCombinedTextureImageUnits_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "gl_MaxCombinedTextureImageUnits_vert.vert",
"vertexShader": "gl_MaxCombinedTextureImageUnits_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "gl_MaxCombinedTextureImageUnits_vert.test.html",
},
"name": "gl_MaxCombinedTextureImageUnits_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "gl_MaxDrawBuffers_frag.frag"
},
"name": "gl_MaxDrawBuffers_frag.test.html",
},
"name": "gl_MaxDrawBuffers_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "gl_MaxDrawBuffers_vert.vert",
"vertexShader": "gl_MaxDrawBuffers_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "gl_MaxDrawBuffers_vert.test.html",
},
"name": "gl_MaxDrawBuffers_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "gl_MaxFragmentUniformVectors_frag.frag"
},
"name": "gl_MaxFragmentUniformVectors_frag.test.html",
},
"name": "gl_MaxFragmentUniformVectors_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "gl_MaxFragmentUniformVectors_vert.vert",
"vertexShader": "gl_MaxFragmentUniformVectors_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "gl_MaxFragmentUniformVectors_vert.test.html",
},
"name": "gl_MaxFragmentUniformVectors_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "gl_MaxTextureImageUnits_frag.frag"
},
"name": "gl_MaxTextureImageUnits_frag.test.html",
},
"name": "gl_MaxTextureImageUnits_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "gl_MaxTextureImageUnits_vert.vert",
"vertexShader": "gl_MaxTextureImageUnits_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "gl_MaxTextureImageUnits_vert.test.html",
},
"name": "gl_MaxTextureImageUnits_vert.test.html",
"pattern": "compare"
}
]

View File

@ -46,202 +46,202 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "gl_MaxVaryingVectors_frag.frag"
},
"name": "gl_MaxVaryingVectors_frag.test.html",
},
"name": "gl_MaxVaryingVectors_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "gl_MaxVaryingVectors_vert.vert",
"vertexShader": "gl_MaxVaryingVectors_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "gl_MaxVaryingVectors_vert.test.html",
},
"name": "gl_MaxVaryingVectors_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "gl_MaxVertexAttribs_frag.frag"
},
"name": "gl_MaxVertexAttribs_frag.test.html",
},
"name": "gl_MaxVertexAttribs_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "gl_MaxVertexAttribs_vert.vert",
"vertexShader": "gl_MaxVertexAttribs_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "gl_MaxVertexAttribs_vert.test.html",
},
"name": "gl_MaxVertexAttribs_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "gl_MaxVertexTextureImageUnits_frag.frag"
},
"name": "gl_MaxVertexTextureImageUnits_frag.test.html",
},
"name": "gl_MaxVertexTextureImageUnits_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "gl_MaxVertexTextureImageUnits_vert.vert",
"vertexShader": "gl_MaxVertexTextureImageUnits_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "gl_MaxVertexTextureImageUnits_vert.test.html",
},
"name": "gl_MaxVertexTextureImageUnits_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "gl_MaxVertexUniformVectors_frag.frag"
},
"name": "gl_MaxVertexUniformVectors_frag.test.html",
},
"name": "gl_MaxVertexUniformVectors_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "gl_MaxVertexUniformVectors_vert.vert",
"vertexShader": "gl_MaxVertexUniformVectors_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "gl_MaxVertexUniformVectors_vert.test.html",
},
"name": "gl_MaxVertexUniformVectors_vert.test.html",
"pattern": "compare"
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectBuiltInOveride_frag.frag"
},
"name": "CorrectBuiltInOveride_frag.test.html",
"linkstat": true,
},
"name": "CorrectBuiltInOveride_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectComma_frag.frag"
},
"name": "CorrectComma_frag.test.html",
"linkstat": true,
},
"name": "CorrectComma_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "CorrectConstFolding1_vert.vert",
"vertexShader": "CorrectConstFolding1_vert.vert",
"fragmentShader": "default.frag"
},
"name": "CorrectConstFolding1_vert.test.html",
"linkstat": true,
},
"name": "CorrectConstFolding1_vert.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "CorrectConstFolding2_vert.vert",
"vertexShader": "CorrectConstFolding2_vert.vert",
"fragmentShader": "default.frag"
},
"name": "CorrectConstFolding2_vert.test.html",
"linkstat": true,
},
"name": "CorrectConstFolding2_vert.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "CorrectConstruct_vert.vert",
"vertexShader": "CorrectConstruct_vert.vert",
"fragmentShader": "default.frag"
},
"name": "CorrectConstruct_vert.test.html",
"linkstat": true,
},
"name": "CorrectConstruct_vert.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectExtension10_V100_frag.frag"
},
"name": "CorrectExtension10_V100_frag.test.html",
"linkstat": true,
},
"name": "CorrectExtension10_V100_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectExtension1_V100_frag.frag"
},
"name": "CorrectExtension1_V100_frag.test.html",
"linkstat": true,
},
"name": "CorrectExtension1_V100_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectExtension4_V100_frag.frag"
},
"name": "CorrectExtension4_V100_frag.test.html",
"linkstat": true,
},
"name": "CorrectExtension4_V100_frag.test.html",
"linkstat": true,
"compstat": true
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "CorrectFull_vert.vert",
"vertexShader": "CorrectFull_vert.vert",
"fragmentShader": "default.frag"
},
"name": "CorrectFull_vert.test.html",
"linkstat": true,
},
"name": "CorrectFull_vert.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectFuncOverload_frag.frag"
},
"name": "CorrectFuncOverload_frag.test.html",
"linkstat": true,
},
"name": "CorrectFuncOverload_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "CorrectFuncOverload_vert.vert",
"vertexShader": "CorrectFuncOverload_vert.vert",
"fragmentShader": "default.frag"
},
"name": "CorrectFuncOverload_vert.test.html",
"linkstat": true,
},
"name": "CorrectFuncOverload_vert.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "CorrectFunction1_vert.vert",
"vertexShader": "CorrectFunction1_vert.vert",
"fragmentShader": "default.frag"
},
"name": "CorrectFunction1_vert.test.html",
"linkstat": true,
},
"name": "CorrectFunction1_vert.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectModule_frag.frag"
},
"name": "CorrectModule_frag.test.html",
"linkstat": true,
},
"name": "CorrectModule_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectParse1_frag.frag"
},
"name": "CorrectParse1_frag.test.html",
"linkstat": true,
},
"name": "CorrectParse1_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectParse2_frag.frag"
},
"name": "CorrectParse2_frag.test.html",
"linkstat": true,
},
"name": "CorrectParse2_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "CorrectParse2_vert.vert",
"vertexShader": "CorrectParse2_vert.vert",
"fragmentShader": "default.frag"
},
"name": "CorrectParse2_vert.test.html",
"linkstat": true,
},
"name": "CorrectParse2_vert.test.html",
"linkstat": true,
"compstat": true
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectParseTest1_frag.frag"
},
"name": "CorrectParseTest1_frag.test.html",
"linkstat": true,
},
"name": "CorrectParseTest1_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectParseTest_frag.frag"
},
"name": "CorrectParseTest_frag.test.html",
"linkstat": true,
},
"name": "CorrectParseTest_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectPreprocess5_frag.frag"
},
"name": "CorrectPreprocess5_frag.test.html",
"linkstat": true,
},
"name": "CorrectPreprocess5_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectPreprocess8_frag.frag"
},
"name": "CorrectPreprocess8_frag.test.html",
"linkstat": true,
},
"name": "CorrectPreprocess8_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectPreprocess9_frag.frag"
},
"name": "CorrectPreprocess9_frag.test.html",
"linkstat": true,
},
"name": "CorrectPreprocess9_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectSwizzle1_frag.frag"
},
"name": "CorrectSwizzle1_frag.test.html",
"linkstat": true,
},
"name": "CorrectSwizzle1_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "CorrectSwizzle1_vert.vert",
"vertexShader": "CorrectSwizzle1_vert.vert",
"fragmentShader": "default.frag"
},
"name": "CorrectSwizzle1_vert.test.html",
"linkstat": true,
},
"name": "CorrectSwizzle1_vert.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectSwizzle2_frag.frag"
},
"name": "CorrectSwizzle2_frag.test.html",
"linkstat": true,
},
"name": "CorrectSwizzle2_frag.test.html",
"linkstat": true,
"compstat": true
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "CorrectSwizzle2_vert.vert",
"vertexShader": "CorrectSwizzle2_vert.vert",
"fragmentShader": "default.frag"
},
"name": "CorrectSwizzle2_vert.test.html",
"linkstat": true,
},
"name": "CorrectSwizzle2_vert.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectSwizzle3_frag.frag"
},
"name": "CorrectSwizzle3_frag.test.html",
"linkstat": true,
},
"name": "CorrectSwizzle3_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "DuplicateVersion1_V100_frag.frag"
},
"name": "DuplicateVersion1_V100_frag.test.html",
"linkstat": false,
},
"name": "DuplicateVersion1_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "CorrectVersion_V100_frag.frag"
},
"name": "CorrectVersion_V100_frag.test.html",
"linkstat": true,
},
"name": "CorrectVersion_V100_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "FunctionParam_vert.vert",
"vertexShader": "FunctionParam_vert.vert",
"fragmentShader": "default.frag"
},
"name": "FunctionParam_vert.test.html",
"linkstat": false,
},
"name": "FunctionParam_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "ParseTest3_frag.frag"
},
"name": "ParseTest3_frag.test.html",
"linkstat": false,
},
"name": "ParseTest3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "ParseTest4_frag.frag"
},
"name": "ParseTest4_frag.test.html",
"linkstat": false,
},
"name": "ParseTest4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array10_frag.frag"
},
"name": "array10_frag.test.html",
"linkstat": false,
},
"name": "array10_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array11_frag.frag"
},
"name": "array11_frag.test.html",
"linkstat": false,
},
"name": "array11_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array1_frag.frag"
},
"name": "array1_frag.test.html",
"linkstat": false,
},
"name": "array1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array2_frag.frag"
},
"name": "array2_frag.test.html",
"linkstat": false,
},
"name": "array2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array3_frag.frag"
},
"name": "array3_frag.test.html",
"linkstat": false,
},
"name": "array3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array4_frag.frag"
},
"name": "array4_frag.test.html",
"linkstat": false,
},
"name": "array4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array5_frag.frag"
},
"name": "array5_frag.test.html",
"linkstat": false,
},
"name": "array5_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array6_frag.frag"
},
"name": "array6_frag.test.html",
"linkstat": false,
},
"name": "array6_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array7_frag.frag"
},
"name": "array7_frag.test.html",
"linkstat": false,
},
"name": "array7_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array8_frag.frag"
},
"name": "array8_frag.test.html",
"linkstat": false,
},
"name": "array8_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "array9_frag.frag"
},
"name": "array9_frag.test.html",
"linkstat": false,
},
"name": "array9_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "attribute1_vert.vert",
"vertexShader": "attribute1_vert.vert",
"fragmentShader": "default.frag"
},
"name": "attribute1_vert.test.html",
"linkstat": false,
},
"name": "attribute1_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "attribute2_vert.vert",
"vertexShader": "attribute2_vert.vert",
"fragmentShader": "default.frag"
},
"name": "attribute2_vert.test.html",
"linkstat": false,
},
"name": "attribute2_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "attribute_frag.frag"
},
"name": "attribute_frag.test.html",
"linkstat": false,
},
"name": "attribute_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "attribute_vert.vert",
"vertexShader": "attribute_vert.vert",
"fragmentShader": "default.frag"
},
"name": "attribute_vert.test.html",
"linkstat": false,
},
"name": "attribute_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "break_frag.frag"
},
"name": "break_frag.test.html",
"linkstat": false,
},
"name": "break_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "comma1_vert.vert",
"vertexShader": "comma1_vert.vert",
"fragmentShader": "default.frag"
},
"name": "comma1_vert.test.html",
"linkstat": false,
},
"name": "comma1_vert.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "comma2_frag.frag"
},
"name": "comma2_frag.test.html",
"linkstat": false,
},
"name": "comma2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "comma2_vert.vert",
"vertexShader": "comma2_vert.vert",
"fragmentShader": "default.frag"
},
"name": "comma2_vert.test.html",
"linkstat": false,
},
"name": "comma2_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "comma3_vert.vert",
"vertexShader": "comma3_vert.vert",
"fragmentShader": "default.frag"
},
"name": "comma3_vert.test.html",
"linkstat": false,
},
"name": "comma3_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "comment_frag.frag"
},
"name": "comment_frag.test.html",
"linkstat": false,
},
"name": "comment_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "conditional1_frag.frag"
},
"name": "conditional1_frag.test.html",
"linkstat": false,
},
"name": "conditional1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "conditional2_frag.frag"
},
"name": "conditional2_frag.test.html",
"linkstat": false,
},
"name": "conditional2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "conditional3_frag.frag"
},
"name": "conditional3_frag.test.html",
"linkstat": false,
},
"name": "conditional3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "constFunc_frag.frag"
},
"name": "constFunc_frag.test.html",
"linkstat": false,
},
"name": "constFunc_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "constructor1_frag.frag"
},
"name": "constructor1_frag.test.html",
"linkstat": false,
},
"name": "constructor1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "constructor2_frag.frag"
},
"name": "constructor2_frag.test.html",
"linkstat": false,
},
"name": "constructor2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "constructor3_V100_frag.frag"
},
"name": "constructor3_V100_frag.test.html",
"linkstat": false,
},
"name": "constructor3_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "continue_frag.frag"
},
"name": "continue_frag.test.html",
"linkstat": false,
},
"name": "continue_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType10_frag.frag"
},
"name": "dataType10_frag.test.html",
"linkstat": false,
},
"name": "dataType10_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType11_frag.frag"
},
"name": "dataType11_frag.test.html",
"linkstat": false,
},
"name": "dataType11_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType12_frag.frag"
},
"name": "dataType12_frag.test.html",
"linkstat": false,
},
"name": "dataType12_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType13_frag.frag"
},
"name": "dataType13_frag.test.html",
"linkstat": false,
},
"name": "dataType13_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType19_frag.frag"
},
"name": "dataType19_frag.test.html",
"linkstat": false,
},
"name": "dataType19_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType1_frag.frag"
},
"name": "dataType1_frag.test.html",
"linkstat": false,
},
"name": "dataType1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType2_frag.frag"
},
"name": "dataType2_frag.test.html",
"linkstat": false,
},
"name": "dataType2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType3_frag.frag"
},
"name": "dataType3_frag.test.html",
"linkstat": false,
},
"name": "dataType3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType4_frag.frag"
},
"name": "dataType4_frag.test.html",
"linkstat": false,
},
"name": "dataType4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType5_frag.frag"
},
"name": "dataType5_frag.test.html",
"linkstat": false,
},
"name": "dataType5_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType6_frag.frag"
},
"name": "dataType6_frag.test.html",
"linkstat": false,
},
"name": "dataType6_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType7_frag.frag"
},
"name": "dataType7_frag.test.html",
"linkstat": false,
},
"name": "dataType7_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType8_frag.frag"
},
"name": "dataType8_frag.test.html",
"linkstat": false,
},
"name": "dataType8_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dataType9_frag.frag"
},
"name": "dataType9_frag.test.html",
"linkstat": false,
},
"name": "dataType9_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dowhile_frag.frag"
},
"name": "dowhile_frag.test.html",
"linkstat": false,
},
"name": "dowhile_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dvec2_frag.frag"
},
"name": "dvec2_frag.test.html",
"linkstat": false,
},
"name": "dvec2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dvec3_frag.frag"
},
"name": "dvec3_frag.test.html",
"linkstat": false,
},
"name": "dvec3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "dvec4_frag.frag"
},
"name": "dvec4_frag.test.html",
"linkstat": false,
},
"name": "dvec4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "extension2_V100_frag.frag"
},
"name": "extension2_V100_frag.test.html",
"linkstat": false,
},
"name": "extension2_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "extension3_V100_frag.frag"
},
"name": "extension3_V100_frag.test.html",
"linkstat": false,
},
"name": "extension3_V100_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "extension5_V100_frag.frag"
},
"name": "extension5_V100_frag.test.html",
"linkstat": false,
},
"name": "extension5_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "extension6_V100_frag.frag"
},
"name": "extension6_V100_frag.test.html",
"linkstat": false,
},
"name": "extension6_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "extension7_V100_frag.frag"
},
"name": "extension7_V100_frag.test.html",
"linkstat": false,
},
"name": "extension7_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "extension8_V100_frag.frag"
},
"name": "extension8_V100_frag.test.html",
"linkstat": false,
},
"name": "extension8_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "extension9_V100_frag.frag"
},
"name": "extension9_V100_frag.test.html",
"linkstat": false,
},
"name": "extension9_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "float2_frag.frag"
},
"name": "float2_frag.test.html",
"linkstat": false,
},
"name": "float2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "float3_frag.frag"
},
"name": "float3_frag.test.html",
"linkstat": false,
},
"name": "float3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "float4_frag.frag"
},
"name": "float4_frag.test.html",
"linkstat": false,
},
"name": "float4_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "fragmentOnly1_vert.vert",
"vertexShader": "fragmentOnly1_vert.vert",
"fragmentShader": "default.frag"
},
"name": "fragmentOnly1_vert.test.html",
"linkstat": false,
},
"name": "fragmentOnly1_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "fragmentOnly2_vert.vert",
"vertexShader": "fragmentOnly2_vert.vert",
"fragmentShader": "default.frag"
},
"name": "fragmentOnly2_vert.test.html",
"linkstat": false,
},
"name": "fragmentOnly2_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "fragmentOnly3_vert.vert",
"vertexShader": "fragmentOnly3_vert.vert",
"fragmentShader": "default.frag"
},
"name": "fragmentOnly3_vert.test.html",
"linkstat": false,
},
"name": "fragmentOnly3_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "fragmentOnly4_vert.vert",
"vertexShader": "fragmentOnly4_vert.vert",
"fragmentShader": "default.frag"
},
"name": "fragmentOnly4_vert.test.html",
"linkstat": false,
},
"name": "fragmentOnly4_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "fragmentOnly_vert.vert",
"vertexShader": "fragmentOnly_vert.vert",
"fragmentShader": "default.frag"
},
"name": "fragmentOnly_vert.test.html",
"linkstat": false,
},
"name": "fragmentOnly_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "function10_frag.frag"
},
"name": "function10_frag.test.html",
"linkstat": false,
},
"name": "function10_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "function1_frag.frag"
},
"name": "function1_frag.test.html",
"linkstat": false,
},
"name": "function1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "function2_V100_frag.frag"
},
"name": "function2_V100_frag.test.html",
"linkstat": false,
},
"name": "function2_V100_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "function3_frag.frag"
},
"name": "function3_frag.test.html",
"linkstat": false,
},
"name": "function3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "function4_frag.frag"
},
"name": "function4_frag.test.html",
"linkstat": false,
},
"name": "function4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "function6_frag.frag"
},
"name": "function6_frag.test.html",
"linkstat": false,
},
"name": "function6_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "function7_frag.frag"
},
"name": "function7_frag.test.html",
"linkstat": false,
},
"name": "function7_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "function8_frag.frag"
},
"name": "function8_frag.test.html",
"linkstat": false,
},
"name": "function8_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "function9_frag.frag"
},
"name": "function9_frag.test.html",
"linkstat": false,
},
"name": "function9_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "hvec2_frag.frag"
},
"name": "hvec2_frag.test.html",
"linkstat": false,
},
"name": "hvec2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "hvec3_frag.frag"
},
"name": "hvec3_frag.test.html",
"linkstat": false,
},
"name": "hvec3_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "hvec4_frag.frag"
},
"name": "hvec4_frag.test.html",
"linkstat": false,
},
"name": "hvec4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "identifier1_frag.frag"
},
"name": "identifier1_frag.test.html",
"linkstat": false,
},
"name": "identifier1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "identifier2_frag.frag"
},
"name": "identifier2_frag.test.html",
"linkstat": false,
},
"name": "identifier2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "identifier3_frag.frag"
},
"name": "identifier3_frag.test.html",
"linkstat": false,
},
"name": "identifier3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "if1_frag.frag"
},
"name": "if1_frag.test.html",
"linkstat": false,
},
"name": "if1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "if2_frag.frag"
},
"name": "if2_frag.test.html",
"linkstat": false,
},
"name": "if2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "increment1_frag.frag"
},
"name": "increment1_frag.test.html",
"linkstat": false,
},
"name": "increment1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "increment2_frag.frag"
},
"name": "increment2_frag.test.html",
"linkstat": false,
},
"name": "increment2_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "increment3_frag.frag"
},
"name": "increment3_frag.test.html",
"linkstat": false,
},
"name": "increment3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "increment4_frag.frag"
},
"name": "increment4_frag.test.html",
"linkstat": false,
},
"name": "increment4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "increment6_frag.frag"
},
"name": "increment6_frag.test.html",
"linkstat": false,
},
"name": "increment6_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "main1_vert.vert",
"vertexShader": "main1_vert.vert",
"fragmentShader": "default.frag"
},
"name": "main1_vert.test.html",
"linkstat": false,
},
"name": "main1_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "main2_vert.vert",
"vertexShader": "main2_vert.vert",
"fragmentShader": "default.frag"
},
"name": "main2_vert.test.html",
"linkstat": false,
},
"name": "main2_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "main3_vert.vert",
"vertexShader": "main3_vert.vert",
"fragmentShader": "default.frag"
},
"name": "main3_vert.test.html",
"linkstat": false,
},
"name": "main3_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "matrix_V100_frag.frag"
},
"name": "matrix_V100_frag.test.html",
"linkstat": true,
},
"name": "matrix_V100_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "normal_vert.vert",
"vertexShader": "normal_vert.vert",
"fragmentShader": "default.frag"
},
"name": "normal_vert.test.html",
"linkstat": false,
},
"name": "normal_vert.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "parser10_frag.frag"
},
"name": "parser10_frag.test.html",
"linkstat": false,
},
"name": "parser10_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "parser1_vert.vert",
"vertexShader": "parser1_vert.vert",
"fragmentShader": "default.frag"
},
"name": "parser1_vert.test.html",
"linkstat": false,
},
"name": "parser1_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "parser3_frag.frag"
},
"name": "parser3_frag.test.html",
"linkstat": false,
},
"name": "parser3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "parser4_frag.frag"
},
"name": "parser4_frag.test.html",
"linkstat": false,
},
"name": "parser4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "parser5_frag.frag"
},
"name": "parser5_frag.test.html",
"linkstat": false,
},
"name": "parser5_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "parser6_frag.frag"
},
"name": "parser6_frag.test.html",
"linkstat": false,
},
"name": "parser6_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "parser7_frag.frag"
},
"name": "parser7_frag.test.html",
"linkstat": false,
},
"name": "parser7_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "parser8_frag.frag"
},
"name": "parser8_frag.test.html",
"linkstat": false,
},
"name": "parser8_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "parser9_frag.frag"
},
"name": "parser9_frag.test.html",
"linkstat": false,
},
"name": "parser9_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "preprocess0_frag.frag"
},
"name": "preprocess0_frag.test.html",
"linkstat": false,
},
"name": "preprocess0_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "preprocess10_frag.frag"
},
"name": "preprocess10_frag.test.html",
"linkstat": false,
},
"name": "preprocess10_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "preprocess1_frag.frag"
},
"name": "preprocess1_frag.test.html",
"linkstat": false,
},
"name": "preprocess1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "preprocess2_frag.frag"
},
"name": "preprocess2_frag.test.html",
"linkstat": false,
},
"name": "preprocess2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "preprocess3_frag.frag"
},
"name": "preprocess3_frag.test.html",
"linkstat": false,
},
"name": "preprocess3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "preprocess4_frag.frag"
},
"name": "preprocess4_frag.test.html",
"linkstat": false,
},
"name": "preprocess4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "preprocess6_frag.frag"
},
"name": "preprocess6_frag.test.html",
"linkstat": false,
},
"name": "preprocess6_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "preprocess7_frag.frag"
},
"name": "preprocess7_frag.test.html",
"linkstat": false,
},
"name": "preprocess7_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "scoping1_frag.frag"
},
"name": "scoping1_frag.test.html",
"linkstat": false,
},
"name": "scoping1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "scoping2_frag.frag"
},
"name": "scoping2_frag.test.html",
"linkstat": false,
},
"name": "scoping2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct10_frag.frag"
},
"name": "struct10_frag.test.html",
"linkstat": false,
},
"name": "struct10_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct11_frag.frag"
},
"name": "struct11_frag.test.html",
"linkstat": false,
},
"name": "struct11_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct1_frag.frag"
},
"name": "struct1_frag.test.html",
"linkstat": false,
},
"name": "struct1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct2_frag.frag"
},
"name": "struct2_frag.test.html",
"linkstat": false,
},
"name": "struct2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct3_frag.frag"
},
"name": "struct3_frag.test.html",
"linkstat": false,
},
"name": "struct3_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct4_frag.frag"
},
"name": "struct4_frag.test.html",
"linkstat": false,
},
"name": "struct4_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct5_frag.frag"
},
"name": "struct5_frag.test.html",
"linkstat": false,
},
"name": "struct5_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct6_frag.frag"
},
"name": "struct6_frag.test.html",
"linkstat": false,
},
"name": "struct6_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct7_frag.frag"
},
"name": "struct7_frag.test.html",
"linkstat": false,
},
"name": "struct7_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct8_frag.frag"
},
"name": "struct8_frag.test.html",
"linkstat": false,
},
"name": "struct8_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "struct9_frag.frag"
},
"name": "struct9_frag.test.html",
"linkstat": false,
},
"name": "struct9_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "swizzle1_frag.frag"
},
"name": "swizzle1_frag.test.html",
"linkstat": false,
},
"name": "swizzle1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "swizzle2_frag.frag"
},
"name": "swizzle2_frag.test.html",
"linkstat": false,
},
"name": "swizzle2_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "swizzle3_frag.frag"
},
"name": "swizzle3_frag.test.html",
"linkstat": false,
},
"name": "swizzle3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "typecast_frag.frag"
},
"name": "typecast_frag.test.html",
"linkstat": false,
},
"name": "typecast_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "uniform1_frag.frag"
},
"name": "uniform1_frag.test.html",
"linkstat": false,
},
"name": "uniform1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "uniform_frag.frag"
},
"name": "uniform_frag.test.html",
"linkstat": false,
},
"name": "uniform_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "varying1_frag.frag"
},
"name": "varying1_frag.test.html",
"linkstat": false,
},
"name": "varying1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "varying2_frag.frag"
},
"name": "varying2_frag.test.html",
"linkstat": false,
},
"name": "varying2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "varying3_frag.frag"
},
"name": "varying3_frag.test.html",
"linkstat": false,
},
"name": "varying3_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "varying_frag.frag"
},
"name": "varying_frag.test.html",
"linkstat": false,
},
"name": "varying_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "vector_frag.frag"
},
"name": "vector_frag.test.html",
"linkstat": false,
},
"name": "vector_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "version2_V100_frag.frag"
},
"name": "version2_V100_frag.test.html",
"linkstat": false,
},
"name": "version2_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "version3_V100_frag.frag"
},
"name": "version3_V100_frag.test.html",
"linkstat": false,
},
"name": "version3_V100_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "vertexOnly2_frag.frag"
},
"name": "vertexOnly2_frag.test.html",
"linkstat": false,
},
"name": "vertexOnly2_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "vertexOnly_frag.frag"
},
"name": "vertexOnly_frag.test.html",
"linkstat": false,
},
"name": "vertexOnly_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "vertex_vert.vert",
"vertexShader": "vertex_vert.vert",
"fragmentShader": "default.frag"
},
"name": "vertex_vert.test.html",
"linkstat": false,
},
"name": "vertex_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "while1_frag.frag"
},
"name": "while1_frag.test.html",
"linkstat": false,
},
"name": "while1_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "while2_frag.frag"
},
"name": "while2_frag.test.html",
"linkstat": false,
},
"name": "while2_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,83 +45,83 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "while_frag.frag"
},
"name": "while_frag.test.html",
"linkstat": false,
},
"name": "while_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "TernaryOp_frag.frag"
},
"name": "TernaryOp_frag.test.html",
"linkstat": false,
},
"name": "TernaryOp_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "default.vert",
"vertexShader": "default.vert",
"fragmentShader": "CG_Data_Types_frag.frag"
},
"name": "CG_Data_Types_frag.test.html",
"linkstat": false,
},
"name": "CG_Data_Types_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "default.vert",
"vertexShader": "default.vert",
"fragmentShader": "CG_Standard_Library_frag.frag"
},
"name": "CG_Standard_Library_frag.test.html",
"linkstat": false,
},
"name": "CG_Standard_Library_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "default.vert",
"vertexShader": "default.vert",
"fragmentShader": "Include_Preprocessor_Directive_frag.frag"
},
"name": "Include_Preprocessor_Directive_frag.test.html",
"linkstat": false,
},
"name": "Include_Preprocessor_Directive_frag.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "default.vert",
"vertexShader": "default.vert",
"fragmentShader": "Low_Level_Assembly_Reserved_Words_frag.frag"
},
"name": "Low_Level_Assembly_Reserved_Words_frag.test.html",
"linkstat": true,
},
"name": "Low_Level_Assembly_Reserved_Words_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "Main_Parameters_vert.vert",
"vertexShader": "Main_Parameters_vert.vert",
"fragmentShader": "default.frag"
},
"name": "Main_Parameters_vert.test.html",
"linkstat": false,
},
"name": "Main_Parameters_vert.test.html",
"linkstat": false,
"compstat": false
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "default.vert",
"vertexShader": "default.vert",
"fragmentShader": "Permissive_Constant_Conversions_frag.frag"
},
"name": "Permissive_Constant_Conversions_frag.test.html",
"linkstat": false,
},
"name": "Permissive_Constant_Conversions_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,23 +45,23 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "default.vert",
"vertexShader": "default.vert",
"fragmentShader": "Permissive_Scalar_Vector_Expressions_frag.frag"
},
"name": "Permissive_Scalar_Vector_Expressions_frag.test.html",
"linkstat": true,
},
"name": "Permissive_Scalar_Vector_Expressions_frag.test.html",
"linkstat": true,
"compstat": true
},
},
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "default.vert",
"vertexShader": "default.vert",
"fragmentShader": "Texture_Rectangle_Samplers_frag.frag"
},
"name": "Texture_Rectangle_Samplers_frag.test.html",
"linkstat": false,
},
"name": "Texture_Rectangle_Samplers_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -45,13 +45,13 @@
OpenGLESTestRunner.run({
"tests": [
{
"pattern": "build",
"pattern": "build",
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "gl_Color_array_index_out_of_bounds_frag.frag"
},
"name": "gl_Color_array_index_out_of_bounds_frag.test.html",
"linkstat": false,
},
"name": "gl_Color_array_index_out_of_bounds_frag.test.html",
"linkstat": false,
"compstat": false
}
]

View File

@ -46,80 +46,80 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "ceil_float_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "ceil_float_frag_xvary.frag"
},
"name": "ceil_float_frag_xvary.test.html",
},
"name": "ceil_float_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "ceil_vec2_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "ceil_vec2_frag_xvary.frag"
},
"name": "ceil_vec2_frag_xvary.test.html",
},
"name": "ceil_vec2_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "ceil_vec3_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "ceil_vec3_frag_xvary.frag"
},
"name": "ceil_vec3_frag_xvary.test.html",
},
"name": "ceil_vec3_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "ceil_float_vert_xvary_ref.vert",
"vertexShader": "ceil_float_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "ceil_float_vert_xvary.vert",
"vertexShader": "ceil_float_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "ceil_float_vert_xvary.test.html",
},
"name": "ceil_float_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "ceil_vec2_vert_xvary_ref.vert",
"vertexShader": "ceil_vec2_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "ceil_vec2_vert_xvary.vert",
"vertexShader": "ceil_vec2_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "ceil_vec2_vert_xvary.test.html",
},
"name": "ceil_vec2_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "ceil_vec3_vert_xvary_ref.vert",
"vertexShader": "ceil_vec3_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "ceil_vec3_vert_xvary.vert",
"vertexShader": "ceil_vec3_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "ceil_vec3_vert_xvary.test.html",
},
"name": "ceil_vec3_vert_xvary.test.html",
"pattern": "compare"
}
]

View File

@ -46,80 +46,80 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "clamp_float_frag_xvary_yconstquarter_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "clamp_float_frag_xvary_yconstquarter.frag"
},
"name": "clamp_float_frag_xvary_yconstquarter.test.html",
},
"name": "clamp_float_frag_xvary_yconstquarter.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "clamp_vec2_frag_xvary_yconstquarter_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "clamp_vec2_frag_xvary_yconstquarter.frag"
},
"name": "clamp_vec2_frag_xvary_yconstquarter.test.html",
},
"name": "clamp_vec2_frag_xvary_yconstquarter.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "clamp_vec3_frag_xvary_yconstquarter_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "clamp_vec3_frag_xvary_yconstquarter.frag"
},
"name": "clamp_vec3_frag_xvary_yconstquarter.test.html",
},
"name": "clamp_vec3_frag_xvary_yconstquarter.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "clamp_float_vert_xvary_yconstquarter_ref.vert",
"vertexShader": "clamp_float_vert_xvary_yconstquarter_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "clamp_float_vert_xvary_yconstquarter.vert",
"vertexShader": "clamp_float_vert_xvary_yconstquarter.vert",
"fragmentShader": "../default/default.frag"
},
"name": "clamp_float_vert_xvary_yconstquarter.test.html",
},
"name": "clamp_float_vert_xvary_yconstquarter.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "clamp_vec2_vert_xvary_yconstquarter_ref.vert",
"vertexShader": "clamp_vec2_vert_xvary_yconstquarter_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "clamp_vec2_vert_xvary_yconstquarter.vert",
"vertexShader": "clamp_vec2_vert_xvary_yconstquarter.vert",
"fragmentShader": "../default/default.frag"
},
"name": "clamp_vec2_vert_xvary_yconstquarter.test.html",
},
"name": "clamp_vec2_vert_xvary_yconstquarter.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "clamp_vec3_vert_xvary_yconstquarter_ref.vert",
"vertexShader": "clamp_vec3_vert_xvary_yconstquarter_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "clamp_vec3_vert_xvary_yconstquarter.vert",
"vertexShader": "clamp_vec3_vert_xvary_yconstquarter.vert",
"fragmentShader": "../default/default.frag"
},
"name": "clamp_vec3_vert_xvary_yconstquarter.test.html",
},
"name": "clamp_vec3_vert_xvary_yconstquarter.test.html",
"pattern": "compare"
}
]

View File

@ -46,202 +46,202 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "for_break_frag.frag"
},
"name": "for_break_frag.test.html",
},
"name": "for_break_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "for_break_vert.vert",
"vertexShader": "for_break_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "for_break_vert.test.html",
},
"name": "for_break_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "for_continue_frag.frag"
},
"name": "for_continue_frag.test.html",
},
"name": "for_continue_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "for_continue_vert.vert",
"vertexShader": "for_continue_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "for_continue_vert.test.html",
},
"name": "for_continue_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "for_nested_break_frag.frag"
},
"name": "for_nested_break_frag.test.html",
},
"name": "for_nested_break_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "for_nested_break_vert.vert",
"vertexShader": "for_nested_break_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "for_nested_break_vert.test.html",
},
"name": "for_nested_break_vert.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "for_nested_continue_frag.frag"
},
"name": "for_nested_continue_frag.test.html",
},
"name": "for_nested_continue_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "for_nested_continue_vert.vert",
"vertexShader": "for_nested_continue_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "for_nested_continue_vert.test.html",
},
"name": "for_nested_continue_vert.test.html",
"pattern": "compare"
}
]

View File

@ -46,52 +46,52 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "nested_if_else_frag.frag"
},
"name": "nested_if_else_frag.test.html",
},
"name": "nested_if_else_frag.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"uniforms": {
"result": {
"count": 1,
"type": "uniform4fv",
"count": 1,
"type": "uniform4fv",
"value": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
}
},
},
"fragmentShader": "../default/expected.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "nested_if_else_vert.vert",
"vertexShader": "nested_if_else_vert.vert",
"fragmentShader": "../default/default.frag"
},
"name": "nested_if_else_vert.test.html",
},
"name": "nested_if_else_vert.test.html",
"pattern": "compare"
}
]

View File

@ -46,80 +46,80 @@ OpenGLESTestRunner.run({
"tests": [
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "cos_float_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "cos_float_frag_xvary.frag"
},
"name": "cos_float_frag_xvary.test.html",
},
"name": "cos_float_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "cos_vec2_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "cos_vec2_frag_xvary.frag"
},
"name": "cos_vec2_frag_xvary.test.html",
},
"name": "cos_vec2_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "cos_vec3_frag_xvary_ref.frag"
},
"model": null,
},
"model": null,
"testProgram": {
"vertexShader": "../default/default.vert",
"vertexShader": "../default/default.vert",
"fragmentShader": "cos_vec3_frag_xvary.frag"
},
"name": "cos_vec3_frag_xvary.test.html",
},
"name": "cos_vec3_frag_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "cos_float_vert_xvary_ref.vert",
"vertexShader": "cos_float_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "cos_float_vert_xvary.vert",
"vertexShader": "cos_float_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "cos_float_vert_xvary.test.html",
},
"name": "cos_float_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "cos_vec2_vert_xvary_ref.vert",
"vertexShader": "cos_vec2_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "cos_vec2_vert_xvary.vert",
"vertexShader": "cos_vec2_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "cos_vec2_vert_xvary.test.html",
},
"name": "cos_vec2_vert_xvary.test.html",
"pattern": "compare"
},
},
{
"referenceProgram": {
"vertexShader": "cos_vec3_vert_xvary_ref.vert",
"vertexShader": "cos_vec3_vert_xvary_ref.vert",
"fragmentShader": "../default/default.frag"
},
"model": "grid",
},
"model": "grid",
"testProgram": {
"vertexShader": "cos_vec3_vert_xvary.vert",
"vertexShader": "cos_vec3_vert_xvary.vert",
"fragmentShader": "../default/default.frag"
},
"name": "cos_vec3_vert_xvary.test.html",
},
"name": "cos_vec3_vert_xvary.test.html",
"pattern": "compare"
}
]

Some files were not shown because too many files have changed in this diff Show More