OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <list> | 10 #include <list> |
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 virtual Logger* GetLogger() OVERRIDE; | 568 virtual Logger* GetLogger() OVERRIDE; |
569 virtual ErrorState* GetErrorState() OVERRIDE; | 569 virtual ErrorState* GetErrorState() OVERRIDE; |
570 | 570 |
571 virtual void SetShaderCacheCallback( | 571 virtual void SetShaderCacheCallback( |
572 const ShaderCacheCallback& callback) OVERRIDE; | 572 const ShaderCacheCallback& callback) OVERRIDE; |
573 virtual void SetWaitSyncPointCallback( | 573 virtual void SetWaitSyncPointCallback( |
574 const WaitSyncPointCallback& callback) OVERRIDE; | 574 const WaitSyncPointCallback& callback) OVERRIDE; |
575 | 575 |
576 virtual void SetStreamTextureManager(StreamTextureManager* manager) OVERRIDE; | 576 virtual void SetStreamTextureManager(StreamTextureManager* manager) OVERRIDE; |
577 | 577 |
578 virtual AsyncPixelTransferDelegate* | |
579 GetAsyncPixelTransferDelegate() OVERRIDE; | |
580 virtual AsyncPixelTransferManager* | 578 virtual AsyncPixelTransferManager* |
581 GetAsyncPixelTransferManager() OVERRIDE; | 579 GetAsyncPixelTransferManager() OVERRIDE; |
582 virtual void ResetAsyncPixelTransferManagerForTest() OVERRIDE; | 580 virtual void ResetAsyncPixelTransferManagerForTest() OVERRIDE; |
583 virtual void SetAsyncPixelTransferManagerForTest( | 581 virtual void SetAsyncPixelTransferManagerForTest( |
584 AsyncPixelTransferManager* manager) OVERRIDE; | 582 AsyncPixelTransferManager* manager) OVERRIDE; |
585 void ProcessFinishedAsyncTransfers(); | 583 void ProcessFinishedAsyncTransfers(); |
586 | 584 |
587 virtual bool GetServiceTextureId(uint32 client_texture_id, | 585 virtual bool GetServiceTextureId(uint32 client_texture_id, |
588 uint32* service_texture_id) OVERRIDE; | 586 uint32* service_texture_id) OVERRIDE; |
589 | 587 |
(...skipping 2451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3041 | 3039 |
3042 void GLES2DecoderImpl::SetWaitSyncPointCallback( | 3040 void GLES2DecoderImpl::SetWaitSyncPointCallback( |
3043 const WaitSyncPointCallback& callback) { | 3041 const WaitSyncPointCallback& callback) { |
3044 wait_sync_point_callback_ = callback; | 3042 wait_sync_point_callback_ = callback; |
3045 } | 3043 } |
3046 | 3044 |
3047 void GLES2DecoderImpl::SetStreamTextureManager(StreamTextureManager* manager) { | 3045 void GLES2DecoderImpl::SetStreamTextureManager(StreamTextureManager* manager) { |
3048 stream_texture_manager_ = manager; | 3046 stream_texture_manager_ = manager; |
3049 } | 3047 } |
3050 | 3048 |
3051 AsyncPixelTransferDelegate* | |
3052 GLES2DecoderImpl::GetAsyncPixelTransferDelegate() { | |
3053 return async_pixel_transfer_manager_->GetAsyncPixelTransferDelegate(); | |
3054 } | |
3055 | |
3056 AsyncPixelTransferManager* | 3049 AsyncPixelTransferManager* |
3057 GLES2DecoderImpl::GetAsyncPixelTransferManager() { | 3050 GLES2DecoderImpl::GetAsyncPixelTransferManager() { |
3058 return async_pixel_transfer_manager_.get(); | 3051 return async_pixel_transfer_manager_.get(); |
3059 } | 3052 } |
3060 | 3053 |
3061 void GLES2DecoderImpl::ResetAsyncPixelTransferManagerForTest() { | 3054 void GLES2DecoderImpl::ResetAsyncPixelTransferManagerForTest() { |
3062 async_pixel_transfer_manager_.reset(); | 3055 async_pixel_transfer_manager_.reset(); |
3063 } | 3056 } |
3064 | 3057 |
3065 void GLES2DecoderImpl::SetAsyncPixelTransferManagerForTest( | 3058 void GLES2DecoderImpl::SetAsyncPixelTransferManagerForTest( |
(...skipping 7108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10174 // Setup the parameters. | 10167 // Setup the parameters. |
10175 AsyncTexImage2DParams tex_params = { | 10168 AsyncTexImage2DParams tex_params = { |
10176 target, level, static_cast<GLenum>(internal_format), | 10169 target, level, static_cast<GLenum>(internal_format), |
10177 width, height, border, format, type}; | 10170 width, height, border, format, type}; |
10178 AsyncMemoryParams mem_params = { | 10171 AsyncMemoryParams mem_params = { |
10179 shared_memory, shm_size, shm_data_offset, shm_data_size}; | 10172 shared_memory, shm_size, shm_data_offset, shm_data_size}; |
10180 | 10173 |
10181 // Set up the async state if needed, and make the texture | 10174 // Set up the async state if needed, and make the texture |
10182 // immutable so the async state stays valid. The level info | 10175 // immutable so the async state stays valid. The level info |
10183 // is set up lazily when the transfer completes. | 10176 // is set up lazily when the transfer completes. |
10184 AsyncPixelTransferState* state = | 10177 AsyncPixelTransferDelegate* delegate = |
10185 async_pixel_transfer_manager_->CreatePixelTransferState(texture_ref, | 10178 async_pixel_transfer_manager_->CreatePixelTransferDelegate(texture_ref, |
10186 tex_params); | 10179 tex_params); |
10187 texture->SetImmutable(true); | 10180 texture->SetImmutable(true); |
10188 | 10181 |
10189 GetAsyncPixelTransferDelegate()->AsyncTexImage2D( | 10182 delegate->AsyncTexImage2D( |
10190 state, | |
10191 tex_params, | 10183 tex_params, |
10192 mem_params, | 10184 mem_params, |
10193 base::Bind(&TextureManager::SetLevelInfoFromParams, | 10185 base::Bind(&TextureManager::SetLevelInfoFromParams, |
10194 // The callback is only invoked if the transfer delegate still | 10186 // The callback is only invoked if the transfer delegate still |
10195 // exists, which implies through manager->texture_ref->state | 10187 // exists, which implies through manager->texture_ref->state |
10196 // ownership that both of these pointers are valid. | 10188 // ownership that both of these pointers are valid. |
10197 base::Unretained(texture_manager()), | 10189 base::Unretained(texture_manager()), |
10198 base::Unretained(texture_ref), | 10190 base::Unretained(texture_ref), |
10199 tex_params)); | 10191 tex_params)); |
10200 return error::kNoError; | 10192 return error::kNoError; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10259 base::SharedMemory* shared_memory = buffer.shared_memory; | 10251 base::SharedMemory* shared_memory = buffer.shared_memory; |
10260 uint32 shm_size = buffer.size; | 10252 uint32 shm_size = buffer.size; |
10261 uint32 shm_data_offset = c.data_shm_offset; | 10253 uint32 shm_data_offset = c.data_shm_offset; |
10262 uint32 shm_data_size = data_size; | 10254 uint32 shm_data_size = data_size; |
10263 | 10255 |
10264 // Setup the parameters. | 10256 // Setup the parameters. |
10265 AsyncTexSubImage2DParams tex_params = {target, level, xoffset, yoffset, | 10257 AsyncTexSubImage2DParams tex_params = {target, level, xoffset, yoffset, |
10266 width, height, format, type}; | 10258 width, height, format, type}; |
10267 AsyncMemoryParams mem_params = {shared_memory, shm_size, | 10259 AsyncMemoryParams mem_params = {shared_memory, shm_size, |
10268 shm_data_offset, shm_data_size}; | 10260 shm_data_offset, shm_data_size}; |
10269 AsyncPixelTransferState* state = | 10261 AsyncPixelTransferDelegate* delegate = |
10270 async_pixel_transfer_manager_->GetPixelTransferState(texture_ref); | 10262 async_pixel_transfer_manager_->GetPixelTransferDelegate(texture_ref); |
10271 if (!state) { | 10263 if (!delegate) { |
10272 // TODO(epenner): We may want to enforce exclusive use | 10264 // TODO(epenner): We may want to enforce exclusive use |
10273 // of async APIs in which case this should become an error, | 10265 // of async APIs in which case this should become an error, |
10274 // (the texture should have been async defined). | 10266 // (the texture should have been async defined). |
10275 AsyncTexImage2DParams define_params = {target, level, | 10267 AsyncTexImage2DParams define_params = {target, level, |
10276 0, 0, 0, 0, 0, 0}; | 10268 0, 0, 0, 0, 0, 0}; |
10277 texture->GetLevelSize(target, level, &define_params.width, | 10269 texture->GetLevelSize(target, level, &define_params.width, |
10278 &define_params.height); | 10270 &define_params.height); |
10279 texture->GetLevelType(target, level, &define_params.type, | 10271 texture->GetLevelType(target, level, &define_params.type, |
10280 &define_params.internal_format); | 10272 &define_params.internal_format); |
10281 // Set up the async state if needed, and make the texture | 10273 // Set up the async state if needed, and make the texture |
10282 // immutable so the async state stays valid. | 10274 // immutable so the async state stays valid. |
10283 state = async_pixel_transfer_manager_->CreatePixelTransferState( | 10275 delegate = async_pixel_transfer_manager_->CreatePixelTransferDelegate( |
10284 texture_ref, define_params); | 10276 texture_ref, define_params); |
10285 texture->SetImmutable(true); | 10277 texture->SetImmutable(true); |
10286 } | 10278 } |
10287 | 10279 |
10288 GetAsyncPixelTransferDelegate()->AsyncTexSubImage2D( | 10280 delegate->AsyncTexSubImage2D(tex_params, mem_params); |
10289 state, tex_params, mem_params); | |
10290 return error::kNoError; | 10281 return error::kNoError; |
10291 } | 10282 } |
10292 | 10283 |
10293 error::Error GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM( | 10284 error::Error GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM( |
10294 uint32 immediate_data_size, const cmds::WaitAsyncTexImage2DCHROMIUM& c) { | 10285 uint32 immediate_data_size, const cmds::WaitAsyncTexImage2DCHROMIUM& c) { |
10295 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM"); | 10286 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM"); |
10296 GLenum target = static_cast<GLenum>(c.target); | 10287 GLenum target = static_cast<GLenum>(c.target); |
10297 | 10288 |
10298 if (GL_TEXTURE_2D != target) { | 10289 if (GL_TEXTURE_2D != target) { |
10299 LOCAL_SET_GL_ERROR( | 10290 LOCAL_SET_GL_ERROR( |
10300 GL_INVALID_ENUM, "glWaitAsyncTexImage2DCHROMIUM", "target"); | 10291 GL_INVALID_ENUM, "glWaitAsyncTexImage2DCHROMIUM", "target"); |
10301 return error::kNoError; | 10292 return error::kNoError; |
10302 } | 10293 } |
10303 TextureRef* texture_ref = GetTextureInfoForTarget(target); | 10294 TextureRef* texture_ref = GetTextureInfoForTarget(target); |
10304 if (!texture_ref) { | 10295 if (!texture_ref) { |
10305 LOCAL_SET_GL_ERROR( | 10296 LOCAL_SET_GL_ERROR( |
10306 GL_INVALID_OPERATION, | 10297 GL_INVALID_OPERATION, |
10307 "glWaitAsyncTexImage2DCHROMIUM", "unknown texture"); | 10298 "glWaitAsyncTexImage2DCHROMIUM", "unknown texture"); |
10308 return error::kNoError; | 10299 return error::kNoError; |
10309 } | 10300 } |
10310 AsyncPixelTransferState* state = | 10301 AsyncPixelTransferDelegate* delegate = |
10311 async_pixel_transfer_manager_->GetPixelTransferState(texture_ref); | 10302 async_pixel_transfer_manager_->GetPixelTransferDelegate(texture_ref); |
10312 if (!state) { | 10303 if (!delegate) { |
10313 LOCAL_SET_GL_ERROR( | 10304 LOCAL_SET_GL_ERROR( |
10314 GL_INVALID_OPERATION, | 10305 GL_INVALID_OPERATION, |
10315 "glWaitAsyncTexImage2DCHROMIUM", "No async transfer started"); | 10306 "glWaitAsyncTexImage2DCHROMIUM", "No async transfer started"); |
10316 return error::kNoError; | 10307 return error::kNoError; |
10317 } | 10308 } |
10318 GetAsyncPixelTransferDelegate()->WaitForTransferCompletion(state); | 10309 delegate->WaitForTransferCompletion(); |
10319 ProcessFinishedAsyncTransfers(); | 10310 ProcessFinishedAsyncTransfers(); |
10320 return error::kNoError; | 10311 return error::kNoError; |
10321 } | 10312 } |
10322 | 10313 |
10323 // Include the auto-generated part of this file. We split this because it means | 10314 // Include the auto-generated part of this file. We split this because it means |
10324 // we can easily edit the non-auto generated parts right here in this file | 10315 // we can easily edit the non-auto generated parts right here in this file |
10325 // instead of having to edit some template or the code generator. | 10316 // instead of having to edit some template or the code generator. |
10326 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 10317 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
10327 | 10318 |
10328 } // namespace gles2 | 10319 } // namespace gles2 |
10329 } // namespace gpu | 10320 } // namespace gpu |
OLD | NEW |