aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-05-27 18:52:24 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-05-27 18:52:24 +0000
commit420b2ff26cbbb3a7585810fbba7a4b95fd577ca6 (patch)
tree556d96d08181ccd0c0a4dacd8c92befb1fda2d9b /src/gpu
parentfdf2c55fe10175e079bf9b76b208c7f93eac9bb3 (diff)
Add compressed texture capabilities for GPU devices
BUG=skia: Committed: http://code.google.com/p/skia/source/detail?r=14880 R=bsalomon@google.com, robertphillips@google.com Author: krajcevski@google.com Review URL: https://codereview.chromium.org/292323003 git-svn-id: http://skia.googlecode.com/svn/trunk@14901 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu')
-rw-r--r--src/gpu/GrDrawTarget.cpp20
-rw-r--r--src/gpu/GrDrawTargetCaps.h7
-rw-r--r--src/gpu/gl/GrGLCaps.cpp34
-rw-r--r--src/gpu/gl/GrGLCaps.h2
4 files changed, 63 insertions, 0 deletions
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index 6d8d18463a..a5b6ac6f03 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -1029,6 +1029,7 @@ void GrDrawTargetCaps::reset() {
fMaxSampleCount = 0;
memset(fConfigRenderSupport, 0, sizeof(fConfigRenderSupport));
+ memset(fCompressedFormatSupport, 0, sizeof(fCompressedFormatSupport));
}
GrDrawTargetCaps& GrDrawTargetCaps::operator=(const GrDrawTargetCaps& other) {
@@ -1054,6 +1055,8 @@ GrDrawTargetCaps& GrDrawTargetCaps::operator=(const GrDrawTargetCaps& other) {
fMaxSampleCount = other.fMaxSampleCount;
memcpy(fConfigRenderSupport, other.fConfigRenderSupport, sizeof(fConfigRenderSupport));
+ memcpy(fCompressedFormatSupport, other.fCompressedFormatSupport,
+ sizeof(fCompressedFormatSupport));
return *this;
}
@@ -1129,5 +1132,22 @@ SkString GrDrawTargetCaps::dump() const {
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;
}
diff --git a/src/gpu/GrDrawTargetCaps.h b/src/gpu/GrDrawTargetCaps.h
index 648b5c36be..db2b090512 100644
--- a/src/gpu/GrDrawTargetCaps.h
+++ b/src/gpu/GrDrawTargetCaps.h
@@ -72,6 +72,11 @@ public:
return fConfigRenderSupport[config][withMSAA];
}
+ bool compressedTextureSupport(GrCompressedFormat format) const {
+ SkASSERT(kGrCompressedFormatCount > format);
+ return fCompressedFormatSupport[format];
+ }
+
protected:
bool f8BitPaletteSupport : 1;
bool fNPOTTextureTileSupport : 1;
@@ -97,6 +102,8 @@ protected:
// The first entry for each config is without msaa and the second is with.
bool fConfigRenderSupport[kGrPixelConfigCnt][2];
+ bool fCompressedFormatSupport[kGrCompressedFormatCount];
+
typedef SkRefCnt INHERITED;
};
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index f577e9d740..6523e03233 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -369,6 +369,8 @@ bool GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) {
this->initConfigRenderableTable(ctxInfo);
+ this->initCompressedTextureSupport(ctxInfo);
+
return true;
}
@@ -458,6 +460,38 @@ void GrGLCaps::initConfigRenderableTable(const GrGLContextInfo& ctxInfo) {
}
}
+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 {
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
index ea0f41245d..c2d808e4a5 100644
--- a/src/gpu/gl/GrGLCaps.h
+++ b/src/gpu/gl/GrGLCaps.h
@@ -313,6 +313,8 @@ private:
// 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;