Index: src/gpu/gl/GrGLCaps.cpp |
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp |
index 8474873ffff5d937f5edc2084e67e0bc5002ac17..6ee3bb527e610f422c1e45652254435655dca88b 100644 |
--- a/src/gpu/gl/GrGLCaps.cpp |
+++ b/src/gpu/gl/GrGLCaps.cpp |
@@ -22,7 +22,6 @@ void GrGLCaps::reset() { |
fStencilFormats.reset(); |
fStencilVerifiedColorConfigs.reset(); |
fMSFBOType = kNone_MSFBOType; |
- fFBFetchType = kNone_FBFetchType; |
fInvalidateFBType = kNone_InvalidateFBType; |
fLATCAlias = kLATC_LATCAlias; |
fMapBufferType = kNone_MapBufferType; |
@@ -48,6 +47,9 @@ void GrGLCaps::reset() { |
fIsCoreProfile = false; |
fFullClearIsFree = false; |
fDropsTileOnZeroDivide = false; |
+ fFBFetchSupport = false; |
+ fFBFetchColorName = NULL; |
+ fFBFetchExtensionString = NULL; |
} |
GrGLCaps::GrGLCaps(const GrGLCaps& caps) : GrDrawTargetCaps() { |
@@ -65,7 +67,6 @@ GrGLCaps& GrGLCaps::operator= (const GrGLCaps& caps) { |
fMaxFragmentTextureUnits = caps.fMaxFragmentTextureUnits; |
fMaxFixedFunctionTextureCoords = caps.fMaxFixedFunctionTextureCoords; |
fMSFBOType = caps.fMSFBOType; |
- fFBFetchType = caps.fFBFetchType; |
fInvalidateFBType = caps.fInvalidateFBType; |
fMapBufferType = caps.fMapBufferType; |
fRGBA8RenderbufferSupport = caps.fRGBA8RenderbufferSupport; |
@@ -86,6 +87,9 @@ GrGLCaps& GrGLCaps::operator= (const GrGLCaps& caps) { |
fIsCoreProfile = caps.fIsCoreProfile; |
fFullClearIsFree = caps.fFullClearIsFree; |
fDropsTileOnZeroDivide = caps.fDropsTileOnZeroDivide; |
+ fFBFetchSupport = caps.fFBFetchSupport; |
+ fFBFetchColorName = caps.fFBFetchColorName; |
+ fFBFetchExtensionString = caps.fFBFetchExtensionString; |
return *this; |
} |
@@ -233,9 +237,19 @@ bool GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { |
if (kGLES_GrGLStandard == standard) { |
if (ctxInfo.hasExtension("GL_EXT_shader_framebuffer_fetch")) { |
- fFBFetchType = kEXT_FBFetchType; |
+ fFBFetchSupport = true; |
+ fFBFetchColorName = "gl_LastFragData[0]"; |
+ fFBFetchExtensionString = "GL_EXT_shader_framebuffer_fetch"; |
} else if (ctxInfo.hasExtension("GL_NV_shader_framebuffer_fetch")) { |
- fFBFetchType = kNV_FBFetchType; |
+ fFBFetchSupport = true; |
+ fFBFetchColorName = "gl_LastFragData[0]"; |
+ fFBFetchExtensionString = "GL_NV_shader_framebuffer_fetch"; |
+ } else if (ctxInfo.hasExtension("GL_ARM_shader_framebuffer_fetch")) { |
+ // The arm extension also requires an additional flag which we will set onResetContext |
+ // This is all temporary. |
+ fFBFetchSupport = true; |
+ fFBFetchColorName = "gl_LastFragColorARM"; |
+ fFBFetchExtensionString = "GL_ARM_shader_framebuffer_fetch"; |
} |
} |
@@ -335,7 +349,8 @@ bool GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) { |
fGpuTracingSupport = ctxInfo.hasExtension("GL_EXT_debug_marker"); |
- fDstReadInShaderSupport = kNone_FBFetchType != fFBFetchType; |
+ // For now these two are equivalent but we could have dst read in shader via some other method |
+ fDstReadInShaderSupport = fFBFetchSupport; |
// Disable scratch texture reuse on Mali and Adreno devices |
fReuseScratchTextures = kARM_GrGLVendor != ctxInfo.vendor() && |
@@ -775,16 +790,6 @@ SkString GrGLCaps::dump() const { |
GR_STATIC_ASSERT(6 == kES_EXT_MsToTexture_MSFBOType); |
GR_STATIC_ASSERT(SK_ARRAY_COUNT(kMSFBOExtStr) == kLast_MSFBOType + 1); |
- static const char* kFBFetchTypeStr[] = { |
- "None", |
- "EXT", |
- "NV", |
- }; |
- GR_STATIC_ASSERT(0 == kNone_FBFetchType); |
- GR_STATIC_ASSERT(1 == kEXT_FBFetchType); |
- GR_STATIC_ASSERT(2 == kNV_FBFetchType); |
- GR_STATIC_ASSERT(SK_ARRAY_COUNT(kFBFetchTypeStr) == kLast_FBFetchType + 1); |
- |
static const char* kInvalidateFBTypeStr[] = { |
"None", |
"Discard", |
@@ -809,7 +814,7 @@ SkString GrGLCaps::dump() const { |
r.appendf("Core Profile: %s\n", (fIsCoreProfile ? "YES" : "NO")); |
r.appendf("MSAA Type: %s\n", kMSFBOExtStr[fMSFBOType]); |
- r.appendf("FB Fetch Type: %s\n", kFBFetchTypeStr[fFBFetchType]); |
+ r.appendf("FB Fetch Support: %s\n", (fFBFetchSupport ? "YES" : "NO")); |
r.appendf("Invalidate FB Type: %s\n", kInvalidateFBTypeStr[fInvalidateFBType]); |
r.appendf("Map Buffer Type: %s\n", kMapBufferTypeStr[fMapBufferType]); |
r.appendf("Max FS Uniform Vectors: %d\n", fMaxFragmentUniformVectors); |