| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 6 | 6 |
| 7 #include "base/atomicops.h" | 7 #include "base/atomicops.h" |
| 8 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 8 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| 10 #include "gpu/command_buffer/common/id_allocator.h" | 10 #include "gpu/command_buffer/common/id_allocator.h" |
| (...skipping 8363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8374 InitDecoder( | 8374 InitDecoder( |
| 8375 "", // extensions | 8375 "", // extensions |
| 8376 false, // has alpha | 8376 false, // has alpha |
| 8377 false, // has depth | 8377 false, // has depth |
| 8378 false, // has stencil | 8378 false, // has stencil |
| 8379 false, // request alpha | 8379 false, // request alpha |
| 8380 false, // request depth | 8380 false, // request depth |
| 8381 false, // request stencil | 8381 false, // request stencil |
| 8382 true); // bind generates resource | 8382 true); // bind generates resource |
| 8383 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 8383 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
| 8384 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(128)) | 8384 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) |
| 8385 .WillOnce(Return(true)) | 8385 .WillOnce(Return(true)).RetiresOnSaturation(); |
| 8386 .RetiresOnSaturation(); | |
| 8387 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 8386 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 8388 kSharedMemoryId, kSharedMemoryOffset); | 8387 kSharedMemoryId, kSharedMemoryOffset); |
| 8389 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); | 8388 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); |
| 8390 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(64)) | 8389 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(64)) |
| 8391 .WillOnce(Return(true)) | 8390 .WillOnce(Return(true)).RetiresOnSaturation(); |
| 8392 .RetiresOnSaturation(); | |
| 8393 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 8391 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 8394 kSharedMemoryId, kSharedMemoryOffset); | 8392 kSharedMemoryId, kSharedMemoryOffset); |
| 8395 EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); | 8393 EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); |
| 8396 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 8394 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 8397 // Check we get out of memory and no call to glTexImage2D if Ensure fails. | 8395 // Check we get out of memory and no call to glTexImage2D if Ensure fails. |
| 8398 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(64)) | 8396 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(64)) |
| 8399 .WillOnce(Return(false)) | 8397 .WillOnce(Return(false)).RetiresOnSaturation(); |
| 8400 .RetiresOnSaturation(); | |
| 8401 TexImage2D cmd; | 8398 TexImage2D cmd; |
| 8402 cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, | 8399 cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, |
| 8403 kSharedMemoryId, kSharedMemoryOffset); | 8400 kSharedMemoryId, kSharedMemoryOffset); |
| 8404 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8401 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 8405 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); | 8402 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); |
| 8406 EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); | 8403 EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); |
| 8407 } | 8404 } |
| 8408 | 8405 |
| 8409 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerTexStorage2DEXT) { | 8406 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerTexStorage2DEXT) { |
| 8410 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = | 8407 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = |
| 8411 new SizeOnlyMemoryTracker(); | 8408 new SizeOnlyMemoryTracker(); |
| 8412 set_memory_tracker(memory_tracker.get()); | 8409 set_memory_tracker(memory_tracker.get()); |
| 8413 InitDecoder( | 8410 InitDecoder( |
| 8414 "", // extensions | 8411 "", // extensions |
| 8415 false, // has alpha | 8412 false, // has alpha |
| 8416 false, // has depth | 8413 false, // has depth |
| 8417 false, // has stencil | 8414 false, // has stencil |
| 8418 false, // request alpha | 8415 false, // request alpha |
| 8419 false, // request depth | 8416 false, // request depth |
| 8420 false, // request stencil | 8417 false, // request stencil |
| 8421 true); // bind generates resource | 8418 true); // bind generates resource |
| 8422 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 8419 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
| 8423 // Check we get out of memory and no call to glTexStorage2DEXT | 8420 // Check we get out of memory and no call to glTexStorage2DEXT |
| 8424 // if Ensure fails. | 8421 // if Ensure fails. |
| 8425 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(128)) | 8422 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) |
| 8426 .WillOnce(Return(false)) | 8423 .WillOnce(Return(false)).RetiresOnSaturation(); |
| 8427 .RetiresOnSaturation(); | |
| 8428 TexStorage2DEXT cmd; | 8424 TexStorage2DEXT cmd; |
| 8429 cmd.Init(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 4); | 8425 cmd.Init(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 4); |
| 8430 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8426 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 8431 EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); | 8427 EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); |
| 8432 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); | 8428 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); |
| 8433 } | 8429 } |
| 8434 | 8430 |
| 8435 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerCopyTexImage2D) { | 8431 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerCopyTexImage2D) { |
| 8436 GLenum target = GL_TEXTURE_2D; | 8432 GLenum target = GL_TEXTURE_2D; |
| 8437 GLint level = 0; | 8433 GLint level = 0; |
| 8438 GLenum internal_format = GL_RGBA; | 8434 GLenum internal_format = GL_RGBA; |
| 8439 GLsizei width = 4; | 8435 GLsizei width = 4; |
| 8440 GLsizei height = 8; | 8436 GLsizei height = 8; |
| 8441 GLint border = 0; | 8437 GLint border = 0; |
| 8442 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = | 8438 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = |
| 8443 new SizeOnlyMemoryTracker(); | 8439 new SizeOnlyMemoryTracker(); |
| 8444 set_memory_tracker(memory_tracker.get()); | 8440 set_memory_tracker(memory_tracker.get()); |
| 8445 InitDecoder( | 8441 InitDecoder( |
| 8446 "", // extensions | 8442 "", // extensions |
| 8447 true, // has alpha | 8443 true, // has alpha |
| 8448 false, // has depth | 8444 false, // has depth |
| 8449 false, // has stencil | 8445 false, // has stencil |
| 8450 true, // request alpha | 8446 true, // request alpha |
| 8451 false, // request depth | 8447 false, // request depth |
| 8452 false, // request stencil | 8448 false, // request stencil |
| 8453 true); // bind generates resource | 8449 true); // bind generates resource |
| 8454 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 8450 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
| 8455 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(128)) | 8451 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) |
| 8456 .WillOnce(Return(true)) | 8452 .WillOnce(Return(true)).RetiresOnSaturation(); |
| 8457 .RetiresOnSaturation(); | |
| 8458 EXPECT_CALL(*gl_, GetError()) | 8453 EXPECT_CALL(*gl_, GetError()) |
| 8459 .WillOnce(Return(GL_NO_ERROR)) | 8454 .WillOnce(Return(GL_NO_ERROR)) |
| 8460 .WillOnce(Return(GL_NO_ERROR)) | 8455 .WillOnce(Return(GL_NO_ERROR)) |
| 8461 .RetiresOnSaturation(); | 8456 .RetiresOnSaturation(); |
| 8462 EXPECT_CALL(*gl_, CopyTexImage2D( | 8457 EXPECT_CALL(*gl_, CopyTexImage2D( |
| 8463 target, level, internal_format, 0, 0, width, height, border)) | 8458 target, level, internal_format, 0, 0, width, height, border)) |
| 8464 .Times(1) | 8459 .Times(1) |
| 8465 .RetiresOnSaturation(); | 8460 .RetiresOnSaturation(); |
| 8466 CopyTexImage2D cmd; | 8461 CopyTexImage2D cmd; |
| 8467 cmd.Init(target, level, internal_format, 0, 0, width, height, border); | 8462 cmd.Init(target, level, internal_format, 0, 0, width, height, border); |
| 8468 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8463 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 8469 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); | 8464 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); |
| 8470 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 8465 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 8471 // Check we get out of memory and no call to glCopyTexImage2D if Ensure fails. | 8466 // Check we get out of memory and no call to glCopyTexImage2D if Ensure fails. |
| 8472 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(128)) | 8467 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) |
| 8473 .WillOnce(Return(false)) | 8468 .WillOnce(Return(false)).RetiresOnSaturation(); |
| 8474 .RetiresOnSaturation(); | |
| 8475 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8469 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 8476 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); | 8470 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); |
| 8477 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); | 8471 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); |
| 8478 } | 8472 } |
| 8479 | 8473 |
| 8480 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerRenderbufferStorage) { | 8474 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerRenderbufferStorage) { |
| 8481 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = | 8475 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = |
| 8482 new SizeOnlyMemoryTracker(); | 8476 new SizeOnlyMemoryTracker(); |
| 8483 set_memory_tracker(memory_tracker.get()); | 8477 set_memory_tracker(memory_tracker.get()); |
| 8484 InitDecoder( | 8478 InitDecoder( |
| 8485 "", // extensions | 8479 "", // extensions |
| 8486 false, // has alpha | 8480 false, // has alpha |
| 8487 false, // has depth | 8481 false, // has depth |
| 8488 false, // has stencil | 8482 false, // has stencil |
| 8489 false, // request alpha | 8483 false, // request alpha |
| 8490 false, // request depth | 8484 false, // request depth |
| 8491 false, // request stencil | 8485 false, // request stencil |
| 8492 true); // bind generates resource | 8486 true); // bind generates resource |
| 8493 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, | 8487 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, |
| 8494 kServiceRenderbufferId); | 8488 kServiceRenderbufferId); |
| 8495 EXPECT_CALL(*gl_, GetError()) | 8489 EXPECT_CALL(*gl_, GetError()) |
| 8496 .WillOnce(Return(GL_NO_ERROR)) | 8490 .WillOnce(Return(GL_NO_ERROR)) |
| 8497 .WillOnce(Return(GL_NO_ERROR)) | 8491 .WillOnce(Return(GL_NO_ERROR)) |
| 8498 .RetiresOnSaturation(); | 8492 .RetiresOnSaturation(); |
| 8499 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(128)) | 8493 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) |
| 8500 .WillOnce(Return(true)) | 8494 .WillOnce(Return(true)).RetiresOnSaturation(); |
| 8501 .RetiresOnSaturation(); | |
| 8502 EXPECT_CALL(*gl_, RenderbufferStorageEXT( | 8495 EXPECT_CALL(*gl_, RenderbufferStorageEXT( |
| 8503 GL_RENDERBUFFER, GL_RGBA, 8, 4)) | 8496 GL_RENDERBUFFER, GL_RGBA, 8, 4)) |
| 8504 .Times(1) | 8497 .Times(1) |
| 8505 .RetiresOnSaturation(); | 8498 .RetiresOnSaturation(); |
| 8506 RenderbufferStorage cmd; | 8499 RenderbufferStorage cmd; |
| 8507 cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 8, 4); | 8500 cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 8, 4); |
| 8508 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8501 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 8509 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 8502 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 8510 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); | 8503 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); |
| 8511 // Check we get out of memory and no call to glRenderbufferStorage if Ensure | 8504 // Check we get out of memory and no call to glRenderbufferStorage if Ensure |
| 8512 // fails. | 8505 // fails. |
| 8513 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(128)) | 8506 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) |
| 8514 .WillOnce(Return(false)) | 8507 .WillOnce(Return(false)).RetiresOnSaturation(); |
| 8515 .RetiresOnSaturation(); | |
| 8516 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8508 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 8517 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); | 8509 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); |
| 8518 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); | 8510 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged)); |
| 8519 } | 8511 } |
| 8520 | 8512 |
| 8521 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerBufferData) { | 8513 TEST_F(GLES2DecoderManualInitTest, MemoryTrackerBufferData) { |
| 8522 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = | 8514 scoped_refptr<SizeOnlyMemoryTracker> memory_tracker = |
| 8523 new SizeOnlyMemoryTracker(); | 8515 new SizeOnlyMemoryTracker(); |
| 8524 set_memory_tracker(memory_tracker.get()); | 8516 set_memory_tracker(memory_tracker.get()); |
| 8525 InitDecoder( | 8517 InitDecoder( |
| 8526 "", // extensions | 8518 "", // extensions |
| 8527 false, // has alpha | 8519 false, // has alpha |
| 8528 false, // has depth | 8520 false, // has depth |
| 8529 false, // has stencil | 8521 false, // has stencil |
| 8530 false, // request alpha | 8522 false, // request alpha |
| 8531 false, // request depth | 8523 false, // request depth |
| 8532 false, // request stencil | 8524 false, // request stencil |
| 8533 true); // bind generates resource | 8525 true); // bind generates resource |
| 8534 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, | 8526 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, |
| 8535 kServiceBufferId); | 8527 kServiceBufferId); |
| 8536 EXPECT_CALL(*gl_, GetError()) | 8528 EXPECT_CALL(*gl_, GetError()) |
| 8537 .WillOnce(Return(GL_NO_ERROR)) | 8529 .WillOnce(Return(GL_NO_ERROR)) |
| 8538 .WillOnce(Return(GL_NO_ERROR)) | 8530 .WillOnce(Return(GL_NO_ERROR)) |
| 8539 .RetiresOnSaturation(); | 8531 .RetiresOnSaturation(); |
| 8540 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(128)) | 8532 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) |
| 8541 .WillOnce(Return(true)) | 8533 .WillOnce(Return(true)).RetiresOnSaturation(); |
| 8542 .RetiresOnSaturation(); | |
| 8543 EXPECT_CALL(*gl_, BufferData(GL_ARRAY_BUFFER, 128, _, GL_STREAM_DRAW)) | 8534 EXPECT_CALL(*gl_, BufferData(GL_ARRAY_BUFFER, 128, _, GL_STREAM_DRAW)) |
| 8544 .Times(1) | 8535 .Times(1) |
| 8545 .RetiresOnSaturation(); | 8536 .RetiresOnSaturation(); |
| 8546 BufferData cmd; | 8537 BufferData cmd; |
| 8547 cmd.Init(GL_ARRAY_BUFFER, 128, 0, 0, GL_STREAM_DRAW); | 8538 cmd.Init(GL_ARRAY_BUFFER, 128, 0, 0, GL_STREAM_DRAW); |
| 8548 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8539 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 8549 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 8540 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 8550 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kManaged)); | 8541 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kManaged)); |
| 8551 // Check we get out of memory and no call to glBufferData if Ensure | 8542 // Check we get out of memory and no call to glBufferData if Ensure |
| 8552 // fails. | 8543 // fails. |
| 8553 EXPECT_CALL(*memory_tracker, EnsureGPUMemoryAvailable(128)) | 8544 EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128)) |
| 8554 .WillOnce(Return(false)) | 8545 .WillOnce(Return(false)).RetiresOnSaturation(); |
| 8555 .RetiresOnSaturation(); | |
| 8556 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 8546 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 8557 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); | 8547 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); |
| 8558 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kManaged)); | 8548 EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kManaged)); |
| 8559 } | 8549 } |
| 8560 | 8550 |
| 8561 TEST_F(GLES2DecoderTest, DrawBuffersEXTImmediateSuccceeds) { | 8551 TEST_F(GLES2DecoderTest, DrawBuffersEXTImmediateSuccceeds) { |
| 8562 const GLsizei count = 1; | 8552 const GLsizei count = 1; |
| 8563 const GLenum bufs[] = { GL_COLOR_ATTACHMENT0 }; | 8553 const GLenum bufs[] = { GL_COLOR_ATTACHMENT0 }; |
| 8564 DrawBuffersEXTImmediate& cmd = | 8554 DrawBuffersEXTImmediate& cmd = |
| 8565 *GetImmediateAs<DrawBuffersEXTImmediate>(); | 8555 *GetImmediateAs<DrawBuffersEXTImmediate>(); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8642 // TODO(gman): TexImage2DImmediate | 8632 // TODO(gman): TexImage2DImmediate |
| 8643 | 8633 |
| 8644 // TODO(gman): TexSubImage2DImmediate | 8634 // TODO(gman): TexSubImage2DImmediate |
| 8645 | 8635 |
| 8646 // TODO(gman): UseProgram | 8636 // TODO(gman): UseProgram |
| 8647 | 8637 |
| 8648 // TODO(gman): SwapBuffers | 8638 // TODO(gman): SwapBuffers |
| 8649 | 8639 |
| 8650 } // namespace gles2 | 8640 } // namespace gles2 |
| 8651 } // namespace gpu | 8641 } // namespace gpu |
| OLD | NEW |