(https://codereview.chromium.org/
307543002/)
Reason for revert:
Re-landing the original CL, because the revert didn't fix things. See http://skbug.com/2608 ('RunDecodingTests failing on multiple platforms')
Original issue's description:
> Revert of Add compressed texture capabilities for GPU devices (https://codereview.chromium.org/
292323003/)
>
> Reason for revert:
> RunDecodingTests failing on multiple platforms. Please use trybots to validate and re-land.
>
> Original issue's description:
> > Add compressed texture capabilities for GPU devices
> >
> > BUG=skia:
> >
> > Committed: http://code.google.com/p/skia/source/detail?r=14880
> >
> > Committed: http://code.google.com/p/skia/source/detail?r=14901
>
> TBR=bsalomon@google.com,robertphillips@google.com,krajcevski@google.com
> NOTREECHECKS=true
> NOTRY=true
> BUG=skia:
>
> Committed: http://code.google.com/p/skia/source/detail?r=14902
R=bsalomon@google.com, robertphillips@google.com, krajcevski@google.com
TBR=bsalomon@google.com, krajcevski@google.com, robertphillips@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Author: epoger@google.com
Review URL: https://codereview.chromium.org/
302553008
git-svn-id: http://skia.googlecode.com/svn/trunk@14903
2bbb7eff-a529-9590-31e7-
b0007b416f81
kALL_GrGLBackendState = 0xffff
};
+/**
+ * The compressed texture formats that may be supported by the renderer.
+ * Make sure to check for the required capabilities using
+ * GrDrawTargetCaps::compressedTextureSupport
+ */
+enum GrCompressedFormat {
+ kETC1_GrCompressedFormat,
+ kETC2_GrCompressedFormat,
+ kDXT1_GrCompressedFormat,
+
+ kLast_GrCompressedFormat = kDXT1_GrCompressedFormat
+};
+static const int kGrCompressedFormatCount = kLast_GrCompressedFormat + 1;
+
/**
* This value translates to reseting all the context state for any backend.
*/
fMaxSampleCount = 0;
memset(fConfigRenderSupport, 0, sizeof(fConfigRenderSupport));
+ memset(fCompressedFormatSupport, 0, sizeof(fCompressedFormatSupport));
}
GrDrawTargetCaps& GrDrawTargetCaps::operator=(const GrDrawTargetCaps& other) {
fMaxSampleCount = other.fMaxSampleCount;
memcpy(fConfigRenderSupport, other.fConfigRenderSupport, sizeof(fConfigRenderSupport));
+ memcpy(fCompressedFormatSupport, other.fCompressedFormatSupport,
+ sizeof(fCompressedFormatSupport));
return *this;
}
gNY[fConfigRenderSupport[i][1]]);
}
}
+
+ static const char* kCompressedFormatNames[] = {
+ "ETC1", // kETC1_GrCompressedFormat
+ "ETC2", // kETC2_GrCompressedFormat,
+ "DXT1", // kDXT1_GrCompressedFormat,
+ };
+ GR_STATIC_ASSERT(0 == kETC1_GrCompressedFormat);
+ GR_STATIC_ASSERT(1 == kETC2_GrCompressedFormat);
+ GR_STATIC_ASSERT(2 == kDXT1_GrCompressedFormat);
+ GR_STATIC_ASSERT(SK_ARRAY_COUNT(kCompressedFormatNames) == kGrCompressedFormatCount);
+
+ for (size_t i = 0; i < SK_ARRAY_COUNT(kCompressedFormatNames); ++i) {
+ r.appendf("%s Compressed Texture Support: %s\n",
+ kCompressedFormatNames[i],
+ gNY[fCompressedFormatSupport[i]]);
+ }
+
return r;
}
return fConfigRenderSupport[config][withMSAA];
}
+ bool compressedTextureSupport(GrCompressedFormat format) const {
+ SkASSERT(kGrCompressedFormatCount > format);
+ return fCompressedFormatSupport[format];
+ }
+
protected:
bool f8BitPaletteSupport : 1;
bool fNPOTTextureTileSupport : 1;
// The first entry for each config is without msaa and the second is with.
bool fConfigRenderSupport[kGrPixelConfigCnt][2];
+ bool fCompressedFormatSupport[kGrCompressedFormatCount];
+
typedef SkRefCnt INHERITED;
};
this->initConfigRenderableTable(ctxInfo);
+ this->initCompressedTextureSupport(ctxInfo);
+
return true;
}
}
}
+void GrGLCaps::initCompressedTextureSupport(const GrGLContextInfo &ctxInfo) {
+ GrGLStandard standard = ctxInfo.standard();
+ GrGLVersion version = ctxInfo.version();
+
+ // glCompressedTexImage2D is available on all OpenGL ES devices...
+ // however, it is only available on standard OpenGL after version 1.3
+ if (kGL_GrGLStandard == standard && version < GR_GL_VER(1, 3)) {
+ return;
+ }
+
+ // Check for ETC1
+ bool hasETC1 = false;
+
+ // First check version for support
+ if (kGL_GrGLStandard == standard) {
+ hasETC1 =
+ version >= GR_GL_VER(4, 3) ||
+ ctxInfo.hasExtension("GL_ARB_ES3_compatibility");
+ } else {
+ hasETC1 =
+ version >= GR_GL_VER(3, 0) ||
+ ctxInfo.hasExtension("GL_OES_compressed_ETC1_RGB8_texture") ||
+ // ETC2 is a superset of ETC1, so we can just check for that, too.
+ (ctxInfo.hasExtension("GL_OES_compressed_ETC2_RGB8_texture") &&
+ ctxInfo.hasExtension("GL_OES_compressed_ETC2_RGBA8_texture"));
+ }
+ fCompressedFormatSupport[kETC1_GrCompressedFormat] = hasETC1;
+
+ fCompressedFormatSupport[kETC2_GrCompressedFormat] = false;
+ fCompressedFormatSupport[kDXT1_GrCompressedFormat] = false;
+}
+
bool GrGLCaps::readPixelsSupported(const GrGLInterface* intf,
GrGLenum format,
GrGLenum type) const {
// This must be called after initFSAASupport().
void initConfigRenderableTable(const GrGLContextInfo&);
+ void initCompressedTextureSupport(const GrGLContextInfo &);
+
// tracks configs that have been verified to pass the FBO completeness when
// used as a color attachment
VerifiedColorConfigs fVerifiedColorConfigs;