mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 16:25:38 +00:00
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:
parent
7a40386fed
commit
5eda50a052
@ -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();
|
||||
|
@ -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 = [
|
||||
|
@ -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>
|
@ -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 */
|
||||
|
@ -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()
|
||||
|
@ -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>
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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("");
|
||||
|
@ -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
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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>
|
@ -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
|
||||
|
@ -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>
|
@ -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);
|
||||
|
@ -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.
|
||||
|
@ -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');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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>
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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);
|
||||
|
@ -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>
|
@ -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>
|
@ -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>
|
||||
|
@ -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>
|
@ -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>
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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("");
|
||||
|
@ -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,",
|
||||
|
@ -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,",
|
||||
|
@ -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*/ }
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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");
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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('');
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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) {
|
||||
|
@ -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>
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user