summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-16 07:48:13 +0000
committerepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-16 07:48:13 +0000
commitbe1a77abe83bd50786a5894265692d1cbd197938 (patch)
tree9e7576c538cbd812c4c9e374681643c8d872c98f /cc
parent2bf4ef9440a1baf13a77821be882be793e488032 (diff)
downloadchromium_src-be1a77abe83bd50786a5894265692d1cbd197938.zip
chromium_src-be1a77abe83bd50786a5894265692d1cbd197938.tar.gz
chromium_src-be1a77abe83bd50786a5894265692d1cbd197938.tar.bz2
cc: Add dummy varying/uniform to fix solid color quads.
These shaders are broken on certain Android devices. This is a minimal fix first, where the real problem likely is a driver bug or shader compiler bug. BUG=240602 Review URL: https://chromiumcodereview.appspot.com/14995021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@200484 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r--cc/output/shader.cc20
1 files changed, 20 insertions, 0 deletions
diff --git a/cc/output/shader.cc b/cc/output/shader.cc
index c4ffd0e..cee3474 100644
--- a/cc/output/shader.cc
+++ b/cc/output/shader.cc
@@ -351,17 +351,37 @@ void VertexShaderQuad::Init(WebGraphicsContext3D* context,
}
std::string VertexShaderQuad::GetShaderString() const {
+#if defined(OS_ANDROID)
+// TODO(epenner): Find the cause of this 'quad' uniform
+// being missing if we don't add dummy variables.
+// http://crbug.com/240602
return VERTEX_SHADER(
attribute TexCoordPrecision vec4 a_position;
attribute float a_index;
uniform mat4 matrix;
uniform TexCoordPrecision vec2 quad[4];
+ uniform TexCoordPrecision vec2 dummy_uniform;
+ varying TexCoordPrecision vec2 dummy_varying;
void main() {
vec2 pos = quad[int(a_index)]; // NOLINT
gl_Position = matrix * vec4(
pos.x, pos.y, a_position.z, a_position.w);
+ dummy_varying = dummy_uniform;
}
); // NOLINT(whitespace/parens)
+#else
+ return VERTEX_SHADER(
+ attribute TexCoordPrecision vec4 a_position;
+ attribute float a_index;
+ uniform mat4 matrix;
+ uniform TexCoordPrecision vec2 quad[4];
+ void main() {
+ vec2 pos = quad[int(a_index)]; // NOLINT
+ gl_Position = matrix * vec4(
+ pos.x, pos.y, a_position.z, a_position.w);
+ }
+ ); // NOLINT(whitespace/parens)
+#endif
}
VertexShaderQuadTex::VertexShaderQuadTex()