diff options
author | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-05-13 18:50:25 +0000 |
---|---|---|
committer | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-05-13 18:50:25 +0000 |
commit | b515881446c303a50d9b2dd38b9163b4e5c625a2 (patch) | |
tree | 6e4ccafe63cc8b22cde839fc13011a2f7cb89ff4 /src/gpu/gl/GrGLShaderBuilder.cpp | |
parent | 8686be2fc30528167df99bcfc98ed3d9d88a76d4 (diff) |
Key shader on whether frag pos read is relative to top-left or bottom-left
R=robertphillips@google.com
Review URL: https://codereview.chromium.org/14633007
git-svn-id: http://skia.googlecode.com/svn/trunk@9113 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/gl/GrGLShaderBuilder.cpp')
-rw-r--r-- | src/gpu/gl/GrGLShaderBuilder.cpp | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp index 98d7e4c97e..ddcc61574c 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.fFragPosKey) { fPositionVar = &fVSAttrs.push_back(); fPositionVar->set(kVec2f_GrSLType, GrGLShaderVar::kAttribute_TypeModifier, "aPosition"); @@ -125,13 +126,13 @@ GrGLShaderBuilder::GrGLShaderBuilder(const GrGLContextInfo& ctxInfo, fLocalCoordsVar = fPositionVar; } // Emit code to read the dst copy textue if necessary. - if (kNoDstRead_DstReadKey != desc.fDstRead && + if (kNoDstRead_DstReadKey != desc.fDstReadKey && GrGLCaps::kNone_FBFetchType == ctxInfo.caps()->fbFetchType()) { - bool topDown = SkToBool(kTopLeftOrigin_DstReadKeyBit & desc.fDstRead); + bool topDown = SkToBool(kTopLeftOrigin_DstReadKeyBit & desc.fDstReadKey); const char* dstCopyTopLeftName; const char* dstCopyCoordScaleName; uint32_t configMask; - if (SkToBool(kUseAlphaConfig_DstReadKeyBit & desc.fDstRead)) { + if (SkToBool(kUseAlphaConfig_DstReadKeyBit & desc.fDstReadKey)) { configMask = kA_GrColorComponentFlag; } else { configMask = kRGBA_GrColorComponentFlags; @@ -351,6 +352,16 @@ GrGLShaderBuilder::DstReadKey GrGLShaderBuilder::KeyForDstRead(const GrTexture* return static_cast<DstReadKey>(key); } +GrGLShaderBuilder::FragPosKey GrGLShaderBuilder::KeyForFragmentPosition(const GrRenderTarget* dst, + const GrGLCaps&) { + if (kTopLeft_GrSurfaceOrigin == dst->origin()) { + return kTopLeftFragPosRead_FragPosKey; + } else { + return kBottomLeftFragPosRead_FragPosKey; + } +} + + const GrGLenum* GrGLShaderBuilder::GetTexParamSwizzle(GrPixelConfig config, const GrGLCaps& caps) { if (caps.textureSwizzleSupport() && GrPixelConfigIsAlphaOnly(config)) { if (caps.textureRedSupport()) { @@ -473,8 +484,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 +525,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 } |