Bug 1406230 - Check for APPLE_fence/APPLE_texture_range/APPLE_client_storage extensions, r?mattwoodrow
MozReview-Commit-ID: Ips3QrguVfX
--- a/gfx/layers/opengl/TextureHostOGL.cpp
+++ b/gfx/layers/opengl/TextureHostOGL.cpp
@@ -337,53 +337,63 @@ DirectMapTextureSource::Update(gfx::Data
return UpdateInternal(aSurface, aDestRegion, aSrcOffset, false);
}
bool
DirectMapTextureSource::Sync(bool aBlocking)
{
gl()->MakeCurrent();
if (!gl()->IsDestroyed()) {
- if (aBlocking) {
- gl()->fFinishObjectAPPLE(LOCAL_GL_TEXTURE, mTextureHandle);
+ if (gl()->IsExtensionSupported(GLContext::APPLE_fence)) {
+ if (aBlocking) {
+ gl()->fFinishObjectAPPLE(LOCAL_GL_TEXTURE, mTextureHandle);
+ } else {
+ return gl()->fTestObjectAPPLE(LOCAL_GL_TEXTURE, mTextureHandle);
+ }
} else {
- return gl()->fTestObjectAPPLE(LOCAL_GL_TEXTURE, mTextureHandle);
+ gl()->fFinish();
}
}
+
return true;
}
bool
DirectMapTextureSource::UpdateInternal(gfx::DataSourceSurface* aSurface,
nsIntRegion* aDestRegion,
gfx::IntPoint* aSrcOffset,
bool aInit)
{
gl()->MakeCurrent();
if (aInit) {
gl()->fGenTextures(1, &mTextureHandle);
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, mTextureHandle);
- gl()->fTexParameteri(LOCAL_GL_TEXTURE_2D,
- LOCAL_GL_TEXTURE_STORAGE_HINT_APPLE,
- LOCAL_GL_STORAGE_CACHED_APPLE);
+ if (gl()->IsExtensionSupported(GLContext::APPLE_texture_range)) {
+ gl()->fTexParameteri(LOCAL_GL_TEXTURE_2D,
+ LOCAL_GL_TEXTURE_STORAGE_HINT_APPLE,
+ LOCAL_GL_STORAGE_CACHED_APPLE);
+ }
gl()->fTexParameteri(LOCAL_GL_TEXTURE_2D,
LOCAL_GL_TEXTURE_WRAP_S,
LOCAL_GL_CLAMP_TO_EDGE);
gl()->fTexParameteri(LOCAL_GL_TEXTURE_2D,
LOCAL_GL_TEXTURE_WRAP_T,
LOCAL_GL_CLAMP_TO_EDGE);
}
MOZ_ASSERT(mTextureHandle);
// APPLE_client_storage
- gl()->fPixelStorei(LOCAL_GL_UNPACK_CLIENT_STORAGE_APPLE, LOCAL_GL_TRUE);
+ bool hasStorage = gl()->IsExtensionSupported(GLContext::APPLE_client_storage);
+ if (hasStorage) {
+ gl()->fPixelStorei(LOCAL_GL_UNPACK_CLIENT_STORAGE_APPLE, LOCAL_GL_TRUE);
+ }
nsIntRegion destRegion = aDestRegion ? *aDestRegion
: IntRect(0, 0,
aSurface->GetSize().width,
aSurface->GetSize().height);
gfx::IntPoint srcPoint = aSrcOffset ? *aSrcOffset
: gfx::IntPoint(0, 0);
mFormat = gl::UploadSurfaceToTexture(gl(),
@@ -392,17 +402,19 @@ DirectMapTextureSource::UpdateInternal(g
mTextureHandle,
aSurface->GetSize(),
nullptr,
aInit,
srcPoint,
LOCAL_GL_TEXTURE0,
LOCAL_GL_TEXTURE_2D);
- gl()->fPixelStorei(LOCAL_GL_UNPACK_CLIENT_STORAGE_APPLE, LOCAL_GL_FALSE);
+ if (hasStorage) {
+ gl()->fPixelStorei(LOCAL_GL_UNPACK_CLIENT_STORAGE_APPLE, LOCAL_GL_FALSE);
+ }
return true;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// SurfaceTextureHost
#ifdef MOZ_WIDGET_ANDROID