1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // This file is auto-generated from 6 // gpu/command_buffer/build_gles2_cmd_buffer.py 7 // It's formatted by clang-format using chromium coding style: 8 // clang-format -i -style=chromium filename 9 // DO NOT EDIT! 10 11 // This file is included by gles2_implementation.cc to define the 12 // GL api functions. 13 #ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_IMPL_AUTOGEN_H_ 14 #define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_IMPL_AUTOGEN_H_ 15 16 void GLES2Implementation::AttachShader(GLuint program, GLuint shader) { 17 GPU_CLIENT_SINGLE_THREAD_CHECK(); 18 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glAttachShader(" << program << ", " 19 << shader << ")"); 20 helper_->AttachShader(program, shader); 21 CheckGLError(); 22 } 23 24 void GLES2Implementation::BindBuffer(GLenum target, GLuint buffer) { 25 GPU_CLIENT_SINGLE_THREAD_CHECK(); 26 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindBuffer(" 27 << GLES2Util::GetStringBufferTarget(target) << ", " 28 << buffer << ")"); 29 if (IsBufferReservedId(buffer)) { 30 SetGLError(GL_INVALID_OPERATION, "BindBuffer", "buffer reserved id"); 31 return; 32 } 33 if (BindBufferHelper(target, buffer)) { 34 helper_->BindBuffer(target, buffer); 35 } 36 CheckGLError(); 37 } 38 39 void GLES2Implementation::BindFramebuffer(GLenum target, GLuint framebuffer) { 40 GPU_CLIENT_SINGLE_THREAD_CHECK(); 41 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindFramebuffer(" 42 << GLES2Util::GetStringFrameBufferTarget(target) << ", " 43 << framebuffer << ")"); 44 if (IsFramebufferReservedId(framebuffer)) { 45 SetGLError( 46 GL_INVALID_OPERATION, "BindFramebuffer", "framebuffer reserved id"); 47 return; 48 } 49 if (BindFramebufferHelper(target, framebuffer)) { 50 helper_->BindFramebuffer(target, framebuffer); 51 } 52 CheckGLError(); 53 } 54 55 void GLES2Implementation::BindRenderbuffer(GLenum target, GLuint renderbuffer) { 56 GPU_CLIENT_SINGLE_THREAD_CHECK(); 57 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindRenderbuffer(" 58 << GLES2Util::GetStringRenderBufferTarget(target) << ", " 59 << renderbuffer << ")"); 60 if (IsRenderbufferReservedId(renderbuffer)) { 61 SetGLError( 62 GL_INVALID_OPERATION, "BindRenderbuffer", "renderbuffer reserved id"); 63 return; 64 } 65 if (BindRenderbufferHelper(target, renderbuffer)) { 66 helper_->BindRenderbuffer(target, renderbuffer); 67 } 68 CheckGLError(); 69 } 70 71 void GLES2Implementation::BindTexture(GLenum target, GLuint texture) { 72 GPU_CLIENT_SINGLE_THREAD_CHECK(); 73 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindTexture(" 74 << GLES2Util::GetStringTextureBindTarget(target) << ", " 75 << texture << ")"); 76 if (IsTextureReservedId(texture)) { 77 SetGLError(GL_INVALID_OPERATION, "BindTexture", "texture reserved id"); 78 return; 79 } 80 if (BindTextureHelper(target, texture)) { 81 helper_->BindTexture(target, texture); 82 } 83 CheckGLError(); 84 } 85 86 void GLES2Implementation::BlendColor(GLclampf red, 87 GLclampf green, 88 GLclampf blue, 89 GLclampf alpha) { 90 GPU_CLIENT_SINGLE_THREAD_CHECK(); 91 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendColor(" << red << ", " 92 << green << ", " << blue << ", " << alpha << ")"); 93 helper_->BlendColor(red, green, blue, alpha); 94 CheckGLError(); 95 } 96 97 void GLES2Implementation::BlendEquation(GLenum mode) { 98 GPU_CLIENT_SINGLE_THREAD_CHECK(); 99 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendEquation(" 100 << GLES2Util::GetStringEquation(mode) << ")"); 101 helper_->BlendEquation(mode); 102 CheckGLError(); 103 } 104 105 void GLES2Implementation::BlendEquationSeparate(GLenum modeRGB, 106 GLenum modeAlpha) { 107 GPU_CLIENT_SINGLE_THREAD_CHECK(); 108 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendEquationSeparate(" 109 << GLES2Util::GetStringEquation(modeRGB) << ", " 110 << GLES2Util::GetStringEquation(modeAlpha) << ")"); 111 helper_->BlendEquationSeparate(modeRGB, modeAlpha); 112 CheckGLError(); 113 } 114 115 void GLES2Implementation::BlendFunc(GLenum sfactor, GLenum dfactor) { 116 GPU_CLIENT_SINGLE_THREAD_CHECK(); 117 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendFunc(" 118 << GLES2Util::GetStringSrcBlendFactor(sfactor) << ", " 119 << GLES2Util::GetStringDstBlendFactor(dfactor) << ")"); 120 helper_->BlendFunc(sfactor, dfactor); 121 CheckGLError(); 122 } 123 124 void GLES2Implementation::BlendFuncSeparate(GLenum srcRGB, 125 GLenum dstRGB, 126 GLenum srcAlpha, 127 GLenum dstAlpha) { 128 GPU_CLIENT_SINGLE_THREAD_CHECK(); 129 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendFuncSeparate(" 130 << GLES2Util::GetStringSrcBlendFactor(srcRGB) << ", " 131 << GLES2Util::GetStringDstBlendFactor(dstRGB) << ", " 132 << GLES2Util::GetStringSrcBlendFactor(srcAlpha) << ", " 133 << GLES2Util::GetStringDstBlendFactor(dstAlpha) << ")"); 134 helper_->BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); 135 CheckGLError(); 136 } 137 138 GLenum GLES2Implementation::CheckFramebufferStatus(GLenum target) { 139 GPU_CLIENT_SINGLE_THREAD_CHECK(); 140 TRACE_EVENT0("gpu", "GLES2Implementation::CheckFramebufferStatus"); 141 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCheckFramebufferStatus(" 142 << GLES2Util::GetStringFrameBufferTarget(target) << ")"); 143 typedef cmds::CheckFramebufferStatus::Result Result; 144 Result* result = GetResultAs<Result*>(); 145 if (!result) { 146 return GL_FRAMEBUFFER_UNSUPPORTED; 147 } 148 *result = 0; 149 helper_->CheckFramebufferStatus( 150 target, GetResultShmId(), GetResultShmOffset()); 151 WaitForCmd(); 152 GLenum result_value = *result; 153 GPU_CLIENT_LOG("returned " << result_value); 154 CheckGLError(); 155 return result_value; 156 } 157 158 void GLES2Implementation::Clear(GLbitfield mask) { 159 GPU_CLIENT_SINGLE_THREAD_CHECK(); 160 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClear(" << mask << ")"); 161 helper_->Clear(mask); 162 CheckGLError(); 163 } 164 165 void GLES2Implementation::ClearColor(GLclampf red, 166 GLclampf green, 167 GLclampf blue, 168 GLclampf alpha) { 169 GPU_CLIENT_SINGLE_THREAD_CHECK(); 170 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearColor(" << red << ", " 171 << green << ", " << blue << ", " << alpha << ")"); 172 helper_->ClearColor(red, green, blue, alpha); 173 CheckGLError(); 174 } 175 176 void GLES2Implementation::ClearDepthf(GLclampf depth) { 177 GPU_CLIENT_SINGLE_THREAD_CHECK(); 178 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearDepthf(" << depth << ")"); 179 helper_->ClearDepthf(depth); 180 CheckGLError(); 181 } 182 183 void GLES2Implementation::ClearStencil(GLint s) { 184 GPU_CLIENT_SINGLE_THREAD_CHECK(); 185 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearStencil(" << s << ")"); 186 helper_->ClearStencil(s); 187 CheckGLError(); 188 } 189 190 void GLES2Implementation::ColorMask(GLboolean red, 191 GLboolean green, 192 GLboolean blue, 193 GLboolean alpha) { 194 GPU_CLIENT_SINGLE_THREAD_CHECK(); 195 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glColorMask(" 196 << GLES2Util::GetStringBool(red) << ", " 197 << GLES2Util::GetStringBool(green) << ", " 198 << GLES2Util::GetStringBool(blue) << ", " 199 << GLES2Util::GetStringBool(alpha) << ")"); 200 helper_->ColorMask(red, green, blue, alpha); 201 CheckGLError(); 202 } 203 204 void GLES2Implementation::CompileShader(GLuint shader) { 205 GPU_CLIENT_SINGLE_THREAD_CHECK(); 206 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCompileShader(" << shader 207 << ")"); 208 helper_->CompileShader(shader); 209 CheckGLError(); 210 } 211 212 void GLES2Implementation::CopyTexImage2D(GLenum target, 213 GLint level, 214 GLenum internalformat, 215 GLint x, 216 GLint y, 217 GLsizei width, 218 GLsizei height, 219 GLint border) { 220 GPU_CLIENT_SINGLE_THREAD_CHECK(); 221 GPU_CLIENT_LOG( 222 "[" << GetLogPrefix() << "] glCopyTexImage2D(" 223 << GLES2Util::GetStringTextureTarget(target) << ", " << level << ", " 224 << GLES2Util::GetStringTextureInternalFormat(internalformat) << ", " 225 << x << ", " << y << ", " << width << ", " << height << ", " << border 226 << ")"); 227 if (width < 0) { 228 SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D", "width < 0"); 229 return; 230 } 231 if (height < 0) { 232 SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D", "height < 0"); 233 return; 234 } 235 if (border != 0) { 236 SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D", "border GL_INVALID_VALUE"); 237 return; 238 } 239 helper_->CopyTexImage2D(target, level, internalformat, x, y, width, height); 240 CheckGLError(); 241 } 242 243 void GLES2Implementation::CopyTexSubImage2D(GLenum target, 244 GLint level, 245 GLint xoffset, 246 GLint yoffset, 247 GLint x, 248 GLint y, 249 GLsizei width, 250 GLsizei height) { 251 GPU_CLIENT_SINGLE_THREAD_CHECK(); 252 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCopyTexSubImage2D(" 253 << GLES2Util::GetStringTextureTarget(target) << ", " 254 << level << ", " << xoffset << ", " << yoffset << ", " << x 255 << ", " << y << ", " << width << ", " << height << ")"); 256 if (width < 0) { 257 SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage2D", "width < 0"); 258 return; 259 } 260 if (height < 0) { 261 SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage2D", "height < 0"); 262 return; 263 } 264 helper_->CopyTexSubImage2D( 265 target, level, xoffset, yoffset, x, y, width, height); 266 CheckGLError(); 267 } 268 269 GLuint GLES2Implementation::CreateProgram() { 270 GPU_CLIENT_SINGLE_THREAD_CHECK(); 271 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateProgram(" 272 << ")"); 273 GLuint client_id; 274 GetIdHandler(id_namespaces::kProgramsAndShaders) 275 ->MakeIds(this, 0, 1, &client_id); 276 helper_->CreateProgram(client_id); 277 GPU_CLIENT_LOG("returned " << client_id); 278 CheckGLError(); 279 return client_id; 280 } 281 282 GLuint GLES2Implementation::CreateShader(GLenum type) { 283 GPU_CLIENT_SINGLE_THREAD_CHECK(); 284 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateShader(" 285 << GLES2Util::GetStringShaderType(type) << ")"); 286 GLuint client_id; 287 GetIdHandler(id_namespaces::kProgramsAndShaders) 288 ->MakeIds(this, 0, 1, &client_id); 289 helper_->CreateShader(type, client_id); 290 GPU_CLIENT_LOG("returned " << client_id); 291 CheckGLError(); 292 return client_id; 293 } 294 295 void GLES2Implementation::CullFace(GLenum mode) { 296 GPU_CLIENT_SINGLE_THREAD_CHECK(); 297 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCullFace(" 298 << GLES2Util::GetStringFaceType(mode) << ")"); 299 helper_->CullFace(mode); 300 CheckGLError(); 301 } 302 303 void GLES2Implementation::DeleteBuffers(GLsizei n, const GLuint* buffers) { 304 GPU_CLIENT_SINGLE_THREAD_CHECK(); 305 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteBuffers(" << n << ", " 306 << static_cast<const void*>(buffers) << ")"); 307 GPU_CLIENT_LOG_CODE_BLOCK({ 308 for (GLsizei i = 0; i < n; ++i) { 309 GPU_CLIENT_LOG(" " << i << ": " << buffers[i]); 310 } 311 }); 312 GPU_CLIENT_DCHECK_CODE_BLOCK({ 313 for (GLsizei i = 0; i < n; ++i) { 314 DCHECK(buffers[i] != 0); 315 } 316 }); 317 if (n < 0) { 318 SetGLError(GL_INVALID_VALUE, "glDeleteBuffers", "n < 0"); 319 return; 320 } 321 DeleteBuffersHelper(n, buffers); 322 CheckGLError(); 323 } 324 325 void GLES2Implementation::DeleteFramebuffers(GLsizei n, 326 const GLuint* framebuffers) { 327 GPU_CLIENT_SINGLE_THREAD_CHECK(); 328 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteFramebuffers(" << n << ", " 329 << static_cast<const void*>(framebuffers) << ")"); 330 GPU_CLIENT_LOG_CODE_BLOCK({ 331 for (GLsizei i = 0; i < n; ++i) { 332 GPU_CLIENT_LOG(" " << i << ": " << framebuffers[i]); 333 } 334 }); 335 GPU_CLIENT_DCHECK_CODE_BLOCK({ 336 for (GLsizei i = 0; i < n; ++i) { 337 DCHECK(framebuffers[i] != 0); 338 } 339 }); 340 if (n < 0) { 341 SetGLError(GL_INVALID_VALUE, "glDeleteFramebuffers", "n < 0"); 342 return; 343 } 344 DeleteFramebuffersHelper(n, framebuffers); 345 CheckGLError(); 346 } 347 348 void GLES2Implementation::DeleteProgram(GLuint program) { 349 GPU_CLIENT_SINGLE_THREAD_CHECK(); 350 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteProgram(" << program 351 << ")"); 352 GPU_CLIENT_DCHECK(program != 0); 353 DeleteProgramHelper(program); 354 CheckGLError(); 355 } 356 357 void GLES2Implementation::DeleteRenderbuffers(GLsizei n, 358 const GLuint* renderbuffers) { 359 GPU_CLIENT_SINGLE_THREAD_CHECK(); 360 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteRenderbuffers(" << n 361 << ", " << static_cast<const void*>(renderbuffers) << ")"); 362 GPU_CLIENT_LOG_CODE_BLOCK({ 363 for (GLsizei i = 0; i < n; ++i) { 364 GPU_CLIENT_LOG(" " << i << ": " << renderbuffers[i]); 365 } 366 }); 367 GPU_CLIENT_DCHECK_CODE_BLOCK({ 368 for (GLsizei i = 0; i < n; ++i) { 369 DCHECK(renderbuffers[i] != 0); 370 } 371 }); 372 if (n < 0) { 373 SetGLError(GL_INVALID_VALUE, "glDeleteRenderbuffers", "n < 0"); 374 return; 375 } 376 DeleteRenderbuffersHelper(n, renderbuffers); 377 CheckGLError(); 378 } 379 380 void GLES2Implementation::DeleteShader(GLuint shader) { 381 GPU_CLIENT_SINGLE_THREAD_CHECK(); 382 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteShader(" << shader << ")"); 383 GPU_CLIENT_DCHECK(shader != 0); 384 DeleteShaderHelper(shader); 385 CheckGLError(); 386 } 387 388 void GLES2Implementation::DeleteTextures(GLsizei n, const GLuint* textures) { 389 GPU_CLIENT_SINGLE_THREAD_CHECK(); 390 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteTextures(" << n << ", " 391 << static_cast<const void*>(textures) << ")"); 392 GPU_CLIENT_LOG_CODE_BLOCK({ 393 for (GLsizei i = 0; i < n; ++i) { 394 GPU_CLIENT_LOG(" " << i << ": " << textures[i]); 395 } 396 }); 397 GPU_CLIENT_DCHECK_CODE_BLOCK({ 398 for (GLsizei i = 0; i < n; ++i) { 399 DCHECK(textures[i] != 0); 400 } 401 }); 402 if (n < 0) { 403 SetGLError(GL_INVALID_VALUE, "glDeleteTextures", "n < 0"); 404 return; 405 } 406 DeleteTexturesHelper(n, textures); 407 CheckGLError(); 408 } 409 410 void GLES2Implementation::DepthFunc(GLenum func) { 411 GPU_CLIENT_SINGLE_THREAD_CHECK(); 412 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthFunc(" 413 << GLES2Util::GetStringCmpFunction(func) << ")"); 414 helper_->DepthFunc(func); 415 CheckGLError(); 416 } 417 418 void GLES2Implementation::DepthMask(GLboolean flag) { 419 GPU_CLIENT_SINGLE_THREAD_CHECK(); 420 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthMask(" 421 << GLES2Util::GetStringBool(flag) << ")"); 422 helper_->DepthMask(flag); 423 CheckGLError(); 424 } 425 426 void GLES2Implementation::DepthRangef(GLclampf zNear, GLclampf zFar) { 427 GPU_CLIENT_SINGLE_THREAD_CHECK(); 428 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthRangef(" << zNear << ", " 429 << zFar << ")"); 430 helper_->DepthRangef(zNear, zFar); 431 CheckGLError(); 432 } 433 434 void GLES2Implementation::DetachShader(GLuint program, GLuint shader) { 435 GPU_CLIENT_SINGLE_THREAD_CHECK(); 436 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDetachShader(" << program << ", " 437 << shader << ")"); 438 helper_->DetachShader(program, shader); 439 CheckGLError(); 440 } 441 442 void GLES2Implementation::FramebufferRenderbuffer(GLenum target, 443 GLenum attachment, 444 GLenum renderbuffertarget, 445 GLuint renderbuffer) { 446 GPU_CLIENT_SINGLE_THREAD_CHECK(); 447 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferRenderbuffer(" 448 << GLES2Util::GetStringFrameBufferTarget(target) << ", " 449 << GLES2Util::GetStringAttachment(attachment) << ", " 450 << GLES2Util::GetStringRenderBufferTarget( 451 renderbuffertarget) << ", " << renderbuffer << ")"); 452 helper_->FramebufferRenderbuffer( 453 target, attachment, renderbuffertarget, renderbuffer); 454 CheckGLError(); 455 } 456 457 void GLES2Implementation::FramebufferTexture2D(GLenum target, 458 GLenum attachment, 459 GLenum textarget, 460 GLuint texture, 461 GLint level) { 462 GPU_CLIENT_SINGLE_THREAD_CHECK(); 463 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferTexture2D(" 464 << GLES2Util::GetStringFrameBufferTarget(target) << ", " 465 << GLES2Util::GetStringAttachment(attachment) << ", " 466 << GLES2Util::GetStringTextureTarget(textarget) << ", " 467 << texture << ", " << level << ")"); 468 if (level != 0) { 469 SetGLError( 470 GL_INVALID_VALUE, "glFramebufferTexture2D", "level GL_INVALID_VALUE"); 471 return; 472 } 473 helper_->FramebufferTexture2D(target, attachment, textarget, texture); 474 CheckGLError(); 475 } 476 477 void GLES2Implementation::FrontFace(GLenum mode) { 478 GPU_CLIENT_SINGLE_THREAD_CHECK(); 479 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFrontFace(" 480 << GLES2Util::GetStringFaceMode(mode) << ")"); 481 helper_->FrontFace(mode); 482 CheckGLError(); 483 } 484 485 void GLES2Implementation::GenBuffers(GLsizei n, GLuint* buffers) { 486 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenBuffers(" << n << ", " 487 << static_cast<const void*>(buffers) << ")"); 488 if (n < 0) { 489 SetGLError(GL_INVALID_VALUE, "glGenBuffers", "n < 0"); 490 return; 491 } 492 GPU_CLIENT_SINGLE_THREAD_CHECK(); 493 GetIdHandler(id_namespaces::kBuffers)->MakeIds(this, 0, n, buffers); 494 GenBuffersHelper(n, buffers); 495 helper_->GenBuffersImmediate(n, buffers); 496 if (share_group_->bind_generates_resource()) 497 helper_->CommandBufferHelper::Flush(); 498 GPU_CLIENT_LOG_CODE_BLOCK({ 499 for (GLsizei i = 0; i < n; ++i) { 500 GPU_CLIENT_LOG(" " << i << ": " << buffers[i]); 501 } 502 }); 503 CheckGLError(); 504 } 505 506 void GLES2Implementation::GenerateMipmap(GLenum target) { 507 GPU_CLIENT_SINGLE_THREAD_CHECK(); 508 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenerateMipmap(" 509 << GLES2Util::GetStringTextureBindTarget(target) << ")"); 510 helper_->GenerateMipmap(target); 511 CheckGLError(); 512 } 513 514 void GLES2Implementation::GenFramebuffers(GLsizei n, GLuint* framebuffers) { 515 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenFramebuffers(" << n << ", " 516 << static_cast<const void*>(framebuffers) << ")"); 517 if (n < 0) { 518 SetGLError(GL_INVALID_VALUE, "glGenFramebuffers", "n < 0"); 519 return; 520 } 521 GPU_CLIENT_SINGLE_THREAD_CHECK(); 522 GetIdHandler(id_namespaces::kFramebuffers)->MakeIds(this, 0, n, framebuffers); 523 GenFramebuffersHelper(n, framebuffers); 524 helper_->GenFramebuffersImmediate(n, framebuffers); 525 if (share_group_->bind_generates_resource()) 526 helper_->CommandBufferHelper::Flush(); 527 GPU_CLIENT_LOG_CODE_BLOCK({ 528 for (GLsizei i = 0; i < n; ++i) { 529 GPU_CLIENT_LOG(" " << i << ": " << framebuffers[i]); 530 } 531 }); 532 CheckGLError(); 533 } 534 535 void GLES2Implementation::GenRenderbuffers(GLsizei n, GLuint* renderbuffers) { 536 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenRenderbuffers(" << n << ", " 537 << static_cast<const void*>(renderbuffers) << ")"); 538 if (n < 0) { 539 SetGLError(GL_INVALID_VALUE, "glGenRenderbuffers", "n < 0"); 540 return; 541 } 542 GPU_CLIENT_SINGLE_THREAD_CHECK(); 543 GetIdHandler(id_namespaces::kRenderbuffers) 544 ->MakeIds(this, 0, n, renderbuffers); 545 GenRenderbuffersHelper(n, renderbuffers); 546 helper_->GenRenderbuffersImmediate(n, renderbuffers); 547 if (share_group_->bind_generates_resource()) 548 helper_->CommandBufferHelper::Flush(); 549 GPU_CLIENT_LOG_CODE_BLOCK({ 550 for (GLsizei i = 0; i < n; ++i) { 551 GPU_CLIENT_LOG(" " << i << ": " << renderbuffers[i]); 552 } 553 }); 554 CheckGLError(); 555 } 556 557 void GLES2Implementation::GenTextures(GLsizei n, GLuint* textures) { 558 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenTextures(" << n << ", " 559 << static_cast<const void*>(textures) << ")"); 560 if (n < 0) { 561 SetGLError(GL_INVALID_VALUE, "glGenTextures", "n < 0"); 562 return; 563 } 564 GPU_CLIENT_SINGLE_THREAD_CHECK(); 565 GetIdHandler(id_namespaces::kTextures)->MakeIds(this, 0, n, textures); 566 GenTexturesHelper(n, textures); 567 helper_->GenTexturesImmediate(n, textures); 568 if (share_group_->bind_generates_resource()) 569 helper_->CommandBufferHelper::Flush(); 570 GPU_CLIENT_LOG_CODE_BLOCK({ 571 for (GLsizei i = 0; i < n; ++i) { 572 GPU_CLIENT_LOG(" " << i << ": " << textures[i]); 573 } 574 }); 575 CheckGLError(); 576 } 577 578 void GLES2Implementation::GetBooleanv(GLenum pname, GLboolean* params) { 579 GPU_CLIENT_SINGLE_THREAD_CHECK(); 580 GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLboolean, params); 581 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetBooleanv(" 582 << GLES2Util::GetStringGLState(pname) << ", " 583 << static_cast<const void*>(params) << ")"); 584 TRACE_EVENT0("gpu", "GLES2Implementation::GetBooleanv"); 585 if (GetBooleanvHelper(pname, params)) { 586 return; 587 } 588 typedef cmds::GetBooleanv::Result Result; 589 Result* result = GetResultAs<Result*>(); 590 if (!result) { 591 return; 592 } 593 result->SetNumResults(0); 594 helper_->GetBooleanv(pname, GetResultShmId(), GetResultShmOffset()); 595 WaitForCmd(); 596 result->CopyResult(params); 597 GPU_CLIENT_LOG_CODE_BLOCK({ 598 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 599 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 600 } 601 }); 602 CheckGLError(); 603 } 604 void GLES2Implementation::GetBufferParameteriv(GLenum target, 605 GLenum pname, 606 GLint* params) { 607 GPU_CLIENT_SINGLE_THREAD_CHECK(); 608 GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params); 609 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetBufferParameteriv(" 610 << GLES2Util::GetStringBufferTarget(target) << ", " 611 << GLES2Util::GetStringBufferParameter(pname) << ", " 612 << static_cast<const void*>(params) << ")"); 613 TRACE_EVENT0("gpu", "GLES2Implementation::GetBufferParameteriv"); 614 if (GetBufferParameterivHelper(target, pname, params)) { 615 return; 616 } 617 typedef cmds::GetBufferParameteriv::Result Result; 618 Result* result = GetResultAs<Result*>(); 619 if (!result) { 620 return; 621 } 622 result->SetNumResults(0); 623 helper_->GetBufferParameteriv( 624 target, pname, GetResultShmId(), GetResultShmOffset()); 625 WaitForCmd(); 626 result->CopyResult(params); 627 GPU_CLIENT_LOG_CODE_BLOCK({ 628 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 629 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 630 } 631 }); 632 CheckGLError(); 633 } 634 void GLES2Implementation::GetFloatv(GLenum pname, GLfloat* params) { 635 GPU_CLIENT_SINGLE_THREAD_CHECK(); 636 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetFloatv(" 637 << GLES2Util::GetStringGLState(pname) << ", " 638 << static_cast<const void*>(params) << ")"); 639 TRACE_EVENT0("gpu", "GLES2Implementation::GetFloatv"); 640 if (GetFloatvHelper(pname, params)) { 641 return; 642 } 643 typedef cmds::GetFloatv::Result Result; 644 Result* result = GetResultAs<Result*>(); 645 if (!result) { 646 return; 647 } 648 result->SetNumResults(0); 649 helper_->GetFloatv(pname, GetResultShmId(), GetResultShmOffset()); 650 WaitForCmd(); 651 result->CopyResult(params); 652 GPU_CLIENT_LOG_CODE_BLOCK({ 653 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 654 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 655 } 656 }); 657 CheckGLError(); 658 } 659 void GLES2Implementation::GetFramebufferAttachmentParameteriv(GLenum target, 660 GLenum attachment, 661 GLenum pname, 662 GLint* params) { 663 GPU_CLIENT_SINGLE_THREAD_CHECK(); 664 GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params); 665 GPU_CLIENT_LOG("[" << GetLogPrefix() 666 << "] glGetFramebufferAttachmentParameteriv(" 667 << GLES2Util::GetStringFrameBufferTarget(target) << ", " 668 << GLES2Util::GetStringAttachment(attachment) << ", " 669 << GLES2Util::GetStringFrameBufferParameter(pname) << ", " 670 << static_cast<const void*>(params) << ")"); 671 TRACE_EVENT0("gpu", 672 "GLES2Implementation::GetFramebufferAttachmentParameteriv"); 673 if (GetFramebufferAttachmentParameterivHelper( 674 target, attachment, pname, params)) { 675 return; 676 } 677 typedef cmds::GetFramebufferAttachmentParameteriv::Result Result; 678 Result* result = GetResultAs<Result*>(); 679 if (!result) { 680 return; 681 } 682 result->SetNumResults(0); 683 helper_->GetFramebufferAttachmentParameteriv( 684 target, attachment, pname, GetResultShmId(), GetResultShmOffset()); 685 WaitForCmd(); 686 result->CopyResult(params); 687 GPU_CLIENT_LOG_CODE_BLOCK({ 688 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 689 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 690 } 691 }); 692 CheckGLError(); 693 } 694 void GLES2Implementation::GetIntegerv(GLenum pname, GLint* params) { 695 GPU_CLIENT_SINGLE_THREAD_CHECK(); 696 GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params); 697 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetIntegerv(" 698 << GLES2Util::GetStringGLState(pname) << ", " 699 << static_cast<const void*>(params) << ")"); 700 TRACE_EVENT0("gpu", "GLES2Implementation::GetIntegerv"); 701 if (GetIntegervHelper(pname, params)) { 702 return; 703 } 704 typedef cmds::GetIntegerv::Result Result; 705 Result* result = GetResultAs<Result*>(); 706 if (!result) { 707 return; 708 } 709 result->SetNumResults(0); 710 helper_->GetIntegerv(pname, GetResultShmId(), GetResultShmOffset()); 711 WaitForCmd(); 712 result->CopyResult(params); 713 GPU_CLIENT_LOG_CODE_BLOCK({ 714 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 715 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 716 } 717 }); 718 CheckGLError(); 719 } 720 void GLES2Implementation::GetProgramiv(GLuint program, 721 GLenum pname, 722 GLint* params) { 723 GPU_CLIENT_SINGLE_THREAD_CHECK(); 724 GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params); 725 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetProgramiv(" << program << ", " 726 << GLES2Util::GetStringProgramParameter(pname) << ", " 727 << static_cast<const void*>(params) << ")"); 728 TRACE_EVENT0("gpu", "GLES2Implementation::GetProgramiv"); 729 if (GetProgramivHelper(program, pname, params)) { 730 return; 731 } 732 typedef cmds::GetProgramiv::Result Result; 733 Result* result = GetResultAs<Result*>(); 734 if (!result) { 735 return; 736 } 737 result->SetNumResults(0); 738 helper_->GetProgramiv(program, pname, GetResultShmId(), GetResultShmOffset()); 739 WaitForCmd(); 740 result->CopyResult(params); 741 GPU_CLIENT_LOG_CODE_BLOCK({ 742 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 743 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 744 } 745 }); 746 CheckGLError(); 747 } 748 void GLES2Implementation::GetProgramInfoLog(GLuint program, 749 GLsizei bufsize, 750 GLsizei* length, 751 char* infolog) { 752 GPU_CLIENT_SINGLE_THREAD_CHECK(); 753 GPU_CLIENT_VALIDATE_DESTINATION_OPTIONAL_INITALIZATION(GLsizei, length); 754 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetProgramInfoLog" 755 << "(" << program << ", " << bufsize << ", " 756 << static_cast<void*>(length) << ", " 757 << static_cast<void*>(infolog) << ")"); 758 helper_->SetBucketSize(kResultBucketId, 0); 759 helper_->GetProgramInfoLog(program, kResultBucketId); 760 std::string str; 761 GLsizei max_size = 0; 762 if (GetBucketAsString(kResultBucketId, &str)) { 763 if (bufsize > 0) { 764 max_size = std::min(static_cast<size_t>(bufsize) - 1, str.size()); 765 memcpy(infolog, str.c_str(), max_size); 766 infolog[max_size] = '\0'; 767 GPU_CLIENT_LOG("------\n" << infolog << "\n------"); 768 } 769 } 770 if (length != NULL) { 771 *length = max_size; 772 } 773 CheckGLError(); 774 } 775 void GLES2Implementation::GetRenderbufferParameteriv(GLenum target, 776 GLenum pname, 777 GLint* params) { 778 GPU_CLIENT_SINGLE_THREAD_CHECK(); 779 GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params); 780 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetRenderbufferParameteriv(" 781 << GLES2Util::GetStringRenderBufferTarget(target) << ", " 782 << GLES2Util::GetStringRenderBufferParameter(pname) << ", " 783 << static_cast<const void*>(params) << ")"); 784 TRACE_EVENT0("gpu", "GLES2Implementation::GetRenderbufferParameteriv"); 785 if (GetRenderbufferParameterivHelper(target, pname, params)) { 786 return; 787 } 788 typedef cmds::GetRenderbufferParameteriv::Result Result; 789 Result* result = GetResultAs<Result*>(); 790 if (!result) { 791 return; 792 } 793 result->SetNumResults(0); 794 helper_->GetRenderbufferParameteriv( 795 target, pname, GetResultShmId(), GetResultShmOffset()); 796 WaitForCmd(); 797 result->CopyResult(params); 798 GPU_CLIENT_LOG_CODE_BLOCK({ 799 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 800 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 801 } 802 }); 803 CheckGLError(); 804 } 805 void GLES2Implementation::GetShaderiv(GLuint shader, 806 GLenum pname, 807 GLint* params) { 808 GPU_CLIENT_SINGLE_THREAD_CHECK(); 809 GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params); 810 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetShaderiv(" << shader << ", " 811 << GLES2Util::GetStringShaderParameter(pname) << ", " 812 << static_cast<const void*>(params) << ")"); 813 TRACE_EVENT0("gpu", "GLES2Implementation::GetShaderiv"); 814 if (GetShaderivHelper(shader, pname, params)) { 815 return; 816 } 817 typedef cmds::GetShaderiv::Result Result; 818 Result* result = GetResultAs<Result*>(); 819 if (!result) { 820 return; 821 } 822 result->SetNumResults(0); 823 helper_->GetShaderiv(shader, pname, GetResultShmId(), GetResultShmOffset()); 824 WaitForCmd(); 825 result->CopyResult(params); 826 GPU_CLIENT_LOG_CODE_BLOCK({ 827 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 828 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 829 } 830 }); 831 CheckGLError(); 832 } 833 void GLES2Implementation::GetShaderInfoLog(GLuint shader, 834 GLsizei bufsize, 835 GLsizei* length, 836 char* infolog) { 837 GPU_CLIENT_SINGLE_THREAD_CHECK(); 838 GPU_CLIENT_VALIDATE_DESTINATION_OPTIONAL_INITALIZATION(GLsizei, length); 839 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetShaderInfoLog" 840 << "(" << shader << ", " << bufsize << ", " 841 << static_cast<void*>(length) << ", " 842 << static_cast<void*>(infolog) << ")"); 843 helper_->SetBucketSize(kResultBucketId, 0); 844 helper_->GetShaderInfoLog(shader, kResultBucketId); 845 std::string str; 846 GLsizei max_size = 0; 847 if (GetBucketAsString(kResultBucketId, &str)) { 848 if (bufsize > 0) { 849 max_size = std::min(static_cast<size_t>(bufsize) - 1, str.size()); 850 memcpy(infolog, str.c_str(), max_size); 851 infolog[max_size] = '\0'; 852 GPU_CLIENT_LOG("------\n" << infolog << "\n------"); 853 } 854 } 855 if (length != NULL) { 856 *length = max_size; 857 } 858 CheckGLError(); 859 } 860 void GLES2Implementation::GetShaderSource(GLuint shader, 861 GLsizei bufsize, 862 GLsizei* length, 863 char* source) { 864 GPU_CLIENT_SINGLE_THREAD_CHECK(); 865 GPU_CLIENT_VALIDATE_DESTINATION_OPTIONAL_INITALIZATION(GLsizei, length); 866 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetShaderSource" 867 << "(" << shader << ", " << bufsize << ", " 868 << static_cast<void*>(length) << ", " 869 << static_cast<void*>(source) << ")"); 870 helper_->SetBucketSize(kResultBucketId, 0); 871 helper_->GetShaderSource(shader, kResultBucketId); 872 std::string str; 873 GLsizei max_size = 0; 874 if (GetBucketAsString(kResultBucketId, &str)) { 875 if (bufsize > 0) { 876 max_size = std::min(static_cast<size_t>(bufsize) - 1, str.size()); 877 memcpy(source, str.c_str(), max_size); 878 source[max_size] = '\0'; 879 GPU_CLIENT_LOG("------\n" << source << "\n------"); 880 } 881 } 882 if (length != NULL) { 883 *length = max_size; 884 } 885 CheckGLError(); 886 } 887 void GLES2Implementation::GetTexParameterfv(GLenum target, 888 GLenum pname, 889 GLfloat* params) { 890 GPU_CLIENT_SINGLE_THREAD_CHECK(); 891 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetTexParameterfv(" 892 << GLES2Util::GetStringGetTexParamTarget(target) << ", " 893 << GLES2Util::GetStringTextureParameter(pname) << ", " 894 << static_cast<const void*>(params) << ")"); 895 TRACE_EVENT0("gpu", "GLES2Implementation::GetTexParameterfv"); 896 if (GetTexParameterfvHelper(target, pname, params)) { 897 return; 898 } 899 typedef cmds::GetTexParameterfv::Result Result; 900 Result* result = GetResultAs<Result*>(); 901 if (!result) { 902 return; 903 } 904 result->SetNumResults(0); 905 helper_->GetTexParameterfv( 906 target, pname, GetResultShmId(), GetResultShmOffset()); 907 WaitForCmd(); 908 result->CopyResult(params); 909 GPU_CLIENT_LOG_CODE_BLOCK({ 910 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 911 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 912 } 913 }); 914 CheckGLError(); 915 } 916 void GLES2Implementation::GetTexParameteriv(GLenum target, 917 GLenum pname, 918 GLint* params) { 919 GPU_CLIENT_SINGLE_THREAD_CHECK(); 920 GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params); 921 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetTexParameteriv(" 922 << GLES2Util::GetStringGetTexParamTarget(target) << ", " 923 << GLES2Util::GetStringTextureParameter(pname) << ", " 924 << static_cast<const void*>(params) << ")"); 925 TRACE_EVENT0("gpu", "GLES2Implementation::GetTexParameteriv"); 926 if (GetTexParameterivHelper(target, pname, params)) { 927 return; 928 } 929 typedef cmds::GetTexParameteriv::Result Result; 930 Result* result = GetResultAs<Result*>(); 931 if (!result) { 932 return; 933 } 934 result->SetNumResults(0); 935 helper_->GetTexParameteriv( 936 target, pname, GetResultShmId(), GetResultShmOffset()); 937 WaitForCmd(); 938 result->CopyResult(params); 939 GPU_CLIENT_LOG_CODE_BLOCK({ 940 for (int32_t i = 0; i < result->GetNumResults(); ++i) { 941 GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]); 942 } 943 }); 944 CheckGLError(); 945 } 946 void GLES2Implementation::Hint(GLenum target, GLenum mode) { 947 GPU_CLIENT_SINGLE_THREAD_CHECK(); 948 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glHint(" 949 << GLES2Util::GetStringHintTarget(target) << ", " 950 << GLES2Util::GetStringHintMode(mode) << ")"); 951 helper_->Hint(target, mode); 952 CheckGLError(); 953 } 954 955 GLboolean GLES2Implementation::IsBuffer(GLuint buffer) { 956 GPU_CLIENT_SINGLE_THREAD_CHECK(); 957 TRACE_EVENT0("gpu", "GLES2Implementation::IsBuffer"); 958 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsBuffer(" << buffer << ")"); 959 typedef cmds::IsBuffer::Result Result; 960 Result* result = GetResultAs<Result*>(); 961 if (!result) { 962 return GL_FALSE; 963 } 964 *result = 0; 965 helper_->IsBuffer(buffer, GetResultShmId(), GetResultShmOffset()); 966 WaitForCmd(); 967 GLboolean result_value = *result; 968 GPU_CLIENT_LOG("returned " << result_value); 969 CheckGLError(); 970 return result_value; 971 } 972 973 GLboolean GLES2Implementation::IsFramebuffer(GLuint framebuffer) { 974 GPU_CLIENT_SINGLE_THREAD_CHECK(); 975 TRACE_EVENT0("gpu", "GLES2Implementation::IsFramebuffer"); 976 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsFramebuffer(" << framebuffer 977 << ")"); 978 typedef cmds::IsFramebuffer::Result Result; 979 Result* result = GetResultAs<Result*>(); 980 if (!result) { 981 return GL_FALSE; 982 } 983 *result = 0; 984 helper_->IsFramebuffer(framebuffer, GetResultShmId(), GetResultShmOffset()); 985 WaitForCmd(); 986 GLboolean result_value = *result; 987 GPU_CLIENT_LOG("returned " << result_value); 988 CheckGLError(); 989 return result_value; 990 } 991 992 GLboolean GLES2Implementation::IsProgram(GLuint program) { 993 GPU_CLIENT_SINGLE_THREAD_CHECK(); 994 TRACE_EVENT0("gpu", "GLES2Implementation::IsProgram"); 995 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsProgram(" << program << ")"); 996 typedef cmds::IsProgram::Result Result; 997 Result* result = GetResultAs<Result*>(); 998 if (!result) { 999 return GL_FALSE; 1000 } 1001 *result = 0; 1002 helper_->IsProgram(program, GetResultShmId(), GetResultShmOffset()); 1003 WaitForCmd(); 1004 GLboolean result_value = *result; 1005 GPU_CLIENT_LOG("returned " << result_value); 1006 CheckGLError(); 1007 return result_value; 1008 } 1009 1010 GLboolean GLES2Implementation::IsRenderbuffer(GLuint renderbuffer) { 1011 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1012 TRACE_EVENT0("gpu", "GLES2Implementation::IsRenderbuffer"); 1013 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsRenderbuffer(" << renderbuffer 1014 << ")"); 1015 typedef cmds::IsRenderbuffer::Result Result; 1016 Result* result = GetResultAs<Result*>(); 1017 if (!result) { 1018 return GL_FALSE; 1019 } 1020 *result = 0; 1021 helper_->IsRenderbuffer(renderbuffer, GetResultShmId(), GetResultShmOffset()); 1022 WaitForCmd(); 1023 GLboolean result_value = *result; 1024 GPU_CLIENT_LOG("returned " << result_value); 1025 CheckGLError(); 1026 return result_value; 1027 } 1028 1029 GLboolean GLES2Implementation::IsShader(GLuint shader) { 1030 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1031 TRACE_EVENT0("gpu", "GLES2Implementation::IsShader"); 1032 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsShader(" << shader << ")"); 1033 typedef cmds::IsShader::Result Result; 1034 Result* result = GetResultAs<Result*>(); 1035 if (!result) { 1036 return GL_FALSE; 1037 } 1038 *result = 0; 1039 helper_->IsShader(shader, GetResultShmId(), GetResultShmOffset()); 1040 WaitForCmd(); 1041 GLboolean result_value = *result; 1042 GPU_CLIENT_LOG("returned " << result_value); 1043 CheckGLError(); 1044 return result_value; 1045 } 1046 1047 GLboolean GLES2Implementation::IsTexture(GLuint texture) { 1048 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1049 TRACE_EVENT0("gpu", "GLES2Implementation::IsTexture"); 1050 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsTexture(" << texture << ")"); 1051 typedef cmds::IsTexture::Result Result; 1052 Result* result = GetResultAs<Result*>(); 1053 if (!result) { 1054 return GL_FALSE; 1055 } 1056 *result = 0; 1057 helper_->IsTexture(texture, GetResultShmId(), GetResultShmOffset()); 1058 WaitForCmd(); 1059 GLboolean result_value = *result; 1060 GPU_CLIENT_LOG("returned " << result_value); 1061 CheckGLError(); 1062 return result_value; 1063 } 1064 1065 void GLES2Implementation::LineWidth(GLfloat width) { 1066 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1067 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glLineWidth(" << width << ")"); 1068 helper_->LineWidth(width); 1069 CheckGLError(); 1070 } 1071 1072 void GLES2Implementation::PolygonOffset(GLfloat factor, GLfloat units) { 1073 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1074 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPolygonOffset(" << factor << ", " 1075 << units << ")"); 1076 helper_->PolygonOffset(factor, units); 1077 CheckGLError(); 1078 } 1079 1080 void GLES2Implementation::ReleaseShaderCompiler() { 1081 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1082 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glReleaseShaderCompiler(" 1083 << ")"); 1084 helper_->ReleaseShaderCompiler(); 1085 CheckGLError(); 1086 } 1087 1088 void GLES2Implementation::RenderbufferStorage(GLenum target, 1089 GLenum internalformat, 1090 GLsizei width, 1091 GLsizei height) { 1092 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1093 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glRenderbufferStorage(" 1094 << GLES2Util::GetStringRenderBufferTarget(target) << ", " 1095 << GLES2Util::GetStringRenderBufferFormat(internalformat) 1096 << ", " << width << ", " << height << ")"); 1097 if (width < 0) { 1098 SetGLError(GL_INVALID_VALUE, "glRenderbufferStorage", "width < 0"); 1099 return; 1100 } 1101 if (height < 0) { 1102 SetGLError(GL_INVALID_VALUE, "glRenderbufferStorage", "height < 0"); 1103 return; 1104 } 1105 helper_->RenderbufferStorage(target, internalformat, width, height); 1106 CheckGLError(); 1107 } 1108 1109 void GLES2Implementation::SampleCoverage(GLclampf value, GLboolean invert) { 1110 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1111 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glSampleCoverage(" << value << ", " 1112 << GLES2Util::GetStringBool(invert) << ")"); 1113 helper_->SampleCoverage(value, invert); 1114 CheckGLError(); 1115 } 1116 1117 void GLES2Implementation::Scissor(GLint x, 1118 GLint y, 1119 GLsizei width, 1120 GLsizei height) { 1121 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1122 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glScissor(" << x << ", " << y 1123 << ", " << width << ", " << height << ")"); 1124 if (width < 0) { 1125 SetGLError(GL_INVALID_VALUE, "glScissor", "width < 0"); 1126 return; 1127 } 1128 if (height < 0) { 1129 SetGLError(GL_INVALID_VALUE, "glScissor", "height < 0"); 1130 return; 1131 } 1132 helper_->Scissor(x, y, width, height); 1133 CheckGLError(); 1134 } 1135 1136 void GLES2Implementation::StencilFunc(GLenum func, GLint ref, GLuint mask) { 1137 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1138 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilFunc(" 1139 << GLES2Util::GetStringCmpFunction(func) << ", " << ref 1140 << ", " << mask << ")"); 1141 helper_->StencilFunc(func, ref, mask); 1142 CheckGLError(); 1143 } 1144 1145 void GLES2Implementation::StencilFuncSeparate(GLenum face, 1146 GLenum func, 1147 GLint ref, 1148 GLuint mask) { 1149 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1150 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilFuncSeparate(" 1151 << GLES2Util::GetStringFaceType(face) << ", " 1152 << GLES2Util::GetStringCmpFunction(func) << ", " << ref 1153 << ", " << mask << ")"); 1154 helper_->StencilFuncSeparate(face, func, ref, mask); 1155 CheckGLError(); 1156 } 1157 1158 void GLES2Implementation::StencilMask(GLuint mask) { 1159 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1160 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilMask(" << mask << ")"); 1161 helper_->StencilMask(mask); 1162 CheckGLError(); 1163 } 1164 1165 void GLES2Implementation::StencilMaskSeparate(GLenum face, GLuint mask) { 1166 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1167 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilMaskSeparate(" 1168 << GLES2Util::GetStringFaceType(face) << ", " << mask 1169 << ")"); 1170 helper_->StencilMaskSeparate(face, mask); 1171 CheckGLError(); 1172 } 1173 1174 void GLES2Implementation::StencilOp(GLenum fail, GLenum zfail, GLenum zpass) { 1175 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1176 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilOp(" 1177 << GLES2Util::GetStringStencilOp(fail) << ", " 1178 << GLES2Util::GetStringStencilOp(zfail) << ", " 1179 << GLES2Util::GetStringStencilOp(zpass) << ")"); 1180 helper_->StencilOp(fail, zfail, zpass); 1181 CheckGLError(); 1182 } 1183 1184 void GLES2Implementation::StencilOpSeparate(GLenum face, 1185 GLenum fail, 1186 GLenum zfail, 1187 GLenum zpass) { 1188 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1189 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilOpSeparate(" 1190 << GLES2Util::GetStringFaceType(face) << ", " 1191 << GLES2Util::GetStringStencilOp(fail) << ", " 1192 << GLES2Util::GetStringStencilOp(zfail) << ", " 1193 << GLES2Util::GetStringStencilOp(zpass) << ")"); 1194 helper_->StencilOpSeparate(face, fail, zfail, zpass); 1195 CheckGLError(); 1196 } 1197 1198 void GLES2Implementation::TexParameterf(GLenum target, 1199 GLenum pname, 1200 GLfloat param) { 1201 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1202 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameterf(" 1203 << GLES2Util::GetStringTextureBindTarget(target) << ", " 1204 << GLES2Util::GetStringTextureParameter(pname) << ", " 1205 << param << ")"); 1206 helper_->TexParameterf(target, pname, param); 1207 CheckGLError(); 1208 } 1209 1210 void GLES2Implementation::TexParameterfv(GLenum target, 1211 GLenum pname, 1212 const GLfloat* params) { 1213 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1214 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameterfv(" 1215 << GLES2Util::GetStringTextureBindTarget(target) << ", " 1216 << GLES2Util::GetStringTextureParameter(pname) << ", " 1217 << static_cast<const void*>(params) << ")"); 1218 GPU_CLIENT_LOG("values: " << params[0]); 1219 helper_->TexParameterfvImmediate(target, pname, params); 1220 CheckGLError(); 1221 } 1222 1223 void GLES2Implementation::TexParameteri(GLenum target, 1224 GLenum pname, 1225 GLint param) { 1226 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1227 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameteri(" 1228 << GLES2Util::GetStringTextureBindTarget(target) << ", " 1229 << GLES2Util::GetStringTextureParameter(pname) << ", " 1230 << param << ")"); 1231 helper_->TexParameteri(target, pname, param); 1232 CheckGLError(); 1233 } 1234 1235 void GLES2Implementation::TexParameteriv(GLenum target, 1236 GLenum pname, 1237 const GLint* params) { 1238 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1239 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameteriv(" 1240 << GLES2Util::GetStringTextureBindTarget(target) << ", " 1241 << GLES2Util::GetStringTextureParameter(pname) << ", " 1242 << static_cast<const void*>(params) << ")"); 1243 GPU_CLIENT_LOG("values: " << params[0]); 1244 helper_->TexParameterivImmediate(target, pname, params); 1245 CheckGLError(); 1246 } 1247 1248 void GLES2Implementation::Uniform1f(GLint location, GLfloat x) { 1249 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1250 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1f(" << location << ", " 1251 << x << ")"); 1252 helper_->Uniform1f(location, x); 1253 CheckGLError(); 1254 } 1255 1256 void GLES2Implementation::Uniform1fv(GLint location, 1257 GLsizei count, 1258 const GLfloat* v) { 1259 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1260 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1fv(" << location << ", " 1261 << count << ", " << static_cast<const void*>(v) << ")"); 1262 GPU_CLIENT_LOG_CODE_BLOCK({ 1263 for (GLsizei i = 0; i < count; ++i) { 1264 GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 1]); 1265 } 1266 }); 1267 if (count < 0) { 1268 SetGLError(GL_INVALID_VALUE, "glUniform1fv", "count < 0"); 1269 return; 1270 } 1271 helper_->Uniform1fvImmediate(location, count, v); 1272 CheckGLError(); 1273 } 1274 1275 void GLES2Implementation::Uniform1i(GLint location, GLint x) { 1276 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1277 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1i(" << location << ", " 1278 << x << ")"); 1279 helper_->Uniform1i(location, x); 1280 CheckGLError(); 1281 } 1282 1283 void GLES2Implementation::Uniform1iv(GLint location, 1284 GLsizei count, 1285 const GLint* v) { 1286 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1287 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1iv(" << location << ", " 1288 << count << ", " << static_cast<const void*>(v) << ")"); 1289 GPU_CLIENT_LOG_CODE_BLOCK({ 1290 for (GLsizei i = 0; i < count; ++i) { 1291 GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 1]); 1292 } 1293 }); 1294 if (count < 0) { 1295 SetGLError(GL_INVALID_VALUE, "glUniform1iv", "count < 0"); 1296 return; 1297 } 1298 helper_->Uniform1ivImmediate(location, count, v); 1299 CheckGLError(); 1300 } 1301 1302 void GLES2Implementation::Uniform2f(GLint location, GLfloat x, GLfloat y) { 1303 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1304 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2f(" << location << ", " 1305 << x << ", " << y << ")"); 1306 helper_->Uniform2f(location, x, y); 1307 CheckGLError(); 1308 } 1309 1310 void GLES2Implementation::Uniform2fv(GLint location, 1311 GLsizei count, 1312 const GLfloat* v) { 1313 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1314 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2fv(" << location << ", " 1315 << count << ", " << static_cast<const void*>(v) << ")"); 1316 GPU_CLIENT_LOG_CODE_BLOCK({ 1317 for (GLsizei i = 0; i < count; ++i) { 1318 GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 2] << ", " << v[1 + i * 2]); 1319 } 1320 }); 1321 if (count < 0) { 1322 SetGLError(GL_INVALID_VALUE, "glUniform2fv", "count < 0"); 1323 return; 1324 } 1325 helper_->Uniform2fvImmediate(location, count, v); 1326 CheckGLError(); 1327 } 1328 1329 void GLES2Implementation::Uniform2i(GLint location, GLint x, GLint y) { 1330 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1331 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2i(" << location << ", " 1332 << x << ", " << y << ")"); 1333 helper_->Uniform2i(location, x, y); 1334 CheckGLError(); 1335 } 1336 1337 void GLES2Implementation::Uniform2iv(GLint location, 1338 GLsizei count, 1339 const GLint* v) { 1340 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1341 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2iv(" << location << ", " 1342 << count << ", " << static_cast<const void*>(v) << ")"); 1343 GPU_CLIENT_LOG_CODE_BLOCK({ 1344 for (GLsizei i = 0; i < count; ++i) { 1345 GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 2] << ", " << v[1 + i * 2]); 1346 } 1347 }); 1348 if (count < 0) { 1349 SetGLError(GL_INVALID_VALUE, "glUniform2iv", "count < 0"); 1350 return; 1351 } 1352 helper_->Uniform2ivImmediate(location, count, v); 1353 CheckGLError(); 1354 } 1355 1356 void GLES2Implementation::Uniform3f(GLint location, 1357 GLfloat x, 1358 GLfloat y, 1359 GLfloat z) { 1360 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1361 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3f(" << location << ", " 1362 << x << ", " << y << ", " << z << ")"); 1363 helper_->Uniform3f(location, x, y, z); 1364 CheckGLError(); 1365 } 1366 1367 void GLES2Implementation::Uniform3fv(GLint location, 1368 GLsizei count, 1369 const GLfloat* v) { 1370 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1371 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3fv(" << location << ", " 1372 << count << ", " << static_cast<const void*>(v) << ")"); 1373 GPU_CLIENT_LOG_CODE_BLOCK({ 1374 for (GLsizei i = 0; i < count; ++i) { 1375 GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 3] << ", " << v[1 + i * 3] 1376 << ", " << v[2 + i * 3]); 1377 } 1378 }); 1379 if (count < 0) { 1380 SetGLError(GL_INVALID_VALUE, "glUniform3fv", "count < 0"); 1381 return; 1382 } 1383 helper_->Uniform3fvImmediate(location, count, v); 1384 CheckGLError(); 1385 } 1386 1387 void GLES2Implementation::Uniform3i(GLint location, GLint x, GLint y, GLint z) { 1388 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1389 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3i(" << location << ", " 1390 << x << ", " << y << ", " << z << ")"); 1391 helper_->Uniform3i(location, x, y, z); 1392 CheckGLError(); 1393 } 1394 1395 void GLES2Implementation::Uniform3iv(GLint location, 1396 GLsizei count, 1397 const GLint* v) { 1398 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1399 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3iv(" << location << ", " 1400 << count << ", " << static_cast<const void*>(v) << ")"); 1401 GPU_CLIENT_LOG_CODE_BLOCK({ 1402 for (GLsizei i = 0; i < count; ++i) { 1403 GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 3] << ", " << v[1 + i * 3] 1404 << ", " << v[2 + i * 3]); 1405 } 1406 }); 1407 if (count < 0) { 1408 SetGLError(GL_INVALID_VALUE, "glUniform3iv", "count < 0"); 1409 return; 1410 } 1411 helper_->Uniform3ivImmediate(location, count, v); 1412 CheckGLError(); 1413 } 1414 1415 void GLES2Implementation::Uniform4f(GLint location, 1416 GLfloat x, 1417 GLfloat y, 1418 GLfloat z, 1419 GLfloat w) { 1420 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1421 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4f(" << location << ", " 1422 << x << ", " << y << ", " << z << ", " << w << ")"); 1423 helper_->Uniform4f(location, x, y, z, w); 1424 CheckGLError(); 1425 } 1426 1427 void GLES2Implementation::Uniform4fv(GLint location, 1428 GLsizei count, 1429 const GLfloat* v) { 1430 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1431 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4fv(" << location << ", " 1432 << count << ", " << static_cast<const void*>(v) << ")"); 1433 GPU_CLIENT_LOG_CODE_BLOCK({ 1434 for (GLsizei i = 0; i < count; ++i) { 1435 GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 4] << ", " << v[1 + i * 4] 1436 << ", " << v[2 + i * 4] << ", " << v[3 + i * 4]); 1437 } 1438 }); 1439 if (count < 0) { 1440 SetGLError(GL_INVALID_VALUE, "glUniform4fv", "count < 0"); 1441 return; 1442 } 1443 helper_->Uniform4fvImmediate(location, count, v); 1444 CheckGLError(); 1445 } 1446 1447 void GLES2Implementation::Uniform4i(GLint location, 1448 GLint x, 1449 GLint y, 1450 GLint z, 1451 GLint w) { 1452 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1453 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4i(" << location << ", " 1454 << x << ", " << y << ", " << z << ", " << w << ")"); 1455 helper_->Uniform4i(location, x, y, z, w); 1456 CheckGLError(); 1457 } 1458 1459 void GLES2Implementation::Uniform4iv(GLint location, 1460 GLsizei count, 1461 const GLint* v) { 1462 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1463 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4iv(" << location << ", " 1464 << count << ", " << static_cast<const void*>(v) << ")"); 1465 GPU_CLIENT_LOG_CODE_BLOCK({ 1466 for (GLsizei i = 0; i < count; ++i) { 1467 GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 4] << ", " << v[1 + i * 4] 1468 << ", " << v[2 + i * 4] << ", " << v[3 + i * 4]); 1469 } 1470 }); 1471 if (count < 0) { 1472 SetGLError(GL_INVALID_VALUE, "glUniform4iv", "count < 0"); 1473 return; 1474 } 1475 helper_->Uniform4ivImmediate(location, count, v); 1476 CheckGLError(); 1477 } 1478 1479 void GLES2Implementation::UniformMatrix2fv(GLint location, 1480 GLsizei count, 1481 GLboolean transpose, 1482 const GLfloat* value) { 1483 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1484 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniformMatrix2fv(" << location 1485 << ", " << count << ", " 1486 << GLES2Util::GetStringBool(transpose) << ", " 1487 << static_cast<const void*>(value) << ")"); 1488 GPU_CLIENT_LOG_CODE_BLOCK({ 1489 for (GLsizei i = 0; i < count; ++i) { 1490 GPU_CLIENT_LOG(" " << i << ": " << value[0 + i * 4] << ", " 1491 << value[1 + i * 4] << ", " << value[2 + i * 4] 1492 << ", " << value[3 + i * 4]); 1493 } 1494 }); 1495 if (count < 0) { 1496 SetGLError(GL_INVALID_VALUE, "glUniformMatrix2fv", "count < 0"); 1497 return; 1498 } 1499 if (transpose != false) { 1500 SetGLError( 1501 GL_INVALID_VALUE, "glUniformMatrix2fv", "transpose GL_INVALID_VALUE"); 1502 return; 1503 } 1504 helper_->UniformMatrix2fvImmediate(location, count, value); 1505 CheckGLError(); 1506 } 1507 1508 void GLES2Implementation::UniformMatrix3fv(GLint location, 1509 GLsizei count, 1510 GLboolean transpose, 1511 const GLfloat* value) { 1512 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1513 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniformMatrix3fv(" << location 1514 << ", " << count << ", " 1515 << GLES2Util::GetStringBool(transpose) << ", " 1516 << static_cast<const void*>(value) << ")"); 1517 GPU_CLIENT_LOG_CODE_BLOCK({ 1518 for (GLsizei i = 0; i < count; ++i) { 1519 GPU_CLIENT_LOG(" " << i << ": " << value[0 + i * 9] << ", " 1520 << value[1 + i * 9] << ", " << value[2 + i * 9] 1521 << ", " << value[3 + i * 9] << ", " 1522 << value[4 + i * 9] << ", " << value[5 + i * 9] 1523 << ", " << value[6 + i * 9] << ", " 1524 << value[7 + i * 9] << ", " << value[8 + i * 9]); 1525 } 1526 }); 1527 if (count < 0) { 1528 SetGLError(GL_INVALID_VALUE, "glUniformMatrix3fv", "count < 0"); 1529 return; 1530 } 1531 if (transpose != false) { 1532 SetGLError( 1533 GL_INVALID_VALUE, "glUniformMatrix3fv", "transpose GL_INVALID_VALUE"); 1534 return; 1535 } 1536 helper_->UniformMatrix3fvImmediate(location, count, value); 1537 CheckGLError(); 1538 } 1539 1540 void GLES2Implementation::UniformMatrix4fv(GLint location, 1541 GLsizei count, 1542 GLboolean transpose, 1543 const GLfloat* value) { 1544 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1545 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniformMatrix4fv(" << location 1546 << ", " << count << ", " 1547 << GLES2Util::GetStringBool(transpose) << ", " 1548 << static_cast<const void*>(value) << ")"); 1549 GPU_CLIENT_LOG_CODE_BLOCK({ 1550 for (GLsizei i = 0; i < count; ++i) { 1551 GPU_CLIENT_LOG( 1552 " " << i << ": " << value[0 + i * 16] << ", " << value[1 + i * 16] 1553 << ", " << value[2 + i * 16] << ", " << value[3 + i * 16] << ", " 1554 << value[4 + i * 16] << ", " << value[5 + i * 16] << ", " 1555 << value[6 + i * 16] << ", " << value[7 + i * 16] << ", " 1556 << value[8 + i * 16] << ", " << value[9 + i * 16] << ", " 1557 << value[10 + i * 16] << ", " << value[11 + i * 16] << ", " 1558 << value[12 + i * 16] << ", " << value[13 + i * 16] << ", " 1559 << value[14 + i * 16] << ", " << value[15 + i * 16]); 1560 } 1561 }); 1562 if (count < 0) { 1563 SetGLError(GL_INVALID_VALUE, "glUniformMatrix4fv", "count < 0"); 1564 return; 1565 } 1566 if (transpose != false) { 1567 SetGLError( 1568 GL_INVALID_VALUE, "glUniformMatrix4fv", "transpose GL_INVALID_VALUE"); 1569 return; 1570 } 1571 helper_->UniformMatrix4fvImmediate(location, count, value); 1572 CheckGLError(); 1573 } 1574 1575 void GLES2Implementation::UseProgram(GLuint program) { 1576 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1577 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUseProgram(" << program << ")"); 1578 if (IsProgramReservedId(program)) { 1579 SetGLError(GL_INVALID_OPERATION, "UseProgram", "program reserved id"); 1580 return; 1581 } 1582 if (UseProgramHelper(program)) { 1583 helper_->UseProgram(program); 1584 } 1585 CheckGLError(); 1586 } 1587 1588 void GLES2Implementation::ValidateProgram(GLuint program) { 1589 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1590 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glValidateProgram(" << program 1591 << ")"); 1592 helper_->ValidateProgram(program); 1593 CheckGLError(); 1594 } 1595 1596 void GLES2Implementation::VertexAttrib1f(GLuint indx, GLfloat x) { 1597 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1598 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib1f(" << indx << ", " 1599 << x << ")"); 1600 helper_->VertexAttrib1f(indx, x); 1601 CheckGLError(); 1602 } 1603 1604 void GLES2Implementation::VertexAttrib1fv(GLuint indx, const GLfloat* values) { 1605 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1606 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib1fv(" << indx << ", " 1607 << static_cast<const void*>(values) << ")"); 1608 GPU_CLIENT_LOG("values: " << values[0]); 1609 helper_->VertexAttrib1fvImmediate(indx, values); 1610 CheckGLError(); 1611 } 1612 1613 void GLES2Implementation::VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) { 1614 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1615 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib2f(" << indx << ", " 1616 << x << ", " << y << ")"); 1617 helper_->VertexAttrib2f(indx, x, y); 1618 CheckGLError(); 1619 } 1620 1621 void GLES2Implementation::VertexAttrib2fv(GLuint indx, const GLfloat* values) { 1622 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1623 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib2fv(" << indx << ", " 1624 << static_cast<const void*>(values) << ")"); 1625 GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1]); 1626 helper_->VertexAttrib2fvImmediate(indx, values); 1627 CheckGLError(); 1628 } 1629 1630 void GLES2Implementation::VertexAttrib3f(GLuint indx, 1631 GLfloat x, 1632 GLfloat y, 1633 GLfloat z) { 1634 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1635 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib3f(" << indx << ", " 1636 << x << ", " << y << ", " << z << ")"); 1637 helper_->VertexAttrib3f(indx, x, y, z); 1638 CheckGLError(); 1639 } 1640 1641 void GLES2Implementation::VertexAttrib3fv(GLuint indx, const GLfloat* values) { 1642 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1643 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib3fv(" << indx << ", " 1644 << static_cast<const void*>(values) << ")"); 1645 GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", " 1646 << values[2]); 1647 helper_->VertexAttrib3fvImmediate(indx, values); 1648 CheckGLError(); 1649 } 1650 1651 void GLES2Implementation::VertexAttrib4f(GLuint indx, 1652 GLfloat x, 1653 GLfloat y, 1654 GLfloat z, 1655 GLfloat w) { 1656 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1657 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib4f(" << indx << ", " 1658 << x << ", " << y << ", " << z << ", " << w << ")"); 1659 helper_->VertexAttrib4f(indx, x, y, z, w); 1660 CheckGLError(); 1661 } 1662 1663 void GLES2Implementation::VertexAttrib4fv(GLuint indx, const GLfloat* values) { 1664 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1665 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib4fv(" << indx << ", " 1666 << static_cast<const void*>(values) << ")"); 1667 GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", " 1668 << values[2] << ", " << values[3]); 1669 helper_->VertexAttrib4fvImmediate(indx, values); 1670 CheckGLError(); 1671 } 1672 1673 void GLES2Implementation::Viewport(GLint x, 1674 GLint y, 1675 GLsizei width, 1676 GLsizei height) { 1677 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1678 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glViewport(" << x << ", " << y 1679 << ", " << width << ", " << height << ")"); 1680 if (width < 0) { 1681 SetGLError(GL_INVALID_VALUE, "glViewport", "width < 0"); 1682 return; 1683 } 1684 if (height < 0) { 1685 SetGLError(GL_INVALID_VALUE, "glViewport", "height < 0"); 1686 return; 1687 } 1688 helper_->Viewport(x, y, width, height); 1689 CheckGLError(); 1690 } 1691 1692 void GLES2Implementation::BlitFramebufferCHROMIUM(GLint srcX0, 1693 GLint srcY0, 1694 GLint srcX1, 1695 GLint srcY1, 1696 GLint dstX0, 1697 GLint dstY0, 1698 GLint dstX1, 1699 GLint dstY1, 1700 GLbitfield mask, 1701 GLenum filter) { 1702 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1703 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlitFramebufferCHROMIUM(" 1704 << srcX0 << ", " << srcY0 << ", " << srcX1 << ", " << srcY1 1705 << ", " << dstX0 << ", " << dstY0 << ", " << dstX1 << ", " 1706 << dstY1 << ", " << mask << ", " 1707 << GLES2Util::GetStringBlitFilter(filter) << ")"); 1708 helper_->BlitFramebufferCHROMIUM( 1709 srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); 1710 CheckGLError(); 1711 } 1712 1713 void GLES2Implementation::RenderbufferStorageMultisampleCHROMIUM( 1714 GLenum target, 1715 GLsizei samples, 1716 GLenum internalformat, 1717 GLsizei width, 1718 GLsizei height) { 1719 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1720 GPU_CLIENT_LOG( 1721 "[" << GetLogPrefix() << "] glRenderbufferStorageMultisampleCHROMIUM(" 1722 << GLES2Util::GetStringRenderBufferTarget(target) << ", " << samples 1723 << ", " << GLES2Util::GetStringRenderBufferFormat(internalformat) 1724 << ", " << width << ", " << height << ")"); 1725 if (samples < 0) { 1726 SetGLError(GL_INVALID_VALUE, 1727 "glRenderbufferStorageMultisampleCHROMIUM", 1728 "samples < 0"); 1729 return; 1730 } 1731 if (width < 0) { 1732 SetGLError(GL_INVALID_VALUE, 1733 "glRenderbufferStorageMultisampleCHROMIUM", 1734 "width < 0"); 1735 return; 1736 } 1737 if (height < 0) { 1738 SetGLError(GL_INVALID_VALUE, 1739 "glRenderbufferStorageMultisampleCHROMIUM", 1740 "height < 0"); 1741 return; 1742 } 1743 helper_->RenderbufferStorageMultisampleCHROMIUM( 1744 target, samples, internalformat, width, height); 1745 CheckGLError(); 1746 } 1747 1748 void GLES2Implementation::RenderbufferStorageMultisampleEXT( 1749 GLenum target, 1750 GLsizei samples, 1751 GLenum internalformat, 1752 GLsizei width, 1753 GLsizei height) { 1754 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1755 GPU_CLIENT_LOG( 1756 "[" << GetLogPrefix() << "] glRenderbufferStorageMultisampleEXT(" 1757 << GLES2Util::GetStringRenderBufferTarget(target) << ", " << samples 1758 << ", " << GLES2Util::GetStringRenderBufferFormat(internalformat) 1759 << ", " << width << ", " << height << ")"); 1760 if (samples < 0) { 1761 SetGLError( 1762 GL_INVALID_VALUE, "glRenderbufferStorageMultisampleEXT", "samples < 0"); 1763 return; 1764 } 1765 if (width < 0) { 1766 SetGLError( 1767 GL_INVALID_VALUE, "glRenderbufferStorageMultisampleEXT", "width < 0"); 1768 return; 1769 } 1770 if (height < 0) { 1771 SetGLError( 1772 GL_INVALID_VALUE, "glRenderbufferStorageMultisampleEXT", "height < 0"); 1773 return; 1774 } 1775 helper_->RenderbufferStorageMultisampleEXT( 1776 target, samples, internalformat, width, height); 1777 CheckGLError(); 1778 } 1779 1780 void GLES2Implementation::FramebufferTexture2DMultisampleEXT(GLenum target, 1781 GLenum attachment, 1782 GLenum textarget, 1783 GLuint texture, 1784 GLint level, 1785 GLsizei samples) { 1786 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1787 GPU_CLIENT_LOG("[" << GetLogPrefix() 1788 << "] glFramebufferTexture2DMultisampleEXT(" 1789 << GLES2Util::GetStringFrameBufferTarget(target) << ", " 1790 << GLES2Util::GetStringAttachment(attachment) << ", " 1791 << GLES2Util::GetStringTextureTarget(textarget) << ", " 1792 << texture << ", " << level << ", " << samples << ")"); 1793 if (level != 0) { 1794 SetGLError(GL_INVALID_VALUE, 1795 "glFramebufferTexture2DMultisampleEXT", 1796 "level GL_INVALID_VALUE"); 1797 return; 1798 } 1799 if (samples < 0) { 1800 SetGLError(GL_INVALID_VALUE, 1801 "glFramebufferTexture2DMultisampleEXT", 1802 "samples < 0"); 1803 return; 1804 } 1805 helper_->FramebufferTexture2DMultisampleEXT( 1806 target, attachment, textarget, texture, samples); 1807 CheckGLError(); 1808 } 1809 1810 void GLES2Implementation::TexStorage2DEXT(GLenum target, 1811 GLsizei levels, 1812 GLenum internalFormat, 1813 GLsizei width, 1814 GLsizei height) { 1815 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1816 GPU_CLIENT_LOG( 1817 "[" << GetLogPrefix() << "] glTexStorage2DEXT(" 1818 << GLES2Util::GetStringTextureTarget(target) << ", " << levels << ", " 1819 << GLES2Util::GetStringTextureInternalFormatStorage(internalFormat) 1820 << ", " << width << ", " << height << ")"); 1821 if (levels < 0) { 1822 SetGLError(GL_INVALID_VALUE, "glTexStorage2DEXT", "levels < 0"); 1823 return; 1824 } 1825 if (width < 0) { 1826 SetGLError(GL_INVALID_VALUE, "glTexStorage2DEXT", "width < 0"); 1827 return; 1828 } 1829 if (height < 0) { 1830 SetGLError(GL_INVALID_VALUE, "glTexStorage2DEXT", "height < 0"); 1831 return; 1832 } 1833 helper_->TexStorage2DEXT(target, levels, internalFormat, width, height); 1834 CheckGLError(); 1835 } 1836 1837 void GLES2Implementation::GenQueriesEXT(GLsizei n, GLuint* queries) { 1838 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenQueriesEXT(" << n << ", " 1839 << static_cast<const void*>(queries) << ")"); 1840 if (n < 0) { 1841 SetGLError(GL_INVALID_VALUE, "glGenQueriesEXT", "n < 0"); 1842 return; 1843 } 1844 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1845 GetIdHandler(id_namespaces::kQueries)->MakeIds(this, 0, n, queries); 1846 GenQueriesEXTHelper(n, queries); 1847 helper_->GenQueriesEXTImmediate(n, queries); 1848 if (share_group_->bind_generates_resource()) 1849 helper_->CommandBufferHelper::Flush(); 1850 GPU_CLIENT_LOG_CODE_BLOCK({ 1851 for (GLsizei i = 0; i < n; ++i) { 1852 GPU_CLIENT_LOG(" " << i << ": " << queries[i]); 1853 } 1854 }); 1855 CheckGLError(); 1856 } 1857 1858 void GLES2Implementation::DeleteQueriesEXT(GLsizei n, const GLuint* queries) { 1859 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1860 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteQueriesEXT(" << n << ", " 1861 << static_cast<const void*>(queries) << ")"); 1862 GPU_CLIENT_LOG_CODE_BLOCK({ 1863 for (GLsizei i = 0; i < n; ++i) { 1864 GPU_CLIENT_LOG(" " << i << ": " << queries[i]); 1865 } 1866 }); 1867 GPU_CLIENT_DCHECK_CODE_BLOCK({ 1868 for (GLsizei i = 0; i < n; ++i) { 1869 DCHECK(queries[i] != 0); 1870 } 1871 }); 1872 if (n < 0) { 1873 SetGLError(GL_INVALID_VALUE, "glDeleteQueriesEXT", "n < 0"); 1874 return; 1875 } 1876 DeleteQueriesEXTHelper(n, queries); 1877 CheckGLError(); 1878 } 1879 1880 void GLES2Implementation::GenVertexArraysOES(GLsizei n, GLuint* arrays) { 1881 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenVertexArraysOES(" << n << ", " 1882 << static_cast<const void*>(arrays) << ")"); 1883 if (n < 0) { 1884 SetGLError(GL_INVALID_VALUE, "glGenVertexArraysOES", "n < 0"); 1885 return; 1886 } 1887 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1888 GetIdHandler(id_namespaces::kVertexArrays)->MakeIds(this, 0, n, arrays); 1889 GenVertexArraysOESHelper(n, arrays); 1890 helper_->GenVertexArraysOESImmediate(n, arrays); 1891 if (share_group_->bind_generates_resource()) 1892 helper_->CommandBufferHelper::Flush(); 1893 GPU_CLIENT_LOG_CODE_BLOCK({ 1894 for (GLsizei i = 0; i < n; ++i) { 1895 GPU_CLIENT_LOG(" " << i << ": " << arrays[i]); 1896 } 1897 }); 1898 CheckGLError(); 1899 } 1900 1901 void GLES2Implementation::DeleteVertexArraysOES(GLsizei n, 1902 const GLuint* arrays) { 1903 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1904 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteVertexArraysOES(" << n 1905 << ", " << static_cast<const void*>(arrays) << ")"); 1906 GPU_CLIENT_LOG_CODE_BLOCK({ 1907 for (GLsizei i = 0; i < n; ++i) { 1908 GPU_CLIENT_LOG(" " << i << ": " << arrays[i]); 1909 } 1910 }); 1911 GPU_CLIENT_DCHECK_CODE_BLOCK({ 1912 for (GLsizei i = 0; i < n; ++i) { 1913 DCHECK(arrays[i] != 0); 1914 } 1915 }); 1916 if (n < 0) { 1917 SetGLError(GL_INVALID_VALUE, "glDeleteVertexArraysOES", "n < 0"); 1918 return; 1919 } 1920 DeleteVertexArraysOESHelper(n, arrays); 1921 CheckGLError(); 1922 } 1923 1924 GLboolean GLES2Implementation::IsVertexArrayOES(GLuint array) { 1925 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1926 TRACE_EVENT0("gpu", "GLES2Implementation::IsVertexArrayOES"); 1927 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsVertexArrayOES(" << array 1928 << ")"); 1929 typedef cmds::IsVertexArrayOES::Result Result; 1930 Result* result = GetResultAs<Result*>(); 1931 if (!result) { 1932 return GL_FALSE; 1933 } 1934 *result = 0; 1935 helper_->IsVertexArrayOES(array, GetResultShmId(), GetResultShmOffset()); 1936 WaitForCmd(); 1937 GLboolean result_value = *result; 1938 GPU_CLIENT_LOG("returned " << result_value); 1939 CheckGLError(); 1940 return result_value; 1941 } 1942 1943 void GLES2Implementation::BindVertexArrayOES(GLuint array) { 1944 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1945 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindVertexArrayOES(" << array 1946 << ")"); 1947 if (IsVertexArrayReservedId(array)) { 1948 SetGLError(GL_INVALID_OPERATION, "BindVertexArrayOES", "array reserved id"); 1949 return; 1950 } 1951 if (BindVertexArrayOESHelper(array)) { 1952 helper_->BindVertexArrayOES(array); 1953 } 1954 CheckGLError(); 1955 } 1956 1957 void GLES2Implementation::GetTranslatedShaderSourceANGLE(GLuint shader, 1958 GLsizei bufsize, 1959 GLsizei* length, 1960 char* source) { 1961 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1962 GPU_CLIENT_VALIDATE_DESTINATION_OPTIONAL_INITALIZATION(GLsizei, length); 1963 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetTranslatedShaderSourceANGLE" 1964 << "(" << shader << ", " << bufsize << ", " 1965 << static_cast<void*>(length) << ", " 1966 << static_cast<void*>(source) << ")"); 1967 helper_->SetBucketSize(kResultBucketId, 0); 1968 helper_->GetTranslatedShaderSourceANGLE(shader, kResultBucketId); 1969 std::string str; 1970 GLsizei max_size = 0; 1971 if (GetBucketAsString(kResultBucketId, &str)) { 1972 if (bufsize > 0) { 1973 max_size = std::min(static_cast<size_t>(bufsize) - 1, str.size()); 1974 memcpy(source, str.c_str(), max_size); 1975 source[max_size] = '\0'; 1976 GPU_CLIENT_LOG("------\n" << source << "\n------"); 1977 } 1978 } 1979 if (length != NULL) { 1980 *length = max_size; 1981 } 1982 CheckGLError(); 1983 } 1984 void GLES2Implementation::TexImageIOSurface2DCHROMIUM(GLenum target, 1985 GLsizei width, 1986 GLsizei height, 1987 GLuint ioSurfaceId, 1988 GLuint plane) { 1989 GPU_CLIENT_SINGLE_THREAD_CHECK(); 1990 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexImageIOSurface2DCHROMIUM(" 1991 << GLES2Util::GetStringTextureBindTarget(target) << ", " 1992 << width << ", " << height << ", " << ioSurfaceId << ", " 1993 << plane << ")"); 1994 if (width < 0) { 1995 SetGLError(GL_INVALID_VALUE, "glTexImageIOSurface2DCHROMIUM", "width < 0"); 1996 return; 1997 } 1998 if (height < 0) { 1999 SetGLError(GL_INVALID_VALUE, "glTexImageIOSurface2DCHROMIUM", "height < 0"); 2000 return; 2001 } 2002 helper_->TexImageIOSurface2DCHROMIUM( 2003 target, width, height, ioSurfaceId, plane); 2004 CheckGLError(); 2005 } 2006 2007 void GLES2Implementation::CopyTextureCHROMIUM(GLenum target, 2008 GLenum source_id, 2009 GLenum dest_id, 2010 GLint level, 2011 GLint internalformat, 2012 GLenum dest_type) { 2013 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2014 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCopyTextureCHROMIUM(" 2015 << GLES2Util::GetStringEnum(target) << ", " 2016 << GLES2Util::GetStringEnum(source_id) << ", " 2017 << GLES2Util::GetStringEnum(dest_id) << ", " << level 2018 << ", " << internalformat << ", " 2019 << GLES2Util::GetStringPixelType(dest_type) << ")"); 2020 helper_->CopyTextureCHROMIUM( 2021 target, source_id, dest_id, level, internalformat, dest_type); 2022 CheckGLError(); 2023 } 2024 2025 void GLES2Implementation::BindTexImage2DCHROMIUM(GLenum target, GLint imageId) { 2026 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2027 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindTexImage2DCHROMIUM(" 2028 << GLES2Util::GetStringTextureBindTarget(target) << ", " 2029 << imageId << ")"); 2030 helper_->BindTexImage2DCHROMIUM(target, imageId); 2031 CheckGLError(); 2032 } 2033 2034 void GLES2Implementation::ReleaseTexImage2DCHROMIUM(GLenum target, 2035 GLint imageId) { 2036 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2037 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glReleaseTexImage2DCHROMIUM(" 2038 << GLES2Util::GetStringTextureBindTarget(target) << ", " 2039 << imageId << ")"); 2040 helper_->ReleaseTexImage2DCHROMIUM(target, imageId); 2041 CheckGLError(); 2042 } 2043 2044 void GLES2Implementation::DiscardFramebufferEXT(GLenum target, 2045 GLsizei count, 2046 const GLenum* attachments) { 2047 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2048 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDiscardFramebufferEXT(" 2049 << GLES2Util::GetStringEnum(target) << ", " << count 2050 << ", " << static_cast<const void*>(attachments) << ")"); 2051 GPU_CLIENT_LOG_CODE_BLOCK({ 2052 for (GLsizei i = 0; i < count; ++i) { 2053 GPU_CLIENT_LOG(" " << i << ": " << attachments[0 + i * 1]); 2054 } 2055 }); 2056 if (count < 0) { 2057 SetGLError(GL_INVALID_VALUE, "glDiscardFramebufferEXT", "count < 0"); 2058 return; 2059 } 2060 helper_->DiscardFramebufferEXTImmediate(target, count, attachments); 2061 CheckGLError(); 2062 } 2063 2064 void GLES2Implementation::LoseContextCHROMIUM(GLenum current, GLenum other) { 2065 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2066 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glLoseContextCHROMIUM(" 2067 << GLES2Util::GetStringResetStatus(current) << ", " 2068 << GLES2Util::GetStringResetStatus(other) << ")"); 2069 helper_->LoseContextCHROMIUM(current, other); 2070 CheckGLError(); 2071 } 2072 2073 void GLES2Implementation::WaitSyncPointCHROMIUM(GLuint sync_point) { 2074 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2075 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glWaitSyncPointCHROMIUM(" 2076 << sync_point << ")"); 2077 helper_->WaitSyncPointCHROMIUM(sync_point); 2078 CheckGLError(); 2079 } 2080 2081 void GLES2Implementation::DrawBuffersEXT(GLsizei count, const GLenum* bufs) { 2082 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2083 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawBuffersEXT(" << count << ", " 2084 << static_cast<const void*>(bufs) << ")"); 2085 GPU_CLIENT_LOG_CODE_BLOCK({ 2086 for (GLsizei i = 0; i < count; ++i) { 2087 GPU_CLIENT_LOG(" " << i << ": " << bufs[0 + i * 1]); 2088 } 2089 }); 2090 if (count < 0) { 2091 SetGLError(GL_INVALID_VALUE, "glDrawBuffersEXT", "count < 0"); 2092 return; 2093 } 2094 helper_->DrawBuffersEXTImmediate(count, bufs); 2095 CheckGLError(); 2096 } 2097 2098 void GLES2Implementation::DiscardBackbufferCHROMIUM() { 2099 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2100 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDiscardBackbufferCHROMIUM(" 2101 << ")"); 2102 helper_->DiscardBackbufferCHROMIUM(); 2103 CheckGLError(); 2104 } 2105 2106 void GLES2Implementation::ScheduleOverlayPlaneCHROMIUM( 2107 GLint plane_z_order, 2108 GLenum plane_transform, 2109 GLuint overlay_texture_id, 2110 GLint bounds_x, 2111 GLint bounds_y, 2112 GLint bounds_width, 2113 GLint bounds_height, 2114 GLfloat uv_x, 2115 GLfloat uv_y, 2116 GLfloat uv_width, 2117 GLfloat uv_height) { 2118 GPU_CLIENT_SINGLE_THREAD_CHECK(); 2119 GPU_CLIENT_LOG( 2120 "[" << GetLogPrefix() << "] glScheduleOverlayPlaneCHROMIUM(" 2121 << plane_z_order << ", " << GLES2Util::GetStringEnum(plane_transform) 2122 << ", " << overlay_texture_id << ", " << bounds_x << ", " << bounds_y 2123 << ", " << bounds_width << ", " << bounds_height << ", " << uv_x 2124 << ", " << uv_y << ", " << uv_width << ", " << uv_height << ")"); 2125 helper_->ScheduleOverlayPlaneCHROMIUM(plane_z_order, 2126 plane_transform, 2127 overlay_texture_id, 2128 bounds_x, 2129 bounds_y, 2130 bounds_width, 2131 bounds_height, 2132 uv_x, 2133 uv_y, 2134 uv_width, 2135 uv_height); 2136 CheckGLError(); 2137 } 2138 2139 #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_IMPL_AUTOGEN_H_ 2140