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

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

Issue 787803004: Update from https://crrev.com/307664 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebase. Created 6 years 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 <stdio.h> 7 #include <stdio.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <list> 10 #include <list>
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 GLenum internal_format, 873 GLenum internal_format,
874 GLint x, 874 GLint x,
875 GLint y, 875 GLint y,
876 GLsizei width, 876 GLsizei width,
877 GLsizei height, 877 GLsizei height,
878 GLint border); 878 GLint border);
879 879
880 // Wrapper for SwapBuffers. 880 // Wrapper for SwapBuffers.
881 void DoSwapBuffers(); 881 void DoSwapBuffers();
882 882
883 // Wrapper for SwapInterval.
884 void DoSwapInterval(int interval);
885
883 // Wrapper for CopyTexSubImage2D. 886 // Wrapper for CopyTexSubImage2D.
884 void DoCopyTexSubImage2D( 887 void DoCopyTexSubImage2D(
885 GLenum target, 888 GLenum target,
886 GLint level, 889 GLint level,
887 GLint xoffset, 890 GLint xoffset,
888 GLint yoffset, 891 GLint yoffset,
889 GLint x, 892 GLint x,
890 GLint y, 893 GLint y,
891 GLsizei width, 894 GLsizei width,
892 GLsizei height); 895 GLsizei height);
(...skipping 969 matching lines...) Expand 10 before | Expand all | Expand 10 after
1862 // Command buffer stats. 1865 // Command buffer stats.
1863 base::TimeDelta total_processing_commands_time_; 1866 base::TimeDelta total_processing_commands_time_;
1864 1867
1865 // States related to each manager. 1868 // States related to each manager.
1866 DecoderTextureState texture_state_; 1869 DecoderTextureState texture_state_;
1867 DecoderFramebufferState framebuffer_state_; 1870 DecoderFramebufferState framebuffer_state_;
1868 1871
1869 scoped_ptr<GPUTracer> gpu_tracer_; 1872 scoped_ptr<GPUTracer> gpu_tracer_;
1870 scoped_ptr<GPUStateTracer> gpu_state_tracer_; 1873 scoped_ptr<GPUStateTracer> gpu_state_tracer_;
1871 const unsigned char* cb_command_trace_category_; 1874 const unsigned char* cb_command_trace_category_;
1875 const unsigned char* gpu_decoder_category_;
1876 const unsigned char* gpu_group_marker_category_;
1872 int gpu_trace_level_; 1877 int gpu_trace_level_;
1873 bool gpu_trace_commands_; 1878 bool gpu_trace_commands_;
1874 bool gpu_debug_commands_; 1879 bool gpu_debug_commands_;
1875 1880
1876 std::queue<linked_ptr<FenceCallback> > pending_readpixel_fences_; 1881 std::queue<linked_ptr<FenceCallback> > pending_readpixel_fences_;
1877 1882
1878 // Used to validate multisample renderbuffers if needed 1883 // Used to validate multisample renderbuffers if needed
1879 GLuint validation_texture_; 1884 GLuint validation_texture_;
1880 GLuint validation_fbo_multisample_; 1885 GLuint validation_fbo_multisample_;
1881 GLuint validation_fbo_; 1886 GLuint validation_fbo_;
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
2377 lose_context_when_out_of_memory_(false), 2382 lose_context_when_out_of_memory_(false),
2378 service_logging_(CommandLine::ForCurrentProcess()->HasSwitch( 2383 service_logging_(CommandLine::ForCurrentProcess()->HasSwitch(
2379 switches::kEnableGPUServiceLoggingGPU)), 2384 switches::kEnableGPUServiceLoggingGPU)),
2380 viewport_max_width_(0), 2385 viewport_max_width_(0),
2381 viewport_max_height_(0), 2386 viewport_max_height_(0),
2382 texture_state_(group_->feature_info() 2387 texture_state_(group_->feature_info()
2383 ->workarounds() 2388 ->workarounds()
2384 .texsubimage2d_faster_than_teximage2d), 2389 .texsubimage2d_faster_than_teximage2d),
2385 cb_command_trace_category_(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( 2390 cb_command_trace_category_(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(
2386 TRACE_DISABLED_BY_DEFAULT("cb_command"))), 2391 TRACE_DISABLED_BY_DEFAULT("cb_command"))),
2392 gpu_decoder_category_(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(
2393 TRACE_DISABLED_BY_DEFAULT("gpu_decoder"))),
2394 gpu_group_marker_category_(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(
2395 TRACE_DISABLED_BY_DEFAULT("gpu_group_marker"))),
2387 gpu_trace_level_(2), 2396 gpu_trace_level_(2),
2388 gpu_trace_commands_(false), 2397 gpu_trace_commands_(false),
2389 gpu_debug_commands_(false), 2398 gpu_debug_commands_(false),
2390 validation_texture_(0), 2399 validation_texture_(0),
2391 validation_fbo_multisample_(0), 2400 validation_fbo_multisample_(0),
2392 validation_fbo_(0) { 2401 validation_fbo_(0) {
2393 DCHECK(group); 2402 DCHECK(group);
2394 2403
2395 attrib_0_value_.v[0] = 0.0f; 2404 attrib_0_value_.v[0] = 0.0f;
2396 attrib_0_value_.v[1] = 0.0f; 2405 attrib_0_value_.v[1] = 0.0f;
(...skipping 1077 matching lines...) Expand 10 before | Expand all | Expand 10 after
3474 const base::Callback<void(gfx::Size, float)>& callback) { 3483 const base::Callback<void(gfx::Size, float)>& callback) {
3475 resize_callback_ = callback; 3484 resize_callback_ = callback;
3476 } 3485 }
3477 3486
3478 Logger* GLES2DecoderImpl::GetLogger() { 3487 Logger* GLES2DecoderImpl::GetLogger() {
3479 return &logger_; 3488 return &logger_;
3480 } 3489 }
3481 3490
3482 void GLES2DecoderImpl::BeginDecoding() { 3491 void GLES2DecoderImpl::BeginDecoding() {
3483 gpu_tracer_->BeginDecoding(); 3492 gpu_tracer_->BeginDecoding();
3484 gpu_trace_commands_ = gpu_tracer_->IsTracing(); 3493 gpu_trace_commands_ = gpu_tracer_->IsTracing() && *gpu_decoder_category_;
3485 gpu_debug_commands_ = log_commands() || debug() || gpu_trace_commands_ || 3494 gpu_debug_commands_ = log_commands() || debug() || gpu_trace_commands_ ||
3486 (*cb_command_trace_category_ != 0); 3495 (*cb_command_trace_category_ != 0);
3487 } 3496 }
3488 3497
3489 void GLES2DecoderImpl::EndDecoding() { 3498 void GLES2DecoderImpl::EndDecoding() {
3490 gpu_tracer_->EndDecoding(); 3499 gpu_tracer_->EndDecoding();
3491 } 3500 }
3492 3501
3493 ErrorState* GLES2DecoderImpl::GetErrorState() { 3502 ErrorState* GLES2DecoderImpl::GetErrorState() {
3494 return state_.GetErrorState(); 3503 return state_.GetErrorState();
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
3951 unsigned int command_index = command - kStartPoint - 1; 3960 unsigned int command_index = command - kStartPoint - 1;
3952 if (command_index < arraysize(command_info)) { 3961 if (command_index < arraysize(command_info)) {
3953 const CommandInfo& info = command_info[command_index]; 3962 const CommandInfo& info = command_info[command_index];
3954 unsigned int info_arg_count = static_cast<unsigned int>(info.arg_count); 3963 unsigned int info_arg_count = static_cast<unsigned int>(info.arg_count);
3955 if ((info.arg_flags == cmd::kFixed && arg_count == info_arg_count) || 3964 if ((info.arg_flags == cmd::kFixed && arg_count == info_arg_count) ||
3956 (info.arg_flags == cmd::kAtLeastN && arg_count >= info_arg_count)) { 3965 (info.arg_flags == cmd::kAtLeastN && arg_count >= info_arg_count)) {
3957 bool doing_gpu_trace = false; 3966 bool doing_gpu_trace = false;
3958 if (DebugImpl && gpu_trace_commands_) { 3967 if (DebugImpl && gpu_trace_commands_) {
3959 if (CMD_FLAG_GET_TRACE_LEVEL(info.cmd_flags) <= gpu_trace_level_) { 3968 if (CMD_FLAG_GET_TRACE_LEVEL(info.cmd_flags) <= gpu_trace_level_) {
3960 doing_gpu_trace = true; 3969 doing_gpu_trace = true;
3961 gpu_tracer_->Begin(GetCommandName(command), kTraceDecoder); 3970 gpu_tracer_->Begin(TRACE_DISABLED_BY_DEFAULT("gpu_decoder"),
3971 GetCommandName(command),
3972 kTraceDecoder);
3962 } 3973 }
3963 } 3974 }
3964 3975
3965 uint32 immediate_data_size = (arg_count - info_arg_count) * 3976 uint32 immediate_data_size = (arg_count - info_arg_count) *
3966 sizeof(CommandBufferEntry); // NOLINT 3977 sizeof(CommandBufferEntry); // NOLINT
3967 3978
3968 result = (this->*info.cmd_handler)(immediate_data_size, cmd_data); 3979 result = (this->*info.cmd_handler)(immediate_data_size, cmd_data);
3969 3980
3970 if (DebugImpl && doing_gpu_trace) 3981 if (DebugImpl && doing_gpu_trace)
3971 gpu_tracer_->End(kTraceDecoder); 3982 gpu_tracer_->End(kTraceDecoder);
(...skipping 5745 matching lines...) Expand 10 before | Expand all | Expand 10 after
9717 LOG(ERROR) << "Context lost because SwapBuffers failed."; 9728 LOG(ERROR) << "Context lost because SwapBuffers failed.";
9718 LoseContext(GL_UNKNOWN_CONTEXT_RESET_ARB); 9729 LoseContext(GL_UNKNOWN_CONTEXT_RESET_ARB);
9719 } 9730 }
9720 } 9731 }
9721 9732
9722 // This may be a slow command. Exit command processing to allow for 9733 // This may be a slow command. Exit command processing to allow for
9723 // context preemption and GPU watchdog checks. 9734 // context preemption and GPU watchdog checks.
9724 ExitCommandProcessingEarly(); 9735 ExitCommandProcessingEarly();
9725 } 9736 }
9726 9737
9738 void GLES2DecoderImpl::DoSwapInterval(int interval)
9739 {
9740 context_->SetSwapInterval(interval);
9741 }
9742
9727 error::Error GLES2DecoderImpl::HandleEnableFeatureCHROMIUM( 9743 error::Error GLES2DecoderImpl::HandleEnableFeatureCHROMIUM(
9728 uint32 immediate_data_size, 9744 uint32 immediate_data_size,
9729 const void* cmd_data) { 9745 const void* cmd_data) {
9730 const gles2::cmds::EnableFeatureCHROMIUM& c = 9746 const gles2::cmds::EnableFeatureCHROMIUM& c =
9731 *static_cast<const gles2::cmds::EnableFeatureCHROMIUM*>(cmd_data); 9747 *static_cast<const gles2::cmds::EnableFeatureCHROMIUM*>(cmd_data);
9732 Bucket* bucket = GetBucket(c.bucket_id); 9748 Bucket* bucket = GetBucket(c.bucket_id);
9733 if (!bucket || bucket->size() == 0) { 9749 if (!bucket || bucket->size() == 0) {
9734 return error::kInvalidArguments; 9750 return error::kInvalidArguments;
9735 } 9751 }
9736 typedef cmds::EnableFeatureCHROMIUM::Result Result; 9752 typedef cmds::EnableFeatureCHROMIUM::Result Result;
(...skipping 1216 matching lines...) Expand 10 before | Expand all | Expand 10 after
10953 length ? std::string(marker, length) : std::string(marker)); 10969 length ? std::string(marker, length) : std::string(marker));
10954 } 10970 }
10955 10971
10956 void GLES2DecoderImpl::DoPushGroupMarkerEXT( 10972 void GLES2DecoderImpl::DoPushGroupMarkerEXT(
10957 GLsizei length, const GLchar* marker) { 10973 GLsizei length, const GLchar* marker) {
10958 if (!marker) { 10974 if (!marker) {
10959 marker = ""; 10975 marker = "";
10960 } 10976 }
10961 std::string name = length ? std::string(marker, length) : std::string(marker); 10977 std::string name = length ? std::string(marker, length) : std::string(marker);
10962 debug_marker_manager_.PushGroup(name); 10978 debug_marker_manager_.PushGroup(name);
10963 gpu_tracer_->Begin(name, kTraceGroupMarker); 10979 if (*gpu_group_marker_category_) {
10980 gpu_tracer_->Begin(TRACE_DISABLED_BY_DEFAULT("gpu_group_marker"), name,
10981 kTraceGroupMarker);
10982 }
10964 } 10983 }
10965 10984
10966 void GLES2DecoderImpl::DoPopGroupMarkerEXT(void) { 10985 void GLES2DecoderImpl::DoPopGroupMarkerEXT(void) {
10967 debug_marker_manager_.PopGroup(); 10986 debug_marker_manager_.PopGroup();
10968 gpu_tracer_->End(kTraceGroupMarker); 10987 if (*gpu_group_marker_category_) {
10988 gpu_tracer_->End(kTraceGroupMarker);
10989 }
10969 } 10990 }
10970 10991
10971 void GLES2DecoderImpl::DoBindTexImage2DCHROMIUM( 10992 void GLES2DecoderImpl::DoBindTexImage2DCHROMIUM(
10972 GLenum target, GLint image_id) { 10993 GLenum target, GLint image_id) {
10973 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoBindTexImage2DCHROMIUM"); 10994 TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoBindTexImage2DCHROMIUM");
10974 10995
10975 if (target == GL_TEXTURE_CUBE_MAP) { 10996 if (target == GL_TEXTURE_CUBE_MAP) {
10976 LOCAL_SET_GL_ERROR( 10997 LOCAL_SET_GL_ERROR(
10977 GL_INVALID_ENUM, 10998 GL_INVALID_ENUM,
10978 "glBindTexImage2DCHROMIUM", "invalid target"); 10999 "glBindTexImage2DCHROMIUM", "invalid target");
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
11052 texture_manager()->SetLevelInfo( 11073 texture_manager()->SetLevelInfo(
11053 texture_ref, target, 0, GL_RGBA, 0, 0, 1, 0, 11074 texture_ref, target, 0, GL_RGBA, 0, 0, 1, 0,
11054 GL_RGBA, GL_UNSIGNED_BYTE, false); 11075 GL_RGBA, GL_UNSIGNED_BYTE, false);
11055 } 11076 }
11056 11077
11057 error::Error GLES2DecoderImpl::HandleTraceBeginCHROMIUM( 11078 error::Error GLES2DecoderImpl::HandleTraceBeginCHROMIUM(
11058 uint32 immediate_data_size, 11079 uint32 immediate_data_size,
11059 const void* cmd_data) { 11080 const void* cmd_data) {
11060 const gles2::cmds::TraceBeginCHROMIUM& c = 11081 const gles2::cmds::TraceBeginCHROMIUM& c =
11061 *static_cast<const gles2::cmds::TraceBeginCHROMIUM*>(cmd_data); 11082 *static_cast<const gles2::cmds::TraceBeginCHROMIUM*>(cmd_data);
11062 Bucket* bucket = GetBucket(c.bucket_id); 11083 Bucket* category_bucket = GetBucket(c.category_bucket_id);
11063 if (!bucket || bucket->size() == 0) { 11084 Bucket* name_bucket = GetBucket(c.name_bucket_id);
11085 if (!category_bucket || category_bucket->size() == 0 ||
11086 !name_bucket || name_bucket->size() == 0) {
11064 return error::kInvalidArguments; 11087 return error::kInvalidArguments;
11065 } 11088 }
11066 std::string command_name; 11089
11067 if (!bucket->GetAsString(&command_name)) { 11090 std::string category_name;
11091 std::string trace_name;
11092 if (!category_bucket->GetAsString(&category_name) ||
11093 !name_bucket->GetAsString(&trace_name)) {
11068 return error::kInvalidArguments; 11094 return error::kInvalidArguments;
11069 } 11095 }
11070 TRACE_EVENT_COPY_ASYNC_BEGIN0("gpu", command_name.c_str(), this); 11096
11071 if (!gpu_tracer_->Begin(command_name, kTraceCHROMIUM)) { 11097 TRACE_EVENT_COPY_ASYNC_BEGIN0(category_name.c_str(), trace_name.c_str(),
11098 this);
11099 if (!gpu_tracer_->Begin(category_name, trace_name, kTraceCHROMIUM)) {
11072 LOCAL_SET_GL_ERROR( 11100 LOCAL_SET_GL_ERROR(
11073 GL_INVALID_OPERATION, 11101 GL_INVALID_OPERATION,
11074 "glTraceBeginCHROMIUM", "unable to create begin trace"); 11102 "glTraceBeginCHROMIUM", "unable to create begin trace");
11075 return error::kNoError; 11103 return error::kNoError;
11076 } 11104 }
11077 return error::kNoError; 11105 return error::kNoError;
11078 } 11106 }
11079 11107
11080 void GLES2DecoderImpl::DoTraceEndCHROMIUM() { 11108 void GLES2DecoderImpl::DoTraceEndCHROMIUM() {
11081 if (gpu_tracer_->CurrentName().empty()) { 11109 if (gpu_tracer_->CurrentCategory().empty() ||
11110 gpu_tracer_->CurrentName().empty()) {
11082 LOCAL_SET_GL_ERROR( 11111 LOCAL_SET_GL_ERROR(
11083 GL_INVALID_OPERATION, 11112 GL_INVALID_OPERATION,
11084 "glTraceEndCHROMIUM", "no trace begin found"); 11113 "glTraceEndCHROMIUM", "no trace begin found");
11085 return; 11114 return;
11086 } 11115 }
11087 TRACE_EVENT_COPY_ASYNC_END0("gpu", gpu_tracer_->CurrentName().c_str(), this); 11116 TRACE_EVENT_COPY_ASYNC_END0(gpu_tracer_->CurrentCategory().c_str(),
11117 gpu_tracer_->CurrentName().c_str(), this);
11088 gpu_tracer_->End(kTraceCHROMIUM); 11118 gpu_tracer_->End(kTraceCHROMIUM);
11089 } 11119 }
11090 11120
11091 void GLES2DecoderImpl::DoDrawBuffersEXT( 11121 void GLES2DecoderImpl::DoDrawBuffersEXT(
11092 GLsizei count, const GLenum* bufs) { 11122 GLsizei count, const GLenum* bufs) {
11093 if (count > static_cast<GLsizei>(group_->max_draw_buffers())) { 11123 if (count > static_cast<GLsizei>(group_->max_draw_buffers())) {
11094 LOCAL_SET_GL_ERROR( 11124 LOCAL_SET_GL_ERROR(
11095 GL_INVALID_VALUE, 11125 GL_INVALID_VALUE,
11096 "glDrawBuffersEXT", "greater than GL_MAX_DRAW_BUFFERS_EXT"); 11126 "glDrawBuffersEXT", "greater than GL_MAX_DRAW_BUFFERS_EXT");
11097 return; 11127 return;
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
11502 } 11532 }
11503 } 11533 }
11504 11534
11505 // Include the auto-generated part of this file. We split this because it means 11535 // Include the auto-generated part of this file. We split this because it means
11506 // we can easily edit the non-auto generated parts right here in this file 11536 // we can easily edit the non-auto generated parts right here in this file
11507 // instead of having to edit some template or the code generator. 11537 // instead of having to edit some template or the code generator.
11508 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 11538 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
11509 11539
11510 } // namespace gles2 11540 } // namespace gles2
11511 } // namespace gpu 11541 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/common/gles2_cmd_ids_autogen.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698