Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(535)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 2302393002: Support swap damage rect using eglSwapBuffersWithDamageKHR (Closed)
Patch Set: Added new SwapBuffersWithDamage entry point Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 2219 matching lines...) Expand 10 before | Expand all | Expand 10 after
2230 int frame_number_; 2230 int frame_number_;
2231 2231
2232 // Number of commands remaining to be processed in DoCommands(). 2232 // Number of commands remaining to be processed in DoCommands().
2233 int commands_to_process_; 2233 int commands_to_process_;
2234 2234
2235 bool has_robustness_extension_; 2235 bool has_robustness_extension_;
2236 error::ContextLostReason context_lost_reason_; 2236 error::ContextLostReason context_lost_reason_;
2237 bool context_was_lost_; 2237 bool context_was_lost_;
2238 bool reset_by_robustness_extension_; 2238 bool reset_by_robustness_extension_;
2239 bool supports_post_sub_buffer_; 2239 bool supports_post_sub_buffer_;
2240 bool supports_swap_buffers_with_damage_;
2240 bool supports_commit_overlay_planes_; 2241 bool supports_commit_overlay_planes_;
2241 bool supports_async_swap_; 2242 bool supports_async_swap_;
2242 2243
2243 // These flags are used to override the state of the shared feature_info_ 2244 // These flags are used to override the state of the shared feature_info_
2244 // member. Because the same FeatureInfo instance may be shared among many 2245 // member. Because the same FeatureInfo instance may be shared among many
2245 // contexts, the assumptions on the availablity of extensions in WebGL 2246 // contexts, the assumptions on the availablity of extensions in WebGL
2246 // contexts may be broken. These flags override the shared state to preserve 2247 // contexts may be broken. These flags override the shared state to preserve
2247 // WebGL semantics. 2248 // WebGL semantics.
2248 bool derivatives_explicitly_enabled_; 2249 bool derivatives_explicitly_enabled_;
2249 bool frag_depth_explicitly_enabled_; 2250 bool frag_depth_explicitly_enabled_;
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
2914 swaps_since_resize_(0), 2915 swaps_since_resize_(0),
2915 current_decoder_error_(error::kNoError), 2916 current_decoder_error_(error::kNoError),
2916 validators_(group_->feature_info()->validators()), 2917 validators_(group_->feature_info()->validators()),
2917 feature_info_(group_->feature_info()), 2918 feature_info_(group_->feature_info()),
2918 frame_number_(0), 2919 frame_number_(0),
2919 has_robustness_extension_(false), 2920 has_robustness_extension_(false),
2920 context_lost_reason_(error::kUnknown), 2921 context_lost_reason_(error::kUnknown),
2921 context_was_lost_(false), 2922 context_was_lost_(false),
2922 reset_by_robustness_extension_(false), 2923 reset_by_robustness_extension_(false),
2923 supports_post_sub_buffer_(false), 2924 supports_post_sub_buffer_(false),
2925 supports_swap_buffers_with_damage_(false),
2924 supports_commit_overlay_planes_(false), 2926 supports_commit_overlay_planes_(false),
2925 supports_async_swap_(false), 2927 supports_async_swap_(false),
2926 derivatives_explicitly_enabled_(false), 2928 derivatives_explicitly_enabled_(false),
2927 frag_depth_explicitly_enabled_(false), 2929 frag_depth_explicitly_enabled_(false),
2928 draw_buffers_explicitly_enabled_(false), 2930 draw_buffers_explicitly_enabled_(false),
2929 shader_texture_lod_explicitly_enabled_(false), 2931 shader_texture_lod_explicitly_enabled_(false),
2930 compile_shader_always_succeeds_(false), 2932 compile_shader_always_succeeds_(false),
2931 lose_context_when_out_of_memory_(false), 2933 lose_context_when_out_of_memory_(false),
2932 should_use_native_gmb_for_backbuffer_(false), 2934 should_use_native_gmb_for_backbuffer_(false),
2933 service_logging_( 2935 service_logging_(
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
3417 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 3419 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
3418 } 3420 }
3419 } 3421 }
3420 3422
3421 supports_post_sub_buffer_ = surface->SupportsPostSubBuffer(); 3423 supports_post_sub_buffer_ = surface->SupportsPostSubBuffer();
3422 if (feature_info_->workarounds() 3424 if (feature_info_->workarounds()
3423 .disable_post_sub_buffers_for_onscreen_surfaces && 3425 .disable_post_sub_buffers_for_onscreen_surfaces &&
3424 !surface->IsOffscreen()) 3426 !surface->IsOffscreen())
3425 supports_post_sub_buffer_ = false; 3427 supports_post_sub_buffer_ = false;
3426 3428
3429 supports_swap_buffers_with_damage_ = surface->SupportsSwapBuffersWithDamage();
3430
3427 supports_commit_overlay_planes_ = surface->SupportsCommitOverlayPlanes(); 3431 supports_commit_overlay_planes_ = surface->SupportsCommitOverlayPlanes();
3428 3432
3429 supports_async_swap_ = surface->SupportsAsyncSwap(); 3433 supports_async_swap_ = surface->SupportsAsyncSwap();
3430 3434
3431 if (feature_info_->workarounds().reverse_point_sprite_coord_origin) { 3435 if (feature_info_->workarounds().reverse_point_sprite_coord_origin) {
3432 glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT); 3436 glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT);
3433 } 3437 }
3434 3438
3435 if (feature_info_->workarounds().unbind_fbo_on_context_switch) { 3439 if (feature_info_->workarounds().unbind_fbo_on_context_switch) {
3436 context_->SetUnbindFboOnMakeCurrent(); 3440 context_->SetUnbindFboOnMakeCurrent();
(...skipping 7418 matching lines...) Expand 10 before | Expand all | Expand 10 after
10855 state_.unpack_image_height = param; 10859 state_.unpack_image_height = param;
10856 break; 10860 break;
10857 default: 10861 default:
10858 // Validation should have prevented us from getting here. 10862 // Validation should have prevented us from getting here.
10859 NOTREACHED(); 10863 NOTREACHED();
10860 break; 10864 break;
10861 } 10865 }
10862 return error::kNoError; 10866 return error::kNoError;
10863 } 10867 }
10864 10868
10869 error::Error GLES2DecoderImpl::HandleSwapBuffersWithDamageCHROMIUM(
10870 uint32_t immediate_data_size,
10871 const void* cmd_data) {
10872 const gles2::cmds::SwapBuffersWithDamageCHROMIUM& c =
10873 *static_cast<const gles2::cmds::SwapBuffersWithDamageCHROMIUM*>(cmd_data);
10874 TRACE_EVENT0("gpu", "GLES2DecoderImpl::SwapBuffersWithDamageCHROMIUM");
10875 { TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame"); }
10876 if (!supports_swap_buffers_with_damage_) {
10877 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glSwapBuffersWithDamageCHROMIUM",
10878 "command not supported by surface");
10879 return error::kNoError;
10880 }
10881 bool is_tracing;
10882 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("gpu.debug"),
10883 &is_tracing);
10884 if (is_tracing) {
10885 bool is_offscreen = !!offscreen_target_frame_buffer_.get();
10886 ScopedFramebufferBinder binder(this, GetBackbufferServiceId());
10887 gpu_state_tracer_->TakeSnapshotWithCurrentFramebuffer(
10888 is_offscreen ? offscreen_size_ : surface_->GetSize());
10889 }
10890
10891 ClearScheduleCALayerState();
10892
10893 FinishSwapBuffers(
10894 surface_->SwapBuffersWithDamage(c.x, c.y, c.width, c.height));
10895
10896 return error::kNoError;
10897 }
10898
10865 error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM( 10899 error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM(
10866 uint32_t immediate_data_size, 10900 uint32_t immediate_data_size,
10867 const void* cmd_data) { 10901 const void* cmd_data) {
10868 const gles2::cmds::PostSubBufferCHROMIUM& c = 10902 const gles2::cmds::PostSubBufferCHROMIUM& c =
10869 *static_cast<const gles2::cmds::PostSubBufferCHROMIUM*>(cmd_data); 10903 *static_cast<const gles2::cmds::PostSubBufferCHROMIUM*>(cmd_data);
10870 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandlePostSubBufferCHROMIUM"); 10904 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandlePostSubBufferCHROMIUM");
10871 { 10905 {
10872 TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame"); 10906 TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame");
10873 } 10907 }
10874 if (!supports_post_sub_buffer_) { 10908 if (!supports_post_sub_buffer_) {
(...skipping 6875 matching lines...) Expand 10 before | Expand all | Expand 10 after
17750 } 17784 }
17751 17785
17752 // Include the auto-generated part of this file. We split this because it means 17786 // Include the auto-generated part of this file. We split this because it means
17753 // we can easily edit the non-auto generated parts right here in this file 17787 // we can easily edit the non-auto generated parts right here in this file
17754 // instead of having to edit some template or the code generator. 17788 // instead of having to edit some template or the code generator.
17755 #include "base/macros.h" 17789 #include "base/macros.h"
17756 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 17790 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
17757 17791
17758 } // namespace gles2 17792 } // namespace gles2
17759 } // namespace gpu 17793 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698