Chromium Code Reviews| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
| index 82e9052c63b7cc621771c35f4c0442676194ed3a..800d742e4b63a03f2abacee4ef948b717621780a 100644 |
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
| @@ -29,8 +29,6 @@ |
| #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| #include "gpu/command_buffer/common/mailbox.h" |
| -#include "gpu/command_buffer/service/async_pixel_transfer_delegate.h" |
| -#include "gpu/command_buffer/service/async_pixel_transfer_manager.h" |
| #include "gpu/command_buffer/service/buffer_manager.h" |
| #include "gpu/command_buffer/service/context_group.h" |
| #include "gpu/command_buffer/service/context_state.h" |
| @@ -558,28 +556,6 @@ struct FenceCallback { |
| scoped_ptr<gfx::GLFence> fence; |
| }; |
| -class AsyncUploadTokenCompletionObserver |
| - : public AsyncPixelTransferCompletionObserver { |
| - public: |
| - explicit AsyncUploadTokenCompletionObserver(uint32 async_upload_token) |
| - : async_upload_token_(async_upload_token) { |
| - } |
| - |
| - void DidComplete(const AsyncMemoryParams& mem_params) override { |
| - DCHECK(mem_params.buffer().get()); |
| - void* data = mem_params.GetDataAddress(); |
| - AsyncUploadSync* sync = static_cast<AsyncUploadSync*>(data); |
| - sync->SetAsyncUploadToken(async_upload_token_); |
| - } |
| - |
| - private: |
| - ~AsyncUploadTokenCompletionObserver() override {} |
| - |
| - uint32 async_upload_token_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(AsyncUploadTokenCompletionObserver); |
| -}; |
| - |
| // } // anonymous namespace. |
| // static |
| @@ -708,10 +684,6 @@ class GLES2DecoderImpl : public GLES2Decoder, |
| void SetShaderCacheCallback(const ShaderCacheCallback& callback) override; |
| void SetWaitSyncPointCallback(const WaitSyncPointCallback& callback) override; |
| - AsyncPixelTransferManager* GetAsyncPixelTransferManager() override; |
| - void ResetAsyncPixelTransferManagerForTest() override; |
| - void SetAsyncPixelTransferManagerForTest( |
| - AsyncPixelTransferManager* manager) override; |
| void SetIgnoreCachedStateForTest(bool ignore) override; |
| void ProcessFinishedAsyncTransfers(); |
| @@ -796,13 +768,6 @@ class GLES2DecoderImpl : public GLES2Decoder, |
| bool GenPathsCHROMIUMHelper(GLuint first_client_id, GLsizei range); |
| bool DeletePathsCHROMIUMHelper(GLuint first_client_id, GLsizei range); |
| - // Helper for async upload token completion notification callback. |
| - base::Closure AsyncUploadTokenCompletionClosure(uint32 async_upload_token, |
| - uint32 sync_data_shm_id, |
| - uint32 sync_data_shm_offset); |
| - |
| - |
| - |
| // Workarounds |
| void OnFboChanged() const; |
| void OnUseFramebuffer() const; |
| @@ -1022,14 +987,6 @@ class GLES2DecoderImpl : public GLES2Decoder, |
| GLenum type, |
| const void * data); |
| - // Extra validation for async tex(Sub)Image2D. |
| - bool ValidateAsyncTransfer( |
| - const char* function_name, |
| - TextureRef* texture_ref, |
| - GLenum target, |
| - GLint level, |
| - const void * data); |
| - |
| // Wrapper for TexImageIOSurface2DCHROMIUM. |
| void DoTexImageIOSurface2DCHROMIUM( |
| GLenum target, |
| @@ -1983,8 +1940,6 @@ class GLES2DecoderImpl : public GLES2Decoder, |
| ShaderCacheCallback shader_cache_callback_; |
| - scoped_ptr<AsyncPixelTransferManager> async_pixel_transfer_manager_; |
| - |
| // The format of the back buffer_ |
| GLenum back_buffer_color_format_; |
| bool back_buffer_has_depth_; |
| @@ -3053,10 +3008,6 @@ bool GLES2DecoderImpl::Initialize( |
| if (!offscreen) |
| context_->SetSafeToForceGpuSwitch(); |
| - async_pixel_transfer_manager_.reset( |
| - AsyncPixelTransferManager::Create(context.get())); |
| - async_pixel_transfer_manager_->Initialize(texture_manager()); |
| - |
| if (workarounds().gl_clear_broken) { |
| DCHECK(!clear_framebuffer_blit_.get()); |
| LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glClearWorkaroundInit"); |
| @@ -3612,13 +3563,6 @@ void GLES2DecoderImpl::ProcessFinishedAsyncTransfers() { |
| ProcessPendingReadPixels(false); |
| if (engine() && query_manager_.get()) |
| query_manager_->ProcessPendingTransferQueries(); |
| - |
| - // TODO(epenner): Is there a better place to do this? |
| - // This needs to occur before we execute any batch of commands |
| - // from the client, as the client may have recieved an async |
| - // completion while issuing those commands. |
| - // "DidFlushStart" would be ideal if we had such a callback. |
| - async_pixel_transfer_manager_->BindCompletedAsyncTransfers(); |
| } |
| static void RebindCurrentFramebuffer( |
| @@ -3902,20 +3846,6 @@ void GLES2DecoderImpl::SetWaitSyncPointCallback( |
| wait_sync_point_callback_ = callback; |
| } |
| -AsyncPixelTransferManager* |
| - GLES2DecoderImpl::GetAsyncPixelTransferManager() { |
| - return async_pixel_transfer_manager_.get(); |
| -} |
| - |
| -void GLES2DecoderImpl::ResetAsyncPixelTransferManagerForTest() { |
| - async_pixel_transfer_manager_.reset(); |
| -} |
| - |
| -void GLES2DecoderImpl::SetAsyncPixelTransferManagerForTest( |
| - AsyncPixelTransferManager* manager) { |
| - async_pixel_transfer_manager_ = make_scoped_ptr(manager); |
| -} |
| - |
| bool GLES2DecoderImpl::GetServiceTextureId(uint32 client_texture_id, |
| uint32* service_texture_id) { |
| TextureRef* texture_ref = texture_manager()->GetTexture(client_texture_id); |
| @@ -3927,13 +3857,11 @@ bool GLES2DecoderImpl::GetServiceTextureId(uint32 client_texture_id, |
| } |
| uint32 GLES2DecoderImpl::GetTextureUploadCount() { |
| - return texture_state_.texture_upload_count + |
| - async_pixel_transfer_manager_->GetTextureUploadCount(); |
| + return texture_state_.texture_upload_count; |
| } |
| base::TimeDelta GLES2DecoderImpl::GetTotalTextureUploadTime() { |
| - return texture_state_.total_texture_upload_time + |
| - async_pixel_transfer_manager_->GetTotalTextureUploadTime(); |
| + return texture_state_.total_texture_upload_time; |
| } |
| base::TimeDelta GLES2DecoderImpl::GetTotalProcessingCommandsTime() { |
| @@ -4078,10 +4006,6 @@ void GLES2DecoderImpl::Destroy(bool have_context) { |
| fragment_translator_ = NULL; |
| vertex_translator_ = NULL; |
| - // Should destroy the transfer manager before the texture manager held |
| - // by the context group. |
| - async_pixel_transfer_manager_.reset(); |
| - |
| // Destroy the GPU Tracer which may own some in process GPU Timings. |
| if (gpu_tracer_) { |
| gpu_tracer_->Destroy(have_context); |
| @@ -10302,12 +10226,6 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D( |
| GL_INVALID_VALUE, "glCopyTexSubImage2D", "bad dimensions."); |
| return; |
| } |
| - if (async_pixel_transfer_manager_->AsyncTransferIsInProgress(texture_ref)) { |
| - LOCAL_SET_GL_ERROR( |
| - GL_INVALID_OPERATION, |
| - "glCopyTexSubImage2D", "async upload pending for texture"); |
| - return; |
| - } |
| // Check we have compatible formats. |
| GLenum read_format = GetBoundReadFrameBufferInternalFormat(); |
| @@ -10464,12 +10382,6 @@ bool GLES2DecoderImpl::ValidateTexSubImage2D( |
| function_name, "type does not match type of texture."); |
| return false; |
| } |
| - if (async_pixel_transfer_manager_->AsyncTransferIsInProgress(texture_ref)) { |
| - LOCAL_SET_GL_ERROR( |
| - GL_INVALID_OPERATION, |
| - function_name, "async upload pending for texture"); |
| - return false; |
| - } |
| if (!texture->ValidForTexture( |
| target, level, xoffset, yoffset, 0, width, height, 1, type)) { |
| LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "bad dimensions."); |
| @@ -11734,16 +11646,11 @@ void GLES2DecoderImpl::ProcessPendingReadPixels(bool did_finish) { |
| } |
| bool GLES2DecoderImpl::HasMoreIdleWork() { |
| - return !pending_readpixel_fences_.empty() || |
| - async_pixel_transfer_manager_->NeedsProcessMorePendingTransfers(); |
| + return !pending_readpixel_fences_.empty(); |
| } |
| void GLES2DecoderImpl::PerformIdleWork() { |
| ProcessPendingReadPixels(false); |
| - if (!async_pixel_transfer_manager_->NeedsProcessMorePendingTransfers()) |
| - return; |
| - async_pixel_transfer_manager_->ProcessMorePendingTransfers(); |
| - ProcessFinishedAsyncTransfers(); |
| } |
| error::Error GLES2DecoderImpl::HandleBeginQueryEXT(uint32 immediate_data_size, |
| @@ -11758,8 +11665,6 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(uint32 immediate_data_size, |
| switch (target) { |
| case GL_COMMANDS_ISSUED_CHROMIUM: |
| case GL_LATENCY_QUERY_CHROMIUM: |
| - case GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM: |
| - case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM: |
|
no sievers
2015/08/26 18:37:26
You want to leave GL_ASYNC_PIXEL_PACK_COMPLETED_CH
reveman
2015/08/26 22:34:25
Done. Nice catch, thanks!
|
| case GL_GET_ERROR_QUERY_CHROMIUM: |
| break; |
| case GL_COMMANDS_COMPLETED_CHROMIUM: |
| @@ -13768,312 +13673,6 @@ void GLES2DecoderImpl::DoMatrixLoadIdentityCHROMIUM(GLenum matrix_mode) { |
| glMatrixLoadIdentityEXT(matrix_mode); |
| } |
| -bool GLES2DecoderImpl::ValidateAsyncTransfer( |
| - const char* function_name, |
| - TextureRef* texture_ref, |
| - GLenum target, |
| - GLint level, |
| - const void * data) { |
| - // We only support async uploads to 2D textures for now. |
| - if (GL_TEXTURE_2D != target) { |
| - LOCAL_SET_GL_ERROR_INVALID_ENUM(function_name, target, "target"); |
| - return false; |
| - } |
| - // We only support uploads to level zero for now. |
| - if (level != 0) { |
| - LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "level != 0"); |
| - return false; |
| - } |
| - // A transfer buffer must be bound, even for asyncTexImage2D. |
| - if (data == NULL) { |
| - LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name, "buffer == 0"); |
| - return false; |
| - } |
| - // We only support one async transfer in progress. |
| - if (!texture_ref || |
| - async_pixel_transfer_manager_->AsyncTransferIsInProgress(texture_ref)) { |
| - LOCAL_SET_GL_ERROR( |
| - GL_INVALID_OPERATION, |
| - function_name, "transfer already in progress"); |
| - return false; |
| - } |
| - return true; |
| -} |
| - |
| -base::Closure GLES2DecoderImpl::AsyncUploadTokenCompletionClosure( |
| - uint32 async_upload_token, |
| - uint32 sync_data_shm_id, |
| - uint32 sync_data_shm_offset) { |
| - scoped_refptr<gpu::Buffer> buffer = GetSharedMemoryBuffer(sync_data_shm_id); |
| - if (!buffer.get() || |
| - !buffer->GetDataAddress(sync_data_shm_offset, sizeof(AsyncUploadSync))) |
| - return base::Closure(); |
| - |
| - AsyncMemoryParams mem_params(buffer, |
| - sync_data_shm_offset, |
| - sizeof(AsyncUploadSync)); |
| - |
| - scoped_refptr<AsyncUploadTokenCompletionObserver> observer( |
| - new AsyncUploadTokenCompletionObserver(async_upload_token)); |
| - |
| - return base::Bind( |
| - &AsyncPixelTransferManager::AsyncNotifyCompletion, |
| - base::Unretained(GetAsyncPixelTransferManager()), |
| - mem_params, |
| - observer); |
| -} |
| - |
| -error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM( |
| - uint32 immediate_data_size, |
| - const void* cmd_data) { |
| - const gles2::cmds::AsyncTexImage2DCHROMIUM& c = |
| - *static_cast<const gles2::cmds::AsyncTexImage2DCHROMIUM*>(cmd_data); |
| - TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM"); |
| - GLenum target = static_cast<GLenum>(c.target); |
| - GLint level = static_cast<GLint>(c.level); |
| - GLenum internal_format = static_cast<GLenum>(c.internalformat); |
| - GLsizei width = static_cast<GLsizei>(c.width); |
| - GLsizei height = static_cast<GLsizei>(c.height); |
| - GLint border = static_cast<GLint>(c.border); |
| - GLenum format = static_cast<GLenum>(c.format); |
| - GLenum type = static_cast<GLenum>(c.type); |
| - uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id); |
| - uint32 pixels_shm_offset = static_cast<uint32>(c.pixels_shm_offset); |
| - uint32 pixels_size; |
| - uint32 async_upload_token = static_cast<uint32>(c.async_upload_token); |
| - uint32 sync_data_shm_id = static_cast<uint32>(c.sync_data_shm_id); |
| - uint32 sync_data_shm_offset = static_cast<uint32>(c.sync_data_shm_offset); |
| - |
| - base::ScopedClosureRunner scoped_completion_callback; |
| - if (async_upload_token) { |
| - base::Closure completion_closure = |
| - AsyncUploadTokenCompletionClosure(async_upload_token, |
| - sync_data_shm_id, |
| - sync_data_shm_offset); |
| - if (completion_closure.is_null()) |
| - return error::kInvalidArguments; |
| - |
| - scoped_completion_callback.Reset(completion_closure); |
| - } |
| - |
| - // TODO(epenner): Move this and copies of this memory validation |
| - // into ValidateTexImage2D step. |
| - if (!GLES2Util::ComputeImageDataSizes( |
| - width, height, 1, format, type, state_.unpack_alignment, &pixels_size, |
| - NULL, NULL)) { |
| - return error::kOutOfBounds; |
| - } |
| - const void* pixels = NULL; |
| - if (pixels_shm_id != 0 || pixels_shm_offset != 0) { |
| - pixels = GetSharedMemoryAs<const void*>( |
| - pixels_shm_id, pixels_shm_offset, pixels_size); |
| - if (!pixels) { |
| - return error::kOutOfBounds; |
| - } |
| - } |
| - |
| - TextureManager::DoTexImageArguments args = { |
| - target, level, internal_format, width, height, 1, border, format, type, |
| - pixels, pixels_size, TextureManager::DoTexImageArguments::kTexImage2D }; |
| - TextureRef* texture_ref; |
| - // All the normal glTexSubImage2D validation. |
| - if (!texture_manager()->ValidateTexImage( |
| - &state_, "glAsyncTexImage2DCHROMIUM", args, &texture_ref)) { |
| - return error::kNoError; |
| - } |
| - |
| - // Extra async validation. |
| - Texture* texture = texture_ref->texture(); |
| - if (!ValidateAsyncTransfer( |
| - "glAsyncTexImage2DCHROMIUM", texture_ref, target, level, pixels)) |
| - return error::kNoError; |
| - |
| - // Don't allow async redefinition of a textures. |
| - if (texture->IsDefined()) { |
| - LOCAL_SET_GL_ERROR( |
| - GL_INVALID_OPERATION, |
| - "glAsyncTexImage2DCHROMIUM", "already defined"); |
| - return error::kNoError; |
| - } |
| - |
| - if (!EnsureGPUMemoryAvailable(pixels_size)) { |
| - LOCAL_SET_GL_ERROR( |
| - GL_OUT_OF_MEMORY, "glAsyncTexImage2DCHROMIUM", "out of memory"); |
| - return error::kNoError; |
| - } |
| - |
| - // Setup the parameters. |
| - AsyncTexImage2DParams tex_params = { |
| - target, level, static_cast<GLenum>(internal_format), |
| - width, height, border, format, type}; |
| - AsyncMemoryParams mem_params( |
| - GetSharedMemoryBuffer(c.pixels_shm_id), c.pixels_shm_offset, pixels_size); |
| - |
| - // Set up the async state if needed, and make the texture |
| - // immutable so the async state stays valid. The level info |
| - // is set up lazily when the transfer completes. |
| - AsyncPixelTransferDelegate* delegate = |
| - async_pixel_transfer_manager_->CreatePixelTransferDelegate(texture_ref, |
| - tex_params); |
| - texture->SetImmutable(true); |
| - |
| - delegate->AsyncTexImage2D( |
| - tex_params, |
| - mem_params, |
| - base::Bind(&TextureManager::SetLevelInfoFromParams, |
| - // The callback is only invoked if the transfer delegate still |
| - // exists, which implies through manager->texture_ref->state |
| - // ownership that both of these pointers are valid. |
| - base::Unretained(texture_manager()), |
| - base::Unretained(texture_ref), |
| - tex_params)); |
| - return error::kNoError; |
| -} |
| - |
| -error::Error GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM( |
| - uint32 immediate_data_size, |
| - const void* cmd_data) { |
| - const gles2::cmds::AsyncTexSubImage2DCHROMIUM& c = |
| - *static_cast<const gles2::cmds::AsyncTexSubImage2DCHROMIUM*>(cmd_data); |
| - TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM"); |
| - GLenum target = static_cast<GLenum>(c.target); |
| - GLint level = static_cast<GLint>(c.level); |
| - GLint xoffset = static_cast<GLint>(c.xoffset); |
| - GLint yoffset = static_cast<GLint>(c.yoffset); |
| - GLsizei width = static_cast<GLsizei>(c.width); |
| - GLsizei height = static_cast<GLsizei>(c.height); |
| - GLenum format = static_cast<GLenum>(c.format); |
| - GLenum type = static_cast<GLenum>(c.type); |
| - uint32 async_upload_token = static_cast<uint32>(c.async_upload_token); |
| - uint32 sync_data_shm_id = static_cast<uint32>(c.sync_data_shm_id); |
| - uint32 sync_data_shm_offset = static_cast<uint32>(c.sync_data_shm_offset); |
| - |
| - base::ScopedClosureRunner scoped_completion_callback; |
| - if (async_upload_token) { |
| - base::Closure completion_closure = |
| - AsyncUploadTokenCompletionClosure(async_upload_token, |
| - sync_data_shm_id, |
| - sync_data_shm_offset); |
| - if (completion_closure.is_null()) |
| - return error::kInvalidArguments; |
| - |
| - scoped_completion_callback.Reset(completion_closure); |
| - } |
| - |
| - // TODO(epenner): Move this and copies of this memory validation |
| - // into ValidateTexSubImage2D step. |
| - uint32 data_size; |
| - if (!GLES2Util::ComputeImageDataSizes( |
| - width, height, 1, format, type, state_.unpack_alignment, &data_size, |
| - NULL, NULL)) { |
| - return error::kOutOfBounds; |
| - } |
| - const void* pixels = GetSharedMemoryAs<const void*>( |
| - c.data_shm_id, c.data_shm_offset, data_size); |
| - |
| - // All the normal glTexSubImage2D validation. |
| - error::Error error = error::kNoError; |
| - if (!ValidateTexSubImage2D(&error, "glAsyncTexSubImage2DCHROMIUM", |
| - target, level, xoffset, yoffset, width, height, format, type, pixels)) { |
| - return error; |
| - } |
| - |
| - // Extra async validation. |
| - TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget( |
| - &state_, target); |
| - Texture* texture = texture_ref->texture(); |
| - if (!ValidateAsyncTransfer( |
| - "glAsyncTexSubImage2DCHROMIUM", texture_ref, target, level, pixels)) |
| - return error::kNoError; |
| - |
| - // Guarantee async textures are always 'cleared' as follows: |
| - // - AsyncTexImage2D can not redefine an existing texture |
| - // - AsyncTexImage2D must initialize the entire image via non-null buffer. |
| - // - AsyncTexSubImage2D clears synchronously if not already cleared. |
| - // - Textures become immutable after an async call. |
| - // This way we know in all cases that an async texture is always clear. |
| - if (!texture->SafeToRenderFrom()) { |
| - if (!texture_manager()->ClearTextureLevel(this, texture_ref, |
| - target, level)) { |
| - LOCAL_SET_GL_ERROR( |
| - GL_OUT_OF_MEMORY, |
| - "glAsyncTexSubImage2DCHROMIUM", "dimensions too big"); |
| - return error::kNoError; |
| - } |
| - } |
| - |
| - // Setup the parameters. |
| - AsyncTexSubImage2DParams tex_params = {target, level, xoffset, yoffset, |
| - width, height, format, type}; |
| - AsyncMemoryParams mem_params( |
| - GetSharedMemoryBuffer(c.data_shm_id), c.data_shm_offset, data_size); |
| - AsyncPixelTransferDelegate* delegate = |
| - async_pixel_transfer_manager_->GetPixelTransferDelegate(texture_ref); |
| - if (!delegate) { |
| - // TODO(epenner): We may want to enforce exclusive use |
| - // of async APIs in which case this should become an error, |
| - // (the texture should have been async defined). |
| - AsyncTexImage2DParams define_params = {target, level, |
| - 0, 0, 0, 0, 0, 0}; |
| - texture->GetLevelSize( |
| - target, level, &define_params.width, &define_params.height, nullptr); |
| - texture->GetLevelType( |
| - target, level, &define_params.type, &define_params.internal_format); |
| - // Set up the async state if needed, and make the texture |
| - // immutable so the async state stays valid. |
| - delegate = async_pixel_transfer_manager_->CreatePixelTransferDelegate( |
| - texture_ref, define_params); |
| - texture->SetImmutable(true); |
| - } |
| - |
| - delegate->AsyncTexSubImage2D(tex_params, mem_params); |
| - return error::kNoError; |
| -} |
| - |
| -error::Error GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM( |
| - uint32 immediate_data_size, |
| - const void* cmd_data) { |
| - const gles2::cmds::WaitAsyncTexImage2DCHROMIUM& c = |
| - *static_cast<const gles2::cmds::WaitAsyncTexImage2DCHROMIUM*>(cmd_data); |
| - TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM"); |
| - GLenum target = static_cast<GLenum>(c.target); |
| - |
| - if (GL_TEXTURE_2D != target) { |
| - LOCAL_SET_GL_ERROR( |
| - GL_INVALID_ENUM, "glWaitAsyncTexImage2DCHROMIUM", "target"); |
| - return error::kNoError; |
| - } |
| - TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget( |
| - &state_, target); |
| - if (!texture_ref) { |
| - LOCAL_SET_GL_ERROR( |
| - GL_INVALID_OPERATION, |
| - "glWaitAsyncTexImage2DCHROMIUM", "unknown texture"); |
| - return error::kNoError; |
| - } |
| - AsyncPixelTransferDelegate* delegate = |
| - async_pixel_transfer_manager_->GetPixelTransferDelegate(texture_ref); |
| - if (!delegate) { |
| - LOCAL_SET_GL_ERROR( |
| - GL_INVALID_OPERATION, |
| - "glWaitAsyncTexImage2DCHROMIUM", "No async transfer started"); |
| - return error::kNoError; |
| - } |
| - delegate->WaitForTransferCompletion(); |
| - ProcessFinishedAsyncTransfers(); |
| - return error::kNoError; |
| -} |
| - |
| -error::Error GLES2DecoderImpl::HandleWaitAllAsyncTexImage2DCHROMIUM( |
| - uint32 immediate_data_size, |
| - const void* data) { |
| - TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM"); |
| - |
| - GetAsyncPixelTransferManager()->WaitAllAsyncTexImage2D(); |
| - ProcessFinishedAsyncTransfers(); |
| - return error::kNoError; |
| -} |
| - |
| error::Error GLES2DecoderImpl::HandleUniformBlockBinding( |
| uint32_t immediate_data_size, const void* cmd_data) { |
| if (!unsafe_es3_apis_enabled()) |