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