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

Side by Side Diff: ppapi/shared_impl/ppb_graphics_3d_shared.cc

Issue 24466004: PPAPI: Make GLES2 calls resilient to bad/dead resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 7 years, 2 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
« no previous file with comments | « ppapi/shared_impl/ppb_graphics_3d_shared.h ('k') | ppapi/shared_impl/ppb_opengles2_shared.cc » ('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 "ppapi/shared_impl/ppb_graphics_3d_shared.h" 5 #include "ppapi/shared_impl/ppb_graphics_3d_shared.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "gpu/command_buffer/client/gles2_cmd_helper.h" 8 #include "gpu/command_buffer/client/gles2_cmd_helper.h"
9 #include "gpu/command_buffer/client/gles2_implementation.h" 9 #include "gpu/command_buffer/client/gles2_implementation.h"
10 #include "gpu/command_buffer/client/transfer_buffer.h" 10 #include "gpu/command_buffer/client/transfer_buffer.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 43
44 int32_t PPB_Graphics3D_Shared::GetError() { 44 int32_t PPB_Graphics3D_Shared::GetError() {
45 // TODO(alokp): Implement me. 45 // TODO(alokp): Implement me.
46 return PP_ERROR_FAILED; 46 return PP_ERROR_FAILED;
47 } 47 }
48 48
49 int32_t PPB_Graphics3D_Shared::ResizeBuffers(int32_t width, int32_t height) { 49 int32_t PPB_Graphics3D_Shared::ResizeBuffers(int32_t width, int32_t height) {
50 if ((width < 0) || (height < 0)) 50 if ((width < 0) || (height < 0))
51 return PP_ERROR_BADARGUMENT; 51 return PP_ERROR_BADARGUMENT;
52 52
53 ScopedNoLocking already_locked(this);
54 gles2_impl()->ResizeCHROMIUM(width, height, 1.f); 53 gles2_impl()->ResizeCHROMIUM(width, height, 1.f);
55 // TODO(alokp): Check if resize succeeded and return appropriate error code. 54 // TODO(alokp): Check if resize succeeded and return appropriate error code.
56 return PP_OK; 55 return PP_OK;
57 } 56 }
58 57
59 int32_t PPB_Graphics3D_Shared::SwapBuffers( 58 int32_t PPB_Graphics3D_Shared::SwapBuffers(
60 scoped_refptr<TrackedCallback> callback) { 59 scoped_refptr<TrackedCallback> callback) {
61 ScopedNoLocking already_locked(this);
62 if (HasPendingSwap()) { 60 if (HasPendingSwap()) {
63 Log(PP_LOGLEVEL_ERROR, "PPB_Graphics3D.SwapBuffers: Plugin attempted swap " 61 Log(PP_LOGLEVEL_ERROR, "PPB_Graphics3D.SwapBuffers: Plugin attempted swap "
64 "with previous swap still pending."); 62 "with previous swap still pending.");
65 // Already a pending SwapBuffers that hasn't returned yet. 63 // Already a pending SwapBuffers that hasn't returned yet.
66 return PP_ERROR_INPROGRESS; 64 return PP_ERROR_INPROGRESS;
67 } 65 }
68 66
69 swap_callback_ = callback; 67 swap_callback_ = callback;
70 return DoSwapBuffers(); 68 return DoSwapBuffers();
71 } 69 }
72 70
73 int32_t PPB_Graphics3D_Shared::GetAttribMaxValue(int32_t attribute, 71 int32_t PPB_Graphics3D_Shared::GetAttribMaxValue(int32_t attribute,
74 int32_t* value) { 72 int32_t* value) {
75 // TODO(alokp): Implement me. 73 // TODO(alokp): Implement me.
76 return PP_ERROR_FAILED; 74 return PP_ERROR_FAILED;
77 } 75 }
78 76
79 void* PPB_Graphics3D_Shared::MapTexSubImage2DCHROMIUM(GLenum target, 77 void* PPB_Graphics3D_Shared::MapTexSubImage2DCHROMIUM(GLenum target,
80 GLint level, 78 GLint level,
81 GLint xoffset, 79 GLint xoffset,
82 GLint yoffset, 80 GLint yoffset,
83 GLsizei width, 81 GLsizei width,
84 GLsizei height, 82 GLsizei height,
85 GLenum format, 83 GLenum format,
86 GLenum type, 84 GLenum type,
87 GLenum access) { 85 GLenum access) {
88 ScopedNoLocking already_locked(this);
89 return gles2_impl_->MapTexSubImage2DCHROMIUM( 86 return gles2_impl_->MapTexSubImage2DCHROMIUM(
90 target, level, xoffset, yoffset, width, height, format, type, access); 87 target, level, xoffset, yoffset, width, height, format, type, access);
91 } 88 }
92 89
93 void PPB_Graphics3D_Shared::UnmapTexSubImage2DCHROMIUM(const void* mem) { 90 void PPB_Graphics3D_Shared::UnmapTexSubImage2DCHROMIUM(const void* mem) {
94 ScopedNoLocking already_locked(this);
95 gles2_impl_->UnmapTexSubImage2DCHROMIUM(mem); 91 gles2_impl_->UnmapTexSubImage2DCHROMIUM(mem);
96 } 92 }
97 93
98 void PPB_Graphics3D_Shared::SwapBuffersACK(int32_t pp_error) { 94 void PPB_Graphics3D_Shared::SwapBuffersACK(int32_t pp_error) {
99 DCHECK(HasPendingSwap()); 95 DCHECK(HasPendingSwap());
100 swap_callback_->Run(pp_error); 96 swap_callback_->Run(pp_error);
101 } 97 }
102 98
103 bool PPB_Graphics3D_Shared::HasPendingSwap() const { 99 bool PPB_Graphics3D_Shared::HasPendingSwap() const {
104 return TrackedCallback::IsPending(swap_callback_); 100 return TrackedCallback::IsPending(swap_callback_);
105 } 101 }
106 102
107 bool PPB_Graphics3D_Shared::CreateGLES2Impl( 103 bool PPB_Graphics3D_Shared::CreateGLES2Impl(
108 int32 command_buffer_size, 104 int32 command_buffer_size,
109 int32 transfer_buffer_size, 105 int32 transfer_buffer_size,
110 gpu::gles2::GLES2Implementation* share_gles2) { 106 gpu::gles2::GLES2Implementation* share_gles2) {
111 ScopedNoLocking already_locked(this);
112 gpu::CommandBuffer* command_buffer = GetCommandBuffer(); 107 gpu::CommandBuffer* command_buffer = GetCommandBuffer();
113 DCHECK(command_buffer); 108 DCHECK(command_buffer);
114 109
115 // Create the GLES2 helper, which writes the command buffer protocol. 110 // Create the GLES2 helper, which writes the command buffer protocol.
116 gles2_helper_.reset(new gpu::gles2::GLES2CmdHelper(command_buffer)); 111 gles2_helper_.reset(new gpu::gles2::GLES2CmdHelper(command_buffer));
117 if (!gles2_helper_->Initialize(command_buffer_size)) 112 if (!gles2_helper_->Initialize(command_buffer_size))
118 return false; 113 return false;
119 114
120 // Create a transfer buffer used to copy resources between the renderer 115 // Create a transfer buffer used to copy resources between the renderer
121 // process and the GPU process. 116 // process and the GPU process.
(...skipping 16 matching lines...) Expand all
138 gpu::gles2::GLES2Implementation::kNoLimit)) { 133 gpu::gles2::GLES2Implementation::kNoLimit)) {
139 return false; 134 return false;
140 } 135 }
141 136
142 gles2_impl_->PushGroupMarkerEXT(0, "PPAPIContext"); 137 gles2_impl_->PushGroupMarkerEXT(0, "PPAPIContext");
143 138
144 return true; 139 return true;
145 } 140 }
146 141
147 void PPB_Graphics3D_Shared::DestroyGLES2Impl() { 142 void PPB_Graphics3D_Shared::DestroyGLES2Impl() {
148 ScopedNoLocking already_locked(this);
149 gles2_impl_.reset(); 143 gles2_impl_.reset();
150 transfer_buffer_.reset(); 144 transfer_buffer_.reset();
151 gles2_helper_.reset(); 145 gles2_helper_.reset();
152 } 146 }
153 147
154 void PPB_Graphics3D_Shared::PushAlreadyLocked() {
155 // Do nothing. This should be overridden in the plugin side.
156 }
157
158 void PPB_Graphics3D_Shared::PopAlreadyLocked() {
159 // Do nothing. This should be overridden in the plugin side.
160 }
161
162 } // namespace ppapi 148 } // namespace ppapi
163 149
OLDNEW
« no previous file with comments | « ppapi/shared_impl/ppb_graphics_3d_shared.h ('k') | ppapi/shared_impl/ppb_opengles2_shared.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698