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

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

Issue 2826043002: Do not share FBOs/VAOs/Transform feedback objects across contexts (Closed)
Patch Set: Added service side changes Created 3 years, 7 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 551 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 } 562 }
563 void RestoreBufferBinding(unsigned int target) override; 563 void RestoreBufferBinding(unsigned int target) override;
564 void RestoreFramebufferBindings() const override; 564 void RestoreFramebufferBindings() const override;
565 void RestoreRenderbufferBindings() override; 565 void RestoreRenderbufferBindings() override;
566 void RestoreTextureState(unsigned service_id) const override; 566 void RestoreTextureState(unsigned service_id) const override;
567 567
568 void ClearAllAttributes() const override; 568 void ClearAllAttributes() const override;
569 void RestoreAllAttributes() const override; 569 void RestoreAllAttributes() const override;
570 570
571 QueryManager* GetQueryManager() override { return query_manager_.get(); } 571 QueryManager* GetQueryManager() override { return query_manager_.get(); }
572 FramebufferManager* GetFramebufferManager() override {
573 return framebuffer_manager_.get();
574 }
572 TransformFeedbackManager* GetTransformFeedbackManager() override { 575 TransformFeedbackManager* GetTransformFeedbackManager() override {
573 return transform_feedback_manager_.get(); 576 return transform_feedback_manager_.get();
574 } 577 }
575 VertexArrayManager* GetVertexArrayManager() override { 578 VertexArrayManager* GetVertexArrayManager() override {
576 return vertex_array_manager_.get(); 579 return vertex_array_manager_.get();
577 } 580 }
578 ImageManager* GetImageManager() override { return image_manager_.get(); } 581 ImageManager* GetImageManager() override { return image_manager_.get(); }
579 582
580 bool HasPendingQueries() const override; 583 bool HasPendingQueries() const override;
581 void ProcessPendingQueries(bool did_finish) override; 584 void ProcessPendingQueries(bool did_finish) override;
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 // TODO(gman): Cache these pointers? 719 // TODO(gman): Cache these pointers?
717 BufferManager* buffer_manager() { 720 BufferManager* buffer_manager() {
718 return group_->buffer_manager(); 721 return group_->buffer_manager();
719 } 722 }
720 723
721 RenderbufferManager* renderbuffer_manager() { 724 RenderbufferManager* renderbuffer_manager() {
722 return group_->renderbuffer_manager(); 725 return group_->renderbuffer_manager();
723 } 726 }
724 727
725 FramebufferManager* framebuffer_manager() { 728 FramebufferManager* framebuffer_manager() {
726 return group_->framebuffer_manager(); 729 return framebuffer_manager_.get();
727 } 730 }
728 731
729 ProgramManager* program_manager() { 732 ProgramManager* program_manager() {
730 return group_->program_manager(); 733 return group_->program_manager();
731 } 734 }
732 735
733 SamplerManager* sampler_manager() { 736 SamplerManager* sampler_manager() {
734 return group_->sampler_manager(); 737 return group_->sampler_manager();
735 } 738 }
736 739
(...skipping 1578 matching lines...) Expand 10 before | Expand all | Expand 10 after
2315 size_t GetCreatedBackTextureCountForTest() override; 2318 size_t GetCreatedBackTextureCountForTest() override;
2316 2319
2317 // The copy that is used as the destination for multi-sample resolves. 2320 // The copy that is used as the destination for multi-sample resolves.
2318 std::unique_ptr<BackFramebuffer> offscreen_resolved_frame_buffer_; 2321 std::unique_ptr<BackFramebuffer> offscreen_resolved_frame_buffer_;
2319 std::unique_ptr<BackTexture> offscreen_resolved_color_texture_; 2322 std::unique_ptr<BackTexture> offscreen_resolved_color_texture_;
2320 GLenum offscreen_saved_color_format_; 2323 GLenum offscreen_saved_color_format_;
2321 2324
2322 // Whether the client requested an offscreen buffer with an alpha channel. 2325 // Whether the client requested an offscreen buffer with an alpha channel.
2323 bool offscreen_buffer_should_have_alpha_; 2326 bool offscreen_buffer_should_have_alpha_;
2324 2327
2328 std::unique_ptr<FramebufferManager> framebuffer_manager_;
2329
2325 std::unique_ptr<QueryManager> query_manager_; 2330 std::unique_ptr<QueryManager> query_manager_;
2326 2331
2327 std::unique_ptr<VertexArrayManager> vertex_array_manager_; 2332 std::unique_ptr<VertexArrayManager> vertex_array_manager_;
2328 2333
2329 std::unique_ptr<ImageManager> image_manager_; 2334 std::unique_ptr<ImageManager> image_manager_;
2330 2335
2331 FenceSyncReleaseCallback fence_sync_release_callback_; 2336 FenceSyncReleaseCallback fence_sync_release_callback_;
2332 WaitSyncTokenCallback wait_sync_token_callback_; 2337 WaitSyncTokenCallback wait_sync_token_callback_;
2333 NoParamCallback deschedule_until_finished_callback_; 2338 NoParamCallback deschedule_until_finished_callback_;
2334 NoParamCallback reschedule_after_finished_callback_; 2339 NoParamCallback reschedule_after_finished_callback_;
(...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after
3243 state_.default_vertex_attrib_manager = 3248 state_.default_vertex_attrib_manager =
3244 CreateVertexAttribManager(0, default_vertex_attrib_service_id, false); 3249 CreateVertexAttribManager(0, default_vertex_attrib_service_id, false);
3245 3250
3246 state_.default_vertex_attrib_manager->Initialize( 3251 state_.default_vertex_attrib_manager->Initialize(
3247 group_->max_vertex_attribs(), 3252 group_->max_vertex_attribs(),
3248 workarounds().init_vertex_attributes); 3253 workarounds().init_vertex_attributes);
3249 3254
3250 // vertex_attrib_manager is set to default_vertex_attrib_manager by this call 3255 // vertex_attrib_manager is set to default_vertex_attrib_manager by this call
3251 DoBindVertexArrayOES(0); 3256 DoBindVertexArrayOES(0);
3252 3257
3258 framebuffer_manager_.reset(new FramebufferManager(
3259 group_->max_draw_buffers(), group_->max_color_attachments(),
3260 group_->framebuffer_completeness_cache()));
3261 group_->texture_manager()->set_framebuffer_manager(
3262 framebuffer_manager_.get());
Zhenyao Mo 2017/05/16 18:53:40 This is problematic. Now creating a new context c
Chandan 2017/05/17 13:08:08 Done.
3263
3253 query_manager_.reset(new QueryManager(this, feature_info_.get())); 3264 query_manager_.reset(new QueryManager(this, feature_info_.get()));
3254 3265
3255 image_manager_.reset(new ImageManager); 3266 image_manager_.reset(new ImageManager);
3256 3267
3257 util_.set_num_compressed_texture_formats( 3268 util_.set_num_compressed_texture_formats(
3258 validators_->compressed_texture_format.GetValues().size()); 3269 validators_->compressed_texture_format.GetValues().size());
3259 3270
3260 if (!gl_version_info().BehavesLikeGLES()) { 3271 if (!gl_version_info().BehavesLikeGLES()) {
3261 // We have to enable vertex array 0 on GL with compatibility profile or it 3272 // We have to enable vertex array 0 on GL with compatibility profile or it
3262 // won't render. Note that ES or GL with core profile does not have this 3273 // won't render. Note that ES or GL with core profile does not have this
(...skipping 1586 matching lines...) Expand 10 before | Expand all | Expand 10 after
4849 // the later deletes the ProgramManager object that referred by 4860 // the later deletes the ProgramManager object that referred by
4850 // state_.current_program object. 4861 // state_.current_program object.
4851 state_.current_program = NULL; 4862 state_.current_program = NULL;
4852 4863
4853 apply_framebuffer_attachment_cmaa_intel_.reset(); 4864 apply_framebuffer_attachment_cmaa_intel_.reset();
4854 copy_tex_image_blit_.reset(); 4865 copy_tex_image_blit_.reset();
4855 copy_texture_CHROMIUM_.reset(); 4866 copy_texture_CHROMIUM_.reset();
4856 srgb_converter_.reset(); 4867 srgb_converter_.reset();
4857 clear_framebuffer_blit_.reset(); 4868 clear_framebuffer_blit_.reset();
4858 4869
4870 if (framebuffer_manager_.get()) {
4871 framebuffer_manager_->Destroy(have_context);
4872 if (group_->texture_manager())
4873 group_->texture_manager()->set_framebuffer_manager(nullptr);
4874 framebuffer_manager_.reset();
4875 }
4876
4859 if (query_manager_.get()) { 4877 if (query_manager_.get()) {
4860 query_manager_->Destroy(have_context); 4878 query_manager_->Destroy(have_context);
4861 query_manager_.reset(); 4879 query_manager_.reset();
4862 } 4880 }
4863 4881
4864 if (vertex_array_manager_ .get()) { 4882 if (vertex_array_manager_ .get()) {
4865 vertex_array_manager_->Destroy(have_context); 4883 vertex_array_manager_->Destroy(have_context);
4866 vertex_array_manager_.reset(); 4884 vertex_array_manager_.reset();
4867 } 4885 }
4868 4886
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after
5717 glEnable(GL_SCISSOR_TEST); 5735 glEnable(GL_SCISSOR_TEST);
5718 } else { 5736 } else {
5719 // Ditto. 5737 // Ditto.
5720 glEnable(GL_SCISSOR_TEST); 5738 glEnable(GL_SCISSOR_TEST);
5721 glDisable(GL_SCISSOR_TEST); 5739 glDisable(GL_SCISSOR_TEST);
5722 } 5740 }
5723 } 5741 }
5724 } 5742 }
5725 5743
5726 void GLES2DecoderImpl::DoBindFramebuffer(GLenum target, GLuint client_id) { 5744 void GLES2DecoderImpl::DoBindFramebuffer(GLenum target, GLuint client_id) {
5727 Framebuffer* framebuffer = NULL; 5745 Framebuffer* framebuffer = nullptr;
5728 GLuint service_id = 0; 5746 GLuint service_id = 0;
5729 if (client_id != 0) { 5747 if (client_id != 0) {
5730 framebuffer = GetFramebuffer(client_id); 5748 framebuffer = GetFramebuffer(client_id);
5731 if (!framebuffer) { 5749 if (!framebuffer) {
5732 if (!group_->bind_generates_resource()) {
Zhenyao Mo 2017/05/16 18:53:40 This is still needed.
Chandan 2017/05/17 13:08:08 Done.
5733 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, 5750 LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
5734 "glBindFramebuffer", 5751 "glBindFramebuffer",
5735 "id not generated by glGenFramebuffers"); 5752 "id not generated by glGenFramebuffers");
5736 return; 5753 return;
5737 }
5738
5739 // It's a new id so make a framebuffer framebuffer for it.
5740 glGenFramebuffersEXT(1, &service_id);
5741 CreateFramebuffer(client_id, service_id);
5742 framebuffer = GetFramebuffer(client_id);
5743 } else { 5754 } else {
5744 service_id = framebuffer->service_id(); 5755 service_id = framebuffer->service_id();
5745 } 5756 }
5746 framebuffer->MarkAsValid(); 5757 framebuffer->MarkAsValid();
5747 } 5758 }
5748 LogClientServiceForInfo(framebuffer, client_id, "glBindFramebuffer"); 5759 LogClientServiceForInfo(framebuffer, client_id, "glBindFramebuffer");
5749 5760
5750 if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) { 5761 if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) {
5751 framebuffer_state_.bound_draw_framebuffer = framebuffer; 5762 framebuffer_state_.bound_draw_framebuffer = framebuffer;
5752 } 5763 }
5753 5764
5754 // vmiura: This looks like dup code 5765 // vmiura: This looks like dup code
5755 if (target == GL_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER_EXT) { 5766 if (target == GL_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER_EXT) {
5756 framebuffer_state_.bound_read_framebuffer = framebuffer; 5767 framebuffer_state_.bound_read_framebuffer = framebuffer;
5757 } 5768 }
5758 5769
5759 framebuffer_state_.clear_state_dirty = true; 5770 framebuffer_state_.clear_state_dirty = true;
5760 5771
5761 // If we are rendering to the backbuffer get the FBO id for any simulated 5772 // If we are rendering to the backbuffer get the FBO id for any simulated
5762 // backbuffer. 5773 // backbuffer.
5763 if (framebuffer == NULL) { 5774 if (!framebuffer) {
5764 service_id = GetBackbufferServiceId(); 5775 service_id = GetBackbufferServiceId();
5765 } 5776 }
5766 5777
5767 glBindFramebufferEXT(target, service_id); 5778 glBindFramebufferEXT(target, service_id);
5768 OnFboChanged(); 5779 OnFboChanged();
5769 } 5780 }
5770 5781
5771 void GLES2DecoderImpl::DoBindRenderbuffer(GLenum target, GLuint client_id) { 5782 void GLES2DecoderImpl::DoBindRenderbuffer(GLenum target, GLuint client_id) {
5772 Renderbuffer* renderbuffer = NULL; 5783 Renderbuffer* renderbuffer = NULL;
5773 GLuint service_id = 0; 5784 GLuint service_id = 0;
(...skipping 13866 matching lines...) Expand 10 before | Expand all | Expand 10 after
19640 } 19651 }
19641 19652
19642 // Include the auto-generated part of this file. We split this because it means 19653 // Include the auto-generated part of this file. We split this because it means
19643 // we can easily edit the non-auto generated parts right here in this file 19654 // we can easily edit the non-auto generated parts right here in this file
19644 // instead of having to edit some template or the code generator. 19655 // instead of having to edit some template or the code generator.
19645 #include "base/macros.h" 19656 #include "base/macros.h"
19646 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 19657 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
19647 19658
19648 } // namespace gles2 19659 } // namespace gles2
19649 } // namespace gpu 19660 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_mock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698