summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/common/gpu/image_transport_surface_mac.cc9
-rw-r--r--content/common/gpu/texture_image_transport_surface.cc7
-rw-r--r--content/common/gpu/texture_image_transport_surface.h2
-rw-r--r--gpu/command_buffer/service/gl_surface_mock.h2
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc17
-rw-r--r--gpu/config/gpu_driver_bug_list_json.cc13
-rw-r--r--gpu/config/gpu_driver_bug_workaround_type.h2
-rw-r--r--ui/gl/gl_surface.cc18
-rw-r--r--ui/gl/gl_surface.h9
-rw-r--r--ui/gl/gl_surface_egl.cc9
-rw-r--r--ui/gl/gl_surface_egl.h2
-rw-r--r--ui/gl/gl_surface_glx.cc9
-rw-r--r--ui/gl/gl_surface_glx.h2
-rw-r--r--ui/gl/gl_surface_win.cc9
-rw-r--r--ui/gl/gl_surface_x11.cc9
15 files changed, 52 insertions, 67 deletions
diff --git a/content/common/gpu/image_transport_surface_mac.cc b/content/common/gpu/image_transport_surface_mac.cc
index 615c7d0..254d747 100644
--- a/content/common/gpu/image_transport_surface_mac.cc
+++ b/content/common/gpu/image_transport_surface_mac.cc
@@ -50,7 +50,7 @@ class IOSurfaceImageTransportSurface
virtual bool IsOffscreen() OVERRIDE;
virtual bool SwapBuffers() OVERRIDE;
virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
- virtual std::string GetExtensions() OVERRIDE;
+ virtual bool SupportsPostSubBuffer() OVERRIDE;
virtual gfx::Size GetSize() OVERRIDE;
virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE;
virtual unsigned int GetBackingFrameBufferObject() OVERRIDE;
@@ -281,11 +281,8 @@ bool IOSurfaceImageTransportSurface::PostSubBuffer(
return true;
}
-std::string IOSurfaceImageTransportSurface::GetExtensions() {
- std::string extensions = gfx::GLSurface::GetExtensions();
- extensions += extensions.empty() ? "" : " ";
- extensions += "GL_CHROMIUM_post_sub_buffer";
- return extensions;
+bool IOSurfaceImageTransportSurface::SupportsPostSubBuffer() {
+ return true;
}
gfx::Size IOSurfaceImageTransportSurface::GetSize() {
diff --git a/content/common/gpu/texture_image_transport_surface.cc b/content/common/gpu/texture_image_transport_surface.cc
index 3de0647..45ce615 100644
--- a/content/common/gpu/texture_image_transport_surface.cc
+++ b/content/common/gpu/texture_image_transport_surface.cc
@@ -268,11 +268,8 @@ bool TextureImageTransportSurface::PostSubBuffer(
return true;
}
-std::string TextureImageTransportSurface::GetExtensions() {
- std::string extensions = gfx::GLSurface::GetExtensions();
- extensions += extensions.empty() ? "" : " ";
- extensions += "GL_CHROMIUM_post_sub_buffer";
- return extensions;
+bool TextureImageTransportSurface::SupportsPostSubBuffer() {
+ return true;
}
gfx::Size TextureImageTransportSurface::GetSize() {
diff --git a/content/common/gpu/texture_image_transport_surface.h b/content/common/gpu/texture_image_transport_surface.h
index a86ff27..95b75a5 100644
--- a/content/common/gpu/texture_image_transport_surface.h
+++ b/content/common/gpu/texture_image_transport_surface.h
@@ -37,7 +37,7 @@ class TextureImageTransportSurface
virtual gfx::Size GetSize() OVERRIDE;
virtual void* GetHandle() OVERRIDE;
virtual unsigned GetFormat() OVERRIDE;
- virtual std::string GetExtensions() OVERRIDE;
+ virtual bool SupportsPostSubBuffer() OVERRIDE;
virtual unsigned int GetBackingFrameBufferObject() OVERRIDE;
virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
virtual bool SetBackbufferAllocation(bool allocated) OVERRIDE;
diff --git a/gpu/command_buffer/service/gl_surface_mock.h b/gpu/command_buffer/service/gl_surface_mock.h
index 372a9b3..0652be6 100644
--- a/gpu/command_buffer/service/gl_surface_mock.h
+++ b/gpu/command_buffer/service/gl_surface_mock.h
@@ -20,7 +20,7 @@ class GLSurfaceMock : public gfx::GLSurface {
MOCK_METHOD0(IsOffscreen, bool());
MOCK_METHOD0(SwapBuffers, bool());
MOCK_METHOD4(PostSubBuffer, bool(int x, int y, int width, int height));
- MOCK_METHOD0(GetExtensions, std::string());
+ MOCK_METHOD0(SupportsPostSubBuffer, bool());
MOCK_METHOD0(GetSize, gfx::Size());
MOCK_METHOD0(GetHandle, void*());
MOCK_METHOD0(GetBackingFrameBufferObject, unsigned int());
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 9eadd75..16ffd96 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -1706,6 +1706,7 @@ class GLES2DecoderImpl : public GLES2Decoder,
bool has_robustness_extension_;
GLenum reset_status_;
bool reset_by_robustness_extension_;
+ bool supports_post_sub_buffer_;
// These flags are used to override the state of the shared feature_info_
// member. Because the same FeatureInfo instance may be shared among many
@@ -2211,6 +2212,7 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group)
has_robustness_extension_(false),
reset_status_(GL_NO_ERROR),
reset_by_robustness_extension_(false),
+ supports_post_sub_buffer_(false),
force_webgl_glsl_validation_(false),
derivatives_explicitly_enabled_(false),
frag_depth_explicitly_enabled_(false),
@@ -2571,6 +2573,12 @@ bool GLES2DecoderImpl::Initialize(
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
}
+ supports_post_sub_buffer_ = surface->SupportsPostSubBuffer();
+ if (feature_info_->workarounds()
+ .disable_post_sub_buffers_for_onscreen_surfaces &&
+ !surface->IsOffscreen())
+ supports_post_sub_buffer_ = false;
+
if (feature_info_->workarounds().reverse_point_sprite_coord_origin) {
glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT);
}
@@ -2623,7 +2631,7 @@ Capabilities GLES2DecoderImpl::GetCapabilities() {
caps.iosurface = true;
#endif
- caps.post_sub_buffer = surface_->HasExtension("GL_CHROMIUM_post_sub_buffer");
+ caps.post_sub_buffer = supports_post_sub_buffer_;
return caps;
}
@@ -7437,7 +7445,7 @@ error::Error GLES2DecoderImpl::HandlePixelStorei(
error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM(
uint32 immediate_data_size, const cmds::PostSubBufferCHROMIUM& c) {
TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandlePostSubBufferCHROMIUM");
- if (!surface_->HasExtension("GL_CHROMIUM_post_sub_buffer")) {
+ if (!supports_post_sub_buffer_) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
"glPostSubBufferCHROMIUM", "command not supported by surface");
@@ -7631,9 +7639,8 @@ error::Error GLES2DecoderImpl::HandleGetString(
} else {
extensions = feature_info_->extensions().c_str();
}
- std::string surface_extensions = surface_->GetExtensions();
- if (!surface_extensions.empty())
- extensions += " " + surface_extensions;
+ if (supports_post_sub_buffer_)
+ extensions += " GL_CHROMIUM_post_sub_buffer";
str = extensions.c_str();
}
break;
diff --git a/gpu/config/gpu_driver_bug_list_json.cc b/gpu/config/gpu_driver_bug_list_json.cc
index 8d1f98f..08febf0 100644
--- a/gpu/config/gpu_driver_bug_list_json.cc
+++ b/gpu/config/gpu_driver_bug_list_json.cc
@@ -19,7 +19,7 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST(
{
"name": "gpu driver bug list",
// Please update the version number whenever you change this file.
- "version": "4.7",
+ "version": "4.8",
"entries": [
{
"id": 1,
@@ -908,6 +908,17 @@ const char kGpuDriverBugListJson[] = LONG_STRING_CONST(
"features": [
"force_gl_finish_after_compositing"
]
+ },
+ {
+ "id": 68,
+ "description": "Disable partial swaps on linux drivers",
+ "cr_bugs": [339493],
+ "os": {
+ "type": "linux"
+ },
+ "features": [
+ "disable_post_sub_buffers_for_onscreen_surfaces"
+ ]
}
]
}
diff --git a/gpu/config/gpu_driver_bug_workaround_type.h b/gpu/config/gpu_driver_bug_workaround_type.h
index 922d971..85776e2 100644
--- a/gpu/config/gpu_driver_bug_workaround_type.h
+++ b/gpu/config/gpu_driver_bug_workaround_type.h
@@ -36,6 +36,8 @@
disable_multisampling) \
GPU_OP(DISABLE_OES_STANDARD_DERIVATIVES, \
disable_oes_standard_derivatives) \
+ GPU_OP(DISABLE_POST_SUB_BUFFERS_FOR_ONSCREEN_SURFACES, \
+ disable_post_sub_buffers_for_onscreen_surfaces) \
GPU_OP(ENABLE_CHROMIUM_FAST_NPOT_MO8_TEXTURES, \
enable_chromium_fast_npot_mo8_textures) \
GPU_OP(EXIT_ON_CONTEXT_LOST, \
diff --git a/ui/gl/gl_surface.cc b/ui/gl/gl_surface.cc
index 5d35b33..4e74f49 100644
--- a/ui/gl/gl_surface.cc
+++ b/ui/gl/gl_surface.cc
@@ -177,18 +177,8 @@ bool GLSurface::DeferDraws() {
return false;
}
-std::string GLSurface::GetExtensions() {
- return std::string();
-}
-
-bool GLSurface::HasExtension(const char* name) {
- std::string extensions = GetExtensions();
- extensions += " ";
-
- std::string delimited_name(name);
- delimited_name += " ";
-
- return extensions.find(delimited_name) != std::string::npos;
+bool GLSurface::SupportsPostSubBuffer() {
+ return false;
}
unsigned int GLSurface::GetBackingFrameBufferObject() {
@@ -294,8 +284,8 @@ bool GLSurfaceAdapter::PostSubBuffer(int x, int y, int width, int height) {
return surface_->PostSubBuffer(x, y, width, height);
}
-std::string GLSurfaceAdapter::GetExtensions() {
- return surface_->GetExtensions();
+bool GLSurfaceAdapter::SupportsPostSubBuffer() {
+ return surface_->SupportsPostSubBuffer();
}
gfx::Size GLSurfaceAdapter::GetSize() {
diff --git a/ui/gl/gl_surface.h b/ui/gl/gl_surface.h
index f7a02f0..70336ba 100644
--- a/ui/gl/gl_surface.h
+++ b/ui/gl/gl_surface.h
@@ -57,11 +57,8 @@ class GL_EXPORT GLSurface : public base::RefCounted<GLSurface> {
// Get the underlying platform specific surface "handle".
virtual void* GetHandle() = 0;
- // Returns space separated list of surface specific extensions.
- // The surface must be current.
- virtual std::string GetExtensions();
-
- bool HasExtension(const char* name);
+ // Returns whether or not the surface supports PostSubBuffer.
+ virtual bool SupportsPostSubBuffer();
// Returns the internal frame buffer object name if the surface is backed by
// FBO. Otherwise returns 0.
@@ -147,7 +144,7 @@ class GL_EXPORT GLSurfaceAdapter : public GLSurface {
virtual bool IsOffscreen() OVERRIDE;
virtual bool SwapBuffers() OVERRIDE;
virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
- virtual std::string GetExtensions() OVERRIDE;
+ virtual bool SupportsPostSubBuffer() OVERRIDE;
virtual gfx::Size GetSize() OVERRIDE;
virtual void* GetHandle() OVERRIDE;
virtual unsigned int GetBackingFrameBufferObject() OVERRIDE;
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
index a2beccd..568c74a 100644
--- a/ui/gl/gl_surface_egl.cc
+++ b/ui/gl/gl_surface_egl.cc
@@ -559,13 +559,8 @@ EGLSurface NativeViewGLSurfaceEGL::GetHandle() {
return surface_;
}
-std::string NativeViewGLSurfaceEGL::GetExtensions() {
- std::string extensions = GLSurface::GetExtensions();
- if (supports_post_sub_buffer_) {
- extensions += extensions.empty() ? "" : " ";
- extensions += "GL_CHROMIUM_post_sub_buffer";
- }
- return extensions;
+bool NativeViewGLSurfaceEGL::SupportsPostSubBuffer() {
+ return supports_post_sub_buffer_;
}
bool NativeViewGLSurfaceEGL::PostSubBuffer(
diff --git a/ui/gl/gl_surface_egl.h b/ui/gl/gl_surface_egl.h
index 73ec213..ae132e6 100644
--- a/ui/gl/gl_surface_egl.h
+++ b/ui/gl/gl_surface_egl.h
@@ -62,7 +62,7 @@ class GL_EXPORT NativeViewGLSurfaceEGL : public GLSurfaceEGL {
virtual bool SwapBuffers() OVERRIDE;
virtual gfx::Size GetSize() OVERRIDE;
virtual EGLSurface GetHandle() OVERRIDE;
- virtual std::string GetExtensions() OVERRIDE;
+ virtual bool SupportsPostSubBuffer() OVERRIDE;
virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
virtual VSyncProvider* GetVSyncProvider() OVERRIDE;
diff --git a/ui/gl/gl_surface_glx.cc b/ui/gl/gl_surface_glx.cc
index b08a5d0..17a481a 100644
--- a/ui/gl/gl_surface_glx.cc
+++ b/ui/gl/gl_surface_glx.cc
@@ -615,13 +615,8 @@ void* NativeViewGLSurfaceGLX::GetHandle() {
return reinterpret_cast<void*>(GetDrawableHandle());
}
-std::string NativeViewGLSurfaceGLX::GetExtensions() {
- std::string extensions = GLSurface::GetExtensions();
- if (gfx::g_driver_glx.ext.b_GLX_MESA_copy_sub_buffer) {
- extensions += extensions.empty() ? "" : " ";
- extensions += "GL_CHROMIUM_post_sub_buffer";
- }
- return extensions;
+bool NativeViewGLSurfaceGLX::SupportsPostSubBuffer() {
+ return gfx::g_driver_glx.ext.b_GLX_MESA_copy_sub_buffer;
}
void* NativeViewGLSurfaceGLX::GetConfig() {
diff --git a/ui/gl/gl_surface_glx.h b/ui/gl/gl_surface_glx.h
index c41f4ef..f9bff2b 100644
--- a/ui/gl/gl_surface_glx.h
+++ b/ui/gl/gl_surface_glx.h
@@ -60,7 +60,7 @@ class GL_EXPORT NativeViewGLSurfaceGLX : public GLSurfaceGLX {
virtual bool SwapBuffers() OVERRIDE;
virtual gfx::Size GetSize() OVERRIDE;
virtual void* GetHandle() OVERRIDE;
- virtual std::string GetExtensions() OVERRIDE;
+ virtual bool SupportsPostSubBuffer() OVERRIDE;
virtual void* GetConfig() OVERRIDE;
virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
virtual VSyncProvider* GetVSyncProvider() OVERRIDE;
diff --git a/ui/gl/gl_surface_win.cc b/ui/gl/gl_surface_win.cc
index 6307f14..494c7b0 100644
--- a/ui/gl/gl_surface_win.cc
+++ b/ui/gl/gl_surface_win.cc
@@ -33,7 +33,7 @@ class NativeViewGLSurfaceOSMesa : public GLSurfaceOSMesa {
virtual void Destroy() OVERRIDE;
virtual bool IsOffscreen() OVERRIDE;
virtual bool SwapBuffers() OVERRIDE;
- virtual std::string GetExtensions() OVERRIDE;
+ virtual bool SupportsPostSubBuffer() OVERRIDE;
virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
private:
@@ -171,11 +171,8 @@ bool NativeViewGLSurfaceOSMesa::SwapBuffers() {
return true;
}
-std::string NativeViewGLSurfaceOSMesa::GetExtensions() {
- std::string extensions = gfx::GLSurfaceOSMesa::GetExtensions();
- extensions += extensions.empty() ? "" : " ";
- extensions += "GL_CHROMIUM_post_sub_buffer";
- return extensions;
+bool NativeViewGLSurfaceOSMesa::SupportsPostSubBuffer() {
+ return true;
}
bool NativeViewGLSurfaceOSMesa::PostSubBuffer(
diff --git a/ui/gl/gl_surface_x11.cc b/ui/gl/gl_surface_x11.cc
index 54c7f43..cde04f1 100644
--- a/ui/gl/gl_surface_x11.cc
+++ b/ui/gl/gl_surface_x11.cc
@@ -32,7 +32,7 @@ class NativeViewGLSurfaceOSMesa : public GLSurfaceOSMesa {
virtual bool Resize(const gfx::Size& new_size) OVERRIDE;
virtual bool IsOffscreen() OVERRIDE;
virtual bool SwapBuffers() OVERRIDE;
- virtual std::string GetExtensions() OVERRIDE;
+ virtual bool SupportsPostSubBuffer() OVERRIDE;
virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE;
protected:
@@ -218,11 +218,8 @@ bool NativeViewGLSurfaceOSMesa::SwapBuffers() {
return true;
}
-std::string NativeViewGLSurfaceOSMesa::GetExtensions() {
- std::string extensions = gfx::GLSurfaceOSMesa::GetExtensions();
- extensions += extensions.empty() ? "" : " ";
- extensions += "GL_CHROMIUM_post_sub_buffer";
- return extensions;
+bool NativeViewGLSurfaceOSMesa::SupportsPostSubBuffer() {
+ return true;
}
bool NativeViewGLSurfaceOSMesa::PostSubBuffer(