Index: src/gpu/gl/GrGLShaderBuilder.cpp |
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp |
index 98d7e4c97e80e486b9e837211fdff8a2e2939e0e..d15c974b2497f3c2a77c69d4b321056c5df3d383 100644 |
--- a/src/gpu/gl/GrGLShaderBuilder.cpp |
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp |
@@ -112,7 +112,8 @@ GrGLShaderBuilder::GrGLShaderBuilder(const GrGLContextInfo& ctxInfo, |
, fSetupFragPosition(false) |
, fRTHeightUniform(GrGLUniformManager::kInvalidUniformHandle) |
, fDstCopyTopLeftUniform (GrGLUniformManager::kInvalidUniformHandle) |
- , fDstCopyScaleUniform (GrGLUniformManager::kInvalidUniformHandle) { |
+ , fDstCopyScaleUniform (GrGLUniformManager::kInvalidUniformHandle) |
+ , fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.fFragPos) { |
fPositionVar = &fVSAttrs.push_back(); |
fPositionVar->set(kVec2f_GrSLType, GrGLShaderVar::kAttribute_TypeModifier, "aPosition"); |
@@ -351,6 +352,14 @@ GrGLShaderBuilder::DstReadKey GrGLShaderBuilder::KeyForDstRead(const GrTexture* |
return static_cast<DstReadKey>(key); |
} |
robertphillips
2013/05/10 13:53:58
// Note: this method only be called if the fragmen
bsalomon
2013/05/13 15:16:49
done (in the header)
|
+GrGLShaderBuilder::FragPosKey GrGLShaderBuilder::KeyForFragmentPosition(const GrRenderTarget* dst, |
+ const GrGLCaps&) { |
+ return kTopLeft_GrSurfaceOrigin == dst->origin() ? |
robertphillips
2013/05/10 13:53:58
rm space?
bsalomon
2013/05/13 15:16:49
Changed to if/else.
|
+ kTopLeftFragPosRead_FragPosKey : |
+ kBottomLeftFragPosRead_FragPosKey; |
+} |
+ |
+ |
const GrGLenum* GrGLShaderBuilder::GetTexParamSwizzle(GrPixelConfig config, const GrGLCaps& caps) { |
if (caps.textureSwizzleSupport() && GrPixelConfigIsAlphaOnly(config)) { |
if (caps.textureRedSupport()) { |
@@ -473,8 +482,16 @@ const char* GrGLShaderBuilder::fragmentPosition() { |
return ""; |
} |
} |
-#if 1 |
- if (fCtxInfo.caps()->fragCoordConventionsSupport()) { |
+ if (fTopLeftFragPosRead) { |
+ if (!fSetupFragPosition) { |
+ fFSInputs.push_back().set(kVec4f_GrSLType, |
+ GrGLShaderVar::kIn_TypeModifier, |
+ "gl_FragCoord", |
+ GrGLShaderVar::kDefault_Precision); |
+ fSetupFragPosition = true; |
+ } |
+ return "gl_FragCoord"; |
+ } else if (fCtxInfo.caps()->fragCoordConventionsSupport()) { |
if (!fSetupFragPosition) { |
SkAssertResult(this->enablePrivateFeature(kFragCoordConventions_GLSLPrivateFeature)); |
fFSInputs.push_back().set(kVec4f_GrSLType, |
@@ -506,18 +523,6 @@ const char* GrGLShaderBuilder::fragmentPosition() { |
GrAssert(GrGLUniformManager::kInvalidUniformHandle != fRTHeightUniform); |
return kCoordName; |
} |
-#else |
- // This is the path we'll need to use once we have support for TopLeft |
- // render targets. |
- if (!fSetupFragPosition) { |
- fFSInputs.push_back().set(kVec4f_GrSLType, |
- GrGLShaderVar::kIn_TypeModifier, |
- "gl_FragCoord", |
- GrGLShaderVar::kDefault_Precision); |
- fSetupFragPosition = true; |
- } |
- return "gl_FragCoord"; |
-#endif |
} |