| 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 #include "gpu/command_buffer/service/program_manager.h" | 51 #include "gpu/command_buffer/service/program_manager.h" |
| 52 #include "gpu/command_buffer/service/query_manager.h" | 52 #include "gpu/command_buffer/service/query_manager.h" |
| 53 #include "gpu/command_buffer/service/renderbuffer_manager.h" | 53 #include "gpu/command_buffer/service/renderbuffer_manager.h" |
| 54 #include "gpu/command_buffer/service/shader_manager.h" | 54 #include "gpu/command_buffer/service/shader_manager.h" |
| 55 #include "gpu/command_buffer/service/shader_translator.h" | 55 #include "gpu/command_buffer/service/shader_translator.h" |
| 56 #include "gpu/command_buffer/service/shader_translator_cache.h" | 56 #include "gpu/command_buffer/service/shader_translator_cache.h" |
| 57 #include "gpu/command_buffer/service/texture_manager.h" | 57 #include "gpu/command_buffer/service/texture_manager.h" |
| 58 #include "gpu/command_buffer/service/vertex_array_manager.h" | 58 #include "gpu/command_buffer/service/vertex_array_manager.h" |
| 59 #include "gpu/command_buffer/service/vertex_attrib_manager.h" | 59 #include "gpu/command_buffer/service/vertex_attrib_manager.h" |
| 60 #include "third_party/smhasher/src/City.h" | 60 #include "third_party/smhasher/src/City.h" |
| 61 #include "ui/gl/gl_bindings.h" | |
| 62 #include "ui/gl/gl_fence.h" | 61 #include "ui/gl/gl_fence.h" |
| 63 #include "ui/gl/gl_image.h" | 62 #include "ui/gl/gl_image.h" |
| 64 #include "ui/gl/gl_implementation.h" | 63 #include "ui/gl/gl_implementation.h" |
| 65 #include "ui/gl/gl_surface.h" | 64 #include "ui/gl/gl_surface.h" |
| 66 | 65 |
| 67 #if defined(OS_MACOSX) | 66 #if defined(OS_MACOSX) |
| 68 #include <IOSurface/IOSurfaceAPI.h> | 67 #include <IOSurface/IOSurfaceAPI.h> |
| 69 // Note that this must be included after gl_bindings.h to avoid conflicts. | 68 // Note that this must be included after gl_bindings.h to avoid conflicts. |
| 70 #include <OpenGL/CGLIOSurface.h> | 69 #include <OpenGL/CGLIOSurface.h> |
| 71 #endif | 70 #endif |
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 virtual ~AsyncUploadTokenCompletionObserver() { | 548 virtual ~AsyncUploadTokenCompletionObserver() { |
| 550 } | 549 } |
| 551 | 550 |
| 552 uint32 async_upload_token_; | 551 uint32 async_upload_token_; |
| 553 | 552 |
| 554 DISALLOW_COPY_AND_ASSIGN(AsyncUploadTokenCompletionObserver); | 553 DISALLOW_COPY_AND_ASSIGN(AsyncUploadTokenCompletionObserver); |
| 555 }; | 554 }; |
| 556 | 555 |
| 557 // } // anonymous namespace. | 556 // } // anonymous namespace. |
| 558 | 557 |
| 558 static const GLuint kDefaultStencilMask = static_cast<GLuint>(-1); |
| 559 |
| 559 bool GLES2Decoder::GetServiceTextureId(uint32 client_texture_id, | 560 bool GLES2Decoder::GetServiceTextureId(uint32 client_texture_id, |
| 560 uint32* service_texture_id) { | 561 uint32* service_texture_id) { |
| 561 return false; | 562 return false; |
| 562 } | 563 } |
| 563 | 564 |
| 564 GLES2Decoder::GLES2Decoder() | 565 GLES2Decoder::GLES2Decoder() |
| 565 : initialized_(false), | 566 : initialized_(false), |
| 566 debug_(false), | 567 debug_(false), |
| 567 log_commands_(false) { | 568 log_commands_(false) { |
| 568 } | 569 } |
| (...skipping 2531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3100 | 3101 |
| 3101 bool GLES2DecoderImpl::CheckFramebufferValid( | 3102 bool GLES2DecoderImpl::CheckFramebufferValid( |
| 3102 Framebuffer* framebuffer, | 3103 Framebuffer* framebuffer, |
| 3103 GLenum target, const char* func_name) { | 3104 GLenum target, const char* func_name) { |
| 3104 if (!framebuffer) { | 3105 if (!framebuffer) { |
| 3105 if (backbuffer_needs_clear_bits_) { | 3106 if (backbuffer_needs_clear_bits_) { |
| 3106 glClearColor(0, 0, 0, (GLES2Util::GetChannelsForFormat( | 3107 glClearColor(0, 0, 0, (GLES2Util::GetChannelsForFormat( |
| 3107 offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1); | 3108 offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1); |
| 3108 state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); | 3109 state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); |
| 3109 glClearStencil(0); | 3110 glClearStencil(0); |
| 3110 state_.SetDeviceStencilMaskSeparate(GL_FRONT, -1); | 3111 state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask); |
| 3111 state_.SetDeviceStencilMaskSeparate(GL_BACK, -1); | 3112 state_.SetDeviceStencilMaskSeparate(GL_BACK, kDefaultStencilMask); |
| 3112 glClearDepth(1.0f); | 3113 glClearDepth(1.0f); |
| 3113 state_.SetDeviceDepthMask(GL_TRUE); | 3114 state_.SetDeviceDepthMask(GL_TRUE); |
| 3114 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false); | 3115 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false); |
| 3115 bool reset_draw_buffer = false; | 3116 bool reset_draw_buffer = false; |
| 3116 if ((backbuffer_needs_clear_bits_ | GL_COLOR_BUFFER_BIT) != 0 && | 3117 if ((backbuffer_needs_clear_bits_ | GL_COLOR_BUFFER_BIT) != 0 && |
| 3117 group_->draw_buffer() == GL_NONE) { | 3118 group_->draw_buffer() == GL_NONE) { |
| 3118 reset_draw_buffer = true; | 3119 reset_draw_buffer = true; |
| 3119 GLenum buf = GL_BACK; | 3120 GLenum buf = GL_BACK; |
| 3120 if (GetBackbufferServiceId() != 0) // emulated backbuffer | 3121 if (GetBackbufferServiceId() != 0) // emulated backbuffer |
| 3121 buf = GL_COLOR_ATTACHMENT0; | 3122 buf = GL_COLOR_ATTACHMENT0; |
| (...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3622 return false; | 3623 return false; |
| 3623 } | 3624 } |
| 3624 | 3625 |
| 3625 // Clear the target frame buffer. | 3626 // Clear the target frame buffer. |
| 3626 { | 3627 { |
| 3627 ScopedFrameBufferBinder binder(this, offscreen_target_frame_buffer_->id()); | 3628 ScopedFrameBufferBinder binder(this, offscreen_target_frame_buffer_->id()); |
| 3628 glClearColor(0, 0, 0, (GLES2Util::GetChannelsForFormat( | 3629 glClearColor(0, 0, 0, (GLES2Util::GetChannelsForFormat( |
| 3629 offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1); | 3630 offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1); |
| 3630 state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); | 3631 state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); |
| 3631 glClearStencil(0); | 3632 glClearStencil(0); |
| 3632 state_.SetDeviceStencilMaskSeparate(GL_FRONT, -1); | 3633 state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask); |
| 3633 state_.SetDeviceStencilMaskSeparate(GL_BACK, -1); | 3634 state_.SetDeviceStencilMaskSeparate(GL_BACK, kDefaultStencilMask); |
| 3634 glClearDepth(0); | 3635 glClearDepth(0); |
| 3635 state_.SetDeviceDepthMask(GL_TRUE); | 3636 state_.SetDeviceDepthMask(GL_TRUE); |
| 3636 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false); | 3637 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false); |
| 3637 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | 3638 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); |
| 3638 RestoreClearState(); | 3639 RestoreClearState(); |
| 3639 } | 3640 } |
| 3640 | 3641 |
| 3641 // Destroy the offscreen resolved framebuffers. | 3642 // Destroy the offscreen resolved framebuffers. |
| 3642 if (offscreen_resolved_frame_buffer_.get()) | 3643 if (offscreen_resolved_frame_buffer_.get()) |
| 3643 offscreen_resolved_frame_buffer_->Destroy(); | 3644 offscreen_resolved_frame_buffer_->Destroy(); |
| (...skipping 1409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5053 framebuffer->GetColorAttachmentFormat()) & 0x0008) != 0 ? 0.0f : | 5054 framebuffer->GetColorAttachmentFormat()) & 0x0008) != 0 ? 0.0f : |
| 5054 1.0f); | 5055 1.0f); |
| 5055 state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); | 5056 state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); |
| 5056 clear_bits |= GL_COLOR_BUFFER_BIT; | 5057 clear_bits |= GL_COLOR_BUFFER_BIT; |
| 5057 framebuffer->PrepareDrawBuffersForClear(); | 5058 framebuffer->PrepareDrawBuffersForClear(); |
| 5058 } | 5059 } |
| 5059 | 5060 |
| 5060 if (framebuffer->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT) || | 5061 if (framebuffer->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT) || |
| 5061 framebuffer->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)) { | 5062 framebuffer->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)) { |
| 5062 glClearStencil(0); | 5063 glClearStencil(0); |
| 5063 state_.SetDeviceStencilMaskSeparate(GL_FRONT, -1); | 5064 state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask); |
| 5064 state_.SetDeviceStencilMaskSeparate(GL_BACK, -1); | 5065 state_.SetDeviceStencilMaskSeparate(GL_BACK, kDefaultStencilMask); |
| 5065 clear_bits |= GL_STENCIL_BUFFER_BIT; | 5066 clear_bits |= GL_STENCIL_BUFFER_BIT; |
| 5066 } | 5067 } |
| 5067 | 5068 |
| 5068 if (framebuffer->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT) || | 5069 if (framebuffer->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT) || |
| 5069 framebuffer->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)) { | 5070 framebuffer->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)) { |
| 5070 glClearDepth(1.0f); | 5071 glClearDepth(1.0f); |
| 5071 state_.SetDeviceDepthMask(GL_TRUE); | 5072 state_.SetDeviceDepthMask(GL_TRUE); |
| 5072 clear_bits |= GL_DEPTH_BUFFER_BIT; | 5073 clear_bits |= GL_DEPTH_BUFFER_BIT; |
| 5073 } | 5074 } |
| 5074 | 5075 |
| (...skipping 2778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7853 GL_DEPTH_ATTACHMENT; | 7854 GL_DEPTH_ATTACHMENT; |
| 7854 | 7855 |
| 7855 glFramebufferTexture2DEXT( | 7856 glFramebufferTexture2DEXT( |
| 7856 GL_DRAW_FRAMEBUFFER_EXT, attachment, target, service_id, level); | 7857 GL_DRAW_FRAMEBUFFER_EXT, attachment, target, service_id, level); |
| 7857 // ANGLE promises a depth only attachment ok. | 7858 // ANGLE promises a depth only attachment ok. |
| 7858 if (glCheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT) != | 7859 if (glCheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT) != |
| 7859 GL_FRAMEBUFFER_COMPLETE) { | 7860 GL_FRAMEBUFFER_COMPLETE) { |
| 7860 return false; | 7861 return false; |
| 7861 } | 7862 } |
| 7862 glClearStencil(0); | 7863 glClearStencil(0); |
| 7863 state_.SetDeviceStencilMaskSeparate(GL_FRONT, -1); | 7864 state_.SetDeviceStencilMaskSeparate(GL_FRONT, kDefaultStencilMask); |
| 7864 state_.SetDeviceStencilMaskSeparate(GL_BACK, -1); | 7865 state_.SetDeviceStencilMaskSeparate(GL_BACK, kDefaultStencilMask); |
| 7865 glClearDepth(1.0f); | 7866 glClearDepth(1.0f); |
| 7866 state_.SetDeviceDepthMask(GL_TRUE); | 7867 state_.SetDeviceDepthMask(GL_TRUE); |
| 7867 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false); | 7868 state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false); |
| 7868 glClear(GL_DEPTH_BUFFER_BIT | (have_stencil ? GL_STENCIL_BUFFER_BIT : 0)); | 7869 glClear(GL_DEPTH_BUFFER_BIT | (have_stencil ? GL_STENCIL_BUFFER_BIT : 0)); |
| 7869 | 7870 |
| 7870 RestoreClearState(); | 7871 RestoreClearState(); |
| 7871 | 7872 |
| 7872 glDeleteFramebuffersEXT(1, &fb); | 7873 glDeleteFramebuffersEXT(1, &fb); |
| 7873 Framebuffer* framebuffer = | 7874 Framebuffer* framebuffer = |
| 7874 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT); | 7875 GetFramebufferInfoForTarget(GL_DRAW_FRAMEBUFFER_EXT); |
| (...skipping 2123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9998 // needed because it takes 10s of milliseconds to initialize. | 9999 // needed because it takes 10s of milliseconds to initialize. |
| 9999 if (!copy_texture_CHROMIUM_.get()) { | 10000 if (!copy_texture_CHROMIUM_.get()) { |
| 10000 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopyTextureCHROMIUM"); | 10001 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glCopyTextureCHROMIUM"); |
| 10001 copy_texture_CHROMIUM_.reset(new CopyTextureCHROMIUMResourceManager()); | 10002 copy_texture_CHROMIUM_.reset(new CopyTextureCHROMIUMResourceManager()); |
| 10002 copy_texture_CHROMIUM_->Initialize(this); | 10003 copy_texture_CHROMIUM_->Initialize(this); |
| 10003 RestoreCurrentFramebufferBindings(); | 10004 RestoreCurrentFramebufferBindings(); |
| 10004 if (LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM") != GL_NO_ERROR) | 10005 if (LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM") != GL_NO_ERROR) |
| 10005 return; | 10006 return; |
| 10006 } | 10007 } |
| 10007 | 10008 |
| 10008 GLenum dest_type_previous; | 10009 GLenum dest_type_previous = dest_type; |
| 10009 GLenum dest_internal_format; | 10010 GLenum dest_internal_format = internal_format; |
| 10010 bool dest_level_defined = dest_texture->GetLevelSize( | 10011 bool dest_level_defined = dest_texture->GetLevelSize( |
| 10011 GL_TEXTURE_2D, level, &dest_width, &dest_height); | 10012 GL_TEXTURE_2D, level, &dest_width, &dest_height); |
| 10012 | 10013 |
| 10013 if (dest_level_defined) { | 10014 if (dest_level_defined) { |
| 10014 dest_texture->GetLevelType(GL_TEXTURE_2D, level, &dest_type_previous, | 10015 dest_texture->GetLevelType(GL_TEXTURE_2D, level, &dest_type_previous, |
| 10015 &dest_internal_format); | 10016 &dest_internal_format); |
| 10016 } | 10017 } |
| 10017 | 10018 |
| 10018 // Resize the destination texture to the dimensions of the source texture. | 10019 // Resize the destination texture to the dimensions of the source texture. |
| 10019 if (!dest_level_defined || dest_width != source_width || | 10020 if (!dest_level_defined || dest_width != source_width || |
| (...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10882 } | 10883 } |
| 10883 } | 10884 } |
| 10884 | 10885 |
| 10885 // Include the auto-generated part of this file. We split this because it means | 10886 // Include the auto-generated part of this file. We split this because it means |
| 10886 // we can easily edit the non-auto generated parts right here in this file | 10887 // we can easily edit the non-auto generated parts right here in this file |
| 10887 // instead of having to edit some template or the code generator. | 10888 // instead of having to edit some template or the code generator. |
| 10888 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 10889 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
| 10889 | 10890 |
| 10890 } // namespace gles2 | 10891 } // namespace gles2 |
| 10891 } // namespace gpu | 10892 } // namespace gpu |
| OLD | NEW |