Chromium Code Reviews| 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 |
| } |