| OLD | NEW |
| 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 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_passthrough.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder_passthrough.h" |
| 6 | 6 |
| 7 #include "base/strings/string_number_conversions.h" | 7 #include "base/strings/string_number_conversions.h" |
| 8 | 8 |
| 9 namespace gpu { | 9 namespace gpu { |
| 10 namespace gles2 { | 10 namespace gles2 { |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 ClientServiceMap<GLuint, GLuint>* id_map, | 129 ClientServiceMap<GLuint, GLuint>* id_map, |
| 130 bool create_if_missing) { | 130 bool create_if_missing) { |
| 131 return GetServiceID(client_id, id_map, create_if_missing, []() { | 131 return GetServiceID(client_id, id_map, create_if_missing, []() { |
| 132 GLuint service_id = 0; | 132 GLuint service_id = 0; |
| 133 glGenFramebuffersEXT(1, &service_id); | 133 glGenFramebuffersEXT(1, &service_id); |
| 134 return service_id; | 134 return service_id; |
| 135 }); | 135 }); |
| 136 } | 136 } |
| 137 | 137 |
| 138 GLuint GetTransformFeedbackServiceID(GLuint client_id, | 138 GLuint GetTransformFeedbackServiceID(GLuint client_id, |
| 139 ClientServiceMap<GLuint, GLuint>* id_map) { | 139 ClientServiceMap<GLuint, GLuint>* id_map, |
| 140 return id_map->GetServiceIDOrInvalid(client_id); | 140 bool create_if_missing) { |
| 141 return GetServiceID(client_id, id_map, create_if_missing, []() { |
| 142 GLuint service_id = 0; |
| 143 glGenTransformFeedbacks(1, &service_id); |
| 144 return service_id; |
| 145 }); |
| 141 } | 146 } |
| 142 | 147 |
| 143 GLuint GetVertexArrayServiceID(GLuint client_id, | 148 GLuint GetVertexArrayServiceID(GLuint client_id, |
| 144 ClientServiceMap<GLuint, GLuint>* id_map) { | 149 ClientServiceMap<GLuint, GLuint>* id_map, |
| 145 return id_map->GetServiceIDOrInvalid(client_id); | 150 bool create_if_missing) { |
| 151 return GetServiceID(client_id, id_map, create_if_missing, []() { |
| 152 GLuint service_id = 0; |
| 153 glGenVertexArraysOES(1, &service_id); |
| 154 return service_id; |
| 155 }); |
| 146 } | 156 } |
| 147 | 157 |
| 148 GLuint GetProgramServiceID(GLuint client_id, PassthroughResources* resources) { | 158 GLuint GetProgramServiceID(GLuint client_id, PassthroughResources* resources) { |
| 149 return resources->program_id_map.GetServiceIDOrInvalid(client_id); | 159 return resources->program_id_map.GetServiceIDOrInvalid(client_id); |
| 150 } | 160 } |
| 151 | 161 |
| 152 GLuint GetShaderServiceID(GLuint client_id, PassthroughResources* resources) { | 162 GLuint GetShaderServiceID(GLuint client_id, PassthroughResources* resources) { |
| 153 return resources->shader_id_map.GetServiceIDOrInvalid(client_id); | 163 return resources->shader_id_map.GetServiceIDOrInvalid(client_id); |
| 154 } | 164 } |
| 155 | 165 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 bound_textures_[active_texture_unit_] = texture; | 283 bound_textures_[active_texture_unit_] = texture; |
| 274 } | 284 } |
| 275 return error::kNoError; | 285 return error::kNoError; |
| 276 } | 286 } |
| 277 | 287 |
| 278 error::Error GLES2DecoderPassthroughImpl::DoBindTransformFeedback( | 288 error::Error GLES2DecoderPassthroughImpl::DoBindTransformFeedback( |
| 279 GLenum target, | 289 GLenum target, |
| 280 GLuint transformfeedback) { | 290 GLuint transformfeedback) { |
| 281 glBindTransformFeedback( | 291 glBindTransformFeedback( |
| 282 target, GetTransformFeedbackServiceID(transformfeedback, | 292 target, GetTransformFeedbackServiceID(transformfeedback, |
| 283 &transform_feedback_id_map_)); | 293 &transform_feedback_id_map_, |
| 294 bind_generates_resource_)); |
| 284 return error::kNoError; | 295 return error::kNoError; |
| 285 } | 296 } |
| 286 | 297 |
| 287 error::Error GLES2DecoderPassthroughImpl::DoBlendColor(GLclampf red, | 298 error::Error GLES2DecoderPassthroughImpl::DoBlendColor(GLclampf red, |
| 288 GLclampf green, | 299 GLclampf green, |
| 289 GLclampf blue, | 300 GLclampf blue, |
| 290 GLclampf alpha) { | 301 GLclampf alpha) { |
| 291 glBlendColor(red, green, blue, alpha); | 302 glBlendColor(red, green, blue, alpha); |
| 292 return error::kNoError; | 303 return error::kNoError; |
| 293 } | 304 } |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 GLintptr offset, | 716 GLintptr offset, |
| 706 GLsizeiptr size) { | 717 GLsizeiptr size) { |
| 707 return error::kNoError; | 718 return error::kNoError; |
| 708 } | 719 } |
| 709 | 720 |
| 710 error::Error GLES2DecoderPassthroughImpl::DoFramebufferRenderbuffer( | 721 error::Error GLES2DecoderPassthroughImpl::DoFramebufferRenderbuffer( |
| 711 GLenum target, | 722 GLenum target, |
| 712 GLenum attachment, | 723 GLenum attachment, |
| 713 GLenum renderbuffertarget, | 724 GLenum renderbuffertarget, |
| 714 GLuint renderbuffer) { | 725 GLuint renderbuffer) { |
| 715 glFramebufferRenderbufferEXT( | 726 // TODO(geofflang): Handle this case in ANGLE by adding a WebGL validation |
| 716 target, attachment, renderbuffertarget, | 727 // mode. |
| 717 GetRenderbufferServiceID(renderbuffer, resources_, false)); | 728 if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { |
| 729 glFramebufferRenderbufferEXT( |
| 730 target, GL_DEPTH_ATTACHMENT, renderbuffertarget, |
| 731 GetRenderbufferServiceID(renderbuffer, resources_, false)); |
| 732 glFramebufferRenderbufferEXT( |
| 733 target, GL_STENCIL_ATTACHMENT, renderbuffertarget, |
| 734 GetRenderbufferServiceID(renderbuffer, resources_, false)); |
| 735 } else { |
| 736 glFramebufferRenderbufferEXT( |
| 737 target, attachment, renderbuffertarget, |
| 738 GetRenderbufferServiceID(renderbuffer, resources_, false)); |
| 739 } |
| 718 return error::kNoError; | 740 return error::kNoError; |
| 719 } | 741 } |
| 720 | 742 |
| 721 error::Error GLES2DecoderPassthroughImpl::DoFramebufferTexture2D( | 743 error::Error GLES2DecoderPassthroughImpl::DoFramebufferTexture2D( |
| 722 GLenum target, | 744 GLenum target, |
| 723 GLenum attachment, | 745 GLenum attachment, |
| 724 GLenum textarget, | 746 GLenum textarget, |
| 725 GLuint texture, | 747 GLuint texture, |
| 726 GLint level) { | 748 GLint level) { |
| 727 glFramebufferTexture2DEXT(target, attachment, textarget, | 749 glFramebufferTexture2DEXT(target, attachment, textarget, |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1315 error::Error GLES2DecoderPassthroughImpl::DoIsTexture(GLuint texture, | 1337 error::Error GLES2DecoderPassthroughImpl::DoIsTexture(GLuint texture, |
| 1316 uint32_t* result) { | 1338 uint32_t* result) { |
| 1317 *result = glIsTexture(GetTextureServiceID(texture, resources_, false)); | 1339 *result = glIsTexture(GetTextureServiceID(texture, resources_, false)); |
| 1318 return error::kNoError; | 1340 return error::kNoError; |
| 1319 } | 1341 } |
| 1320 | 1342 |
| 1321 error::Error GLES2DecoderPassthroughImpl::DoIsTransformFeedback( | 1343 error::Error GLES2DecoderPassthroughImpl::DoIsTransformFeedback( |
| 1322 GLuint transformfeedback, | 1344 GLuint transformfeedback, |
| 1323 uint32_t* result) { | 1345 uint32_t* result) { |
| 1324 *result = glIsTransformFeedback(GetTransformFeedbackServiceID( | 1346 *result = glIsTransformFeedback(GetTransformFeedbackServiceID( |
| 1325 transformfeedback, &transform_feedback_id_map_)); | 1347 transformfeedback, &transform_feedback_id_map_, false)); |
| 1326 return error::kNoError; | 1348 return error::kNoError; |
| 1327 } | 1349 } |
| 1328 | 1350 |
| 1329 error::Error GLES2DecoderPassthroughImpl::DoLineWidth(GLfloat width) { | 1351 error::Error GLES2DecoderPassthroughImpl::DoLineWidth(GLfloat width) { |
| 1330 glLineWidth(width); | 1352 glLineWidth(width); |
| 1331 return error::kNoError; | 1353 return error::kNoError; |
| 1332 } | 1354 } |
| 1333 | 1355 |
| 1334 error::Error GLES2DecoderPassthroughImpl::DoLinkProgram(GLuint program) { | 1356 error::Error GLES2DecoderPassthroughImpl::DoLinkProgram(GLuint program) { |
| 1335 glLinkProgram(GetProgramServiceID(program, resources_)); | 1357 glLinkProgram(GetProgramServiceID(program, resources_)); |
| (...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2180 error::Error GLES2DecoderPassthroughImpl::DoDeleteVertexArraysOES( | 2202 error::Error GLES2DecoderPassthroughImpl::DoDeleteVertexArraysOES( |
| 2181 GLsizei n, | 2203 GLsizei n, |
| 2182 const volatile GLuint* arrays) { | 2204 const volatile GLuint* arrays) { |
| 2183 return DeleteHelper( | 2205 return DeleteHelper( |
| 2184 n, arrays, &vertex_array_id_map_, | 2206 n, arrays, &vertex_array_id_map_, |
| 2185 [](GLsizei n, GLuint* arrays) { glDeleteVertexArraysOES(n, arrays); }); | 2207 [](GLsizei n, GLuint* arrays) { glDeleteVertexArraysOES(n, arrays); }); |
| 2186 } | 2208 } |
| 2187 | 2209 |
| 2188 error::Error GLES2DecoderPassthroughImpl::DoIsVertexArrayOES(GLuint array, | 2210 error::Error GLES2DecoderPassthroughImpl::DoIsVertexArrayOES(GLuint array, |
| 2189 uint32_t* result) { | 2211 uint32_t* result) { |
| 2190 *result = | 2212 *result = glIsVertexArrayOES( |
| 2191 glIsVertexArrayOES(GetVertexArrayServiceID(array, &vertex_array_id_map_)); | 2213 GetVertexArrayServiceID(array, &vertex_array_id_map_, false)); |
| 2192 return error::kNoError; | 2214 return error::kNoError; |
| 2193 } | 2215 } |
| 2194 | 2216 |
| 2195 error::Error GLES2DecoderPassthroughImpl::DoBindVertexArrayOES(GLuint array) { | 2217 error::Error GLES2DecoderPassthroughImpl::DoBindVertexArrayOES(GLuint array) { |
| 2196 glBindVertexArrayOES(GetVertexArrayServiceID(array, &vertex_array_id_map_)); | 2218 glBindVertexArrayOES(GetVertexArrayServiceID(array, &vertex_array_id_map_, |
| 2219 bind_generates_resource_)); |
| 2197 return error::kNoError; | 2220 return error::kNoError; |
| 2198 } | 2221 } |
| 2199 | 2222 |
| 2200 error::Error GLES2DecoderPassthroughImpl::DoSwapBuffers() { | 2223 error::Error GLES2DecoderPassthroughImpl::DoSwapBuffers() { |
| 2201 gfx::SwapResult result = surface_->SwapBuffers(); | 2224 gfx::SwapResult result = surface_->SwapBuffers(); |
| 2202 if (result == gfx::SwapResult::SWAP_FAILED) { | 2225 if (result == gfx::SwapResult::SWAP_FAILED) { |
| 2203 LOG(ERROR) << "Context lost because SwapBuffers failed."; | 2226 LOG(ERROR) << "Context lost because SwapBuffers failed."; |
| 2204 } | 2227 } |
| 2205 // TODO(geofflang): force the context loss? | 2228 // TODO(geofflang): force the context loss? |
| 2206 return error::kNoError; | 2229 return error::kNoError; |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3000 GLES2DecoderPassthroughImpl::DoUniformMatrix4fvStreamTextureMatrixCHROMIUM( | 3023 GLES2DecoderPassthroughImpl::DoUniformMatrix4fvStreamTextureMatrixCHROMIUM( |
| 3001 GLint location, | 3024 GLint location, |
| 3002 GLboolean transpose, | 3025 GLboolean transpose, |
| 3003 const volatile GLfloat* defaultValue) { | 3026 const volatile GLfloat* defaultValue) { |
| 3004 NOTIMPLEMENTED(); | 3027 NOTIMPLEMENTED(); |
| 3005 return error::kNoError; | 3028 return error::kNoError; |
| 3006 } | 3029 } |
| 3007 | 3030 |
| 3008 } // namespace gles2 | 3031 } // namespace gles2 |
| 3009 } // namespace gpu | 3032 } // namespace gpu |
| OLD | NEW |