diff options
author | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-16 07:48:13 +0000 |
---|---|---|
committer | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-16 07:48:13 +0000 |
commit | be1a77abe83bd50786a5894265692d1cbd197938 (patch) | |
tree | 9e7576c538cbd812c4c9e374681643c8d872c98f /cc | |
parent | 2bf4ef9440a1baf13a77821be882be793e488032 (diff) | |
download | chromium_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.cc | 20 |
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() |