aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar reed <reed@chromium.org>2014-07-03 07:54:08 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-07-03 07:54:08 -0700
commit2fe7b466c15fab6593da3bf32d3c3dbdf3917c01 (patch)
tree61415c81ff975bb2581904fc2ddcfdd9dda6a73a
parente1085e0381a4abfe440e664c1a0669f3676a8092 (diff)
Revert of Caching the result of readPixelsSupported (https://codereview.chromium.org/364193004/)
Reason for revert: appears to crash GM on Ubuntu and Win8 http://108.170.220.120:10117/builders/Test-Ubuntu12-ShuttleA-GTX660-x86-Release/builds/1237/steps/GenerateGMs/logs/stdio Original issue's description: > Caching the result of readPixelsSupported > > The call was calling GR_GL_GetIntegerv 2 times for each readPixels > and thus was causing a loss of performance > > (resubmit of issue 344793008) > > Benchmark url: http://packages.gkny.fr/tst/index.html > > BUG=skia:2681 > > Committed: https://skia.googlesource.com/skia/+/753a2964afe5661ce9b2a8ca77ca9d0aabd3173c R=junov@chromium.org, piotaixr@chromium.org TBR=junov@chromium.org, piotaixr@chromium.org NOTREECHECKS=true NOTRY=true BUG=skia:2681 Author: reed@chromium.org Review URL: https://codereview.chromium.org/367323003
-rw-r--r--src/gpu/gl/GrGLCaps.cpp37
-rw-r--r--src/gpu/gl/GrGLCaps.h40
-rw-r--r--src/gpu/gl/GrGpuGL.cpp14
3 files changed, 9 insertions, 82 deletions
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 2e85eb5adc..8f2d4c1297 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -504,7 +504,7 @@ void GrGLCaps::initConfigTexturableTable(const GrGLContextInfo& ctxInfo, const G
// First check version for support
if (kGL_GrGLStandard == standard) {
hasETC1 = hasCompressTex2D &&
- (version >= GR_GL_VER(4, 3) ||
+ (version >= GR_GL_VER(4, 3) ||
ctxInfo.hasExtension("GL_ARB_ES3_compatibility"));
} else {
hasETC1 = hasCompressTex2D &&
@@ -560,7 +560,7 @@ void GrGLCaps::initConfigTexturableTable(const GrGLContextInfo& ctxInfo, const G
}
}
-bool GrGLCaps::doReadPixelsSupported(const GrGLInterface* intf,
+bool GrGLCaps::readPixelsSupported(const GrGLInterface* intf,
GrGLenum format,
GrGLenum type) const {
if (GR_GL_RGBA == format && GR_GL_UNSIGNED_BYTE == type) {
@@ -589,25 +589,6 @@ bool GrGLCaps::doReadPixelsSupported(const GrGLInterface* intf,
return (GrGLenum)otherFormat == format && (GrGLenum)otherType == type;
}
-bool GrGLCaps::readPixelsSupported(const GrGLInterface* intf,
- GrGLenum format,
- GrGLenum type,
- GrGLenum currFboFormat) const {
-
- ReadPixelsSupportedFormatsKey key = {format, type, currFboFormat};
-
- ReadPixelsSupportedFormats* cachedValue = fReadPixelsSupportedCache.find(key);
-
- if (cachedValue == NULL) {
- bool value = doReadPixelsSupported(intf, format, type);
- cachedValue = new ReadPixelsSupportedFormats(key, value);
-
- fReadPixelsSupportedCache.add(cachedValue);
- }
-
- return cachedValue->value();
-}
-
void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) {
fMSFBOType = kNone_MSFBOType;
@@ -836,17 +817,3 @@ SkString GrGLCaps::dump() const {
r.appendf("Drops tile on zero divide: %s\n", (fDropsTileOnZeroDivide ? "YES" : "NO"));
return r;
}
-
-//Computes a hash based on the three values in the key struct
-// bits 31------------15---------7---------------0
-// fFormat(15:0) fType(7:0) fFboFormat(7:0)
-uint32_t GrGLCaps::ReadPixelsSupportedFormats::Hash(const ReadPixelsSupportedFormatsKey& key) {
- // fFormat has different values like 0x190X or 0x8XXX: 16 bits are required
- uint32_t hash = ((key.fFormat & 0xFFFF) << 16);
- // fType is 0x14XX: 8 lower bits are enough
- hash |= ((key.fType & 0xFF) << 8);
- // fFboFormat is enum GrPixelConfig which has less than 15 values: 8 bits OK
- hash |= (key.fFboFormat & 0xFF);
-
- return hash;
-}
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
index 24bf83afbb..ccf04fd7ba 100644
--- a/src/gpu/gl/GrGLCaps.h
+++ b/src/gpu/gl/GrGLCaps.h
@@ -13,7 +13,6 @@
#include "GrGLStencilBuffer.h"
#include "SkTArray.h"
#include "SkTDArray.h"
-#include "SkTDynamicHash.h"
class GrGLContextInfo;
@@ -254,8 +253,7 @@ public:
/// Does ReadPixels support the provided format/type combo?
bool readPixelsSupported(const GrGLInterface* intf,
GrGLenum format,
- GrGLenum type,
- GrGLenum currFboFormat) const;
+ GrGLenum type) const;
bool isCoreProfile() const { return fIsCoreProfile; }
@@ -326,10 +324,6 @@ private:
void initConfigRenderableTable(const GrGLContextInfo&);
void initConfigTexturableTable(const GrGLContextInfo&, const GrGLInterface*);
- bool doReadPixelsSupported(const GrGLInterface* intf,
- GrGLenum format,
- GrGLenum type) const;
-
// tracks configs that have been verified to pass the FBO completeness when
// used as a color attachment
VerifiedColorConfigs fVerifiedColorConfigs;
@@ -370,38 +364,6 @@ private:
bool fFullClearIsFree : 1;
bool fDropsTileOnZeroDivide : 1;
- struct ReadPixelsSupportedFormatsKey {
- GrGLenum fFormat;
- GrGLenum fType;
- GrGLenum fFboFormat;
-
- bool operator==(const ReadPixelsSupportedFormatsKey& rhs) const {
- return fFormat == rhs.fFormat
- && fType == rhs.fType
- && fFboFormat == rhs.fFboFormat;
- }
- };
-
- class ReadPixelsSupportedFormats {
- public:
- ReadPixelsSupportedFormats(ReadPixelsSupportedFormatsKey key,
- bool value)
- :fKey(key), fValue(value) {
- }
-
- static const ReadPixelsSupportedFormatsKey& GetKey(const ReadPixelsSupportedFormats& element) {
- return element.fKey;
- }
- static uint32_t Hash(const ReadPixelsSupportedFormatsKey&);
-
- bool value() const { return fValue; }
- private:
- ReadPixelsSupportedFormatsKey fKey;
- bool fValue;
- };
-
- mutable SkTDynamicHash<ReadPixelsSupportedFormats, ReadPixelsSupportedFormatsKey> fReadPixelsSupportedCache;
-
typedef GrDrawTargetCaps INHERITED;
};
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
index 73938b8374..2eb76a5aff 100644
--- a/src/gpu/gl/GrGpuGL.cpp
+++ b/src/gpu/gl/GrGpuGL.cpp
@@ -170,6 +170,8 @@ GrGpuGL::~GrGpuGL() {
}
///////////////////////////////////////////////////////////////////////////////
+
+
GrPixelConfig GrGpuGL::preferredReadPixelsConfig(GrPixelConfig readConfig,
GrPixelConfig surfaceConfig) const {
if (GR_GL_RGBA_8888_PIXEL_OPS_SLOW && kRGBA_8888_GrPixelConfig == readConfig) {
@@ -180,13 +182,9 @@ GrPixelConfig GrGpuGL::preferredReadPixelsConfig(GrPixelConfig readConfig,
// Mesa 3D takes a slow path on when reading back BGRA from an RGBA surface and vice-versa.
// Perhaps this should be guarded by some compiletime or runtime check.
return surfaceConfig;
- } else if (readConfig == kBGRA_8888_GrPixelConfig
- && this->glCaps().readPixelsSupported(
- this->glInterface(),
- GR_GL_BGRA,
- GR_GL_UNSIGNED_BYTE,
- fHWBoundRenderTarget->config()
- )) {
+ } else if (readConfig == kBGRA_8888_GrPixelConfig &&
+ !this->glCaps().readPixelsSupported(this->glInterface(),
+ GR_GL_BGRA, GR_GL_UNSIGNED_BYTE)) {
return kRGBA_8888_GrPixelConfig;
} else {
return readConfig;
@@ -715,7 +713,7 @@ bool GrGpuGL::uploadTexData(const GrGLTexture::Desc& desc,
}
// TODO: This function is using a lot of wonky semantics like, if width == -1
-// then set width = desc.fWdith ... blah. A better way to do it might be to
+// then set width = desc.fWdith ... blah. A better way to do it might be to
// create a CompressedTexData struct that takes a desc/ptr and figures out
// the proper upload semantics. Then users can construct this function how they
// see fit if they want to go against the "standard" way to do it.