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

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

Issue 7538008: Delete copy_texture_to_parent_texture from GPU command buffer code. (Closed) Base URL: svn://chrome-svn/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 1025 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 void DoVertexAttrib2fv(GLuint index, const GLfloat *v); 1036 void DoVertexAttrib2fv(GLuint index, const GLfloat *v);
1037 void DoVertexAttrib3fv(GLuint index, const GLfloat *v); 1037 void DoVertexAttrib3fv(GLuint index, const GLfloat *v);
1038 void DoVertexAttrib4fv(GLuint index, const GLfloat *v); 1038 void DoVertexAttrib4fv(GLuint index, const GLfloat *v);
1039 1039
1040 // Wrapper for glUseProgram 1040 // Wrapper for glUseProgram
1041 void DoUseProgram(GLuint program); 1041 void DoUseProgram(GLuint program);
1042 1042
1043 // Wrapper for glValidateProgram. 1043 // Wrapper for glValidateProgram.
1044 void DoValidateProgram(GLuint program_client_id); 1044 void DoValidateProgram(GLuint program_client_id);
1045 1045
1046 void DoCopyTextureToParentTextureCHROMIUM(
1047 GLuint client_texture_id, GLuint parent_client_texture_id);
1048
1049 void DoResizeCHROMIUM(GLuint width, GLuint height); 1046 void DoResizeCHROMIUM(GLuint width, GLuint height);
1050 1047
1051 void DoSetSurfaceCHROMIUM(GLint surface_id); 1048 void DoSetSurfaceCHROMIUM(GLint surface_id);
1052 1049
1053 // Gets the number of values that will be returned by glGetXXX. Returns 1050 // Gets the number of values that will be returned by glGetXXX. Returns
1054 // false if pname is unknown. 1051 // false if pname is unknown.
1055 bool GetNumValuesReturnedForGLGet(GLenum pname, GLsizei* num_values); 1052 bool GetNumValuesReturnedForGLGet(GLenum pname, GLsizei* num_values);
1056 1053
1057 // Gets the GLError through our wrapper. 1054 // Gets the GLError through our wrapper.
1058 GLenum GetGLError(); 1055 GLenum GetGLError();
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 scoped_ptr<FrameBuffer> offscreen_target_frame_buffer_; 1282 scoped_ptr<FrameBuffer> offscreen_target_frame_buffer_;
1286 scoped_ptr<Texture> offscreen_target_color_texture_; 1283 scoped_ptr<Texture> offscreen_target_color_texture_;
1287 scoped_ptr<RenderBuffer> offscreen_target_color_render_buffer_; 1284 scoped_ptr<RenderBuffer> offscreen_target_color_render_buffer_;
1288 scoped_ptr<RenderBuffer> offscreen_target_depth_render_buffer_; 1285 scoped_ptr<RenderBuffer> offscreen_target_depth_render_buffer_;
1289 scoped_ptr<RenderBuffer> offscreen_target_stencil_render_buffer_; 1286 scoped_ptr<RenderBuffer> offscreen_target_stencil_render_buffer_;
1290 GLenum offscreen_target_color_format_; 1287 GLenum offscreen_target_color_format_;
1291 GLenum offscreen_target_depth_format_; 1288 GLenum offscreen_target_depth_format_;
1292 GLenum offscreen_target_stencil_format_; 1289 GLenum offscreen_target_stencil_format_;
1293 GLsizei offscreen_target_samples_; 1290 GLsizei offscreen_target_samples_;
1294 1291
1295 GLuint copy_texture_to_parent_texture_fb_;
1296
1297 // The copy that is saved when SwapBuffers is called. It is also 1292 // The copy that is saved when SwapBuffers is called. It is also
1298 // used as the destination for multi-sample resolves. 1293 // used as the destination for multi-sample resolves.
1299 scoped_ptr<FrameBuffer> offscreen_saved_frame_buffer_; 1294 scoped_ptr<FrameBuffer> offscreen_saved_frame_buffer_;
1300 scoped_ptr<Texture> offscreen_saved_color_texture_; 1295 scoped_ptr<Texture> offscreen_saved_color_texture_;
1301 GLenum offscreen_saved_color_format_; 1296 GLenum offscreen_saved_color_format_;
1302 1297
1303 scoped_ptr<Callback1<gfx::Size>::Type> resize_callback_; 1298 scoped_ptr<Callback1<gfx::Size>::Type> resize_callback_;
1304 scoped_ptr<Callback0::Type> swap_buffers_callback_; 1299 scoped_ptr<Callback0::Type> swap_buffers_callback_;
1305 1300
1306 // The format of the back buffer_ 1301 // The format of the back buffer_
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
1653 clear_depth_(1.0f), 1648 clear_depth_(1.0f),
1654 mask_depth_(true), 1649 mask_depth_(true),
1655 enable_scissor_test_(false), 1650 enable_scissor_test_(false),
1656 enable_depth_test_(false), 1651 enable_depth_test_(false),
1657 enable_stencil_test_(false), 1652 enable_stencil_test_(false),
1658 state_dirty_(true), 1653 state_dirty_(true),
1659 offscreen_target_color_format_(0), 1654 offscreen_target_color_format_(0),
1660 offscreen_target_depth_format_(0), 1655 offscreen_target_depth_format_(0),
1661 offscreen_target_stencil_format_(0), 1656 offscreen_target_stencil_format_(0),
1662 offscreen_target_samples_(0), 1657 offscreen_target_samples_(0),
1663 copy_texture_to_parent_texture_fb_(0),
1664 offscreen_saved_color_format_(0), 1658 offscreen_saved_color_format_(0),
1665 back_buffer_color_format_(0), 1659 back_buffer_color_format_(0),
1666 back_buffer_has_depth_(false), 1660 back_buffer_has_depth_(false),
1667 back_buffer_has_stencil_(false), 1661 back_buffer_has_stencil_(false),
1668 teximage2d_faster_than_texsubimage2d_(true), 1662 teximage2d_faster_than_texsubimage2d_(true),
1669 bufferdata_faster_than_buffersubdata_(true), 1663 bufferdata_faster_than_buffersubdata_(true),
1670 current_decoder_error_(error::kNoError), 1664 current_decoder_error_(error::kNoError),
1671 use_shader_translator_(true), 1665 use_shader_translator_(true),
1672 validators_(group_->feature_info()->validators()), 1666 validators_(group_->feature_info()->validators()),
1673 feature_info_(group_->feature_info()), 1667 feature_info_(group_->feature_info()),
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
1905 pending_offscreen_size_ = size; 1899 pending_offscreen_size_ = size;
1906 if (!UpdateOffscreenFrameBufferSize()) { 1900 if (!UpdateOffscreenFrameBufferSize()) {
1907 LOG(ERROR) << "Could not allocate offscreen buffer storage."; 1901 LOG(ERROR) << "Could not allocate offscreen buffer storage.";
1908 Destroy(); 1902 Destroy();
1909 return false; 1903 return false;
1910 } 1904 }
1911 1905
1912 // Bind to the new default frame buffer (the offscreen target frame buffer). 1906 // Bind to the new default frame buffer (the offscreen target frame buffer).
1913 // This should now be associated with ID zero. 1907 // This should now be associated with ID zero.
1914 DoBindFramebuffer(GL_FRAMEBUFFER, 0); 1908 DoBindFramebuffer(GL_FRAMEBUFFER, 0);
1915
1916 glGenFramebuffersEXT(1, &copy_texture_to_parent_texture_fb_);
1917 } 1909 }
1918 1910
1919 // OpenGL ES 2.0 implicitly enables the desktop GL capability 1911 // OpenGL ES 2.0 implicitly enables the desktop GL capability
1920 // VERTEX_PROGRAM_POINT_SIZE and doesn't expose this enum. This fact 1912 // VERTEX_PROGRAM_POINT_SIZE and doesn't expose this enum. This fact
1921 // isn't well documented; it was discovered in the Khronos OpenGL ES 1913 // isn't well documented; it was discovered in the Khronos OpenGL ES
1922 // mailing list archives. It also implicitly enables the desktop GL 1914 // mailing list archives. It also implicitly enables the desktop GL
1923 // capability GL_POINT_SPRITE to provide access to the gl_PointCoord 1915 // capability GL_POINT_SPRITE to provide access to the gl_PointCoord
1924 // variable in fragment shaders. 1916 // variable in fragment shaders.
1925 if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { 1917 if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) {
1926 glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); 1918 glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
2421 current_program_ = NULL; 2413 current_program_ = NULL;
2422 } 2414 }
2423 2415
2424 if (attrib_0_buffer_id_) { 2416 if (attrib_0_buffer_id_) {
2425 glDeleteBuffersARB(1, &attrib_0_buffer_id_); 2417 glDeleteBuffersARB(1, &attrib_0_buffer_id_);
2426 } 2418 }
2427 if (fixed_attrib_buffer_id_) { 2419 if (fixed_attrib_buffer_id_) {
2428 glDeleteBuffersARB(1, &fixed_attrib_buffer_id_); 2420 glDeleteBuffersARB(1, &fixed_attrib_buffer_id_);
2429 } 2421 }
2430 2422
2431 if (copy_texture_to_parent_texture_fb_)
2432 glDeleteFramebuffersEXT(1, &copy_texture_to_parent_texture_fb_);
2433
2434 if (offscreen_target_frame_buffer_.get()) 2423 if (offscreen_target_frame_buffer_.get())
2435 offscreen_target_frame_buffer_->Destroy(); 2424 offscreen_target_frame_buffer_->Destroy();
2436 if (offscreen_target_color_texture_.get()) 2425 if (offscreen_target_color_texture_.get())
2437 offscreen_target_color_texture_->Destroy(); 2426 offscreen_target_color_texture_->Destroy();
2438 if (offscreen_target_color_render_buffer_.get()) 2427 if (offscreen_target_color_render_buffer_.get())
2439 offscreen_target_color_render_buffer_->Destroy(); 2428 offscreen_target_color_render_buffer_->Destroy();
2440 if (offscreen_target_depth_render_buffer_.get()) 2429 if (offscreen_target_depth_render_buffer_.get())
2441 offscreen_target_depth_render_buffer_->Destroy(); 2430 offscreen_target_depth_render_buffer_->Destroy();
2442 if (offscreen_target_stencil_render_buffer_.get()) 2431 if (offscreen_target_stencil_render_buffer_.get())
2443 offscreen_target_stencil_render_buffer_->Destroy(); 2432 offscreen_target_stencil_render_buffer_->Destroy();
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
2558 return true; 2547 return true;
2559 } 2548 }
2560 2549
2561 void GLES2DecoderImpl::ResizeOffscreenFrameBuffer(const gfx::Size& size) { 2550 void GLES2DecoderImpl::ResizeOffscreenFrameBuffer(const gfx::Size& size) {
2562 // We can't resize the render buffers immediately because there might be a 2551 // We can't resize the render buffers immediately because there might be a
2563 // partial frame rendered into them and we don't want the tail end of that 2552 // partial frame rendered into them and we don't want the tail end of that
2564 // rendered into the reallocated storage. Defer until the next SwapBuffers. 2553 // rendered into the reallocated storage. Defer until the next SwapBuffers.
2565 pending_offscreen_size_ = size; 2554 pending_offscreen_size_ = size;
2566 } 2555 }
2567 2556
2568 void GLES2DecoderImpl::DoCopyTextureToParentTextureCHROMIUM(
2569 GLuint client_texture_id,
2570 GLuint parent_client_texture_id) {
2571 if (parent_) {
2572 TextureManager::TextureInfo* texture = texture_manager()->GetTextureInfo(
2573 client_texture_id);
2574 TextureManager::TextureInfo* parent_texture =
2575 parent_->texture_manager()->GetTextureInfo(parent_client_texture_id);
2576 if (!texture || !parent_texture) {
2577 current_decoder_error_ = error::kInvalidArguments;
2578 return;
2579 }
2580 ScopedFrameBufferBinder fb_binder(this, copy_texture_to_parent_texture_fb_);
2581 glFramebufferTexture2DEXT(GL_FRAMEBUFFER,
2582 GL_COLOR_ATTACHMENT0,
2583 GL_TEXTURE_2D,
2584 texture->service_id(),
2585 0);
2586 ScopedTexture2DBinder tex_binder(this, parent_texture->service_id());
2587 GLsizei width, height;
2588 parent_texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height);
2589 glCopyTexImage2D(GL_TEXTURE_2D,
2590 0, // level
2591 GL_RGBA,
2592 0, 0, // x, y
2593 width,
2594 height,
2595 0); // border
2596 }
2597 }
2598
2599 void GLES2DecoderImpl::DoResizeCHROMIUM(GLuint width, GLuint height) { 2557 void GLES2DecoderImpl::DoResizeCHROMIUM(GLuint width, GLuint height) {
2600 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(TOUCH_UI) 2558 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(TOUCH_UI)
2601 // Make sure that we are done drawing to the back buffer before resizing. 2559 // Make sure that we are done drawing to the back buffer before resizing.
2602 glFinish(); 2560 glFinish();
2603 #endif 2561 #endif
2604 if (resize_callback_.get()) { 2562 if (resize_callback_.get()) {
2605 gfx::Size size(width, height); 2563 gfx::Size size(width, height);
2606 resize_callback_->Run(size); 2564 resize_callback_->Run(size);
2607 } 2565 }
2608 } 2566 }
(...skipping 4225 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

Powered by Google App Engine
This is Rietveld 408576698