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

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

Issue 689633003: Improve context loss error handling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Removed command buffer autogenerated files update and addressed comments Created 6 years, 1 month 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
« no previous file with comments | « gpu/command_buffer/service/error_state.cc ('k') | ui/gl/generate_bindings.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 bool BoundFramebufferHasColorAttachmentWithAlpha(bool all_draw_buffers); 675 bool BoundFramebufferHasColorAttachmentWithAlpha(bool all_draw_buffers);
676 bool BoundFramebufferHasDepthAttachment(); 676 bool BoundFramebufferHasDepthAttachment();
677 bool BoundFramebufferHasStencilAttachment(); 677 bool BoundFramebufferHasStencilAttachment();
678 678
679 error::ContextLostReason GetContextLostReason() override; 679 error::ContextLostReason GetContextLostReason() override;
680 680
681 // Overridden from FramebufferManager::TextureDetachObserver: 681 // Overridden from FramebufferManager::TextureDetachObserver:
682 void OnTextureRefDetachedFromFramebuffer(TextureRef* texture) override; 682 void OnTextureRefDetachedFromFramebuffer(TextureRef* texture) override;
683 683
684 // Overriden from ErrorStateClient. 684 // Overriden from ErrorStateClient.
685 void OnContextLostError() override;
685 void OnOutOfMemoryError() override; 686 void OnOutOfMemoryError() override;
686 687
687 // Ensure Renderbuffer corresponding to last DoBindRenderbuffer() is bound. 688 // Ensure Renderbuffer corresponding to last DoBindRenderbuffer() is bound.
688 void EnsureRenderbufferBound(); 689 void EnsureRenderbufferBound();
689 690
690 // Helpers to facilitate calling into compatible extensions. 691 // Helpers to facilitate calling into compatible extensions.
691 static void RenderbufferStorageMultisampleHelper( 692 static void RenderbufferStorageMultisampleHelper(
692 const FeatureInfo* feature_info, 693 const FeatureInfo* feature_info,
693 GLenum target, 694 GLenum target,
694 GLsizei samples, 695 GLsizei samples,
(...skipping 1940 matching lines...) Expand 10 before | Expand all | Expand 10 after
2635 // mailing list archives. It also implicitly enables the desktop GL 2636 // mailing list archives. It also implicitly enables the desktop GL
2636 // capability GL_POINT_SPRITE to provide access to the gl_PointCoord 2637 // capability GL_POINT_SPRITE to provide access to the gl_PointCoord
2637 // variable in fragment shaders. 2638 // variable in fragment shaders.
2638 if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { 2639 if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) {
2639 glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); 2640 glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
2640 glEnable(GL_POINT_SPRITE); 2641 glEnable(GL_POINT_SPRITE);
2641 } 2642 }
2642 2643
2643 has_robustness_extension_ = 2644 has_robustness_extension_ =
2644 context->HasExtension("GL_ARB_robustness") || 2645 context->HasExtension("GL_ARB_robustness") ||
2646 context->HasExtension("GL_KHR_robustness") ||
2645 context->HasExtension("GL_EXT_robustness"); 2647 context->HasExtension("GL_EXT_robustness");
2646 2648
2647 if (!InitializeShaderTranslator()) { 2649 if (!InitializeShaderTranslator()) {
2648 return false; 2650 return false;
2649 } 2651 }
2650 2652
2651 state_.viewport_width = size.width(); 2653 state_.viewport_width = size.width();
2652 state_.viewport_height = size.height(); 2654 state_.viewport_height = size.height();
2653 2655
2654 GLint viewport_params[4] = { 0 }; 2656 GLint viewport_params[4] = { 0 };
(...skipping 7072 matching lines...) Expand 10 before | Expand all | Expand 10 after
9727 bool GLES2DecoderImpl::WasContextLostByRobustnessExtension() { 9729 bool GLES2DecoderImpl::WasContextLostByRobustnessExtension() {
9728 return WasContextLost() && reset_by_robustness_extension_; 9730 return WasContextLost() && reset_by_robustness_extension_;
9729 } 9731 }
9730 9732
9731 void GLES2DecoderImpl::LoseContext(uint32 reset_status) { 9733 void GLES2DecoderImpl::LoseContext(uint32 reset_status) {
9732 // Only loses the context once. 9734 // Only loses the context once.
9733 if (reset_status_ != GL_NO_ERROR) { 9735 if (reset_status_ != GL_NO_ERROR) {
9734 return; 9736 return;
9735 } 9737 }
9736 9738
9739 if (workarounds().use_virtualized_gl_contexts) {
9740 // If the context is virtual, the real context being guilty does not ensure
9741 // that the virtual context is guilty.
9742 if (reset_status == GL_GUILTY_CONTEXT_RESET_ARB) {
9743 reset_status = GL_UNKNOWN_CONTEXT_RESET_ARB;
9744 }
9745 } else if (reset_status == GL_UNKNOWN_CONTEXT_RESET_ARB &&
9746 has_robustness_extension_) {
9747 // If the reason for the call was a GL error, we can try to determine the
9748 // reset status more accurately.
9749 GLenum driver_status = glGetGraphicsResetStatusARB();
9750 if (driver_status == GL_GUILTY_CONTEXT_RESET_ARB ||
9751 driver_status == GL_INNOCENT_CONTEXT_RESET_ARB) {
9752 reset_status = driver_status;
9753 }
9754 }
9755
9737 // Marks this context as lost. 9756 // Marks this context as lost.
9738 reset_status_ = reset_status; 9757 reset_status_ = reset_status;
9739 current_decoder_error_ = error::kLostContext; 9758 current_decoder_error_ = error::kLostContext;
9740 } 9759 }
9741 9760
9742 error::Error GLES2DecoderImpl::HandleInsertSyncPointCHROMIUM( 9761 error::Error GLES2DecoderImpl::HandleInsertSyncPointCHROMIUM(
9743 uint32 immediate_data_size, 9762 uint32 immediate_data_size,
9744 const void* cmd_data) { 9763 const void* cmd_data) {
9745 return error::kUnknownCommand; 9764 return error::kUnknownCommand;
9746 } 9765 }
(...skipping 1471 matching lines...) Expand 10 before | Expand all | Expand 10 after
11218 ProcessFinishedAsyncTransfers(); 11237 ProcessFinishedAsyncTransfers();
11219 return error::kNoError; 11238 return error::kNoError;
11220 } 11239 }
11221 11240
11222 void GLES2DecoderImpl::OnTextureRefDetachedFromFramebuffer( 11241 void GLES2DecoderImpl::OnTextureRefDetachedFromFramebuffer(
11223 TextureRef* texture_ref) { 11242 TextureRef* texture_ref) {
11224 Texture* texture = texture_ref->texture(); 11243 Texture* texture = texture_ref->texture();
11225 DoDidUseTexImageIfNeeded(texture, texture->target()); 11244 DoDidUseTexImageIfNeeded(texture, texture->target());
11226 } 11245 }
11227 11246
11247 void GLES2DecoderImpl::OnContextLostError() {
11248 group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB);
11249 }
11250
11228 void GLES2DecoderImpl::OnOutOfMemoryError() { 11251 void GLES2DecoderImpl::OnOutOfMemoryError() {
11229 if (lose_context_when_out_of_memory_) { 11252 if (lose_context_when_out_of_memory_) {
11230 group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB); 11253 group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB);
11231 LoseContext(GL_GUILTY_CONTEXT_RESET_ARB);
11232 } 11254 }
11233 } 11255 }
11234 11256
11235 // Include the auto-generated part of this file. We split this because it means 11257 // Include the auto-generated part of this file. We split this because it means
11236 // we can easily edit the non-auto generated parts right here in this file 11258 // we can easily edit the non-auto generated parts right here in this file
11237 // instead of having to edit some template or the code generator. 11259 // instead of having to edit some template or the code generator.
11238 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 11260 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
11239 11261
11240 } // namespace gles2 11262 } // namespace gles2
11241 } // namespace gpu 11263 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/error_state.cc ('k') | ui/gl/generate_bindings.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698