[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

zmo at google.com zmo at google.com
Wed Dec 22 13:58:17 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 83e626db18ac0edb086ade24c0f2aab0cedd2804
Author: zmo at google.com <zmo at google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Sep 30 18:12:45 2010 +0000

    2010-09-29  Zhenyao Mo  <zmo at google.com>
    
            Reviewed by Kenneth Russell.
    
            glsl-conformance.html on khronos will crash chromium --in-process-webgl
            https://bugs.webkit.org/show_bug.cgi?id=46863
    
            * src/WebGraphicsContext3DDefaultImpl.cpp: Make ShaderSourceMap as <ShaderID, ShaderSourceEntry*>, so map resizing will be efficient and we don't need to worry about pointer copying.
            (WebKit::WebGraphicsContext3DDefaultImpl::~WebGraphicsContext3DDefaultImpl):
            (WebKit::WebGraphicsContext3DDefaultImpl::compileShader):
            (WebKit::WebGraphicsContext3DDefaultImpl::getShaderiv):
            (WebKit::WebGraphicsContext3DDefaultImpl::getShaderInfoLog):
            (WebKit::WebGraphicsContext3DDefaultImpl::getShaderSource):
            (WebKit::WebGraphicsContext3DDefaultImpl::shaderSource):
            (WebKit::WebGraphicsContext3DDefaultImpl::createShader):
            (WebKit::WebGraphicsContext3DDefaultImpl::deleteShader):
            * src/WebGraphicsContext3DDefaultImpl.h: Ditto.
            (WebKit::WebGraphicsContext3DDefaultImpl::ShaderSourceEntry::ShaderSourceEntry):
    2010-09-29  Zhenyao Mo  <zmo at google.com>
    
            Reviewed by Kenneth Russell.
    
            glsl-conformance.html on khronos will crash chromium --in-process-webgl
            https://bugs.webkit.org/show_bug.cgi?id=46863
    
            * fast/canvas/webgl/glsl-conformance-expected.txt: Added.
            * fast/canvas/webgl/glsl-conformance.html: Added.
            * fast/canvas/webgl/resources/webgl-test-utils.js: Add a function to turn off console output.
            (WebGLTestUtils.):
            (WebGLTestUtils):
            * fast/canvas/webgl/shaders: Added.
            * fast/canvas/webgl/shaders/00_shaders.txt: Added.
            * fast/canvas/webgl/shaders/implicit: Added.
            * fast/canvas/webgl/shaders/implicit/00_shaders.txt: Added.
            * fast/canvas/webgl/shaders/implicit/add_int_float.vert: Added.
            * fast/canvas/webgl/shaders/implicit/add_int_mat2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/add_int_mat3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/add_int_mat4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/add_int_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/add_int_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/add_int_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/add_ivec2_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/add_ivec3_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/add_ivec4_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/assign_int_to_float.vert: Added.
            * fast/canvas/webgl/shaders/implicit/assign_ivec2_to_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/assign_ivec3_to_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/assign_ivec4_to_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/construct_struct.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_int_float.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_int_mat2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_int_mat3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_int_mat4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_int_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_int_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_int_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_ivec2_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_ivec3_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/divide_ivec4_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/equal_int_float.vert: Added.
            * fast/canvas/webgl/shaders/implicit/equal_ivec2_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/equal_ivec3_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/equal_ivec4_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/function_int_float.vert: Added.
            * fast/canvas/webgl/shaders/implicit/function_ivec2_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/function_ivec3_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/function_ivec4_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/greater_than.vert: Added.
            * fast/canvas/webgl/shaders/implicit/greater_than_equal.vert: Added.
            * fast/canvas/webgl/shaders/implicit/less_than.vert: Added.
            * fast/canvas/webgl/shaders/implicit/less_than_equal.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_int_float.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_int_mat2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_int_mat3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_int_mat4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_int_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_int_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_int_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_ivec2_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_ivec3_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/multiply_ivec4_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/not_equal_int_float.vert: Added.
            * fast/canvas/webgl/shaders/implicit/not_equal_ivec2_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/not_equal_ivec3_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/not_equal_ivec4_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_int_float.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_int_mat2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_int_mat3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_int_mat4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_int_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_int_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_int_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_ivec2_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_ivec3_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/subtract_ivec4_vec4.vert: Added.
            * fast/canvas/webgl/shaders/implicit/ternary_int_float.vert: Added.
            * fast/canvas/webgl/shaders/implicit/ternary_ivec2_vec2.vert: Added.
            * fast/canvas/webgl/shaders/implicit/ternary_ivec3_vec3.vert: Added.
            * fast/canvas/webgl/shaders/implicit/ternary_ivec4_vec4.vert: Added.
            * fast/canvas/webgl/shaders/reserved: Added.
            * fast/canvas/webgl/shaders/reserved/00_shaders.txt: Added.
            * fast/canvas/webgl/shaders/reserved/_webgl_field.vert: Added.
            * fast/canvas/webgl/shaders/reserved/_webgl_function.vert: Added.
            * fast/canvas/webgl/shaders/reserved/_webgl_struct.vert: Added.
            * fast/canvas/webgl/shaders/reserved/_webgl_variable.vert: Added.
            * fast/canvas/webgl/shaders/reserved/webgl_field.vert: Added.
            * fast/canvas/webgl/shaders/reserved/webgl_function.vert: Added.
            * fast/canvas/webgl/shaders/reserved/webgl_struct.vert: Added.
            * fast/canvas/webgl/shaders/reserved/webgl_variable.vert: Added.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68806 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index b344c15..e5c4f9c 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,95 @@
+2010-09-29  Zhenyao Mo  <zmo at google.com>
+
+        Reviewed by Kenneth Russell.
+
+        glsl-conformance.html on khronos will crash chromium --in-process-webgl
+        https://bugs.webkit.org/show_bug.cgi?id=46863
+
+        * fast/canvas/webgl/glsl-conformance-expected.txt: Added.
+        * fast/canvas/webgl/glsl-conformance.html: Added.
+        * fast/canvas/webgl/resources/webgl-test-utils.js: Add a function to turn off console output.
+        (WebGLTestUtils.):
+        (WebGLTestUtils):
+        * fast/canvas/webgl/shaders: Added.
+        * fast/canvas/webgl/shaders/00_shaders.txt: Added.
+        * fast/canvas/webgl/shaders/implicit: Added.
+        * fast/canvas/webgl/shaders/implicit/00_shaders.txt: Added.
+        * fast/canvas/webgl/shaders/implicit/add_int_float.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/add_int_mat2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/add_int_mat3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/add_int_mat4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/add_int_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/add_int_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/add_int_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/add_ivec2_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/add_ivec3_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/add_ivec4_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/assign_int_to_float.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/assign_ivec2_to_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/assign_ivec3_to_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/assign_ivec4_to_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/construct_struct.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_int_float.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_int_mat2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_int_mat3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_int_mat4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_int_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_int_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_int_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_ivec2_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_ivec3_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/divide_ivec4_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/equal_int_float.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/equal_ivec2_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/equal_ivec3_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/equal_ivec4_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/function_int_float.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/function_ivec2_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/function_ivec3_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/function_ivec4_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/greater_than.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/greater_than_equal.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/less_than.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/less_than_equal.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_int_float.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_int_mat2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_int_mat3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_int_mat4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_int_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_int_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_int_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_ivec2_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_ivec3_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/multiply_ivec4_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/not_equal_int_float.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/not_equal_ivec2_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/not_equal_ivec3_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/not_equal_ivec4_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_int_float.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_int_mat2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_int_mat3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_int_mat4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_int_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_int_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_int_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_ivec2_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_ivec3_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/subtract_ivec4_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/ternary_int_float.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/ternary_ivec2_vec2.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/ternary_ivec3_vec3.vert: Added.
+        * fast/canvas/webgl/shaders/implicit/ternary_ivec4_vec4.vert: Added.
+        * fast/canvas/webgl/shaders/reserved: Added.
+        * fast/canvas/webgl/shaders/reserved/00_shaders.txt: Added.
+        * fast/canvas/webgl/shaders/reserved/_webgl_field.vert: Added.
+        * fast/canvas/webgl/shaders/reserved/_webgl_function.vert: Added.
+        * fast/canvas/webgl/shaders/reserved/_webgl_struct.vert: Added.
+        * fast/canvas/webgl/shaders/reserved/_webgl_variable.vert: Added.
+        * fast/canvas/webgl/shaders/reserved/webgl_field.vert: Added.
+        * fast/canvas/webgl/shaders/reserved/webgl_function.vert: Added.
+        * fast/canvas/webgl/shaders/reserved/webgl_struct.vert: Added.
+        * fast/canvas/webgl/shaders/reserved/webgl_variable.vert: Added.
+
 2010-09-30  Adam Roben  <aroben at apple.com>
 
         Add some tests to the Windows Skipped list
diff --git a/LayoutTests/fast/canvas/webgl/glsl-conformance-expected.txt b/LayoutTests/fast/canvas/webgl/glsl-conformance-expected.txt
new file mode 100644
index 0000000..9320ca9
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/glsl-conformance-expected.txt
@@ -0,0 +1,109 @@
+This test ensures WebGL implementations allow proper GLES2 shaders compile and improper ones fail.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Canvas.getContext
+PASS context exists
+
+Checking various GLSL programs.
+PASS [vshader/fshaderWithPrecision]: frament shader with precision compiled and linked
+PASS [vshader/fshaderWithDefaultPrecision]: fragment shader with default precision compiled and linked
+PASS [vshaderWithDefaultPrecision/fshader]: vertex shader with default precision compiled and linked
+PASS [vshader/fshaderWithOutPrecision]: fragment shader without precision should fail
+PASS [vshader/fshaderWithInvalidIdentifier]: fragment shader with gl_ identifier should fail
+PASS [vshader/fshaderWithGL_ESeq1]: fragment shader that expects GL_ES == 1 should succeed
+PASS [vshader/fshaderWithGLSLPreprocessorSymbol]: fragment shader that uses GL_ES preprocessor symbol should succeed
+PASS [vshader/fshaderWithVERSION100PreprocessorSymbol]: fragment shader that uses __VERSION__==100 should succeed
+PASS [vshader/fshaderWithFragDepth]: fragment shader that uses gl_FragDepth should fail
+PASS [vshaderWithClipVertex/fshader]: vertex shader that uses gl_ClipVertex should fail
+PASS [vshader/fshaderWithDefineLineContinuation]: fragment shader that uses has line continuation macro should fail
+PASS [vshaderWithgl_Color/fshader]: vertex shader that uses gl_Color should fail
+PASS [vshaderWithgl_ProjectionMatrix/fshader]: vertex shader that uses gl_ProjectionMatrix should fail
+PASS [vshaderWithAttributeArray/fshader]: vertex shader that uses attribute array should fail as per GLSL page 110, appendix A, section 5
+PASS [vshaderWithwebgl_/fshader]: vertex shader that uses _webgl identifier should fail
+PASS [vshaderWith_webgl_/fshader]: vertex shader that uses _webgl_ identifier should fail
+PASS [vshaderWithExplicitIntCast/fshader]: vertex shader that explicit int to float cast should succeed
+PASS [vshaderWithImplicitVec3Cast/fshader]: vertex shader that implicit vec3 to vec4 cast should fail
+PASS [vshaderWithVersion130/fshader]: vertex shader uses the #version not 100 directive should fail
+PASS [vshaderWithVersion120/fshader]: vertex shader uses the #version not 100 directive should fail
+PASS [vshaderWithVersion100/fshader]: vertex shader uses the #version 100 directive should succeed
+PASS [vshaderWithLineDirective/fshader]: vertex shader uses #line directive should report correct line
+PASS [shaders/implicit/add_int_float.vert/fshader]: implicit cast adding integer to float should fail
+PASS [shaders/implicit/add_int_mat2.vert/fshader]: implicit cast adding integer to mat2 should fail
+PASS [shaders/implicit/add_int_mat3.vert/fshader]: implicit cast adding integer to mat3 should fail
+PASS [shaders/implicit/add_int_mat4.vert/fshader]: implicit cast adding integer to mat4 should fail
+PASS [shaders/implicit/add_int_vec2.vert/fshader]: implicit cast adding integer to vec2 should fail
+PASS [shaders/implicit/add_int_vec3.vert/fshader]: implicit cast adding integer to vec3 should fail
+PASS [shaders/implicit/add_int_vec4.vert/fshader]: implicit cast adding integer to vec4 should fail
+PASS [shaders/implicit/add_ivec2_vec2.vert/fshader]: implicit cast adding ivec2 to vec2 should fail
+PASS [shaders/implicit/add_ivec3_vec3.vert/fshader]: implicit cast adding ivec3 to vec3 should fail
+PASS [shaders/implicit/add_ivec4_vec4.vert/fshader]: implicit cast adding ivec4 to vec4 should fail
+PASS [shaders/implicit/assign_int_to_float.vert/fshader]: implicit cast assing int to float should fail
+PASS [shaders/implicit/assign_ivec2_to_vec2.vert/fshader]: implicit cast assigning ivec2 to vec2 should fail
+PASS [shaders/implicit/assign_ivec3_to_vec3.vert/fshader]: implicit cast assigning ivec3 to vec3 should fail
+PASS [shaders/implicit/assign_ivec4_to_vec4.vert/fshader]: implicit cast assigning ivec4 to vec4 should fail
+PASS [shaders/implicit/construct_struct.vert/fshader]: implicit cast from int to float in struct initializer should fail
+PASS [shaders/implicit/divide_int_float.vert/fshader]: implicit cast of float divided by int should fail
+PASS [shaders/implicit/divide_int_mat2.vert/fshader]: implicit cast of mat2 divided by int should fail
+PASS [shaders/implicit/divide_int_mat3.vert/fshader]: implicit cast of mat3 divided by int should fail
+PASS [shaders/implicit/divide_int_mat4.vert/fshader]: implicit cast of mat4 divided by int should fail
+PASS [shaders/implicit/divide_int_vec2.vert/fshader]: implicit cast of vec2 divided by int should fail
+PASS [shaders/implicit/divide_int_vec3.vert/fshader]: implicit cast of vec3 divided by int should fail
+PASS [shaders/implicit/divide_int_vec4.vert/fshader]: implicit cast of vec4 divided by int should fail
+PASS [shaders/implicit/divide_ivec2_vec2.vert/fshader]: implicit cast of vec2 divided by ivec2 should fail
+PASS [shaders/implicit/divide_ivec3_vec3.vert/fshader]: implicit cast of vec3 divided by ivec3 should fail
+PASS [shaders/implicit/divide_ivec4_vec4.vert/fshader]: implicit cast of vec4 divided by ivec4 should fail
+PASS [shaders/implicit/equal_int_float.vert/fshader]: implicit cast of int to float in comparision should fail
+PASS [shaders/implicit/equal_ivec2_vec2.vert/fshader]: implicit cast of ivec2 to vec2 in comparision should fail
+PASS [shaders/implicit/equal_ivec3_vec3.vert/fshader]: implicit cast of ivec3 to vec3 in comparision should fail
+PASS [shaders/implicit/equal_ivec4_vec4.vert/fshader]: implicit cast of ivec4 to vec4 in comparision should fail
+PASS [shaders/implicit/function_int_float.vert/fshader]: implicit cast of int to float in function argument should fail
+PASS [shaders/implicit/function_ivec2_vec2.vert/fshader]: implicit cast of ivec2 to vec2 in function argument should fail
+PASS [shaders/implicit/function_ivec3_vec3.vert/fshader]: implicit cast of ivec3 to vec3 in function argument should fail
+PASS [shaders/implicit/function_ivec4_vec4.vert/fshader]: implicit cast of ivec4 to vec4 in function argument should fail
+PASS [shaders/implicit/greater_than.vert/fshader]: implicit cast of int to float with greater than should fail
+PASS [shaders/implicit/greater_than_equal.vert/fshader]: implicit cast of int to float with greater than or equal to should fail
+PASS [shaders/implicit/less_than.vert/fshader]: implicit cast of int to float with less than should fail
+PASS [shaders/implicit/less_than_equal.vert/fshader]: implicit cast of int to float with less than or equal to should fail
+PASS [shaders/implicit/multiply_int_float.vert/fshader]: implicit cast of int to float in multiply should fail
+PASS [shaders/implicit/multiply_int_mat2.vert/fshader]: implicit cast of int to mat2 in multiply should fail
+PASS [shaders/implicit/multiply_int_mat3.vert/fshader]: implicit cast of int to mat3 in multiply should fail
+PASS [shaders/implicit/multiply_int_mat4.vert/fshader]: implicit cast of int to mat4 in multiply should fail
+PASS [shaders/implicit/multiply_int_vec2.vert/fshader]: implicit cast of int to vec2 in multiply should fail
+PASS [shaders/implicit/multiply_int_vec3.vert/fshader]: implicit cast of int to vec3 in multiply should fail
+PASS [shaders/implicit/multiply_int_vec4.vert/fshader]: implicit cast of int to vec4 in multiply should fail
+PASS [shaders/implicit/multiply_ivec2_vec2.vert/fshader]: implicit cast of ivec2 to vec2 in multiply should fail
+PASS [shaders/implicit/multiply_ivec3_vec3.vert/fshader]: implicit cast of ivec3 to vec3 in multiply should fail
+PASS [shaders/implicit/multiply_ivec4_vec4.vert/fshader]: implicit cast of ivec4 to vec4 in multiply should fail
+PASS [shaders/implicit/not_equal_int_float.vert/fshader]: implicit cast of int to float in not equal comparison should fail
+PASS [shaders/implicit/not_equal_ivec2_vec2.vert/fshader]: implicit cast of ivec2 to vec2 in not equal comparison should fail
+PASS [shaders/implicit/not_equal_ivec3_vec3.vert/fshader]: implicit cast of ivec3 to vec3 in not equal comparison should fail
+PASS [shaders/implicit/not_equal_ivec4_vec4.vert/fshader]: implicit cast of ivec4 to vec4 in not equal comparison should fail
+PASS [shaders/implicit/subtract_int_float.vert/fshader]: implicit cast of int to float in subtraction should fail
+PASS [shaders/implicit/subtract_int_mat2.vert/fshader]: implicit cast of int to mat2 in subtraction should fail
+PASS [shaders/implicit/subtract_int_mat3.vert/fshader]: implicit cast of int to mat3 in subtraction should fail
+PASS [shaders/implicit/subtract_int_mat4.vert/fshader]: implicit cast of int to mat4 in subtraction should fail
+PASS [shaders/implicit/subtract_int_vec2.vert/fshader]: implicit cast of int to vec2 in subtraction should fail
+PASS [shaders/implicit/subtract_int_vec3.vert/fshader]: implicit cast of int to vec3 in subtraction should fail
+PASS [shaders/implicit/subtract_int_vec4.vert/fshader]: implicit cast of int to vec4 in subtraction should fail
+PASS [shaders/implicit/subtract_ivec2_vec2.vert/fshader]: implicit cast of ivec2 to vec2 in subtraction should fail
+PASS [shaders/implicit/subtract_ivec3_vec3.vert/fshader]: implicit cast of ivec3 to vec3 in subtraction should fail
+PASS [shaders/implicit/subtract_ivec4_vec4.vert/fshader]: implicit cast of ivec4 to vec4 in subtraction should fail
+PASS [shaders/implicit/ternary_int_float.vert/fshader]: implicit cast of int to float in ternary expression should fail
+PASS [shaders/implicit/ternary_ivec2_vec2.vert/fshader]: implicit cast of ivec2 to vec2 in ternary expression should fail
+PASS [shaders/implicit/ternary_ivec3_vec3.vert/fshader]: implicit cast of ivec3 to vec3 in ternary expression should fail
+PASS [shaders/implicit/ternary_ivec4_vec4.vert/fshader]: implicit cast of ivec4 to vec4 in ternary expression should fail
+PASS [shaders/reserved/_webgl_field.vert/fshader]: use of reserved _webgl prefix as structure field should fail
+PASS [shaders/reserved/_webgl_function.vert/fshader]: use of reserved _webgl prefix as function name should fail
+PASS [shaders/reserved/_webgl_struct.vert/fshader]: use of reserved _webgl prefix as structure name should fail
+PASS [shaders/reserved/_webgl_variable.vert/fshader]: use of reserved _webgl prefix as structure field should fail
+PASS [shaders/reserved/webgl_field.vert/fshader]: use of reserved webgl_ prefix as structure field should fail
+PASS [shaders/reserved/webgl_function.vert/fshader]: use of reserved webgl_ prefix as function name should fail
+PASS [shaders/reserved/webgl_struct.vert/fshader]: use of reserved webgl_ prefix as structure name should fail
+PASS [shaders/reserved/webgl_variable.vert/fshader]: use of reserved webgl_ prefix as variable should fail
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/canvas/webgl/glsl-conformance.html b/LayoutTests/fast/canvas/webgl/glsl-conformance.html
new file mode 100644
index 0000000..8864332
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/glsl-conformance.html
@@ -0,0 +1,537 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+  "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>WebGL GLSL Conformance Tests</title>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css"/>
+<script src="../../js/resources/js-test-pre.js"></script>
+<script src="resources/webgl-test.js"></script>
+<script src="resources/webgl-test-utils.js"></script>
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+<script id="vshader" type="text/something-not-javascript">
+attribute vec4 vPosition;
+void main()
+{
+    gl_Position = vPosition;
+}
+</script>
+<script id="fshader" type="text/something-not-javascript">
+precision mediump float;
+void main()
+{
+    gl_FragColor = vec4(1.0,0.0,0.0,1.0);
+}
+</script>
+<script id="fshaderWithPrecision" type="text/something-not-javascript">
+void main()
+{
+    gl_FragColor = mediump vec4(1.0,0.0,0.0,1.0);
+}
+</script>
+<script id="vshaderWithDefaultPrecision" type="text/something-not-javascript">
+precision mediump float;
+attribute vec4 vPosition;
+void main()
+{
+    gl_Position = vPosition;
+}
+</script>
+<script id="fshaderWithDefaultPrecision" type="text/something-not-javascript">
+precision mediump float;
+void main()
+{
+    gl_FragColor = vec4(1.0,0.0,0.0,1.0);
+}
+</script>
+<script id="fshaderWithOutPrecision" type="text/something-not-javascript">
+uniform vec4 color;
+void main()
+{
+    gl_FragColor = color;
+}
+</script>
+<script id="fshaderWithInvalidIdentifier" type="text/something-not-javascript">
+precision mediump float;
+uniform float gl_foo;
+void main()
+{
+    gl_FragColor = vec4(gl_foo,0.0,0.0,1.0);
+}
+</script>
+<script id="fshaderWithGL_ESeq1" type="text/something-not-javascript">
+#if GL_ES == 1
+  precision mediump float;
+  void main()
+  {
+      gl_FragColor = vec4(0.0,0.0,0.0,1.0);
+  }
+#else
+  foo
+#endif
+</script>
+<script id="fshaderWithGLSLPreprocessorSymbol" type="text/something-not-javascript">
+#if defined(GL_ES)
+  precision mediump float;
+  void main()
+  {
+      gl_FragColor = vec4(0.0,0.0,0.0,1.0);
+  }
+#else
+  foo
+#endif
+</script>
+<script id="fshaderWithVERSION100PreprocessorSymbol" type="text/something-not-javascript">
+#if __VERSION__ == 100
+  precision mediump float;
+  void main()
+  {
+      gl_FragColor = vec4(0.0,0.0,0.0,1.0);
+  }
+#else
+  foo
+#endif
+</script>
+<script id="fshaderWithFragDepth" type="text/something-not-javascript">
+precision mediump float;
+void main()
+{
+    gl_FragColor = vec4(0.0,0.0,0.0,1.0);
+    gl_FragDepth = 1.0;
+}
+</script>
+<script id="vshaderWithClipVertex" type="text/something-not-javascript">
+attribute vec4 vPosition;
+void main()
+{
+    gl_Position = vPosition;
+    gl_ClipVertex = vPosition;
+}
+</script>
+<script id="fshaderWith__Define" type="text/something-not-javascript">
+#define __foo 1
+precision mediump float;
+void main()
+{
+    gl_FragColor = vec4(0.0,0.0,0.0,1.0);
+}
+</script>
+<script id="fshaderWithGL_Define" type="text/something-not-javascript">
+#define GL_FOO 1
+precision mediump float;
+void main()
+{
+    gl_FragColor = vec4(0.0,0.0,0.0,1.0);
+}
+</script>
+<script id="fshaderWithDefineLineContinuation" type="text/something-not-javascript">
+#define foo this \
+  is a test
+precision mediump float;
+void main()
+{
+    gl_FragColor = vec4(0.0,0.0,0.0,1.0);
+}
+</script>
+<script id="vshaderWithgl_Color" type="text/something-not-javascript">
+attribute vec4 vPosition;
+void main()
+{
+    gl_Position = gl_Color;
+}
+</script>
+<script id="vshaderWithgl_ProjectionMatrix" type="text/something-not-javascript">
+attribute vec4 vPosition;
+void main()
+{
+    gl_Position = vPosition * gl_ProjectionMatrix;
+}
+</script>
+<script id="vshaderWithAttributeArray" type="text/something-not-javascript">
+attribute vec4 vPosition[2];
+void main()
+{
+    gl_Position = vPosition[0] + vPosition[1];
+}
+</script>
+<script id="vshaderWithwebgl_" type="text/something-not-javascript">
+attribute vec4 webgl_vPosition;
+void main()
+{
+    gl_Position = webgl_vPosition;
+}
+</script>
+<script id="vshaderWith_webgl_" type="text/something-not-javascript">
+attribute vec4 _webgl_vPosition;
+void main()
+{
+    gl_Position = _webgl_vPosition;
+}
+</script>
+<script id="vshaderWithImplicitVec3Cast" type="text/something-not-javascript">
+attribute vec4 vPosition;
+void main()
+{
+    highp vec3 k = vec3(1, 2, 3);
+    gl_Position = k;
+}
+</script>
+<script id="vshaderWithExplicitIntCast" type="text/something-not-javascript">
+attribute vec4 vPosition;
+void main()
+{
+    int k = 123;
+    gl_Position = vec4(vPosition.x, vPosition.y, vPosition.z, float(k));
+}
+</script>
+<script id="vshaderWithVersion130" type="text/something-not-javascript">
+#version 130
+attribute vec4 vPosition;
+void main()
+{
+    gl_Position = vPosition;
+}
+</script>
+<script id="vshaderWithVersion120" type="text/something-not-javascript">
+#version 120
+attribute vec4 vPosition;
+void main()
+{
+    gl_Position = vPosition;
+}
+</script>
+<script id="vshaderWithVersion100" type="text/something-not-javascript">
+#version 100
+attribute vec4 vPosition;
+void main()
+{
+    gl_Position = vPosition;
+}
+</script>
+<script id="vshaderWithLineDirective" type="text/something-not-javascript">
+#line 123
+foo
+</script>
+<script id="vshaderWith__FILE__" type="text/something-not-javascript">
+__FILE__
+</script>
+<canvas id="canvas" width="2" height="2"> </canvas>
+<script>
+description("This test ensures WebGL implementations allow proper GLES2 shaders compile and improper ones fail.");
+
+debug("");
+debug("Canvas.getContext");
+
+var wtu = WebGLTestUtils;
+wtu.loggingOff();
+var gl = wtu.create3DContext(document.getElementById("canvas"));
+if (!gl) {
+  testFailed("context does not exist");
+} else {
+  testPassed("context exists");
+
+  debug("");
+  debug("Checking various GLSL programs.");
+
+  function log(msg) {
+    if (window.console && window.console.log) {
+      //window.console.log(msg);
+    }
+  }
+
+  var shaderInfo = [
+    { vShaderId: 'vshader',
+      vShaderSuccess: true,
+      fShaderId: 'fshaderWithPrecision',
+      fShaderSuccess: true,
+      linkSuccess: true,
+      passMsg: 'frament shader with precision compiled and linked'
+    },
+    { vShaderId: 'vshader',
+      vShaderSuccess: true,
+      fShaderId: 'fshaderWithDefaultPrecision',
+      fShaderSuccess: true,
+      linkSuccess: true,
+      passMsg: 'fragment shader with default precision compiled and linked'
+    },
+    { vShaderId: 'vshaderWithDefaultPrecision',
+      vShaderSuccess: true,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: true,
+      passMsg: 'vertex shader with default precision compiled and linked'
+    },
+    { vShaderId: 'vshader',
+      vShaderSuccess: true,
+      fShaderId: 'fshaderWithOutPrecision',
+      fShaderSuccess: false,
+      linkSuccess: false,
+      passMsg: 'fragment shader without precision should fail',
+    },
+    { vShaderId: 'vshader',
+      vShaderSuccess: true,
+      fShaderId: 'fshaderWithInvalidIdentifier',
+      fShaderSuccess: false,
+      linkSuccess: false,
+      passMsg: 'fragment shader with gl_ identifier should fail',
+    },
+    { vShaderId: 'vshader',
+      vShaderSuccess: true,
+      fShaderId: 'fshaderWithGL_ESeq1',
+      fShaderSuccess: true,
+      linkSuccess: true,
+      passMsg: 'fragment shader that expects GL_ES == 1 should succeed',
+    },
+    { vShaderId: 'vshader',
+      vShaderSuccess: true,
+      fShaderId: 'fshaderWithGLSLPreprocessorSymbol',
+      fShaderSuccess: true,
+      linkSuccess: true,
+      passMsg: 'fragment shader that uses GL_ES preprocessor symbol should succeed',
+    },
+    { vShaderId: 'vshader',
+      vShaderSuccess: true,
+      fShaderId: 'fshaderWithVERSION100PreprocessorSymbol',
+      fShaderSuccess: true,
+      linkSuccess: true,
+      passMsg: 'fragment shader that uses __VERSION__==100 should succeed',
+    },
+    { vShaderId: 'vshader',
+      vShaderSuccess: true,
+      fShaderId: 'fshaderWithFragDepth',
+      fShaderSuccess: false,
+      linkSuccess: false,
+      passMsg: 'fragment shader that uses gl_FragDepth should fail',
+    },
+    { vShaderId: 'vshaderWithClipVertex',
+      vShaderSuccess: false,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader that uses gl_ClipVertex should fail',
+    },
+    //{ vShaderId: 'vshader',
+    //  vShaderSuccess: true,
+    //  fShaderId: 'fshaderWith__Define',
+    //  fShaderSuccess: false,
+    //  linkSuccess: false,
+    //  passMsg: 'fragment shader that uses __ define should fail',
+    //},
+    //{ vShaderId: 'vshader',
+    //  vShaderSuccess: true,
+    //  fShaderId: 'fshaderWithGL_Define',
+    //  fShaderSuccess: false,
+    //  linkSuccess: false,
+    //  passMsg: 'fragment shader that uses GL_ define should fail',
+    //},
+    { vShaderId: 'vshader',
+      vShaderSuccess: true,
+      fShaderId: 'fshaderWithDefineLineContinuation',
+      fShaderSuccess: false,
+      linkSuccess: false,
+      passMsg: 'fragment shader that uses has line continuation macro should fail',
+    },
+    { vShaderId: 'vshaderWithgl_Color',
+      vShaderSuccess: false,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader that uses gl_Color should fail',
+    },
+    { vShaderId: 'vshaderWithgl_ProjectionMatrix',
+      vShaderSuccess: false,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader that uses gl_ProjectionMatrix should fail',
+    },
+    { vShaderId: 'vshaderWithAttributeArray',
+      vShaderSuccess: false,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader that uses attribute array should fail as per GLSL page 110, appendix A, section 5',
+    },
+    { vShaderId: 'vshaderWithwebgl_',
+      vShaderSuccess: false,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader that uses _webgl identifier should fail',
+    },
+    { vShaderId: 'vshaderWith_webgl_',
+      vShaderSuccess: false,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader that uses _webgl_ identifier should fail',
+    },
+    { vShaderId: 'vshaderWithExplicitIntCast',
+      vShaderSuccess: true,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: true,
+      passMsg: 'vertex shader that explicit int to float cast should succeed',
+    },
+    { vShaderId: 'vshaderWithImplicitVec3Cast',
+      vShaderSuccess: false,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader that implicit vec3 to vec4 cast should fail',
+    },
+    { vShaderId: 'vshaderWithVersion130',
+      vShaderSuccess: false,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader uses the #version not 100 directive should fail',
+    },
+    { vShaderId: 'vshaderWithVersion120',
+      vShaderSuccess: false,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader uses the #version not 100 directive should fail',
+    },
+    { vShaderId: 'vshaderWithVersion100',
+      vShaderSuccess: true,
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: true,
+      passMsg: 'vertex shader uses the #version 100 directive should succeed',
+    },
+    { vShaderId: 'vshaderWithLineDirective',
+      vShaderSuccess: false,
+      vShaderTest: (function() { return wtu.getLastError().indexOf("124") >= 0; }),
+      fShaderId: 'fshader',
+      fShaderSuccess: true,
+      linkSuccess: false,
+      passMsg: 'vertex shader uses #line directive should report correct line',
+    }
+  ];
+
+  // Read in all the shader source.
+  for (var ii = 0; ii < shaderInfo.length; ++ii) {
+    var si = shaderInfo[ii];
+    si.vShaderSource = document.getElementById(si.vShaderId).text;
+    si.fShaderSource = document.getElementById(si.fShaderId).text;
+  }
+
+  // Add more tests from external file
+  var simpleVertShader = document.getElementById('vshader').text;
+  var simpleFragShader = document.getElementById('fshader').text;
+
+  addExternalShaders('shaders/00_shaders.txt');
+
+  function addExternalShaders(filename, passMsg) {
+    var files = wtu.readFileList(filename);
+    for (var ii = 0; ii < files.length; ++ii) {
+      var file = files[ii];
+      var shaderSource = wtu.readFile(file);
+      var firstLine = shaderSource.split("\n")[0];
+      var success = undefined;
+      if (wtu.endsWith(firstLine, " fail") ||
+          wtu.endsWith(firstLine, " fail.")) {
+        success = false;
+      } else if (wtu.endsWith(firstLine, " succeed") ||
+                 wtu.endsWith(firstLine, " succeed.")) {
+        success = true;
+      }
+      if (success === undefined) {
+        testFailed("bad first line in " + file);
+        continue;
+      }
+      if (!wtu.startsWith(firstLine, "// ")) {
+        testFailed("bad first line in " + file);
+        continue;
+      }
+      var passMsg = firstLine.substr(3);
+      if (wtu.endsWith(file, ".vert")) {
+        shaderInfo.push({
+            vShaderId: file,
+            vShaderSource: shaderSource,
+            vShaderSuccess: success,
+            fShaderId: 'fshader',
+            fShaderSource: simpleFragShader,
+            fShaderSuccess: true,
+            linkSuccess: success,
+            passMsg: passMsg,
+          });
+      } else if (wtu.endsWith(file, ".frag")) {
+        shaderInfo.push({
+            vShaderId: 'vshader',
+            vShaderSource: simpleVertShader,
+            vShaderSuccess: true,
+            fShaderId: file,
+            fShaderSource: shaderSource,
+            fShaderSuccess: success,
+            linkSuccess: success,
+            passMsg: passMsg,
+          });
+      }
+    }
+  }
+
+  for (var ii = 0; ii < shaderInfo.length; ++ii) {
+    var info = shaderInfo[ii];
+    var passMsg = '[' + info.vShaderId + '/' + info.fShaderId + ']: ' +
+                  info.passMsg
+    log(passMsg);
+    //debug(info.fShaderId);
+    var vShader = wtu.loadShader(gl, info.vShaderSource, gl.VERTEX_SHADER);
+    if (info.vShaderTest) {
+      if (!info.vShaderTest(vShader)) {
+        testFailed(passMsg);
+        continue;
+      }
+    }
+    if ((vShader != null) != info.vShaderSuccess) {
+      testFailed(passMsg);
+      continue;
+    }
+    var fShader = wtu.loadShader(gl, info.fShaderSource, gl.FRAGMENT_SHADER);
+    //debug(fShader == null ? "fail" : "succeed");
+    if ((fShader != null) != info.fShaderSuccess) {
+      testFailed(passMsg);
+      continue;
+    }
+
+    if (vShader && fShader) {
+      var program = gl.createProgram();
+      gl.attachShader(program, vShader);
+      gl.attachShader(program, fShader);
+      gl.linkProgram(program);
+      var linked = (gl.getProgramParameter(program, gl.LINK_STATUS) != 0);
+      if (!linked) {
+        var error = gl.getProgramInfoLog(shader);
+        log("*** Error linking program '"+program+"':"+error);
+      }
+      if (linked != info.linkSuccess) {
+        testFailed(passMsg);
+        continue;
+      }
+    } else {
+      if (info.linkSuccess) {
+        testFailed(passMsg);
+        continue;
+      }
+    }
+    testPassed(passMsg);
+  }
+}
+
+debug("");
+successfullyParsed = true;
+
+</script>
+<script src="../../js/resources/js-test-post.js"></script>
+
+<script>
+</script>
+
+</body>
+</html>
diff --git a/LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js b/LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js
index bcb9647..cc1d9e3 100644
--- a/LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js
+++ b/LayoutTests/fast/canvas/webgl/resources/webgl-test-utils.js
@@ -30,6 +30,14 @@ var error = function(msg) {
 };
 
 /**
+ * Turn off all logging.
+ */
+var loggingOff = function() {
+  log = function() {};
+  error = function() {};
+};
+
+/**
  * Converts a WebGL enum to a string
  * @param {!WebGLContext} gl The WebGLContext to use.
  * @param {number} value The enum value.
@@ -845,6 +853,7 @@ return {
   loadStandardFragmentShader: loadStandardFragmentShader,
   loadTexture: loadTexture,
   log: log,
+  loggingOff: loggingOff,
   error: error,
   setupProgram: setupProgram,
   setupSimpleTextureFragmentShader: setupSimpleTextureFragmentShader,
diff --git a/LayoutTests/fast/canvas/webgl/shaders/00_shaders.txt b/LayoutTests/fast/canvas/webgl/shaders/00_shaders.txt
new file mode 100644
index 0000000..31dcaea
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/00_shaders.txt
@@ -0,0 +1,3 @@
+implicit/00_shaders.txt
+reserved/00_shaders.txt
+
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/00_shaders.txt b/LayoutTests/fast/canvas/webgl/shaders/implicit/00_shaders.txt
new file mode 100644
index 0000000..15d2e53
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/00_shaders.txt
@@ -0,0 +1,65 @@
+add_int_float.vert
+add_int_mat2.vert
+add_int_mat3.vert
+add_int_mat4.vert
+add_int_vec2.vert
+add_int_vec3.vert
+add_int_vec4.vert
+add_ivec2_vec2.vert
+add_ivec3_vec3.vert
+add_ivec4_vec4.vert
+assign_int_to_float.vert
+assign_ivec2_to_vec2.vert
+assign_ivec3_to_vec3.vert
+assign_ivec4_to_vec4.vert
+construct_struct.vert
+divide_int_float.vert
+divide_int_mat2.vert
+divide_int_mat3.vert
+divide_int_mat4.vert
+divide_int_vec2.vert
+divide_int_vec3.vert
+divide_int_vec4.vert
+divide_ivec2_vec2.vert
+divide_ivec3_vec3.vert
+divide_ivec4_vec4.vert
+equal_int_float.vert
+equal_ivec2_vec2.vert
+equal_ivec3_vec3.vert
+equal_ivec4_vec4.vert
+function_int_float.vert
+function_ivec2_vec2.vert
+function_ivec3_vec3.vert
+function_ivec4_vec4.vert
+greater_than.vert
+greater_than_equal.vert
+less_than.vert
+less_than_equal.vert
+multiply_int_float.vert
+multiply_int_mat2.vert
+multiply_int_mat3.vert
+multiply_int_mat4.vert
+multiply_int_vec2.vert
+multiply_int_vec3.vert
+multiply_int_vec4.vert
+multiply_ivec2_vec2.vert
+multiply_ivec3_vec3.vert
+multiply_ivec4_vec4.vert
+not_equal_int_float.vert
+not_equal_ivec2_vec2.vert
+not_equal_ivec3_vec3.vert
+not_equal_ivec4_vec4.vert
+subtract_int_float.vert
+subtract_int_mat2.vert
+subtract_int_mat3.vert
+subtract_int_mat4.vert
+subtract_int_vec2.vert
+subtract_int_vec3.vert
+subtract_int_vec4.vert
+subtract_ivec2_vec2.vert
+subtract_ivec3_vec3.vert
+subtract_ivec4_vec4.vert
+ternary_int_float.vert
+ternary_ivec2_vec2.vert
+ternary_ivec3_vec3.vert
+ternary_ivec4_vec4.vert
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_float.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_float.vert
new file mode 100644
index 0000000..18f1a70
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_float.vert
@@ -0,0 +1,5 @@
+// implicit cast adding integer to float should fail
+void main()
+{
+    float f = 1.0 + 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_mat2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_mat2.vert
new file mode 100644
index 0000000..63fd312
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_mat2.vert
@@ -0,0 +1,5 @@
+// implicit cast adding integer to mat2 should fail
+void main()
+{
+    mat2 f = mat2(1.0) + 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_mat3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_mat3.vert
new file mode 100644
index 0000000..c829e37
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_mat3.vert
@@ -0,0 +1,5 @@
+// implicit cast adding integer to mat3 should fail
+void main()
+{
+    mat3 f = mat3(1.0) + 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_mat4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_mat4.vert
new file mode 100644
index 0000000..806666d
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_mat4.vert
@@ -0,0 +1,5 @@
+// implicit cast adding integer to mat4 should fail
+void main()
+{
+    mat4 f = mat4(1.0) + 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_vec2.vert
new file mode 100644
index 0000000..8e76a57
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast adding integer to vec2 should fail
+void main()
+{
+    vec2 f = vec2(1.0, 2.0) + 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_vec3.vert
new file mode 100644
index 0000000..033140e
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast adding integer to vec3 should fail
+void main()
+{
+    vec3 f = vec3(1.0, 2.0, 3.0) + 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_vec4.vert
new file mode 100644
index 0000000..6f3127b
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_int_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast adding integer to vec4 should fail
+void main()
+{
+    vec4 f = vec4(1.0, 2.0, 3.0, 4.0) + 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_ivec2_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_ivec2_vec2.vert
new file mode 100644
index 0000000..dcb06f2
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_ivec2_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast adding ivec2 to vec2 should fail
+void main()
+{
+    vec2 f = vec2(1.0, 2.0) + ivec2(1, 2);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_ivec3_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_ivec3_vec3.vert
new file mode 100644
index 0000000..bb0edcd
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_ivec3_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast adding ivec3 to vec3 should fail
+void main()
+{
+    vec3 f = vec3(1.0, 2.0, 3.0) + ivec3(1, 2, 3);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/add_ivec4_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_ivec4_vec4.vert
new file mode 100644
index 0000000..79cfde9
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/add_ivec4_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast adding ivec4 to vec4 should fail
+void main()
+{
+    vec4 f = vec4(1.0, 2.0, 3.0, 4.0) + ivec4(1, 2, 3, 4);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_int_to_float.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_int_to_float.vert
new file mode 100644
index 0000000..360b09c
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_int_to_float.vert
@@ -0,0 +1,5 @@
+// implicit cast assing int to float should fail
+void main()
+{
+    float f = -123;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_ivec2_to_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_ivec2_to_vec2.vert
new file mode 100644
index 0000000..bf37974
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_ivec2_to_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast assigning ivec2 to vec2 should fail
+void main()
+{
+    vec2 f = ivec2(1, 2);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_ivec3_to_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_ivec3_to_vec3.vert
new file mode 100644
index 0000000..ccb51e9
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_ivec3_to_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast assigning ivec3 to vec3 should fail
+void main()
+{
+    vec3 f = ivec3(1, 2, 3);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_ivec4_to_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_ivec4_to_vec4.vert
new file mode 100644
index 0000000..27aeae0
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/assign_ivec4_to_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast assigning ivec4 to vec4 should fail
+void main()
+{
+    vec4 f = ivec4(1, 2, 3, 4);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/construct_struct.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/construct_struct.vert
new file mode 100644
index 0000000..28a8ecc
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/construct_struct.vert
@@ -0,0 +1,8 @@
+// implicit cast from int to float in struct initializer should fail
+struct Foo {
+  float bar;
+};
+
+void main() {
+  Foo foo = Foo(1);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_float.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_float.vert
new file mode 100644
index 0000000..28df86a
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_float.vert
@@ -0,0 +1,5 @@
+// implicit cast of float divided by int should fail
+void main()
+{
+    float f = 1.0 / 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_mat2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_mat2.vert
new file mode 100644
index 0000000..8f7d4b5
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_mat2.vert
@@ -0,0 +1,5 @@
+// implicit cast of mat2 divided by int should fail
+void main()
+{
+    mat2 f = mat2(1.0) / 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_mat3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_mat3.vert
new file mode 100644
index 0000000..f989c98
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_mat3.vert
@@ -0,0 +1,5 @@
+// implicit cast of mat3 divided by int should fail
+void main()
+{
+    mat3 f = mat3(1.0) / 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_mat4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_mat4.vert
new file mode 100644
index 0000000..a58c98e
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_mat4.vert
@@ -0,0 +1,5 @@
+// implicit cast of mat4 divided by int should fail
+void main()
+{
+    mat4 f = mat4(1.0) / 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_vec2.vert
new file mode 100644
index 0000000..4239f66
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast of vec2 divided by int should fail
+void main()
+{
+    vec2 f = vec2(1.0, 2.0) / 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_vec3.vert
new file mode 100644
index 0000000..72f6380
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast of vec3 divided by int should fail
+void main()
+{
+    vec3 f = vec3(1.0, 2.0, 3.0) / 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_vec4.vert
new file mode 100644
index 0000000..5f203ac
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_int_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast of vec4 divided by int should fail
+void main()
+{
+    vec4 f = vec4(1.0, 2.0, 3.0, 4.0) / 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_ivec2_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_ivec2_vec2.vert
new file mode 100644
index 0000000..762bcbc
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_ivec2_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast of vec2 divided by ivec2 should fail
+void main()
+{
+    vec2 f = vec2(1.0, 2.0) / ivec2(1, 2);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_ivec3_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_ivec3_vec3.vert
new file mode 100644
index 0000000..d6a4215
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_ivec3_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast of vec3 divided by ivec3 should fail
+void main()
+{
+    vec3 f = vec3(1.0, 2.0, 3.0) / ivec3(1, 2, 3);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_ivec4_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_ivec4_vec4.vert
new file mode 100644
index 0000000..22cdae7
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/divide_ivec4_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast of vec4 divided by ivec4 should fail
+void main()
+{
+    vec4 f = vec4(1.0, 2.0, 3.0, 4.0) / ivec4(1, 2, 3, 4);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_int_float.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_int_float.vert
new file mode 100644
index 0000000..a1c6a5c
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_int_float.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to float in comparision should fail
+void main()
+{
+    bool b = 1.0 == 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_ivec2_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_ivec2_vec2.vert
new file mode 100644
index 0000000..59cf941
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_ivec2_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec2 to vec2 in comparision should fail
+void main()
+{
+    bool b = vec2(1.0, 2.0) == ivec2(1, 2);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_ivec3_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_ivec3_vec3.vert
new file mode 100644
index 0000000..ffdddbc
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_ivec3_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec3 to vec3 in comparision should fail
+void main()
+{
+    bool b = vec3(1.0, 2.0, 3.0) == ivec3(1, 2, 3);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_ivec4_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_ivec4_vec4.vert
new file mode 100644
index 0000000..0344879
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/equal_ivec4_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec4 to vec4 in comparision should fail
+void main()
+{
+    bool b = vec4(1.0, 2.0, 3.0, 4.0) == ivec4(1, 2, 3, 4);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/function_int_float.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/function_int_float.vert
new file mode 100644
index 0000000..14f0755
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/function_int_float.vert
@@ -0,0 +1,8 @@
+// implicit cast of int to float in function argument should fail
+float foo(float f) {
+  return f;
+}
+
+void main() {
+  float f = foo(1);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/function_ivec2_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/function_ivec2_vec2.vert
new file mode 100644
index 0000000..99991ae
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/function_ivec2_vec2.vert
@@ -0,0 +1,8 @@
+// implicit cast of ivec2 to vec2 in function argument should fail
+vec2 foo(vec2 f) {
+  return f;
+}
+
+void main() {
+  vec2 f = foo(ivec2(1, 2));
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/function_ivec3_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/function_ivec3_vec3.vert
new file mode 100644
index 0000000..6ba3d4e
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/function_ivec3_vec3.vert
@@ -0,0 +1,8 @@
+// implicit cast of ivec3 to vec3 in function argument should fail
+vec3 foo(vec3 f) {
+  return f;
+}
+
+void main() {
+  vec3 f = foo(ivec3(1, 2, 3));
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/function_ivec4_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/function_ivec4_vec4.vert
new file mode 100644
index 0000000..24c5b78
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/function_ivec4_vec4.vert
@@ -0,0 +1,8 @@
+// implicit cast of ivec4 to vec4 in function argument should fail
+vec4 foo(vec4 f) {
+  return f;
+}
+
+void main() {
+  vec4 f = foo(ivec4(1, 2, 3, 4));
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/greater_than.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/greater_than.vert
new file mode 100644
index 0000000..8bfc88a
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/greater_than.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to float with greater than should fail
+void main()
+{
+    bool b = 1.0 > 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/greater_than_equal.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/greater_than_equal.vert
new file mode 100644
index 0000000..af99452
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/greater_than_equal.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to float with greater than or equal to should fail
+void main()
+{
+    bool b = 1.0 >= 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/less_than.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/less_than.vert
new file mode 100644
index 0000000..b9212b7
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/less_than.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to float with less than should fail
+void main()
+{
+    bool b = 1.0 < 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/less_than_equal.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/less_than_equal.vert
new file mode 100644
index 0000000..750e7fb
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/less_than_equal.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to float with less than or equal to should fail
+void main()
+{
+    bool b = 1.0 <= 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_float.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_float.vert
new file mode 100644
index 0000000..38dc621
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_float.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to float in multiply should fail
+void main()
+{
+    float f = 1.0 * 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_mat2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_mat2.vert
new file mode 100644
index 0000000..9159fe5
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_mat2.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to mat2 in multiply should fail
+void main()
+{
+    mat2 f = mat2(1.0) * 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_mat3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_mat3.vert
new file mode 100644
index 0000000..660e6eb
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_mat3.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to mat3 in multiply should fail
+void main()
+{
+    mat3 f = mat3(1.0) * 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_mat4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_mat4.vert
new file mode 100644
index 0000000..2b3124e
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_mat4.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to mat4 in multiply should fail
+void main()
+{
+    mat4 f = mat4(1.0) * 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_vec2.vert
new file mode 100644
index 0000000..d25469b
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to vec2 in multiply should fail
+void main()
+{
+    vec2 f = vec2(1.0, 2.0) * 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_vec3.vert
new file mode 100644
index 0000000..0688238
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to vec3 in multiply should fail
+void main()
+{
+    vec3 f = vec3(1.0, 2.0, 3.0) * 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_vec4.vert
new file mode 100644
index 0000000..5186dba
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_int_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to vec4 in multiply should fail
+void main()
+{
+    vec4 f = vec4(1.0, 2.0, 3.0, 4.0) * 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_ivec2_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_ivec2_vec2.vert
new file mode 100644
index 0000000..164a68a
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_ivec2_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec2 to vec2 in multiply should fail
+void main()
+{
+    vec2 f = vec2(1.0, 2.0) * ivec2(1, 2);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_ivec3_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_ivec3_vec3.vert
new file mode 100644
index 0000000..2639248
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_ivec3_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec3 to vec3 in multiply should fail
+void main()
+{
+    vec3 f = vec3(1.0, 2.0, 3.0) * ivec3(1, 2, 3);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_ivec4_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_ivec4_vec4.vert
new file mode 100644
index 0000000..cc67c39
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/multiply_ivec4_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec4 to vec4 in multiply should fail
+void main()
+{
+    vec4 f = vec4(1.0, 2.0, 3.0, 4.0) * ivec4(1, 2, 3, 4);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_int_float.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_int_float.vert
new file mode 100644
index 0000000..93bf285
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_int_float.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to float in not equal comparison should fail
+void main()
+{
+    bool b = 1.0 != 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_ivec2_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_ivec2_vec2.vert
new file mode 100644
index 0000000..fd8f325
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_ivec2_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec2 to vec2 in not equal comparison should fail
+void main()
+{
+    bool b = vec2(1.0, 2.0) != ivec2(1, 2);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_ivec3_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_ivec3_vec3.vert
new file mode 100644
index 0000000..031b813
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_ivec3_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec3 to vec3 in not equal comparison should fail
+void main()
+{
+    bool b = vec3(1.0, 2.0, 3.0) != ivec3(1, 2, 3);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_ivec4_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_ivec4_vec4.vert
new file mode 100644
index 0000000..918ca50
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/not_equal_ivec4_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec4 to vec4 in not equal comparison should fail
+void main()
+{
+    bool b = vec4(1.0, 2.0, 3.0, 4.0) != ivec4(1, 2, 3, 4);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_float.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_float.vert
new file mode 100644
index 0000000..60fda80
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_float.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to float in subtraction should fail
+void main()
+{
+    float f = 1.0 - 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_mat2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_mat2.vert
new file mode 100644
index 0000000..db0b839
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_mat2.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to mat2 in subtraction should fail
+void main()
+{
+    mat2 f = mat2(1.0) - 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_mat3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_mat3.vert
new file mode 100644
index 0000000..c241bf3
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_mat3.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to mat3 in subtraction should fail
+void main()
+{
+    mat3 f = mat3(1.0) - 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_mat4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_mat4.vert
new file mode 100644
index 0000000..de66404
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_mat4.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to mat4 in subtraction should fail
+void main()
+{
+    mat4 f = mat4(1.0) - 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_vec2.vert
new file mode 100644
index 0000000..6391716
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to vec2 in subtraction should fail
+void main()
+{
+    vec2 f = vec2(1.0, 2.0) - 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_vec3.vert
new file mode 100644
index 0000000..2859f86
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to vec3 in subtraction should fail
+void main()
+{
+    vec3 f = vec3(1.0, 2.0, 3.0) - 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_vec4.vert
new file mode 100644
index 0000000..e918a56
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_int_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to vec4 in subtraction should fail
+void main()
+{
+    vec4 f = vec4(1.0, 2.0, 3.0, 4.0) - 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_ivec2_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_ivec2_vec2.vert
new file mode 100644
index 0000000..6613b0e
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_ivec2_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec2 to vec2 in subtraction should fail
+void main()
+{
+    vec2 f = vec2(1.0, 2.0) - ivec2(1, 2);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_ivec3_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_ivec3_vec3.vert
new file mode 100644
index 0000000..8ca7213
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_ivec3_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec3 to vec3 in subtraction should fail
+void main()
+{
+    vec3 f = vec3(1.0, 2.0, 3.0) - ivec3(1, 2, 3);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_ivec4_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_ivec4_vec4.vert
new file mode 100644
index 0000000..0e900b0
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/subtract_ivec4_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec4 to vec4 in subtraction should fail
+void main()
+{
+    vec4 f = vec4(1.0, 2.0, 3.0, 4.0) - ivec4(1, 2, 3, 4);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_int_float.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_int_float.vert
new file mode 100644
index 0000000..b91309f
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_int_float.vert
@@ -0,0 +1,5 @@
+// implicit cast of int to float in ternary expression should fail
+void main()
+{
+    float f = true ? 1.0 : 1;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_ivec2_vec2.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_ivec2_vec2.vert
new file mode 100644
index 0000000..3a8d0f5
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_ivec2_vec2.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec2 to vec2 in ternary expression should fail
+void main()
+{
+    vec2 f = true ? vec2(1.0, 2.0) : ivec2(1, 2);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_ivec3_vec3.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_ivec3_vec3.vert
new file mode 100644
index 0000000..70f4b14
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_ivec3_vec3.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec3 to vec3 in ternary expression should fail
+void main()
+{
+    vec3 f = true ? vec3(1.0, 2.0, 3.0) : ivec3(1, 2, 3);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_ivec4_vec4.vert b/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_ivec4_vec4.vert
new file mode 100644
index 0000000..b8f7a40
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/implicit/ternary_ivec4_vec4.vert
@@ -0,0 +1,5 @@
+// implicit cast of ivec4 to vec4 in ternary expression should fail
+void main()
+{
+    vec4 f = true ? vec4(1.0, 2.0, 3.0, 4.0) : ivec4(1, 2, 3, 4);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/reserved/00_shaders.txt b/LayoutTests/fast/canvas/webgl/shaders/reserved/00_shaders.txt
new file mode 100644
index 0000000..a0cfe27
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/reserved/00_shaders.txt
@@ -0,0 +1,8 @@
+_webgl_field.vert
+_webgl_function.vert
+_webgl_struct.vert
+_webgl_variable.vert
+webgl_field.vert
+webgl_function.vert
+webgl_struct.vert
+webgl_variable.vert
diff --git a/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_field.vert b/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_field.vert
new file mode 100644
index 0000000..f1cfd30
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_field.vert
@@ -0,0 +1,8 @@
+// use of reserved _webgl prefix as structure field should fail
+struct Foo {
+  int _webgl_bar;
+};
+
+void main() {
+  Foo foo = Foo(1);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_function.vert b/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_function.vert
new file mode 100644
index 0000000..afbedf1
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_function.vert
@@ -0,0 +1,8 @@
+// use of reserved _webgl prefix as function name should fail
+vec4 _webgl_foo() {
+  return vec4(1.0);
+}
+
+void main() {
+  gl_Position = _webgl_foo();
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_struct.vert b/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_struct.vert
new file mode 100644
index 0000000..c9e1641
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_struct.vert
@@ -0,0 +1,8 @@
+// use of reserved _webgl prefix as structure name should fail
+struct _webgl_Foo {
+  int bar;
+};
+
+void main() {
+  _webgl_Foo foo = _webgl_Foo(1);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_variable.vert b/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_variable.vert
new file mode 100644
index 0000000..9aa11c9
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/reserved/_webgl_variable.vert
@@ -0,0 +1,4 @@
+// use of reserved _webgl prefix as structure field should fail
+void main() {
+  vec4 _webgl_foo;
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_field.vert b/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_field.vert
new file mode 100644
index 0000000..64a55a3
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_field.vert
@@ -0,0 +1,8 @@
+// use of reserved webgl_ prefix as structure field should fail
+struct Foo {
+  int webgl_bar;
+};
+
+void main() {
+  Foo foo = Foo(1);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_function.vert b/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_function.vert
new file mode 100644
index 0000000..0e04417
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_function.vert
@@ -0,0 +1,8 @@
+// use of reserved webgl_ prefix as function name should fail
+vec4 webgl_foo() {
+  return vec4(1.0);
+}
+
+void main() {
+  gl_Position = webgl_foo();
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_struct.vert b/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_struct.vert
new file mode 100644
index 0000000..87bc1eb
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_struct.vert
@@ -0,0 +1,8 @@
+// use of reserved webgl_ prefix as structure name should fail
+struct webgl_Foo {
+  int bar;
+};
+
+void main() {
+  webgl_Foo foo = webgl_Foo(1);
+}
diff --git a/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_variable.vert b/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_variable.vert
new file mode 100644
index 0000000..24c7082
--- /dev/null
+++ b/LayoutTests/fast/canvas/webgl/shaders/reserved/webgl_variable.vert
@@ -0,0 +1,4 @@
+// use of reserved webgl_ prefix as variable should fail
+void main() {
+  vec4 webgl_foo;
+}
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 4429297..9ca90c9 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,22 @@
+2010-09-29  Zhenyao Mo  <zmo at google.com>
+
+        Reviewed by Kenneth Russell.
+
+        glsl-conformance.html on khronos will crash chromium --in-process-webgl
+        https://bugs.webkit.org/show_bug.cgi?id=46863
+
+        * src/WebGraphicsContext3DDefaultImpl.cpp: Make ShaderSourceMap as <ShaderID, ShaderSourceEntry*>, so map resizing will be efficient and we don't need to worry about pointer copying.
+        (WebKit::WebGraphicsContext3DDefaultImpl::~WebGraphicsContext3DDefaultImpl):
+        (WebKit::WebGraphicsContext3DDefaultImpl::compileShader):
+        (WebKit::WebGraphicsContext3DDefaultImpl::getShaderiv):
+        (WebKit::WebGraphicsContext3DDefaultImpl::getShaderInfoLog):
+        (WebKit::WebGraphicsContext3DDefaultImpl::getShaderSource):
+        (WebKit::WebGraphicsContext3DDefaultImpl::shaderSource):
+        (WebKit::WebGraphicsContext3DDefaultImpl::createShader):
+        (WebKit::WebGraphicsContext3DDefaultImpl::deleteShader):
+        * src/WebGraphicsContext3DDefaultImpl.h: Ditto.
+        (WebKit::WebGraphicsContext3DDefaultImpl::ShaderSourceEntry::ShaderSourceEntry):
+
 2010-09-30  Andrei Popescu  <andreip at google.com>
 
         Reviewed by Jeremy Orlow.
diff --git a/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp b/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp
index 6f3d33e..2a87e52 100644
--- a/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp
+++ b/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp
@@ -108,6 +108,10 @@ WebGraphicsContext3DDefaultImpl::~WebGraphicsContext3DDefaultImpl()
 
         m_glContext->Destroy();
 
+        for (ShaderSourceMap::iterator ii = m_shaderSourceMap.begin(); ii != m_shaderSourceMap.end(); ++ii) {
+            if (ii->second)
+                delete ii->second;
+        }
         angleDestroyCompilers();
     }
 }
@@ -716,13 +720,14 @@ void WebGraphicsContext3DDefaultImpl::compileShader(WebGLId shader)
         glCompileShader(shader);
         return;
     }
-    ShaderSourceEntry& entry = result->second;
+    ShaderSourceEntry* entry = result->second;
+    ASSERT(entry);
 
-    if (!angleValidateShaderSource(entry))
+    if (!angleValidateShaderSource(*entry))
         return; // Shader didn't validate, don't move forward with compiling translated source
 
-    int shaderLength = entry.translatedSource ? strlen(entry.translatedSource) : 0;
-    glShaderSource(shader, 1, const_cast<const char**>(&entry.translatedSource), &shaderLength);
+    int shaderLength = entry->translatedSource ? strlen(entry->translatedSource) : 0;
+    glShaderSource(shader, 1, const_cast<const char**>(&entry->translatedSource), &shaderLength);
     glCompileShader(shader);
 
 #ifndef NDEBUG
@@ -994,24 +999,25 @@ void WebGraphicsContext3DDefaultImpl::getShaderiv(WebGLId shader, unsigned long
 
     ShaderSourceMap::iterator result = m_shaderSourceMap.find(shader);
     if (result != m_shaderSourceMap.end()) {
-        ShaderSourceEntry& entry = result->second;
+        ShaderSourceEntry* entry = result->second;
+        ASSERT(entry);
         switch (pname) {
         case GL_COMPILE_STATUS:
-            if (!entry.isValid) {
+            if (!entry->isValid) {
                 *value = 0;
                 return;
             }
             break;
         case GL_INFO_LOG_LENGTH:
-            if (!entry.isValid) {
-                *value = entry.log ? strlen(entry.log) : 0;
+            if (!entry->isValid) {
+                *value = entry->log ? strlen(entry->log) : 0;
                 if (*value)
                     (*value)++;
                 return;
             }
             break;
         case GL_SHADER_SOURCE_LENGTH:
-            *value = entry.source ? strlen(entry.source) : 0;
+            *value = entry->source ? strlen(entry->source) : 0;
             if (*value)
                 (*value)++;
             return;
@@ -1027,11 +1033,12 @@ WebString WebGraphicsContext3DDefaultImpl::getShaderInfoLog(WebGLId shader)
 
     ShaderSourceMap::iterator result = m_shaderSourceMap.find(shader);
     if (result != m_shaderSourceMap.end()) {
-        ShaderSourceEntry& entry = result->second;
-        if (!entry.isValid) {
-            if (!entry.log)
+        ShaderSourceEntry* entry = result->second;
+        ASSERT(entry);
+        if (!entry->isValid) {
+            if (!entry->log)
                 return WebString();
-            WebString res = WebString::fromUTF8(entry.log, strlen(entry.log));
+            WebString res = WebString::fromUTF8(entry->log, strlen(entry->log));
             return res;
         }
     }
@@ -1057,10 +1064,11 @@ WebString WebGraphicsContext3DDefaultImpl::getShaderSource(WebGLId shader)
 
     ShaderSourceMap::iterator result = m_shaderSourceMap.find(shader);
     if (result != m_shaderSourceMap.end()) {
-        ShaderSourceEntry& entry = result->second;
-        if (!entry.source)
+        ShaderSourceEntry* entry = result->second;
+        ASSERT(entry);
+        if (!entry->source)
             return WebString();
-        WebString res = WebString::fromUTF8(entry.source, strlen(entry.source));
+        WebString res = WebString::fromUTF8(entry->source, strlen(entry->source));
         return res;
     }
 
@@ -1188,14 +1196,15 @@ void WebGraphicsContext3DDefaultImpl::shaderSource(WebGLId shader, const char* s
     GLint length = string ? strlen(string) : 0;
     ShaderSourceMap::iterator result = m_shaderSourceMap.find(shader);
     if (result != m_shaderSourceMap.end()) {
-        ShaderSourceEntry& entry = result->second;
-        if (entry.source) {
-            fastFree(entry.source);
-            entry.source = 0;
+        ShaderSourceEntry* entry = result->second;
+        ASSERT(entry);
+        if (entry->source) {
+            fastFree(entry->source);
+            entry->source = 0;
         }
-        if (!tryFastMalloc((length + 1) * sizeof(char)).getValue(entry.source))
+        if (!tryFastMalloc((length + 1) * sizeof(char)).getValue(entry->source))
             return; // FIXME: generate an error?
-        memcpy(entry.source, string, (length + 1) * sizeof(char));
+        memcpy(entry->source, string, (length + 1) * sizeof(char));
     } else
         glShaderSource(shader, 1, &string, &length);
 }
@@ -1342,10 +1351,12 @@ unsigned WebGraphicsContext3DDefaultImpl::createShader(unsigned long shaderType)
     ASSERT(shaderType == GL_VERTEX_SHADER || shaderType == GL_FRAGMENT_SHADER);
     unsigned shader = glCreateShader(shaderType);
     if (shader) {
-        ShaderSourceEntry entry;
-        entry.type = shaderType;
-        m_shaderSourceMap.set(shader, entry);
+        ShaderSourceMap::iterator result = m_shaderSourceMap.find(shader);
+        if (result != m_shaderSourceMap.end())
+            delete result->second;
+        m_shaderSourceMap.set(shader, new ShaderSourceEntry(shaderType));
     }
+
     return shader;
 }
 
@@ -1384,8 +1395,12 @@ void WebGraphicsContext3DDefaultImpl::deleteRenderbuffer(unsigned renderbuffer)
 void WebGraphicsContext3DDefaultImpl::deleteShader(unsigned shader)
 {
     makeContextCurrent();
+
+    ShaderSourceMap::iterator result = m_shaderSourceMap.find(shader);
+    if (result != m_shaderSourceMap.end())
+        delete result->second;
+    m_shaderSourceMap.remove(result);
     glDeleteShader(shader);
-    m_shaderSourceMap.remove(shader);
 }
 
 void WebGraphicsContext3DDefaultImpl::deleteTexture(unsigned texture)
diff --git a/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h b/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h
index 106bccb..124ceac 100644
--- a/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h
+++ b/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h
@@ -332,8 +332,8 @@ private:
 
     // ANGLE related.
     struct ShaderSourceEntry {
-        ShaderSourceEntry()
-                : type(0)
+        ShaderSourceEntry(unsigned long shaderType)
+                : type(shaderType)
                 , source(0)
                 , log(0)
                 , translatedSource(0)
@@ -362,7 +362,7 @@ private:
     void angleDestroyCompilers();
     bool angleValidateShaderSource(ShaderSourceEntry& entry);
 
-    typedef HashMap<WebGLId, ShaderSourceEntry> ShaderSourceMap;
+    typedef HashMap<WebGLId, ShaderSourceEntry*> ShaderSourceMap;
     ShaderSourceMap m_shaderSourceMap;
 
     ShHandle m_fragmentCompiler;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list