aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2016-12-12 15:33:30 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-12-13 14:28:53 +0000
commit941e7e2c9567ab1d8a3b2d1b0e3db71ee5eb75c9 (patch)
tree7f0ad6c5b2c3772d2c83be545fe04c53044746bd /src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
parent3dc73f3596d93a89f71b0c7e96d5d63dafeaf378 (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.cpp44
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 {