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 f913c4883d5ebdb892dd908c2d97842b026ba4fc..aeaad45ca608785ef6bcebd631aa07b0b56d20b1 100644 |
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
| @@ -15,6 +15,7 @@ |
| #include "base/at_exit.h" |
| #include "base/bind.h" |
| +#include "base/callback_helpers.h" |
| #include "base/command_line.h" |
| #include "base/debug/trace_event.h" |
| #include "base/debug/trace_event_synthetic_delay.h" |
| @@ -10290,6 +10291,13 @@ bool GLES2DecoderImpl::ValidateAsyncTransfer( |
| return true; |
| } |
| +namespace { |
| +void UpdateAsyncUploadToken(AsyncUploadSync* sync, uint32 async_upload_token) { |
| + base::subtle::MemoryBarrier(); |
|
epennerAtGoogle
2014/02/07 20:43:58
See my other comment on MemoryBarriers. Wouldn't h
|
| + sync->async_token = async_upload_token; |
| +} |
| +} |
| + |
| error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM( |
| uint32 immediate_data_size, const cmds::AsyncTexImage2DCHROMIUM& c) { |
| TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM"); |
| @@ -10306,6 +10314,21 @@ error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM( |
| 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) { |
| + AsyncUploadSync* sync = GetSharedMemoryAs<AsyncUploadSync*>( |
| + sync_data_shm_id, sync_data_shm_offset, sizeof(*sync)); |
|
piman
2014/02/07 22:58:20
The shared memory backing the AsyncUploadSync coul
jadahl
2014/02/08 09:18:25
As epenner replied elsewhere, SafeSharedMemoryPool
epennerAtGoogle
2014/02/10 23:12:06
Bug for reference counting SharedMemory:
https://c
|
| + scoped_completion_callback.Reset(base::Bind( |
| + &AsyncPixelTransferManager::AsyncRun, |
| + base::Unretained(GetAsyncPixelTransferManager()), |
| + base::Bind(&UpdateAsyncUploadToken, |
| + sync, |
| + async_upload_token))); |
| + } |
| // TODO(epenner): Move this and copies of this memory validation |
| // into ValidateTexImage2D step. |
| @@ -10400,6 +10423,21 @@ error::Error GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM( |
| 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) { |
| + AsyncUploadSync* sync = GetSharedMemoryAs<AsyncUploadSync*>( |
| + sync_data_shm_id, sync_data_shm_offset, sizeof(*sync)); |
| + scoped_completion_callback.Reset(base::Bind( |
| + &AsyncPixelTransferManager::AsyncRun, |
| + base::Unretained(GetAsyncPixelTransferManager()), |
| + base::Bind(&UpdateAsyncUploadToken, |
| + sync, |
| + async_upload_token))); |
| + } |
| // TODO(epenner): Move this and copies of this memory validation |
| // into ValidateTexSubImage2D step. |