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 <limits.h> | 7 #include <limits.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 2276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2287 int frame_number_; | 2287 int frame_number_; |
2288 | 2288 |
2289 // Number of commands remaining to be processed in DoCommands(). | 2289 // Number of commands remaining to be processed in DoCommands(). |
2290 int commands_to_process_; | 2290 int commands_to_process_; |
2291 | 2291 |
2292 bool has_robustness_extension_; | 2292 bool has_robustness_extension_; |
2293 error::ContextLostReason context_lost_reason_; | 2293 error::ContextLostReason context_lost_reason_; |
2294 bool context_was_lost_; | 2294 bool context_was_lost_; |
2295 bool reset_by_robustness_extension_; | 2295 bool reset_by_robustness_extension_; |
2296 bool supports_post_sub_buffer_; | 2296 bool supports_post_sub_buffer_; |
| 2297 bool supports_swap_buffers_with_damage_; |
2297 bool supports_commit_overlay_planes_; | 2298 bool supports_commit_overlay_planes_; |
2298 bool supports_async_swap_; | 2299 bool supports_async_swap_; |
2299 | 2300 |
2300 // These flags are used to override the state of the shared feature_info_ | 2301 // These flags are used to override the state of the shared feature_info_ |
2301 // member. Because the same FeatureInfo instance may be shared among many | 2302 // member. Because the same FeatureInfo instance may be shared among many |
2302 // contexts, the assumptions on the availablity of extensions in WebGL | 2303 // contexts, the assumptions on the availablity of extensions in WebGL |
2303 // contexts may be broken. These flags override the shared state to preserve | 2304 // contexts may be broken. These flags override the shared state to preserve |
2304 // WebGL semantics. | 2305 // WebGL semantics. |
2305 bool derivatives_explicitly_enabled_; | 2306 bool derivatives_explicitly_enabled_; |
2306 bool frag_depth_explicitly_enabled_; | 2307 bool frag_depth_explicitly_enabled_; |
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2971 swaps_since_resize_(0), | 2972 swaps_since_resize_(0), |
2972 current_decoder_error_(error::kNoError), | 2973 current_decoder_error_(error::kNoError), |
2973 validators_(group_->feature_info()->validators()), | 2974 validators_(group_->feature_info()->validators()), |
2974 feature_info_(group_->feature_info()), | 2975 feature_info_(group_->feature_info()), |
2975 frame_number_(0), | 2976 frame_number_(0), |
2976 has_robustness_extension_(false), | 2977 has_robustness_extension_(false), |
2977 context_lost_reason_(error::kUnknown), | 2978 context_lost_reason_(error::kUnknown), |
2978 context_was_lost_(false), | 2979 context_was_lost_(false), |
2979 reset_by_robustness_extension_(false), | 2980 reset_by_robustness_extension_(false), |
2980 supports_post_sub_buffer_(false), | 2981 supports_post_sub_buffer_(false), |
| 2982 supports_swap_buffers_with_damage_(false), |
2981 supports_commit_overlay_planes_(false), | 2983 supports_commit_overlay_planes_(false), |
2982 supports_async_swap_(false), | 2984 supports_async_swap_(false), |
2983 derivatives_explicitly_enabled_(false), | 2985 derivatives_explicitly_enabled_(false), |
2984 frag_depth_explicitly_enabled_(false), | 2986 frag_depth_explicitly_enabled_(false), |
2985 draw_buffers_explicitly_enabled_(false), | 2987 draw_buffers_explicitly_enabled_(false), |
2986 shader_texture_lod_explicitly_enabled_(false), | 2988 shader_texture_lod_explicitly_enabled_(false), |
2987 compile_shader_always_succeeds_(false), | 2989 compile_shader_always_succeeds_(false), |
2988 lose_context_when_out_of_memory_(false), | 2990 lose_context_when_out_of_memory_(false), |
2989 should_use_native_gmb_for_backbuffer_(false), | 2991 should_use_native_gmb_for_backbuffer_(false), |
2990 service_logging_( | 2992 service_logging_( |
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3474 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); | 3476 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); |
3475 } | 3477 } |
3476 } | 3478 } |
3477 | 3479 |
3478 supports_post_sub_buffer_ = surface->SupportsPostSubBuffer(); | 3480 supports_post_sub_buffer_ = surface->SupportsPostSubBuffer(); |
3479 if (feature_info_->workarounds() | 3481 if (feature_info_->workarounds() |
3480 .disable_post_sub_buffers_for_onscreen_surfaces && | 3482 .disable_post_sub_buffers_for_onscreen_surfaces && |
3481 !surface->IsOffscreen()) | 3483 !surface->IsOffscreen()) |
3482 supports_post_sub_buffer_ = false; | 3484 supports_post_sub_buffer_ = false; |
3483 | 3485 |
| 3486 supports_swap_buffers_with_damage_ = surface->SupportsSwapBuffersWithDamage(); |
| 3487 |
3484 supports_commit_overlay_planes_ = surface->SupportsCommitOverlayPlanes(); | 3488 supports_commit_overlay_planes_ = surface->SupportsCommitOverlayPlanes(); |
3485 | 3489 |
3486 supports_async_swap_ = surface->SupportsAsyncSwap(); | 3490 supports_async_swap_ = surface->SupportsAsyncSwap(); |
3487 | 3491 |
3488 if (feature_info_->workarounds().reverse_point_sprite_coord_origin) { | 3492 if (feature_info_->workarounds().reverse_point_sprite_coord_origin) { |
3489 glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT); | 3493 glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT); |
3490 } | 3494 } |
3491 | 3495 |
3492 if (feature_info_->workarounds().unbind_fbo_on_context_switch) { | 3496 if (feature_info_->workarounds().unbind_fbo_on_context_switch) { |
3493 context_->SetUnbindFboOnMakeCurrent(); | 3497 context_->SetUnbindFboOnMakeCurrent(); |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3655 caps.occlusion_query_boolean = | 3659 caps.occlusion_query_boolean = |
3656 feature_info_->feature_flags().occlusion_query_boolean; | 3660 feature_info_->feature_flags().occlusion_query_boolean; |
3657 caps.timer_queries = | 3661 caps.timer_queries = |
3658 query_manager_->GPUTimingAvailable(); | 3662 query_manager_->GPUTimingAvailable(); |
3659 caps.disable_multisampling_color_mask_usage = | 3663 caps.disable_multisampling_color_mask_usage = |
3660 feature_info_->workarounds().disable_multisampling_color_mask_usage; | 3664 feature_info_->workarounds().disable_multisampling_color_mask_usage; |
3661 caps.disable_webgl_rgb_multisampling_usage = | 3665 caps.disable_webgl_rgb_multisampling_usage = |
3662 feature_info_->workarounds().disable_webgl_rgb_multisampling_usage; | 3666 feature_info_->workarounds().disable_webgl_rgb_multisampling_usage; |
3663 caps.emulate_rgb_buffer_with_rgba = | 3667 caps.emulate_rgb_buffer_with_rgba = |
3664 feature_info_->workarounds().disable_gl_rgb_format; | 3668 feature_info_->workarounds().disable_gl_rgb_format; |
| 3669 caps.swap_buffers_with_damage = supports_swap_buffers_with_damage_; |
3665 | 3670 |
3666 return caps; | 3671 return caps; |
3667 } | 3672 } |
3668 | 3673 |
3669 void GLES2DecoderImpl::UpdateCapabilities() { | 3674 void GLES2DecoderImpl::UpdateCapabilities() { |
3670 util_.set_num_compressed_texture_formats( | 3675 util_.set_num_compressed_texture_formats( |
3671 validators_->compressed_texture_format.GetValues().size()); | 3676 validators_->compressed_texture_format.GetValues().size()); |
3672 util_.set_num_shader_binary_formats( | 3677 util_.set_num_shader_binary_formats( |
3673 validators_->shader_binary_format.GetValues().size()); | 3678 validators_->shader_binary_format.GetValues().size()); |
3674 } | 3679 } |
(...skipping 7309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10984 state_.unpack_image_height = param; | 10989 state_.unpack_image_height = param; |
10985 break; | 10990 break; |
10986 default: | 10991 default: |
10987 // Validation should have prevented us from getting here. | 10992 // Validation should have prevented us from getting here. |
10988 NOTREACHED(); | 10993 NOTREACHED(); |
10989 break; | 10994 break; |
10990 } | 10995 } |
10991 return error::kNoError; | 10996 return error::kNoError; |
10992 } | 10997 } |
10993 | 10998 |
| 10999 error::Error GLES2DecoderImpl::HandleSwapBuffersWithDamageCHROMIUM( |
| 11000 uint32_t immediate_data_size, |
| 11001 const volatile void* cmd_data) { |
| 11002 const volatile gles2::cmds::SwapBuffersWithDamageCHROMIUM& c = |
| 11003 *static_cast<const volatile gles2::cmds::SwapBuffersWithDamageCHROMIUM*>( |
| 11004 cmd_data); |
| 11005 TRACE_EVENT0("gpu", "GLES2DecoderImpl::SwapBuffersWithDamageCHROMIUM"); |
| 11006 { TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame"); } |
| 11007 if (!supports_swap_buffers_with_damage_) { |
| 11008 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glSwapBuffersWithDamageCHROMIUM", |
| 11009 "command not supported by surface"); |
| 11010 return error::kNoError; |
| 11011 } |
| 11012 bool is_tracing; |
| 11013 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("gpu.debug"), |
| 11014 &is_tracing); |
| 11015 if (is_tracing) { |
| 11016 bool is_offscreen = !!offscreen_target_frame_buffer_.get(); |
| 11017 ScopedFramebufferBinder binder(this, GetBackbufferServiceId()); |
| 11018 gpu_state_tracer_->TakeSnapshotWithCurrentFramebuffer( |
| 11019 is_offscreen ? offscreen_size_ : surface_->GetSize()); |
| 11020 } |
| 11021 |
| 11022 ClearScheduleCALayerState(); |
| 11023 |
| 11024 FinishSwapBuffers( |
| 11025 surface_->SwapBuffersWithDamage(c.x, c.y, c.width, c.height)); |
| 11026 |
| 11027 return error::kNoError; |
| 11028 } |
| 11029 |
10994 error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM( | 11030 error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM( |
10995 uint32_t immediate_data_size, | 11031 uint32_t immediate_data_size, |
10996 const volatile void* cmd_data) { | 11032 const volatile void* cmd_data) { |
10997 const volatile gles2::cmds::PostSubBufferCHROMIUM& c = | 11033 const volatile gles2::cmds::PostSubBufferCHROMIUM& c = |
10998 *static_cast<const volatile gles2::cmds::PostSubBufferCHROMIUM*>( | 11034 *static_cast<const volatile gles2::cmds::PostSubBufferCHROMIUM*>( |
10999 cmd_data); | 11035 cmd_data); |
11000 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandlePostSubBufferCHROMIUM"); | 11036 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandlePostSubBufferCHROMIUM"); |
11001 { | 11037 { |
11002 TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame"); | 11038 TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame"); |
11003 } | 11039 } |
(...skipping 6930 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17934 } | 17970 } |
17935 | 17971 |
17936 // Include the auto-generated part of this file. We split this because it means | 17972 // Include the auto-generated part of this file. We split this because it means |
17937 // we can easily edit the non-auto generated parts right here in this file | 17973 // we can easily edit the non-auto generated parts right here in this file |
17938 // instead of having to edit some template or the code generator. | 17974 // instead of having to edit some template or the code generator. |
17939 #include "base/macros.h" | 17975 #include "base/macros.h" |
17940 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 17976 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
17941 | 17977 |
17942 } // namespace gles2 | 17978 } // namespace gles2 |
17943 } // namespace gpu | 17979 } // namespace gpu |
OLD | NEW |