Chromium Code Reviews| 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 { |
| 11 | 11 |
| 12 namespace { | |
| 13 | |
| 14 template <typename ClientType, typename ServiceType, typename GenFunction> | |
| 15 error::Error GenHelper(GLsizei n, | |
| 16 const volatile ClientType* client_ids, | |
| 17 ClientServiceMap<ClientType, ServiceType>* id_map, | |
| 18 GenFunction gen_function) { | |
| 19 std::vector<ServiceType> service_ids(n, 0); | |
| 20 gen_function(n, service_ids.data()); | |
| 21 for (GLsizei ii = 0; ii < n; ++ii) { | |
| 22 ClientType client_id = client_ids[ii]; | |
| 23 if (id_map->GetServiceID(client_ids[ii], nullptr)) { | |
| 24 return error::kInvalidArguments; | |
| 25 } | |
| 26 id_map->SetIDMapping(client_id, service_ids[ii]); | |
| 27 } | |
| 28 | |
| 29 return error::kNoError; | |
| 30 } | |
| 31 | |
| 32 template <typename ClientType, typename ServiceType, typename GenFunction> | |
| 33 error::Error CreateHelper(ClientType client_id, | |
| 34 ClientServiceMap<ClientType, ServiceType>* id_map, | |
| 35 GenFunction create_function) { | |
| 36 if (id_map->GetServiceID(client_id, nullptr)) { | |
| 37 return error::kInvalidArguments; | |
| 38 } | |
| 39 ServiceType service_id = create_function(); | |
| 40 id_map->SetIDMapping(client_id, service_id); | |
| 41 return error::kNoError; | |
| 42 } | |
| 43 | |
| 44 template <typename ClientType, typename ServiceType, typename DeleteFunction> | |
| 45 error::Error DeleteHelper(GLsizei n, | |
| 46 const volatile ClientType* client_ids, | |
| 47 ClientServiceMap<ClientType, ServiceType>* id_map, | |
| 48 DeleteFunction delete_function) { | |
| 49 std::vector<ServiceType> service_ids(n, 0); | |
| 50 for (GLsizei ii = 0; ii < n; ++ii) { | |
| 51 ClientType client_id = client_ids[ii]; | |
| 52 service_ids[ii] = id_map->GetServiceIDOrReserve(client_id); | |
| 53 id_map->RemoveClientID(client_id); | |
| 54 } | |
| 55 | |
| 56 delete_function(n, service_ids.data()); | |
| 57 | |
| 58 return error::kNoError; | |
| 59 } | |
| 60 | |
| 61 template <typename ClientType, typename ServiceType, typename DeleteFunction> | |
| 62 error::Error DeleteHelper(ClientType client_id, | |
| 63 ClientServiceMap<ClientType, ServiceType>* id_map, | |
| 64 DeleteFunction delete_function) { | |
| 65 delete_function(id_map->GetServiceIDOrReserve(client_id)); | |
| 66 id_map->RemoveClientID(client_id); | |
| 67 return error::kNoError; | |
| 68 } | |
| 69 | |
| 70 } // anonymous namespace | |
| 71 | |
| 12 // Implementations of commands | 72 // Implementations of commands |
| 13 error::Error GLES2DecoderPassthroughImpl::DoActiveTexture(GLenum texture) { | 73 error::Error GLES2DecoderPassthroughImpl::DoActiveTexture(GLenum texture) { |
| 74 glActiveTexture(texture); | |
| 75 active_texture_unit_ = static_cast<size_t>(texture) - GL_TEXTURE0; | |
| 14 return error::kNoError; | 76 return error::kNoError; |
| 15 } | 77 } |
| 16 | 78 |
| 17 error::Error GLES2DecoderPassthroughImpl::DoAttachShader(GLuint program, | 79 error::Error GLES2DecoderPassthroughImpl::DoAttachShader(GLuint program, |
| 18 GLuint shader) { | 80 GLuint shader) { |
| 81 glAttachShader(resources_->program_id_map.GetServiceIDOrReserve(program), | |
| 82 resources_->shader_id_map.GetServiceIDOrReserve(shader)); | |
| 19 return error::kNoError; | 83 return error::kNoError; |
| 20 } | 84 } |
| 21 | 85 |
| 22 error::Error GLES2DecoderPassthroughImpl::DoBindAttribLocation( | 86 error::Error GLES2DecoderPassthroughImpl::DoBindAttribLocation( |
| 23 GLuint program, | 87 GLuint program, |
| 24 GLuint index, | 88 GLuint index, |
| 25 const char* name) { | 89 const char* name) { |
| 90 glBindAttribLocation( | |
| 91 resources_->program_id_map.GetServiceIDOrReserve(program), index, name); | |
| 26 return error::kNoError; | 92 return error::kNoError; |
| 27 } | 93 } |
| 28 | 94 |
| 29 error::Error GLES2DecoderPassthroughImpl::DoBindBuffer(GLenum target, | 95 error::Error GLES2DecoderPassthroughImpl::DoBindBuffer(GLenum target, |
| 30 GLuint buffer) { | 96 GLuint buffer) { |
| 97 glBindBuffer(target, resources_->buffer_id_map.GetServiceIDOrReserve(buffer)); | |
| 31 return error::kNoError; | 98 return error::kNoError; |
| 32 } | 99 } |
| 33 | 100 |
| 34 error::Error GLES2DecoderPassthroughImpl::DoBindBufferBase(GLenum target, | 101 error::Error GLES2DecoderPassthroughImpl::DoBindBufferBase(GLenum target, |
| 35 GLuint index, | 102 GLuint index, |
| 36 GLuint buffer) { | 103 GLuint buffer) { |
| 104 glBindBufferBase(target, index, | |
| 105 resources_->buffer_id_map.GetServiceIDOrReserve(buffer)); | |
| 37 return error::kNoError; | 106 return error::kNoError; |
| 38 } | 107 } |
| 39 | 108 |
| 40 error::Error GLES2DecoderPassthroughImpl::DoBindBufferRange(GLenum target, | 109 error::Error GLES2DecoderPassthroughImpl::DoBindBufferRange(GLenum target, |
| 41 GLuint index, | 110 GLuint index, |
| 42 GLuint buffer, | 111 GLuint buffer, |
| 43 GLintptr offset, | 112 GLintptr offset, |
| 44 GLsizeiptr size) { | 113 GLsizeiptr size) { |
| 114 glBindBufferRange(target, index, | |
| 115 resources_->buffer_id_map.GetServiceIDOrReserve(buffer), | |
| 116 offset, size); | |
| 45 return error::kNoError; | 117 return error::kNoError; |
| 46 } | 118 } |
| 47 | 119 |
| 48 error::Error GLES2DecoderPassthroughImpl::DoBindFramebuffer( | 120 error::Error GLES2DecoderPassthroughImpl::DoBindFramebuffer( |
| 49 GLenum target, | 121 GLenum target, |
| 50 GLuint framebuffer) { | 122 GLuint framebuffer) { |
| 123 glBindFramebufferEXT(target, | |
| 124 framebuffer_id_map_.GetServiceIDOrReserve(framebuffer)); | |
| 51 return error::kNoError; | 125 return error::kNoError; |
| 52 } | 126 } |
| 53 | 127 |
| 54 error::Error GLES2DecoderPassthroughImpl::DoBindRenderbuffer( | 128 error::Error GLES2DecoderPassthroughImpl::DoBindRenderbuffer( |
| 55 GLenum target, | 129 GLenum target, |
| 56 GLuint renderbuffer) { | 130 GLuint renderbuffer) { |
| 131 glBindRenderbufferEXT( | |
| 132 target, | |
| 133 resources_->renderbuffer_id_map.GetServiceIDOrReserve(renderbuffer)); | |
| 57 return error::kNoError; | 134 return error::kNoError; |
| 58 } | 135 } |
| 59 | 136 |
| 60 error::Error GLES2DecoderPassthroughImpl::DoBindSampler(GLuint unit, | 137 error::Error GLES2DecoderPassthroughImpl::DoBindSampler(GLuint unit, |
| 61 GLuint sampler) { | 138 GLuint sampler) { |
| 139 glBindSampler(unit, | |
| 140 resources_->sampler_id_map.GetServiceIDOrReserve(sampler)); | |
| 62 return error::kNoError; | 141 return error::kNoError; |
| 63 } | 142 } |
| 64 | 143 |
| 65 error::Error GLES2DecoderPassthroughImpl::DoBindTexture(GLenum target, | 144 error::Error GLES2DecoderPassthroughImpl::DoBindTexture(GLenum target, |
| 66 GLuint texture) { | 145 GLuint texture) { |
| 146 glBindTexture(target, | |
| 147 resources_->texture_id_map.GetServiceIDOrReserve(texture)); | |
| 148 if (target == GL_TEXTURE_2D && | |
| 149 active_texture_unit_ < bound_textures_.size()) { | |
| 150 bound_textures_[active_texture_unit_] = texture; | |
| 151 } | |
| 67 return error::kNoError; | 152 return error::kNoError; |
| 68 } | 153 } |
| 69 | 154 |
| 70 error::Error GLES2DecoderPassthroughImpl::DoBindTransformFeedback( | 155 error::Error GLES2DecoderPassthroughImpl::DoBindTransformFeedback( |
| 71 GLenum target, | 156 GLenum target, |
| 72 GLuint transformfeedback) { | 157 GLuint transformfeedback) { |
| 158 glBindTransformFeedback( | |
| 159 target, | |
| 160 transform_feedback_id_map_.GetServiceIDOrReserve(transformfeedback)); | |
| 73 return error::kNoError; | 161 return error::kNoError; |
| 74 } | 162 } |
| 75 | 163 |
| 76 error::Error GLES2DecoderPassthroughImpl::DoBlendColor(GLclampf red, | 164 error::Error GLES2DecoderPassthroughImpl::DoBlendColor(GLclampf red, |
| 77 GLclampf green, | 165 GLclampf green, |
| 78 GLclampf blue, | 166 GLclampf blue, |
| 79 GLclampf alpha) { | 167 GLclampf alpha) { |
| 168 glBlendColor(red, green, blue, alpha); | |
| 80 return error::kNoError; | 169 return error::kNoError; |
| 81 } | 170 } |
| 82 | 171 |
| 83 error::Error GLES2DecoderPassthroughImpl::DoBlendEquation(GLenum mode) { | 172 error::Error GLES2DecoderPassthroughImpl::DoBlendEquation(GLenum mode) { |
| 173 glBlendEquation(mode); | |
| 84 return error::kNoError; | 174 return error::kNoError; |
| 85 } | 175 } |
| 86 | 176 |
| 87 error::Error GLES2DecoderPassthroughImpl::DoBlendEquationSeparate( | 177 error::Error GLES2DecoderPassthroughImpl::DoBlendEquationSeparate( |
| 88 GLenum modeRGB, | 178 GLenum modeRGB, |
| 89 GLenum modeAlpha) { | 179 GLenum modeAlpha) { |
| 180 glBlendEquationSeparate(modeRGB, modeAlpha); | |
| 90 return error::kNoError; | 181 return error::kNoError; |
| 91 } | 182 } |
| 92 | 183 |
| 93 error::Error GLES2DecoderPassthroughImpl::DoBlendFunc(GLenum sfactor, | 184 error::Error GLES2DecoderPassthroughImpl::DoBlendFunc(GLenum sfactor, |
| 94 GLenum dfactor) { | 185 GLenum dfactor) { |
| 186 glBlendFunc(sfactor, dfactor); | |
| 95 return error::kNoError; | 187 return error::kNoError; |
| 96 } | 188 } |
| 97 | 189 |
| 98 error::Error GLES2DecoderPassthroughImpl::DoBlendFuncSeparate(GLenum srcRGB, | 190 error::Error GLES2DecoderPassthroughImpl::DoBlendFuncSeparate(GLenum srcRGB, |
| 99 GLenum dstRGB, | 191 GLenum dstRGB, |
| 100 GLenum srcAlpha, | 192 GLenum srcAlpha, |
| 101 GLenum dstAlpha) { | 193 GLenum dstAlpha) { |
| 194 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); | |
| 102 return error::kNoError; | 195 return error::kNoError; |
| 103 } | 196 } |
| 104 | 197 |
| 105 error::Error GLES2DecoderPassthroughImpl::DoBufferData(GLenum target, | 198 error::Error GLES2DecoderPassthroughImpl::DoBufferData(GLenum target, |
| 106 GLsizeiptr size, | 199 GLsizeiptr size, |
| 107 const void* data, | 200 const void* data, |
| 108 GLenum usage) { | 201 GLenum usage) { |
| 202 glBufferData(target, size, data, usage); | |
| 109 return error::kNoError; | 203 return error::kNoError; |
| 110 } | 204 } |
| 111 | 205 |
| 112 error::Error GLES2DecoderPassthroughImpl::DoBufferSubData(GLenum target, | 206 error::Error GLES2DecoderPassthroughImpl::DoBufferSubData(GLenum target, |
| 113 GLintptr offset, | 207 GLintptr offset, |
| 114 GLsizeiptr size, | 208 GLsizeiptr size, |
| 115 const void* data) { | 209 const void* data) { |
| 210 glBufferSubData(target, offset, size, data); | |
| 116 return error::kNoError; | 211 return error::kNoError; |
| 117 } | 212 } |
| 118 | 213 |
| 119 error::Error GLES2DecoderPassthroughImpl::DoCheckFramebufferStatus( | 214 error::Error GLES2DecoderPassthroughImpl::DoCheckFramebufferStatus( |
| 120 GLenum target, | 215 GLenum target, |
| 121 uint32_t* result) { | 216 uint32_t* result) { |
| 217 *result = glCheckFramebufferStatusEXT(target); | |
| 122 return error::kNoError; | 218 return error::kNoError; |
| 123 } | 219 } |
| 124 | 220 |
| 125 error::Error GLES2DecoderPassthroughImpl::DoClear(GLbitfield mask) { | 221 error::Error GLES2DecoderPassthroughImpl::DoClear(GLbitfield mask) { |
| 222 glClear(mask); | |
| 126 return error::kNoError; | 223 return error::kNoError; |
| 127 } | 224 } |
| 128 | 225 |
| 129 error::Error GLES2DecoderPassthroughImpl::DoClearBufferfi(GLenum buffer, | 226 error::Error GLES2DecoderPassthroughImpl::DoClearBufferfi(GLenum buffer, |
| 130 GLint drawbuffers, | 227 GLint drawbuffers, |
| 131 GLfloat depth, | 228 GLfloat depth, |
| 132 GLint stencil) { | 229 GLint stencil) { |
| 230 glClearBufferfi(buffer, drawbuffers, depth, stencil); | |
| 133 return error::kNoError; | 231 return error::kNoError; |
| 134 } | 232 } |
| 135 | 233 |
| 136 error::Error GLES2DecoderPassthroughImpl::DoClearBufferfv( | 234 error::Error GLES2DecoderPassthroughImpl::DoClearBufferfv( |
| 137 GLenum buffer, | 235 GLenum buffer, |
| 138 GLint drawbuffers, | 236 GLint drawbuffers, |
| 139 const volatile GLfloat* value) { | 237 const volatile GLfloat* value) { |
| 238 glClearBufferfv(buffer, drawbuffers, const_cast<const GLfloat*>(value)); | |
| 140 return error::kNoError; | 239 return error::kNoError; |
| 141 } | 240 } |
| 142 | 241 |
| 143 error::Error GLES2DecoderPassthroughImpl::DoClearBufferiv( | 242 error::Error GLES2DecoderPassthroughImpl::DoClearBufferiv( |
| 144 GLenum buffer, | 243 GLenum buffer, |
| 145 GLint drawbuffers, | 244 GLint drawbuffers, |
| 146 const volatile GLint* value) { | 245 const volatile GLint* value) { |
| 246 glClearBufferiv(buffer, drawbuffers, const_cast<const GLint*>(value)); | |
| 147 return error::kNoError; | 247 return error::kNoError; |
| 148 } | 248 } |
| 149 | 249 |
| 150 error::Error GLES2DecoderPassthroughImpl::DoClearBufferuiv( | 250 error::Error GLES2DecoderPassthroughImpl::DoClearBufferuiv( |
| 151 GLenum buffer, | 251 GLenum buffer, |
| 152 GLint drawbuffers, | 252 GLint drawbuffers, |
| 153 const volatile GLuint* value) { | 253 const volatile GLuint* value) { |
| 254 glClearBufferuiv(buffer, drawbuffers, const_cast<const GLuint*>(value)); | |
| 154 return error::kNoError; | 255 return error::kNoError; |
| 155 } | 256 } |
| 156 | 257 |
| 157 error::Error GLES2DecoderPassthroughImpl::DoClearColor(GLclampf red, | 258 error::Error GLES2DecoderPassthroughImpl::DoClearColor(GLclampf red, |
| 158 GLclampf green, | 259 GLclampf green, |
| 159 GLclampf blue, | 260 GLclampf blue, |
| 160 GLclampf alpha) { | 261 GLclampf alpha) { |
| 262 glClearColor(red, green, blue, alpha); | |
| 161 return error::kNoError; | 263 return error::kNoError; |
| 162 } | 264 } |
| 163 | 265 |
| 164 error::Error GLES2DecoderPassthroughImpl::DoClearDepthf(GLclampf depth) { | 266 error::Error GLES2DecoderPassthroughImpl::DoClearDepthf(GLclampf depth) { |
| 267 glClearDepthf(depth); | |
| 165 return error::kNoError; | 268 return error::kNoError; |
| 166 } | 269 } |
| 167 | 270 |
| 168 error::Error GLES2DecoderPassthroughImpl::DoClearStencil(GLint s) { | 271 error::Error GLES2DecoderPassthroughImpl::DoClearStencil(GLint s) { |
| 272 glClearStencil(s); | |
| 169 return error::kNoError; | 273 return error::kNoError; |
| 170 } | 274 } |
| 171 | 275 |
| 172 error::Error GLES2DecoderPassthroughImpl::DoClientWaitSync(GLuint sync, | 276 error::Error GLES2DecoderPassthroughImpl::DoClientWaitSync(GLuint sync, |
| 173 GLbitfield flags, | 277 GLbitfield flags, |
| 174 GLuint64 timeout, | 278 GLuint64 timeout, |
| 175 GLenum* result) { | 279 GLenum* result) { |
| 280 DCHECK(false) << "UNIMPLEMENTED"; | |
|
Zhenyao Mo
2016/09/09 21:22:11
Use NOTIMPLEMENTED() instead. here and all other p
Geoff Lang
2016/09/12 14:21:29
Done.
| |
| 176 return error::kNoError; | 281 return error::kNoError; |
| 177 } | 282 } |
| 178 | 283 |
| 179 error::Error GLES2DecoderPassthroughImpl::DoColorMask(GLboolean red, | 284 error::Error GLES2DecoderPassthroughImpl::DoColorMask(GLboolean red, |
| 180 GLboolean green, | 285 GLboolean green, |
| 181 GLboolean blue, | 286 GLboolean blue, |
| 182 GLboolean alpha) { | 287 GLboolean alpha) { |
| 288 glColorMask(red, green, blue, alpha); | |
| 183 return error::kNoError; | 289 return error::kNoError; |
| 184 } | 290 } |
| 185 | 291 |
| 186 error::Error GLES2DecoderPassthroughImpl::DoCompileShader(GLuint shader) { | 292 error::Error GLES2DecoderPassthroughImpl::DoCompileShader(GLuint shader) { |
| 293 glCompileShader(resources_->shader_id_map.GetServiceIDOrReserve(shader)); | |
| 187 return error::kNoError; | 294 return error::kNoError; |
| 188 } | 295 } |
| 189 | 296 |
| 190 error::Error GLES2DecoderPassthroughImpl::DoCompressedTexImage2D( | 297 error::Error GLES2DecoderPassthroughImpl::DoCompressedTexImage2D( |
| 191 GLenum target, | 298 GLenum target, |
| 192 GLint level, | 299 GLint level, |
| 193 GLenum internalformat, | 300 GLenum internalformat, |
| 194 GLsizei width, | 301 GLsizei width, |
| 195 GLsizei height, | 302 GLsizei height, |
| 196 GLint border, | 303 GLint border, |
| 197 GLsizei imageSize, | 304 GLsizei imageSize, |
| 198 const void* data) { | 305 const void* data) { |
| 306 DCHECK(false) << "UNIMPLEMENTED"; | |
| 199 return error::kNoError; | 307 return error::kNoError; |
| 200 } | 308 } |
| 201 | 309 |
| 202 error::Error GLES2DecoderPassthroughImpl::DoCompressedTexSubImage2D( | 310 error::Error GLES2DecoderPassthroughImpl::DoCompressedTexSubImage2D( |
| 203 GLenum target, | 311 GLenum target, |
| 204 GLint level, | 312 GLint level, |
| 205 GLint xoffset, | 313 GLint xoffset, |
| 206 GLint yoffset, | 314 GLint yoffset, |
| 207 GLsizei width, | 315 GLsizei width, |
| 208 GLsizei height, | 316 GLsizei height, |
| 209 GLenum format, | 317 GLenum format, |
| 210 GLsizei imageSize, | 318 GLsizei imageSize, |
| 211 const void* data) { | 319 const void* data) { |
| 320 DCHECK(false) << "UNIMPLEMENTED"; | |
| 212 return error::kNoError; | 321 return error::kNoError; |
| 213 } | 322 } |
| 214 | 323 |
| 215 error::Error GLES2DecoderPassthroughImpl::DoCompressedTexImage3D( | 324 error::Error GLES2DecoderPassthroughImpl::DoCompressedTexImage3D( |
| 216 GLenum target, | 325 GLenum target, |
| 217 GLint level, | 326 GLint level, |
| 218 GLenum internalformat, | 327 GLenum internalformat, |
| 219 GLsizei width, | 328 GLsizei width, |
| 220 GLsizei height, | 329 GLsizei height, |
| 221 GLsizei depth, | 330 GLsizei depth, |
| 222 GLint border, | 331 GLint border, |
| 223 GLsizei imageSize, | 332 GLsizei imageSize, |
| 224 const void* data) { | 333 const void* data) { |
| 334 DCHECK(false) << "UNIMPLEMENTED"; | |
| 225 return error::kNoError; | 335 return error::kNoError; |
| 226 } | 336 } |
| 227 | 337 |
| 228 error::Error GLES2DecoderPassthroughImpl::DoCompressedTexSubImage3D( | 338 error::Error GLES2DecoderPassthroughImpl::DoCompressedTexSubImage3D( |
| 229 GLenum target, | 339 GLenum target, |
| 230 GLint level, | 340 GLint level, |
| 231 GLint xoffset, | 341 GLint xoffset, |
| 232 GLint yoffset, | 342 GLint yoffset, |
| 233 GLint zoffset, | 343 GLint zoffset, |
| 234 GLsizei width, | 344 GLsizei width, |
| 235 GLsizei height, | 345 GLsizei height, |
| 236 GLsizei depth, | 346 GLsizei depth, |
| 237 GLenum format, | 347 GLenum format, |
| 238 GLsizei imageSize, | 348 GLsizei imageSize, |
| 239 const void* data) { | 349 const void* data) { |
| 350 DCHECK(false) << "UNIMPLEMENTED"; | |
| 240 return error::kNoError; | 351 return error::kNoError; |
| 241 } | 352 } |
| 242 | 353 |
| 243 error::Error GLES2DecoderPassthroughImpl::DoCopyBufferSubData( | 354 error::Error GLES2DecoderPassthroughImpl::DoCopyBufferSubData( |
| 244 GLenum readtarget, | 355 GLenum readtarget, |
| 245 GLenum writetarget, | 356 GLenum writetarget, |
| 246 GLintptr readoffset, | 357 GLintptr readoffset, |
| 247 GLintptr writeoffset, | 358 GLintptr writeoffset, |
| 248 GLsizeiptr size) { | 359 GLsizeiptr size) { |
| 360 glCopyBufferSubData(readtarget, writetarget, readoffset, writeoffset, size); | |
| 249 return error::kNoError; | 361 return error::kNoError; |
| 250 } | 362 } |
| 251 | 363 |
| 252 error::Error GLES2DecoderPassthroughImpl::DoCopyTexImage2D( | 364 error::Error GLES2DecoderPassthroughImpl::DoCopyTexImage2D( |
| 253 GLenum target, | 365 GLenum target, |
| 254 GLint level, | 366 GLint level, |
| 255 GLenum internalformat, | 367 GLenum internalformat, |
| 256 GLint x, | 368 GLint x, |
| 257 GLint y, | 369 GLint y, |
| 258 GLsizei width, | 370 GLsizei width, |
| 259 GLsizei height, | 371 GLsizei height, |
| 260 GLint border) { | 372 GLint border) { |
| 373 glCopyTexImage2D(target, level, internalformat, x, y, width, height, border); | |
| 261 return error::kNoError; | 374 return error::kNoError; |
| 262 } | 375 } |
| 263 | 376 |
| 264 error::Error GLES2DecoderPassthroughImpl::DoCopyTexSubImage2D(GLenum target, | 377 error::Error GLES2DecoderPassthroughImpl::DoCopyTexSubImage2D(GLenum target, |
| 265 GLint level, | 378 GLint level, |
| 266 GLint xoffset, | 379 GLint xoffset, |
| 267 GLint yoffset, | 380 GLint yoffset, |
| 268 GLint x, | 381 GLint x, |
| 269 GLint y, | 382 GLint y, |
| 270 GLsizei width, | 383 GLsizei width, |
| 271 GLsizei height) { | 384 GLsizei height) { |
| 385 glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); | |
| 272 return error::kNoError; | 386 return error::kNoError; |
| 273 } | 387 } |
| 274 | 388 |
| 275 error::Error GLES2DecoderPassthroughImpl::DoCopyTexSubImage3D(GLenum target, | 389 error::Error GLES2DecoderPassthroughImpl::DoCopyTexSubImage3D(GLenum target, |
| 276 GLint level, | 390 GLint level, |
| 277 GLint xoffset, | 391 GLint xoffset, |
| 278 GLint yoffset, | 392 GLint yoffset, |
| 279 GLint zoffset, | 393 GLint zoffset, |
| 280 GLint x, | 394 GLint x, |
| 281 GLint y, | 395 GLint y, |
| 282 GLsizei width, | 396 GLsizei width, |
| 283 GLsizei height) { | 397 GLsizei height) { |
| 398 glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, | |
| 399 height); | |
| 284 return error::kNoError; | 400 return error::kNoError; |
| 285 } | 401 } |
| 286 | 402 |
| 287 error::Error GLES2DecoderPassthroughImpl::DoCreateProgram(GLuint client_id) { | 403 error::Error GLES2DecoderPassthroughImpl::DoCreateProgram(GLuint client_id) { |
| 288 return error::kNoError; | 404 return CreateHelper(client_id, &resources_->program_id_map, |
| 405 []() { return glCreateProgram(); }); | |
| 289 } | 406 } |
| 290 | 407 |
| 291 error::Error GLES2DecoderPassthroughImpl::DoCreateShader(GLenum type, | 408 error::Error GLES2DecoderPassthroughImpl::DoCreateShader(GLenum type, |
| 292 GLuint client_id) { | 409 GLuint client_id) { |
| 293 return error::kNoError; | 410 return CreateHelper(client_id, &resources_->shader_id_map, |
| 411 [type]() { return glCreateShader(type); }); | |
| 294 } | 412 } |
| 295 | 413 |
| 296 error::Error GLES2DecoderPassthroughImpl::DoCullFace(GLenum mode) { | 414 error::Error GLES2DecoderPassthroughImpl::DoCullFace(GLenum mode) { |
| 415 glCullFace(mode); | |
| 297 return error::kNoError; | 416 return error::kNoError; |
| 298 } | 417 } |
| 299 | 418 |
| 300 error::Error GLES2DecoderPassthroughImpl::DoDeleteBuffers( | 419 error::Error GLES2DecoderPassthroughImpl::DoDeleteBuffers( |
| 301 GLsizei n, | 420 GLsizei n, |
| 302 const volatile GLuint* buffers) { | 421 const volatile GLuint* buffers) { |
| 303 return error::kNoError; | 422 return DeleteHelper( |
| 423 n, buffers, &resources_->buffer_id_map, | |
| 424 [](GLsizei n, GLuint* buffers) { glDeleteBuffersARB(n, buffers); }); | |
| 304 } | 425 } |
| 305 | 426 |
| 306 error::Error GLES2DecoderPassthroughImpl::DoDeleteFramebuffers( | 427 error::Error GLES2DecoderPassthroughImpl::DoDeleteFramebuffers( |
| 307 GLsizei n, | 428 GLsizei n, |
| 308 const volatile GLuint* framebuffers) { | 429 const volatile GLuint* framebuffers) { |
| 309 return error::kNoError; | 430 return DeleteHelper(n, framebuffers, &framebuffer_id_map_, |
| 431 [](GLsizei n, GLuint* framebuffers) { | |
| 432 glDeleteFramebuffersEXT(n, framebuffers); | |
| 433 }); | |
| 310 } | 434 } |
| 311 | 435 |
| 312 error::Error GLES2DecoderPassthroughImpl::DoDeleteProgram(GLuint program) { | 436 error::Error GLES2DecoderPassthroughImpl::DoDeleteProgram(GLuint program) { |
| 313 return error::kNoError; | 437 return DeleteHelper(program, &resources_->program_id_map, |
| 438 [](GLuint program) { glDeleteProgram(program); }); | |
| 314 } | 439 } |
| 315 | 440 |
| 316 error::Error GLES2DecoderPassthroughImpl::DoDeleteRenderbuffers( | 441 error::Error GLES2DecoderPassthroughImpl::DoDeleteRenderbuffers( |
| 317 GLsizei n, | 442 GLsizei n, |
| 318 const volatile GLuint* renderbuffers) { | 443 const volatile GLuint* renderbuffers) { |
| 319 return error::kNoError; | 444 return DeleteHelper(n, renderbuffers, &resources_->renderbuffer_id_map, |
| 445 [](GLsizei n, GLuint* renderbuffers) { | |
| 446 glDeleteRenderbuffersEXT(n, renderbuffers); | |
| 447 }); | |
| 320 } | 448 } |
| 321 | 449 |
| 322 error::Error GLES2DecoderPassthroughImpl::DoDeleteSamplers( | 450 error::Error GLES2DecoderPassthroughImpl::DoDeleteSamplers( |
| 323 GLsizei n, | 451 GLsizei n, |
| 324 const volatile GLuint* samplers) { | 452 const volatile GLuint* samplers) { |
| 325 return error::kNoError; | 453 return DeleteHelper( |
| 454 n, samplers, &resources_->sampler_id_map, | |
| 455 [](GLsizei n, GLuint* samplers) { glDeleteSamplers(n, samplers); }); | |
| 326 } | 456 } |
| 327 | 457 |
| 328 error::Error GLES2DecoderPassthroughImpl::DoDeleteSync(GLuint sync) { | 458 error::Error GLES2DecoderPassthroughImpl::DoDeleteSync(GLuint sync) { |
| 329 return error::kNoError; | 459 return DeleteHelper(sync, &resources_->sync_id_map, [](uintptr_t sync) { |
| 460 glDeleteSync(reinterpret_cast<GLsync>(sync)); | |
| 461 }); | |
| 330 } | 462 } |
| 331 | 463 |
| 332 error::Error GLES2DecoderPassthroughImpl::DoDeleteShader(GLuint shader) { | 464 error::Error GLES2DecoderPassthroughImpl::DoDeleteShader(GLuint shader) { |
| 333 return error::kNoError; | 465 return DeleteHelper(shader, &resources_->shader_id_map, |
| 466 [](GLuint shader) { glDeleteShader(shader); }); | |
| 334 } | 467 } |
| 335 | 468 |
| 336 error::Error GLES2DecoderPassthroughImpl::DoDeleteTextures( | 469 error::Error GLES2DecoderPassthroughImpl::DoDeleteTextures( |
| 337 GLsizei n, | 470 GLsizei n, |
| 338 const volatile GLuint* textures) { | 471 const volatile GLuint* textures) { |
| 339 return error::kNoError; | 472 // Textures that are currently associated with a mailbox are stored in the |
| 473 // texture_object_map_ and are deleted automatically when they are | |
| 474 // unreferenced. Only delete textures that are not in this map. | |
| 475 std::vector<GLuint> non_mailbox_client_ids; | |
| 476 for (GLsizei ii = 0; ii < n; ++ii) { | |
| 477 GLuint client_id = textures[ii]; | |
| 478 auto texture_object_iter = resources_->texture_object_map.find(client_id); | |
| 479 if (texture_object_iter == resources_->texture_object_map.end()) { | |
| 480 // Delete with DeleteHelper | |
| 481 non_mailbox_client_ids.push_back(client_id); | |
| 482 } else { | |
| 483 // Deleted when unreferenced | |
| 484 resources_->texture_id_map.RemoveClientID(client_id); | |
| 485 resources_->texture_object_map.erase(client_id); | |
| 486 } | |
| 487 } | |
| 488 return DeleteHelper( | |
| 489 non_mailbox_client_ids.size(), non_mailbox_client_ids.data(), | |
| 490 &resources_->texture_id_map, | |
| 491 [](GLsizei n, GLuint* textures) { glDeleteTextures(n, textures); }); | |
| 340 } | 492 } |
| 341 | 493 |
| 342 error::Error GLES2DecoderPassthroughImpl::DoDeleteTransformFeedbacks( | 494 error::Error GLES2DecoderPassthroughImpl::DoDeleteTransformFeedbacks( |
| 343 GLsizei n, | 495 GLsizei n, |
| 344 const volatile GLuint* ids) { | 496 const volatile GLuint* ids) { |
| 345 return error::kNoError; | 497 return DeleteHelper(n, ids, &transform_feedback_id_map_, |
| 498 [](GLsizei n, GLuint* transform_feedbacks) { | |
| 499 glDeleteTransformFeedbacks(n, transform_feedbacks); | |
| 500 }); | |
| 346 } | 501 } |
| 347 | 502 |
| 348 error::Error GLES2DecoderPassthroughImpl::DoDepthFunc(GLenum func) { | 503 error::Error GLES2DecoderPassthroughImpl::DoDepthFunc(GLenum func) { |
| 504 glDepthFunc(func); | |
| 349 return error::kNoError; | 505 return error::kNoError; |
| 350 } | 506 } |
| 351 | 507 |
| 352 error::Error GLES2DecoderPassthroughImpl::DoDepthMask(GLboolean flag) { | 508 error::Error GLES2DecoderPassthroughImpl::DoDepthMask(GLboolean flag) { |
| 509 glDepthMask(flag); | |
| 353 return error::kNoError; | 510 return error::kNoError; |
| 354 } | 511 } |
| 355 | 512 |
| 356 error::Error GLES2DecoderPassthroughImpl::DoDepthRangef(GLclampf zNear, | 513 error::Error GLES2DecoderPassthroughImpl::DoDepthRangef(GLclampf zNear, |
| 357 GLclampf zFar) { | 514 GLclampf zFar) { |
| 515 glDepthRangef(zNear, zFar); | |
| 358 return error::kNoError; | 516 return error::kNoError; |
| 359 } | 517 } |
| 360 | 518 |
| 361 error::Error GLES2DecoderPassthroughImpl::DoDetachShader(GLuint program, | 519 error::Error GLES2DecoderPassthroughImpl::DoDetachShader(GLuint program, |
| 362 GLuint shader) { | 520 GLuint shader) { |
| 521 glDetachShader(resources_->program_id_map.GetServiceIDOrReserve(program), | |
| 522 resources_->shader_id_map.GetServiceIDOrReserve(shader)); | |
| 363 return error::kNoError; | 523 return error::kNoError; |
| 364 } | 524 } |
| 365 | 525 |
| 366 error::Error GLES2DecoderPassthroughImpl::DoDisable(GLenum cap) { | 526 error::Error GLES2DecoderPassthroughImpl::DoDisable(GLenum cap) { |
| 527 glDisable(cap); | |
| 367 return error::kNoError; | 528 return error::kNoError; |
| 368 } | 529 } |
| 369 | 530 |
| 370 error::Error GLES2DecoderPassthroughImpl::DoDisableVertexAttribArray( | 531 error::Error GLES2DecoderPassthroughImpl::DoDisableVertexAttribArray( |
| 371 GLuint index) { | 532 GLuint index) { |
| 533 glDisableVertexAttribArray(index); | |
| 372 return error::kNoError; | 534 return error::kNoError; |
| 373 } | 535 } |
| 374 | 536 |
| 375 error::Error GLES2DecoderPassthroughImpl::DoDrawArrays(GLenum mode, | 537 error::Error GLES2DecoderPassthroughImpl::DoDrawArrays(GLenum mode, |
| 376 GLint first, | 538 GLint first, |
| 377 GLsizei count) { | 539 GLsizei count) { |
| 540 glDrawArrays(mode, first, count); | |
| 378 return error::kNoError; | 541 return error::kNoError; |
| 379 } | 542 } |
| 380 | 543 |
| 381 error::Error GLES2DecoderPassthroughImpl::DoDrawElements(GLenum mode, | 544 error::Error GLES2DecoderPassthroughImpl::DoDrawElements(GLenum mode, |
| 382 GLsizei count, | 545 GLsizei count, |
| 383 GLenum type, | 546 GLenum type, |
| 384 const void* indices) { | 547 const void* indices) { |
| 548 glDrawElements(mode, count, type, indices); | |
| 385 return error::kNoError; | 549 return error::kNoError; |
| 386 } | 550 } |
| 387 | 551 |
| 388 error::Error GLES2DecoderPassthroughImpl::DoEnable(GLenum cap) { | 552 error::Error GLES2DecoderPassthroughImpl::DoEnable(GLenum cap) { |
| 553 glEnable(cap); | |
| 389 return error::kNoError; | 554 return error::kNoError; |
| 390 } | 555 } |
| 391 | 556 |
| 392 error::Error GLES2DecoderPassthroughImpl::DoEnableVertexAttribArray( | 557 error::Error GLES2DecoderPassthroughImpl::DoEnableVertexAttribArray( |
| 393 GLuint index) { | 558 GLuint index) { |
| 559 glEnableVertexAttribArray(index); | |
| 394 return error::kNoError; | 560 return error::kNoError; |
| 395 } | 561 } |
| 396 | 562 |
| 397 error::Error GLES2DecoderPassthroughImpl::DoFenceSync(GLenum condition, | 563 error::Error GLES2DecoderPassthroughImpl::DoFenceSync(GLenum condition, |
| 398 GLbitfield flags, | 564 GLbitfield flags, |
| 399 GLuint client_id) { | 565 GLuint client_id) { |
| 566 DCHECK(false) << "UNIMPLEMENTED"; | |
| 400 return error::kNoError; | 567 return error::kNoError; |
| 401 } | 568 } |
| 402 | 569 |
| 403 error::Error GLES2DecoderPassthroughImpl::DoFinish() { | 570 error::Error GLES2DecoderPassthroughImpl::DoFinish() { |
| 571 glFinish(); | |
| 404 return error::kNoError; | 572 return error::kNoError; |
| 405 } | 573 } |
| 406 | 574 |
| 407 error::Error GLES2DecoderPassthroughImpl::DoFlush() { | 575 error::Error GLES2DecoderPassthroughImpl::DoFlush() { |
| 576 glFlush(); | |
| 408 return error::kNoError; | 577 return error::kNoError; |
| 409 } | 578 } |
| 410 | 579 |
| 411 error::Error GLES2DecoderPassthroughImpl::DoFramebufferRenderbuffer( | 580 error::Error GLES2DecoderPassthroughImpl::DoFramebufferRenderbuffer( |
| 412 GLenum target, | 581 GLenum target, |
| 413 GLenum attachment, | 582 GLenum attachment, |
| 414 GLenum renderbuffertarget, | 583 GLenum renderbuffertarget, |
| 415 GLuint renderbuffer) { | 584 GLuint renderbuffer) { |
| 585 // TODO: Handle this case in ANGLE by adding a WebGL validation mode. | |
|
Zhenyao Mo
2016/09/09 21:22:11
change all TODO to TODO(geofflang)
Geoff Lang
2016/09/12 14:21:29
Done.
| |
| 586 if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) { | |
| 587 glFramebufferRenderbufferEXT( | |
| 588 target, GL_DEPTH_ATTACHMENT, renderbuffertarget, | |
| 589 resources_->renderbuffer_id_map.GetServiceIDOrReserve(renderbuffer)); | |
| 590 glFramebufferRenderbufferEXT( | |
| 591 target, GL_STENCIL_ATTACHMENT, renderbuffertarget, | |
| 592 resources_->renderbuffer_id_map.GetServiceIDOrReserve(renderbuffer)); | |
| 593 } else { | |
| 594 glFramebufferRenderbufferEXT( | |
| 595 target, attachment, renderbuffertarget, | |
| 596 resources_->renderbuffer_id_map.GetServiceIDOrReserve(renderbuffer)); | |
| 597 } | |
| 416 return error::kNoError; | 598 return error::kNoError; |
| 417 } | 599 } |
| 418 | 600 |
| 419 error::Error GLES2DecoderPassthroughImpl::DoFramebufferTexture2D( | 601 error::Error GLES2DecoderPassthroughImpl::DoFramebufferTexture2D( |
| 420 GLenum target, | 602 GLenum target, |
| 421 GLenum attachment, | 603 GLenum attachment, |
| 422 GLenum textarget, | 604 GLenum textarget, |
| 423 GLuint texture, | 605 GLuint texture, |
| 424 GLint level) { | 606 GLint level) { |
| 607 glFramebufferTexture2DEXT( | |
| 608 target, attachment, textarget, | |
| 609 resources_->texture_id_map.GetServiceIDOrReserve(texture), level); | |
| 425 return error::kNoError; | 610 return error::kNoError; |
| 426 } | 611 } |
| 427 | 612 |
| 428 error::Error GLES2DecoderPassthroughImpl::DoFramebufferTextureLayer( | 613 error::Error GLES2DecoderPassthroughImpl::DoFramebufferTextureLayer( |
| 429 GLenum target, | 614 GLenum target, |
| 430 GLenum attachment, | 615 GLenum attachment, |
| 431 GLuint texture, | 616 GLuint texture, |
| 432 GLint level, | 617 GLint level, |
| 433 GLint layer) { | 618 GLint layer) { |
| 619 glFramebufferTextureLayer( | |
| 620 target, attachment, | |
| 621 resources_->texture_id_map.GetServiceIDOrReserve(texture), level, layer); | |
| 434 return error::kNoError; | 622 return error::kNoError; |
| 435 } | 623 } |
| 436 | 624 |
| 437 error::Error GLES2DecoderPassthroughImpl::DoFrontFace(GLenum mode) { | 625 error::Error GLES2DecoderPassthroughImpl::DoFrontFace(GLenum mode) { |
| 626 glFrontFace(mode); | |
| 438 return error::kNoError; | 627 return error::kNoError; |
| 439 } | 628 } |
| 440 | 629 |
| 441 error::Error GLES2DecoderPassthroughImpl::DoGenBuffers( | 630 error::Error GLES2DecoderPassthroughImpl::DoGenBuffers( |
| 442 GLsizei n, | 631 GLsizei n, |
| 443 volatile GLuint* buffers) { | 632 volatile GLuint* buffers) { |
| 444 return error::kNoError; | 633 return GenHelper( |
| 634 n, buffers, &resources_->buffer_id_map, | |
| 635 [](GLsizei n, GLuint* buffers) { glGenBuffersARB(n, buffers); }); | |
| 445 } | 636 } |
| 446 | 637 |
| 447 error::Error GLES2DecoderPassthroughImpl::DoGenerateMipmap(GLenum target) { | 638 error::Error GLES2DecoderPassthroughImpl::DoGenerateMipmap(GLenum target) { |
| 639 glGenerateMipmapEXT(target); | |
| 448 return error::kNoError; | 640 return error::kNoError; |
| 449 } | 641 } |
| 450 | 642 |
| 451 error::Error GLES2DecoderPassthroughImpl::DoGenFramebuffers( | 643 error::Error GLES2DecoderPassthroughImpl::DoGenFramebuffers( |
| 452 GLsizei n, | 644 GLsizei n, |
| 453 volatile GLuint* framebuffers) { | 645 volatile GLuint* framebuffers) { |
| 454 return error::kNoError; | 646 return GenHelper(n, framebuffers, &framebuffer_id_map_, |
| 647 [](GLsizei n, GLuint* framebuffers) { | |
| 648 glGenFramebuffersEXT(n, framebuffers); | |
| 649 }); | |
| 455 } | 650 } |
| 456 | 651 |
| 457 error::Error GLES2DecoderPassthroughImpl::DoGenRenderbuffers( | 652 error::Error GLES2DecoderPassthroughImpl::DoGenRenderbuffers( |
| 458 GLsizei n, | 653 GLsizei n, |
| 459 volatile GLuint* renderbuffers) { | 654 volatile GLuint* renderbuffers) { |
| 460 return error::kNoError; | 655 return GenHelper(n, renderbuffers, &resources_->renderbuffer_id_map, |
| 656 [](GLsizei n, GLuint* renderbuffers) { | |
| 657 glGenRenderbuffersEXT(n, renderbuffers); | |
| 658 }); | |
| 461 } | 659 } |
| 462 | 660 |
| 463 error::Error GLES2DecoderPassthroughImpl::DoGenSamplers( | 661 error::Error GLES2DecoderPassthroughImpl::DoGenSamplers( |
| 464 GLsizei n, | 662 GLsizei n, |
| 465 volatile GLuint* samplers) { | 663 volatile GLuint* samplers) { |
| 466 return error::kNoError; | 664 return GenHelper( |
| 665 n, samplers, &resources_->sampler_id_map, | |
| 666 [](GLsizei n, GLuint* samplers) { glGenSamplers(n, samplers); }); | |
| 467 } | 667 } |
| 468 | 668 |
| 469 error::Error GLES2DecoderPassthroughImpl::DoGenTextures( | 669 error::Error GLES2DecoderPassthroughImpl::DoGenTextures( |
| 470 GLsizei n, | 670 GLsizei n, |
| 471 volatile GLuint* textures) { | 671 volatile GLuint* textures) { |
| 472 return error::kNoError; | 672 return GenHelper( |
| 673 n, textures, &resources_->texture_id_map, | |
| 674 [](GLsizei n, GLuint* textures) { glGenTextures(n, textures); }); | |
| 473 } | 675 } |
| 474 | 676 |
| 475 error::Error GLES2DecoderPassthroughImpl::DoGenTransformFeedbacks( | 677 error::Error GLES2DecoderPassthroughImpl::DoGenTransformFeedbacks( |
| 476 GLsizei n, | 678 GLsizei n, |
| 477 volatile GLuint* ids) { | 679 volatile GLuint* ids) { |
| 478 return error::kNoError; | 680 return GenHelper(n, ids, &transform_feedback_id_map_, |
| 681 [](GLsizei n, GLuint* transform_feedbacks) { | |
| 682 glGenTransformFeedbacks(n, transform_feedbacks); | |
| 683 }); | |
| 479 } | 684 } |
| 480 | 685 |
| 481 error::Error GLES2DecoderPassthroughImpl::DoGetActiveAttrib(GLuint program, | 686 error::Error GLES2DecoderPassthroughImpl::DoGetActiveAttrib(GLuint program, |
| 482 GLuint index, | 687 GLuint index, |
| 483 GLint* size, | 688 GLint* size, |
| 484 GLenum* type, | 689 GLenum* type, |
| 485 std::string* name) { | 690 std::string* name) { |
| 691 DCHECK(false) << "UNIMPLEMENTED"; | |
| 486 return error::kNoError; | 692 return error::kNoError; |
| 487 } | 693 } |
| 488 | 694 |
| 489 error::Error GLES2DecoderPassthroughImpl::DoGetActiveUniform( | 695 error::Error GLES2DecoderPassthroughImpl::DoGetActiveUniform( |
| 490 GLuint program, | 696 GLuint program, |
| 491 GLuint index, | 697 GLuint index, |
| 492 GLint* size, | 698 GLint* size, |
| 493 GLenum* type, | 699 GLenum* type, |
| 494 std::string* name) { | 700 std::string* name) { |
| 701 DCHECK(false) << "UNIMPLEMENTED"; | |
| 495 return error::kNoError; | 702 return error::kNoError; |
| 496 } | 703 } |
| 497 | 704 |
| 498 error::Error GLES2DecoderPassthroughImpl::DoGetActiveUniformBlockiv( | 705 error::Error GLES2DecoderPassthroughImpl::DoGetActiveUniformBlockiv( |
| 499 GLuint program, | 706 GLuint program, |
| 500 GLuint index, | 707 GLuint index, |
| 501 GLenum pname, | 708 GLenum pname, |
| 502 GLsizei bufSize, | 709 GLsizei bufSize, |
| 503 GLsizei* length, | 710 GLsizei* length, |
| 504 GLint* params) { | 711 GLint* params) { |
| 712 DCHECK(false) << "UNIMPLEMENTED"; | |
| 505 return error::kNoError; | 713 return error::kNoError; |
| 506 } | 714 } |
| 507 | 715 |
| 508 error::Error GLES2DecoderPassthroughImpl::DoGetActiveUniformBlockName( | 716 error::Error GLES2DecoderPassthroughImpl::DoGetActiveUniformBlockName( |
| 509 GLuint program, | 717 GLuint program, |
| 510 GLuint index, | 718 GLuint index, |
| 511 std::string* name) { | 719 std::string* name) { |
| 720 DCHECK(false) << "UNIMPLEMENTED"; | |
| 512 return error::kNoError; | 721 return error::kNoError; |
| 513 } | 722 } |
| 514 | 723 |
| 515 error::Error GLES2DecoderPassthroughImpl::DoGetActiveUniformsiv( | 724 error::Error GLES2DecoderPassthroughImpl::DoGetActiveUniformsiv( |
| 516 GLuint program, | 725 GLuint program, |
| 517 GLsizei count, | 726 GLsizei count, |
| 518 const GLuint* indices, | 727 const GLuint* indices, |
| 519 GLenum pname, | 728 GLenum pname, |
| 520 GLsizei bufSize, | 729 GLsizei bufSize, |
| 521 GLsizei* length, | 730 GLsizei* length, |
| 522 GLint* params) { | 731 GLint* params) { |
| 732 DCHECK(false) << "UNIMPLEMENTED"; | |
| 523 return error::kNoError; | 733 return error::kNoError; |
| 524 } | 734 } |
| 525 | 735 |
| 526 error::Error GLES2DecoderPassthroughImpl::DoGetAttachedShaders( | 736 error::Error GLES2DecoderPassthroughImpl::DoGetAttachedShaders( |
| 527 GLuint program, | 737 GLuint program, |
| 528 GLsizei maxcount, | 738 GLsizei maxcount, |
| 529 GLsizei* count, | 739 GLsizei* count, |
| 530 GLuint* shaders) { | 740 GLuint* shaders) { |
| 741 DCHECK(false) << "UNIMPLEMENTED"; | |
| 531 return error::kNoError; | 742 return error::kNoError; |
| 532 } | 743 } |
| 533 | 744 |
| 534 error::Error GLES2DecoderPassthroughImpl::DoGetAttribLocation(GLuint program, | 745 error::Error GLES2DecoderPassthroughImpl::DoGetAttribLocation(GLuint program, |
| 535 const char* name, | 746 const char* name, |
| 536 GLint* result) { | 747 GLint* result) { |
| 748 DCHECK(false) << "UNIMPLEMENTED"; | |
| 537 return error::kNoError; | 749 return error::kNoError; |
| 538 } | 750 } |
| 539 | 751 |
| 540 error::Error GLES2DecoderPassthroughImpl::DoGetBooleanv(GLenum pname, | 752 error::Error GLES2DecoderPassthroughImpl::DoGetBooleanv(GLenum pname, |
| 541 GLsizei bufsize, | 753 GLsizei bufsize, |
| 542 GLsizei* length, | 754 GLsizei* length, |
| 543 GLboolean* params) { | 755 GLboolean* params) { |
| 756 // TODO: new-style getter | |
| 757 glGetBooleanv(pname, params); | |
| 758 *length = 1; | |
| 544 return error::kNoError; | 759 return error::kNoError; |
| 545 } | 760 } |
| 546 | 761 |
| 547 error::Error GLES2DecoderPassthroughImpl::DoGetBufferParameteri64v( | 762 error::Error GLES2DecoderPassthroughImpl::DoGetBufferParameteri64v( |
| 548 GLenum target, | 763 GLenum target, |
| 549 GLenum pname, | 764 GLenum pname, |
| 550 GLsizei bufsize, | 765 GLsizei bufsize, |
| 551 GLsizei* length, | 766 GLsizei* length, |
| 552 GLint64* params) { | 767 GLint64* params) { |
| 768 DCHECK(false) << "UNIMPLEMENTED"; | |
| 769 // TODO: new-style getter | |
| 770 // TODO: missing glGetBufferParameteri64v? | |
| 771 // glGetBufferParameteri64v(target, pname, params); | |
|
Zhenyao Mo
2016/09/09 21:22:11
command buffer is 32bit, so unnecessary.
Geoff Lang
2016/09/12 14:21:29
Ok, I'll have to come back to this one, may requir
| |
| 772 *length = 1; | |
| 553 return error::kNoError; | 773 return error::kNoError; |
| 554 } | 774 } |
| 555 | 775 |
| 556 error::Error GLES2DecoderPassthroughImpl::DoGetBufferParameteriv( | 776 error::Error GLES2DecoderPassthroughImpl::DoGetBufferParameteriv( |
| 557 GLenum target, | 777 GLenum target, |
| 558 GLenum pname, | 778 GLenum pname, |
| 559 GLsizei bufsize, | 779 GLsizei bufsize, |
| 560 GLsizei* length, | 780 GLsizei* length, |
| 561 GLint* params) { | 781 GLint* params) { |
| 782 // TODO: new-style getter | |
| 783 glGetBufferParameteriv(target, pname, params); | |
| 784 *length = 1; | |
| 562 return error::kNoError; | 785 return error::kNoError; |
| 563 } | 786 } |
| 564 | 787 |
| 565 error::Error GLES2DecoderPassthroughImpl::DoGetError(uint32_t* result) { | 788 error::Error GLES2DecoderPassthroughImpl::DoGetError(uint32_t* result) { |
| 789 *result = glGetError(); | |
| 566 return error::kNoError; | 790 return error::kNoError; |
| 567 } | 791 } |
| 568 | 792 |
| 569 error::Error GLES2DecoderPassthroughImpl::DoGetFloatv(GLenum pname, | 793 error::Error GLES2DecoderPassthroughImpl::DoGetFloatv(GLenum pname, |
| 570 GLsizei bufsize, | 794 GLsizei bufsize, |
| 571 GLsizei* length, | 795 GLsizei* length, |
| 572 GLfloat* params) { | 796 GLfloat* params) { |
| 797 // TODO: new-style getter | |
| 798 glGetFloatv(pname, params); | |
| 799 *length = 1; | |
| 573 return error::kNoError; | 800 return error::kNoError; |
| 574 } | 801 } |
| 575 | 802 |
| 576 error::Error GLES2DecoderPassthroughImpl::DoGetFragDataLocation( | 803 error::Error GLES2DecoderPassthroughImpl::DoGetFragDataLocation( |
| 577 GLuint program, | 804 GLuint program, |
| 578 const char* name, | 805 const char* name, |
| 579 GLint* result) { | 806 GLint* result) { |
| 807 DCHECK(false) << "UNIMPLEMENTED"; | |
| 580 return error::kNoError; | 808 return error::kNoError; |
| 581 } | 809 } |
| 582 | 810 |
| 583 error::Error GLES2DecoderPassthroughImpl::DoGetFramebufferAttachmentParameteriv( | 811 error::Error GLES2DecoderPassthroughImpl::DoGetFramebufferAttachmentParameteriv( |
| 584 GLenum target, | 812 GLenum target, |
| 585 GLenum attachment, | 813 GLenum attachment, |
| 586 GLenum pname, | 814 GLenum pname, |
| 587 GLsizei bufsize, | 815 GLsizei bufsize, |
| 588 GLsizei* length, | 816 GLsizei* length, |
| 589 GLint* params) { | 817 GLint* params) { |
| 818 // TODO: new-style getter | |
| 819 glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params); | |
| 820 *length = 1; | |
| 590 return error::kNoError; | 821 return error::kNoError; |
| 591 } | 822 } |
| 592 | 823 |
| 593 error::Error GLES2DecoderPassthroughImpl::DoGetInteger64v(GLenum pname, | 824 error::Error GLES2DecoderPassthroughImpl::DoGetInteger64v(GLenum pname, |
| 594 GLsizei bufsize, | 825 GLsizei bufsize, |
| 595 GLsizei* length, | 826 GLsizei* length, |
| 596 GLint64* params) { | 827 GLint64* params) { |
| 828 // TODO: new-style getter | |
| 829 glGetInteger64v(pname, params); | |
| 830 *length = 1; | |
| 597 return error::kNoError; | 831 return error::kNoError; |
| 598 } | 832 } |
| 599 | 833 |
| 600 error::Error GLES2DecoderPassthroughImpl::DoGetIntegeri_v(GLenum pname, | 834 error::Error GLES2DecoderPassthroughImpl::DoGetIntegeri_v(GLenum pname, |
| 601 GLuint index, | 835 GLuint index, |
| 602 GLsizei bufsize, | 836 GLsizei bufsize, |
| 603 GLsizei* length, | 837 GLsizei* length, |
| 604 GLint* data) { | 838 GLint* data) { |
| 839 // TODO: new-style getter | |
| 840 glGetIntegeri_v(pname, index, data); | |
| 841 *length = 1; | |
| 605 return error::kNoError; | 842 return error::kNoError; |
| 606 } | 843 } |
| 607 | 844 |
| 608 error::Error GLES2DecoderPassthroughImpl::DoGetInteger64i_v(GLenum pname, | 845 error::Error GLES2DecoderPassthroughImpl::DoGetInteger64i_v(GLenum pname, |
| 609 GLuint index, | 846 GLuint index, |
| 610 GLsizei bufsize, | 847 GLsizei bufsize, |
| 611 GLsizei* length, | 848 GLsizei* length, |
| 612 GLint64* data) { | 849 GLint64* data) { |
| 850 // TODO: new-style getter | |
| 851 glGetInteger64i_v(pname, index, data); | |
| 852 *length = 1; | |
| 613 return error::kNoError; | 853 return error::kNoError; |
| 614 } | 854 } |
| 615 | 855 |
| 616 error::Error GLES2DecoderPassthroughImpl::DoGetIntegerv(GLenum pname, | 856 error::Error GLES2DecoderPassthroughImpl::DoGetIntegerv(GLenum pname, |
| 617 GLsizei bufsize, | 857 GLsizei bufsize, |
| 618 GLsizei* length, | 858 GLsizei* length, |
| 619 GLint* params) { | 859 GLint* params) { |
| 860 // TODO: new-style getter | |
| 861 glGetIntegerv(pname, params); | |
| 862 *length = 1; | |
| 863 // HACK: WebGL initialization requires this query | |
| 864 if (pname == GL_MAX_VIEWPORT_DIMS) { | |
| 865 *length = 2; | |
| 866 } | |
| 620 return error::kNoError; | 867 return error::kNoError; |
| 621 } | 868 } |
| 622 | 869 |
| 623 error::Error GLES2DecoderPassthroughImpl::DoGetInternalformativ(GLenum target, | 870 error::Error GLES2DecoderPassthroughImpl::DoGetInternalformativ(GLenum target, |
| 624 GLenum format, | 871 GLenum format, |
| 625 GLenum pname, | 872 GLenum pname, |
| 626 GLsizei bufSize, | 873 GLsizei bufSize, |
| 627 GLsizei* length, | 874 GLsizei* length, |
| 628 GLint* params) { | 875 GLint* params) { |
| 876 // TODO: new-style getter | |
| 877 glGetInternalformativ(target, format, pname, bufSize, params); | |
| 878 *length = 1; | |
| 629 return error::kNoError; | 879 return error::kNoError; |
| 630 } | 880 } |
| 631 | 881 |
| 632 error::Error GLES2DecoderPassthroughImpl::DoGetProgramiv(GLuint program, | 882 error::Error GLES2DecoderPassthroughImpl::DoGetProgramiv(GLuint program, |
| 633 GLenum pname, | 883 GLenum pname, |
| 634 GLsizei bufsize, | 884 GLsizei bufsize, |
| 635 GLsizei* length, | 885 GLsizei* length, |
| 636 GLint* params) { | 886 GLint* params) { |
| 887 // TODO: new-style getter | |
| 888 glGetProgramiv(resources_->program_id_map.GetServiceIDOrReserve(program), | |
| 889 pname, params); | |
| 890 *length = 1; | |
| 637 return error::kNoError; | 891 return error::kNoError; |
| 638 } | 892 } |
| 639 | 893 |
| 640 error::Error GLES2DecoderPassthroughImpl::DoGetProgramInfoLog( | 894 error::Error GLES2DecoderPassthroughImpl::DoGetProgramInfoLog( |
| 641 GLuint program, | 895 GLuint program, |
| 642 std::string* infolog) { | 896 std::string* infolog) { |
| 897 GLint info_log_len = 0; | |
| 898 glGetProgramiv(resources_->program_id_map.GetServiceIDOrReserve(program), | |
| 899 GL_INFO_LOG_LENGTH, &info_log_len); | |
| 900 | |
| 901 std::vector<char> buffer(info_log_len, 0); | |
| 902 glGetProgramInfoLog(resources_->program_id_map.GetServiceIDOrReserve(program), | |
| 903 info_log_len, nullptr, buffer.data()); | |
| 904 *infolog = std::string(buffer.data()); | |
| 643 return error::kNoError; | 905 return error::kNoError; |
| 644 } | 906 } |
| 645 | 907 |
| 646 error::Error GLES2DecoderPassthroughImpl::DoGetRenderbufferParameteriv( | 908 error::Error GLES2DecoderPassthroughImpl::DoGetRenderbufferParameteriv( |
| 647 GLenum target, | 909 GLenum target, |
| 648 GLenum pname, | 910 GLenum pname, |
| 649 GLsizei bufsize, | 911 GLsizei bufsize, |
| 650 GLsizei* length, | 912 GLsizei* length, |
| 651 GLint* params) { | 913 GLint* params) { |
| 914 DCHECK(false) << "UNIMPLEMENTED"; | |
| 652 return error::kNoError; | 915 return error::kNoError; |
| 653 } | 916 } |
| 654 | 917 |
| 655 error::Error GLES2DecoderPassthroughImpl::DoGetSamplerParameterfv( | 918 error::Error GLES2DecoderPassthroughImpl::DoGetSamplerParameterfv( |
| 656 GLuint sampler, | 919 GLuint sampler, |
| 657 GLenum pname, | 920 GLenum pname, |
| 658 GLsizei bufsize, | 921 GLsizei bufsize, |
| 659 GLsizei* length, | 922 GLsizei* length, |
| 660 GLfloat* params) { | 923 GLfloat* params) { |
| 924 // TODO: new-style getter | |
| 925 glGetSamplerParameterfv( | |
| 926 resources_->sampler_id_map.GetServiceIDOrReserve(sampler), pname, params); | |
| 927 *length = 1; | |
| 661 return error::kNoError; | 928 return error::kNoError; |
| 662 } | 929 } |
| 663 | 930 |
| 664 error::Error GLES2DecoderPassthroughImpl::DoGetSamplerParameteriv( | 931 error::Error GLES2DecoderPassthroughImpl::DoGetSamplerParameteriv( |
| 665 GLuint sampler, | 932 GLuint sampler, |
| 666 GLenum pname, | 933 GLenum pname, |
| 667 GLsizei bufsize, | 934 GLsizei bufsize, |
| 668 GLsizei* length, | 935 GLsizei* length, |
| 669 GLint* params) { | 936 GLint* params) { |
| 937 DCHECK(false) << "UNIMPLEMENTED"; | |
| 938 // TODO: new-style getter | |
| 939 // glGetRenderbufferParameterivEXT(target, pname, params); | |
| 940 *length = 1; | |
| 670 return error::kNoError; | 941 return error::kNoError; |
| 671 } | 942 } |
| 672 | 943 |
| 673 error::Error GLES2DecoderPassthroughImpl::DoGetShaderiv(GLuint shader, | 944 error::Error GLES2DecoderPassthroughImpl::DoGetShaderiv(GLuint shader, |
| 674 GLenum pname, | 945 GLenum pname, |
| 675 GLsizei bufsize, | 946 GLsizei bufsize, |
| 676 GLsizei* length, | 947 GLsizei* length, |
| 677 GLint* params) { | 948 GLint* params) { |
| 949 // TODO: new-style getter | |
| 950 glGetShaderiv(resources_->shader_id_map.GetServiceIDOrReserve(shader), pname, | |
| 951 params); | |
| 952 *length = 1; | |
| 678 return error::kNoError; | 953 return error::kNoError; |
| 679 } | 954 } |
| 680 | 955 |
| 681 error::Error GLES2DecoderPassthroughImpl::DoGetShaderInfoLog( | 956 error::Error GLES2DecoderPassthroughImpl::DoGetShaderInfoLog( |
| 682 GLuint shader, | 957 GLuint shader, |
| 683 std::string* infolog) { | 958 std::string* infolog) { |
| 959 GLuint service_id = resources_->shader_id_map.GetServiceIDOrReserve(shader); | |
| 960 GLint info_log_len = 0; | |
| 961 glGetShaderiv(service_id, GL_INFO_LOG_LENGTH, &info_log_len); | |
| 962 std::vector<char> buffer(info_log_len, 0); | |
| 963 glGetShaderInfoLog(service_id, info_log_len, nullptr, buffer.data()); | |
| 964 *infolog = std::string(buffer.data()); | |
| 684 return error::kNoError; | 965 return error::kNoError; |
| 685 } | 966 } |
| 686 | 967 |
| 687 error::Error GLES2DecoderPassthroughImpl::DoGetShaderPrecisionFormat( | 968 error::Error GLES2DecoderPassthroughImpl::DoGetShaderPrecisionFormat( |
| 688 GLenum shadertype, | 969 GLenum shadertype, |
| 689 GLenum precisiontype, | 970 GLenum precisiontype, |
| 690 GLint* range, | 971 GLint* range, |
| 691 GLint* precision) { | 972 GLint* precision) { |
| 973 glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision); | |
| 692 return error::kNoError; | 974 return error::kNoError; |
| 693 } | 975 } |
| 694 | 976 |
| 695 error::Error GLES2DecoderPassthroughImpl::DoGetShaderSource( | 977 error::Error GLES2DecoderPassthroughImpl::DoGetShaderSource( |
| 696 GLuint shader, | 978 GLuint shader, |
| 697 std::string* source) { | 979 std::string* source) { |
| 980 DCHECK(false) << "UNIMPLEMENTED"; | |
| 698 return error::kNoError; | 981 return error::kNoError; |
| 699 } | 982 } |
| 700 | 983 |
| 701 error::Error GLES2DecoderPassthroughImpl::DoGetString(GLenum name, | 984 error::Error GLES2DecoderPassthroughImpl::DoGetString(GLenum name, |
| 702 const char** result) { | 985 const char** result) { |
| 986 // TODO: Append additional CHROMIUM extension strings? | |
| 987 *result = reinterpret_cast<const char*>(glGetString(name)); | |
| 703 return error::kNoError; | 988 return error::kNoError; |
| 704 } | 989 } |
| 705 | 990 |
| 706 error::Error GLES2DecoderPassthroughImpl::DoGetSynciv(GLuint sync, | 991 error::Error GLES2DecoderPassthroughImpl::DoGetSynciv(GLuint sync, |
| 707 GLenum pname, | 992 GLenum pname, |
| 708 GLsizei bufsize, | 993 GLsizei bufsize, |
| 709 GLsizei* length, | 994 GLsizei* length, |
| 710 GLint* values) { | 995 GLint* values) { |
| 996 glGetSynciv(reinterpret_cast<GLsync>( | |
| 997 resources_->sync_id_map.GetServiceIDOrReserve(sync)), | |
| 998 pname, bufsize, length, values); | |
| 711 return error::kNoError; | 999 return error::kNoError; |
| 712 } | 1000 } |
| 713 | 1001 |
| 714 error::Error GLES2DecoderPassthroughImpl::DoGetTexParameterfv(GLenum target, | 1002 error::Error GLES2DecoderPassthroughImpl::DoGetTexParameterfv(GLenum target, |
| 715 GLenum pname, | 1003 GLenum pname, |
| 716 GLsizei bufsize, | 1004 GLsizei bufsize, |
| 717 GLsizei* length, | 1005 GLsizei* length, |
| 718 GLfloat* params) { | 1006 GLfloat* params) { |
| 1007 // TODO: new-style getter | |
| 1008 glGetTexParameterfv(target, pname, params); | |
| 1009 *length = 1; | |
| 719 return error::kNoError; | 1010 return error::kNoError; |
| 720 } | 1011 } |
| 721 | 1012 |
| 722 error::Error GLES2DecoderPassthroughImpl::DoGetTexParameteriv(GLenum target, | 1013 error::Error GLES2DecoderPassthroughImpl::DoGetTexParameteriv(GLenum target, |
| 723 GLenum pname, | 1014 GLenum pname, |
| 724 GLsizei bufsize, | 1015 GLsizei bufsize, |
| 725 GLsizei* length, | 1016 GLsizei* length, |
| 726 GLint* params) { | 1017 GLint* params) { |
| 1018 // TODO: new-style getter | |
| 1019 glGetTexParameteriv(target, pname, params); | |
| 1020 *length = 1; | |
| 727 return error::kNoError; | 1021 return error::kNoError; |
| 728 } | 1022 } |
| 729 | 1023 |
| 730 error::Error GLES2DecoderPassthroughImpl::DoGetTransformFeedbackVarying( | 1024 error::Error GLES2DecoderPassthroughImpl::DoGetTransformFeedbackVarying( |
| 731 GLuint program, | 1025 GLuint program, |
| 732 GLuint index, | 1026 GLuint index, |
| 733 GLsizei* size, | 1027 GLsizei* size, |
| 734 GLenum* type, | 1028 GLenum* type, |
| 735 std::string* name) { | 1029 std::string* name) { |
| 1030 DCHECK(false) << "UNIMPLEMENTED"; | |
| 736 return error::kNoError; | 1031 return error::kNoError; |
| 737 } | 1032 } |
| 738 | 1033 |
| 739 error::Error GLES2DecoderPassthroughImpl::DoGetUniformBlockIndex( | 1034 error::Error GLES2DecoderPassthroughImpl::DoGetUniformBlockIndex( |
| 740 GLuint program, | 1035 GLuint program, |
| 741 const char* name, | 1036 const char* name, |
| 742 GLint* index) { | 1037 GLint* index) { |
| 1038 DCHECK(false) << "UNIMPLEMENTED"; | |
| 743 return error::kNoError; | 1039 return error::kNoError; |
| 744 } | 1040 } |
| 745 | 1041 |
| 746 error::Error GLES2DecoderPassthroughImpl::DoGetUniformfv(GLuint program, | 1042 error::Error GLES2DecoderPassthroughImpl::DoGetUniformfv(GLuint program, |
| 747 GLint location, | 1043 GLint location, |
| 748 GLsizei bufsize, | 1044 GLsizei bufsize, |
| 749 GLsizei* length, | 1045 GLsizei* length, |
| 750 GLfloat* params) { | 1046 GLfloat* params) { |
| 1047 // TODO: new-style getter | |
| 1048 glGetUniformfv(resources_->program_id_map.GetServiceIDOrReserve(program), | |
| 1049 location, params); | |
| 1050 *length = 1; | |
| 751 return error::kNoError; | 1051 return error::kNoError; |
| 752 } | 1052 } |
| 753 | 1053 |
| 754 error::Error GLES2DecoderPassthroughImpl::DoGetUniformiv(GLuint program, | 1054 error::Error GLES2DecoderPassthroughImpl::DoGetUniformiv(GLuint program, |
| 755 GLint location, | 1055 GLint location, |
| 756 GLsizei bufsize, | 1056 GLsizei bufsize, |
| 757 GLsizei* length, | 1057 GLsizei* length, |
| 758 GLint* params) { | 1058 GLint* params) { |
| 1059 // TODO: new-style getter | |
| 1060 glGetUniformiv(resources_->program_id_map.GetServiceIDOrReserve(program), | |
| 1061 location, params); | |
| 1062 *length = 1; | |
| 759 return error::kNoError; | 1063 return error::kNoError; |
| 760 } | 1064 } |
| 761 | 1065 |
| 762 error::Error GLES2DecoderPassthroughImpl::DoGetUniformuiv(GLuint program, | 1066 error::Error GLES2DecoderPassthroughImpl::DoGetUniformuiv(GLuint program, |
| 763 GLint location, | 1067 GLint location, |
| 764 GLsizei bufsize, | 1068 GLsizei bufsize, |
| 765 GLsizei* length, | 1069 GLsizei* length, |
| 766 GLuint* params) { | 1070 GLuint* params) { |
| 1071 // TODO: new-style getter | |
| 1072 glGetUniformuiv(resources_->program_id_map.GetServiceIDOrReserve(program), | |
| 1073 location, params); | |
| 1074 *length = 1; | |
| 767 return error::kNoError; | 1075 return error::kNoError; |
| 768 } | 1076 } |
| 769 | 1077 |
| 770 error::Error GLES2DecoderPassthroughImpl::DoGetUniformIndices( | 1078 error::Error GLES2DecoderPassthroughImpl::DoGetUniformIndices( |
| 771 GLuint program, | 1079 GLuint program, |
| 772 GLsizei count, | 1080 GLsizei count, |
| 773 const char* const* names, | 1081 const char* const* names, |
| 774 GLsizei bufSize, | 1082 GLsizei bufSize, |
| 775 GLsizei* length, | 1083 GLsizei* length, |
| 776 GLuint* indices) { | 1084 GLuint* indices) { |
| 1085 DCHECK(false) << "UNIMPLEMENTED"; | |
| 777 return error::kNoError; | 1086 return error::kNoError; |
| 778 } | 1087 } |
| 779 | 1088 |
| 780 error::Error GLES2DecoderPassthroughImpl::DoGetUniformLocation( | 1089 error::Error GLES2DecoderPassthroughImpl::DoGetUniformLocation( |
| 781 GLuint program, | 1090 GLuint program, |
| 782 const char* name, | 1091 const char* name, |
| 783 GLint* location) { | 1092 GLint* location) { |
| 1093 *location = glGetUniformLocation( | |
| 1094 resources_->program_id_map.GetServiceIDOrReserve(program), name); | |
| 784 return error::kNoError; | 1095 return error::kNoError; |
| 785 } | 1096 } |
| 786 | 1097 |
| 787 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribfv(GLuint index, | 1098 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribfv(GLuint index, |
| 788 GLenum pname, | 1099 GLenum pname, |
| 789 GLsizei bufsize, | 1100 GLsizei bufsize, |
| 790 GLsizei* length, | 1101 GLsizei* length, |
| 791 GLfloat* params) { | 1102 GLfloat* params) { |
| 1103 DCHECK(false) << "UNIMPLEMENTED"; | |
| 792 return error::kNoError; | 1104 return error::kNoError; |
| 793 } | 1105 } |
| 794 | 1106 |
| 795 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribiv(GLuint index, | 1107 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribiv(GLuint index, |
| 796 GLenum pname, | 1108 GLenum pname, |
| 797 GLsizei bufsize, | 1109 GLsizei bufsize, |
| 798 GLsizei* length, | 1110 GLsizei* length, |
| 799 GLint* params) { | 1111 GLint* params) { |
| 1112 DCHECK(false) << "UNIMPLEMENTED"; | |
| 800 return error::kNoError; | 1113 return error::kNoError; |
| 801 } | 1114 } |
| 802 | 1115 |
| 803 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribIiv(GLuint index, | 1116 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribIiv(GLuint index, |
| 804 GLenum pname, | 1117 GLenum pname, |
| 805 GLsizei bufsize, | 1118 GLsizei bufsize, |
| 806 GLsizei* length, | 1119 GLsizei* length, |
| 807 GLint* params) { | 1120 GLint* params) { |
| 1121 DCHECK(false) << "UNIMPLEMENTED"; | |
| 808 return error::kNoError; | 1122 return error::kNoError; |
| 809 } | 1123 } |
| 810 | 1124 |
| 811 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribIuiv( | 1125 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribIuiv( |
| 812 GLuint index, | 1126 GLuint index, |
| 813 GLenum pname, | 1127 GLenum pname, |
| 814 GLsizei bufsize, | 1128 GLsizei bufsize, |
| 815 GLsizei* length, | 1129 GLsizei* length, |
| 816 GLuint* params) { | 1130 GLuint* params) { |
| 1131 DCHECK(false) << "UNIMPLEMENTED"; | |
| 817 return error::kNoError; | 1132 return error::kNoError; |
| 818 } | 1133 } |
| 819 | 1134 |
| 820 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribPointerv( | 1135 error::Error GLES2DecoderPassthroughImpl::DoGetVertexAttribPointerv( |
| 821 GLuint index, | 1136 GLuint index, |
| 822 GLenum pname, | 1137 GLenum pname, |
| 823 GLsizei bufsize, | 1138 GLsizei bufsize, |
| 824 GLsizei* length, | 1139 GLsizei* length, |
| 825 GLuint* pointer) { | 1140 GLuint* pointer) { |
| 1141 DCHECK(false) << "UNIMPLEMENTED"; | |
| 826 return error::kNoError; | 1142 return error::kNoError; |
| 827 } | 1143 } |
| 828 | 1144 |
| 829 error::Error GLES2DecoderPassthroughImpl::DoHint(GLenum target, GLenum mode) { | 1145 error::Error GLES2DecoderPassthroughImpl::DoHint(GLenum target, GLenum mode) { |
| 1146 glHint(target, mode); | |
| 830 return error::kNoError; | 1147 return error::kNoError; |
| 831 } | 1148 } |
| 832 | 1149 |
| 833 error::Error GLES2DecoderPassthroughImpl::DoInvalidateFramebuffer( | 1150 error::Error GLES2DecoderPassthroughImpl::DoInvalidateFramebuffer( |
| 834 GLenum target, | 1151 GLenum target, |
| 835 GLsizei count, | 1152 GLsizei count, |
| 836 const volatile GLenum* attachments) { | 1153 const volatile GLenum* attachments) { |
| 1154 std::vector<GLenum> attachments_copy(attachments, attachments + count); | |
| 1155 glInvalidateFramebuffer(target, count, attachments_copy.data()); | |
| 837 return error::kNoError; | 1156 return error::kNoError; |
| 838 } | 1157 } |
| 839 | 1158 |
| 840 error::Error GLES2DecoderPassthroughImpl::DoInvalidateSubFramebuffer( | 1159 error::Error GLES2DecoderPassthroughImpl::DoInvalidateSubFramebuffer( |
| 841 GLenum target, | 1160 GLenum target, |
| 842 GLsizei count, | 1161 GLsizei count, |
| 843 const volatile GLenum* attachments, | 1162 const volatile GLenum* attachments, |
| 844 GLint x, | 1163 GLint x, |
| 845 GLint y, | 1164 GLint y, |
| 846 GLsizei width, | 1165 GLsizei width, |
| 847 GLsizei height) { | 1166 GLsizei height) { |
| 1167 std::vector<GLenum> attachments_copy(attachments, attachments + count); | |
| 1168 glInvalidateSubFramebuffer(target, count, attachments_copy.data(), x, y, | |
| 1169 width, height); | |
| 848 return error::kNoError; | 1170 return error::kNoError; |
| 849 } | 1171 } |
| 850 | 1172 |
| 851 error::Error GLES2DecoderPassthroughImpl::DoIsBuffer(GLuint buffer, | 1173 error::Error GLES2DecoderPassthroughImpl::DoIsBuffer(GLuint buffer, |
| 852 uint32_t* result) { | 1174 uint32_t* result) { |
| 1175 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1176 *result = glIsBuffer(resources_->buffer_id_map.GetServiceIDOrReserve(buffer)); | |
| 853 return error::kNoError; | 1177 return error::kNoError; |
| 854 } | 1178 } |
| 855 | 1179 |
| 856 error::Error GLES2DecoderPassthroughImpl::DoIsEnabled(GLenum cap, | 1180 error::Error GLES2DecoderPassthroughImpl::DoIsEnabled(GLenum cap, |
| 857 uint32_t* result) { | 1181 uint32_t* result) { |
| 1182 *result = glIsEnabled(cap); | |
| 858 return error::kNoError; | 1183 return error::kNoError; |
| 859 } | 1184 } |
| 860 | 1185 |
| 861 error::Error GLES2DecoderPassthroughImpl::DoIsFramebuffer(GLuint framebuffer, | 1186 error::Error GLES2DecoderPassthroughImpl::DoIsFramebuffer(GLuint framebuffer, |
| 862 uint32_t* result) { | 1187 uint32_t* result) { |
| 1188 *result = glIsFramebufferEXT( | |
| 1189 framebuffer_id_map_.GetServiceIDOrReserve(framebuffer)); | |
| 863 return error::kNoError; | 1190 return error::kNoError; |
| 864 } | 1191 } |
| 865 | 1192 |
| 866 error::Error GLES2DecoderPassthroughImpl::DoIsProgram(GLuint program, | 1193 error::Error GLES2DecoderPassthroughImpl::DoIsProgram(GLuint program, |
| 867 uint32_t* result) { | 1194 uint32_t* result) { |
| 1195 *result = | |
| 1196 glIsProgram(resources_->program_id_map.GetServiceIDOrReserve(program)); | |
| 868 return error::kNoError; | 1197 return error::kNoError; |
| 869 } | 1198 } |
| 870 | 1199 |
| 871 error::Error GLES2DecoderPassthroughImpl::DoIsRenderbuffer(GLuint renderbuffer, | 1200 error::Error GLES2DecoderPassthroughImpl::DoIsRenderbuffer(GLuint renderbuffer, |
| 872 uint32_t* result) { | 1201 uint32_t* result) { |
| 1202 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1203 *result = glIsRenderbufferEXT( | |
| 1204 resources_->buffer_id_map.GetServiceIDOrReserve(renderbuffer)); | |
| 873 return error::kNoError; | 1205 return error::kNoError; |
| 874 } | 1206 } |
| 875 | 1207 |
| 876 error::Error GLES2DecoderPassthroughImpl::DoIsSampler(GLuint sampler, | 1208 error::Error GLES2DecoderPassthroughImpl::DoIsSampler(GLuint sampler, |
| 877 uint32_t* result) { | 1209 uint32_t* result) { |
| 1210 *result = | |
| 1211 glIsSampler(resources_->sampler_id_map.GetServiceIDOrReserve(sampler)); | |
| 878 return error::kNoError; | 1212 return error::kNoError; |
| 879 } | 1213 } |
| 880 | 1214 |
| 881 error::Error GLES2DecoderPassthroughImpl::DoIsShader(GLuint shader, | 1215 error::Error GLES2DecoderPassthroughImpl::DoIsShader(GLuint shader, |
| 882 uint32_t* result) { | 1216 uint32_t* result) { |
| 1217 *result = glIsShader(resources_->shader_id_map.GetServiceIDOrReserve(shader)); | |
| 883 return error::kNoError; | 1218 return error::kNoError; |
| 884 } | 1219 } |
| 885 | 1220 |
| 886 error::Error GLES2DecoderPassthroughImpl::DoIsSync(GLuint sync, | 1221 error::Error GLES2DecoderPassthroughImpl::DoIsSync(GLuint sync, |
| 887 uint32_t* result) { | 1222 uint32_t* result) { |
| 1223 *result = glIsSync(reinterpret_cast<GLsync>( | |
| 1224 resources_->sync_id_map.GetServiceIDOrReserve(sync))); | |
| 888 return error::kNoError; | 1225 return error::kNoError; |
| 889 } | 1226 } |
| 890 | 1227 |
| 891 error::Error GLES2DecoderPassthroughImpl::DoIsTexture(GLuint texture, | 1228 error::Error GLES2DecoderPassthroughImpl::DoIsTexture(GLuint texture, |
| 892 uint32_t* result) { | 1229 uint32_t* result) { |
| 1230 *result = | |
| 1231 glIsTexture(resources_->texture_id_map.GetServiceIDOrReserve(texture)); | |
| 893 return error::kNoError; | 1232 return error::kNoError; |
| 894 } | 1233 } |
| 895 | 1234 |
| 896 error::Error GLES2DecoderPassthroughImpl::DoIsTransformFeedback( | 1235 error::Error GLES2DecoderPassthroughImpl::DoIsTransformFeedback( |
| 897 GLuint transformfeedback, | 1236 GLuint transformfeedback, |
| 898 uint32_t* result) { | 1237 uint32_t* result) { |
| 1238 *result = glIsTransformFeedback( | |
| 1239 transform_feedback_id_map_.GetServiceIDOrReserve(transformfeedback)); | |
| 899 return error::kNoError; | 1240 return error::kNoError; |
| 900 } | 1241 } |
| 901 | 1242 |
| 902 error::Error GLES2DecoderPassthroughImpl::DoLineWidth(GLfloat width) { | 1243 error::Error GLES2DecoderPassthroughImpl::DoLineWidth(GLfloat width) { |
| 1244 glLineWidth(width); | |
| 903 return error::kNoError; | 1245 return error::kNoError; |
| 904 } | 1246 } |
| 905 | 1247 |
| 906 error::Error GLES2DecoderPassthroughImpl::DoLinkProgram(GLuint program) { | 1248 error::Error GLES2DecoderPassthroughImpl::DoLinkProgram(GLuint program) { |
| 1249 glLinkProgram(resources_->program_id_map.GetServiceIDOrReserve(program)); | |
| 907 return error::kNoError; | 1250 return error::kNoError; |
| 908 } | 1251 } |
| 909 | 1252 |
| 910 error::Error GLES2DecoderPassthroughImpl::DoPauseTransformFeedback() { | 1253 error::Error GLES2DecoderPassthroughImpl::DoPauseTransformFeedback() { |
| 1254 glPauseTransformFeedback(); | |
| 911 return error::kNoError; | 1255 return error::kNoError; |
| 912 } | 1256 } |
| 913 | 1257 |
| 914 error::Error GLES2DecoderPassthroughImpl::DoPixelStorei(GLenum pname, | 1258 error::Error GLES2DecoderPassthroughImpl::DoPixelStorei(GLenum pname, |
| 915 GLint param) { | 1259 GLint param) { |
| 1260 glPixelStorei(pname, param); | |
| 916 return error::kNoError; | 1261 return error::kNoError; |
| 917 } | 1262 } |
| 918 | 1263 |
| 919 error::Error GLES2DecoderPassthroughImpl::DoPolygonOffset(GLfloat factor, | 1264 error::Error GLES2DecoderPassthroughImpl::DoPolygonOffset(GLfloat factor, |
| 920 GLfloat units) { | 1265 GLfloat units) { |
| 1266 glPolygonOffset(factor, units); | |
| 921 return error::kNoError; | 1267 return error::kNoError; |
| 922 } | 1268 } |
| 923 | 1269 |
| 924 error::Error GLES2DecoderPassthroughImpl::DoReadBuffer(GLenum src) { | 1270 error::Error GLES2DecoderPassthroughImpl::DoReadBuffer(GLenum src) { |
| 1271 glReadBuffer(src); | |
| 925 return error::kNoError; | 1272 return error::kNoError; |
| 926 } | 1273 } |
| 927 | 1274 |
| 928 error::Error GLES2DecoderPassthroughImpl::DoReadPixels(GLint x, | 1275 error::Error GLES2DecoderPassthroughImpl::DoReadPixels(GLint x, |
| 929 GLint y, | 1276 GLint y, |
| 930 GLsizei width, | 1277 GLsizei width, |
| 931 GLsizei height, | 1278 GLsizei height, |
| 932 GLenum format, | 1279 GLenum format, |
| 933 GLenum type, | 1280 GLenum type, |
| 934 GLsizei bufsize, | 1281 GLsizei bufsize, |
| 935 GLsizei* length, | 1282 GLsizei* length, |
| 936 void* pixels) { | 1283 void* pixels) { |
| 1284 glReadPixels(x, y, width, height, format, type, pixels); | |
| 1285 | |
| 1286 // HACK: Calculate the length here without taking into account the unpack | |
| 1287 // parameters. | |
| 1288 // Move into an ANGLE extension. | |
| 1289 size_t componentCount = 4; | |
| 1290 switch (format) { | |
| 1291 case GL_RGBA: | |
| 1292 componentCount = 4; | |
| 1293 break; | |
| 1294 case GL_RGB: | |
| 1295 componentCount = 3; | |
| 1296 break; | |
| 1297 case GL_RG: | |
| 1298 componentCount = 2; | |
| 1299 break; | |
| 1300 case GL_RED: | |
| 1301 componentCount = 1; | |
| 1302 break; | |
| 1303 } | |
| 1304 *length = width * height * componentCount * 4; | |
| 1305 | |
| 937 return error::kNoError; | 1306 return error::kNoError; |
| 938 } | 1307 } |
| 939 | 1308 |
| 940 error::Error GLES2DecoderPassthroughImpl::DoReleaseShaderCompiler() { | 1309 error::Error GLES2DecoderPassthroughImpl::DoReleaseShaderCompiler() { |
| 1310 glReleaseShaderCompiler(); | |
| 941 return error::kNoError; | 1311 return error::kNoError; |
| 942 } | 1312 } |
| 943 | 1313 |
| 944 error::Error GLES2DecoderPassthroughImpl::DoRenderbufferStorage( | 1314 error::Error GLES2DecoderPassthroughImpl::DoRenderbufferStorage( |
| 945 GLenum target, | 1315 GLenum target, |
| 946 GLenum internalformat, | 1316 GLenum internalformat, |
| 947 GLsizei width, | 1317 GLsizei width, |
| 948 GLsizei height) { | 1318 GLsizei height) { |
| 1319 glRenderbufferStorageEXT(target, internalformat, width, height); | |
| 949 return error::kNoError; | 1320 return error::kNoError; |
| 950 } | 1321 } |
| 951 | 1322 |
| 952 error::Error GLES2DecoderPassthroughImpl::DoResumeTransformFeedback() { | 1323 error::Error GLES2DecoderPassthroughImpl::DoResumeTransformFeedback() { |
| 1324 glResumeTransformFeedback(); | |
| 953 return error::kNoError; | 1325 return error::kNoError; |
| 954 } | 1326 } |
| 955 | 1327 |
| 956 error::Error GLES2DecoderPassthroughImpl::DoSampleCoverage(GLclampf value, | 1328 error::Error GLES2DecoderPassthroughImpl::DoSampleCoverage(GLclampf value, |
| 957 GLboolean invert) { | 1329 GLboolean invert) { |
| 1330 glSampleCoverage(value, invert); | |
| 958 return error::kNoError; | 1331 return error::kNoError; |
| 959 } | 1332 } |
| 960 | 1333 |
| 961 error::Error GLES2DecoderPassthroughImpl::DoSamplerParameterf(GLuint sampler, | 1334 error::Error GLES2DecoderPassthroughImpl::DoSamplerParameterf(GLuint sampler, |
| 962 GLenum pname, | 1335 GLenum pname, |
| 963 GLfloat param) { | 1336 GLfloat param) { |
| 1337 glSamplerParameterf(resources_->sampler_id_map.GetServiceIDOrReserve(sampler), | |
| 1338 pname, param); | |
| 964 return error::kNoError; | 1339 return error::kNoError; |
| 965 } | 1340 } |
| 966 | 1341 |
| 967 error::Error GLES2DecoderPassthroughImpl::DoSamplerParameterfv( | 1342 error::Error GLES2DecoderPassthroughImpl::DoSamplerParameterfv( |
| 968 GLuint sampler, | 1343 GLuint sampler, |
| 969 GLenum pname, | 1344 GLenum pname, |
| 970 const volatile GLfloat* params) { | 1345 const volatile GLfloat* params) { |
| 1346 // TODO: new-style setter, needs to make only one copy | |
| 1347 glSamplerParameterfv( | |
| 1348 resources_->sampler_id_map.GetServiceIDOrReserve(sampler), pname, | |
| 1349 const_cast<const GLfloat*>(params)); | |
| 971 return error::kNoError; | 1350 return error::kNoError; |
| 972 } | 1351 } |
| 973 | 1352 |
| 974 error::Error GLES2DecoderPassthroughImpl::DoSamplerParameteri(GLuint sampler, | 1353 error::Error GLES2DecoderPassthroughImpl::DoSamplerParameteri(GLuint sampler, |
| 975 GLenum pname, | 1354 GLenum pname, |
| 976 GLint param) { | 1355 GLint param) { |
| 1356 glSamplerParameteri(resources_->sampler_id_map.GetServiceIDOrReserve(sampler), | |
| 1357 pname, param); | |
| 977 return error::kNoError; | 1358 return error::kNoError; |
| 978 } | 1359 } |
| 979 | 1360 |
| 980 error::Error GLES2DecoderPassthroughImpl::DoSamplerParameteriv( | 1361 error::Error GLES2DecoderPassthroughImpl::DoSamplerParameteriv( |
| 981 GLuint sampler, | 1362 GLuint sampler, |
| 982 GLenum pname, | 1363 GLenum pname, |
| 983 const volatile GLint* params) { | 1364 const volatile GLint* params) { |
| 1365 // TODO: new-style setter, needs to make only one copy | |
| 1366 glSamplerParameteriv( | |
| 1367 resources_->sampler_id_map.GetServiceIDOrReserve(sampler), pname, | |
| 1368 const_cast<const GLint*>(params)); | |
| 984 return error::kNoError; | 1369 return error::kNoError; |
| 985 } | 1370 } |
| 986 | 1371 |
| 987 error::Error GLES2DecoderPassthroughImpl::DoScissor(GLint x, | 1372 error::Error GLES2DecoderPassthroughImpl::DoScissor(GLint x, |
| 988 GLint y, | 1373 GLint y, |
| 989 GLsizei width, | 1374 GLsizei width, |
| 990 GLsizei height) { | 1375 GLsizei height) { |
| 991 glScissor(x, y, width, height); | 1376 glScissor(x, y, width, height); |
| 992 return error::kNoError; | 1377 return error::kNoError; |
| 993 } | 1378 } |
| 994 | 1379 |
| 995 error::Error GLES2DecoderPassthroughImpl::DoShaderBinary(GLsizei n, | 1380 error::Error GLES2DecoderPassthroughImpl::DoShaderBinary(GLsizei n, |
| 996 const GLuint* shaders, | 1381 const GLuint* shaders, |
| 997 GLenum binaryformat, | 1382 GLenum binaryformat, |
| 998 const void* binary, | 1383 const void* binary, |
| 999 GLsizei length) { | 1384 GLsizei length) { |
| 1385 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1000 return error::kNoError; | 1386 return error::kNoError; |
| 1001 } | 1387 } |
| 1002 | 1388 |
| 1003 error::Error GLES2DecoderPassthroughImpl::DoShaderSource(GLuint shader, | 1389 error::Error GLES2DecoderPassthroughImpl::DoShaderSource(GLuint shader, |
| 1004 GLsizei count, | 1390 GLsizei count, |
| 1005 const char** string, | 1391 const char** string, |
| 1006 const GLint* length) { | 1392 const GLint* length) { |
| 1393 glShaderSource(resources_->shader_id_map.GetServiceIDOrReserve(shader), count, | |
| 1394 string, length); | |
| 1007 return error::kNoError; | 1395 return error::kNoError; |
| 1008 } | 1396 } |
| 1009 | 1397 |
| 1010 error::Error GLES2DecoderPassthroughImpl::DoStencilFunc(GLenum func, | 1398 error::Error GLES2DecoderPassthroughImpl::DoStencilFunc(GLenum func, |
| 1011 GLint ref, | 1399 GLint ref, |
| 1012 GLuint mask) { | 1400 GLuint mask) { |
| 1401 glStencilFunc(func, ref, mask); | |
| 1013 return error::kNoError; | 1402 return error::kNoError; |
| 1014 } | 1403 } |
| 1015 | 1404 |
| 1016 error::Error GLES2DecoderPassthroughImpl::DoStencilFuncSeparate(GLenum face, | 1405 error::Error GLES2DecoderPassthroughImpl::DoStencilFuncSeparate(GLenum face, |
| 1017 GLenum func, | 1406 GLenum func, |
| 1018 GLint ref, | 1407 GLint ref, |
| 1019 GLuint mask) { | 1408 GLuint mask) { |
| 1409 glStencilFuncSeparate(face, func, ref, mask); | |
| 1020 return error::kNoError; | 1410 return error::kNoError; |
| 1021 } | 1411 } |
| 1022 | 1412 |
| 1023 error::Error GLES2DecoderPassthroughImpl::DoStencilMask(GLuint mask) { | 1413 error::Error GLES2DecoderPassthroughImpl::DoStencilMask(GLuint mask) { |
| 1414 glStencilMask(mask); | |
| 1024 return error::kNoError; | 1415 return error::kNoError; |
| 1025 } | 1416 } |
| 1026 | 1417 |
| 1027 error::Error GLES2DecoderPassthroughImpl::DoStencilMaskSeparate(GLenum face, | 1418 error::Error GLES2DecoderPassthroughImpl::DoStencilMaskSeparate(GLenum face, |
| 1028 GLuint mask) { | 1419 GLuint mask) { |
| 1420 glStencilMaskSeparate(face, mask); | |
| 1029 return error::kNoError; | 1421 return error::kNoError; |
| 1030 } | 1422 } |
| 1031 | 1423 |
| 1032 error::Error GLES2DecoderPassthroughImpl::DoStencilOp(GLenum fail, | 1424 error::Error GLES2DecoderPassthroughImpl::DoStencilOp(GLenum fail, |
| 1033 GLenum zfail, | 1425 GLenum zfail, |
| 1034 GLenum zpass) { | 1426 GLenum zpass) { |
| 1427 glStencilOp(fail, zfail, zpass); | |
| 1035 return error::kNoError; | 1428 return error::kNoError; |
| 1036 } | 1429 } |
| 1037 | 1430 |
| 1038 error::Error GLES2DecoderPassthroughImpl::DoStencilOpSeparate(GLenum face, | 1431 error::Error GLES2DecoderPassthroughImpl::DoStencilOpSeparate(GLenum face, |
| 1039 GLenum fail, | 1432 GLenum fail, |
| 1040 GLenum zfail, | 1433 GLenum zfail, |
| 1041 GLenum zpass) { | 1434 GLenum zpass) { |
| 1435 glStencilOpSeparate(face, fail, zfail, zpass); | |
| 1042 return error::kNoError; | 1436 return error::kNoError; |
| 1043 } | 1437 } |
| 1044 | 1438 |
| 1045 error::Error GLES2DecoderPassthroughImpl::DoTexImage2D(GLenum target, | 1439 error::Error GLES2DecoderPassthroughImpl::DoTexImage2D(GLenum target, |
| 1046 GLint level, | 1440 GLint level, |
| 1047 GLint internalformat, | 1441 GLint internalformat, |
| 1048 GLsizei width, | 1442 GLsizei width, |
| 1049 GLsizei height, | 1443 GLsizei height, |
| 1050 GLint border, | 1444 GLint border, |
| 1051 GLenum format, | 1445 GLenum format, |
| 1052 GLenum type, | 1446 GLenum type, |
| 1053 GLsizei imagesize, | 1447 GLsizei imagesize, |
| 1054 const void* pixels) { | 1448 const void* pixels) { |
| 1449 // TODO: validate using imagesize | |
| 1450 glTexImage2D(target, level, internalformat, width, height, border, format, | |
| 1451 type, pixels); | |
| 1055 return error::kNoError; | 1452 return error::kNoError; |
| 1056 } | 1453 } |
| 1057 | 1454 |
| 1058 error::Error GLES2DecoderPassthroughImpl::DoTexImage3D(GLenum target, | 1455 error::Error GLES2DecoderPassthroughImpl::DoTexImage3D(GLenum target, |
| 1059 GLint level, | 1456 GLint level, |
| 1060 GLint internalformat, | 1457 GLint internalformat, |
| 1061 GLsizei width, | 1458 GLsizei width, |
| 1062 GLsizei height, | 1459 GLsizei height, |
| 1063 GLsizei depth, | 1460 GLsizei depth, |
| 1064 GLint border, | 1461 GLint border, |
| 1065 GLenum format, | 1462 GLenum format, |
| 1066 GLenum type, | 1463 GLenum type, |
| 1067 GLsizei imagesize, | 1464 GLsizei imagesize, |
| 1068 const void* pixels) { | 1465 const void* pixels) { |
| 1466 // TODO: validate using imagesize | |
| 1467 glTexImage3D(target, level, internalformat, width, height, depth, border, | |
| 1468 format, type, pixels); | |
| 1069 return error::kNoError; | 1469 return error::kNoError; |
| 1070 } | 1470 } |
| 1071 | 1471 |
| 1072 error::Error GLES2DecoderPassthroughImpl::DoTexParameterf(GLenum target, | 1472 error::Error GLES2DecoderPassthroughImpl::DoTexParameterf(GLenum target, |
| 1073 GLenum pname, | 1473 GLenum pname, |
| 1074 GLfloat param) { | 1474 GLfloat param) { |
| 1475 glTexParameterf(target, pname, param); | |
| 1075 return error::kNoError; | 1476 return error::kNoError; |
| 1076 } | 1477 } |
| 1077 | 1478 |
| 1078 error::Error GLES2DecoderPassthroughImpl::DoTexParameterfv( | 1479 error::Error GLES2DecoderPassthroughImpl::DoTexParameterfv( |
| 1079 GLenum target, | 1480 GLenum target, |
| 1080 GLenum pname, | 1481 GLenum pname, |
| 1081 const volatile GLfloat* params) { | 1482 const volatile GLfloat* params) { |
| 1483 // TODO: new-style setter, needs to make only one copy | |
| 1484 glTexParameterfv(target, pname, const_cast<const GLfloat*>(params)); | |
| 1082 return error::kNoError; | 1485 return error::kNoError; |
| 1083 } | 1486 } |
| 1084 | 1487 |
| 1085 error::Error GLES2DecoderPassthroughImpl::DoTexParameteri(GLenum target, | 1488 error::Error GLES2DecoderPassthroughImpl::DoTexParameteri(GLenum target, |
| 1086 GLenum pname, | 1489 GLenum pname, |
| 1087 GLint param) { | 1490 GLint param) { |
| 1088 glTexParameteri(target, pname, param); | 1491 glTexParameteri(target, pname, param); |
| 1089 return error::kNoError; | 1492 return error::kNoError; |
| 1090 } | 1493 } |
| 1091 | 1494 |
| 1092 error::Error GLES2DecoderPassthroughImpl::DoTexParameteriv( | 1495 error::Error GLES2DecoderPassthroughImpl::DoTexParameteriv( |
| 1093 GLenum target, | 1496 GLenum target, |
| 1094 GLenum pname, | 1497 GLenum pname, |
| 1095 const volatile GLint* params) { | 1498 const volatile GLint* params) { |
| 1499 // TODO: new-style setter, needs to make only one copy | |
| 1500 glTexParameteriv(target, pname, const_cast<const GLint*>(params)); | |
| 1096 return error::kNoError; | 1501 return error::kNoError; |
| 1097 } | 1502 } |
| 1098 | 1503 |
| 1099 error::Error GLES2DecoderPassthroughImpl::DoTexStorage3D(GLenum target, | 1504 error::Error GLES2DecoderPassthroughImpl::DoTexStorage3D(GLenum target, |
| 1100 GLsizei levels, | 1505 GLsizei levels, |
| 1101 GLenum internalFormat, | 1506 GLenum internalFormat, |
| 1102 GLsizei width, | 1507 GLsizei width, |
| 1103 GLsizei height, | 1508 GLsizei height, |
| 1104 GLsizei depth) { | 1509 GLsizei depth) { |
| 1510 glTexStorage3D(target, levels, internalFormat, width, height, depth); | |
| 1105 return error::kNoError; | 1511 return error::kNoError; |
| 1106 } | 1512 } |
| 1107 | 1513 |
| 1108 error::Error GLES2DecoderPassthroughImpl::DoTexSubImage2D(GLenum target, | 1514 error::Error GLES2DecoderPassthroughImpl::DoTexSubImage2D(GLenum target, |
| 1109 GLint level, | 1515 GLint level, |
| 1110 GLint xoffset, | 1516 GLint xoffset, |
| 1111 GLint yoffset, | 1517 GLint yoffset, |
| 1112 GLsizei width, | 1518 GLsizei width, |
| 1113 GLsizei height, | 1519 GLsizei height, |
| 1114 GLenum format, | 1520 GLenum format, |
| 1115 GLenum type, | 1521 GLenum type, |
| 1116 GLsizei imagesize, | 1522 GLsizei imagesize, |
| 1117 const void* pixels) { | 1523 const void* pixels) { |
| 1524 // TODO: validate using imagesize | |
| 1525 glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, | |
| 1526 pixels); | |
| 1118 return error::kNoError; | 1527 return error::kNoError; |
| 1119 } | 1528 } |
| 1120 | 1529 |
| 1121 error::Error GLES2DecoderPassthroughImpl::DoTexSubImage3D(GLenum target, | 1530 error::Error GLES2DecoderPassthroughImpl::DoTexSubImage3D(GLenum target, |
| 1122 GLint level, | 1531 GLint level, |
| 1123 GLint xoffset, | 1532 GLint xoffset, |
| 1124 GLint yoffset, | 1533 GLint yoffset, |
| 1125 GLint zoffset, | 1534 GLint zoffset, |
| 1126 GLsizei width, | 1535 GLsizei width, |
| 1127 GLsizei height, | 1536 GLsizei height, |
| 1128 GLsizei depth, | 1537 GLsizei depth, |
| 1129 GLenum format, | 1538 GLenum format, |
| 1130 GLenum type, | 1539 GLenum type, |
| 1131 GLsizei imagesize, | 1540 GLsizei imagesize, |
| 1132 const void* pixels) { | 1541 const void* pixels) { |
| 1542 // TODO: validate using imagesize | |
| 1543 glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, | |
| 1544 depth, format, type, pixels); | |
| 1133 return error::kNoError; | 1545 return error::kNoError; |
| 1134 } | 1546 } |
| 1135 | 1547 |
| 1136 error::Error GLES2DecoderPassthroughImpl::DoTransformFeedbackVaryings( | 1548 error::Error GLES2DecoderPassthroughImpl::DoTransformFeedbackVaryings( |
| 1137 GLuint program, | 1549 GLuint program, |
| 1138 GLsizei count, | 1550 GLsizei count, |
| 1139 const char** varyings, | 1551 const char** varyings, |
| 1140 GLenum buffermode) { | 1552 GLenum buffermode) { |
| 1553 glTransformFeedbackVaryings( | |
| 1554 resources_->program_id_map.GetServiceIDOrReserve(program), count, | |
| 1555 varyings, buffermode); | |
| 1141 return error::kNoError; | 1556 return error::kNoError; |
| 1142 } | 1557 } |
| 1143 | 1558 |
| 1144 error::Error GLES2DecoderPassthroughImpl::DoUniform1f(GLint location, | 1559 error::Error GLES2DecoderPassthroughImpl::DoUniform1f(GLint location, |
| 1145 GLfloat x) { | 1560 GLfloat x) { |
| 1561 glUniform1f(location, x); | |
| 1146 return error::kNoError; | 1562 return error::kNoError; |
| 1147 } | 1563 } |
| 1148 | 1564 |
| 1149 error::Error GLES2DecoderPassthroughImpl::DoUniform1fv( | 1565 error::Error GLES2DecoderPassthroughImpl::DoUniform1fv( |
| 1150 GLint location, | 1566 GLint location, |
| 1151 GLsizei count, | 1567 GLsizei count, |
| 1152 const volatile GLfloat* v) { | 1568 const volatile GLfloat* v) { |
| 1569 glUniform1fv(location, count, const_cast<const GLfloat*>(v)); | |
| 1153 return error::kNoError; | 1570 return error::kNoError; |
| 1154 } | 1571 } |
| 1155 | 1572 |
| 1156 error::Error GLES2DecoderPassthroughImpl::DoUniform1i(GLint location, GLint x) { | 1573 error::Error GLES2DecoderPassthroughImpl::DoUniform1i(GLint location, GLint x) { |
| 1574 glUniform1i(location, x); | |
| 1157 return error::kNoError; | 1575 return error::kNoError; |
| 1158 } | 1576 } |
| 1159 | 1577 |
| 1160 error::Error GLES2DecoderPassthroughImpl::DoUniform1iv( | 1578 error::Error GLES2DecoderPassthroughImpl::DoUniform1iv( |
| 1161 GLint location, | 1579 GLint location, |
| 1162 GLsizei count, | 1580 GLsizei count, |
| 1163 const volatile GLint* v) { | 1581 const volatile GLint* v) { |
| 1582 glUniform1iv(location, count, const_cast<const GLint*>(v)); | |
| 1164 return error::kNoError; | 1583 return error::kNoError; |
| 1165 } | 1584 } |
| 1166 | 1585 |
| 1167 error::Error GLES2DecoderPassthroughImpl::DoUniform1ui(GLint location, | 1586 error::Error GLES2DecoderPassthroughImpl::DoUniform1ui(GLint location, |
| 1168 GLuint x) { | 1587 GLuint x) { |
| 1588 glUniform1ui(location, x); | |
| 1169 return error::kNoError; | 1589 return error::kNoError; |
| 1170 } | 1590 } |
| 1171 | 1591 |
| 1172 error::Error GLES2DecoderPassthroughImpl::DoUniform1uiv( | 1592 error::Error GLES2DecoderPassthroughImpl::DoUniform1uiv( |
| 1173 GLint location, | 1593 GLint location, |
| 1174 GLsizei count, | 1594 GLsizei count, |
| 1175 const volatile GLuint* v) { | 1595 const volatile GLuint* v) { |
| 1596 glUniform1uiv(location, count, const_cast<const GLuint*>(v)); | |
| 1176 return error::kNoError; | 1597 return error::kNoError; |
| 1177 } | 1598 } |
| 1178 | 1599 |
| 1179 error::Error GLES2DecoderPassthroughImpl::DoUniform2f(GLint location, | 1600 error::Error GLES2DecoderPassthroughImpl::DoUniform2f(GLint location, |
| 1180 GLfloat x, | 1601 GLfloat x, |
| 1181 GLfloat y) { | 1602 GLfloat y) { |
| 1603 glUniform2f(location, x, y); | |
| 1182 return error::kNoError; | 1604 return error::kNoError; |
| 1183 } | 1605 } |
| 1184 | 1606 |
| 1185 error::Error GLES2DecoderPassthroughImpl::DoUniform2fv( | 1607 error::Error GLES2DecoderPassthroughImpl::DoUniform2fv( |
| 1186 GLint location, | 1608 GLint location, |
| 1187 GLsizei count, | 1609 GLsizei count, |
| 1188 const volatile GLfloat* v) { | 1610 const volatile GLfloat* v) { |
| 1611 glUniform2fv(location, count, const_cast<const GLfloat*>(v)); | |
| 1189 return error::kNoError; | 1612 return error::kNoError; |
| 1190 } | 1613 } |
| 1191 | 1614 |
| 1192 error::Error GLES2DecoderPassthroughImpl::DoUniform2i(GLint location, | 1615 error::Error GLES2DecoderPassthroughImpl::DoUniform2i(GLint location, |
| 1193 GLint x, | 1616 GLint x, |
| 1194 GLint y) { | 1617 GLint y) { |
| 1618 glUniform2i(location, x, y); | |
| 1195 return error::kNoError; | 1619 return error::kNoError; |
| 1196 } | 1620 } |
| 1197 | 1621 |
| 1198 error::Error GLES2DecoderPassthroughImpl::DoUniform2iv( | 1622 error::Error GLES2DecoderPassthroughImpl::DoUniform2iv( |
| 1199 GLint location, | 1623 GLint location, |
| 1200 GLsizei count, | 1624 GLsizei count, |
| 1201 const volatile GLint* v) { | 1625 const volatile GLint* v) { |
| 1626 glUniform2iv(location, count, const_cast<const GLint*>(v)); | |
| 1202 return error::kNoError; | 1627 return error::kNoError; |
| 1203 } | 1628 } |
| 1204 | 1629 |
| 1205 error::Error GLES2DecoderPassthroughImpl::DoUniform2ui(GLint location, | 1630 error::Error GLES2DecoderPassthroughImpl::DoUniform2ui(GLint location, |
| 1206 GLuint x, | 1631 GLuint x, |
| 1207 GLuint y) { | 1632 GLuint y) { |
| 1633 glUniform2ui(location, x, y); | |
| 1208 return error::kNoError; | 1634 return error::kNoError; |
| 1209 } | 1635 } |
| 1210 | 1636 |
| 1211 error::Error GLES2DecoderPassthroughImpl::DoUniform2uiv( | 1637 error::Error GLES2DecoderPassthroughImpl::DoUniform2uiv( |
| 1212 GLint location, | 1638 GLint location, |
| 1213 GLsizei count, | 1639 GLsizei count, |
| 1214 const volatile GLuint* v) { | 1640 const volatile GLuint* v) { |
| 1641 glUniform2uiv(location, count, const_cast<const GLuint*>(v)); | |
| 1215 return error::kNoError; | 1642 return error::kNoError; |
| 1216 } | 1643 } |
| 1217 | 1644 |
| 1218 error::Error GLES2DecoderPassthroughImpl::DoUniform3f(GLint location, | 1645 error::Error GLES2DecoderPassthroughImpl::DoUniform3f(GLint location, |
| 1219 GLfloat x, | 1646 GLfloat x, |
| 1220 GLfloat y, | 1647 GLfloat y, |
| 1221 GLfloat z) { | 1648 GLfloat z) { |
| 1649 glUniform3f(location, x, y, z); | |
| 1222 return error::kNoError; | 1650 return error::kNoError; |
| 1223 } | 1651 } |
| 1224 | 1652 |
| 1225 error::Error GLES2DecoderPassthroughImpl::DoUniform3fv( | 1653 error::Error GLES2DecoderPassthroughImpl::DoUniform3fv( |
| 1226 GLint location, | 1654 GLint location, |
| 1227 GLsizei count, | 1655 GLsizei count, |
| 1228 const volatile GLfloat* v) { | 1656 const volatile GLfloat* v) { |
| 1657 glUniform3fv(location, count, const_cast<const GLfloat*>(v)); | |
| 1229 return error::kNoError; | 1658 return error::kNoError; |
| 1230 } | 1659 } |
| 1231 | 1660 |
| 1232 error::Error GLES2DecoderPassthroughImpl::DoUniform3i(GLint location, | 1661 error::Error GLES2DecoderPassthroughImpl::DoUniform3i(GLint location, |
| 1233 GLint x, | 1662 GLint x, |
| 1234 GLint y, | 1663 GLint y, |
| 1235 GLint z) { | 1664 GLint z) { |
| 1665 glUniform3i(location, x, y, z); | |
| 1236 return error::kNoError; | 1666 return error::kNoError; |
| 1237 } | 1667 } |
| 1238 | 1668 |
| 1239 error::Error GLES2DecoderPassthroughImpl::DoUniform3iv( | 1669 error::Error GLES2DecoderPassthroughImpl::DoUniform3iv( |
| 1240 GLint location, | 1670 GLint location, |
| 1241 GLsizei count, | 1671 GLsizei count, |
| 1242 const volatile GLint* v) { | 1672 const volatile GLint* v) { |
| 1673 glUniform3iv(location, count, const_cast<const GLint*>(v)); | |
| 1243 return error::kNoError; | 1674 return error::kNoError; |
| 1244 } | 1675 } |
| 1245 | 1676 |
| 1246 error::Error GLES2DecoderPassthroughImpl::DoUniform3ui(GLint location, | 1677 error::Error GLES2DecoderPassthroughImpl::DoUniform3ui(GLint location, |
| 1247 GLuint x, | 1678 GLuint x, |
| 1248 GLuint y, | 1679 GLuint y, |
| 1249 GLuint z) { | 1680 GLuint z) { |
| 1681 glUniform3ui(location, x, y, z); | |
| 1250 return error::kNoError; | 1682 return error::kNoError; |
| 1251 } | 1683 } |
| 1252 | 1684 |
| 1253 error::Error GLES2DecoderPassthroughImpl::DoUniform3uiv( | 1685 error::Error GLES2DecoderPassthroughImpl::DoUniform3uiv( |
| 1254 GLint location, | 1686 GLint location, |
| 1255 GLsizei count, | 1687 GLsizei count, |
| 1256 const volatile GLuint* v) { | 1688 const volatile GLuint* v) { |
| 1689 glUniform3uiv(location, count, const_cast<const GLuint*>(v)); | |
| 1257 return error::kNoError; | 1690 return error::kNoError; |
| 1258 } | 1691 } |
| 1259 | 1692 |
| 1260 error::Error GLES2DecoderPassthroughImpl::DoUniform4f(GLint location, | 1693 error::Error GLES2DecoderPassthroughImpl::DoUniform4f(GLint location, |
| 1261 GLfloat x, | 1694 GLfloat x, |
| 1262 GLfloat y, | 1695 GLfloat y, |
| 1263 GLfloat z, | 1696 GLfloat z, |
| 1264 GLfloat w) { | 1697 GLfloat w) { |
| 1698 glUniform4f(location, x, y, z, w); | |
| 1265 return error::kNoError; | 1699 return error::kNoError; |
| 1266 } | 1700 } |
| 1267 | 1701 |
| 1268 error::Error GLES2DecoderPassthroughImpl::DoUniform4fv( | 1702 error::Error GLES2DecoderPassthroughImpl::DoUniform4fv( |
| 1269 GLint location, | 1703 GLint location, |
| 1270 GLsizei count, | 1704 GLsizei count, |
| 1271 const volatile GLfloat* v) { | 1705 const volatile GLfloat* v) { |
| 1706 glUniform4fv(location, count, const_cast<const GLfloat*>(v)); | |
| 1272 return error::kNoError; | 1707 return error::kNoError; |
| 1273 } | 1708 } |
| 1274 | 1709 |
| 1275 error::Error GLES2DecoderPassthroughImpl::DoUniform4i(GLint location, | 1710 error::Error GLES2DecoderPassthroughImpl::DoUniform4i(GLint location, |
| 1276 GLint x, | 1711 GLint x, |
| 1277 GLint y, | 1712 GLint y, |
| 1278 GLint z, | 1713 GLint z, |
| 1279 GLint w) { | 1714 GLint w) { |
| 1715 glUniform4i(location, x, y, z, w); | |
| 1280 return error::kNoError; | 1716 return error::kNoError; |
| 1281 } | 1717 } |
| 1282 | 1718 |
| 1283 error::Error GLES2DecoderPassthroughImpl::DoUniform4iv( | 1719 error::Error GLES2DecoderPassthroughImpl::DoUniform4iv( |
| 1284 GLint location, | 1720 GLint location, |
| 1285 GLsizei count, | 1721 GLsizei count, |
| 1286 const volatile GLint* v) { | 1722 const volatile GLint* v) { |
| 1723 glUniform4iv(location, count, const_cast<const GLint*>(v)); | |
| 1287 return error::kNoError; | 1724 return error::kNoError; |
| 1288 } | 1725 } |
| 1289 | 1726 |
| 1290 error::Error GLES2DecoderPassthroughImpl::DoUniform4ui(GLint location, | 1727 error::Error GLES2DecoderPassthroughImpl::DoUniform4ui(GLint location, |
| 1291 GLuint x, | 1728 GLuint x, |
| 1292 GLuint y, | 1729 GLuint y, |
| 1293 GLuint z, | 1730 GLuint z, |
| 1294 GLuint w) { | 1731 GLuint w) { |
| 1732 glUniform4ui(location, x, y, z, w); | |
| 1295 return error::kNoError; | 1733 return error::kNoError; |
| 1296 } | 1734 } |
| 1297 | 1735 |
| 1298 error::Error GLES2DecoderPassthroughImpl::DoUniform4uiv( | 1736 error::Error GLES2DecoderPassthroughImpl::DoUniform4uiv( |
| 1299 GLint location, | 1737 GLint location, |
| 1300 GLsizei count, | 1738 GLsizei count, |
| 1301 const volatile GLuint* v) { | 1739 const volatile GLuint* v) { |
| 1740 glUniform4uiv(location, count, const_cast<const GLuint*>(v)); | |
| 1302 return error::kNoError; | 1741 return error::kNoError; |
| 1303 } | 1742 } |
| 1304 | 1743 |
| 1305 error::Error GLES2DecoderPassthroughImpl::DoUniformBlockBinding( | 1744 error::Error GLES2DecoderPassthroughImpl::DoUniformBlockBinding( |
| 1306 GLuint program, | 1745 GLuint program, |
| 1307 GLuint index, | 1746 GLuint index, |
| 1308 GLuint binding) { | 1747 GLuint binding) { |
| 1748 glUniformBlockBinding( | |
| 1749 resources_->program_id_map.GetServiceIDOrReserve(program), index, | |
| 1750 binding); | |
| 1309 return error::kNoError; | 1751 return error::kNoError; |
| 1310 } | 1752 } |
| 1311 | 1753 |
| 1312 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix2fv( | 1754 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix2fv( |
| 1313 GLint location, | 1755 GLint location, |
| 1314 GLsizei count, | 1756 GLsizei count, |
| 1315 GLboolean transpose, | 1757 GLboolean transpose, |
| 1316 const volatile GLfloat* value) { | 1758 const volatile GLfloat* value) { |
| 1759 glUniformMatrix2fv(location, count, transpose, | |
| 1760 const_cast<const GLfloat*>(value)); | |
| 1317 return error::kNoError; | 1761 return error::kNoError; |
| 1318 } | 1762 } |
| 1319 | 1763 |
| 1320 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix2x3fv( | 1764 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix2x3fv( |
| 1321 GLint location, | 1765 GLint location, |
| 1322 GLsizei count, | 1766 GLsizei count, |
| 1323 GLboolean transpose, | 1767 GLboolean transpose, |
| 1324 const volatile GLfloat* value) { | 1768 const volatile GLfloat* value) { |
| 1769 glUniformMatrix2x3fv(location, count, transpose, | |
| 1770 const_cast<const GLfloat*>(value)); | |
| 1325 return error::kNoError; | 1771 return error::kNoError; |
| 1326 } | 1772 } |
| 1327 | 1773 |
| 1328 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix2x4fv( | 1774 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix2x4fv( |
| 1329 GLint location, | 1775 GLint location, |
| 1330 GLsizei count, | 1776 GLsizei count, |
| 1331 GLboolean transpose, | 1777 GLboolean transpose, |
| 1332 const volatile GLfloat* value) { | 1778 const volatile GLfloat* value) { |
| 1779 glUniformMatrix2x4fv(location, count, transpose, | |
| 1780 const_cast<const GLfloat*>(value)); | |
| 1333 return error::kNoError; | 1781 return error::kNoError; |
| 1334 } | 1782 } |
| 1335 | 1783 |
| 1336 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix3fv( | 1784 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix3fv( |
| 1337 GLint location, | 1785 GLint location, |
| 1338 GLsizei count, | 1786 GLsizei count, |
| 1339 GLboolean transpose, | 1787 GLboolean transpose, |
| 1340 const volatile GLfloat* value) { | 1788 const volatile GLfloat* value) { |
| 1789 glUniformMatrix3fv(location, count, transpose, | |
| 1790 const_cast<const GLfloat*>(value)); | |
| 1341 return error::kNoError; | 1791 return error::kNoError; |
| 1342 } | 1792 } |
| 1343 | 1793 |
| 1344 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix3x2fv( | 1794 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix3x2fv( |
| 1345 GLint location, | 1795 GLint location, |
| 1346 GLsizei count, | 1796 GLsizei count, |
| 1347 GLboolean transpose, | 1797 GLboolean transpose, |
| 1348 const volatile GLfloat* value) { | 1798 const volatile GLfloat* value) { |
| 1799 glUniformMatrix3x2fv(location, count, transpose, | |
| 1800 const_cast<const GLfloat*>(value)); | |
| 1349 return error::kNoError; | 1801 return error::kNoError; |
| 1350 } | 1802 } |
| 1351 | 1803 |
| 1352 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix3x4fv( | 1804 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix3x4fv( |
| 1353 GLint location, | 1805 GLint location, |
| 1354 GLsizei count, | 1806 GLsizei count, |
| 1355 GLboolean transpose, | 1807 GLboolean transpose, |
| 1356 const volatile GLfloat* value) { | 1808 const volatile GLfloat* value) { |
| 1809 glUniformMatrix3x4fv(location, count, transpose, | |
| 1810 const_cast<const GLfloat*>(value)); | |
| 1357 return error::kNoError; | 1811 return error::kNoError; |
| 1358 } | 1812 } |
| 1359 | 1813 |
| 1360 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix4fv( | 1814 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix4fv( |
| 1361 GLint location, | 1815 GLint location, |
| 1362 GLsizei count, | 1816 GLsizei count, |
| 1363 GLboolean transpose, | 1817 GLboolean transpose, |
| 1364 const volatile GLfloat* value) { | 1818 const volatile GLfloat* value) { |
| 1819 glUniformMatrix4fv(location, count, transpose, | |
| 1820 const_cast<const GLfloat*>(value)); | |
| 1365 return error::kNoError; | 1821 return error::kNoError; |
| 1366 } | 1822 } |
| 1367 | 1823 |
| 1368 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix4x2fv( | 1824 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix4x2fv( |
| 1369 GLint location, | 1825 GLint location, |
| 1370 GLsizei count, | 1826 GLsizei count, |
| 1371 GLboolean transpose, | 1827 GLboolean transpose, |
| 1372 const volatile GLfloat* value) { | 1828 const volatile GLfloat* value) { |
| 1829 glUniformMatrix4x2fv(location, count, transpose, | |
| 1830 const_cast<const GLfloat*>(value)); | |
| 1373 return error::kNoError; | 1831 return error::kNoError; |
| 1374 } | 1832 } |
| 1375 | 1833 |
| 1376 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix4x3fv( | 1834 error::Error GLES2DecoderPassthroughImpl::DoUniformMatrix4x3fv( |
| 1377 GLint location, | 1835 GLint location, |
| 1378 GLsizei count, | 1836 GLsizei count, |
| 1379 GLboolean transpose, | 1837 GLboolean transpose, |
| 1380 const volatile GLfloat* value) { | 1838 const volatile GLfloat* value) { |
| 1839 glUniformMatrix4x3fv(location, count, transpose, | |
| 1840 const_cast<const GLfloat*>(value)); | |
| 1381 return error::kNoError; | 1841 return error::kNoError; |
| 1382 } | 1842 } |
| 1383 | 1843 |
| 1384 error::Error GLES2DecoderPassthroughImpl::DoUseProgram(GLuint program) { | 1844 error::Error GLES2DecoderPassthroughImpl::DoUseProgram(GLuint program) { |
| 1845 glUseProgram(resources_->program_id_map.GetServiceIDOrReserve(program)); | |
| 1385 return error::kNoError; | 1846 return error::kNoError; |
| 1386 } | 1847 } |
| 1387 | 1848 |
| 1388 error::Error GLES2DecoderPassthroughImpl::DoValidateProgram(GLuint program) { | 1849 error::Error GLES2DecoderPassthroughImpl::DoValidateProgram(GLuint program) { |
| 1850 glValidateProgram(resources_->program_id_map.GetServiceIDOrReserve(program)); | |
| 1389 return error::kNoError; | 1851 return error::kNoError; |
| 1390 } | 1852 } |
| 1391 | 1853 |
| 1392 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib1f(GLuint indx, | 1854 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib1f(GLuint indx, |
| 1393 GLfloat x) { | 1855 GLfloat x) { |
| 1856 glVertexAttrib1f(indx, x); | |
| 1394 return error::kNoError; | 1857 return error::kNoError; |
| 1395 } | 1858 } |
| 1396 | 1859 |
| 1397 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib1fv( | 1860 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib1fv( |
| 1398 GLuint indx, | 1861 GLuint indx, |
| 1399 const volatile GLfloat* values) { | 1862 const volatile GLfloat* values) { |
| 1863 glVertexAttrib1fv(indx, const_cast<const GLfloat*>(values)); | |
| 1400 return error::kNoError; | 1864 return error::kNoError; |
| 1401 } | 1865 } |
| 1402 | 1866 |
| 1403 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib2f(GLuint indx, | 1867 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib2f(GLuint indx, |
| 1404 GLfloat x, | 1868 GLfloat x, |
| 1405 GLfloat y) { | 1869 GLfloat y) { |
| 1870 glVertexAttrib2f(indx, x, y); | |
| 1406 return error::kNoError; | 1871 return error::kNoError; |
| 1407 } | 1872 } |
| 1408 | 1873 |
| 1409 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib2fv( | 1874 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib2fv( |
| 1410 GLuint indx, | 1875 GLuint indx, |
| 1411 const volatile GLfloat* values) { | 1876 const volatile GLfloat* values) { |
| 1877 glVertexAttrib2fv(indx, const_cast<const GLfloat*>(values)); | |
| 1412 return error::kNoError; | 1878 return error::kNoError; |
| 1413 } | 1879 } |
| 1414 | 1880 |
| 1415 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib3f(GLuint indx, | 1881 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib3f(GLuint indx, |
| 1416 GLfloat x, | 1882 GLfloat x, |
| 1417 GLfloat y, | 1883 GLfloat y, |
| 1418 GLfloat z) { | 1884 GLfloat z) { |
| 1885 glVertexAttrib3f(indx, x, y, z); | |
| 1419 return error::kNoError; | 1886 return error::kNoError; |
| 1420 } | 1887 } |
| 1421 | 1888 |
| 1422 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib3fv( | 1889 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib3fv( |
| 1423 GLuint indx, | 1890 GLuint indx, |
| 1424 const volatile GLfloat* values) { | 1891 const volatile GLfloat* values) { |
| 1892 glVertexAttrib3fv(indx, const_cast<const GLfloat*>(values)); | |
| 1425 return error::kNoError; | 1893 return error::kNoError; |
| 1426 } | 1894 } |
| 1427 | 1895 |
| 1428 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib4f(GLuint indx, | 1896 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib4f(GLuint indx, |
| 1429 GLfloat x, | 1897 GLfloat x, |
| 1430 GLfloat y, | 1898 GLfloat y, |
| 1431 GLfloat z, | 1899 GLfloat z, |
| 1432 GLfloat w) { | 1900 GLfloat w) { |
| 1901 glVertexAttrib4f(indx, x, y, z, w); | |
| 1433 return error::kNoError; | 1902 return error::kNoError; |
| 1434 } | 1903 } |
| 1435 | 1904 |
| 1436 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib4fv( | 1905 error::Error GLES2DecoderPassthroughImpl::DoVertexAttrib4fv( |
| 1437 GLuint indx, | 1906 GLuint indx, |
| 1438 const volatile GLfloat* values) { | 1907 const volatile GLfloat* values) { |
| 1908 glVertexAttrib4fv(indx, const_cast<const GLfloat*>(values)); | |
| 1439 return error::kNoError; | 1909 return error::kNoError; |
| 1440 } | 1910 } |
| 1441 | 1911 |
| 1442 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribI4i(GLuint indx, | 1912 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribI4i(GLuint indx, |
| 1443 GLint x, | 1913 GLint x, |
| 1444 GLint y, | 1914 GLint y, |
| 1445 GLint z, | 1915 GLint z, |
| 1446 GLint w) { | 1916 GLint w) { |
| 1917 glVertexAttribI4i(indx, x, y, z, w); | |
| 1447 return error::kNoError; | 1918 return error::kNoError; |
| 1448 } | 1919 } |
| 1449 | 1920 |
| 1450 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribI4iv( | 1921 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribI4iv( |
| 1451 GLuint indx, | 1922 GLuint indx, |
| 1452 const volatile GLint* values) { | 1923 const volatile GLint* values) { |
| 1924 glVertexAttribI4iv(indx, const_cast<const GLint*>(values)); | |
| 1453 return error::kNoError; | 1925 return error::kNoError; |
| 1454 } | 1926 } |
| 1455 | 1927 |
| 1456 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribI4ui(GLuint indx, | 1928 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribI4ui(GLuint indx, |
| 1457 GLuint x, | 1929 GLuint x, |
| 1458 GLuint y, | 1930 GLuint y, |
| 1459 GLuint z, | 1931 GLuint z, |
| 1460 GLuint w) { | 1932 GLuint w) { |
| 1933 glVertexAttribI4ui(indx, x, y, z, w); | |
| 1461 return error::kNoError; | 1934 return error::kNoError; |
| 1462 } | 1935 } |
| 1463 | 1936 |
| 1464 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribI4uiv( | 1937 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribI4uiv( |
| 1465 GLuint indx, | 1938 GLuint indx, |
| 1466 const volatile GLuint* values) { | 1939 const volatile GLuint* values) { |
| 1940 glVertexAttribI4uiv(indx, const_cast<const GLuint*>(values)); | |
| 1467 return error::kNoError; | 1941 return error::kNoError; |
| 1468 } | 1942 } |
| 1469 | 1943 |
| 1470 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribIPointer( | 1944 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribIPointer( |
| 1471 GLuint indx, | 1945 GLuint indx, |
| 1472 GLint size, | 1946 GLint size, |
| 1473 GLenum type, | 1947 GLenum type, |
| 1474 GLsizei stride, | 1948 GLsizei stride, |
| 1475 const void* ptr) { | 1949 const void* ptr) { |
| 1950 glVertexAttribIPointer(indx, size, type, stride, ptr); | |
| 1476 return error::kNoError; | 1951 return error::kNoError; |
| 1477 } | 1952 } |
| 1478 | 1953 |
| 1479 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribPointer( | 1954 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribPointer( |
| 1480 GLuint indx, | 1955 GLuint indx, |
| 1481 GLint size, | 1956 GLint size, |
| 1482 GLenum type, | 1957 GLenum type, |
| 1483 GLboolean normalized, | 1958 GLboolean normalized, |
| 1484 GLsizei stride, | 1959 GLsizei stride, |
| 1485 const void* ptr) { | 1960 const void* ptr) { |
| 1961 glVertexAttribPointer(indx, size, type, normalized, stride, ptr); | |
| 1486 return error::kNoError; | 1962 return error::kNoError; |
| 1487 } | 1963 } |
| 1488 | 1964 |
| 1489 error::Error GLES2DecoderPassthroughImpl::DoViewport(GLint x, | 1965 error::Error GLES2DecoderPassthroughImpl::DoViewport(GLint x, |
| 1490 GLint y, | 1966 GLint y, |
| 1491 GLsizei width, | 1967 GLsizei width, |
| 1492 GLsizei height) { | 1968 GLsizei height) { |
| 1969 glViewport(x, y, width, height); | |
| 1493 return error::kNoError; | 1970 return error::kNoError; |
| 1494 } | 1971 } |
| 1495 | 1972 |
| 1496 error::Error GLES2DecoderPassthroughImpl::DoWaitSync(GLuint sync, | 1973 error::Error GLES2DecoderPassthroughImpl::DoWaitSync(GLuint sync, |
| 1497 GLbitfield flags, | 1974 GLbitfield flags, |
| 1498 GLuint64 timeout) { | 1975 GLuint64 timeout) { |
| 1976 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1499 return error::kNoError; | 1977 return error::kNoError; |
| 1500 } | 1978 } |
| 1501 | 1979 |
| 1502 error::Error GLES2DecoderPassthroughImpl::DoBlitFramebufferCHROMIUM( | 1980 error::Error GLES2DecoderPassthroughImpl::DoBlitFramebufferCHROMIUM( |
| 1503 GLint srcX0, | 1981 GLint srcX0, |
| 1504 GLint srcY0, | 1982 GLint srcY0, |
| 1505 GLint srcX1, | 1983 GLint srcX1, |
| 1506 GLint srcY1, | 1984 GLint srcY1, |
| 1507 GLint dstX0, | 1985 GLint dstX0, |
| 1508 GLint dstY0, | 1986 GLint dstY0, |
| 1509 GLint dstX1, | 1987 GLint dstX1, |
| 1510 GLint dstY1, | 1988 GLint dstY1, |
| 1511 GLbitfield mask, | 1989 GLbitfield mask, |
| 1512 GLenum filter) { | 1990 GLenum filter) { |
| 1991 glBlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, | |
| 1992 mask, filter); | |
| 1513 return error::kNoError; | 1993 return error::kNoError; |
| 1514 } | 1994 } |
| 1515 | 1995 |
| 1516 error::Error | 1996 error::Error |
| 1517 GLES2DecoderPassthroughImpl::DoRenderbufferStorageMultisampleCHROMIUM( | 1997 GLES2DecoderPassthroughImpl::DoRenderbufferStorageMultisampleCHROMIUM( |
| 1518 GLenum target, | 1998 GLenum target, |
| 1519 GLsizei samples, | 1999 GLsizei samples, |
| 1520 GLenum internalformat, | 2000 GLenum internalformat, |
| 1521 GLsizei width, | 2001 GLsizei width, |
| 1522 GLsizei height) { | 2002 GLsizei height) { |
| 2003 glRenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, | |
| 2004 height); | |
| 1523 return error::kNoError; | 2005 return error::kNoError; |
| 1524 } | 2006 } |
| 1525 | 2007 |
| 1526 error::Error GLES2DecoderPassthroughImpl::DoRenderbufferStorageMultisampleEXT( | 2008 error::Error GLES2DecoderPassthroughImpl::DoRenderbufferStorageMultisampleEXT( |
| 1527 GLenum target, | 2009 GLenum target, |
| 1528 GLsizei samples, | 2010 GLsizei samples, |
| 1529 GLenum internalformat, | 2011 GLenum internalformat, |
| 1530 GLsizei width, | 2012 GLsizei width, |
| 1531 GLsizei height) { | 2013 GLsizei height) { |
| 2014 glRenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, | |
| 2015 height); | |
| 1532 return error::kNoError; | 2016 return error::kNoError; |
| 1533 } | 2017 } |
| 1534 | 2018 |
| 1535 error::Error GLES2DecoderPassthroughImpl::DoFramebufferTexture2DMultisampleEXT( | 2019 error::Error GLES2DecoderPassthroughImpl::DoFramebufferTexture2DMultisampleEXT( |
| 1536 GLenum target, | 2020 GLenum target, |
| 1537 GLenum attachment, | 2021 GLenum attachment, |
| 1538 GLenum textarget, | 2022 GLenum textarget, |
| 1539 GLuint texture, | 2023 GLuint texture, |
| 1540 GLint level, | 2024 GLint level, |
| 1541 GLsizei samples) { | 2025 GLsizei samples) { |
| 2026 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1542 return error::kNoError; | 2027 return error::kNoError; |
| 1543 } | 2028 } |
| 1544 | 2029 |
| 1545 error::Error GLES2DecoderPassthroughImpl::DoTexStorage2DEXT( | 2030 error::Error GLES2DecoderPassthroughImpl::DoTexStorage2DEXT( |
| 1546 GLenum target, | 2031 GLenum target, |
| 1547 GLsizei levels, | 2032 GLsizei levels, |
| 1548 GLenum internalFormat, | 2033 GLenum internalFormat, |
| 1549 GLsizei width, | 2034 GLsizei width, |
| 1550 GLsizei height) { | 2035 GLsizei height) { |
| 1551 glTexStorage2DEXT(target, levels, internalFormat, width, height); | 2036 glTexStorage2DEXT(target, levels, internalFormat, width, height); |
| 1552 return error::kNoError; | 2037 return error::kNoError; |
| 1553 } | 2038 } |
| 1554 | 2039 |
| 1555 error::Error GLES2DecoderPassthroughImpl::DoGenQueriesEXT( | 2040 error::Error GLES2DecoderPassthroughImpl::DoGenQueriesEXT( |
| 1556 GLsizei n, | 2041 GLsizei n, |
| 1557 volatile GLuint* queries) { | 2042 volatile GLuint* queries) { |
| 1558 return error::kNoError; | 2043 return GenHelper(n, queries, &query_id_map_, [](GLsizei n, GLuint* queries) { |
| 2044 glGenQueries(n, queries); | |
| 2045 }); | |
| 1559 } | 2046 } |
| 1560 | 2047 |
| 1561 error::Error GLES2DecoderPassthroughImpl::DoDeleteQueriesEXT( | 2048 error::Error GLES2DecoderPassthroughImpl::DoDeleteQueriesEXT( |
| 1562 GLsizei n, | 2049 GLsizei n, |
| 1563 const volatile GLuint* queries) { | 2050 const volatile GLuint* queries) { |
| 1564 return error::kNoError; | 2051 return DeleteHelper( |
| 2052 n, queries, &query_id_map_, | |
| 2053 [](GLsizei n, GLuint* queries) { glDeleteQueries(n, queries); }); | |
| 1565 } | 2054 } |
| 1566 | 2055 |
| 1567 error::Error GLES2DecoderPassthroughImpl::DoQueryCounterEXT(GLuint id, | 2056 error::Error GLES2DecoderPassthroughImpl::DoQueryCounterEXT(GLuint id, |
| 1568 GLenum target) { | 2057 GLenum target) { |
| 2058 glQueryCounter(query_id_map_.GetServiceIDOrReserve(id), target); | |
| 1569 return error::kNoError; | 2059 return error::kNoError; |
| 1570 } | 2060 } |
| 1571 | 2061 |
| 1572 error::Error GLES2DecoderPassthroughImpl::DoBeginQueryEXT(GLenum target, | 2062 error::Error GLES2DecoderPassthroughImpl::DoBeginQueryEXT(GLenum target, |
| 1573 GLuint id) { | 2063 GLuint id) { |
| 2064 // TODO: Track active queries | |
| 2065 glBeginQuery(target, query_id_map_.GetServiceIDOrReserve(id)); | |
| 1574 return error::kNoError; | 2066 return error::kNoError; |
| 1575 } | 2067 } |
| 1576 | 2068 |
| 1577 error::Error GLES2DecoderPassthroughImpl::DoBeginTransformFeedback( | 2069 error::Error GLES2DecoderPassthroughImpl::DoBeginTransformFeedback( |
| 1578 GLenum primitivemode) { | 2070 GLenum primitivemode) { |
| 2071 glBeginTransformFeedback(primitivemode); | |
| 1579 return error::kNoError; | 2072 return error::kNoError; |
| 1580 } | 2073 } |
| 1581 | 2074 |
| 1582 error::Error GLES2DecoderPassthroughImpl::DoEndQueryEXT(GLenum target) { | 2075 error::Error GLES2DecoderPassthroughImpl::DoEndQueryEXT(GLenum target) { |
| 2076 // TODO: Track active queries | |
| 2077 glEndQuery(target); | |
| 1583 return error::kNoError; | 2078 return error::kNoError; |
| 1584 } | 2079 } |
| 1585 | 2080 |
| 1586 error::Error GLES2DecoderPassthroughImpl::DoEndTransformFeedback() { | 2081 error::Error GLES2DecoderPassthroughImpl::DoEndTransformFeedback() { |
| 2082 glEndTransformFeedback(); | |
| 1587 return error::kNoError; | 2083 return error::kNoError; |
| 1588 } | 2084 } |
| 1589 | 2085 |
| 1590 error::Error GLES2DecoderPassthroughImpl::DoSetDisjointValueSyncCHROMIUM( | 2086 error::Error GLES2DecoderPassthroughImpl::DoSetDisjointValueSyncCHROMIUM( |
| 1591 DisjointValueSync* sync) { | 2087 DisjointValueSync* sync) { |
| 2088 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1592 return error::kNoError; | 2089 return error::kNoError; |
| 1593 } | 2090 } |
| 1594 | 2091 |
| 1595 error::Error GLES2DecoderPassthroughImpl::DoInsertEventMarkerEXT( | 2092 error::Error GLES2DecoderPassthroughImpl::DoInsertEventMarkerEXT( |
| 1596 GLsizei length, | 2093 GLsizei length, |
| 1597 const char* marker) { | 2094 const char* marker) { |
| 2095 // DCHECK(false) << "UNIMPLEMENTED"; | |
| 1598 return error::kNoError; | 2096 return error::kNoError; |
| 1599 } | 2097 } |
| 1600 | 2098 |
| 1601 error::Error GLES2DecoderPassthroughImpl::DoPushGroupMarkerEXT( | 2099 error::Error GLES2DecoderPassthroughImpl::DoPushGroupMarkerEXT( |
| 1602 GLsizei length, | 2100 GLsizei length, |
| 1603 const char* marker) { | 2101 const char* marker) { |
| 2102 // DCHECK(false) << "UNIMPLEMENTED"; | |
| 1604 return error::kNoError; | 2103 return error::kNoError; |
| 1605 } | 2104 } |
| 1606 | 2105 |
| 1607 error::Error GLES2DecoderPassthroughImpl::DoPopGroupMarkerEXT() { | 2106 error::Error GLES2DecoderPassthroughImpl::DoPopGroupMarkerEXT() { |
| 2107 // DCHECK(false) << "UNIMPLEMENTED"; | |
| 1608 return error::kNoError; | 2108 return error::kNoError; |
| 1609 } | 2109 } |
| 1610 | 2110 |
| 1611 error::Error GLES2DecoderPassthroughImpl::DoGenVertexArraysOES( | 2111 error::Error GLES2DecoderPassthroughImpl::DoGenVertexArraysOES( |
| 1612 GLsizei n, | 2112 GLsizei n, |
| 1613 volatile GLuint* arrays) { | 2113 volatile GLuint* arrays) { |
| 1614 return error::kNoError; | 2114 return GenHelper( |
| 2115 n, arrays, &vertex_array_id_map_, | |
| 2116 [](GLsizei n, GLuint* arrays) { glGenVertexArraysOES(n, arrays); }); | |
| 1615 } | 2117 } |
| 1616 | 2118 |
| 1617 error::Error GLES2DecoderPassthroughImpl::DoDeleteVertexArraysOES( | 2119 error::Error GLES2DecoderPassthroughImpl::DoDeleteVertexArraysOES( |
| 1618 GLsizei n, | 2120 GLsizei n, |
| 1619 const volatile GLuint* arrays) { | 2121 const volatile GLuint* arrays) { |
| 1620 return error::kNoError; | 2122 return DeleteHelper( |
| 2123 n, arrays, &vertex_array_id_map_, | |
| 2124 [](GLsizei n, GLuint* arrays) { glDeleteVertexArraysOES(n, arrays); }); | |
| 1621 } | 2125 } |
| 1622 | 2126 |
| 1623 error::Error GLES2DecoderPassthroughImpl::DoIsVertexArrayOES(GLuint array, | 2127 error::Error GLES2DecoderPassthroughImpl::DoIsVertexArrayOES(GLuint array, |
| 1624 uint32_t* result) { | 2128 uint32_t* result) { |
| 2129 *result = | |
| 2130 glIsVertexArrayOES(vertex_array_id_map_.GetServiceIDOrReserve(array)); | |
| 1625 return error::kNoError; | 2131 return error::kNoError; |
| 1626 } | 2132 } |
| 1627 | 2133 |
| 1628 error::Error GLES2DecoderPassthroughImpl::DoBindVertexArrayOES(GLuint array) { | 2134 error::Error GLES2DecoderPassthroughImpl::DoBindVertexArrayOES(GLuint array) { |
| 2135 glBindVertexArrayOES(vertex_array_id_map_.GetServiceIDOrReserve(array)); | |
| 1629 return error::kNoError; | 2136 return error::kNoError; |
| 1630 } | 2137 } |
| 1631 | 2138 |
| 1632 error::Error GLES2DecoderPassthroughImpl::DoSwapBuffers() { | 2139 error::Error GLES2DecoderPassthroughImpl::DoSwapBuffers() { |
| 2140 gfx::SwapResult result = surface_->SwapBuffers(); | |
| 2141 if (result == gfx::SwapResult::SWAP_FAILED) { | |
| 2142 LOG(ERROR) << "Context lost because SwapBuffers failed."; | |
| 2143 } | |
| 2144 // TODO: force the context loss? | |
| 1633 return error::kNoError; | 2145 return error::kNoError; |
| 1634 } | 2146 } |
| 1635 | 2147 |
| 1636 error::Error GLES2DecoderPassthroughImpl::DoGetMaxValueInBufferCHROMIUM( | 2148 error::Error GLES2DecoderPassthroughImpl::DoGetMaxValueInBufferCHROMIUM( |
| 1637 GLuint buffer_id, | 2149 GLuint buffer_id, |
| 1638 GLsizei count, | 2150 GLsizei count, |
| 1639 GLenum type, | 2151 GLenum type, |
| 1640 GLuint offset, | 2152 GLuint offset, |
| 1641 uint32_t* result) { | 2153 uint32_t* result) { |
| 2154 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1642 return error::kNoError; | 2155 return error::kNoError; |
| 1643 } | 2156 } |
| 1644 | 2157 |
| 1645 error::Error GLES2DecoderPassthroughImpl::DoEnableFeatureCHROMIUM( | 2158 error::Error GLES2DecoderPassthroughImpl::DoEnableFeatureCHROMIUM( |
| 1646 const char* feature) { | 2159 const char* feature) { |
| 2160 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1647 return error::kNoError; | 2161 return error::kNoError; |
| 1648 } | 2162 } |
| 1649 | 2163 |
| 1650 error::Error GLES2DecoderPassthroughImpl::DoMapBufferRange(GLenum target, | 2164 error::Error GLES2DecoderPassthroughImpl::DoMapBufferRange(GLenum target, |
| 1651 GLintptr offset, | 2165 GLintptr offset, |
| 1652 GLsizeiptr size, | 2166 GLsizeiptr size, |
| 1653 GLbitfield access, | 2167 GLbitfield access, |
| 1654 void** ptr) { | 2168 void** ptr) { |
| 2169 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1655 return error::kNoError; | 2170 return error::kNoError; |
| 1656 } | 2171 } |
| 1657 | 2172 |
| 1658 error::Error GLES2DecoderPassthroughImpl::DoUnmapBuffer(GLenum target) { | 2173 error::Error GLES2DecoderPassthroughImpl::DoUnmapBuffer(GLenum target) { |
| 2174 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1659 return error::kNoError; | 2175 return error::kNoError; |
| 1660 } | 2176 } |
| 1661 | 2177 |
| 1662 error::Error GLES2DecoderPassthroughImpl::DoResizeCHROMIUM(GLuint width, | 2178 error::Error GLES2DecoderPassthroughImpl::DoResizeCHROMIUM(GLuint width, |
| 1663 GLuint height, | 2179 GLuint height, |
| 1664 GLfloat scale_factor, | 2180 GLfloat scale_factor, |
| 1665 GLboolean alpha) { | 2181 GLboolean alpha) { |
| 2182 // DCHECK(false) << "UNIMPLEMENTED"; | |
| 1666 return error::kNoError; | 2183 return error::kNoError; |
| 1667 } | 2184 } |
| 1668 | 2185 |
| 1669 error::Error GLES2DecoderPassthroughImpl::DoGetRequestableExtensionsCHROMIUM( | 2186 error::Error GLES2DecoderPassthroughImpl::DoGetRequestableExtensionsCHROMIUM( |
| 1670 const char** extensions) { | 2187 const char** extensions) { |
| 2188 *extensions = ""; | |
| 2189 // DCHECK(false) << "UNIMPLEMENTED"; | |
| 1671 return error::kNoError; | 2190 return error::kNoError; |
| 1672 } | 2191 } |
| 1673 | 2192 |
| 1674 error::Error GLES2DecoderPassthroughImpl::DoRequestExtensionCHROMIUM( | 2193 error::Error GLES2DecoderPassthroughImpl::DoRequestExtensionCHROMIUM( |
| 1675 const char* extension) { | 2194 const char* extension) { |
| 2195 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1676 return error::kNoError; | 2196 return error::kNoError; |
| 1677 } | 2197 } |
| 1678 | 2198 |
| 2199 namespace { | |
| 2200 | |
| 2201 template <typename T> | |
| 2202 void InsertValueIntoBuffer(std::vector<uint8_t>* data, | |
| 2203 const T& value, | |
| 2204 size_t offset) { | |
| 2205 DCHECK_LE(offset + sizeof(T), data->size()); | |
| 2206 memcpy(data->data() + offset, &value, sizeof(T)); | |
| 2207 } | |
| 2208 | |
| 2209 template <typename T> | |
| 2210 void AppendValueToBuffer(std::vector<uint8_t>* data, const T& value) { | |
| 2211 size_t old_size = data->size(); | |
| 2212 data->resize(old_size + sizeof(T)); | |
| 2213 memcpy(data->data() + old_size, &value, sizeof(T)); | |
| 2214 } | |
| 2215 | |
| 2216 void AppendStringToBuffer(std::vector<uint8_t>* data, | |
| 2217 const char* str, | |
| 2218 size_t len) { | |
| 2219 size_t old_size = data->size(); | |
| 2220 data->resize(old_size + len); | |
| 2221 memcpy(data->data() + old_size, str, len); | |
| 2222 } | |
| 2223 | |
| 2224 } // anonymous namespace | |
|
Zhenyao Mo
2016/09/09 21:22:10
Can we move this to the top of the file?
Geoff Lang
2016/09/12 14:21:29
Done.
| |
| 2225 | |
| 1679 error::Error GLES2DecoderPassthroughImpl::DoGetProgramInfoCHROMIUM( | 2226 error::Error GLES2DecoderPassthroughImpl::DoGetProgramInfoCHROMIUM( |
| 1680 GLuint program, | 2227 GLuint program, |
| 1681 std::vector<uint8_t>* data) { | 2228 std::vector<uint8_t>* data) { |
| 2229 GLuint service_program = | |
| 2230 resources_->program_id_map.GetServiceIDOrReserve(program); | |
|
Zhenyao Mo
2016/09/09 21:22:11
We can't reserve a program id, can we? Should we u
Geoff Lang
2016/09/12 14:21:29
Done.
| |
| 2231 | |
| 2232 GLint num_attributes = 0; | |
| 2233 glGetProgramiv(service_program, GL_ACTIVE_ATTRIBUTES, &num_attributes); | |
| 2234 | |
| 2235 GLint num_uniforms = 0; | |
| 2236 glGetProgramiv(service_program, GL_ACTIVE_UNIFORMS, &num_uniforms); | |
| 2237 | |
| 2238 data->resize(sizeof(ProgramInfoHeader) + | |
| 2239 ((num_attributes + num_uniforms) * sizeof(ProgramInput)), | |
| 2240 0); | |
| 2241 | |
| 2242 GLint link_status = 0; | |
| 2243 glGetProgramiv(service_program, GL_LINK_STATUS, &link_status); | |
|
Zhenyao Mo
2016/09/09 21:22:11
Should we return early if link_status is 0?
Geoff Lang
2016/09/12 14:21:29
I think that it's safe to always do the queries.
Zhenyao Mo
2016/09/12 18:15:35
You are saying we will only call this function if
| |
| 2244 | |
| 2245 ProgramInfoHeader header; | |
| 2246 header.link_status = link_status; | |
| 2247 header.num_attribs = num_attributes; | |
| 2248 header.num_uniforms = num_uniforms; | |
| 2249 InsertValueIntoBuffer(data, header, 0); | |
| 2250 | |
| 2251 GLint active_attribute_max_length = 0; | |
| 2252 glGetProgramiv(service_program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, | |
| 2253 &active_attribute_max_length); | |
| 2254 | |
| 2255 std::vector<char> attrib_name_buf(active_attribute_max_length, 0); | |
| 2256 for (GLint attrib_index = 0; attrib_index < num_attributes; attrib_index++) { | |
| 2257 GLsizei length = 0; | |
| 2258 GLint size = 0; | |
| 2259 GLenum type = GL_NONE; | |
| 2260 glGetActiveAttrib(service_program, attrib_index, attrib_name_buf.size(), | |
| 2261 &length, &size, &type, attrib_name_buf.data()); | |
| 2262 | |
| 2263 ProgramInput input; | |
| 2264 input.size = size; | |
| 2265 input.type = type; | |
| 2266 | |
| 2267 int32_t location = | |
| 2268 glGetAttribLocation(service_program, attrib_name_buf.data()); | |
| 2269 input.location_offset = data->size(); | |
| 2270 AppendValueToBuffer(data, location); | |
| 2271 | |
| 2272 input.name_offset = data->size(); | |
| 2273 input.name_length = length; | |
| 2274 AppendStringToBuffer(data, attrib_name_buf.data(), length); | |
| 2275 | |
| 2276 InsertValueIntoBuffer( | |
| 2277 data, input, | |
| 2278 sizeof(ProgramInfoHeader) + (attrib_index * sizeof(ProgramInput))); | |
| 2279 } | |
| 2280 | |
| 2281 GLint active_uniform_max_length = 0; | |
| 2282 glGetProgramiv(service_program, GL_ACTIVE_UNIFORM_MAX_LENGTH, | |
| 2283 &active_uniform_max_length); | |
| 2284 | |
| 2285 std::vector<char> uniform_name_buf(active_uniform_max_length, 0); | |
| 2286 for (GLint uniform_index = 0; uniform_index < num_uniforms; uniform_index++) { | |
| 2287 GLsizei length = 0; | |
| 2288 GLint size = 0; | |
| 2289 GLenum type = GL_NONE; | |
| 2290 glGetActiveUniform(service_program, uniform_index, uniform_name_buf.size(), | |
| 2291 &length, &size, &type, uniform_name_buf.data()); | |
| 2292 | |
| 2293 ProgramInput input; | |
| 2294 input.size = size; | |
| 2295 input.type = type; | |
| 2296 | |
| 2297 input.location_offset = data->size(); | |
| 2298 int32_t base_location = | |
| 2299 glGetUniformLocation(service_program, uniform_name_buf.data()); | |
| 2300 AppendValueToBuffer(data, base_location); | |
| 2301 | |
| 2302 GLSLArrayName parsed_service_name(uniform_name_buf.data()); | |
| 2303 if (size > 1 || parsed_service_name.IsArrayName()) { | |
| 2304 for (GLint location_index = 1; location_index < size; location_index++) { | |
| 2305 std::string array_element_name = parsed_service_name.base_name() + "[" + | |
| 2306 base::IntToString(location_index) + | |
| 2307 "]"; | |
| 2308 int32_t element_location = | |
| 2309 glGetUniformLocation(service_program, array_element_name.c_str()); | |
| 2310 AppendValueToBuffer(data, element_location); | |
| 2311 } | |
| 2312 } | |
| 2313 | |
| 2314 input.name_offset = data->size(); | |
| 2315 input.name_length = length; | |
| 2316 AppendStringToBuffer(data, uniform_name_buf.data(), length); | |
| 2317 | |
| 2318 InsertValueIntoBuffer(data, input, sizeof(ProgramInfoHeader) + | |
| 2319 ((num_attributes + uniform_index) * | |
| 2320 sizeof(ProgramInput))); | |
| 2321 } | |
| 2322 | |
| 1682 return error::kNoError; | 2323 return error::kNoError; |
| 1683 } | 2324 } |
| 1684 | 2325 |
| 1685 error::Error GLES2DecoderPassthroughImpl::DoGetUniformBlocksCHROMIUM( | 2326 error::Error GLES2DecoderPassthroughImpl::DoGetUniformBlocksCHROMIUM( |
| 1686 GLuint program, | 2327 GLuint program, |
| 1687 std::vector<uint8_t>* data) { | 2328 std::vector<uint8_t>* data) { |
| 2329 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1688 return error::kNoError; | 2330 return error::kNoError; |
| 1689 } | 2331 } |
| 1690 | 2332 |
| 1691 error::Error | 2333 error::Error |
| 1692 GLES2DecoderPassthroughImpl::DoGetTransformFeedbackVaryingsCHROMIUM( | 2334 GLES2DecoderPassthroughImpl::DoGetTransformFeedbackVaryingsCHROMIUM( |
| 1693 GLuint program, | 2335 GLuint program, |
| 1694 std::vector<uint8_t>* data) { | 2336 std::vector<uint8_t>* data) { |
| 2337 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1695 return error::kNoError; | 2338 return error::kNoError; |
| 1696 } | 2339 } |
| 1697 | 2340 |
| 1698 error::Error GLES2DecoderPassthroughImpl::DoGetUniformsES3CHROMIUM( | 2341 error::Error GLES2DecoderPassthroughImpl::DoGetUniformsES3CHROMIUM( |
| 1699 GLuint program, | 2342 GLuint program, |
| 1700 std::vector<uint8_t>* data) { | 2343 std::vector<uint8_t>* data) { |
| 2344 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1701 return error::kNoError; | 2345 return error::kNoError; |
| 1702 } | 2346 } |
| 1703 | 2347 |
| 1704 error::Error GLES2DecoderPassthroughImpl::DoGetTranslatedShaderSourceANGLE( | 2348 error::Error GLES2DecoderPassthroughImpl::DoGetTranslatedShaderSourceANGLE( |
| 1705 GLuint shader, | 2349 GLuint shader, |
| 1706 std::string* source) { | 2350 std::string* source) { |
| 2351 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1707 return error::kNoError; | 2352 return error::kNoError; |
| 1708 } | 2353 } |
| 1709 | 2354 |
| 1710 error::Error GLES2DecoderPassthroughImpl::DoPostSubBufferCHROMIUM( | 2355 error::Error GLES2DecoderPassthroughImpl::DoPostSubBufferCHROMIUM( |
| 1711 GLint x, | 2356 GLint x, |
| 1712 GLint y, | 2357 GLint y, |
| 1713 GLint width, | 2358 GLint width, |
| 1714 GLint height) { | 2359 GLint height) { |
| 2360 gfx::SwapResult result = surface_->PostSubBuffer(x, y, width, height); | |
| 2361 if (result == gfx::SwapResult::SWAP_FAILED) { | |
| 2362 LOG(ERROR) << "Context lost because PostSubBuffer failed."; | |
| 2363 } | |
| 2364 // TODO: force the context loss? | |
| 1715 return error::kNoError; | 2365 return error::kNoError; |
| 1716 } | 2366 } |
| 1717 | 2367 |
| 1718 error::Error GLES2DecoderPassthroughImpl::DoCopyTextureCHROMIUM( | 2368 error::Error GLES2DecoderPassthroughImpl::DoCopyTextureCHROMIUM( |
| 1719 GLenum source_id, | 2369 GLenum source_id, |
| 1720 GLenum dest_id, | 2370 GLenum dest_id, |
| 1721 GLint internalformat, | 2371 GLint internalformat, |
| 1722 GLenum dest_type, | 2372 GLenum dest_type, |
| 1723 GLboolean unpack_flip_y, | 2373 GLboolean unpack_flip_y, |
| 1724 GLboolean unpack_premultiply_alpha, | 2374 GLboolean unpack_premultiply_alpha, |
| 1725 GLboolean unpack_unmultiply_alpha) { | 2375 GLboolean unpack_unmultiply_alpha) { |
| 2376 glCopyTextureCHROMIUM( | |
| 2377 resources_->texture_id_map.GetServiceIDOrReserve(source_id), | |
| 2378 resources_->texture_id_map.GetServiceIDOrReserve(dest_id), internalformat, | |
| 2379 dest_type, unpack_flip_y, unpack_premultiply_alpha, | |
| 2380 unpack_unmultiply_alpha); | |
| 1726 return error::kNoError; | 2381 return error::kNoError; |
| 1727 } | 2382 } |
| 1728 | 2383 |
| 1729 error::Error GLES2DecoderPassthroughImpl::DoCopySubTextureCHROMIUM( | 2384 error::Error GLES2DecoderPassthroughImpl::DoCopySubTextureCHROMIUM( |
| 1730 GLenum source_id, | 2385 GLenum source_id, |
| 1731 GLenum dest_id, | 2386 GLenum dest_id, |
| 1732 GLint xoffset, | 2387 GLint xoffset, |
| 1733 GLint yoffset, | 2388 GLint yoffset, |
| 1734 GLint x, | 2389 GLint x, |
| 1735 GLint y, | 2390 GLint y, |
| 1736 GLsizei width, | 2391 GLsizei width, |
| 1737 GLsizei height, | 2392 GLsizei height, |
| 1738 GLboolean unpack_flip_y, | 2393 GLboolean unpack_flip_y, |
| 1739 GLboolean unpack_premultiply_alpha, | 2394 GLboolean unpack_premultiply_alpha, |
| 1740 GLboolean unpack_unmultiply_alpha) { | 2395 GLboolean unpack_unmultiply_alpha) { |
| 2396 glCopySubTextureCHROMIUM( | |
| 2397 resources_->texture_id_map.GetServiceIDOrReserve(source_id), | |
| 2398 resources_->texture_id_map.GetServiceIDOrReserve(dest_id), xoffset, | |
| 2399 yoffset, x, y, width, height, unpack_flip_y, unpack_premultiply_alpha, | |
| 2400 unpack_unmultiply_alpha); | |
| 1741 return error::kNoError; | 2401 return error::kNoError; |
| 1742 } | 2402 } |
| 1743 | 2403 |
| 1744 error::Error GLES2DecoderPassthroughImpl::DoCompressedCopyTextureCHROMIUM( | 2404 error::Error GLES2DecoderPassthroughImpl::DoCompressedCopyTextureCHROMIUM( |
| 1745 GLenum source_id, | 2405 GLenum source_id, |
| 1746 GLenum dest_id) { | 2406 GLenum dest_id) { |
| 2407 glCompressedCopyTextureCHROMIUM( | |
| 2408 resources_->texture_id_map.GetServiceIDOrReserve(source_id), | |
| 2409 resources_->texture_id_map.GetServiceIDOrReserve(dest_id)); | |
| 1747 return error::kNoError; | 2410 return error::kNoError; |
| 1748 } | 2411 } |
| 1749 | 2412 |
| 1750 error::Error GLES2DecoderPassthroughImpl::DoDrawArraysInstancedANGLE( | 2413 error::Error GLES2DecoderPassthroughImpl::DoDrawArraysInstancedANGLE( |
| 1751 GLenum mode, | 2414 GLenum mode, |
| 1752 GLint first, | 2415 GLint first, |
| 1753 GLsizei count, | 2416 GLsizei count, |
| 1754 GLsizei primcount) { | 2417 GLsizei primcount) { |
| 2418 glDrawArraysInstancedANGLE(mode, first, count, primcount); | |
| 1755 return error::kNoError; | 2419 return error::kNoError; |
| 1756 } | 2420 } |
| 1757 | 2421 |
| 1758 error::Error GLES2DecoderPassthroughImpl::DoDrawElementsInstancedANGLE( | 2422 error::Error GLES2DecoderPassthroughImpl::DoDrawElementsInstancedANGLE( |
| 1759 GLenum mode, | 2423 GLenum mode, |
| 1760 GLsizei count, | 2424 GLsizei count, |
| 1761 GLenum type, | 2425 GLenum type, |
| 1762 const void* indices, | 2426 const void* indices, |
| 1763 GLsizei primcount) { | 2427 GLsizei primcount) { |
| 2428 glDrawElementsInstancedANGLE(mode, count, type, indices, primcount); | |
| 1764 return error::kNoError; | 2429 return error::kNoError; |
| 1765 } | 2430 } |
| 1766 | 2431 |
| 1767 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribDivisorANGLE( | 2432 error::Error GLES2DecoderPassthroughImpl::DoVertexAttribDivisorANGLE( |
| 1768 GLuint index, | 2433 GLuint index, |
| 1769 GLuint divisor) { | 2434 GLuint divisor) { |
| 2435 glVertexAttribDivisorANGLE(index, divisor); | |
| 1770 return error::kNoError; | 2436 return error::kNoError; |
| 1771 } | 2437 } |
| 1772 | 2438 |
| 1773 error::Error GLES2DecoderPassthroughImpl::DoProduceTextureCHROMIUM( | 2439 error::Error GLES2DecoderPassthroughImpl::DoProduceTextureCHROMIUM( |
| 1774 GLenum target, | 2440 GLenum target, |
| 1775 const volatile GLbyte* mailbox) { | 2441 const volatile GLbyte* mailbox) { |
| 2442 // TODO: validation | |
| 2443 | |
| 2444 GLuint texture = bound_textures_[active_texture_unit_]; | |
| 2445 TexturePassthrough* texture_passthrough = nullptr; | |
| 2446 | |
| 2447 auto texture_object_iter = resources_->texture_object_map.find(texture); | |
| 2448 if (texture_object_iter != resources_->texture_object_map.end()) { | |
| 2449 texture_passthrough = texture_object_iter->second.get(); | |
| 2450 } else { | |
| 2451 GLuint service_id = | |
| 2452 resources_->texture_id_map.GetServiceIDOrReserve(texture); | |
| 2453 texture_passthrough = new TexturePassthrough(service_id); | |
| 2454 resources_->texture_object_map.insert( | |
| 2455 std::make_pair(texture, texture_passthrough)); | |
| 2456 } | |
| 2457 | |
| 2458 const Mailbox& mb = Mailbox::FromVolatile( | |
| 2459 *reinterpret_cast<const volatile Mailbox*>(mailbox)); | |
| 2460 mailbox_manager_->ProduceTexture(mb, texture_passthrough); | |
| 1776 return error::kNoError; | 2461 return error::kNoError; |
| 1777 } | 2462 } |
| 1778 | 2463 |
| 1779 error::Error GLES2DecoderPassthroughImpl::DoProduceTextureDirectCHROMIUM( | 2464 error::Error GLES2DecoderPassthroughImpl::DoProduceTextureDirectCHROMIUM( |
| 1780 GLuint texture, | 2465 GLuint texture_client_id, |
| 1781 GLenum target, | 2466 GLenum target, |
| 1782 const volatile GLbyte* mailbox) { | 2467 const volatile GLbyte* mailbox) { |
| 2468 // TODO: validation | |
| 2469 | |
| 2470 TexturePassthrough* texture = nullptr; | |
| 2471 auto texture_object_iter = | |
| 2472 resources_->texture_object_map.find(texture_client_id); | |
| 2473 if (texture_object_iter != resources_->texture_object_map.end()) { | |
| 2474 texture = texture_object_iter->second.get(); | |
| 2475 } else { | |
| 2476 GLuint service_id = | |
| 2477 resources_->texture_id_map.GetServiceIDOrReserve(texture_client_id); | |
| 2478 texture = new TexturePassthrough(service_id); | |
| 2479 resources_->texture_object_map.insert( | |
| 2480 std::make_pair(texture_client_id, texture)); | |
| 2481 } | |
| 2482 | |
| 2483 const Mailbox& mb = Mailbox::FromVolatile( | |
| 2484 *reinterpret_cast<const volatile Mailbox*>(mailbox)); | |
| 2485 mailbox_manager_->ProduceTexture(mb, texture); | |
| 1783 return error::kNoError; | 2486 return error::kNoError; |
| 1784 } | 2487 } |
| 1785 | 2488 |
| 1786 error::Error GLES2DecoderPassthroughImpl::DoConsumeTextureCHROMIUM( | 2489 error::Error GLES2DecoderPassthroughImpl::DoConsumeTextureCHROMIUM( |
| 1787 GLenum target, | 2490 GLenum target, |
| 1788 const volatile GLbyte* mailbox) { | 2491 const volatile GLbyte* mailbox) { |
| 2492 // TODO: validation | |
| 2493 | |
| 2494 const Mailbox& mb = Mailbox::FromVolatile( | |
| 2495 *reinterpret_cast<const volatile Mailbox*>(mailbox)); | |
| 2496 TexturePassthrough* texture = static_cast<TexturePassthrough*>( | |
| 2497 group_->mailbox_manager()->ConsumeTexture(mb)); | |
| 2498 if (texture == nullptr) { | |
| 2499 // TODO: error, missing mailbox | |
| 2500 return error::kNoError; | |
| 2501 } | |
| 2502 | |
| 2503 GLuint client_id = bound_textures_[active_texture_unit_]; | |
| 2504 resources_->texture_id_map.SetIDMapping(client_id, texture->service_id()); | |
| 2505 resources_->texture_object_map.erase(client_id); | |
| 2506 resources_->texture_object_map.insert(std::make_pair(client_id, texture)); | |
| 1789 return error::kNoError; | 2507 return error::kNoError; |
| 1790 } | 2508 } |
| 1791 | 2509 |
| 1792 error::Error GLES2DecoderPassthroughImpl::DoCreateAndConsumeTextureINTERNAL( | 2510 error::Error GLES2DecoderPassthroughImpl::DoCreateAndConsumeTextureINTERNAL( |
| 1793 GLenum target, | 2511 GLenum target, |
| 1794 GLuint texture, | 2512 GLuint texture_client_id, |
| 1795 const volatile GLbyte* mailbox) { | 2513 const volatile GLbyte* mailbox) { |
| 2514 // TODO: validation | |
| 2515 | |
| 2516 if (resources_->texture_id_map.GetServiceID(texture_client_id, nullptr)) { | |
| 2517 return error::kInvalidArguments; | |
| 2518 } | |
| 2519 const Mailbox& mb = Mailbox::FromVolatile( | |
| 2520 *reinterpret_cast<const volatile Mailbox*>(mailbox)); | |
| 2521 TexturePassthrough* texture = static_cast<TexturePassthrough*>( | |
| 2522 group_->mailbox_manager()->ConsumeTexture(mb)); | |
| 2523 if (texture == nullptr) { | |
| 2524 // TODO: error, missing mailbox | |
| 2525 return error::kNoError; | |
| 2526 } | |
| 2527 | |
| 2528 resources_->texture_id_map.SetIDMapping(texture_client_id, | |
| 2529 texture->service_id()); | |
| 2530 resources_->texture_object_map.erase(texture_client_id); | |
| 2531 resources_->texture_object_map.insert( | |
| 2532 std::make_pair(texture_client_id, texture)); | |
| 1796 return error::kNoError; | 2533 return error::kNoError; |
| 1797 } | 2534 } |
| 1798 | 2535 |
| 1799 error::Error GLES2DecoderPassthroughImpl::DoBindUniformLocationCHROMIUM( | 2536 error::Error GLES2DecoderPassthroughImpl::DoBindUniformLocationCHROMIUM( |
| 1800 GLuint program, | 2537 GLuint program, |
| 1801 GLint location, | 2538 GLint location, |
| 1802 const char* name) { | 2539 const char* name) { |
| 2540 glBindUniformLocationCHROMIUM( | |
| 2541 resources_->program_id_map.GetServiceIDOrReserve(program), location, | |
| 2542 name); | |
| 1803 return error::kNoError; | 2543 return error::kNoError; |
| 1804 } | 2544 } |
| 1805 | 2545 |
| 1806 error::Error GLES2DecoderPassthroughImpl::DoBindTexImage2DCHROMIUM( | 2546 error::Error GLES2DecoderPassthroughImpl::DoBindTexImage2DCHROMIUM( |
| 1807 GLenum target, | 2547 GLenum target, |
| 1808 GLint imageId) { | 2548 GLint imageId) { |
| 2549 // TODO: error handling | |
| 2550 gl::GLImage* image = image_manager_->LookupImage(imageId); | |
| 2551 if (!image->BindTexImage(target)) { | |
| 2552 image->CopyTexImage(target); | |
| 2553 } | |
| 1809 return error::kNoError; | 2554 return error::kNoError; |
| 1810 } | 2555 } |
| 1811 | 2556 |
| 1812 error::Error GLES2DecoderPassthroughImpl::DoReleaseTexImage2DCHROMIUM( | 2557 error::Error GLES2DecoderPassthroughImpl::DoReleaseTexImage2DCHROMIUM( |
| 1813 GLenum target, | 2558 GLenum target, |
| 1814 GLint imageId) { | 2559 GLint imageId) { |
| 2560 // TODO: error handling | |
| 2561 gl::GLImage* image = image_manager_->LookupImage(imageId); | |
| 2562 image->ReleaseTexImage(target); | |
| 1815 return error::kNoError; | 2563 return error::kNoError; |
| 1816 } | 2564 } |
| 1817 | 2565 |
| 1818 error::Error GLES2DecoderPassthroughImpl::DoTraceBeginCHROMIUM( | 2566 error::Error GLES2DecoderPassthroughImpl::DoTraceBeginCHROMIUM( |
| 1819 const char* category_name, | 2567 const char* category_name, |
| 1820 const char* trace_name) { | 2568 const char* trace_name) { |
| 2569 // DCHECK(false) << "UNIMPLEMENTED"; | |
| 1821 return error::kNoError; | 2570 return error::kNoError; |
| 1822 } | 2571 } |
| 1823 | 2572 |
| 1824 error::Error GLES2DecoderPassthroughImpl::DoTraceEndCHROMIUM() { | 2573 error::Error GLES2DecoderPassthroughImpl::DoTraceEndCHROMIUM() { |
| 2574 // DCHECK(false) << "UNIMPLEMENTED"; | |
| 1825 return error::kNoError; | 2575 return error::kNoError; |
| 1826 } | 2576 } |
| 1827 | 2577 |
| 1828 error::Error GLES2DecoderPassthroughImpl::DoDiscardFramebufferEXT( | 2578 error::Error GLES2DecoderPassthroughImpl::DoDiscardFramebufferEXT( |
| 1829 GLenum target, | 2579 GLenum target, |
| 1830 GLsizei count, | 2580 GLsizei count, |
| 1831 const volatile GLenum* attachments) { | 2581 const volatile GLenum* attachments) { |
| 2582 std::vector<GLenum> attachments_copy(attachments, attachments + count); | |
| 2583 glDiscardFramebufferEXT(target, count, attachments_copy.data()); | |
| 1832 return error::kNoError; | 2584 return error::kNoError; |
| 1833 } | 2585 } |
| 1834 | 2586 |
| 1835 error::Error GLES2DecoderPassthroughImpl::DoLoseContextCHROMIUM(GLenum current, | 2587 error::Error GLES2DecoderPassthroughImpl::DoLoseContextCHROMIUM(GLenum current, |
| 1836 GLenum other) { | 2588 GLenum other) { |
| 2589 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1837 return error::kNoError; | 2590 return error::kNoError; |
| 1838 } | 2591 } |
| 1839 | 2592 |
| 1840 error::Error GLES2DecoderPassthroughImpl::DoDescheduleUntilFinishedCHROMIUM() { | 2593 error::Error GLES2DecoderPassthroughImpl::DoDescheduleUntilFinishedCHROMIUM() { |
| 2594 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1841 return error::kNoError; | 2595 return error::kNoError; |
| 1842 } | 2596 } |
| 1843 | 2597 |
| 1844 error::Error GLES2DecoderPassthroughImpl::DoInsertFenceSyncCHROMIUM( | 2598 error::Error GLES2DecoderPassthroughImpl::DoInsertFenceSyncCHROMIUM( |
| 1845 GLuint64 release_count) { | 2599 GLuint64 release_count) { |
| 2600 if (!fence_sync_release_callback_.is_null()) | |
| 2601 fence_sync_release_callback_.Run(release_count); | |
| 1846 return error::kNoError; | 2602 return error::kNoError; |
| 1847 } | 2603 } |
| 1848 | 2604 |
| 1849 error::Error GLES2DecoderPassthroughImpl::DoWaitSyncTokenCHROMIUM( | 2605 error::Error GLES2DecoderPassthroughImpl::DoWaitSyncTokenCHROMIUM( |
| 1850 CommandBufferNamespace namespace_id, | 2606 CommandBufferNamespace namespace_id, |
| 1851 CommandBufferId command_buffer_id, | 2607 CommandBufferId command_buffer_id, |
| 1852 GLuint64 release_count) { | 2608 GLuint64 release_count) { |
| 1853 return error::kNoError; | 2609 if (wait_fence_sync_callback_.is_null()) { |
| 2610 return error::kNoError; | |
| 2611 } | |
| 2612 return wait_fence_sync_callback_.Run(namespace_id, command_buffer_id, | |
| 2613 release_count) | |
| 2614 ? error::kNoError | |
| 2615 : error::kDeferCommandUntilLater; | |
| 1854 } | 2616 } |
| 1855 | 2617 |
| 1856 error::Error GLES2DecoderPassthroughImpl::DoDrawBuffersEXT( | 2618 error::Error GLES2DecoderPassthroughImpl::DoDrawBuffersEXT( |
| 1857 GLsizei count, | 2619 GLsizei count, |
| 1858 const volatile GLenum* bufs) { | 2620 const volatile GLenum* bufs) { |
| 2621 std::vector<GLenum> bufs_copy(bufs, bufs + count); | |
| 2622 glDrawBuffersARB(count, bufs_copy.data()); | |
| 1859 return error::kNoError; | 2623 return error::kNoError; |
| 1860 } | 2624 } |
| 1861 | 2625 |
| 1862 error::Error GLES2DecoderPassthroughImpl::DoDiscardBackbufferCHROMIUM() { | 2626 error::Error GLES2DecoderPassthroughImpl::DoDiscardBackbufferCHROMIUM() { |
| 2627 // CHECK(false) << "UNIMPLEMENTED"; | |
| 1863 return error::kNoError; | 2628 return error::kNoError; |
| 1864 } | 2629 } |
| 1865 | 2630 |
| 1866 error::Error GLES2DecoderPassthroughImpl::DoScheduleOverlayPlaneCHROMIUM( | 2631 error::Error GLES2DecoderPassthroughImpl::DoScheduleOverlayPlaneCHROMIUM( |
| 1867 GLint plane_z_order, | 2632 GLint plane_z_order, |
| 1868 GLenum plane_transform, | 2633 GLenum plane_transform, |
| 1869 GLuint overlay_texture_id, | 2634 GLuint overlay_texture_id, |
| 1870 GLint bounds_x, | 2635 GLint bounds_x, |
| 1871 GLint bounds_y, | 2636 GLint bounds_y, |
| 1872 GLint bounds_width, | 2637 GLint bounds_width, |
| 1873 GLint bounds_height, | 2638 GLint bounds_height, |
| 1874 GLfloat uv_x, | 2639 GLfloat uv_x, |
| 1875 GLfloat uv_y, | 2640 GLfloat uv_y, |
| 1876 GLfloat uv_width, | 2641 GLfloat uv_width, |
| 1877 GLfloat uv_height) { | 2642 GLfloat uv_height) { |
| 2643 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1878 return error::kNoError; | 2644 return error::kNoError; |
| 1879 } | 2645 } |
| 1880 | 2646 |
| 1881 error::Error GLES2DecoderPassthroughImpl::DoScheduleCALayerSharedStateCHROMIUM( | 2647 error::Error GLES2DecoderPassthroughImpl::DoScheduleCALayerSharedStateCHROMIUM( |
| 1882 GLfloat opacity, | 2648 GLfloat opacity, |
| 1883 GLboolean is_clipped, | 2649 GLboolean is_clipped, |
| 1884 const GLfloat* clip_rect, | 2650 const GLfloat* clip_rect, |
| 1885 GLint sorting_context_id, | 2651 GLint sorting_context_id, |
| 1886 const GLfloat* transform) { | 2652 const GLfloat* transform) { |
| 2653 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1887 return error::kNoError; | 2654 return error::kNoError; |
| 1888 } | 2655 } |
| 1889 | 2656 |
| 1890 error::Error GLES2DecoderPassthroughImpl::DoScheduleCALayerCHROMIUM( | 2657 error::Error GLES2DecoderPassthroughImpl::DoScheduleCALayerCHROMIUM( |
| 1891 GLuint contents_texture_id, | 2658 GLuint contents_texture_id, |
| 1892 const GLfloat* contents_rect, | 2659 const GLfloat* contents_rect, |
| 1893 GLuint background_color, | 2660 GLuint background_color, |
| 1894 GLuint edge_aa_mask, | 2661 GLuint edge_aa_mask, |
| 1895 const GLfloat* bounds_rect) { | 2662 const GLfloat* bounds_rect) { |
| 2663 CHECK(false) << "UNIMPLEMENTED"; | |
| 1896 return error::kNoError; | 2664 return error::kNoError; |
| 1897 } | 2665 } |
| 1898 | 2666 |
| 1899 error::Error GLES2DecoderPassthroughImpl::DoScheduleCALayerInUseQueryCHROMIUM( | 2667 error::Error GLES2DecoderPassthroughImpl::DoScheduleCALayerInUseQueryCHROMIUM( |
| 1900 GLuint n, | 2668 GLuint n, |
| 1901 const volatile GLuint* textures) { | 2669 const volatile GLuint* textures) { |
| 2670 CHECK(false) << "UNIMPLEMENTED"; | |
| 1902 return error::kNoError; | 2671 return error::kNoError; |
| 1903 } | 2672 } |
| 1904 | 2673 |
| 1905 error::Error GLES2DecoderPassthroughImpl::DoCommitOverlayPlanesCHROMIUM() { | 2674 error::Error GLES2DecoderPassthroughImpl::DoCommitOverlayPlanesCHROMIUM() { |
| 2675 CHECK(false) << "UNIMPLEMENTED"; | |
| 1906 return error::kNoError; | 2676 return error::kNoError; |
| 1907 } | 2677 } |
| 1908 | 2678 |
| 1909 error::Error GLES2DecoderPassthroughImpl::DoSwapInterval(GLint interval) { | 2679 error::Error GLES2DecoderPassthroughImpl::DoSwapInterval(GLint interval) { |
| 2680 context_->SetSwapInterval(interval); | |
| 1910 return error::kNoError; | 2681 return error::kNoError; |
| 1911 } | 2682 } |
| 1912 | 2683 |
| 1913 error::Error GLES2DecoderPassthroughImpl::DoFlushDriverCachesCHROMIUM() { | 2684 error::Error GLES2DecoderPassthroughImpl::DoFlushDriverCachesCHROMIUM() { |
| 2685 // DCHECK(false) << "UNIMPLEMENTED"; | |
| 1914 return error::kNoError; | 2686 return error::kNoError; |
| 1915 } | 2687 } |
| 1916 | 2688 |
| 1917 error::Error GLES2DecoderPassthroughImpl::DoMatrixLoadfCHROMIUM( | 2689 error::Error GLES2DecoderPassthroughImpl::DoMatrixLoadfCHROMIUM( |
| 1918 GLenum matrixMode, | 2690 GLenum matrixMode, |
| 1919 const volatile GLfloat* m) { | 2691 const volatile GLfloat* m) { |
| 2692 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1920 return error::kNoError; | 2693 return error::kNoError; |
| 1921 } | 2694 } |
| 1922 | 2695 |
| 1923 error::Error GLES2DecoderPassthroughImpl::DoMatrixLoadIdentityCHROMIUM( | 2696 error::Error GLES2DecoderPassthroughImpl::DoMatrixLoadIdentityCHROMIUM( |
| 1924 GLenum matrixMode) { | 2697 GLenum matrixMode) { |
| 2698 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1925 return error::kNoError; | 2699 return error::kNoError; |
| 1926 } | 2700 } |
| 1927 | 2701 |
| 1928 error::Error GLES2DecoderPassthroughImpl::DoGenPathsCHROMIUM(GLuint path, | 2702 error::Error GLES2DecoderPassthroughImpl::DoGenPathsCHROMIUM(GLuint path, |
| 1929 GLsizei range) { | 2703 GLsizei range) { |
| 2704 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1930 return error::kNoError; | 2705 return error::kNoError; |
| 1931 } | 2706 } |
| 1932 | 2707 |
| 1933 error::Error GLES2DecoderPassthroughImpl::DoDeletePathsCHROMIUM(GLuint path, | 2708 error::Error GLES2DecoderPassthroughImpl::DoDeletePathsCHROMIUM(GLuint path, |
| 1934 GLsizei range) { | 2709 GLsizei range) { |
| 2710 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1935 return error::kNoError; | 2711 return error::kNoError; |
| 1936 } | 2712 } |
| 1937 | 2713 |
| 1938 error::Error GLES2DecoderPassthroughImpl::DoIsPathCHROMIUM(GLuint path, | 2714 error::Error GLES2DecoderPassthroughImpl::DoIsPathCHROMIUM(GLuint path, |
| 1939 uint32_t* result) { | 2715 uint32_t* result) { |
| 2716 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1940 return error::kNoError; | 2717 return error::kNoError; |
| 1941 } | 2718 } |
| 1942 | 2719 |
| 1943 error::Error GLES2DecoderPassthroughImpl::DoPathCommandsCHROMIUM( | 2720 error::Error GLES2DecoderPassthroughImpl::DoPathCommandsCHROMIUM( |
| 1944 GLuint path, | 2721 GLuint path, |
| 1945 GLsizei numCommands, | 2722 GLsizei numCommands, |
| 1946 const GLubyte* commands, | 2723 const GLubyte* commands, |
| 1947 GLsizei numCoords, | 2724 GLsizei numCoords, |
| 1948 GLenum coordType, | 2725 GLenum coordType, |
| 1949 const GLvoid* coords, | 2726 const GLvoid* coords, |
| 1950 GLsizei coords_bufsize) { | 2727 GLsizei coords_bufsize) { |
| 2728 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1951 return error::kNoError; | 2729 return error::kNoError; |
| 1952 } | 2730 } |
| 1953 | 2731 |
| 1954 error::Error GLES2DecoderPassthroughImpl::DoPathParameterfCHROMIUM( | 2732 error::Error GLES2DecoderPassthroughImpl::DoPathParameterfCHROMIUM( |
| 1955 GLuint path, | 2733 GLuint path, |
| 1956 GLenum pname, | 2734 GLenum pname, |
| 1957 GLfloat value) { | 2735 GLfloat value) { |
| 2736 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1958 return error::kNoError; | 2737 return error::kNoError; |
| 1959 } | 2738 } |
| 1960 | 2739 |
| 1961 error::Error GLES2DecoderPassthroughImpl::DoPathParameteriCHROMIUM( | 2740 error::Error GLES2DecoderPassthroughImpl::DoPathParameteriCHROMIUM( |
| 1962 GLuint path, | 2741 GLuint path, |
| 1963 GLenum pname, | 2742 GLenum pname, |
| 1964 GLint value) { | 2743 GLint value) { |
| 2744 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1965 return error::kNoError; | 2745 return error::kNoError; |
| 1966 } | 2746 } |
| 1967 | 2747 |
| 1968 error::Error GLES2DecoderPassthroughImpl::DoPathStencilFuncCHROMIUM( | 2748 error::Error GLES2DecoderPassthroughImpl::DoPathStencilFuncCHROMIUM( |
| 1969 GLenum func, | 2749 GLenum func, |
| 1970 GLint ref, | 2750 GLint ref, |
| 1971 GLuint mask) { | 2751 GLuint mask) { |
| 2752 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1972 return error::kNoError; | 2753 return error::kNoError; |
| 1973 } | 2754 } |
| 1974 | 2755 |
| 1975 error::Error GLES2DecoderPassthroughImpl::DoStencilFillPathCHROMIUM( | 2756 error::Error GLES2DecoderPassthroughImpl::DoStencilFillPathCHROMIUM( |
| 1976 GLuint path, | 2757 GLuint path, |
| 1977 GLenum fillMode, | 2758 GLenum fillMode, |
| 1978 GLuint mask) { | 2759 GLuint mask) { |
| 2760 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1979 return error::kNoError; | 2761 return error::kNoError; |
| 1980 } | 2762 } |
| 1981 | 2763 |
| 1982 error::Error GLES2DecoderPassthroughImpl::DoStencilStrokePathCHROMIUM( | 2764 error::Error GLES2DecoderPassthroughImpl::DoStencilStrokePathCHROMIUM( |
| 1983 GLuint path, | 2765 GLuint path, |
| 1984 GLint reference, | 2766 GLint reference, |
| 1985 GLuint mask) { | 2767 GLuint mask) { |
| 2768 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1986 return error::kNoError; | 2769 return error::kNoError; |
| 1987 } | 2770 } |
| 1988 | 2771 |
| 1989 error::Error GLES2DecoderPassthroughImpl::DoCoverFillPathCHROMIUM( | 2772 error::Error GLES2DecoderPassthroughImpl::DoCoverFillPathCHROMIUM( |
| 1990 GLuint path, | 2773 GLuint path, |
| 1991 GLenum coverMode) { | 2774 GLenum coverMode) { |
| 2775 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1992 return error::kNoError; | 2776 return error::kNoError; |
| 1993 } | 2777 } |
| 1994 | 2778 |
| 1995 error::Error GLES2DecoderPassthroughImpl::DoCoverStrokePathCHROMIUM( | 2779 error::Error GLES2DecoderPassthroughImpl::DoCoverStrokePathCHROMIUM( |
| 1996 GLuint path, | 2780 GLuint path, |
| 1997 GLenum coverMode) { | 2781 GLenum coverMode) { |
| 2782 DCHECK(false) << "UNIMPLEMENTED"; | |
| 1998 return error::kNoError; | 2783 return error::kNoError; |
| 1999 } | 2784 } |
| 2000 | 2785 |
| 2001 error::Error GLES2DecoderPassthroughImpl::DoStencilThenCoverFillPathCHROMIUM( | 2786 error::Error GLES2DecoderPassthroughImpl::DoStencilThenCoverFillPathCHROMIUM( |
| 2002 GLuint path, | 2787 GLuint path, |
| 2003 GLenum fillMode, | 2788 GLenum fillMode, |
| 2004 GLuint mask, | 2789 GLuint mask, |
| 2005 GLenum coverMode) { | 2790 GLenum coverMode) { |
| 2791 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2006 return error::kNoError; | 2792 return error::kNoError; |
| 2007 } | 2793 } |
| 2008 | 2794 |
| 2009 error::Error GLES2DecoderPassthroughImpl::DoStencilThenCoverStrokePathCHROMIUM( | 2795 error::Error GLES2DecoderPassthroughImpl::DoStencilThenCoverStrokePathCHROMIUM( |
| 2010 GLuint path, | 2796 GLuint path, |
| 2011 GLint reference, | 2797 GLint reference, |
| 2012 GLuint mask, | 2798 GLuint mask, |
| 2013 GLenum coverMode) { | 2799 GLenum coverMode) { |
| 2800 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2014 return error::kNoError; | 2801 return error::kNoError; |
| 2015 } | 2802 } |
| 2016 | 2803 |
| 2017 error::Error GLES2DecoderPassthroughImpl::DoStencilFillPathInstancedCHROMIUM( | 2804 error::Error GLES2DecoderPassthroughImpl::DoStencilFillPathInstancedCHROMIUM( |
| 2018 GLsizei numPaths, | 2805 GLsizei numPaths, |
| 2019 GLenum pathNameType, | 2806 GLenum pathNameType, |
| 2020 const GLvoid* paths, | 2807 const GLvoid* paths, |
| 2021 GLsizei pathsBufsize, | 2808 GLsizei pathsBufsize, |
| 2022 GLuint pathBase, | 2809 GLuint pathBase, |
| 2023 GLenum fillMode, | 2810 GLenum fillMode, |
| 2024 GLuint mask, | 2811 GLuint mask, |
| 2025 GLenum transformType, | 2812 GLenum transformType, |
| 2026 const GLfloat* transformValues, | 2813 const GLfloat* transformValues, |
| 2027 GLsizei transformValuesBufsize) { | 2814 GLsizei transformValuesBufsize) { |
| 2815 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2028 return error::kNoError; | 2816 return error::kNoError; |
| 2029 } | 2817 } |
| 2030 | 2818 |
| 2031 error::Error GLES2DecoderPassthroughImpl::DoStencilStrokePathInstancedCHROMIUM( | 2819 error::Error GLES2DecoderPassthroughImpl::DoStencilStrokePathInstancedCHROMIUM( |
| 2032 GLsizei numPaths, | 2820 GLsizei numPaths, |
| 2033 GLenum pathNameType, | 2821 GLenum pathNameType, |
| 2034 const GLvoid* paths, | 2822 const GLvoid* paths, |
| 2035 GLsizei pathsBufsize, | 2823 GLsizei pathsBufsize, |
| 2036 GLuint pathBase, | 2824 GLuint pathBase, |
| 2037 GLint reference, | 2825 GLint reference, |
| 2038 GLuint mask, | 2826 GLuint mask, |
| 2039 GLenum transformType, | 2827 GLenum transformType, |
| 2040 const GLfloat* transformValues, | 2828 const GLfloat* transformValues, |
| 2041 GLsizei transformValuesBufsize) { | 2829 GLsizei transformValuesBufsize) { |
| 2830 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2042 return error::kNoError; | 2831 return error::kNoError; |
| 2043 } | 2832 } |
| 2044 | 2833 |
| 2045 error::Error GLES2DecoderPassthroughImpl::DoCoverFillPathInstancedCHROMIUM( | 2834 error::Error GLES2DecoderPassthroughImpl::DoCoverFillPathInstancedCHROMIUM( |
| 2046 GLsizei numPaths, | 2835 GLsizei numPaths, |
| 2047 GLenum pathNameType, | 2836 GLenum pathNameType, |
| 2048 const GLvoid* paths, | 2837 const GLvoid* paths, |
| 2049 GLsizei pathsBufsize, | 2838 GLsizei pathsBufsize, |
| 2050 GLuint pathBase, | 2839 GLuint pathBase, |
| 2051 GLenum coverMode, | 2840 GLenum coverMode, |
| 2052 GLenum transformType, | 2841 GLenum transformType, |
| 2053 const GLfloat* transformValues, | 2842 const GLfloat* transformValues, |
| 2054 GLsizei transformValuesBufsize) { | 2843 GLsizei transformValuesBufsize) { |
| 2844 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2055 return error::kNoError; | 2845 return error::kNoError; |
| 2056 } | 2846 } |
| 2057 | 2847 |
| 2058 error::Error GLES2DecoderPassthroughImpl::DoCoverStrokePathInstancedCHROMIUM( | 2848 error::Error GLES2DecoderPassthroughImpl::DoCoverStrokePathInstancedCHROMIUM( |
| 2059 GLsizei numPaths, | 2849 GLsizei numPaths, |
| 2060 GLenum pathNameType, | 2850 GLenum pathNameType, |
| 2061 const GLvoid* paths, | 2851 const GLvoid* paths, |
| 2062 GLsizei pathsBufsize, | 2852 GLsizei pathsBufsize, |
| 2063 GLuint pathBase, | 2853 GLuint pathBase, |
| 2064 GLenum coverMode, | 2854 GLenum coverMode, |
| 2065 GLenum transformType, | 2855 GLenum transformType, |
| 2066 const GLfloat* transformValues, | 2856 const GLfloat* transformValues, |
| 2067 GLsizei transformValuesBufsize) { | 2857 GLsizei transformValuesBufsize) { |
| 2858 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2068 return error::kNoError; | 2859 return error::kNoError; |
| 2069 } | 2860 } |
| 2070 | 2861 |
| 2071 error::Error | 2862 error::Error |
| 2072 GLES2DecoderPassthroughImpl::DoStencilThenCoverFillPathInstancedCHROMIUM( | 2863 GLES2DecoderPassthroughImpl::DoStencilThenCoverFillPathInstancedCHROMIUM( |
| 2073 GLsizei numPaths, | 2864 GLsizei numPaths, |
| 2074 GLenum pathNameType, | 2865 GLenum pathNameType, |
| 2075 const GLvoid* paths, | 2866 const GLvoid* paths, |
| 2076 GLsizei pathsBufsize, | 2867 GLsizei pathsBufsize, |
| 2077 GLuint pathBase, | 2868 GLuint pathBase, |
| 2078 GLenum fillMode, | 2869 GLenum fillMode, |
| 2079 GLuint mask, | 2870 GLuint mask, |
| 2080 GLenum coverMode, | 2871 GLenum coverMode, |
| 2081 GLenum transformType, | 2872 GLenum transformType, |
| 2082 const GLfloat* transformValues, | 2873 const GLfloat* transformValues, |
| 2083 GLsizei transformValuesBufsize) { | 2874 GLsizei transformValuesBufsize) { |
| 2875 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2084 return error::kNoError; | 2876 return error::kNoError; |
| 2085 } | 2877 } |
| 2086 | 2878 |
| 2087 error::Error | 2879 error::Error |
| 2088 GLES2DecoderPassthroughImpl::DoStencilThenCoverStrokePathInstancedCHROMIUM( | 2880 GLES2DecoderPassthroughImpl::DoStencilThenCoverStrokePathInstancedCHROMIUM( |
| 2089 GLsizei numPaths, | 2881 GLsizei numPaths, |
| 2090 GLenum pathNameType, | 2882 GLenum pathNameType, |
| 2091 const GLvoid* paths, | 2883 const GLvoid* paths, |
| 2092 GLsizei pathsBufsize, | 2884 GLsizei pathsBufsize, |
| 2093 GLuint pathBase, | 2885 GLuint pathBase, |
| 2094 GLint reference, | 2886 GLint reference, |
| 2095 GLuint mask, | 2887 GLuint mask, |
| 2096 GLenum coverMode, | 2888 GLenum coverMode, |
| 2097 GLenum transformType, | 2889 GLenum transformType, |
| 2098 const GLfloat* transformValues, | 2890 const GLfloat* transformValues, |
| 2099 GLsizei transformValuesBufsize) { | 2891 GLsizei transformValuesBufsize) { |
| 2892 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2100 return error::kNoError; | 2893 return error::kNoError; |
| 2101 } | 2894 } |
| 2102 | 2895 |
| 2103 error::Error GLES2DecoderPassthroughImpl::DoBindFragmentInputLocationCHROMIUM( | 2896 error::Error GLES2DecoderPassthroughImpl::DoBindFragmentInputLocationCHROMIUM( |
| 2104 GLuint program, | 2897 GLuint program, |
| 2105 GLint location, | 2898 GLint location, |
| 2106 const char* name) { | 2899 const char* name) { |
| 2900 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2107 return error::kNoError; | 2901 return error::kNoError; |
| 2108 } | 2902 } |
| 2109 | 2903 |
| 2110 error::Error GLES2DecoderPassthroughImpl::DoProgramPathFragmentInputGenCHROMIUM( | 2904 error::Error GLES2DecoderPassthroughImpl::DoProgramPathFragmentInputGenCHROMIUM( |
| 2111 GLuint program, | 2905 GLuint program, |
| 2112 GLint location, | 2906 GLint location, |
| 2113 GLenum genMode, | 2907 GLenum genMode, |
| 2114 GLint components, | 2908 GLint components, |
| 2115 const GLfloat* coeffs, | 2909 const GLfloat* coeffs, |
| 2116 GLsizei coeffsBufsize) { | 2910 GLsizei coeffsBufsize) { |
| 2911 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2117 return error::kNoError; | 2912 return error::kNoError; |
| 2118 } | 2913 } |
| 2119 | 2914 |
| 2120 error::Error GLES2DecoderPassthroughImpl::DoCoverageModulationCHROMIUM( | 2915 error::Error GLES2DecoderPassthroughImpl::DoCoverageModulationCHROMIUM( |
| 2121 GLenum components) { | 2916 GLenum components) { |
| 2917 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2122 return error::kNoError; | 2918 return error::kNoError; |
| 2123 } | 2919 } |
| 2124 | 2920 |
| 2125 error::Error GLES2DecoderPassthroughImpl::DoBlendBarrierKHR() { | 2921 error::Error GLES2DecoderPassthroughImpl::DoBlendBarrierKHR() { |
| 2922 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2126 return error::kNoError; | 2923 return error::kNoError; |
| 2127 } | 2924 } |
| 2128 | 2925 |
| 2129 error::Error | 2926 error::Error |
| 2130 GLES2DecoderPassthroughImpl::DoApplyScreenSpaceAntialiasingCHROMIUM() { | 2927 GLES2DecoderPassthroughImpl::DoApplyScreenSpaceAntialiasingCHROMIUM() { |
| 2928 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2131 return error::kNoError; | 2929 return error::kNoError; |
| 2132 } | 2930 } |
| 2133 | 2931 |
| 2134 error::Error GLES2DecoderPassthroughImpl::DoBindFragDataLocationIndexedEXT( | 2932 error::Error GLES2DecoderPassthroughImpl::DoBindFragDataLocationIndexedEXT( |
| 2135 GLuint program, | 2933 GLuint program, |
| 2136 GLuint colorNumber, | 2934 GLuint colorNumber, |
| 2137 GLuint index, | 2935 GLuint index, |
| 2138 const char* name) { | 2936 const char* name) { |
| 2937 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2139 return error::kNoError; | 2938 return error::kNoError; |
| 2140 } | 2939 } |
| 2141 | 2940 |
| 2142 error::Error GLES2DecoderPassthroughImpl::DoBindFragDataLocationEXT( | 2941 error::Error GLES2DecoderPassthroughImpl::DoBindFragDataLocationEXT( |
| 2143 GLuint program, | 2942 GLuint program, |
| 2144 GLuint colorNumber, | 2943 GLuint colorNumber, |
| 2145 const char* name) { | 2944 const char* name) { |
| 2945 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2146 return error::kNoError; | 2946 return error::kNoError; |
| 2147 } | 2947 } |
| 2148 | 2948 |
| 2149 error::Error GLES2DecoderPassthroughImpl::DoGetFragDataIndexEXT( | 2949 error::Error GLES2DecoderPassthroughImpl::DoGetFragDataIndexEXT( |
| 2150 GLuint program, | 2950 GLuint program, |
| 2151 const char* name, | 2951 const char* name, |
| 2152 GLint* index) { | 2952 GLint* index) { |
| 2953 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2153 return error::kNoError; | 2954 return error::kNoError; |
| 2154 } | 2955 } |
| 2155 | 2956 |
| 2156 error::Error | 2957 error::Error |
| 2157 GLES2DecoderPassthroughImpl::DoUniformMatrix4fvStreamTextureMatrixCHROMIUM( | 2958 GLES2DecoderPassthroughImpl::DoUniformMatrix4fvStreamTextureMatrixCHROMIUM( |
| 2158 GLint location, | 2959 GLint location, |
| 2159 GLboolean transpose, | 2960 GLboolean transpose, |
| 2160 const volatile GLfloat* defaultValue) { | 2961 const volatile GLfloat* defaultValue) { |
| 2962 DCHECK(false) << "UNIMPLEMENTED"; | |
| 2161 return error::kNoError; | 2963 return error::kNoError; |
| 2162 } | 2964 } |
| 2163 | 2965 |
| 2164 } // namespace gles2 | 2966 } // namespace gles2 |
| 2165 } // namespace gpu | 2967 } // namespace gpu |
| OLD | NEW |