Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc

Issue 16831004: Perform glReadPixels with PBOs in the gpu, if PBOs are available. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix cc_unittests Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 2298 matching lines...) Expand 10 before | Expand all | Expand 10 after
2309 *gl_, ReadPixels(read_x, yy, read_width, 1, 2309 *gl_, ReadPixels(read_x, yy, read_width, 1,
2310 kFormat, GL_UNSIGNED_BYTE, _)) 2310 kFormat, GL_UNSIGNED_BYTE, _))
2311 .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels)) 2311 .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels))
2312 .RetiresOnSaturation(); 2312 .RetiresOnSaturation();
2313 } 2313 }
2314 } 2314 }
2315 ReadPixels cmd; 2315 ReadPixels cmd;
2316 cmd.Init(in_read_x, in_read_y, in_read_width, in_read_height, 2316 cmd.Init(in_read_x, in_read_y, in_read_width, in_read_height,
2317 kFormat, GL_UNSIGNED_BYTE, 2317 kFormat, GL_UNSIGNED_BYTE,
2318 pixels_shm_id, pixels_shm_offset, 2318 pixels_shm_id, pixels_shm_offset,
2319 result_shm_id, result_shm_offset); 2319 result_shm_id, result_shm_offset,
2320 false);
2320 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2321 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2321 2322
2322 GLint unpadded_row_size = emu.ComputeImageDataSize(in_read_width, 1); 2323 GLint unpadded_row_size = emu.ComputeImageDataSize(in_read_width, 1);
2323 scoped_ptr<int8[]> zero(new int8[unpadded_row_size]); 2324 scoped_ptr<int8[]> zero(new int8[unpadded_row_size]);
2324 scoped_ptr<int8[]> pack(new int8[kPackAlignment]); 2325 scoped_ptr<int8[]> pack(new int8[kPackAlignment]);
2325 memset(zero.get(), 0, unpadded_row_size); 2326 memset(zero.get(), 0, unpadded_row_size);
2326 memset(pack.get(), kInitialMemoryValue, kPackAlignment); 2327 memset(pack.get(), kInitialMemoryValue, kPackAlignment);
2327 for (GLint yy = 0; yy < in_read_height; ++yy) { 2328 for (GLint yy = 0; yy < in_read_height; ++yy) {
2328 const int8* row = static_cast<const int8*>( 2329 const int8* row = static_cast<const int8*>(
2329 emu.ComputePackAlignmentAddress(0, yy, in_read_width, dest)); 2330 emu.ComputePackAlignmentAddress(0, yy, in_read_width, dest));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2386 EXPECT_CALL(*gl_, GetError()) 2387 EXPECT_CALL(*gl_, GetError())
2387 .WillOnce(Return(GL_NO_ERROR)) 2388 .WillOnce(Return(GL_NO_ERROR))
2388 .WillOnce(Return(GL_NO_ERROR)) 2389 .WillOnce(Return(GL_NO_ERROR))
2389 .RetiresOnSaturation(); 2390 .RetiresOnSaturation();
2390 EXPECT_CALL( 2391 EXPECT_CALL(
2391 *gl_, ReadPixels(0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE, _)) 2392 *gl_, ReadPixels(0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE, _))
2392 .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels)); 2393 .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels));
2393 ReadPixels cmd; 2394 ReadPixels cmd;
2394 cmd.Init(0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE, 2395 cmd.Init(0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE,
2395 pixels_shm_id, pixels_shm_offset, 2396 pixels_shm_id, pixels_shm_offset,
2396 result_shm_id, result_shm_offset); 2397 result_shm_id, result_shm_offset,
2398 false);
2397 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2399 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2398 for (GLint yy = 0; yy < kHeight; ++yy) { 2400 for (GLint yy = 0; yy < kHeight; ++yy) {
2399 EXPECT_TRUE(emu.CompareRowSegment( 2401 EXPECT_TRUE(emu.CompareRowSegment(
2400 0, yy, kWidth, 2402 0, yy, kWidth,
2401 emu.ComputePackAlignmentAddress(0, yy, kWidth, dest))); 2403 emu.ComputePackAlignmentAddress(0, yy, kWidth, dest)));
2402 } 2404 }
2403 } 2405 }
2404 2406
2405 TEST_F(GLES2DecoderRGBBackbufferTest, ReadPixelsNoAlphaBackbuffer) { 2407 TEST_F(GLES2DecoderRGBBackbufferTest, ReadPixelsNoAlphaBackbuffer) {
2406 const GLsizei kWidth = 3; 2408 const GLsizei kWidth = 3;
(...skipping 26 matching lines...) Expand all
2433 EXPECT_CALL(*gl_, GetError()) 2435 EXPECT_CALL(*gl_, GetError())
2434 .WillOnce(Return(GL_NO_ERROR)) 2436 .WillOnce(Return(GL_NO_ERROR))
2435 .WillOnce(Return(GL_NO_ERROR)) 2437 .WillOnce(Return(GL_NO_ERROR))
2436 .RetiresOnSaturation(); 2438 .RetiresOnSaturation();
2437 EXPECT_CALL( 2439 EXPECT_CALL(
2438 *gl_, ReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, _)) 2440 *gl_, ReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, _))
2439 .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels)); 2441 .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels));
2440 ReadPixels cmd; 2442 ReadPixels cmd;
2441 cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, 2443 cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
2442 pixels_shm_id, pixels_shm_offset, 2444 pixels_shm_id, pixels_shm_offset,
2443 result_shm_id, result_shm_offset); 2445 result_shm_id, result_shm_offset,
2446 false);
2444 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2447 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2445 for (GLint yy = 0; yy < kHeight; ++yy) { 2448 for (GLint yy = 0; yy < kHeight; ++yy) {
2446 EXPECT_TRUE(emu.CompareRowSegment( 2449 EXPECT_TRUE(emu.CompareRowSegment(
2447 0, yy, kWidth, 2450 0, yy, kWidth,
2448 emu.ComputePackAlignmentAddress(0, yy, kWidth, dest))); 2451 emu.ComputePackAlignmentAddress(0, yy, kWidth, dest)));
2449 } 2452 }
2450 } 2453 }
2451 2454
2452 TEST_F(GLES2DecoderTest, ReadPixelsOutOfRange) { 2455 TEST_F(GLES2DecoderTest, ReadPixelsOutOfRange) {
2453 static GLint tests[][4] = { 2456 static GLint tests[][4] = {
(...skipping 16 matching lines...) Expand all
2470 typedef ReadPixels::Result Result; 2473 typedef ReadPixels::Result Result;
2471 Result* result = GetSharedMemoryAs<Result*>(); 2474 Result* result = GetSharedMemoryAs<Result*>();
2472 uint32 result_shm_id = kSharedMemoryId; 2475 uint32 result_shm_id = kSharedMemoryId;
2473 uint32 result_shm_offset = kSharedMemoryOffset; 2476 uint32 result_shm_offset = kSharedMemoryOffset;
2474 uint32 pixels_shm_id = kSharedMemoryId; 2477 uint32 pixels_shm_id = kSharedMemoryId;
2475 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result); 2478 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
2476 EXPECT_CALL(*gl_, ReadPixels(_, _, _, _, _, _, _)).Times(0); 2479 EXPECT_CALL(*gl_, ReadPixels(_, _, _, _, _, _, _)).Times(0);
2477 ReadPixels cmd; 2480 ReadPixels cmd;
2478 cmd.Init(0, 0, -1, 1, GL_RGB, GL_UNSIGNED_BYTE, 2481 cmd.Init(0, 0, -1, 1, GL_RGB, GL_UNSIGNED_BYTE,
2479 pixels_shm_id, pixels_shm_offset, 2482 pixels_shm_id, pixels_shm_offset,
2480 result_shm_id, result_shm_offset); 2483 result_shm_id, result_shm_offset,
2484 false);
2481 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2485 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2482 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 2486 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
2483 cmd.Init(0, 0, 1, -1, GL_RGB, GL_UNSIGNED_BYTE, 2487 cmd.Init(0, 0, 1, -1, GL_RGB, GL_UNSIGNED_BYTE,
2484 pixels_shm_id, pixels_shm_offset, 2488 pixels_shm_id, pixels_shm_offset,
2485 result_shm_id, result_shm_offset); 2489 result_shm_id, result_shm_offset,
2490 false);
2486 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2491 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2487 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 2492 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
2488 cmd.Init(0, 0, 1, 1, GL_RGB, GL_INT, 2493 cmd.Init(0, 0, 1, 1, GL_RGB, GL_INT,
2489 pixels_shm_id, pixels_shm_offset, 2494 pixels_shm_id, pixels_shm_offset,
2490 result_shm_id, result_shm_offset); 2495 result_shm_id, result_shm_offset,
2496 false);
2491 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2497 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2492 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 2498 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
2493 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 2499 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE,
2494 kInvalidSharedMemoryId, pixels_shm_offset, 2500 kInvalidSharedMemoryId, pixels_shm_offset,
2495 result_shm_id, result_shm_offset); 2501 result_shm_id, result_shm_offset,
2502 false);
2496 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2503 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2497 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 2504 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE,
2498 pixels_shm_id, kInvalidSharedMemoryOffset, 2505 pixels_shm_id, kInvalidSharedMemoryOffset,
2499 result_shm_id, result_shm_offset); 2506 result_shm_id, result_shm_offset,
2507 false);
2500 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2508 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2501 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 2509 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE,
2502 pixels_shm_id, pixels_shm_offset, 2510 pixels_shm_id, pixels_shm_offset,
2503 kInvalidSharedMemoryId, result_shm_offset); 2511 kInvalidSharedMemoryId, result_shm_offset,
2512 false);
2504 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2513 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2505 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 2514 cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE,
2506 pixels_shm_id, pixels_shm_offset, 2515 pixels_shm_id, pixels_shm_offset,
2507 result_shm_id, kInvalidSharedMemoryOffset); 2516 result_shm_id, kInvalidSharedMemoryOffset,
2517 false);
2508 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2518 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2509 } 2519 }
2510 2520
2511 TEST_F(GLES2DecoderTest, BindAttribLocation) { 2521 TEST_F(GLES2DecoderTest, BindAttribLocation) {
2512 const GLint kLocation = 2; 2522 const GLint kLocation = 2;
2513 const char* kName = "testing"; 2523 const char* kName = "testing";
2514 const uint32 kNameSize = strlen(kName); 2524 const uint32 kNameSize = strlen(kName);
2515 EXPECT_CALL( 2525 EXPECT_CALL(
2516 *gl_, BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName))) 2526 *gl_, BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName)))
2517 .Times(1); 2527 .Times(1);
(...skipping 2407 matching lines...) Expand 10 before | Expand all | Expand 10 after
4925 .WillOnce(Return(GL_NO_ERROR)) 4935 .WillOnce(Return(GL_NO_ERROR))
4926 .WillOnce(Return(GL_OUT_OF_MEMORY)) 4936 .WillOnce(Return(GL_OUT_OF_MEMORY))
4927 .RetiresOnSaturation(); 4937 .RetiresOnSaturation();
4928 EXPECT_CALL( 4938 EXPECT_CALL(
4929 *gl_, ReadPixels(x, y, width, height, kFormat, GL_UNSIGNED_BYTE, _)) 4939 *gl_, ReadPixels(x, y, width, height, kFormat, GL_UNSIGNED_BYTE, _))
4930 .Times(1) 4940 .Times(1)
4931 .RetiresOnSaturation(); 4941 .RetiresOnSaturation();
4932 ReadPixels cmd; 4942 ReadPixels cmd;
4933 cmd.Init(x, y, width, height, kFormat, GL_UNSIGNED_BYTE, 4943 cmd.Init(x, y, width, height, kFormat, GL_UNSIGNED_BYTE,
4934 pixels_shm_id, pixels_shm_offset, 4944 pixels_shm_id, pixels_shm_offset,
4935 result_shm_id, result_shm_offset); 4945 result_shm_id, result_shm_offset,
4946 false);
4936 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4947 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4937 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 4948 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
4938 } 4949 }
4939 4950
4940 static bool ValueInArray(GLint value, GLint* array, GLint count) { 4951 static bool ValueInArray(GLint value, GLint* array, GLint count) {
4941 for (GLint ii = 0; ii < count; ++ii) { 4952 for (GLint ii = 0; ii < count; ++ii) {
4942 if (array[ii] == value) { 4953 if (array[ii] == value) {
4943 return true; 4954 return true;
4944 } 4955 }
4945 } 4956 }
(...skipping 1695 matching lines...) Expand 10 before | Expand all | Expand 10 after
6641 .Times(1) 6652 .Times(1)
6642 .RetiresOnSaturation(); 6653 .RetiresOnSaturation();
6643 typedef ReadPixels::Result Result; 6654 typedef ReadPixels::Result Result;
6644 Result* result = GetSharedMemoryAs<Result*>(); 6655 Result* result = GetSharedMemoryAs<Result*>();
6645 uint32 result_shm_id = kSharedMemoryId; 6656 uint32 result_shm_id = kSharedMemoryId;
6646 uint32 result_shm_offset = kSharedMemoryOffset; 6657 uint32 result_shm_offset = kSharedMemoryOffset;
6647 uint32 pixels_shm_id = kSharedMemoryId; 6658 uint32 pixels_shm_id = kSharedMemoryId;
6648 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result); 6659 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
6649 ReadPixels cmd; 6660 ReadPixels cmd;
6650 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, 6661 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
6651 pixels_shm_id, pixels_shm_offset, 6662 pixels_shm_id, pixels_shm_offset,
6652 result_shm_id, result_shm_offset); 6663 result_shm_id, result_shm_offset,
6664 false);
6653 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6665 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6654 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 6666 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6655 } 6667 }
6656 6668
6657 TEST_F(GLES2DecoderManualInitTest, 6669 TEST_F(GLES2DecoderManualInitTest,
6658 UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) { 6670 UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) {
6659 InitDecoder( 6671 InitDecoder(
6660 "GL_EXT_framebuffer_multisample", // extensions 6672 "GL_EXT_framebuffer_multisample", // extensions
6661 false, // has alpha 6673 false, // has alpha
6662 false, // has depth 6674 false, // has depth
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
6701 EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _)) 6713 EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _))
6702 .Times(1) 6714 .Times(1)
6703 .RetiresOnSaturation(); 6715 .RetiresOnSaturation();
6704 typedef ReadPixels::Result Result; 6716 typedef ReadPixels::Result Result;
6705 uint32 result_shm_id = kSharedMemoryId; 6717 uint32 result_shm_id = kSharedMemoryId;
6706 uint32 result_shm_offset = kSharedMemoryOffset; 6718 uint32 result_shm_offset = kSharedMemoryOffset;
6707 uint32 pixels_shm_id = kSharedMemoryId; 6719 uint32 pixels_shm_id = kSharedMemoryId;
6708 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(Result); 6720 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
6709 ReadPixels cmd; 6721 ReadPixels cmd;
6710 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, 6722 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
6711 pixels_shm_id, pixels_shm_offset, 6723 pixels_shm_id, pixels_shm_offset,
6712 result_shm_id, result_shm_offset); 6724 result_shm_id, result_shm_offset,
6725 false);
6713 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6726 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6714 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 6727 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6715 } 6728 }
6716 6729
6717 TEST_F(GLES2DecoderWithShaderTest, DrawClearsAfterRenderbufferStorageInFBO) { 6730 TEST_F(GLES2DecoderWithShaderTest, DrawClearsAfterRenderbufferStorageInFBO) {
6718 SetupTexture(); 6731 SetupTexture();
6719 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, 6732 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
6720 kServiceRenderbufferId); 6733 kServiceRenderbufferId);
6721 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 6734 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
6722 kServiceFramebufferId); 6735 kServiceFramebufferId);
(...skipping 1919 matching lines...) Expand 10 before | Expand all | Expand 10 after
8642 // TODO(gman): TexImage2DImmediate 8655 // TODO(gman): TexImage2DImmediate
8643 8656
8644 // TODO(gman): TexSubImage2DImmediate 8657 // TODO(gman): TexSubImage2DImmediate
8645 8658
8646 // TODO(gman): UseProgram 8659 // TODO(gman): UseProgram
8647 8660
8648 // TODO(gman): SwapBuffers 8661 // TODO(gman): SwapBuffers
8649 8662
8650 } // namespace gles2 8663 } // namespace gles2
8651 } // namespace gpu 8664 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698