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

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

Issue 8341128: Defer clearing textures and renderbuffers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix one more unit test Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/gl_mock.h" 10 #include "gpu/command_buffer/common/gl_mock.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 GLint in_read_x, GLint in_read_y, 49 GLint in_read_x, GLint in_read_y,
50 GLsizei in_read_width, GLsizei in_read_height, 50 GLsizei in_read_width, GLsizei in_read_height,
51 bool init); 51 bool init);
52 }; 52 };
53 53
54 class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase { 54 class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase {
55 public: 55 public:
56 GLES2DecoderWithShaderTest() 56 GLES2DecoderWithShaderTest()
57 : GLES2DecoderWithShaderTestBase() { 57 : GLES2DecoderWithShaderTestBase() {
58 } 58 }
59
60
61 void AddExpectationsForSimulatedAttrib0WithError(
62 GLsizei num_vertices, GLuint buffer_id, GLenum error) {
63 if (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) {
64 return;
65 }
66
67 EXPECT_CALL(*gl_, GetError())
68 .WillOnce(Return(GL_NO_ERROR))
69 .WillOnce(Return(error))
70 .RetiresOnSaturation();
71 EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceAttrib0BufferId))
72 .Times(1)
73 .RetiresOnSaturation();
74 EXPECT_CALL(*gl_, BufferData(GL_ARRAY_BUFFER,
75 num_vertices * sizeof(GLfloat) * 4,
76 _, GL_DYNAMIC_DRAW))
77 .Times(1)
78 .RetiresOnSaturation();
79 if (error == GL_NO_ERROR) {
80 EXPECT_CALL(*gl_, BufferSubData(
81 GL_ARRAY_BUFFER, 0, num_vertices * sizeof(GLfloat) * 4, _))
82 .Times(1)
83 .RetiresOnSaturation();
84 EXPECT_CALL(*gl_, VertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL))
85 .Times(1)
86 .RetiresOnSaturation();
87 EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, 0))
88 .Times(1)
89 .RetiresOnSaturation();
90 EXPECT_CALL(*gl_, VertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL))
91 .Times(1)
92 .RetiresOnSaturation();
93 EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, buffer_id))
94 .Times(1)
95 .RetiresOnSaturation();
96 }
97 }
98
99 void AddExpectationsForSimulatedAttrib0(
100 GLsizei num_vertices, GLuint buffer_id) {
101 AddExpectationsForSimulatedAttrib0WithError(
102 num_vertices, buffer_id, GL_NO_ERROR);
103 }
104 }; 59 };
105 60
106 class GLES2DecoderRGBBackbufferTest : public GLES2DecoderWithShaderTest { 61 class GLES2DecoderRGBBackbufferTest : public GLES2DecoderWithShaderTest {
107 public: 62 public:
108 GLES2DecoderRGBBackbufferTest() { } 63 GLES2DecoderRGBBackbufferTest() { }
109 64
110 virtual void SetUp() { 65 virtual void SetUp() {
111 InitDecoder( 66 InitDecoder(
112 "", // extensions 67 "", // extensions
113 false, // has alpha 68 false, // has alpha
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount); 138 cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount);
184 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 139 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
185 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError()); 140 EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
186 } 141 }
187 142
188 TEST_F(GLES2DecoderWithShaderTest, DrawArraysBadTextureUsesBlack) { 143 TEST_F(GLES2DecoderWithShaderTest, DrawArraysBadTextureUsesBlack) {
189 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 144 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
190 // This is an NPOT texture. As the default filtering requires mips 145 // This is an NPOT texture. As the default filtering requires mips
191 // this should trigger replacing with black textures before rendering. 146 // this should trigger replacing with black textures before rendering.
192 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 147 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
193 0, 0); 148 kSharedMemoryId, kSharedMemoryOffset);
194 AddExpectationsForSimulatedAttrib0(kNumVertices, 0); 149 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
195 { 150 {
196 InSequence sequence; 151 InSequence sequence;
197 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)) 152 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
198 .Times(1) 153 .Times(1)
199 .RetiresOnSaturation(); 154 .RetiresOnSaturation();
200 EXPECT_CALL(*gl_, BindTexture( 155 EXPECT_CALL(*gl_, BindTexture(
201 GL_TEXTURE_2D, TestHelper::kServiceBlackTexture2dId)) 156 GL_TEXTURE_2D, TestHelper::kServiceBlackTexture2dId))
202 .Times(1) 157 .Times(1)
203 .RetiresOnSaturation(); 158 .RetiresOnSaturation();
(...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1445 .WillOnce(Return(GL_NO_ERROR)) 1400 .WillOnce(Return(GL_NO_ERROR))
1446 .RetiresOnSaturation(); 1401 .RetiresOnSaturation();
1447 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 1402 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
1448 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 1403 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
1449 kServiceRenderbufferId)) 1404 kServiceRenderbufferId))
1450 .Times(1) 1405 .Times(1)
1451 .RetiresOnSaturation(); 1406 .RetiresOnSaturation();
1452 EXPECT_CALL(*gl_, GetError()) 1407 EXPECT_CALL(*gl_, GetError())
1453 .WillOnce(Return(GL_NO_ERROR)) 1408 .WillOnce(Return(GL_NO_ERROR))
1454 .RetiresOnSaturation(); 1409 .RetiresOnSaturation();
1455 SetupExpectationsForFramebufferAttachment(
1456 GL_COLOR_BUFFER_BIT, // clear bits
1457 0, 0, 0, 0, // color
1458 0, // stencil
1459 1.0f, // depth
1460 false); // scissor test
1461 EXPECT_CALL(*gl_, GetError()) 1410 EXPECT_CALL(*gl_, GetError())
1462 .WillOnce(Return(GL_NO_ERROR)) 1411 .WillOnce(Return(GL_NO_ERROR))
1463 .WillOnce(Return(GL_NO_ERROR)) 1412 .WillOnce(Return(GL_NO_ERROR))
1464 .RetiresOnSaturation(); 1413 .RetiresOnSaturation();
1465 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT( 1414 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(
1466 GL_FRAMEBUFFER, 1415 GL_FRAMEBUFFER,
1467 GL_COLOR_ATTACHMENT0, 1416 GL_COLOR_ATTACHMENT0,
1468 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, _)) 1417 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, _))
1469 .WillOnce(SetArgumentPointee<3>(kServiceRenderbufferId)) 1418 .WillOnce(SetArgumentPointee<3>(kServiceRenderbufferId))
1470 .RetiresOnSaturation(); 1419 .RetiresOnSaturation();
(...skipping 30 matching lines...) Expand all
1501 .WillOnce(Return(GL_NO_ERROR)) 1450 .WillOnce(Return(GL_NO_ERROR))
1502 .RetiresOnSaturation(); 1451 .RetiresOnSaturation();
1503 EXPECT_CALL(*gl_, FramebufferTexture2DEXT( 1452 EXPECT_CALL(*gl_, FramebufferTexture2DEXT(
1504 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 1453 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
1505 kServiceTextureId, 0)) 1454 kServiceTextureId, 0))
1506 .Times(1) 1455 .Times(1)
1507 .RetiresOnSaturation(); 1456 .RetiresOnSaturation();
1508 EXPECT_CALL(*gl_, GetError()) 1457 EXPECT_CALL(*gl_, GetError())
1509 .WillOnce(Return(GL_NO_ERROR)) 1458 .WillOnce(Return(GL_NO_ERROR))
1510 .RetiresOnSaturation(); 1459 .RetiresOnSaturation();
1511 SetupExpectationsForFramebufferAttachment(
1512 0, // clear bits
1513 0, 0, 0, 0, // color
1514 0, // stencil
1515 1.0f, // depth
1516 false); // scissor test
1517 EXPECT_CALL(*gl_, GetError()) 1460 EXPECT_CALL(*gl_, GetError())
1518 .WillOnce(Return(GL_NO_ERROR)) 1461 .WillOnce(Return(GL_NO_ERROR))
1519 .WillOnce(Return(GL_NO_ERROR)) 1462 .WillOnce(Return(GL_NO_ERROR))
1520 .RetiresOnSaturation(); 1463 .RetiresOnSaturation();
1521 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT( 1464 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(
1522 GL_FRAMEBUFFER, 1465 GL_FRAMEBUFFER,
1523 GL_COLOR_ATTACHMENT0, 1466 GL_COLOR_ATTACHMENT0,
1524 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, _)) 1467 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, _))
1525 .WillOnce(SetArgumentPointee<3>(kServiceTextureId)) 1468 .WillOnce(SetArgumentPointee<3>(kServiceTextureId))
1526 .RetiresOnSaturation(); 1469 .RetiresOnSaturation();
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1664 29, 28, 23, 22, 21, 22, 21, 29, 28, 23, 22, 21, 22, 21, 28, 1607 29, 28, 23, 22, 21, 22, 21, 29, 28, 23, 22, 21, 22, 21, 28,
1665 31, 34, 39, 37, 32, 37, 32, 31, 34, 39, 37, 32, 37, 32, 34, 1608 31, 34, 39, 37, 32, 37, 32, 31, 34, 39, 37, 32, 37, 32, 34,
1666 }; 1609 };
1667 1610
1668 ClearSharedMemory(); 1611 ClearSharedMemory();
1669 1612
1670 // We need to setup an FBO so we can know the max size that ReadPixels will 1613 // We need to setup an FBO so we can know the max size that ReadPixels will
1671 // access 1614 // access
1672 if (init) { 1615 if (init) {
1673 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 1616 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
1674 DoTexImage2D(GL_TEXTURE_2D, 0, kFormat, kWidth, kHeight, 0, 1617 DoTexImage2D(
1675 kFormat, GL_UNSIGNED_BYTE, 0, 0); 1618 GL_TEXTURE_2D, 0, kFormat, kWidth, kHeight, 0,
1676 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 1619 kFormat, GL_UNSIGNED_BYTE, kSharedMemoryId,
1677 kServiceFramebufferId); 1620 kSharedMemoryOffset);
1678 EXPECT_CALL(*gl_, GetError()) 1621 DoBindFramebuffer(
1679 .WillOnce(Return(GL_NO_ERROR)) 1622 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
1680 .RetiresOnSaturation(); 1623 DoFramebufferTexture2D(
1681 EXPECT_CALL(*gl_, FramebufferTexture2DEXT(
1682 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 1624 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
1683 kServiceTextureId, 0)) 1625 client_texture_id_, kServiceTextureId, 0, GL_NO_ERROR);
1684 .Times(1)
1685 .RetiresOnSaturation();
1686 EXPECT_CALL(*gl_, GetError())
1687 .WillOnce(Return(GL_NO_ERROR))
1688 .RetiresOnSaturation();
1689 SetupExpectationsForFramebufferAttachment(
1690 0, // clear bits
1691 0, 0, 0, 0, // color
1692 0, // stencil
1693 1.0f, // depth
1694 false); // scissor test
1695 FramebufferTexture2D fbtex_cmd;
1696 fbtex_cmd.Init(
1697 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
1698 0);
1699 EXPECT_EQ(error::kNoError, ExecuteCmd(fbtex_cmd));
1700 } 1626 }
1701 1627
1702 ReadPixelsEmulator emu( 1628 ReadPixelsEmulator emu(
1703 kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment); 1629 kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment);
1704 typedef ReadPixels::Result Result; 1630 typedef ReadPixels::Result Result;
1705 Result* result = GetSharedMemoryAs<Result*>(); 1631 Result* result = GetSharedMemoryAs<Result*>();
1706 uint32 result_shm_id = kSharedMemoryId; 1632 uint32 result_shm_id = kSharedMemoryId;
1707 uint32 result_shm_offset = kSharedMemoryOffset; 1633 uint32 result_shm_offset = kSharedMemoryOffset;
1708 uint32 pixels_shm_id = kSharedMemoryId; 1634 uint32 pixels_shm_id = kSharedMemoryId;
1709 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result); 1635 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after
2549 cmd.Init(kNamespaceId, 1, kSharedMemoryId, kInvalidSharedMemoryOffset); 2475 cmd.Init(kNamespaceId, 1, kSharedMemoryId, kInvalidSharedMemoryOffset);
2550 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2476 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2551 } 2477 }
2552 2478
2553 TEST_F(GLES2DecoderTest, TexSubImage2DValidArgs) { 2479 TEST_F(GLES2DecoderTest, TexSubImage2DValidArgs) {
2554 const int kWidth = 16; 2480 const int kWidth = 16;
2555 const int kHeight = 8; 2481 const int kHeight = 8;
2556 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 2482 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2557 DoTexImage2D( 2483 DoTexImage2D(
2558 GL_TEXTURE_2D, 1, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 2484 GL_TEXTURE_2D, 1, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,
2559 0, 0); 2485 kSharedMemoryId, kSharedMemoryOffset);
2560 EXPECT_CALL(*gl_, TexSubImage2D( 2486 EXPECT_CALL(*gl_, TexSubImage2D(
2561 GL_TEXTURE_2D, 1, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, 2487 GL_TEXTURE_2D, 1, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
2562 shared_memory_address_)) 2488 shared_memory_address_))
2563 .Times(1) 2489 .Times(1)
2564 .RetiresOnSaturation(); 2490 .RetiresOnSaturation();
2565 TexSubImage2D cmd; 2491 TexSubImage2D cmd;
2566 cmd.Init( 2492 cmd.Init(
2567 GL_TEXTURE_2D, 1, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, 2493 GL_TEXTURE_2D, 1, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
2568 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); 2494 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
2569 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2495 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
2630 kSharedMemoryId, kInvalidSharedMemoryOffset, GL_FALSE); 2556 kSharedMemoryId, kInvalidSharedMemoryOffset, GL_FALSE);
2631 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 2557 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
2632 } 2558 }
2633 2559
2634 TEST_F(GLES2DecoderTest, CopyTexSubImage2DValidArgs) { 2560 TEST_F(GLES2DecoderTest, CopyTexSubImage2DValidArgs) {
2635 const int kWidth = 16; 2561 const int kWidth = 16;
2636 const int kHeight = 8; 2562 const int kHeight = 8;
2637 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 2563 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2638 DoTexImage2D( 2564 DoTexImage2D(
2639 GL_TEXTURE_2D, 1, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 2565 GL_TEXTURE_2D, 1, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,
2640 0, 0); 2566 kSharedMemoryId, kSharedMemoryOffset);
2641 EXPECT_CALL(*gl_, CopyTexSubImage2D( 2567 EXPECT_CALL(*gl_, CopyTexSubImage2D(
2642 GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight)) 2568 GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight))
2643 .Times(1) 2569 .Times(1)
2644 .RetiresOnSaturation(); 2570 .RetiresOnSaturation();
2645 CopyTexSubImage2D cmd; 2571 CopyTexSubImage2D cmd;
2646 cmd.Init(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight); 2572 cmd.Init(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight);
2647 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2573 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2648 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 2574 EXPECT_EQ(GL_NO_ERROR, GetGLError());
2649 } 2575 }
2650 2576
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2691 color_cmd.Init(0.1f, 0.2f, 0.3f, 0.4f); 2617 color_cmd.Init(0.1f, 0.2f, 0.3f, 0.4f);
2692 color_mask_cmd.Init(0, 1, 0, 1); 2618 color_mask_cmd.Init(0, 1, 0, 1);
2693 enable_cmd.Init(GL_SCISSOR_TEST); 2619 enable_cmd.Init(GL_SCISSOR_TEST);
2694 cmd.Init( 2620 cmd.Init(
2695 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 2621 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
2696 client_renderbuffer_id_); 2622 client_renderbuffer_id_);
2697 InSequence sequence; 2623 InSequence sequence;
2698 EXPECT_CALL(*gl_, ClearColor(0.1f, 0.2f, 0.3f, 0.4f)) 2624 EXPECT_CALL(*gl_, ClearColor(0.1f, 0.2f, 0.3f, 0.4f))
2699 .Times(1) 2625 .Times(1)
2700 .RetiresOnSaturation(); 2626 .RetiresOnSaturation();
2701 // EXPECT_CALL(*gl_, ColorMask(0, 1, 0, 1))
2702 // .Times(0)
2703 // .RetiresOnSaturation();
2704 EXPECT_CALL(*gl_, Enable(GL_SCISSOR_TEST)) 2627 EXPECT_CALL(*gl_, Enable(GL_SCISSOR_TEST))
2705 .Times(1) 2628 .Times(1)
2706 .RetiresOnSaturation(); 2629 .RetiresOnSaturation();
2707 EXPECT_CALL(*gl_, GetError()) 2630 EXPECT_CALL(*gl_, GetError())
2708 .WillOnce(Return(GL_NO_ERROR)) 2631 .WillOnce(Return(GL_NO_ERROR))
2709 .RetiresOnSaturation(); 2632 .RetiresOnSaturation();
2710 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 2633 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
2711 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 2634 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
2712 kServiceRenderbufferId)) 2635 kServiceRenderbufferId))
2713 .Times(1) 2636 .Times(1)
2714 .RetiresOnSaturation(); 2637 .RetiresOnSaturation();
2715 EXPECT_CALL(*gl_, GetError()) 2638 EXPECT_CALL(*gl_, GetError())
2716 .WillOnce(Return(GL_NO_ERROR)) 2639 .WillOnce(Return(GL_NO_ERROR))
2717 .RetiresOnSaturation(); 2640 .RetiresOnSaturation();
2718 SetupExpectationsForFramebufferAttachment(
2719 GL_COLOR_BUFFER_BIT, // clear bits
2720 0.1f, 0.2f, 0.3f, 0.4f, // color
2721 0, // stencil
2722 1.0f, // depth
2723 true); // scissor test
2724 EXPECT_EQ(error::kNoError, ExecuteCmd(color_cmd)); 2641 EXPECT_EQ(error::kNoError, ExecuteCmd(color_cmd));
2725 EXPECT_EQ(error::kNoError, ExecuteCmd(color_mask_cmd)); 2642 EXPECT_EQ(error::kNoError, ExecuteCmd(color_mask_cmd));
2726 EXPECT_EQ(error::kNoError, ExecuteCmd(enable_cmd)); 2643 EXPECT_EQ(error::kNoError, ExecuteCmd(enable_cmd));
2727 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2644 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2728 } 2645 }
2729 2646
2730 TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearDepth) { 2647 TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearDepth) {
2731 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 2648 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
2732 kServiceFramebufferId); 2649 kServiceFramebufferId);
2733 ClearDepthf depth_cmd; 2650 ClearDepthf depth_cmd;
2734 DepthMask depth_mask_cmd; 2651 DepthMask depth_mask_cmd;
2735 FramebufferRenderbuffer cmd; 2652 FramebufferRenderbuffer cmd;
2736 depth_cmd.Init(0.5f); 2653 depth_cmd.Init(0.5f);
2737 depth_mask_cmd.Init(false); 2654 depth_mask_cmd.Init(false);
2738 cmd.Init( 2655 cmd.Init(
2739 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 2656 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
2740 client_renderbuffer_id_); 2657 client_renderbuffer_id_);
2741 InSequence sequence; 2658 InSequence sequence;
2742 EXPECT_CALL(*gl_, ClearDepth(0.5f)) 2659 EXPECT_CALL(*gl_, ClearDepth(0.5f))
2743 .Times(1) 2660 .Times(1)
2744 .RetiresOnSaturation(); 2661 .RetiresOnSaturation();
2745 // EXPECT_CALL(*gl_, DepthMask(0))
2746 // .Times(1)
2747 // .RetiresOnSaturation();
2748 EXPECT_CALL(*gl_, GetError()) 2662 EXPECT_CALL(*gl_, GetError())
2749 .WillOnce(Return(GL_NO_ERROR)) 2663 .WillOnce(Return(GL_NO_ERROR))
2750 .RetiresOnSaturation(); 2664 .RetiresOnSaturation();
2751 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 2665 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
2752 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 2666 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
2753 kServiceRenderbufferId)) 2667 kServiceRenderbufferId))
2754 .Times(1) 2668 .Times(1)
2755 .RetiresOnSaturation(); 2669 .RetiresOnSaturation();
2756 EXPECT_CALL(*gl_, GetError()) 2670 EXPECT_CALL(*gl_, GetError())
2757 .WillOnce(Return(GL_NO_ERROR)) 2671 .WillOnce(Return(GL_NO_ERROR))
2758 .RetiresOnSaturation(); 2672 .RetiresOnSaturation();
2759 SetupExpectationsForFramebufferAttachment(
2760 GL_DEPTH_BUFFER_BIT, // clear bits
2761 0, 0, 0, 0, // color
2762 0, // stencil
2763 0.5f, // depth
2764 false); // scissor test
2765 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd)); 2673 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
2766 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_mask_cmd)); 2674 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_mask_cmd));
2767 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2675 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2768 } 2676 }
2769 2677
2770 TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearStencil) { 2678 TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearStencil) {
2771 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 2679 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
2772 kServiceFramebufferId); 2680 kServiceFramebufferId);
2773 ClearStencil stencil_cmd; 2681 ClearStencil stencil_cmd;
2774 StencilMaskSeparate stencil_mask_separate_cmd; 2682 StencilMaskSeparate stencil_mask_separate_cmd;
2775 FramebufferRenderbuffer cmd; 2683 FramebufferRenderbuffer cmd;
2776 stencil_cmd.Init(123); 2684 stencil_cmd.Init(123);
2777 stencil_mask_separate_cmd.Init(GL_BACK, 0x1234u); 2685 stencil_mask_separate_cmd.Init(GL_BACK, 0x1234u);
2778 cmd.Init( 2686 cmd.Init(
2779 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 2687 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
2780 client_renderbuffer_id_); 2688 client_renderbuffer_id_);
2781 InSequence sequence; 2689 InSequence sequence;
2782 EXPECT_CALL(*gl_, ClearStencil(123)) 2690 EXPECT_CALL(*gl_, ClearStencil(123))
2783 .Times(1) 2691 .Times(1)
2784 .RetiresOnSaturation(); 2692 .RetiresOnSaturation();
2785 // EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, 0x1234u))
2786 // .Times(1)
2787 // .RetiresOnSaturation();
2788 EXPECT_CALL(*gl_, GetError()) 2693 EXPECT_CALL(*gl_, GetError())
2789 .WillOnce(Return(GL_NO_ERROR)) 2694 .WillOnce(Return(GL_NO_ERROR))
2790 .RetiresOnSaturation(); 2695 .RetiresOnSaturation();
2791 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 2696 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
2792 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 2697 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
2793 kServiceRenderbufferId)) 2698 kServiceRenderbufferId))
2794 .Times(1) 2699 .Times(1)
2795 .RetiresOnSaturation(); 2700 .RetiresOnSaturation();
2796 EXPECT_CALL(*gl_, GetError()) 2701 EXPECT_CALL(*gl_, GetError())
2797 .WillOnce(Return(GL_NO_ERROR)) 2702 .WillOnce(Return(GL_NO_ERROR))
2798 .RetiresOnSaturation(); 2703 .RetiresOnSaturation();
2799 SetupExpectationsForFramebufferAttachment(
2800 GL_STENCIL_BUFFER_BIT, // clear bits
2801 0, 0, 0, 0, // color
2802 123, // stencil
2803 1.0f, // depth
2804 false); // scissor test
2805 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd)); 2704 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
2806 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_mask_separate_cmd)); 2705 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_mask_separate_cmd));
2807 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2706 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2808 } 2707 }
2809 2708
2810 TEST_F(GLES2DecoderTest, IsBuffer) { 2709 TEST_F(GLES2DecoderTest, IsBuffer) {
2811 EXPECT_FALSE(DoIsBuffer(client_buffer_id_)); 2710 EXPECT_FALSE(DoIsBuffer(client_buffer_id_));
2812 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId); 2711 DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
2813 EXPECT_TRUE(DoIsBuffer(client_buffer_id_)); 2712 EXPECT_TRUE(DoIsBuffer(client_buffer_id_));
2814 DoDeleteBuffer(client_buffer_id_, kServiceBufferId); 2713 DoDeleteBuffer(client_buffer_id_, kServiceBufferId);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2872 .Times(1) 2771 .Times(1)
2873 .RetiresOnSaturation(); 2772 .RetiresOnSaturation();
2874 EXPECT_CALL(*gl_, ClearStencil(123)) 2773 EXPECT_CALL(*gl_, ClearStencil(123))
2875 .Times(1) 2774 .Times(1)
2876 .RetiresOnSaturation(); 2775 .RetiresOnSaturation();
2877 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 2776 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
2878 GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 2777 GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
2879 kServiceRenderbufferId)) 2778 kServiceRenderbufferId))
2880 .Times(1) 2779 .Times(1)
2881 .RetiresOnSaturation(); 2780 .RetiresOnSaturation();
2882 SetupExpectationsForFramebufferAttachment(
2883 GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, // clear bits
2884 0, 0, 0, 0, // color
2885 123, // stencil
2886 0.5f, // depth
2887 false); // scissor test
2888 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd)); 2781 EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
2889 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd)); 2782 EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
2890 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 2783 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2891 } 2784 }
2892 #endif 2785 #endif
2893 2786
2894 TEST_F(GLES2DecoderWithShaderTest, VertexAttribPointer) { 2787 TEST_F(GLES2DecoderWithShaderTest, VertexAttribPointer) {
2895 SetupVertexBuffer(); 2788 SetupVertexBuffer();
2896 static const GLenum types[] = { 2789 static const GLenum types[] = {
2897 GL_BYTE, 2790 GL_BYTE,
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
3217 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3110 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3218 3111
3219 // Check that no extra calls are made on the next draw. 3112 // Check that no extra calls are made on the next draw.
3220 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices)) 3113 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
3221 .Times(1) 3114 .Times(1)
3222 .RetiresOnSaturation(); 3115 .RetiresOnSaturation();
3223 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd)); 3116 EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
3224 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3117 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3225 3118
3226 // Setup Frame buffer. 3119 // Setup Frame buffer.
3227 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, 3120 // needs to be 1x1 or else it's not renderable.
3228 kServiceFramebufferId); 3121 const GLsizei kWidth = 1;
3229 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)) 3122 const GLsizei kHeight = 1;
3230 .Times(0); 3123 const GLenum kFormat = GL_RGB;
3231 FramebufferRenderbuffer fbrb_cmd; 3124 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
3232 fbrb_cmd.Init( 3125 // Pass some data so the texture will be marked as cleared.
3233 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 3126 DoTexImage2D(
3234 client_renderbuffer_id_); 3127 GL_TEXTURE_2D, 0, kFormat, kWidth, kHeight, 0,
3235 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3128 kFormat, GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
3129 DoBindFramebuffer(
3130 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
3131 DoFramebufferTexture2D(
3132 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
3133 client_texture_id_, kServiceTextureId, 0, GL_NO_ERROR);
3236 3134
3237 // This time state needs to be set. 3135 // This time state needs to be set.
3238 SetupExpectationsForApplyingDirtyState( 3136 SetupExpectationsForApplyingDirtyState(
3239 false, // Framebuffer is RGB 3137 false, // Framebuffer is RGB
3240 false, // Framebuffer has depth 3138 false, // Framebuffer has depth
3241 false, // Framebuffer has stencil 3139 false, // Framebuffer has stencil
3242 0x1110, // color bits 3140 0x1110, // color bits
3243 false, // depth mask 3141 false, // depth mask
3244 false, // depth enabled 3142 false, // depth enabled
3245 0, // front stencil mask 3143 0, // front stencil mask
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
3812 .Times(1) 3710 .Times(1)
3813 .RetiresOnSaturation(); 3711 .RetiresOnSaturation();
3814 RenderbufferStorage cmd; 3712 RenderbufferStorage cmd;
3815 cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50); 3713 cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50);
3816 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3714 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3817 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 3715 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
3818 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 3716 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
3819 kServiceRenderbufferId)) 3717 kServiceRenderbufferId))
3820 .Times(1) 3718 .Times(1)
3821 .RetiresOnSaturation(); 3719 .RetiresOnSaturation();
3822 SetupExpectationsForFramebufferAttachment(
3823 GL_DEPTH_BUFFER_BIT, // clear bits
3824 0, 0, 0, 0, // color
3825 0, // stencil
3826 1.0f, // depth
3827 false); // scissor test
3828 FramebufferRenderbuffer fbrb_cmd; 3720 FramebufferRenderbuffer fbrb_cmd;
3829 fbrb_cmd.Init( 3721 fbrb_cmd.Init(
3830 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 3722 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
3831 client_renderbuffer_id_); 3723 client_renderbuffer_id_);
3832 EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd)); 3724 EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
3833 3725
3834 typedef GetIntegerv::Result Result; 3726 typedef GetIntegerv::Result Result;
3835 Result* result = static_cast<Result*>(shared_memory_address_); 3727 Result* result = static_cast<Result*>(shared_memory_address_);
3836 result->size = 0; 3728 result->size = 0;
3837 GetIntegerv cmd2; 3729 GetIntegerv cmd2;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
3889 .Times(1) 3781 .Times(1)
3890 .RetiresOnSaturation(); 3782 .RetiresOnSaturation();
3891 RenderbufferStorage cmd; 3783 RenderbufferStorage cmd;
3892 cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50); 3784 cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50);
3893 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3785 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3894 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( 3786 EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
3895 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 3787 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
3896 kServiceRenderbufferId)) 3788 kServiceRenderbufferId))
3897 .Times(1) 3789 .Times(1)
3898 .RetiresOnSaturation(); 3790 .RetiresOnSaturation();
3899 SetupExpectationsForFramebufferAttachment(
3900 GL_STENCIL_BUFFER_BIT, // clear bits
3901 0, 0, 0, 0, // color
3902 0, // stencil
3903 1.0f, // depth
3904 false); // scissor test
3905 FramebufferRenderbuffer fbrb_cmd; 3791 FramebufferRenderbuffer fbrb_cmd;
3906 fbrb_cmd.Init( 3792 fbrb_cmd.Init(
3907 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 3793 GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
3908 client_renderbuffer_id_); 3794 client_renderbuffer_id_);
3909 EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd)); 3795 EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
3910 3796
3911 typedef GetIntegerv::Result Result; 3797 typedef GetIntegerv::Result Result;
3912 Result* result = static_cast<Result*>(shared_memory_address_); 3798 Result* result = static_cast<Result*>(shared_memory_address_);
3913 result->size = 0; 3799 result->size = 0;
3914 GetIntegerv cmd2; 3800 GetIntegerv cmd2;
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
4065 EXPECT_EQ(kSentinel, results[num_results]); // End of results 3951 EXPECT_EQ(kSentinel, results[num_results]); // End of results
4066 } 3952 }
4067 3953
4068 TEST_F(GLES2DecoderTest, TexImage2DRedefinitionSucceeds) { 3954 TEST_F(GLES2DecoderTest, TexImage2DRedefinitionSucceeds) {
4069 const int kWidth = 16; 3955 const int kWidth = 16;
4070 const int kHeight = 8; 3956 const int kHeight = 8;
4071 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 3957 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4072 EXPECT_CALL(*gl_, GetError()) 3958 EXPECT_CALL(*gl_, GetError())
4073 .WillRepeatedly(Return(GL_NO_ERROR)); 3959 .WillRepeatedly(Return(GL_NO_ERROR));
4074 for (int ii = 0; ii < 2; ++ii) { 3960 for (int ii = 0; ii < 2; ++ii) {
3961 TexImage2D cmd;
4075 if (ii == 0) { 3962 if (ii == 0) {
4076 EXPECT_CALL(*gl_, TexImage2D( 3963 EXPECT_CALL(*gl_, TexImage2D(
4077 GL_TEXTURE_2D, 0, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, 3964 GL_TEXTURE_2D, 0, GL_RGBA, kWidth, kHeight, 0, GL_RGBA,
4078 GL_UNSIGNED_BYTE, _)) 3965 GL_UNSIGNED_BYTE, _))
4079 .Times(1) 3966 .Times(1)
4080 .RetiresOnSaturation(); 3967 .RetiresOnSaturation();
3968 cmd.Init(
3969 GL_TEXTURE_2D, 0, GL_RGBA, kWidth, kHeight, 0, GL_RGBA,
3970 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
3971 } else {
3972 cmd.Init(
3973 GL_TEXTURE_2D, 0, GL_RGBA, kWidth, kHeight, 0, GL_RGBA,
3974 GL_UNSIGNED_BYTE, 0, 0);
4081 } 3975 }
4082 TexImage2D cmd;
4083 cmd.Init(
4084 GL_TEXTURE_2D, 0, GL_RGBA, kWidth, kHeight, 0, GL_RGBA,
4085 GL_UNSIGNED_BYTE, 0, 0);
4086 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3976 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4087 EXPECT_CALL(*gl_, TexSubImage2D( 3977 EXPECT_CALL(*gl_, TexSubImage2D(
4088 GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight - 1, GL_RGBA, GL_UNSIGNED_BYTE, 3978 GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight - 1, GL_RGBA, GL_UNSIGNED_BYTE,
4089 shared_memory_address_)) 3979 shared_memory_address_))
4090 .Times(1) 3980 .Times(1)
4091 .RetiresOnSaturation(); 3981 .RetiresOnSaturation();
4092 // Consider this TexSubImage2D command part of the previous TexImage2D 3982 // Consider this TexSubImage2D command part of the previous TexImage2D
4093 // (last GL_TRUE argument). It will be skipped if there are bugs in the 3983 // (last GL_TRUE argument). It will be skipped if there are bugs in the
4094 // redefinition case. 3984 // redefinition case.
4095 TexSubImage2D cmd2; 3985 TexSubImage2D cmd2;
(...skipping 896 matching lines...) Expand 10 before | Expand all | Expand 10 after
4992 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 4882 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
4993 } 4883 }
4994 4884
4995 TEST_F(GLES2DecoderTest, RequestExtensionCHROMIUMBadBucket) { 4885 TEST_F(GLES2DecoderTest, RequestExtensionCHROMIUMBadBucket) {
4996 const uint32 kBadBucketId = 123; 4886 const uint32 kBadBucketId = 123;
4997 RequestExtensionCHROMIUM cmd; 4887 RequestExtensionCHROMIUM cmd;
4998 cmd.Init(kBadBucketId); 4888 cmd.Init(kBadBucketId);
4999 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 4889 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
5000 } 4890 }
5001 4891
4892 TEST_F(GLES2DecoderTest, TexSubImage2DClearsAfterTexImage2DNULL) {
4893 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4894 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
4895 0, 0);
4896 SetupClearTextureExpections(
4897 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
4898 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
4899 EXPECT_CALL(*gl_, TexSubImage2D(
4900 GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
4901 shared_memory_address_))
4902 .Times(1)
4903 .RetiresOnSaturation();
4904 TexSubImage2D cmd;
4905 cmd.Init(
4906 GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
4907 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
4908 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4909 // Test if we call it again it does not clear.
4910 EXPECT_CALL(*gl_, TexSubImage2D(
4911 GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
4912 shared_memory_address_))
4913 .Times(1)
4914 .RetiresOnSaturation();
4915 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4916 }
4917
4918 TEST_F(GLES2DecoderTest,
4919 TexSubImage2DDoesNotClearAfterTexImage2DWithDataThenNULL) {
4920 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4921 // Put in data (so it should be marked as cleared)
4922 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
4923 kSharedMemoryId, kSharedMemoryOffset);
4924 // Put in no data.
4925 TexImage2D tex_cmd;
4926 tex_cmd.Init(
4927 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
4928 // There is no expectation. Same size, no data = no-op.
4929 EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
4930 EXPECT_CALL(*gl_, TexSubImage2D(
4931 GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
4932 shared_memory_address_))
4933 .Times(1)
4934 .RetiresOnSaturation();
4935 TexSubImage2D cmd;
4936 cmd.Init(
4937 GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
4938 kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
4939 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4940 }
4941
4942 TEST_F(GLES2DecoderWithShaderTest, DrawArraysClearsAfterTexImage2DNULL) {
4943 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4944 // Create an uncleared texture with 2 levels.
4945 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
4946 0, 0);
4947 DoTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
4948 0, 0);
4949 // Expect 2 levels will be cleared.
4950 SetupClearTextureExpections(
4951 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
4952 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
4953 SetupClearTextureExpections(
4954 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
4955 1, GL_RGBA, GL_UNSIGNED_BYTE, 1, 1);
4956 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
4957 SetupExpectationsForApplyingDefaultDirtyState();
4958 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
4959 .Times(1)
4960 .RetiresOnSaturation();
4961 DrawArrays cmd;
4962 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
4963 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4964 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4965 }
4966
4967 TEST_F(GLES2DecoderWithShaderTest, DrawElementsClearsAfterTexImage2DNULL) {
4968 SetupIndexBuffer();
4969 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4970 // Create an uncleared texture with 2 levels.
4971 DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
4972 0, 0);
4973 DoTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
4974 0, 0);
4975 // Expect 2 levels will be cleared.
4976 SetupClearTextureExpections(
4977 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
4978 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
4979 SetupClearTextureExpections(
4980 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
4981 1, GL_RGBA, GL_UNSIGNED_BYTE, 1, 1);
4982 AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
4983 SetupExpectationsForApplyingDefaultDirtyState();
4984 EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount,
4985 GL_UNSIGNED_SHORT,
4986 BufferOffset(kValidIndexRangeStart * 2)))
4987 .Times(1)
4988 .RetiresOnSaturation();
4989 DrawElements cmd;
4990 cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
4991 kValidIndexRangeStart * 2);
4992 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4993 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4994 }
4995
4996 TEST_F(GLES2DecoderWithShaderTest, DrawClearsAfterTexImage2DNULLInFBO) {
4997 const GLuint kFBOClientTextureId = 4100;
4998 const GLuint kFBOServiceTextureId = 4101;
4999
5000 // Register a texture id.
5001 EXPECT_CALL(*gl_, GenTextures(_, _))
5002 .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
5003 .RetiresOnSaturation();
5004 GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
5005
5006 // Setup "render to" texture.
5007 DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
5008 DoTexImage2D(
5009 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
5010 DoBindFramebuffer(
5011 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
5012 DoFramebufferTexture2D(
5013 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
5014 kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
5015
5016 // Setup "render from" texture.
5017 SetupTexture();
5018
5019 SetupExpectationsForFramebufferClearing(
5020 GL_FRAMEBUFFER, // target
5021 GL_COLOR_BUFFER_BIT, // clear bits
5022 0, 0, 0, 0, // color
5023 0, // stencil
5024 1.0f, // depth
5025 false); // scissor test
5026
5027 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
5028 SetupExpectationsForApplyingDirtyState(
5029 false, // Framebuffer is RGB
5030 false, // Framebuffer has depth
5031 false, // Framebuffer has stencil
5032 0x1111, // color bits
5033 false, // depth mask
5034 false, // depth enabled
5035 0, // front stencil mask
5036 0, // back stencil mask
5037 false); // stencil enabled
5038 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
5039 .Times(1)
5040 .RetiresOnSaturation();
5041 DrawArrays cmd;
5042 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
5043 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5044 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5045 }
5046
5047 TEST_F(GLES2DecoderWithShaderTest, DrawWitFBOThatCantClearDoesNotDraw) {
5048 const GLuint kFBOClientTextureId = 4100;
5049 const GLuint kFBOServiceTextureId = 4101;
5050
5051 // Register a texture id.
5052 EXPECT_CALL(*gl_, GenTextures(_, _))
5053 .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
5054 .RetiresOnSaturation();
5055 GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
5056
5057 // Setup "render to" texture.
5058 DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
5059 DoTexImage2D(
5060 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
5061 DoBindFramebuffer(
5062 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
5063 DoFramebufferTexture2D(
5064 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
5065 kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
5066
5067 // Setup "render from" texture.
5068 SetupTexture();
5069
5070 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
5071 .WillOnce(Return(GL_FRAMEBUFFER_UNSUPPORTED))
5072 .RetiresOnSaturation();
5073 EXPECT_CALL(*gl_, DrawArrays(_, _, _))
5074 .Times(0)
5075 .RetiresOnSaturation();
5076 DrawArrays cmd;
5077 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
5078 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5079 EXPECT_EQ(GL_INVALID_FRAMEBUFFER_OPERATION, GetGLError());
5080 }
5081
5082 TEST_F(GLES2DecoderTest, CopyTexImage2DMarksTextureAsCleared) {
5083 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
5084
5085 TextureManager* manager = group().texture_manager();
5086 TextureManager::TextureInfo* info =
5087 manager->GetTextureInfo(client_texture_id_);
5088
5089 EXPECT_CALL(*gl_, GetError())
5090 .WillOnce(Return(GL_NO_ERROR))
5091 .RetiresOnSaturation();
5092 EXPECT_CALL(*gl_, CopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0))
5093 .Times(1)
5094 .RetiresOnSaturation();
5095 EXPECT_CALL(*gl_, GetError())
5096 .WillOnce(Return(GL_NO_ERROR))
5097 .RetiresOnSaturation();
5098 CopyTexImage2D cmd;
5099 cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0);
5100 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5101
5102 EXPECT_TRUE(info->SafeToRenderFrom());
5103 }
5104
5105 TEST_F(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedTexture) {
5106 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
5107 DoTexImage2D(
5108 GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
5109
5110 SetupClearTextureExpections(
5111 kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
5112 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
5113 EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1))
5114 .Times(1)
5115 .RetiresOnSaturation();
5116 CopyTexSubImage2D cmd;
5117 cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
5118 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5119 }
5120
5121 TEST_F(GLES2DecoderManualInitTest, CompressedImage2DMarksTextureAsCleared) {
5122 InitDecoder(
5123 "GL_EXT_texture_compression_s3tc", // extensions
5124 false, // has alpha
5125 false, // has depth
5126 false, // has stencil
5127 false, // request alpha
5128 false, // request depth
5129 false, // request stencil
5130 true); // bind generates resource
5131
5132 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
5133 EXPECT_CALL(*gl_, GetError())
5134 .WillOnce(Return(GL_NO_ERROR))
5135 .RetiresOnSaturation();
5136 EXPECT_CALL(*gl_, CompressedTexImage2D(
5137 GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, 16, _))
5138 .Times(1)
5139 .RetiresOnSaturation();
5140 EXPECT_CALL(*gl_, GetError())
5141 .WillOnce(Return(GL_NO_ERROR))
5142 .RetiresOnSaturation();
5143 CompressedTexImage2D cmd;
5144 cmd.Init(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0,
5145 16, kSharedMemoryId, kSharedMemoryOffset);
5146 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5147 TextureManager* manager = group().texture_manager();
5148 TextureManager::TextureInfo* info =
5149 manager->GetTextureInfo(client_texture_id_);
5150 EXPECT_TRUE(info->SafeToRenderFrom());
5151 }
5152
5153 TEST_F(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnClear) {
5154 const GLuint kFBOClientTextureId = 4100;
5155 const GLuint kFBOServiceTextureId = 4101;
5156
5157 // Register a texture id.
5158 EXPECT_CALL(*gl_, GenTextures(_, _))
5159 .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
5160 .RetiresOnSaturation();
5161 GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
5162
5163 // Setup "render to" texture.
5164 DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
5165 DoTexImage2D(
5166 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
5167 DoBindFramebuffer(
5168 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
5169 DoFramebufferTexture2D(
5170 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
5171 kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
5172
5173 // Setup "render from" texture.
5174 SetupTexture();
5175
5176 SetupExpectationsForFramebufferClearing(
5177 GL_FRAMEBUFFER, // target
5178 GL_COLOR_BUFFER_BIT, // clear bits
5179 0, 0, 0, 0, // color
5180 0, // stencil
5181 1.0f, // depth
5182 false); // scissor test
5183 SetupExpectationsForApplyingDirtyState(
5184 false, // Framebuffer is RGB
5185 false, // Framebuffer has depth
5186 false, // Framebuffer has stencil
5187 0x1111, // color bits
5188 false, // depth mask
5189 false, // depth enabled
5190 0, // front stencil mask
5191 0, // back stencil mask
5192 false); // stencil enabled
5193 EXPECT_CALL(*gl_, Clear(GL_COLOR_BUFFER_BIT))
5194 .Times(1)
5195 .RetiresOnSaturation();
5196
5197 Clear cmd;
5198 cmd.Init(GL_COLOR_BUFFER_BIT);
5199 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5200 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5201 }
5202
5203 TEST_F(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnReadPixels) {
5204 const GLuint kFBOClientTextureId = 4100;
5205 const GLuint kFBOServiceTextureId = 4101;
5206
5207 // Register a texture id.
5208 EXPECT_CALL(*gl_, GenTextures(_, _))
5209 .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
5210 .RetiresOnSaturation();
5211 GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
5212
5213 // Setup "render to" texture.
5214 DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
5215 DoTexImage2D(
5216 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
5217 DoBindFramebuffer(
5218 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
5219 DoFramebufferTexture2D(
5220 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
5221 kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
5222
5223 // Setup "render from" texture.
5224 SetupTexture();
5225
5226 SetupExpectationsForFramebufferClearing(
5227 GL_FRAMEBUFFER, // target
5228 GL_COLOR_BUFFER_BIT, // clear bits
5229 0, 0, 0, 0, // color
5230 0, // stencil
5231 1.0f, // depth
5232 false); // scissor test
5233
5234 EXPECT_CALL(*gl_, GetError())
5235 .WillOnce(Return(GL_NO_ERROR))
5236 .WillOnce(Return(GL_NO_ERROR))
5237 .RetiresOnSaturation();
5238 EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _))
5239 .Times(1)
5240 .RetiresOnSaturation();
5241 typedef ReadPixels::Result Result;
5242 Result* result = GetSharedMemoryAs<Result*>();
5243 uint32 result_shm_id = kSharedMemoryId;
5244 uint32 result_shm_offset = kSharedMemoryOffset;
5245 uint32 pixels_shm_id = kSharedMemoryId;
5246 uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
5247 ReadPixels cmd;
5248 cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
5249 pixels_shm_id, pixels_shm_offset,
5250 result_shm_id, result_shm_offset);
5251 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5252 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5253 }
5254
5255 TEST_F(GLES2DecoderWithShaderTest, DrawClearsAfterRenderbufferStorageInFBO) {
5256 SetupTexture();
5257 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
5258 kServiceRenderbufferId);
5259 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
5260 kServiceFramebufferId);
5261 DoRenderbufferStorage(
5262 GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 100, 50, GL_NO_ERROR);
5263 DoFramebufferRenderbuffer(
5264 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
5265 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
5266
5267 SetupExpectationsForFramebufferClearing(
5268 GL_FRAMEBUFFER, // target
5269 GL_COLOR_BUFFER_BIT, // clear bits
5270 0, 0, 0, 0, // color
5271 0, // stencil
5272 1.0f, // depth
5273 false); // scissor test
5274
5275 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
5276 SetupExpectationsForApplyingDirtyState(
5277 false, // Framebuffer is RGB
5278 false, // Framebuffer has depth
5279 false, // Framebuffer has stencil
5280 0x1111, // color bits
5281 false, // depth mask
5282 false, // depth enabled
5283 0, // front stencil mask
5284 0, // back stencil mask
5285 false); // stencil enabled
5286 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
5287 .Times(1)
5288 .RetiresOnSaturation();
5289 DrawArrays cmd;
5290 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
5291 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5292 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5293 }
5294
5295 TEST_F(GLES2DecoderTest, DrawArraysClearsAfterTexImage2DNULLCubemap) {
5296 static const GLenum faces[] = {
5297 GL_TEXTURE_CUBE_MAP_POSITIVE_X,
5298 GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
5299 GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
5300 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
5301 GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
5302 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
5303 };
5304 SetupCubemapProgram();
5305 DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId);
5306 // Fill out all the faces for 2 levels, leave 2 uncleared.
5307 for (int ii = 0; ii < 6; ++ii) {
5308 GLenum face = faces[ii];
5309 int32 shm_id =
5310 (face == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) ? 0 : kSharedMemoryId;
5311 uint32 shm_offset =
5312 (face == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) ? 0 : kSharedMemoryOffset;
5313 DoTexImage2D(face, 0, GL_RGBA, 2, 2, 0, GL_RGBA,
5314 GL_UNSIGNED_BYTE, shm_id, shm_offset);
5315 DoTexImage2D(face, 1, GL_RGBA, 1, 1, 0, GL_RGBA,
5316 GL_UNSIGNED_BYTE, shm_id, shm_offset);
5317 }
5318 // Expect 2 levels will be cleared.
5319 SetupClearTextureExpections(
5320 kServiceTextureId, kServiceTextureId, GL_TEXTURE_CUBE_MAP,
5321 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
5322 SetupClearTextureExpections(
5323 kServiceTextureId, kServiceTextureId, GL_TEXTURE_CUBE_MAP,
5324 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 1, GL_RGBA, GL_UNSIGNED_BYTE, 1, 1);
5325 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
5326 SetupExpectationsForApplyingDefaultDirtyState();
5327 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
5328 .Times(1)
5329 .RetiresOnSaturation();
5330 DrawArrays cmd;
5331 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
5332 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5333 }
5334
5335 TEST_F(GLES2DecoderWithShaderTest,
5336 DrawClearsAfterRenderbuffersWithMultipleAttachments) {
5337 const GLuint kFBOClientTextureId = 4100;
5338 const GLuint kFBOServiceTextureId = 4101;
5339
5340 // Register a texture id.
5341 EXPECT_CALL(*gl_, GenTextures(_, _))
5342 .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
5343 .RetiresOnSaturation();
5344 GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
5345
5346 // Setup "render to" texture.
5347 DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
5348 DoTexImage2D(
5349 GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
5350 DoBindFramebuffer(
5351 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
5352 DoFramebufferTexture2D(
5353 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
5354 kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
5355
5356 DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
5357 kServiceRenderbufferId);
5358 DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
5359 kServiceFramebufferId);
5360 DoRenderbufferStorage(
5361 GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT,
5362 1, 1, GL_NO_ERROR);
5363 DoFramebufferRenderbuffer(
5364 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
5365 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
5366
5367 SetupTexture();
5368 SetupExpectationsForFramebufferClearing(
5369 GL_FRAMEBUFFER, // target
5370 GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, // clear bits
5371 0, 0, 0, 0, // color
5372 0, // stencil
5373 1.0f, // depth
5374 false); // scissor test
5375
5376 AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
5377 SetupExpectationsForApplyingDirtyState(
5378 false, // Framebuffer is RGB
5379 true, // Framebuffer has depth
5380 false, // Framebuffer has stencil
5381 0x1111, // color bits
5382 true, // depth mask
5383 false, // depth enabled
5384 0, // front stencil mask
5385 0, // back stencil mask
5386 false); // stencil enabled
5387 EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
5388 .Times(1)
5389 .RetiresOnSaturation();
5390 DrawArrays cmd;
5391 cmd.Init(GL_TRIANGLES, 0, kNumVertices);
5392 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5393 EXPECT_EQ(GL_NO_ERROR, GetGLError());
5394 }
5395
5396
5397
5002 // TODO(gman): Complete this test. 5398 // TODO(gman): Complete this test.
5003 // TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) { 5399 // TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) {
5004 // } 5400 // }
5005 5401
5006 // TODO(gman): BufferData 5402 // TODO(gman): BufferData
5007 5403
5008 // TODO(gman): BufferDataImmediate 5404 // TODO(gman): BufferDataImmediate
5009 5405
5010 // TODO(gman): BufferSubData 5406 // TODO(gman): BufferSubData
5011 5407
(...skipping 16 matching lines...) Expand all
5028 // TODO(gman): TexImage2DImmediate 5424 // TODO(gman): TexImage2DImmediate
5029 5425
5030 // TODO(gman): TexSubImage2DImmediate 5426 // TODO(gman): TexSubImage2DImmediate
5031 5427
5032 // TODO(gman): UseProgram 5428 // TODO(gman): UseProgram
5033 5429
5034 // TODO(gman): SwapBuffers 5430 // TODO(gman): SwapBuffers
5035 5431
5036 } // namespace gles2 5432 } // namespace gles2
5037 } // namespace gpu 5433 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder_mock.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698