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

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

Issue 7518016: Revert 94743 - Allow the renderer process to map textures from one context into another. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 virtual const char* GetCommandName(unsigned int command_id) const; 458 virtual const char* GetCommandName(unsigned int command_id) const;
459 459
460 // Overridden from GLES2Decoder. 460 // Overridden from GLES2Decoder.
461 virtual bool Initialize(const scoped_refptr<gfx::GLSurface>& surface, 461 virtual bool Initialize(const scoped_refptr<gfx::GLSurface>& surface,
462 const scoped_refptr<gfx::GLContext>& context, 462 const scoped_refptr<gfx::GLContext>& context,
463 const gfx::Size& size, 463 const gfx::Size& size,
464 const DisallowedExtensions& disallowed_extensions, 464 const DisallowedExtensions& disallowed_extensions,
465 const char* allowed_extensions, 465 const char* allowed_extensions,
466 const std::vector<int32>& attribs); 466 const std::vector<int32>& attribs);
467 virtual void Destroy(); 467 virtual void Destroy();
468 virtual bool MapExternalResource(resource_type::ResourceType resource_type,
469 uint32 resource_source_id,
470 GLES2Decoder* source_decoder,
471 uint32 resource_dest_id);
472 virtual bool SetParent(GLES2Decoder* parent_decoder, 468 virtual bool SetParent(GLES2Decoder* parent_decoder,
473 uint32 parent_texture_id); 469 uint32 parent_texture_id);
474 virtual void ResizeOffscreenFrameBuffer(const gfx::Size& size); 470 virtual void ResizeOffscreenFrameBuffer(const gfx::Size& size);
475 virtual bool UpdateOffscreenFrameBufferSize(); 471 virtual bool UpdateOffscreenFrameBufferSize();
476 void UpdateParentTextureInfo(); 472 void UpdateParentTextureInfo();
477 virtual bool MakeCurrent(); 473 virtual bool MakeCurrent();
478 virtual GLES2Util* GetGLES2Util() { return &util_; } 474 virtual GLES2Util* GetGLES2Util() { return &util_; }
479 virtual gfx::GLContext* GetGLContext() { return context_.get(); } 475 virtual gfx::GLContext* GetGLContext() { return context_.get(); }
480 virtual gfx::GLSurface* GetGLSurface() { return surface_.get(); } 476 virtual gfx::GLSurface* GetGLSurface() { return surface_.get(); }
481 virtual ContextGroup* GetContextGroup() { return group_.get(); } 477 virtual ContextGroup* GetContextGroup() { return group_.get(); }
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 feature_info_, client_id, service_id); 581 feature_info_, client_id, service_id);
586 } 582 }
587 583
588 // Gets the texture info for the given texture. Returns NULL if none exists. 584 // Gets the texture info for the given texture. Returns NULL if none exists.
589 TextureManager::TextureInfo* GetTextureInfo(GLuint client_id) { 585 TextureManager::TextureInfo* GetTextureInfo(GLuint client_id) {
590 TextureManager::TextureInfo* info = 586 TextureManager::TextureInfo* info =
591 texture_manager()->GetTextureInfo(client_id); 587 texture_manager()->GetTextureInfo(client_id);
592 return (info && !info->IsDeleted()) ? info : NULL; 588 return (info && !info->IsDeleted()) ? info : NULL;
593 } 589 }
594 590
595 // Adds the texture info for the given texture.
596 void AddTextureInfo(GLuint client_id, TextureManager::TextureInfo* info) {
597 texture_manager()->AddTextureInfo(feature_info_, client_id, info);
598 }
599
600 // Deletes the texture info for the given texture. 591 // Deletes the texture info for the given texture.
601 void RemoveTextureInfo(GLuint client_id) { 592 void RemoveTextureInfo(GLuint client_id) {
602 texture_manager()->RemoveTextureInfo(feature_info_, client_id); 593 texture_manager()->RemoveTextureInfo(feature_info_, client_id);
603 } 594 }
604 595
605 // Get the size (in pixels) of the currently bound frame buffer (either FBO 596 // Get the size (in pixels) of the currently bound frame buffer (either FBO
606 // or regular back buffer). 597 // or regular back buffer).
607 gfx::Size GetBoundReadFrameBufferSize(); 598 gfx::Size GetBoundReadFrameBufferSize();
608 599
609 // Get the format of the currently bound frame buffer (either FBO or regular 600 // Get the format of the currently bound frame buffer (either FBO or regular
(...skipping 1481 matching lines...) Expand 10 before | Expand all | Expand 10 after
2091 } 2082 }
2092 2083
2093 void GLES2DecoderImpl::DeleteTexturesHelper( 2084 void GLES2DecoderImpl::DeleteTexturesHelper(
2094 GLsizei n, const GLuint* client_ids) { 2085 GLsizei n, const GLuint* client_ids) {
2095 for (GLsizei ii = 0; ii < n; ++ii) { 2086 for (GLsizei ii = 0; ii < n; ++ii) {
2096 TextureManager::TextureInfo* info = GetTextureInfo(client_ids[ii]); 2087 TextureManager::TextureInfo* info = GetTextureInfo(client_ids[ii]);
2097 if (info) { 2088 if (info) {
2098 if (info->IsAttachedToFramebuffer()) { 2089 if (info->IsAttachedToFramebuffer()) {
2099 state_dirty_ = true; 2090 state_dirty_ = true;
2100 } 2091 }
2101 if (info->owner() == group_->texture_manager()) { 2092 GLuint service_id = info->service_id();
2102 GLuint service_id = info->service_id(); 2093 glDeleteTextures(1, &service_id);
2103 glDeleteTextures(1, &service_id);
2104 }
2105 RemoveTextureInfo(client_ids[ii]); 2094 RemoveTextureInfo(client_ids[ii]);
2106 } 2095 }
2107 } 2096 }
2108 } 2097 }
2109 2098
2110 // } // anonymous namespace 2099 // } // anonymous namespace
2111 2100
2112 bool GLES2DecoderImpl::MakeCurrent() { 2101 bool GLES2DecoderImpl::MakeCurrent() {
2113 bool result = context_.get() ? context_->MakeCurrent(surface_.get()) : false; 2102 bool result = context_.get() ? context_->MakeCurrent(surface_.get()) : false;
2114 if (result && WasContextLost()) { 2103 if (result && WasContextLost()) {
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
2474 2463
2475 offscreen_target_frame_buffer_.reset(); 2464 offscreen_target_frame_buffer_.reset();
2476 offscreen_target_color_texture_.reset(); 2465 offscreen_target_color_texture_.reset();
2477 offscreen_target_color_render_buffer_.reset(); 2466 offscreen_target_color_render_buffer_.reset();
2478 offscreen_target_depth_render_buffer_.reset(); 2467 offscreen_target_depth_render_buffer_.reset();
2479 offscreen_target_stencil_render_buffer_.reset(); 2468 offscreen_target_stencil_render_buffer_.reset();
2480 offscreen_saved_frame_buffer_.reset(); 2469 offscreen_saved_frame_buffer_.reset();
2481 offscreen_saved_color_texture_.reset(); 2470 offscreen_saved_color_texture_.reset();
2482 } 2471 }
2483 2472
2484 bool GLES2DecoderImpl::MapExternalResource(
2485 resource_type::ResourceType resource_type,
2486 uint32 resource_source_id,
2487 GLES2Decoder* source_decoder,
2488 uint32 resource_dest_id) {
2489 GLES2DecoderImpl* source_decoder_impl = static_cast<GLES2DecoderImpl*>(
2490 source_decoder);
2491
2492 if (resource_type != resource_type::kTexture)
2493 return false;
2494
2495 if (!source_decoder)
2496 return false;
2497
2498 // The client should already have created the texture in the source context
2499 // group and flushed.
2500 TextureManager::TextureInfo* source_info =
2501 source_decoder_impl->GetTextureInfo(resource_source_id);
2502 if (!source_info)
2503 return false;
2504
2505 // Delete or unmap any existing texture with this ID.
2506 DeleteTexturesHelper(1, &resource_dest_id);
2507
2508 // Add the source texture info to this group's manager with the
2509 // requested id.
2510 AddTextureInfo(resource_dest_id, source_info);
2511
2512 return true;
2513 }
2514
2515 bool GLES2DecoderImpl::SetParent(GLES2Decoder* new_parent, 2473 bool GLES2DecoderImpl::SetParent(GLES2Decoder* new_parent,
2516 uint32 new_parent_texture_id) { 2474 uint32 new_parent_texture_id) {
2517 if (!offscreen_saved_color_texture_.get()) 2475 if (!offscreen_saved_color_texture_.get())
2518 return false; 2476 return false;
2519 2477
2520 // Remove the saved frame buffer mapping from the parent decoder. The 2478 // Remove the saved frame buffer mapping from the parent decoder. The
2521 // parent pointer is a weak pointer so it will be null if the parent has 2479 // parent pointer is a weak pointer so it will be null if the parent has
2522 // already been destroyed. 2480 // already been destroyed.
2523 if (parent_) { 2481 if (parent_) {
2524 // First check the texture has been mapped into the parent. This might not 2482 // First check the texture has been mapped into the parent. This might not
(...skipping 12 matching lines...) Expand all
2537 // it can reference it. 2495 // it can reference it.
2538 GLuint service_id = offscreen_saved_color_texture_->id(); 2496 GLuint service_id = offscreen_saved_color_texture_->id();
2539 2497
2540 // Replace texture info when ID is already in use by parent. 2498 // Replace texture info when ID is already in use by parent.
2541 if (new_parent_impl->texture_manager()->GetTextureInfo( 2499 if (new_parent_impl->texture_manager()->GetTextureInfo(
2542 new_parent_texture_id)) 2500 new_parent_texture_id))
2543 new_parent_impl->texture_manager()->RemoveTextureInfo( 2501 new_parent_impl->texture_manager()->RemoveTextureInfo(
2544 feature_info_, new_parent_texture_id); 2502 feature_info_, new_parent_texture_id);
2545 2503
2546 TextureManager::TextureInfo* info = 2504 TextureManager::TextureInfo* info =
2547 new TextureManager::TextureInfo(service_id); 2505 new_parent_impl->CreateTextureInfo(new_parent_texture_id, service_id);
2548 new_parent_impl->AddTextureInfo(new_parent_texture_id, info); 2506 info->SetNotOwned();
2549 new_parent_impl->texture_manager()->SetInfoTarget(info, GL_TEXTURE_2D); 2507 new_parent_impl->texture_manager()->SetInfoTarget(info, GL_TEXTURE_2D);
2550 2508
2551 parent_ = new_parent_impl->AsWeakPtr(); 2509 parent_ = new_parent_impl->AsWeakPtr();
2552 2510
2553 UpdateParentTextureInfo(); 2511 UpdateParentTextureInfo();
2554 } else { 2512 } else {
2555 parent_.reset(); 2513 parent_.reset();
2556 } 2514 }
2557 2515
2558 return true; 2516 return true;
(...skipping 4275 matching lines...) Expand 10 before | Expand all | Expand 10 after
6834 return false; 6792 return false;
6835 } 6793 }
6836 6794
6837 // Include the auto-generated part of this file. We split this because it means 6795 // Include the auto-generated part of this file. We split this because it means
6838 // we can easily edit the non-auto generated parts right here in this file 6796 // we can easily edit the non-auto generated parts right here in this file
6839 // instead of having to edit some template or the code generator. 6797 // instead of having to edit some template or the code generator.
6840 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 6798 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
6841 6799
6842 } // namespace gles2 6800 } // namespace gles2
6843 } // namespace gpu 6801 } // 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