diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-22 00:59:35 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-22 00:59:35 +0000 |
commit | a80773bb263a9706cc8ee4e3f336d2d3d28fadd8 (patch) | |
tree | 2a7bb4449491520be9b3f85dbdd9978c06a902ac | |
parent | 6c7dcb2f278335c8ae8bbfd8ef3b440d5329bfa7 (diff) | |
download | chromium_src-a80773bb263a9706cc8ee4e3f336d2d3d28fadd8.zip chromium_src-a80773bb263a9706cc8ee4e3f336d2d3d28fadd8.tar.gz chromium_src-a80773bb263a9706cc8ee4e3f336d2d3d28fadd8.tar.bz2 |
The semantics of shallow finish are to block until the GPU process has issued all prior GL commands, without necessarily waiting for the GPU to complete them. It might have better performance than a regular finish in some cases. It is also less likely to hang if the GPU hangs on some platforms, such as Windows.
Review URL: https://chromiumcodereview.appspot.com/17504006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207985 0039d316-1c4b-4281-b951-d872f2087c98
15 files changed, 64 insertions, 27 deletions
diff --git a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc index 1e8bf8a..3a78079 100644 --- a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc +++ b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc @@ -1520,7 +1520,8 @@ DELEGATE_TO_GL_6(copyTextureCHROMIUM, CopyTextureCHROMIUM, WGC3Denum, DELEGATE_TO_GL_3(bindUniformLocationCHROMIUM, BindUniformLocationCHROMIUM, WebGLId, WGC3Dint, const WGC3Dchar*) -DELEGATE_TO_GL(shallowFlushCHROMIUM,ShallowFlushCHROMIUM); +DELEGATE_TO_GL(shallowFlushCHROMIUM, ShallowFlushCHROMIUM); +DELEGATE_TO_GL(shallowFinishCHROMIUM, ShallowFinishCHROMIUM); DELEGATE_TO_GL_1(waitSyncPoint, WaitSyncPointCHROMIUM, GLuint) diff --git a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h index bba922d..e1bbc07 100644 --- a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h +++ b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h @@ -563,6 +563,7 @@ class WebGraphicsContext3DCommandBufferImpl const WGC3Dchar* uniform); virtual void shallowFlushCHROMIUM(); + virtual void shallowFinishCHROMIUM(); virtual void genMailboxCHROMIUM(WGC3Dbyte* mailbox); virtual void produceTextureCHROMIUM(WGC3Denum target, diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h index e8970e0..137eee3 100644 --- a/gpu/GLES2/gl2chromium_autogen.h +++ b/gpu/GLES2/gl2chromium_autogen.h @@ -57,7 +57,6 @@ #define glEnableVertexAttribArray GLES2_GET_FUN(EnableVertexAttribArray) #define glFinish GLES2_GET_FUN(Finish) #define glFlush GLES2_GET_FUN(Flush) -#define glShallowFlushCHROMIUM GLES2_GET_FUN(ShallowFlushCHROMIUM) #define glFramebufferRenderbuffer GLES2_GET_FUN(FramebufferRenderbuffer) #define glFramebufferTexture2D GLES2_GET_FUN(FramebufferTexture2D) #define glFrontFace GLES2_GET_FUN(FrontFace) @@ -112,6 +111,8 @@ #define glScissor GLES2_GET_FUN(Scissor) #define glShaderBinary GLES2_GET_FUN(ShaderBinary) #define glShaderSource GLES2_GET_FUN(ShaderSource) +#define glShallowFinishCHROMIUM GLES2_GET_FUN(ShallowFinishCHROMIUM) +#define glShallowFlushCHROMIUM GLES2_GET_FUN(ShallowFlushCHROMIUM) #define glStencilFunc GLES2_GET_FUN(StencilFunc) #define glStencilFuncSeparate GLES2_GET_FUN(StencilFuncSeparate) #define glStencilMask GLES2_GET_FUN(StencilMask) diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index ba91dc0..d3fa65a 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -1526,13 +1526,6 @@ _FUNCTION_INFO = { 'impl_func': False, 'decoder_func': 'DoFlush', }, - 'ShallowFlushCHROMIUM': { - 'impl_func': False, - 'gen_cmd': False, - 'extension': True, - 'chromium': True, - 'client_test': False, - }, 'FramebufferRenderbuffer': { 'decoder_func': 'DoFramebufferRenderbuffer', 'gl_test_func': 'glFramebufferRenderbufferEXT', @@ -2362,6 +2355,20 @@ _FUNCTION_INFO = { 'extension': True, 'chromium': True, }, + 'ShallowFinishCHROMIUM': { + 'impl_func': False, + 'gen_cmd': False, + 'extension': True, + 'chromium': True, + 'client_test': False, + }, + 'ShallowFlushCHROMIUM': { + 'impl_func': False, + 'gen_cmd': False, + 'extension': True, + 'chromium': True, + 'client_test': False, + }, 'TraceBeginCHROMIUM': { 'type': 'Custom', 'impl_func': False, diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h index f617163..0230673c 100644 --- a/gpu/command_buffer/client/gles2_c_lib_autogen.h +++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h @@ -167,9 +167,6 @@ void GLES2Finish() { void GLES2Flush() { gles2::GetGLContext()->Flush(); } -void GLES2ShallowFlushCHROMIUM() { - gles2::GetGLContext()->ShallowFlushCHROMIUM(); -} void GLES2FramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { @@ -359,6 +356,12 @@ void GLES2ShaderSource( const GLint* length) { gles2::GetGLContext()->ShaderSource(shader, count, str, length); } +void GLES2ShallowFinishCHROMIUM() { + gles2::GetGLContext()->ShallowFinishCHROMIUM(); +} +void GLES2ShallowFlushCHROMIUM() { + gles2::GetGLContext()->ShallowFlushCHROMIUM(); +} void GLES2StencilFunc(GLenum func, GLint ref, GLuint mask) { gles2::GetGLContext()->StencilFunc(func, ref, mask); } @@ -827,8 +830,6 @@ NameToFunc g_gles2_function_table[] = { glEnableVertexAttribArray), }, { "glFinish", reinterpret_cast<GLES2FunctionPointer>(glFinish), }, { "glFlush", reinterpret_cast<GLES2FunctionPointer>(glFlush), }, - { "glShallowFlushCHROMIUM", reinterpret_cast<GLES2FunctionPointer>( - glShallowFlushCHROMIUM), }, { "glFramebufferRenderbuffer", reinterpret_cast<GLES2FunctionPointer>( glFramebufferRenderbuffer), }, { "glFramebufferTexture2D", reinterpret_cast<GLES2FunctionPointer>( @@ -914,6 +915,10 @@ NameToFunc g_gles2_function_table[] = { glShaderBinary), }, { "glShaderSource", reinterpret_cast<GLES2FunctionPointer>( glShaderSource), }, + { "glShallowFinishCHROMIUM", reinterpret_cast<GLES2FunctionPointer>( + glShallowFinishCHROMIUM), }, + { "glShallowFlushCHROMIUM", reinterpret_cast<GLES2FunctionPointer>( + glShallowFlushCHROMIUM), }, { "glStencilFunc", reinterpret_cast<GLES2FunctionPointer>(glStencilFunc), }, { "glStencilFuncSeparate", reinterpret_cast<GLES2FunctionPointer>( glStencilFuncSeparate), }, diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index b784040..fbc92d5 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc @@ -813,6 +813,13 @@ void GLES2Implementation::Finish() { FinishHelper(); } +void GLES2Implementation::ShallowFinishCHROMIUM() { + GPU_CLIENT_SINGLE_THREAD_CHECK(); + // Flush our command buffer (tell the service to execute up to the flush cmd + // and don't return until it completes). + helper_->CommandBufferHelper::Finish(); +} + bool GLES2Implementation::MustBeContextLost() { bool context_lost = helper_->IsContextLost(); if (!context_lost) { diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h index b60730b..e05768c 100644 --- a/gpu/command_buffer/client/gles2_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_autogen.h @@ -120,8 +120,6 @@ virtual void Finish() OVERRIDE; virtual void Flush() OVERRIDE; -virtual void ShallowFlushCHROMIUM() OVERRIDE; - virtual void FramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) OVERRIDE; @@ -256,6 +254,10 @@ virtual void ShaderSource( GLuint shader, GLsizei count, const GLchar* const* str, const GLint* length) OVERRIDE; +virtual void ShallowFinishCHROMIUM() OVERRIDE; + +virtual void ShallowFlushCHROMIUM() OVERRIDE; + virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) OVERRIDE; virtual void StencilFuncSeparate( diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h index a933b81..78c5002 100644 --- a/gpu/command_buffer/client/gles2_interface_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_autogen.h @@ -73,7 +73,6 @@ virtual void Enable(GLenum cap) = 0; virtual void EnableVertexAttribArray(GLuint index) = 0; virtual void Finish() = 0; virtual void Flush() = 0; -virtual void ShallowFlushCHROMIUM() = 0; virtual void FramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) = 0; @@ -154,6 +153,8 @@ virtual void ShaderBinary( virtual void ShaderSource( GLuint shader, GLsizei count, const GLchar* const* str, const GLint* length) = 0; +virtual void ShallowFinishCHROMIUM() = 0; +virtual void ShallowFlushCHROMIUM() = 0; virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) = 0; virtual void StencilFuncSeparate( GLenum face, GLenum func, GLint ref, GLuint mask) = 0; diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h index a16fe5d..84704ed 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h @@ -77,7 +77,6 @@ virtual void Enable(GLenum cap) OVERRIDE; virtual void EnableVertexAttribArray(GLuint index) OVERRIDE; virtual void Finish() OVERRIDE; virtual void Flush() OVERRIDE; -virtual void ShallowFlushCHROMIUM() OVERRIDE; virtual void FramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) OVERRIDE; @@ -165,6 +164,8 @@ virtual void ShaderBinary( virtual void ShaderSource( GLuint shader, GLsizei count, const GLchar* const* str, const GLint* length) OVERRIDE; +virtual void ShallowFinishCHROMIUM() OVERRIDE; +virtual void ShallowFlushCHROMIUM() OVERRIDE; virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) OVERRIDE; virtual void StencilFuncSeparate( GLenum face, GLenum func, GLint ref, GLuint mask) OVERRIDE; diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h index ce4b53b..b03ef8a 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h @@ -145,8 +145,6 @@ void GLES2InterfaceStub::Finish() { } void GLES2InterfaceStub::Flush() { } -void GLES2InterfaceStub::ShallowFlushCHROMIUM() { -} void GLES2InterfaceStub::FramebufferRenderbuffer( GLenum /* target */, GLenum /* attachment */, GLenum /* renderbuffertarget */, GLuint /* renderbuffer */) { @@ -313,6 +311,10 @@ void GLES2InterfaceStub::ShaderSource( GLuint /* shader */, GLsizei /* count */, const GLchar* const* /* str */, const GLint* /* length */) { } +void GLES2InterfaceStub::ShallowFinishCHROMIUM() { +} +void GLES2InterfaceStub::ShallowFlushCHROMIUM() { +} void GLES2InterfaceStub::StencilFunc( GLenum /* func */, GLint /* ref */, GLuint /* mask */) { } diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h index bef6ce8c..414ddf5 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h @@ -77,7 +77,6 @@ virtual void Enable(GLenum cap) OVERRIDE; virtual void EnableVertexAttribArray(GLuint index) OVERRIDE; virtual void Finish() OVERRIDE; virtual void Flush() OVERRIDE; -virtual void ShallowFlushCHROMIUM() OVERRIDE; virtual void FramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) OVERRIDE; @@ -165,6 +164,8 @@ virtual void ShaderBinary( virtual void ShaderSource( GLuint shader, GLsizei count, const GLchar* const* str, const GLint* length) OVERRIDE; +virtual void ShallowFinishCHROMIUM() OVERRIDE; +virtual void ShallowFlushCHROMIUM() OVERRIDE; virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) OVERRIDE; virtual void StencilFuncSeparate( GLenum face, GLenum func, GLint ref, GLuint mask) OVERRIDE; diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h index a99a36a..512b02c 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h @@ -267,11 +267,6 @@ void GLES2TraceImplementation::Flush() { gl_->Flush(); } -void GLES2TraceImplementation::ShallowFlushCHROMIUM() { - TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ShallowFlushCHROMIUM"); - gl_->ShallowFlushCHROMIUM(); -} - void GLES2TraceImplementation::FramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { @@ -576,6 +571,16 @@ void GLES2TraceImplementation::ShaderSource( gl_->ShaderSource(shader, count, str, length); } +void GLES2TraceImplementation::ShallowFinishCHROMIUM() { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ShallowFinishCHROMIUM"); + gl_->ShallowFinishCHROMIUM(); +} + +void GLES2TraceImplementation::ShallowFlushCHROMIUM() { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ShallowFlushCHROMIUM"); + gl_->ShallowFlushCHROMIUM(); +} + void GLES2TraceImplementation::StencilFunc( GLenum func, GLint ref, GLuint mask) { TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::StencilFunc"); diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt index ef56e5a..c414371 100644 --- a/gpu/command_buffer/cmd_buffer_functions.txt +++ b/gpu/command_buffer/cmd_buffer_functions.txt @@ -50,7 +50,6 @@ GL_APICALL void GL_APIENTRY glEnable (GLenumCapability cap); GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); GL_APICALL void GL_APIENTRY glFinish (void); GL_APICALL void GL_APIENTRY glFlush (void); -GL_APICALL void GL_APIENTRY glShallowFlushCHROMIUM (void); GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenumFrameBufferTarget target, GLenumAttachment attachment, GLenumRenderBufferTarget renderbuffertarget, GLidRenderbuffer renderbuffer); GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenumFrameBufferTarget target, GLenumAttachment attachment, GLenumTextureTarget textarget, GLidTexture texture, GLintZeroOnly level); GL_APICALL void GL_APIENTRY glFrontFace (GLenumFaceMode mode); @@ -104,6 +103,8 @@ GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL void GL_APIENTRY glShaderBinary (GLsizeiNotNegative n, const GLuint* shaders, GLenumShaderBinaryFormat binaryformat, const void* binary, GLsizeiNotNegative length); GL_APICALL void GL_APIENTRY glShaderSource (GLidShader shader, GLsizeiNotNegative count, const GLchar* const* str, const GLint* length); +GL_APICALL void GL_APIENTRY glShallowFinishCHROMIUM (void); +GL_APICALL void GL_APIENTRY glShallowFlushCHROMIUM (void); GL_APICALL void GL_APIENTRY glStencilFunc (GLenumCmpFunction func, GLint ref, GLuint mask); GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenumFaceType face, GLenumCmpFunction func, GLint ref, GLuint mask); GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); diff --git a/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc b/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc index 6641044..860d091 100644 --- a/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc +++ b/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc @@ -1942,6 +1942,7 @@ DELEGATE_TO_GL_3(bindUniformLocationCHROMIUM, BindUniformLocationCHROMIUM, WebGLId, WGC3Dint, const WGC3Dchar*) DELEGATE_TO_GL(shallowFlushCHROMIUM, ShallowFlushCHROMIUM) +DELEGATE_TO_GL(shallowFinishCHROMIUM, ShallowFinishCHROMIUM) DELEGATE_TO_GL_1(genMailboxCHROMIUM, GenMailboxCHROMIUM, WGC3Dbyte*) DELEGATE_TO_GL_2(produceTextureCHROMIUM, ProduceTextureCHROMIUM, diff --git a/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h b/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h index c095ee8..f786d00 100644 --- a/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h +++ b/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h @@ -500,6 +500,7 @@ class WEBKIT_GPU_EXPORT WebGraphicsContext3DInProcessCommandBufferImpl const WGC3Dchar* uniform); virtual void shallowFlushCHROMIUM(); + virtual void shallowFinishCHROMIUM(); virtual void genMailboxCHROMIUM(WGC3Dbyte* mailbox); virtual void produceTextureCHROMIUM(WGC3Denum target, |