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

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

Issue 19579008: Revert "Revert 210138 "Perform glReadPixels with PBOs in the gpu, if PBO..."" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: previous upload reverts the revert, here are the changes 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 1711 matching lines...) Expand 10 before | Expand all | Expand 10 after
6657 .Times(1) 6668 .Times(1)
6658 .RetiresOnSaturation(); 6669 .RetiresOnSaturation();
6659 typedef ReadPixels::Result Result; 6670 typedef ReadPixels::Result Result;
6660 Result* result = GetSharedMemoryAs<Result*>(); 6671 Result* result = GetSharedMemoryAs<Result*>();
6661 uint32 result_shm_id = kSharedMemoryId; 6672 uint32 result_shm_id = kSharedMemoryId;
6662 uint32 result_shm_offset = kSharedMemoryOffset; 6673 uint32 result_shm_offset = kSharedMemoryOffset;
6663 uint32 pixels_shm_id = kSharedMemoryId; 6674 uint32 pixels_shm_id = kSharedMemoryId;
6664 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result); 6675 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
6665 ReadPixels cmd; 6676 ReadPixels cmd;
6666 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, 6677 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
6667 pixels_shm_id, pixels_shm_offset, 6678 pixels_shm_id, pixels_shm_offset,
6668 result_shm_id, result_shm_offset); 6679 result_shm_id, result_shm_offset,
6680 false);
6669 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6681 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6670 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 6682 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6671 } 6683 }
6672 6684
6673 TEST_F(GLES2DecoderManualInitTest, 6685 TEST_F(GLES2DecoderManualInitTest,
6674 UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) { 6686 UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) {
6675 InitDecoder( 6687 InitDecoder(
6676 "GL_EXT_framebuffer_multisample", // extensions 6688 "GL_EXT_framebuffer_multisample", // extensions
6677 false, // has alpha 6689 false, // has alpha
6678 false, // has depth 6690 false, // has depth
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
6717 EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _)) 6729 EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _))
6718 .Times(1) 6730 .Times(1)
6719 .RetiresOnSaturation(); 6731 .RetiresOnSaturation();
6720 typedef ReadPixels::Result Result; 6732 typedef ReadPixels::Result Result;
6721 uint32 result_shm_id = kSharedMemoryId; 6733 uint32 result_shm_id = kSharedMemoryId;
6722 uint32 result_shm_offset = kSharedMemoryOffset; 6734 uint32 result_shm_offset = kSharedMemoryOffset;
6723 uint32 pixels_shm_id = kSharedMemoryId; 6735 uint32 pixels_shm_id = kSharedMemoryId;
6724 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(Result); 6736 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
6725 ReadPixels cmd; 6737 ReadPixels cmd;
6726 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, 6738 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
6727 pixels_shm_id, pixels_shm_offset, 6739 pixels_shm_id, pixels_shm_offset,
6728 result_shm_id, result_shm_offset); 6740 result_shm_id, result_shm_offset,
6741 false);
6729 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6742 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6730 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 6743 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6731 } 6744 }
6732 6745
6733 TEST_F(GLES2DecoderWithShaderTest, DrawClearsAfterRenderbufferStorageInFBO) { 6746 TEST_F(GLES2DecoderWithShaderTest, DrawClearsAfterRenderbufferStorageInFBO) {
6734 SetupTexture(); 6747 SetupTexture();
6735 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, 6748 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
6736 kServiceRenderbufferId); 6749 kServiceRenderbufferId);
6737 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 6750 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
6738 kServiceFramebufferId); 6751 kServiceFramebufferId);
(...skipping 1919 matching lines...) Expand 10 before | Expand all | Expand 10 after
8658 // TODO(gman): TexImage2DImmediate 8671 // TODO(gman): TexImage2DImmediate
8659 8672
8660 // TODO(gman): TexSubImage2DImmediate 8673 // TODO(gman): TexSubImage2DImmediate
8661 8674
8662 // TODO(gman): UseProgram 8675 // TODO(gman): UseProgram
8663 8676
8664 // TODO(gman): SwapBuffers 8677 // TODO(gman): SwapBuffers
8665 8678
8666 } // namespace gles2 8679 } // namespace gles2
8667 } // namespace gpu 8680 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698