Always use high precision on NDS transform
authorjoel.liang <joel.liang@arm.com>
Mon, 7 Dec 2015 18:33:00 +0000 (10:33 -0800)
committerCommit bot <commit-bot@chromium.org>
Mon, 7 Dec 2015 18:33:00 +0000 (10:33 -0800)
To fix the Chrome fillRect issue on Galaxy S6.
We should use high precision for position related calculation.

BUG=chromium:552999

Review URL: https://codereview.chromium.org/1500393002

src/gpu/gl/GrGLCaps.cpp
src/gpu/glsl/GrGLSLCaps.cpp
src/gpu/glsl/GrGLSLCaps.h
src/gpu/glsl/GrGLSLVertexShaderBuilder.cpp

index 6c0ee19584c22775817176b4eb871261c7f62ec7..a7a1e8dec1d34bdb87b0506b79747e2aa503a543 100644 (file)
@@ -588,9 +588,6 @@ void GrGLCaps::initGLSL(const GrGLContextInfo& ctxInfo) {
     // from our GrTextureDomain processor.
     glslCaps->fCanUseAnyFunctionInShader = kImagination_GrGLVendor != ctxInfo.vendor();
 
-    glslCaps->fForceHighPrecisionNDSTransform = kARM_GrGLVendor == ctxInfo.vendor() ||
-                                                kPowerVR54x_GrGLRenderer == ctxInfo.renderer();
-
     glslCaps->fVersionDeclString = get_glsl_version_decl_string(standard, glslCaps->fGLSLGeneration,
                                                                 fIsCoreProfile);
 
index 191fb567e6d87b52247b5cdc4bf4863ab34b3f84..cf41f8e765e8e3bb1049711d6e6d76d50d9138a6 100755 (executable)
@@ -21,7 +21,6 @@ GrGLSLCaps::GrGLSLCaps(const GrContextOptions& options) {
     fBindlessTextureSupport = false;
     fUsesPrecisionModifiers = false;
     fCanUseAnyFunctionInShader = true;
-    fForceHighPrecisionNDSTransform = false;
     fCanUseMinAndAbsTogether = true;
     fMustForceNegatedAtanParamToFloat = false;
     fVersionDeclString = nullptr;
@@ -59,8 +58,6 @@ SkString GrGLSLCaps::dump() const {
     r.appendf("Bindless texture support: %s\n", (fBindlessTextureSupport ? "YES" : "NO"));
     r.appendf("Uses precision modifiers: %s\n", (fUsesPrecisionModifiers ? "YES" : "NO"));
     r.appendf("Can use any() function: %s\n", (fCanUseAnyFunctionInShader ? "YES" : "NO"));
-    r.appendf("Force high precision on NDS transform: %s\n", (fForceHighPrecisionNDSTransform ?
-                                                              "YES" : "NO"));
     r.appendf("Can use min() and abs() together: %s\n", (fCanUseMinAndAbsTogether ? "YES" : "NO"));
     r.appendf("Must force negated atan param to float: %s\n", (fMustForceNegatedAtanParamToFloat ?
                                                                "YES" : "NO"));
index 9924773139c0610beae8caa3b5f725453f6c9bf7..21c59e7b162f880c2074e8317fd13bdaba6c7162 100755 (executable)
@@ -72,8 +72,6 @@ public:
     // Returns whether we can use the glsl funciton any() in our shader code.
     bool canUseAnyFunctionInShader() const { return fCanUseAnyFunctionInShader; }
 
-    bool forceHighPrecisionNDSTransform() const { return fForceHighPrecisionNDSTransform; }
-
     bool canUseMinAndAbsTogether() const { return fCanUseMinAndAbsTogether; }
 
     bool mustForceNegatedAtanParamToFloat() const { return fMustForceNegatedAtanParamToFloat; }
@@ -133,7 +131,6 @@ private:
     bool fBindlessTextureSupport : 1;
     bool fUsesPrecisionModifiers : 1;
     bool fCanUseAnyFunctionInShader : 1;
-    bool fForceHighPrecisionNDSTransform : 1;
 
     // Used for specific driver bug work arounds
     bool fCanUseMinAndAbsTogether : 1;
index 0504bbb354b2244de9e7f1778146d4d75dbe37d4..005b2725fffc8c412f283e551090bb32c0070809 100644 (file)
@@ -18,13 +18,8 @@ GrGLSLVertexBuilder::GrGLSLVertexBuilder(GrGLSLProgramBuilder* program)
 void GrGLSLVertexBuilder::transformToNormalizedDeviceSpace(const GrShaderVar& posVar) {
     SkASSERT(!fRtAdjustName);
 
-    GrSLPrecision precision = kDefault_GrSLPrecision;
-    if (fProgramBuilder->glslCaps()->forceHighPrecisionNDSTransform()) {
-        precision = kHigh_GrSLPrecision;
-    }
-
     // setup RT Uniform
-    fProgramBuilder->addRTAdjustmentUniform(precision,
+    fProgramBuilder->addRTAdjustmentUniform(kHigh_GrSLPrecision,
                                             fProgramBuilder->rtAdjustment(),
                                             &fRtAdjustName);
     if (this->getProgramBuilder()->desc().header().fSnapVerticesToPixelCenters) {