diff options
author | brianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-01 23:03:11 +0000 |
---|---|---|
committer | brianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-01 23:03:11 +0000 |
commit | 075d8aae89b630b505f97f437e665cf1968eb4c0 (patch) | |
tree | eb66ede0e1cb085f42500924e9e9fc8c564ffca5 /cc/output/shader.h | |
parent | 58430f338d50e9df8ca7066652b347b1ef7ff52d (diff) | |
download | chromium_src-075d8aae89b630b505f97f437e665cf1968eb4c0.zip chromium_src-075d8aae89b630b505f97f437e665cf1968eb4c0.tar.gz chromium_src-075d8aae89b630b505f97f437e665cf1968eb4c0.tar.bz2 |
cc: Use highp precision for texture coords if available and needed
This fixes an earlier version of this patch that had a bug in
FragmentShaderRGBATexAlphaMask.
High precision is only used when the source is greater than N
pixels in any direction to prevent performance regressions. N is
determined based on the actual precision of mediump reported by
the driver.
BUG=183581
BUG=173747
Review URL: https://chromiumcodereview.appspot.com/12665005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@191692 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/output/shader.h')
-rw-r--r-- | cc/output/shader.h | 64 |
1 files changed, 43 insertions, 21 deletions
diff --git a/cc/output/shader.h b/cc/output/shader.h index 228fc6d..5832e8f 100644 --- a/cc/output/shader.h +++ b/cc/output/shader.h @@ -8,14 +8,36 @@ #include <string> #include "base/basictypes.h" +#include "cc/base/cc_export.h" #include "third_party/skia/include/core/SkColorPriv.h" +namespace gfx { +class Point; +class Size; +} + namespace WebKit { class WebGraphicsContext3D; } namespace cc { +enum TexCoordPrecision { + TexCoordPrecisionNA, + TexCoordPrecisionMedium, + TexCoordPrecisionHigh, +}; + +CC_EXPORT TexCoordPrecision TexCoordPrecisionRequired( + WebKit::WebGraphicsContext3D* context, + int highp_threshold_min, + const gfx::Point& max_coordinate); + +CC_EXPORT TexCoordPrecision TexCoordPrecisionRequired( + WebKit::WebGraphicsContext3D* context, + int highp_threshold_min, + const gfx::Size& max_size); + class VertexShaderPosTex { public: VertexShaderPosTex(); @@ -237,45 +259,45 @@ class FragmentTexOpaqueBinding { class FragmentShaderRGBATexVaryingAlpha : public FragmentTexOpaqueBinding { public: - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; }; class FragmentShaderRGBATexAlpha : public FragmentTexAlphaBinding { public: - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; }; class FragmentShaderRGBATexColorMatrixAlpha : public FragmentTexColorMatrixAlphaBinding { public: - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; }; class FragmentShaderRGBATexRectVaryingAlpha : public FragmentTexAlphaBinding { public: - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; }; class FragmentShaderRGBATexOpaque : public FragmentTexOpaqueBinding { public: - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; }; class FragmentShaderRGBATex : public FragmentTexOpaqueBinding { public: - std::string GetShaderString() const; + std::string GetShaderString(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(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(TexCoordPrecision precision) const; }; // Fragment shader for external textures. @@ -283,7 +305,7 @@ class FragmentShaderOESImageExternal : public FragmentTexAlphaBinding { public: FragmentShaderOESImageExternal(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; bool Init(WebKit::WebGraphicsContext3D*, unsigned program, bool using_bind_uniform, @@ -302,7 +324,7 @@ class FragmentShaderRGBATexAlphaAA { unsigned program, bool using_bind_uniform, int* base_uniform_index); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; int alpha_location() const { return alpha_location_; } int sampler_location() const { return sampler_location_; } @@ -343,20 +365,20 @@ class FragmentTexClampAlphaAABinding { class FragmentShaderRGBATexClampAlphaAA : public FragmentTexClampAlphaAABinding { public: - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; }; // Swizzles the red and blue component of sampled texel. class FragmentShaderRGBATexClampSwizzleAlphaAA : public FragmentTexClampAlphaAABinding { public: - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; }; class FragmentShaderRGBATexAlphaMask { public: FragmentShaderRGBATexAlphaMask(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; void Init(WebKit::WebGraphicsContext3D*, unsigned program, @@ -385,7 +407,7 @@ class FragmentShaderRGBATexAlphaMask { class FragmentShaderRGBATexAlphaMaskAA { public: FragmentShaderRGBATexAlphaMaskAA(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; void Init(WebKit::WebGraphicsContext3D*, unsigned program, @@ -416,7 +438,7 @@ class FragmentShaderRGBATexAlphaMaskAA { class FragmentShaderRGBATexAlphaMaskColorMatrixAA { public: FragmentShaderRGBATexAlphaMaskColorMatrixAA(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; void Init(WebKit::WebGraphicsContext3D*, unsigned program, @@ -449,7 +471,7 @@ class FragmentShaderRGBATexAlphaMaskColorMatrixAA { class FragmentShaderRGBATexAlphaColorMatrixAA { public: FragmentShaderRGBATexAlphaColorMatrixAA(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; void Init(WebKit::WebGraphicsContext3D*, unsigned program, @@ -472,7 +494,7 @@ class FragmentShaderRGBATexAlphaColorMatrixAA { class FragmentShaderRGBATexAlphaMaskColorMatrix { public: FragmentShaderRGBATexAlphaMaskColorMatrix(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; void Init(WebKit::WebGraphicsContext3D*, unsigned program, @@ -503,7 +525,7 @@ class FragmentShaderRGBATexAlphaMaskColorMatrix { class FragmentShaderYUVVideo { public: FragmentShaderYUVVideo(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; void Init(WebKit::WebGraphicsContext3D*, unsigned program, @@ -530,7 +552,7 @@ class FragmentShaderYUVVideo { class FragmentShaderColor { public: FragmentShaderColor(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; void Init(WebKit::WebGraphicsContext3D*, unsigned program, @@ -548,7 +570,7 @@ class FragmentShaderColor { class FragmentShaderColorAA { public: FragmentShaderColorAA(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; void Init(WebKit::WebGraphicsContext3D*, unsigned program, @@ -567,7 +589,7 @@ class FragmentShaderColorAA { class FragmentShaderCheckerboard { public: FragmentShaderCheckerboard(); - std::string GetShaderString() const; + std::string GetShaderString(TexCoordPrecision precision) const; void Init(WebKit::WebGraphicsContext3D*, unsigned program, |