Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3426)

Unified Diff: cc/output/shader.h

Issue 12665005: cc: Use highp precision for texture coords if available and needed (Closed) Base URL: http://git.chromium.org/chromium/src.git@highp2
Patch Set: Cleanup highp shaders Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/output/shader.h
diff --git a/cc/output/shader.h b/cc/output/shader.h
index 4afd3a8b20a99a9cd4592aa9f6e296333bccf020..30adbb42c6c6e726d2958fa3f8b94375fff7977a 100644
--- a/cc/output/shader.h
+++ b/cc/output/shader.h
@@ -8,18 +8,32 @@
#include <string>
#include "third_party/skia/include/core/SkColorPriv.h"
+namespace gfx {
+class Point;
+}
+
namespace WebKit {
class WebGraphicsContext3D;
}
namespace cc {
+enum TexCoordPrecision {
+ TexCoordPrecisionNA,
+ TexCoordPrecisionMedium,
+ TexCoordPrecisionHigh,
+};
+
+// This currently only considers the source size because it can be slow
+// for the caller to also provide the destination size on screen.
+TexCoordPrecision TexCoordPrecisionRequired(const gfx::Point &max_coordinate);
+
class VertexShaderPosTex {
public:
VertexShaderPosTex();
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context) const;
int matrixLocation() const { return m_matrixLocation; }
@@ -32,7 +46,7 @@ public:
VertexShaderPosTexYUVStretch();
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context) const;
int matrixLocation() const { return m_matrixLocation; }
int texScaleLocation() const { return m_texScaleLocation; }
@@ -47,7 +61,7 @@ public:
VertexShaderPos();
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context) const;
int matrixLocation() const { return m_matrixLocation; }
@@ -58,7 +72,7 @@ private:
class VertexShaderPosTexIdentity {
public:
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex) { }
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context) const;
};
class VertexShaderPosTexTransform {
@@ -66,7 +80,7 @@ public:
VertexShaderPosTexTransform();
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context) const;
int matrixLocation() const { return m_matrixLocation; }
int texTransformLocation() const { return m_texTransformLocation; }
@@ -80,7 +94,7 @@ private:
class VertexShaderPosTexTransformFlip : public VertexShaderPosTexTransform {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context) const;
};
class VertexShaderQuad {
@@ -88,7 +102,7 @@ public:
VertexShaderQuad();
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context) const;
int matrixLocation() const { return m_matrixLocation; }
int pointLocation() const { return m_pointLocation; }
@@ -105,7 +119,7 @@ public:
VertexShaderTile();
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context) const;
int matrixLocation() const { return m_matrixLocation; }
int pointLocation() const { return m_pointLocation; }
@@ -122,7 +136,7 @@ public:
VertexShaderVideoTransform();
bool init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context) const;
int matrixLocation() const { return m_matrixLocation; }
int texMatrixLocation() const { return m_texMatrixLocation; }
@@ -163,45 +177,53 @@ private:
class FragmentShaderRGBATexVaryingAlpha : public FragmentTexOpaqueBinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
};
class FragmentShaderRGBATexAlpha : public FragmentTexAlphaBinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
};
class FragmentShaderRGBATexRectVaryingAlpha : public FragmentTexAlphaBinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
};
class FragmentShaderRGBATexOpaque : public FragmentTexOpaqueBinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
};
class FragmentShaderRGBATex : public FragmentTexOpaqueBinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
};
// Swizzles the red and blue component of sampled texel with alpha.
class FragmentShaderRGBATexSwizzleAlpha : public FragmentTexAlphaBinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
};
// Swizzles the red and blue component of sampled texel without alpha.
class FragmentShaderRGBATexSwizzleOpaque : public FragmentTexOpaqueBinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
};
// Fragment shader for external textures.
class FragmentShaderOESImageExternal : public FragmentTexAlphaBinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
bool init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
private:
int m_samplerLocation;
@@ -212,7 +234,8 @@ public:
FragmentShaderRGBATexAlphaAA();
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
int alphaLocation() const { return m_alphaLocation; }
int samplerLocation() const { return m_samplerLocation; }
@@ -243,19 +266,22 @@ private:
class FragmentShaderRGBATexClampAlphaAA : public FragmentTexClampAlphaAABinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
};
// Swizzles the red and blue component of sampled texel.
class FragmentShaderRGBATexClampSwizzleAlphaAA : public FragmentTexClampAlphaAABinding {
public:
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
};
class FragmentShaderRGBATexAlphaMask {
public:
FragmentShaderRGBATexAlphaMask();
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
int alphaLocation() const { return m_alphaLocation; }
@@ -275,7 +301,8 @@ private:
class FragmentShaderRGBATexAlphaMaskAA {
public:
FragmentShaderRGBATexAlphaMaskAA();
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
int alphaLocation() const { return m_alphaLocation; }
@@ -297,7 +324,8 @@ private:
class FragmentShaderYUVVideo {
public:
FragmentShaderYUVVideo();
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
@@ -320,7 +348,8 @@ private:
class FragmentShaderColor {
public:
FragmentShaderColor();
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
int edgeLocation() const { return -1; }
@@ -333,7 +362,8 @@ private:
class FragmentShaderColorAA {
public:
FragmentShaderColorAA();
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
int edgeLocation() const { return m_edgeLocation; }
@@ -347,7 +377,8 @@ private:
class FragmentShaderCheckerboard {
public:
FragmentShaderCheckerboard();
- std::string getShaderString() const;
+ std::string getShaderString(WebKit::WebGraphicsContext3D* context,
+ TexCoordPrecision precision) const;
void init(WebKit::WebGraphicsContext3D*, unsigned program, bool usingBindUniform, int* baseUniformIndex);
int alphaLocation() const { return m_alphaLocation; }

Powered by Google App Engine
This is Rietveld 408576698