[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