12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_OUTPUT_SHADER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_OUTPUT_SHADER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/basictypes.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/base/cc_export.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkColorPriv.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace gfx {
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Point;
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Size;
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace WebKit { class WebGraphicsContext3D; }
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)enum TexCoordPrecision {
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TexCoordPrecisionNA,
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TexCoordPrecisionMedium,
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TexCoordPrecisionHigh,
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
29b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// Note: The highp_threshold_cache must be provided by the caller to make
30b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// the caching multi-thread/context safe in an easy low-overhead manner.
31b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// The caller must make sure to clear highp_threshold_cache to 0, so it can be
32b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// reinitialized, if a new or different context is used.
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)CC_EXPORT TexCoordPrecision TexCoordPrecisionRequired(
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    WebKit::WebGraphicsContext3D* context,
35b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    int *highp_threshold_cache,
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int highp_threshold_min,
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    gfx::Point max_coordinate);
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)CC_EXPORT TexCoordPrecision TexCoordPrecisionRequired(
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    WebKit::WebGraphicsContext3D* context,
41b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    int *highp_threshold_cache,
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int highp_threshold_min,
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    gfx::Size max_size);
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VertexShaderPosTex {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VertexShaderPosTex();
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string GetShaderString() const;
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location() const { return matrix_location_; }
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location_;
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VertexShaderPosTex);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VertexShaderPosTexYUVStretch {
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VertexShaderPosTexYUVStretch();
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string GetShaderString() const;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location() const { return matrix_location_; }
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int tex_scale_location() const { return tex_scale_location_; }
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location_;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int tex_scale_location_;
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VertexShaderPosTexYUVStretch);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VertexShaderPos {
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VertexShaderPos();
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string GetShaderString() const;
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location() const { return matrix_location_; }
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location_;
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VertexShaderPos);
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VertexShaderPosTexIdentity {
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index) {}
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string GetShaderString() const;
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VertexShaderPosTexTransform {
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VertexShaderPosTexTransform();
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string GetShaderString() const;
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location() const { return matrix_location_; }
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int tex_transform_location() const { return tex_transform_location_; }
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int vertex_opacity_location() const { return vertex_opacity_location_; }
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location_;
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int tex_transform_location_;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int vertex_opacity_location_;
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VertexShaderPosTexTransform);
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass VertexShaderQuad {
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VertexShaderQuad();
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void Init(WebKit::WebGraphicsContext3D* context,
137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch           unsigned program,
138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch           bool using_bind_uniform,
139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch           int* base_uniform_index);
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string GetShaderString() const;
1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int matrix_location() const { return matrix_location_; }
143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int viewport_location() const { return -1; }
144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int quad_location() const { return quad_location_; }
145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int edge_location() const { return -1; }
146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private:
148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int matrix_location_;
149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int quad_location_;
150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(VertexShaderQuad);
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass VertexShaderQuadAA {
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VertexShaderQuadAA();
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           unsigned program,
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           bool using_bind_uniform,
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           int* base_uniform_index);
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string GetShaderString() const;
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location() const { return matrix_location_; }
165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int viewport_location() const { return viewport_location_; }
166b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int quad_location() const { return quad_location_; }
167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int edge_location() const { return edge_location_; }
168b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
169b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) private:
170b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int matrix_location_;
171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int viewport_location_;
172b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int quad_location_;
173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int edge_location_;
174b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(VertexShaderQuadAA);
176b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)};
177b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass VertexShaderQuadTexTransformAA {
180b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) public:
181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VertexShaderQuadTexTransformAA();
182b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
183b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
184b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)           unsigned program,
185b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)           bool using_bind_uniform,
186b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)           int* base_uniform_index);
187b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  std::string GetShaderString() const;
188b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
189b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int matrix_location() const { return matrix_location_; }
190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int viewport_location() const { return viewport_location_; }
191b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int quad_location() const { return quad_location_; }
192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int edge_location() const { return edge_location_; }
1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  int tex_transform_location() const { return tex_transform_location_; }
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location_;
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int viewport_location_;
198b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int quad_location_;
199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int edge_location_;
2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  int tex_transform_location_;
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(VertexShaderQuadTexTransformAA);
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VertexShaderTile {
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VertexShaderTile();
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string GetShaderString() const;
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location() const { return matrix_location_; }
216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int viewport_location() const { return -1; }
217b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int quad_location() const { return quad_location_; }
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int edge_location() const { return -1; }
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int vertex_tex_transform_location() const {
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return vertex_tex_transform_location_;
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location_;
225b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int quad_location_;
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int vertex_tex_transform_location_;
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VertexShaderTile);
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass VertexShaderTileAA {
232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VertexShaderTileAA();
234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void Init(WebKit::WebGraphicsContext3D* context,
236eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            unsigned program,
237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            bool using_bind_uniform,
238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            int* base_uniform_index);
239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string GetShaderString() const;
240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int matrix_location() const { return matrix_location_; }
242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int viewport_location() const { return viewport_location_; }
243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int quad_location() const { return quad_location_; }
244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int edge_location() const { return edge_location_; }
245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int vertex_tex_transform_location() const {
246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return vertex_tex_transform_location_;
247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int matrix_location_;
251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int viewport_location_;
252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int quad_location_;
253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int edge_location_;
254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int vertex_tex_transform_location_;
255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(VertexShaderTileAA);
257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VertexShaderVideoTransform {
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VertexShaderVideoTransform();
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void Init(WebKit::WebGraphicsContext3D* context,
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string GetShaderString() const;
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location() const { return matrix_location_; }
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int tex_matrix_location() const { return tex_matrix_location_; }
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int matrix_location_;
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int tex_matrix_location_;
275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VertexShaderVideoTransform);
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentTexAlphaBinding {
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentTexAlphaBinding();
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int fragment_tex_transform_location() const { return -1; }
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location() const { return sampler_location_; }
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location_;
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location_;
294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentTexAlphaBinding);
296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FragmentTexColorMatrixAlphaBinding {
299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    FragmentTexColorMatrixAlphaBinding();
301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    void Init(WebKit::WebGraphicsContext3D* context,
303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              unsigned program,
304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              bool usingBindUniform,
305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              int* baseUniformIndex);
306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int alpha_location() const { return alpha_location_; }
307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int color_matrix_location() const { return color_matrix_location_; }
308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int color_offset_location() const { return color_offset_location_; }
309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int fragment_tex_transform_location() const { return -1; }
310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int sampler_location() const { return sampler_location_; }
311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int sampler_location_;
314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int alpha_location_;
315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int color_matrix_location_;
316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    int color_offset_location_;
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentTexOpaqueBinding {
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentTexOpaqueBinding();
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location() const { return -1; }
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int fragment_tex_transform_location() const { return -1; }
3297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  int background_color_location() const { return -1; }
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location() const { return sampler_location_; }
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location_;
334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentTexOpaqueBinding);
3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass FragmentTexBackgroundBinding {
3397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
3407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FragmentTexBackgroundBinding();
3417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void Init(WebKit::WebGraphicsContext3D* context,
3437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            unsigned program,
3447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            bool using_bind_uniform,
3457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            int* base_uniform_index);
3467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  int background_color_location() const { return background_color_location_; }
3477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  int sampler_location() const { return sampler_location_; }
3487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private:
3507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  int background_color_location_;
3517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  int sampler_location_;
3527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(FragmentTexBackgroundBinding);
3547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
3557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderRGBATexVaryingAlpha : public FragmentTexOpaqueBinding {
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FragmentShaderRGBATexPremultiplyAlpha : public FragmentTexOpaqueBinding {
362eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
363eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string GetShaderString(TexCoordPrecision precision) const;
364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
365eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
3667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass FragmentShaderTexBackgroundVaryingAlpha
3677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    : public FragmentTexBackgroundBinding {
3687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
3697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  std::string GetShaderString(TexCoordPrecision precision) const;
3707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
3717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass FragmentShaderTexBackgroundPremultiplyAlpha
3737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    : public FragmentTexBackgroundBinding {
3747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
3757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  std::string GetShaderString(TexCoordPrecision precision) const;
3767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
3777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderRGBATexAlpha : public FragmentTexAlphaBinding {
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FragmentShaderRGBATexColorMatrixAlpha
384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : public FragmentTexColorMatrixAlphaBinding {
385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    std::string GetShaderString(TexCoordPrecision precision) const;
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass FragmentShaderRGBATexRectVaryingAlpha : public FragmentTexOpaqueBinding {
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderRGBATexOpaque : public FragmentTexOpaqueBinding {
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderRGBATex : public FragmentTexOpaqueBinding {
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Swizzles the red and blue component of sampled texel with alpha.
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderRGBATexSwizzleAlpha : public FragmentTexAlphaBinding {
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Swizzles the red and blue component of sampled texel without alpha.
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderRGBATexSwizzleOpaque : public FragmentTexOpaqueBinding {
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Fragment shader for external textures.
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderOESImageExternal : public FragmentTexAlphaBinding {
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FragmentShaderOESImageExternal();
420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
4227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void Init(WebKit::WebGraphicsContext3D* context,
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location_;
428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentShaderOESImageExternal);
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderRGBATexAlphaAA {
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentShaderRGBATexAlphaAA();
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location() const { return sampler_location_; }
4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location_;
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location_;
448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaAA);
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentTexClampAlphaAABinding {
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentTexClampAlphaAABinding();
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location() const { return sampler_location_; }
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int fragment_tex_transform_location() const {
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fragment_tex_transform_location_;
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location_;
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location_;
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int fragment_tex_transform_location_;
470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentTexClampAlphaAABinding);
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FragmentShaderRGBATexClampAlphaAA
475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : public FragmentTexClampAlphaAABinding {
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Swizzles the red and blue component of sampled texel.
481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FragmentShaderRGBATexClampSwizzleAlphaAA
482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : public FragmentTexClampAlphaAABinding {
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderRGBATexAlphaMask {
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentShaderRGBATexAlphaMask();
490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location() const { return sampler_location_; }
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_sampler_location() const { return mask_sampler_location_; }
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_tex_coord_scale_location() const {
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return mask_tex_coord_scale_location_;
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_tex_coord_offset_location() const {
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return mask_tex_coord_offset_location_;
5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location_;
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_sampler_location_;
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location_;
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_tex_coord_scale_location_;
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_tex_coord_offset_location_;
512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMask);
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderRGBATexAlphaMaskAA {
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentShaderRGBATexAlphaMaskAA();
519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            unsigned program,
523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            bool using_bind_uniform,
524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            int* base_uniform_index);
525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int sampler_location() const { return sampler_location_; }
527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_sampler_location() const { return mask_sampler_location_; }
528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_tex_coord_scale_location() const {
529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return mask_tex_coord_scale_location_;
530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_tex_coord_offset_location() const {
532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return mask_tex_coord_offset_location_;
533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int sampler_location_;
537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_sampler_location_;
538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int alpha_location_;
539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_tex_coord_scale_location_;
540c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_tex_coord_offset_location_;
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentShaderRGBATexAlphaMaskAA);
543c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
544c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FragmentShaderRGBATexAlphaMaskColorMatrixAA {
546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FragmentShaderRGBATexAlphaMaskColorMatrixAA();
548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location() const { return sampler_location_; }
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_sampler_location() const { return mask_sampler_location_; }
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_tex_coord_scale_location() const {
5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return mask_tex_coord_scale_location_;
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_tex_coord_offset_location() const {
5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return mask_tex_coord_offset_location_;
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_matrix_location() const { return color_matrix_location_; }
564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_offset_location() const { return color_offset_location_; }
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int sampler_location_;
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_sampler_location_;
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location_;
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_tex_coord_scale_location_;
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int mask_tex_coord_offset_location_;
572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_matrix_location_;
573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_offset_location_;
574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FragmentShaderRGBATexAlphaColorMatrixAA {
577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
578c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FragmentShaderRGBATexAlphaColorMatrixAA();
579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            unsigned program,
583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            bool using_bind_uniform,
584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            int* base_uniform_index);
585c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
586c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int sampler_location() const { return sampler_location_; }
587c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_matrix_location() const { return color_matrix_location_; }
588c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_offset_location() const { return color_offset_location_; }
589c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
590c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int sampler_location_;
592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int alpha_location_;
593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_matrix_location_;
594c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_offset_location_;
595c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FragmentShaderRGBATexAlphaMaskColorMatrix {
598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FragmentShaderRGBATexAlphaMaskColorMatrix();
600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
603c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            unsigned program,
604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            bool using_bind_uniform,
605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            int* base_uniform_index);
606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int sampler_location() const { return sampler_location_; }
608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_sampler_location() const { return mask_sampler_location_; }
609c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_tex_coord_scale_location() const {
610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return mask_tex_coord_scale_location_;
611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
612c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_tex_coord_offset_location() const {
613c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return mask_tex_coord_offset_location_;
614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_matrix_location() const { return color_matrix_location_; }
616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_offset_location() const { return color_offset_location_; }
617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int sampler_location_;
620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_sampler_location_;
621c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int alpha_location_;
622c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_tex_coord_scale_location_;
623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int mask_tex_coord_offset_location_;
624c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_matrix_location_;
625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int color_offset_location_;
6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderYUVVideo {
6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentShaderYUVVideo();
631c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int y_texture_location() const { return y_texture_location_; }
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int u_texture_location() const { return u_texture_location_; }
6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int v_texture_location() const { return v_texture_location_; }
6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int yuv_matrix_location() const { return yuv_matrix_location_; }
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int yuv_adj_location() const { return yuv_adj_location_; }
6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int y_texture_location_;
6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int u_texture_location_;
6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int v_texture_location_;
6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location_;
6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int yuv_matrix_location_;
6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int yuv_adj_location_;
651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
652c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVVideo);
6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
655868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
656868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class FragmentShaderYUVAVideo {
657868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public:
658868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FragmentShaderYUVAVideo();
659868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
660868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
661868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
662868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            unsigned program,
663868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            bool using_bind_uniform,
664868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            int* base_uniform_index);
665868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
666868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int y_texture_location() const { return y_texture_location_; }
667868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int u_texture_location() const { return u_texture_location_; }
668868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int v_texture_location() const { return v_texture_location_; }
669868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int a_texture_location() const { return a_texture_location_; }
670868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int alpha_location() const { return alpha_location_; }
671868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int yuv_matrix_location() const { return yuv_matrix_location_; }
672868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int yuv_adj_location() const { return yuv_adj_location_; }
673868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
674868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
675868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int y_texture_location_;
676868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int u_texture_location_;
677868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int v_texture_location_;
678868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int a_texture_location_;
679868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int alpha_location_;
680868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int yuv_matrix_location_;
681868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int yuv_adj_location_;
682868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
683868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVAVideo);
684868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
685868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderColor {
6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentShaderColor();
689c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
691c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int color_location() const { return color_location_; }
6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int color_location_;
699c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
700c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentShaderColor);
7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderColorAA {
7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentShaderColorAA();
706c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int color_location() const { return color_location_; }
7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int color_location_;
716c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
717c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentShaderColorAA);
7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FragmentShaderCheckerboard {
7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FragmentShaderCheckerboard();
723c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string GetShaderString(TexCoordPrecision precision) const;
7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(WebKit::WebGraphicsContext3D* context,
7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            unsigned program,
7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            bool using_bind_uniform,
7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int* base_uniform_index);
7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location() const { return alpha_location_; }
7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int tex_transform_location() const { return tex_transform_location_; }
7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int frequency_location() const { return frequency_location_; }
7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int color_location() const { return color_location_; }
7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int alpha_location_;
7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int tex_transform_location_;
7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int frequency_location_;
7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int color_location_;
739c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
740c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FragmentShaderCheckerboard);
7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
743c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace cc
7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_OUTPUT_SHADER_H_
746