| OLD | NEW | 
|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 489 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 500                           const gfx::Size& size, | 500                           const gfx::Size& size, | 
| 501                           const DisallowedFeatures& disallowed_features, | 501                           const DisallowedFeatures& disallowed_features, | 
| 502                           const char* allowed_extensions, | 502                           const char* allowed_extensions, | 
| 503                           const std::vector<int32>& attribs); | 503                           const std::vector<int32>& attribs); | 
| 504   virtual void Destroy(); | 504   virtual void Destroy(); | 
| 505   virtual bool SetParent(GLES2Decoder* parent_decoder, | 505   virtual bool SetParent(GLES2Decoder* parent_decoder, | 
| 506                          uint32 parent_texture_id); | 506                          uint32 parent_texture_id); | 
| 507   virtual bool ResizeOffscreenFrameBuffer(const gfx::Size& size); | 507   virtual bool ResizeOffscreenFrameBuffer(const gfx::Size& size); | 
| 508   void UpdateParentTextureInfo(); | 508   void UpdateParentTextureInfo(); | 
| 509   virtual bool MakeCurrent(); | 509   virtual bool MakeCurrent(); | 
|  | 510   virtual void ReleaseCurrent(); | 
| 510   virtual GLES2Util* GetGLES2Util() { return &util_; } | 511   virtual GLES2Util* GetGLES2Util() { return &util_; } | 
| 511   virtual gfx::GLContext* GetGLContext() { return context_.get(); } | 512   virtual gfx::GLContext* GetGLContext() { return context_.get(); } | 
| 512   virtual gfx::GLSurface* GetGLSurface() { return surface_.get(); } | 513   virtual gfx::GLSurface* GetGLSurface() { return surface_.get(); } | 
| 513   virtual ContextGroup* GetContextGroup() { return group_.get(); } | 514   virtual ContextGroup* GetContextGroup() { return group_.get(); } | 
| 514 | 515 | 
| 515   virtual void SetResizeCallback(Callback1<gfx::Size>::Type* callback); | 516   virtual void SetResizeCallback(Callback1<gfx::Size>::Type* callback); | 
| 516 | 517 | 
| 517 #if defined(OS_MACOSX) |  | 
| 518   virtual void SetSwapBuffersCallback(Callback0::Type* callback); | 518   virtual void SetSwapBuffersCallback(Callback0::Type* callback); | 
| 519 #endif |  | 
| 520 | 519 | 
| 521   virtual void SetStreamTextureManager(StreamTextureManager* manager); | 520   virtual void SetStreamTextureManager(StreamTextureManager* manager); | 
| 522   virtual bool GetServiceTextureId(uint32 client_texture_id, | 521   virtual bool GetServiceTextureId(uint32 client_texture_id, | 
| 523                                    uint32* service_texture_id); | 522                                    uint32* service_texture_id); | 
| 524 | 523 | 
| 525   // Restores the current state to the user's settings. | 524   // Restores the current state to the user's settings. | 
| 526   void RestoreCurrentFramebufferBindings(); | 525   void RestoreCurrentFramebufferBindings(); | 
| 527   void RestoreCurrentRenderbufferBindings(); | 526   void RestoreCurrentRenderbufferBindings(); | 
| 528   void RestoreCurrentTexture2DBindings(); | 527   void RestoreCurrentTexture2DBindings(); | 
| 529 | 528 | 
| (...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1317   scoped_ptr<FrameBuffer> offscreen_saved_frame_buffer_; | 1316   scoped_ptr<FrameBuffer> offscreen_saved_frame_buffer_; | 
| 1318   scoped_ptr<Texture> offscreen_saved_color_texture_; | 1317   scoped_ptr<Texture> offscreen_saved_color_texture_; | 
| 1319 | 1318 | 
| 1320   // The copy that is used as the destination for multi-sample resolves. | 1319   // The copy that is used as the destination for multi-sample resolves. | 
| 1321   scoped_ptr<FrameBuffer> offscreen_resolved_frame_buffer_; | 1320   scoped_ptr<FrameBuffer> offscreen_resolved_frame_buffer_; | 
| 1322   scoped_ptr<Texture> offscreen_resolved_color_texture_; | 1321   scoped_ptr<Texture> offscreen_resolved_color_texture_; | 
| 1323   GLenum offscreen_saved_color_format_; | 1322   GLenum offscreen_saved_color_format_; | 
| 1324 | 1323 | 
| 1325   scoped_ptr<Callback1<gfx::Size>::Type> resize_callback_; | 1324   scoped_ptr<Callback1<gfx::Size>::Type> resize_callback_; | 
| 1326 | 1325 | 
| 1327 #if defined(OS_MACOSX) |  | 
| 1328   scoped_ptr<Callback0::Type> swap_buffers_callback_; | 1326   scoped_ptr<Callback0::Type> swap_buffers_callback_; | 
| 1329 #endif |  | 
| 1330 | 1327 | 
| 1331   StreamTextureManager* stream_texture_manager_; | 1328   StreamTextureManager* stream_texture_manager_; | 
| 1332 | 1329 | 
| 1333   // The format of the back buffer_ | 1330   // The format of the back buffer_ | 
| 1334   GLenum back_buffer_color_format_; | 1331   GLenum back_buffer_color_format_; | 
| 1335   bool back_buffer_has_depth_; | 1332   bool back_buffer_has_depth_; | 
| 1336   bool back_buffer_has_stencil_; | 1333   bool back_buffer_has_stencil_; | 
| 1337 | 1334 | 
| 1338   bool teximage2d_faster_than_texsubimage2d_; | 1335   bool teximage2d_faster_than_texsubimage2d_; | 
| 1339   bool bufferdata_faster_than_buffersubdata_; | 1336   bool bufferdata_faster_than_buffersubdata_; | 
| (...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2216 bool GLES2DecoderImpl::MakeCurrent() { | 2213 bool GLES2DecoderImpl::MakeCurrent() { | 
| 2217   bool result = context_.get() ? context_->MakeCurrent(surface_.get()) : false; | 2214   bool result = context_.get() ? context_->MakeCurrent(surface_.get()) : false; | 
| 2218   if (result && WasContextLost()) { | 2215   if (result && WasContextLost()) { | 
| 2219     LOG(ERROR) << "  GLES2DecoderImpl: Context lost during MakeCurrent."; | 2216     LOG(ERROR) << "  GLES2DecoderImpl: Context lost during MakeCurrent."; | 
| 2220     result = false; | 2217     result = false; | 
| 2221   } | 2218   } | 
| 2222 | 2219 | 
| 2223   return result; | 2220   return result; | 
| 2224 } | 2221 } | 
| 2225 | 2222 | 
|  | 2223 void GLES2DecoderImpl::ReleaseCurrent() { | 
|  | 2224   if (context_.get()) | 
|  | 2225     context_->ReleaseCurrent(surface_.get()); | 
|  | 2226 } | 
|  | 2227 | 
| 2226 void GLES2DecoderImpl::RestoreCurrentRenderbufferBindings() { | 2228 void GLES2DecoderImpl::RestoreCurrentRenderbufferBindings() { | 
| 2227   glBindRenderbufferEXT( | 2229   glBindRenderbufferEXT( | 
| 2228       GL_RENDERBUFFER, | 2230       GL_RENDERBUFFER, | 
| 2229       bound_renderbuffer_ ? bound_renderbuffer_->service_id() : 0); | 2231       bound_renderbuffer_ ? bound_renderbuffer_->service_id() : 0); | 
| 2230 } | 2232 } | 
| 2231 | 2233 | 
| 2232 static void RebindCurrentFramebuffer( | 2234 static void RebindCurrentFramebuffer( | 
| 2233     GLenum target, | 2235     GLenum target, | 
| 2234     FramebufferManager::FramebufferInfo* info, | 2236     FramebufferManager::FramebufferInfo* info, | 
| 2235     FrameBuffer* offscreen_frame_buffer) { | 2237     FrameBuffer* offscreen_frame_buffer) { | 
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2364         GL_TEXTURE_WRAP_T, | 2366         GL_TEXTURE_WRAP_T, | 
| 2365         GL_CLAMP_TO_EDGE); | 2367         GL_CLAMP_TO_EDGE); | 
| 2366   } | 2368   } | 
| 2367 } | 2369 } | 
| 2368 | 2370 | 
| 2369 void GLES2DecoderImpl::SetResizeCallback( | 2371 void GLES2DecoderImpl::SetResizeCallback( | 
| 2370     Callback1<gfx::Size>::Type* callback) { | 2372     Callback1<gfx::Size>::Type* callback) { | 
| 2371   resize_callback_.reset(callback); | 2373   resize_callback_.reset(callback); | 
| 2372 } | 2374 } | 
| 2373 | 2375 | 
| 2374 #if defined(OS_MACOSX) |  | 
| 2375 void GLES2DecoderImpl::SetSwapBuffersCallback(Callback0::Type* callback) { | 2376 void GLES2DecoderImpl::SetSwapBuffersCallback(Callback0::Type* callback) { | 
| 2376   swap_buffers_callback_.reset(callback); | 2377   swap_buffers_callback_.reset(callback); | 
| 2377 } | 2378 } | 
| 2378 #endif |  | 
| 2379 | 2379 | 
| 2380 void GLES2DecoderImpl::SetStreamTextureManager(StreamTextureManager* manager) { | 2380 void GLES2DecoderImpl::SetStreamTextureManager(StreamTextureManager* manager) { | 
| 2381   stream_texture_manager_ = manager; | 2381   stream_texture_manager_ = manager; | 
| 2382 } | 2382 } | 
| 2383 | 2383 | 
| 2384 bool GLES2DecoderImpl::GetServiceTextureId(uint32 client_texture_id, | 2384 bool GLES2DecoderImpl::GetServiceTextureId(uint32 client_texture_id, | 
| 2385                                            uint32* service_texture_id) { | 2385                                            uint32* service_texture_id) { | 
| 2386   TextureManager::TextureInfo* texture = | 2386   TextureManager::TextureInfo* texture = | 
| 2387       texture_manager()->GetTextureInfo(client_texture_id); | 2387       texture_manager()->GetTextureInfo(client_texture_id); | 
| 2388   if (texture) { | 2388   if (texture) { | 
| (...skipping 4455 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6844 | 6844 | 
| 6845       UpdateParentTextureInfo(); | 6845       UpdateParentTextureInfo(); | 
| 6846     } | 6846     } | 
| 6847 | 6847 | 
| 6848     ScopedGLErrorSuppressor suppressor(this); | 6848     ScopedGLErrorSuppressor suppressor(this); | 
| 6849 | 6849 | 
| 6850     if (IsOffscreenBufferMultisampled()) { | 6850     if (IsOffscreenBufferMultisampled()) { | 
| 6851       // For multisampled buffers, bind the resolved frame buffer so that | 6851       // For multisampled buffers, bind the resolved frame buffer so that | 
| 6852       // callbacks can call ReadPixels or CopyTexImage2D. | 6852       // callbacks can call ReadPixels or CopyTexImage2D. | 
| 6853       ScopedResolvedFrameBufferBinder binder(this, true, false); | 6853       ScopedResolvedFrameBufferBinder binder(this, true, false); | 
| 6854 #if defined(OS_MACOSX) |  | 
| 6855       if (swap_buffers_callback_.get()) { | 6854       if (swap_buffers_callback_.get()) { | 
| 6856         swap_buffers_callback_->Run(); | 6855         swap_buffers_callback_->Run(); | 
| 6857       } | 6856       } | 
| 6858 #endif | 6857 | 
| 6859       return error::kNoError; | 6858       return error::kNoError; | 
| 6860     } else { | 6859     } else { | 
| 6861       ScopedFrameBufferBinder binder(this, | 6860       ScopedFrameBufferBinder binder(this, | 
| 6862                                      offscreen_target_frame_buffer_->id()); | 6861                                      offscreen_target_frame_buffer_->id()); | 
| 6863 | 6862 | 
| 6864       if (surface_->IsOffscreen()) { | 6863       if (surface_->IsOffscreen()) { | 
| 6865         // Copy the target frame buffer to the saved offscreen texture. | 6864         // Copy the target frame buffer to the saved offscreen texture. | 
| 6866         offscreen_saved_color_texture_->Copy( | 6865         offscreen_saved_color_texture_->Copy( | 
| 6867             offscreen_saved_color_texture_->size(), | 6866             offscreen_saved_color_texture_->size(), | 
| 6868             offscreen_saved_color_format_); | 6867             offscreen_saved_color_format_); | 
| 6869 | 6868 | 
| 6870         // Ensure the side effects of the copy are visible to the parent | 6869         // Ensure the side effects of the copy are visible to the parent | 
| 6871         // context. There is no need to do this for ANGLE because it uses a | 6870         // context. There is no need to do this for ANGLE because it uses a | 
| 6872         // single D3D device for all contexts. | 6871         // single D3D device for all contexts. | 
| 6873         if (!IsAngle()) | 6872         if (!IsAngle()) | 
| 6874           glFlush(); | 6873           glFlush(); | 
| 6875       } | 6874       } | 
| 6876 | 6875 | 
| 6877       // Run the callback with |binder| in scope, so that the callback can call | 6876       // Run the callback with |binder| in scope, so that the callback can call | 
| 6878       // ReadPixels or CopyTexImage2D. | 6877       // ReadPixels or CopyTexImage2D. | 
| 6879 #if defined(OS_MACOSX) |  | 
| 6880       if (swap_buffers_callback_.get()) { | 6878       if (swap_buffers_callback_.get()) { | 
| 6881         swap_buffers_callback_->Run(); | 6879         swap_buffers_callback_->Run(); | 
| 6882       } | 6880       } | 
| 6883 #endif | 6881 | 
| 6884       return error::kNoError; | 6882       return error::kNoError; | 
| 6885     } | 6883     } | 
| 6886   } else { | 6884   } else { | 
| 6887     TRACE_EVENT1("gpu", "GLContext::SwapBuffers", "frame", this_frame_number); | 6885     TRACE_EVENT1("gpu", "GLContext::SwapBuffers", "frame", this_frame_number); | 
| 6888     if (!surface_->SwapBuffers()) { | 6886     if (!surface_->SwapBuffers()) { | 
| 6889       LOG(ERROR) << "Context lost because SwapBuffers failed."; | 6887       LOG(ERROR) << "Context lost because SwapBuffers failed."; | 
| 6890       return error::kLostContext; | 6888       return error::kLostContext; | 
| 6891     } | 6889     } | 
| 6892   } | 6890   } | 
| 6893 | 6891 | 
| 6894 #if defined(OS_MACOSX) |  | 
| 6895   if (swap_buffers_callback_.get()) { | 6892   if (swap_buffers_callback_.get()) { | 
| 6896     swap_buffers_callback_->Run(); | 6893     swap_buffers_callback_->Run(); | 
| 6897   } | 6894   } | 
| 6898 #endif |  | 
| 6899 | 6895 | 
| 6900   return error::kNoError; | 6896   return error::kNoError; | 
| 6901 } | 6897 } | 
| 6902 | 6898 | 
| 6903 error::Error GLES2DecoderImpl::HandleEnableFeatureCHROMIUM( | 6899 error::Error GLES2DecoderImpl::HandleEnableFeatureCHROMIUM( | 
| 6904     uint32 immediate_data_size, const gles2::EnableFeatureCHROMIUM& c) { | 6900     uint32 immediate_data_size, const gles2::EnableFeatureCHROMIUM& c) { | 
| 6905   Bucket* bucket = GetBucket(c.bucket_id); | 6901   Bucket* bucket = GetBucket(c.bucket_id); | 
| 6906   if (!bucket || bucket->size() == 0) { | 6902   if (!bucket || bucket->size() == 0) { | 
| 6907     return error::kInvalidArguments; | 6903     return error::kInvalidArguments; | 
| 6908   } | 6904   } | 
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 7202   return error::kNoError; | 7198   return error::kNoError; | 
| 7203 } | 7199 } | 
| 7204 | 7200 | 
| 7205 // Include the auto-generated part of this file. We split this because it means | 7201 // Include the auto-generated part of this file. We split this because it means | 
| 7206 // we can easily edit the non-auto generated parts right here in this file | 7202 // we can easily edit the non-auto generated parts right here in this file | 
| 7207 // instead of having to edit some template or the code generator. | 7203 // instead of having to edit some template or the code generator. | 
| 7208 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 7204 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 
| 7209 | 7205 | 
| 7210 }  // namespace gles2 | 7206 }  // namespace gles2 | 
| 7211 }  // namespace gpu | 7207 }  // namespace gpu | 
| OLD | NEW | 
|---|