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 1403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1414 NOTREACHED(); | 1414 NOTREACHED(); |
1415 return 0; | 1415 return 0; |
1416 } | 1416 } |
1417 | 1417 |
1418 // Gets the framebuffer info for a particular target. | 1418 // Gets the framebuffer info for a particular target. |
1419 Framebuffer* GetFramebufferInfoForTarget(GLenum target) { | 1419 Framebuffer* GetFramebufferInfoForTarget(GLenum target) { |
1420 Framebuffer* framebuffer = NULL; | 1420 Framebuffer* framebuffer = NULL; |
1421 switch (target) { | 1421 switch (target) { |
1422 case GL_FRAMEBUFFER: | 1422 case GL_FRAMEBUFFER: |
1423 case GL_DRAW_FRAMEBUFFER_EXT: | 1423 case GL_DRAW_FRAMEBUFFER_EXT: |
1424 framebuffer = state_.bound_draw_framebuffer.get(); | 1424 framebuffer = framebuffer_state_.bound_draw_framebuffer.get(); |
1425 break; | 1425 break; |
1426 case GL_READ_FRAMEBUFFER_EXT: | 1426 case GL_READ_FRAMEBUFFER_EXT: |
1427 framebuffer = state_.bound_read_framebuffer.get(); | 1427 framebuffer = framebuffer_state_.bound_read_framebuffer.get(); |
1428 break; | 1428 break; |
1429 default: | 1429 default: |
1430 NOTREACHED(); | 1430 NOTREACHED(); |
1431 break; | 1431 break; |
1432 } | 1432 } |
1433 return framebuffer; | 1433 return framebuffer; |
1434 } | 1434 } |
1435 | 1435 |
1436 Renderbuffer* GetRenderbufferInfoForTarget( | 1436 Renderbuffer* GetRenderbufferInfoForTarget( |
1437 GLenum target) { | 1437 GLenum target) { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1494 const FeatureInfo::FeatureFlags& features() const { | 1494 const FeatureInfo::FeatureFlags& features() const { |
1495 return feature_info_->feature_flags(); | 1495 return feature_info_->feature_flags(); |
1496 } | 1496 } |
1497 | 1497 |
1498 const FeatureInfo::Workarounds& workarounds() const { | 1498 const FeatureInfo::Workarounds& workarounds() const { |
1499 return feature_info_->workarounds(); | 1499 return feature_info_->workarounds(); |
1500 } | 1500 } |
1501 | 1501 |
1502 bool ShouldDeferDraws() { | 1502 bool ShouldDeferDraws() { |
1503 return !offscreen_target_frame_buffer_.get() && | 1503 return !offscreen_target_frame_buffer_.get() && |
1504 state_.bound_draw_framebuffer.get() == NULL && | 1504 framebuffer_state_.bound_draw_framebuffer.get() == NULL && |
1505 surface_->DeferDraws(); | 1505 surface_->DeferDraws(); |
1506 } | 1506 } |
1507 | 1507 |
1508 bool ShouldDeferReads() { | 1508 bool ShouldDeferReads() { |
1509 return !offscreen_target_frame_buffer_.get() && | 1509 return !offscreen_target_frame_buffer_.get() && |
1510 state_.bound_read_framebuffer.get() == NULL && | 1510 framebuffer_state_.bound_read_framebuffer.get() == NULL && |
1511 surface_->DeferDraws(); | 1511 surface_->DeferDraws(); |
1512 } | 1512 } |
1513 | 1513 |
1514 void ProcessPendingReadPixels(); | 1514 void ProcessPendingReadPixels(); |
1515 void FinishReadPixels(const cmds::ReadPixels& c, GLuint buffer); | 1515 void FinishReadPixels(const cmds::ReadPixels& c, GLuint buffer); |
1516 | 1516 |
1517 // Generate a member function prototype for each command in an automated and | 1517 // Generate a member function prototype for each command in an automated and |
1518 // typesafe way. | 1518 // typesafe way. |
1519 #define GLES2_CMD_OP(name) \ | 1519 #define GLES2_CMD_OP(name) \ |
1520 Error Handle ## name( \ | 1520 Error Handle ## name( \ |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1738 | 1738 |
1739 ScopedFrameBufferBinder::~ScopedFrameBufferBinder() { | 1739 ScopedFrameBufferBinder::~ScopedFrameBufferBinder() { |
1740 ScopedGLErrorSuppressor suppressor( | 1740 ScopedGLErrorSuppressor suppressor( |
1741 "ScopedFrameBufferBinder::dtor", decoder_); | 1741 "ScopedFrameBufferBinder::dtor", decoder_); |
1742 decoder_->RestoreCurrentFramebufferBindings(); | 1742 decoder_->RestoreCurrentFramebufferBindings(); |
1743 } | 1743 } |
1744 | 1744 |
1745 ScopedResolvedFrameBufferBinder::ScopedResolvedFrameBufferBinder( | 1745 ScopedResolvedFrameBufferBinder::ScopedResolvedFrameBufferBinder( |
1746 GLES2DecoderImpl* decoder, bool enforce_internal_framebuffer, bool internal) | 1746 GLES2DecoderImpl* decoder, bool enforce_internal_framebuffer, bool internal) |
1747 : decoder_(decoder) { | 1747 : decoder_(decoder) { |
1748 resolve_and_bind_ = (decoder_->offscreen_target_frame_buffer_.get() && | 1748 resolve_and_bind_ = ( |
1749 decoder_->IsOffscreenBufferMultisampled() && | 1749 decoder_->offscreen_target_frame_buffer_.get() && |
1750 (!decoder_->state_.bound_read_framebuffer.get() || | 1750 decoder_->IsOffscreenBufferMultisampled() && |
1751 enforce_internal_framebuffer)); | 1751 (!decoder_->framebuffer_state_.bound_read_framebuffer.get() || |
| 1752 enforce_internal_framebuffer)); |
1752 if (!resolve_and_bind_) | 1753 if (!resolve_and_bind_) |
1753 return; | 1754 return; |
1754 | 1755 |
1755 ScopedGLErrorSuppressor suppressor( | 1756 ScopedGLErrorSuppressor suppressor( |
1756 "ScopedResolvedFrameBufferBinder::ctor", decoder_); | 1757 "ScopedResolvedFrameBufferBinder::ctor", decoder_); |
1757 glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, | 1758 glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, |
1758 decoder_->offscreen_target_frame_buffer_->id()); | 1759 decoder_->offscreen_target_frame_buffer_->id()); |
1759 GLuint targetid; | 1760 GLuint targetid; |
1760 if (internal) { | 1761 if (internal) { |
1761 if (!decoder_->offscreen_resolved_frame_buffer_.get()) { | 1762 if (!decoder_->offscreen_resolved_frame_buffer_.get()) { |
(...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2629 | 2630 |
2630 void GLES2DecoderImpl::DeleteFramebuffersHelper( | 2631 void GLES2DecoderImpl::DeleteFramebuffersHelper( |
2631 GLsizei n, const GLuint* client_ids) { | 2632 GLsizei n, const GLuint* client_ids) { |
2632 bool supports_separate_framebuffer_binds = | 2633 bool supports_separate_framebuffer_binds = |
2633 features().chromium_framebuffer_multisample; | 2634 features().chromium_framebuffer_multisample; |
2634 | 2635 |
2635 for (GLsizei ii = 0; ii < n; ++ii) { | 2636 for (GLsizei ii = 0; ii < n; ++ii) { |
2636 Framebuffer* framebuffer = | 2637 Framebuffer* framebuffer = |
2637 GetFramebuffer(client_ids[ii]); | 2638 GetFramebuffer(client_ids[ii]); |
2638 if (framebuffer && !framebuffer->IsDeleted()) { | 2639 if (framebuffer && !framebuffer->IsDeleted()) { |
2639 if (framebuffer == state_.bound_draw_framebuffer.get()) { | 2640 if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) { |
2640 state_.bound_draw_framebuffer = NULL; | 2641 framebuffer_state_.bound_draw_framebuffer = NULL; |
2641 framebuffer_state_.clear_state_dirty = true; | 2642 framebuffer_state_.clear_state_dirty = true; |
2642 GLenum target = supports_separate_framebuffer_binds ? | 2643 GLenum target = supports_separate_framebuffer_binds ? |
2643 GL_DRAW_FRAMEBUFFER_EXT : GL_FRAMEBUFFER; | 2644 GL_DRAW_FRAMEBUFFER_EXT : GL_FRAMEBUFFER; |
2644 glBindFramebufferEXT(target, GetBackbufferServiceId()); | 2645 glBindFramebufferEXT(target, GetBackbufferServiceId()); |
2645 } | 2646 } |
2646 if (framebuffer == state_.bound_read_framebuffer.get()) { | 2647 if (framebuffer == framebuffer_state_.bound_read_framebuffer.get()) { |
2647 state_.bound_read_framebuffer = NULL; | 2648 framebuffer_state_.bound_read_framebuffer = NULL; |
2648 GLenum target = supports_separate_framebuffer_binds ? | 2649 GLenum target = supports_separate_framebuffer_binds ? |
2649 GL_READ_FRAMEBUFFER_EXT : GL_FRAMEBUFFER; | 2650 GL_READ_FRAMEBUFFER_EXT : GL_FRAMEBUFFER; |
2650 glBindFramebufferEXT(target, GetBackbufferServiceId()); | 2651 glBindFramebufferEXT(target, GetBackbufferServiceId()); |
2651 } | 2652 } |
2652 OnFboChanged(); | 2653 OnFboChanged(); |
2653 RemoveFramebuffer(client_ids[ii]); | 2654 RemoveFramebuffer(client_ids[ii]); |
2654 } | 2655 } |
2655 } | 2656 } |
2656 } | 2657 } |
2657 | 2658 |
2658 void GLES2DecoderImpl::DeleteRenderbuffersHelper( | 2659 void GLES2DecoderImpl::DeleteRenderbuffersHelper( |
2659 GLsizei n, const GLuint* client_ids) { | 2660 GLsizei n, const GLuint* client_ids) { |
2660 bool supports_separate_framebuffer_binds = | 2661 bool supports_separate_framebuffer_binds = |
2661 features().chromium_framebuffer_multisample; | 2662 features().chromium_framebuffer_multisample; |
2662 for (GLsizei ii = 0; ii < n; ++ii) { | 2663 for (GLsizei ii = 0; ii < n; ++ii) { |
2663 Renderbuffer* renderbuffer = | 2664 Renderbuffer* renderbuffer = |
2664 GetRenderbuffer(client_ids[ii]); | 2665 GetRenderbuffer(client_ids[ii]); |
2665 if (renderbuffer && !renderbuffer->IsDeleted()) { | 2666 if (renderbuffer && !renderbuffer->IsDeleted()) { |
2666 if (state_.bound_renderbuffer.get() == renderbuffer) { | 2667 if (state_.bound_renderbuffer.get() == renderbuffer) { |
2667 state_.bound_renderbuffer = NULL; | 2668 state_.bound_renderbuffer = NULL; |
2668 } | 2669 } |
2669 // Unbind from current framebuffers. | 2670 // Unbind from current framebuffers. |
2670 if (supports_separate_framebuffer_binds) { | 2671 if (supports_separate_framebuffer_binds) { |
2671 if (state_.bound_read_framebuffer.get()) { | 2672 if (framebuffer_state_.bound_read_framebuffer.get()) { |
2672 state_.bound_read_framebuffer | 2673 framebuffer_state_.bound_read_framebuffer |
2673 ->UnbindRenderbuffer(GL_READ_FRAMEBUFFER_EXT, renderbuffer); | 2674 ->UnbindRenderbuffer(GL_READ_FRAMEBUFFER_EXT, renderbuffer); |
2674 } | 2675 } |
2675 if (state_.bound_draw_framebuffer.get()) { | 2676 if (framebuffer_state_.bound_draw_framebuffer.get()) { |
2676 state_.bound_draw_framebuffer | 2677 framebuffer_state_.bound_draw_framebuffer |
2677 ->UnbindRenderbuffer(GL_DRAW_FRAMEBUFFER_EXT, renderbuffer); | 2678 ->UnbindRenderbuffer(GL_DRAW_FRAMEBUFFER_EXT, renderbuffer); |
2678 } | 2679 } |
2679 } else { | 2680 } else { |
2680 if (state_.bound_draw_framebuffer.get()) { | 2681 if (framebuffer_state_.bound_draw_framebuffer.get()) { |
2681 state_.bound_draw_framebuffer | 2682 framebuffer_state_.bound_draw_framebuffer |
2682 ->UnbindRenderbuffer(GL_FRAMEBUFFER, renderbuffer); | 2683 ->UnbindRenderbuffer(GL_FRAMEBUFFER, renderbuffer); |
2683 } | 2684 } |
2684 } | 2685 } |
2685 framebuffer_state_.clear_state_dirty = true; | 2686 framebuffer_state_.clear_state_dirty = true; |
2686 RemoveRenderbuffer(client_ids[ii]); | 2687 RemoveRenderbuffer(client_ids[ii]); |
2687 } | 2688 } |
2688 } | 2689 } |
2689 } | 2690 } |
2690 | 2691 |
2691 void GLES2DecoderImpl::DeleteTexturesHelper( | 2692 void GLES2DecoderImpl::DeleteTexturesHelper( |
2692 GLsizei n, const GLuint* client_ids) { | 2693 GLsizei n, const GLuint* client_ids) { |
2693 bool supports_separate_framebuffer_binds = | 2694 bool supports_separate_framebuffer_binds = |
2694 features().chromium_framebuffer_multisample; | 2695 features().chromium_framebuffer_multisample; |
2695 for (GLsizei ii = 0; ii < n; ++ii) { | 2696 for (GLsizei ii = 0; ii < n; ++ii) { |
2696 TextureRef* texture_ref = GetTexture(client_ids[ii]); | 2697 TextureRef* texture_ref = GetTexture(client_ids[ii]); |
2697 if (texture_ref) { | 2698 if (texture_ref) { |
2698 Texture* texture = texture_ref->texture(); | 2699 Texture* texture = texture_ref->texture(); |
2699 if (texture->IsAttachedToFramebuffer()) { | 2700 if (texture->IsAttachedToFramebuffer()) { |
2700 framebuffer_state_.clear_state_dirty = true; | 2701 framebuffer_state_.clear_state_dirty = true; |
2701 } | 2702 } |
2702 // Unbind texture_ref from texture_ref units. | 2703 // Unbind texture_ref from texture_ref units. |
2703 for (size_t jj = 0; jj < state_.texture_units.size(); ++jj) { | 2704 for (size_t jj = 0; jj < state_.texture_units.size(); ++jj) { |
2704 state_.texture_units[jj].Unbind(texture_ref); | 2705 state_.texture_units[jj].Unbind(texture_ref); |
2705 } | 2706 } |
2706 // Unbind from current framebuffers. | 2707 // Unbind from current framebuffers. |
2707 if (supports_separate_framebuffer_binds) { | 2708 if (supports_separate_framebuffer_binds) { |
2708 if (state_.bound_read_framebuffer.get()) { | 2709 if (framebuffer_state_.bound_read_framebuffer.get()) { |
2709 state_.bound_read_framebuffer | 2710 framebuffer_state_.bound_read_framebuffer |
2710 ->UnbindTexture(GL_READ_FRAMEBUFFER_EXT, texture_ref); | 2711 ->UnbindTexture(GL_READ_FRAMEBUFFER_EXT, texture_ref); |
2711 } | 2712 } |
2712 if (state_.bound_draw_framebuffer.get()) { | 2713 if (framebuffer_state_.bound_draw_framebuffer.get()) { |
2713 state_.bound_draw_framebuffer | 2714 framebuffer_state_.bound_draw_framebuffer |
2714 ->UnbindTexture(GL_DRAW_FRAMEBUFFER_EXT, texture_ref); | 2715 ->UnbindTexture(GL_DRAW_FRAMEBUFFER_EXT, texture_ref); |
2715 } | 2716 } |
2716 } else { | 2717 } else { |
2717 if (state_.bound_draw_framebuffer.get()) { | 2718 if (framebuffer_state_.bound_draw_framebuffer.get()) { |
2718 state_.bound_draw_framebuffer | 2719 framebuffer_state_.bound_draw_framebuffer |
2719 ->UnbindTexture(GL_FRAMEBUFFER, texture_ref); | 2720 ->UnbindTexture(GL_FRAMEBUFFER, texture_ref); |
2720 } | 2721 } |
2721 } | 2722 } |
2722 #if defined(OS_MACOSX) | 2723 #if defined(OS_MACOSX) |
2723 GLuint service_id = texture->service_id(); | 2724 GLuint service_id = texture->service_id(); |
2724 if (texture->target() == GL_TEXTURE_RECTANGLE_ARB) { | 2725 if (texture->target() == GL_TEXTURE_RECTANGLE_ARB) { |
2725 ReleaseIOSurfaceForTexture(service_id); | 2726 ReleaseIOSurfaceForTexture(service_id); |
2726 } | 2727 } |
2727 #endif | 2728 #endif |
2728 RemoveTexture(client_ids[ii]); | 2729 RemoveTexture(client_ids[ii]); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2801 | 2802 |
2802 glBindFramebufferEXT(target, framebuffer_id); | 2803 glBindFramebufferEXT(target, framebuffer_id); |
2803 } | 2804 } |
2804 | 2805 |
2805 void GLES2DecoderImpl::RestoreCurrentFramebufferBindings() { | 2806 void GLES2DecoderImpl::RestoreCurrentFramebufferBindings() { |
2806 framebuffer_state_.clear_state_dirty = true; | 2807 framebuffer_state_.clear_state_dirty = true; |
2807 | 2808 |
2808 if (!features().chromium_framebuffer_multisample) { | 2809 if (!features().chromium_framebuffer_multisample) { |
2809 RebindCurrentFramebuffer( | 2810 RebindCurrentFramebuffer( |
2810 GL_FRAMEBUFFER, | 2811 GL_FRAMEBUFFER, |
2811 state_.bound_draw_framebuffer.get(), | 2812 framebuffer_state_.bound_draw_framebuffer.get(), |
2812 GetBackbufferServiceId()); | 2813 GetBackbufferServiceId()); |
2813 } else { | 2814 } else { |
2814 RebindCurrentFramebuffer( | 2815 RebindCurrentFramebuffer( |
2815 GL_READ_FRAMEBUFFER_EXT, | 2816 GL_READ_FRAMEBUFFER_EXT, |
2816 state_.bound_read_framebuffer.get(), | 2817 framebuffer_state_.bound_read_framebuffer.get(), |
2817 GetBackbufferServiceId()); | 2818 GetBackbufferServiceId()); |
2818 RebindCurrentFramebuffer( | 2819 RebindCurrentFramebuffer( |
2819 GL_DRAW_FRAMEBUFFER_EXT, | 2820 GL_DRAW_FRAMEBUFFER_EXT, |
2820 state_.bound_draw_framebuffer.get(), | 2821 framebuffer_state_.bound_draw_framebuffer.get(), |
2821 GetBackbufferServiceId()); | 2822 GetBackbufferServiceId()); |
2822 } | 2823 } |
2823 OnFboChanged(); | 2824 OnFboChanged(); |
2824 } | 2825 } |
2825 | 2826 |
2826 void GLES2DecoderImpl::RestoreCurrentTexture2DBindings() { | 2827 void GLES2DecoderImpl::RestoreCurrentTexture2DBindings() { |
2827 TextureUnit& info = state_.texture_units[0]; | 2828 TextureUnit& info = state_.texture_units[0]; |
2828 GLuint last_id; | 2829 GLuint last_id; |
2829 if (info.bound_texture_2d.get()) { | 2830 if (info.bound_texture_2d.get()) { |
2830 last_id = info.bound_texture_2d->service_id(); | 2831 last_id = info.bound_texture_2d->service_id(); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2895 } | 2896 } |
2896 | 2897 |
2897 // NOTE: At this point we don't know if the framebuffer is complete but | 2898 // NOTE: At this point we don't know if the framebuffer is complete but |
2898 // we DO know that everything that needs to be cleared has been cleared. | 2899 // we DO know that everything that needs to be cleared has been cleared. |
2899 return true; | 2900 return true; |
2900 } | 2901 } |
2901 | 2902 |
2902 bool GLES2DecoderImpl::CheckBoundFramebuffersValid(const char* func_name) { | 2903 bool GLES2DecoderImpl::CheckBoundFramebuffersValid(const char* func_name) { |
2903 if (!features().chromium_framebuffer_multisample) { | 2904 if (!features().chromium_framebuffer_multisample) { |
2904 bool valid = CheckFramebufferValid( | 2905 bool valid = CheckFramebufferValid( |
2905 state_.bound_draw_framebuffer.get(), GL_FRAMEBUFFER_EXT, func_name); | 2906 framebuffer_state_.bound_draw_framebuffer.get(), GL_FRAMEBUFFER_EXT, |
| 2907 func_name); |
2906 | 2908 |
2907 if (valid) | 2909 if (valid) |
2908 OnUseFramebuffer(); | 2910 OnUseFramebuffer(); |
2909 | 2911 |
2910 return valid; | 2912 return valid; |
2911 } | 2913 } |
2912 return CheckFramebufferValid(state_.bound_draw_framebuffer.get(), | 2914 return CheckFramebufferValid(framebuffer_state_.bound_draw_framebuffer.get(), |
2913 GL_DRAW_FRAMEBUFFER_EXT, | 2915 GL_DRAW_FRAMEBUFFER_EXT, |
2914 func_name) && | 2916 func_name) && |
2915 CheckFramebufferValid(state_.bound_read_framebuffer.get(), | 2917 CheckFramebufferValid(framebuffer_state_.bound_read_framebuffer.get(), |
2916 GL_READ_FRAMEBUFFER_EXT, | 2918 GL_READ_FRAMEBUFFER_EXT, |
2917 func_name); | 2919 func_name); |
2918 } | 2920 } |
2919 | 2921 |
2920 gfx::Size GLES2DecoderImpl::GetBoundReadFrameBufferSize() { | 2922 gfx::Size GLES2DecoderImpl::GetBoundReadFrameBufferSize() { |
2921 Framebuffer* framebuffer = | 2923 Framebuffer* framebuffer = |
2922 GetFramebufferInfoForTarget(GL_READ_FRAMEBUFFER_EXT); | 2924 GetFramebufferInfoForTarget(GL_READ_FRAMEBUFFER_EXT); |
2923 if (framebuffer != NULL) { | 2925 if (framebuffer != NULL) { |
2924 const Framebuffer::Attachment* attachment = | 2926 const Framebuffer::Attachment* attachment = |
2925 framebuffer->GetAttachment(GL_COLOR_ATTACHMENT0); | 2927 framebuffer->GetAttachment(GL_COLOR_ATTACHMENT0); |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3074 return; | 3076 return; |
3075 | 3077 |
3076 DCHECK(!have_context || context_->IsCurrent(NULL)); | 3078 DCHECK(!have_context || context_->IsCurrent(NULL)); |
3077 | 3079 |
3078 // Unbind everything. | 3080 // Unbind everything. |
3079 state_.vertex_attrib_manager = NULL; | 3081 state_.vertex_attrib_manager = NULL; |
3080 default_vertex_attrib_manager_ = NULL; | 3082 default_vertex_attrib_manager_ = NULL; |
3081 state_.texture_units.clear(); | 3083 state_.texture_units.clear(); |
3082 state_.bound_array_buffer = NULL; | 3084 state_.bound_array_buffer = NULL; |
3083 state_.current_query = NULL; | 3085 state_.current_query = NULL; |
3084 state_.bound_read_framebuffer = NULL; | 3086 framebuffer_state_.bound_read_framebuffer = NULL; |
3085 state_.bound_draw_framebuffer = NULL; | 3087 framebuffer_state_.bound_draw_framebuffer = NULL; |
3086 state_.bound_renderbuffer = NULL; | 3088 state_.bound_renderbuffer = NULL; |
3087 | 3089 |
3088 if (offscreen_saved_color_texture_info_.get()) { | 3090 if (offscreen_saved_color_texture_info_.get()) { |
3089 DCHECK(offscreen_target_color_texture_); | 3091 DCHECK(offscreen_target_color_texture_); |
3090 DCHECK_EQ(offscreen_saved_color_texture_info_->service_id(), | 3092 DCHECK_EQ(offscreen_saved_color_texture_info_->service_id(), |
3091 offscreen_saved_color_texture_->id()); | 3093 offscreen_saved_color_texture_->id()); |
3092 offscreen_saved_color_texture_->Invalidate(); | 3094 offscreen_saved_color_texture_->Invalidate(); |
3093 offscreen_saved_color_texture_info_ = NULL; | 3095 offscreen_saved_color_texture_info_ = NULL; |
3094 } | 3096 } |
3095 if (have_context) { | 3097 if (have_context) { |
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3641 TRACE_EVENT1("gpu", "GLES2DecoderImpl::RestoreState", | 3643 TRACE_EVENT1("gpu", "GLES2DecoderImpl::RestoreState", |
3642 "context", logger_.GetLogPrefix()); | 3644 "context", logger_.GetLogPrefix()); |
3643 // Restore the Framebuffer first because of bugs in Intel drivers. | 3645 // Restore the Framebuffer first because of bugs in Intel drivers. |
3644 // Intel drivers incorrectly clip the viewport settings to | 3646 // Intel drivers incorrectly clip the viewport settings to |
3645 // the size of the current framebuffer object. | 3647 // the size of the current framebuffer object. |
3646 RestoreFramebufferBindings(); | 3648 RestoreFramebufferBindings(); |
3647 state_.RestoreState(); | 3649 state_.RestoreState(); |
3648 } | 3650 } |
3649 | 3651 |
3650 void GLES2DecoderImpl::RestoreFramebufferBindings() const { | 3652 void GLES2DecoderImpl::RestoreFramebufferBindings() const { |
3651 GLuint service_id = state_.bound_draw_framebuffer.get() | 3653 GLuint service_id = |
3652 ? state_.bound_draw_framebuffer->service_id() | 3654 framebuffer_state_.bound_draw_framebuffer.get() |
3653 : GetBackbufferServiceId(); | 3655 ? framebuffer_state_.bound_draw_framebuffer->service_id() |
| 3656 : GetBackbufferServiceId(); |
3654 if (!features().chromium_framebuffer_multisample) { | 3657 if (!features().chromium_framebuffer_multisample) { |
3655 glBindFramebufferEXT(GL_FRAMEBUFFER, service_id); | 3658 glBindFramebufferEXT(GL_FRAMEBUFFER, service_id); |
3656 } else { | 3659 } else { |
3657 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, service_id); | 3660 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, service_id); |
3658 service_id = state_.bound_read_framebuffer.get() | 3661 service_id = framebuffer_state_.bound_read_framebuffer.get() |
3659 ? state_.bound_read_framebuffer->service_id() | 3662 ? framebuffer_state_.bound_read_framebuffer->service_id() |
3660 : GetBackbufferServiceId(); | 3663 : GetBackbufferServiceId(); |
3661 glBindFramebufferEXT(GL_READ_FRAMEBUFFER, service_id); | 3664 glBindFramebufferEXT(GL_READ_FRAMEBUFFER, service_id); |
3662 } | 3665 } |
3663 OnFboChanged(); | 3666 OnFboChanged(); |
3664 } | 3667 } |
3665 | 3668 |
3666 void GLES2DecoderImpl::RestoreTextureState(unsigned service_id) const { | 3669 void GLES2DecoderImpl::RestoreTextureState(unsigned service_id) const { |
3667 Texture* texture = texture_manager()->GetTextureForServiceId(service_id); | 3670 Texture* texture = texture_manager()->GetTextureForServiceId(service_id); |
3668 if (texture) { | 3671 if (texture) { |
3669 GLenum target = texture->target(); | 3672 GLenum target = texture->target(); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3722 group_->GetIdAllocator(id_namespaces::kFramebuffers); | 3725 group_->GetIdAllocator(id_namespaces::kFramebuffers); |
3723 id_allocator->MarkAsUsed(client_id); | 3726 id_allocator->MarkAsUsed(client_id); |
3724 } else { | 3727 } else { |
3725 service_id = framebuffer->service_id(); | 3728 service_id = framebuffer->service_id(); |
3726 } | 3729 } |
3727 framebuffer->MarkAsValid(); | 3730 framebuffer->MarkAsValid(); |
3728 } | 3731 } |
3729 LogClientServiceForInfo(framebuffer, client_id, "glBindFramebuffer"); | 3732 LogClientServiceForInfo(framebuffer, client_id, "glBindFramebuffer"); |
3730 | 3733 |
3731 if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) { | 3734 if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) { |
3732 state_.bound_draw_framebuffer = framebuffer; | 3735 framebuffer_state_.bound_draw_framebuffer = framebuffer; |
3733 } | 3736 } |
3734 if (target == GL_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER_EXT) { | 3737 if (target == GL_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER_EXT) { |
3735 state_.bound_read_framebuffer = framebuffer; | 3738 framebuffer_state_.bound_read_framebuffer = framebuffer; |
3736 } | 3739 } |
3737 | 3740 |
3738 framebuffer_state_.clear_state_dirty = true; | 3741 framebuffer_state_.clear_state_dirty = true; |
3739 | 3742 |
3740 // If we are rendering to the backbuffer get the FBO id for any simulated | 3743 // If we are rendering to the backbuffer get the FBO id for any simulated |
3741 // backbuffer. | 3744 // backbuffer. |
3742 if (framebuffer == NULL) { | 3745 if (framebuffer == NULL) { |
3743 service_id = GetBackbufferServiceId(); | 3746 service_id = GetBackbufferServiceId(); |
3744 } | 3747 } |
3745 | 3748 |
(...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4707 } | 4710 } |
4708 service_id = renderbuffer->service_id(); | 4711 service_id = renderbuffer->service_id(); |
4709 } | 4712 } |
4710 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glFramebufferRenderbuffer"); | 4713 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glFramebufferRenderbuffer"); |
4711 glFramebufferRenderbufferEXT( | 4714 glFramebufferRenderbufferEXT( |
4712 target, attachment, renderbuffertarget, service_id); | 4715 target, attachment, renderbuffertarget, service_id); |
4713 GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer"); | 4716 GLenum error = LOCAL_PEEK_GL_ERROR("glFramebufferRenderbuffer"); |
4714 if (error == GL_NO_ERROR) { | 4717 if (error == GL_NO_ERROR) { |
4715 framebuffer->AttachRenderbuffer(attachment, renderbuffer); | 4718 framebuffer->AttachRenderbuffer(attachment, renderbuffer); |
4716 } | 4719 } |
4717 if (framebuffer == state_.bound_draw_framebuffer.get()) { | 4720 if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) { |
4718 framebuffer_state_.clear_state_dirty = true; | 4721 framebuffer_state_.clear_state_dirty = true; |
4719 } | 4722 } |
4720 OnFboChanged(); | 4723 OnFboChanged(); |
4721 } | 4724 } |
4722 | 4725 |
4723 void GLES2DecoderImpl::DoDisable(GLenum cap) { | 4726 void GLES2DecoderImpl::DoDisable(GLenum cap) { |
4724 if (SetCapabilityState(cap, false)) { | 4727 if (SetCapabilityState(cap, false)) { |
4725 glDisable(cap); | 4728 glDisable(cap); |
4726 } | 4729 } |
4727 } | 4730 } |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4891 } else { | 4894 } else { |
4892 glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, | 4895 glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, |
4893 service_id, level, samples); | 4896 service_id, level, samples); |
4894 } | 4897 } |
4895 } | 4898 } |
4896 GLenum error = LOCAL_PEEK_GL_ERROR(name); | 4899 GLenum error = LOCAL_PEEK_GL_ERROR(name); |
4897 if (error == GL_NO_ERROR) { | 4900 if (error == GL_NO_ERROR) { |
4898 framebuffer->AttachTexture(attachment, texture_ref, textarget, level, | 4901 framebuffer->AttachTexture(attachment, texture_ref, textarget, level, |
4899 samples); | 4902 samples); |
4900 } | 4903 } |
4901 if (framebuffer == state_.bound_draw_framebuffer.get()) { | 4904 if (framebuffer == framebuffer_state_.bound_draw_framebuffer.get()) { |
4902 framebuffer_state_.clear_state_dirty = true; | 4905 framebuffer_state_.clear_state_dirty = true; |
4903 } | 4906 } |
4904 OnFboChanged(); | 4907 OnFboChanged(); |
4905 } | 4908 } |
4906 | 4909 |
4907 void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv( | 4910 void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv( |
4908 GLenum target, GLenum attachment, GLenum pname, GLint* params) { | 4911 GLenum target, GLenum attachment, GLenum pname, GLint* params) { |
4909 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); | 4912 Framebuffer* framebuffer = GetFramebufferInfoForTarget(target); |
4910 if (!framebuffer) { | 4913 if (!framebuffer) { |
4911 LOCAL_SET_GL_ERROR( | 4914 LOCAL_SET_GL_ERROR( |
(...skipping 5525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10437 return error::kNoError; | 10440 return error::kNoError; |
10438 } | 10441 } |
10439 | 10442 |
10440 // Include the auto-generated part of this file. We split this because it means | 10443 // Include the auto-generated part of this file. We split this because it means |
10441 // we can easily edit the non-auto generated parts right here in this file | 10444 // we can easily edit the non-auto generated parts right here in this file |
10442 // instead of having to edit some template or the code generator. | 10445 // instead of having to edit some template or the code generator. |
10443 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 10446 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
10444 | 10447 |
10445 } // namespace gles2 | 10448 } // namespace gles2 |
10446 } // namespace gpu | 10449 } // namespace gpu |
OLD | NEW |