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

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

Issue 6862002: Merge gpu_trace_event back into base/debug/trace_event (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge to 84062 Created 9 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 | 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>
11 #include <map> 11 #include <map>
12 #include <string> 12 #include <string>
13 #include <vector> 13 #include <vector>
14 14
15 #include "base/atomicops.h" 15 #include "base/atomicops.h"
16 #include "base/at_exit.h" 16 #include "base/at_exit.h"
17 #include "base/callback.h" 17 #include "base/callback.h"
18 #include "base/memory/scoped_ptr.h" 18 #include "base/memory/scoped_ptr.h"
19 #include "base/memory/weak_ptr.h" 19 #include "base/memory/weak_ptr.h"
20 #include "build/build_config.h" 20 #include "build/build_config.h"
21 #define GLES2_GPU_SERVICE 1 21 #define GLES2_GPU_SERVICE 1
22 #include "gpu/command_buffer/common/gles2_cmd_format.h" 22 #include "gpu/command_buffer/common/gles2_cmd_format.h"
23 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 23 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
24 #include "gpu/command_buffer/common/id_allocator.h" 24 #include "gpu/command_buffer/common/id_allocator.h"
25 #include "gpu/command_buffer/common/trace_event.h"
25 #include "gpu/command_buffer/service/buffer_manager.h" 26 #include "gpu/command_buffer/service/buffer_manager.h"
26 #include "gpu/command_buffer/service/cmd_buffer_engine.h" 27 #include "gpu/command_buffer/service/cmd_buffer_engine.h"
27 #include "gpu/command_buffer/service/context_group.h" 28 #include "gpu/command_buffer/service/context_group.h"
28 #include "gpu/command_buffer/service/feature_info.h" 29 #include "gpu/command_buffer/service/feature_info.h"
29 #include "gpu/command_buffer/service/framebuffer_manager.h" 30 #include "gpu/command_buffer/service/framebuffer_manager.h"
30 #include "gpu/command_buffer/service/gl_utils.h" 31 #include "gpu/command_buffer/service/gl_utils.h"
31 #include "gpu/command_buffer/service/gles2_cmd_validation.h" 32 #include "gpu/command_buffer/service/gles2_cmd_validation.h"
32 #include "gpu/command_buffer/service/program_manager.h" 33 #include "gpu/command_buffer/service/program_manager.h"
33 #include "gpu/command_buffer/service/renderbuffer_manager.h" 34 #include "gpu/command_buffer/service/renderbuffer_manager.h"
34 #include "gpu/command_buffer/service/shader_manager.h" 35 #include "gpu/command_buffer/service/shader_manager.h"
35 #include "gpu/command_buffer/service/shader_translator.h" 36 #include "gpu/command_buffer/service/shader_translator.h"
36 #include "gpu/command_buffer/service/texture_manager.h" 37 #include "gpu/command_buffer/service/texture_manager.h"
37 #include "gpu/common/gpu_trace_event.h"
38 #include "gpu/GLES2/gles2_command_buffer.h" 38 #include "gpu/GLES2/gles2_command_buffer.h"
39 #include "ui/gfx/gl/gl_context.h" 39 #include "ui/gfx/gl/gl_context.h"
40 #include "ui/gfx/gl/gl_implementation.h" 40 #include "ui/gfx/gl/gl_implementation.h"
41 41
42 #if !defined(GL_DEPTH24_STENCIL8) 42 #if !defined(GL_DEPTH24_STENCIL8)
43 #define GL_DEPTH24_STENCIL8 0x88F0 43 #define GL_DEPTH24_STENCIL8 0x88F0
44 #endif 44 #endif
45 45
46 namespace gpu { 46 namespace gpu {
47 namespace gles2 { 47 namespace gles2 {
(...skipping 5521 matching lines...) Expand 10 before | Expand all | Expand 10 after
5569 if (error == GL_NO_ERROR) { 5569 if (error == GL_NO_ERROR) {
5570 texture_manager()->SetLevelInfo(feature_info_, info, 5570 texture_manager()->SetLevelInfo(feature_info_, info,
5571 target, level, internal_format, width, height, 1, border, format, type); 5571 target, level, internal_format, width, height, 1, border, format, type);
5572 tex_image_2d_failed_ = false; 5572 tex_image_2d_failed_ = false;
5573 } 5573 }
5574 return error::kNoError; 5574 return error::kNoError;
5575 } 5575 }
5576 5576
5577 error::Error GLES2DecoderImpl::HandleTexImage2D( 5577 error::Error GLES2DecoderImpl::HandleTexImage2D(
5578 uint32 immediate_data_size, const gles2::TexImage2D& c) { 5578 uint32 immediate_data_size, const gles2::TexImage2D& c) {
5579 GPU_TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleTexImage2D"); 5579 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleTexImage2D");
5580 tex_image_2d_failed_ = true; 5580 tex_image_2d_failed_ = true;
5581 GLenum target = static_cast<GLenum>(c.target); 5581 GLenum target = static_cast<GLenum>(c.target);
5582 GLint level = static_cast<GLint>(c.level); 5582 GLint level = static_cast<GLint>(c.level);
5583 GLint internal_format = static_cast<GLint>(c.internalformat); 5583 GLint internal_format = static_cast<GLint>(c.internalformat);
5584 GLsizei width = static_cast<GLsizei>(c.width); 5584 GLsizei width = static_cast<GLsizei>(c.width);
5585 GLsizei height = static_cast<GLsizei>(c.height); 5585 GLsizei height = static_cast<GLsizei>(c.height);
5586 GLint border = static_cast<GLint>(c.border); 5586 GLint border = static_cast<GLint>(c.border);
5587 GLenum format = static_cast<GLenum>(c.format); 5587 GLenum format = static_cast<GLenum>(c.format);
5588 GLenum type = static_cast<GLenum>(c.type); 5588 GLenum type = static_cast<GLenum>(c.type);
5589 uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id); 5589 uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id);
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
5883 SetGLError(GL_INVALID_VALUE, 5883 SetGLError(GL_INVALID_VALUE,
5884 "glTexSubImage2D: bad dimensions."); 5884 "glTexSubImage2D: bad dimensions.");
5885 return; 5885 return;
5886 } 5886 }
5887 glTexSubImage2D( 5887 glTexSubImage2D(
5888 target, level, xoffset, yoffset, width, height, format, type, data); 5888 target, level, xoffset, yoffset, width, height, format, type, data);
5889 } 5889 }
5890 5890
5891 error::Error GLES2DecoderImpl::HandleTexSubImage2D( 5891 error::Error GLES2DecoderImpl::HandleTexSubImage2D(
5892 uint32 immediate_data_size, const gles2::TexSubImage2D& c) { 5892 uint32 immediate_data_size, const gles2::TexSubImage2D& c) {
5893 GPU_TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleTexSubImage2D"); 5893 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleTexSubImage2D");
5894 GLboolean internal = static_cast<GLboolean>(c.internal); 5894 GLboolean internal = static_cast<GLboolean>(c.internal);
5895 if (internal == GL_TRUE && tex_image_2d_failed_) 5895 if (internal == GL_TRUE && tex_image_2d_failed_)
5896 return error::kNoError; 5896 return error::kNoError;
5897 5897
5898 GLenum target = static_cast<GLenum>(c.target); 5898 GLenum target = static_cast<GLenum>(c.target);
5899 GLint level = static_cast<GLint>(c.level); 5899 GLint level = static_cast<GLint>(c.level);
5900 GLint xoffset = static_cast<GLint>(c.xoffset); 5900 GLint xoffset = static_cast<GLint>(c.xoffset);
5901 GLint yoffset = static_cast<GLint>(c.yoffset); 5901 GLint yoffset = static_cast<GLint>(c.yoffset);
5902 GLsizei width = static_cast<GLsizei>(c.width); 5902 GLsizei width = static_cast<GLsizei>(c.width);
5903 GLsizei height = static_cast<GLsizei>(c.height); 5903 GLsizei height = static_cast<GLsizei>(c.height);
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
6307 } 6307 }
6308 service_ids[ii] = info->service_id(); 6308 service_ids[ii] = info->service_id();
6309 } 6309 }
6310 // TODO(gman): call glShaderBinary 6310 // TODO(gman): call glShaderBinary
6311 return error::kNoError; 6311 return error::kNoError;
6312 #endif 6312 #endif
6313 } 6313 }
6314 6314
6315 error::Error GLES2DecoderImpl::HandleSwapBuffers( 6315 error::Error GLES2DecoderImpl::HandleSwapBuffers(
6316 uint32 immediate_data_size, const gles2::SwapBuffers& c) { 6316 uint32 immediate_data_size, const gles2::SwapBuffers& c) {
6317 GPU_TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleSwapBuffers"); 6317 TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleSwapBuffers");
6318 // If offscreen then don't actually SwapBuffers to the display. Just copy 6318 // If offscreen then don't actually SwapBuffers to the display. Just copy
6319 // the rendered frame to another frame buffer. 6319 // the rendered frame to another frame buffer.
6320 if (offscreen_target_frame_buffer_.get()) { 6320 if (offscreen_target_frame_buffer_.get()) {
6321 ScopedGLErrorSuppressor suppressor(this); 6321 ScopedGLErrorSuppressor suppressor(this);
6322 6322
6323 // First check to see if a deferred offscreen render buffer resize is 6323 // First check to see if a deferred offscreen render buffer resize is
6324 // pending. 6324 // pending.
6325 if (!UpdateOffscreenFrameBufferSize()) { 6325 if (!UpdateOffscreenFrameBufferSize()) {
6326 LOG(ERROR) << "Context lost because reallocation of offscreen FBO " 6326 LOG(ERROR) << "Context lost because reallocation of offscreen FBO "
6327 << "failed."; 6327 << "failed.";
(...skipping 25 matching lines...) Expand all
6353 } 6353 }
6354 6354
6355 // Run the callback with |binder| in scope, so that the callback can call 6355 // Run the callback with |binder| in scope, so that the callback can call
6356 // ReadPixels or CopyTexImage2D. 6356 // ReadPixels or CopyTexImage2D.
6357 if (swap_buffers_callback_.get()) { 6357 if (swap_buffers_callback_.get()) {
6358 swap_buffers_callback_->Run(); 6358 swap_buffers_callback_->Run();
6359 } 6359 }
6360 return error::kNoError; 6360 return error::kNoError;
6361 } 6361 }
6362 } else { 6362 } else {
6363 GPU_TRACE_EVENT0("gpu", "GLContext::SwapBuffers"); 6363 TRACE_EVENT0("gpu", "GLContext::SwapBuffers");
6364 if (!context_->SwapBuffers()) { 6364 if (!context_->SwapBuffers()) {
6365 LOG(ERROR) << "Context lost because SwapBuffers failed."; 6365 LOG(ERROR) << "Context lost because SwapBuffers failed.";
6366 return error::kLostContext; 6366 return error::kLostContext;
6367 } 6367 }
6368 } 6368 }
6369 6369
6370 if (swap_buffers_callback_.get()) { 6370 if (swap_buffers_callback_.get()) {
6371 swap_buffers_callback_->Run(); 6371 swap_buffers_callback_->Run();
6372 } 6372 }
6373 6373
6374 return error::kNoError; 6374 return error::kNoError;
6375 } 6375 }
6376 6376
6377 error::Error GLES2DecoderImpl::HandleSetLatchCHROMIUM( 6377 error::Error GLES2DecoderImpl::HandleSetLatchCHROMIUM(
6378 uint32 immediate_data_size, const gles2::SetLatchCHROMIUM& c) { 6378 uint32 immediate_data_size, const gles2::SetLatchCHROMIUM& c) {
6379 GPU_TRACE_EVENT0("gpu", "SetLatch"); 6379 TRACE_EVENT0("gpu", "SetLatch");
6380 // Ensure the side effects of previous commands are visible to other contexts. 6380 // Ensure the side effects of previous commands are visible to other contexts.
6381 // There is no need to do this for ANGLE because it uses a 6381 // There is no need to do this for ANGLE because it uses a
6382 // single D3D device for all contexts. 6382 // single D3D device for all contexts.
6383 if (!IsAngle()) 6383 if (!IsAngle())
6384 glFlush(); 6384 glFlush();
6385 6385
6386 int32 shm_id = gpu::kLatchSharedMemoryId; 6386 int32 shm_id = gpu::kLatchSharedMemoryId;
6387 uint32 latch_id = c.latch_id; 6387 uint32 latch_id = c.latch_id;
6388 uint32 shm_offset = 0; 6388 uint32 shm_offset = 0;
6389 base::subtle::Atomic32* latch; 6389 base::subtle::Atomic32* latch;
6390 if (!SafeMultiplyUint32(latch_id, sizeof(*latch), &shm_offset)) { 6390 if (!SafeMultiplyUint32(latch_id, sizeof(*latch), &shm_offset)) {
6391 return error::kOutOfBounds; 6391 return error::kOutOfBounds;
6392 } 6392 }
6393 latch = GetSharedMemoryAs<base::subtle::Atomic32*>( 6393 latch = GetSharedMemoryAs<base::subtle::Atomic32*>(
6394 shm_id, shm_offset, sizeof(*latch)); 6394 shm_id, shm_offset, sizeof(*latch));
6395 if (!latch) { 6395 if (!latch) {
6396 return error::kOutOfBounds; 6396 return error::kOutOfBounds;
6397 } 6397 }
6398 base::subtle::NoBarrier_Store(latch, 1); 6398 base::subtle::NoBarrier_Store(latch, 1);
6399 if (!latch_callback_.is_null()) 6399 if (!latch_callback_.is_null())
6400 latch_callback_.Run(true); 6400 latch_callback_.Run(true);
6401 return error::kNoError; 6401 return error::kNoError;
6402 } 6402 }
6403 6403
6404 error::Error GLES2DecoderImpl::HandleWaitLatchCHROMIUM( 6404 error::Error GLES2DecoderImpl::HandleWaitLatchCHROMIUM(
6405 uint32 immediate_data_size, const gles2::WaitLatchCHROMIUM& c) { 6405 uint32 immediate_data_size, const gles2::WaitLatchCHROMIUM& c) {
6406 GPU_TRACE_EVENT0("gpu", "WaitLatch"); 6406 TRACE_EVENT0("gpu", "WaitLatch");
6407 int32 shm_id = gpu::kLatchSharedMemoryId; 6407 int32 shm_id = gpu::kLatchSharedMemoryId;
6408 uint32 latch_id = c.latch_id; 6408 uint32 latch_id = c.latch_id;
6409 uint32 shm_offset = 0; 6409 uint32 shm_offset = 0;
6410 base::subtle::Atomic32* latch; 6410 base::subtle::Atomic32* latch;
6411 if (!SafeMultiplyUint32(latch_id, sizeof(*latch), &shm_offset)) { 6411 if (!SafeMultiplyUint32(latch_id, sizeof(*latch), &shm_offset)) {
6412 return error::kOutOfBounds; 6412 return error::kOutOfBounds;
6413 } 6413 }
6414 latch = GetSharedMemoryAs<base::subtle::Atomic32*>( 6414 latch = GetSharedMemoryAs<base::subtle::Atomic32*>(
6415 shm_id, shm_offset, sizeof(*latch)); 6415 shm_id, shm_offset, sizeof(*latch));
6416 if (!latch) { 6416 if (!latch) {
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
6508 return error::kNoError; 6508 return error::kNoError;
6509 } 6509 }
6510 6510
6511 // Include the auto-generated part of this file. We split this because it means 6511 // Include the auto-generated part of this file. We split this because it means
6512 // we can easily edit the non-auto generated parts right here in this file 6512 // we can easily edit the non-auto generated parts right here in this file
6513 // instead of having to edit some template or the code generator. 6513 // instead of having to edit some template or the code generator.
6514 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 6514 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
6515 6515
6516 } // namespace gles2 6516 } // namespace gles2
6517 } // namespace gpu 6517 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698