diff options
author | 2016-12-12 15:33:30 -0500 | |
---|---|---|
committer | 2016-12-13 14:28:53 +0000 | |
commit | 941e7e2c9567ab1d8a3b2d1b0e3db71ee5eb75c9 (patch) | |
tree | 7f0ad6c5b2c3772d2c83be545fe04c53044746bd /src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp | |
parent | 3dc73f3596d93a89f71b0c7e96d5d63dafeaf378 (diff) |
re-land of added sk_FragCoord support to skslc
BUG=skia:
Change-Id: Ifac1aa39839058787ad1794200c3dbb93c147a69
Reviewed-on: https://skia-review.googlesource.com/5850
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp')
-rw-r--r-- | src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp | 44 |
1 files changed, 1 insertions, 43 deletions
diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp index 8355f1de7d..7ef734876c 100644 --- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp +++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp @@ -132,49 +132,7 @@ SkString GrGLSLFragmentShaderBuilder::ensureCoords2D(const GrShaderVar& coords) const char* GrGLSLFragmentShaderBuilder::fragmentPosition() { SkDEBUGCODE(fUsedProcessorFeatures |= GrProcessor::kFragmentPosition_RequiredFeature;) - - const GrShaderCaps* shaderCaps = fProgramBuilder->shaderCaps(); - // We only declare "gl_FragCoord" when we're in the case where we want to use layout qualifiers - // to reverse y. Otherwise it isn't necessary and whether the "in" qualifier appears in the - // declaration varies in earlier GLSL specs. So it is simpler to omit it. - if (kTopLeft_GrSurfaceOrigin == this->getSurfaceOrigin()) { - fSetupFragPosition = true; - return "gl_FragCoord"; - } else if (const char* extension = shaderCaps->fragCoordConventionsExtensionString()) { - if (!fSetupFragPosition) { - if (shaderCaps->generation() < k150_GrGLSLGeneration) { - this->addFeature(1 << kFragCoordConventions_GLSLPrivateFeature, - extension); - } - fInputs.push_back().set(kVec4f_GrSLType, - "gl_FragCoord", - GrShaderVar::kIn_TypeModifier, - kDefault_GrSLPrecision, - "origin_upper_left"); - fSetupFragPosition = true; - } - return "gl_FragCoord"; - } else { - static const char* kTempName = "tmpXYFragCoord"; - static const char* kCoordName = "fragCoordYDown"; - if (!fSetupFragPosition) { - const char* rtHeightName; - - fProgramBuilder->addRTHeightUniform("RTHeight", &rtHeightName); - - // The Adreno compiler seems to be very touchy about access to "gl_FragCoord". - // Accessing glFragCoord.zw can cause a program to fail to link. Additionally, - // depending on the surrounding code, accessing .xy with a uniform involved can - // do the same thing. Copying gl_FragCoord.xy into a temp vec2 beforehand - // (and only accessing .xy) seems to "fix" things. - this->codePrependf("\thighp vec4 %s = vec4(%s.x, %s - %s.y, 1.0, 1.0);\n", kCoordName, - kTempName, rtHeightName, kTempName); - this->codePrependf("highp vec2 %s = gl_FragCoord.xy;", kTempName); - fSetupFragPosition = true; - } - SkASSERT(fProgramBuilder->fUniformHandles.fRTHeightUni.isValid()); - return kCoordName; - } + return "sk_FragCoord"; } const char* GrGLSLFragmentShaderBuilder::distanceVectorName() const { |