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/error_state_mock.h" | 5 #include "gpu/command_buffer/service/error_state_mock.h" |
6 #include "gpu/command_buffer/service/framebuffer_manager.h" | 6 #include "gpu/command_buffer/service/framebuffer_manager.h" |
7 #include "gpu/command_buffer/service/feature_info.h" | 7 #include "gpu/command_buffer/service/feature_info.h" |
8 #include "gpu/command_buffer/service/gpu_service_test.h" | 8 #include "gpu/command_buffer/service/gpu_service_test.h" |
9 #include "gpu/command_buffer/service/renderbuffer_manager.h" | 9 #include "gpu/command_buffer/service/renderbuffer_manager.h" |
10 #include "gpu/command_buffer/service/test_helper.h" | 10 #include "gpu/command_buffer/service/test_helper.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 const GLint kMaxSamples = 4; | 27 const GLint kMaxSamples = 4; |
28 const uint32 kMaxDrawBuffers = 16; | 28 const uint32 kMaxDrawBuffers = 16; |
29 const uint32 kMaxColorAttachments = 16; | 29 const uint32 kMaxColorAttachments = 16; |
30 const bool kUseDefaultTextures = false; | 30 const bool kUseDefaultTextures = false; |
31 | 31 |
32 } // namespace | 32 } // namespace |
33 | 33 |
34 class FramebufferManagerTest : public GpuServiceTest { | 34 class FramebufferManagerTest : public GpuServiceTest { |
35 public: | 35 public: |
36 FramebufferManagerTest() | 36 FramebufferManagerTest() |
37 : manager_(1, 1), | 37 : manager_(1, 1, ContextGroup::CONTEXT_TYPE_UNDEFINED), |
38 feature_info_(new FeatureInfo()) { | 38 feature_info_(new FeatureInfo()) { |
39 texture_manager_.reset(new TextureManager(NULL, | 39 texture_manager_.reset(new TextureManager(NULL, |
40 feature_info_.get(), | 40 feature_info_.get(), |
41 kMaxTextureSize, | 41 kMaxTextureSize, |
42 kMaxCubemapSize, | 42 kMaxCubemapSize, |
43 kMaxRectangleTextureSize, | 43 kMaxRectangleTextureSize, |
44 kMax3DTextureSize, | 44 kMax3DTextureSize, |
45 kUseDefaultTextures)); | 45 kUseDefaultTextures)); |
46 renderbuffer_manager_.reset(new RenderbufferManager(NULL, | 46 renderbuffer_manager_.reset(new RenderbufferManager(NULL, |
47 kMaxRenderbufferSize, | 47 kMaxRenderbufferSize, |
48 kMaxSamples, | 48 kMaxSamples, |
49 feature_info_.get())); | 49 feature_info_.get())); |
50 } | 50 } |
51 ~FramebufferManagerTest() override { | 51 ~FramebufferManagerTest() override { |
52 manager_.Destroy(false); | 52 manager_.Destroy(false); |
53 texture_manager_->Destroy(false); | 53 texture_manager_->Destroy(false); |
54 renderbuffer_manager_->Destroy(false); | 54 renderbuffer_manager_->Destroy(false); |
55 } | 55 } |
56 | 56 |
57 protected: | 57 protected: |
58 | |
59 FramebufferManager manager_; | 58 FramebufferManager manager_; |
60 scoped_refptr<FeatureInfo> feature_info_; | 59 scoped_refptr<FeatureInfo> feature_info_; |
61 scoped_ptr<TextureManager> texture_manager_; | 60 scoped_ptr<TextureManager> texture_manager_; |
62 scoped_ptr<RenderbufferManager> renderbuffer_manager_; | 61 scoped_ptr<RenderbufferManager> renderbuffer_manager_; |
63 }; | 62 }; |
64 | 63 |
65 TEST_F(FramebufferManagerTest, Basic) { | 64 TEST_F(FramebufferManagerTest, Basic) { |
66 const GLuint kClient1Id = 1; | 65 const GLuint kClient1Id = 1; |
67 const GLuint kService1Id = 11; | 66 const GLuint kService1Id = 11; |
68 const GLuint kClient2Id = 2; | 67 const GLuint kClient2Id = 2; |
(...skipping 30 matching lines...) Expand all Loading... |
99 ASSERT_TRUE(framebuffer1 != NULL); | 98 ASSERT_TRUE(framebuffer1 != NULL); |
100 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, ::testing::Pointee(kService1Id))) | 99 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, ::testing::Pointee(kService1Id))) |
101 .Times(1) | 100 .Times(1) |
102 .RetiresOnSaturation(); | 101 .RetiresOnSaturation(); |
103 manager_.Destroy(true); | 102 manager_.Destroy(true); |
104 // Check the resources were released. | 103 // Check the resources were released. |
105 framebuffer1 = manager_.GetFramebuffer(kClient1Id); | 104 framebuffer1 = manager_.GetFramebuffer(kClient1Id); |
106 ASSERT_TRUE(framebuffer1 == NULL); | 105 ASSERT_TRUE(framebuffer1 == NULL); |
107 } | 106 } |
108 | 107 |
109 class FramebufferInfoTest : public GpuServiceTest { | 108 class FramebufferInfoTestBase : public GpuServiceTest { |
110 public: | 109 public: |
111 static const GLuint kClient1Id = 1; | 110 static const GLuint kClient1Id = 1; |
112 static const GLuint kService1Id = 11; | 111 static const GLuint kService1Id = 11; |
113 | 112 |
114 FramebufferInfoTest() | 113 explicit FramebufferInfoTestBase(ContextGroup::ContextType context_type) |
115 : manager_(kMaxDrawBuffers, kMaxColorAttachments), | 114 : manager_(kMaxDrawBuffers, kMaxColorAttachments, context_type), |
116 feature_info_(new FeatureInfo()) { | 115 feature_info_(new FeatureInfo()) { |
117 texture_manager_.reset(new TextureManager(NULL, | 116 texture_manager_.reset(new TextureManager(NULL, |
118 feature_info_.get(), | 117 feature_info_.get(), |
119 kMaxTextureSize, | 118 kMaxTextureSize, |
120 kMaxCubemapSize, | 119 kMaxCubemapSize, |
121 kMaxRectangleTextureSize, | 120 kMaxRectangleTextureSize, |
122 kMax3DTextureSize, | 121 kMax3DTextureSize, |
123 kUseDefaultTextures)); | 122 kUseDefaultTextures)); |
124 renderbuffer_manager_.reset(new RenderbufferManager(NULL, | 123 renderbuffer_manager_.reset(new RenderbufferManager(NULL, |
125 kMaxRenderbufferSize, | 124 kMaxRenderbufferSize, |
126 kMaxSamples, | 125 kMaxSamples, |
127 feature_info_.get())); | 126 feature_info_.get())); |
128 } | 127 } |
129 ~FramebufferInfoTest() override { | 128 ~FramebufferInfoTestBase() override { |
130 manager_.Destroy(false); | 129 manager_.Destroy(false); |
131 texture_manager_->Destroy(false); | 130 texture_manager_->Destroy(false); |
132 renderbuffer_manager_->Destroy(false); | 131 renderbuffer_manager_->Destroy(false); |
133 } | 132 } |
134 | 133 |
135 protected: | 134 protected: |
136 void SetUp() override { | 135 void SetUp() override { |
137 InitializeContext("2.0", "GL_EXT_framebuffer_object"); | 136 InitializeContext("2.0", "GL_EXT_framebuffer_object"); |
138 } | 137 } |
139 | 138 |
140 void InitializeContext(const char* gl_version, const char* extensions) { | 139 void InitializeContext(const char* gl_version, const char* extensions) { |
141 GpuServiceTest::SetUpWithGLVersion(gl_version, extensions); | 140 GpuServiceTest::SetUpWithGLVersion(gl_version, extensions); |
142 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(), | 141 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(), |
143 extensions, "", gl_version); | 142 extensions, "", gl_version); |
144 feature_info_->Initialize(); | 143 feature_info_->Initialize(); |
145 manager_.CreateFramebuffer(kClient1Id, kService1Id); | 144 manager_.CreateFramebuffer(kClient1Id, kService1Id); |
146 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); | 145 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); |
147 framebuffer_ = manager_.GetFramebuffer(kClient1Id); | 146 framebuffer_ = manager_.GetFramebuffer(kClient1Id); |
148 ASSERT_TRUE(framebuffer_ != NULL); | 147 ASSERT_TRUE(framebuffer_ != NULL); |
149 } | 148 } |
150 | 149 |
151 FramebufferManager manager_; | 150 FramebufferManager manager_; |
152 Framebuffer* framebuffer_; | 151 Framebuffer* framebuffer_; |
153 scoped_refptr<FeatureInfo> feature_info_; | 152 scoped_refptr<FeatureInfo> feature_info_; |
154 scoped_ptr<TextureManager> texture_manager_; | 153 scoped_ptr<TextureManager> texture_manager_; |
155 scoped_ptr<RenderbufferManager> renderbuffer_manager_; | 154 scoped_ptr<RenderbufferManager> renderbuffer_manager_; |
156 scoped_ptr<MockErrorState> error_state_; | 155 scoped_ptr<MockErrorState> error_state_; |
157 }; | 156 }; |
158 | 157 |
| 158 class FramebufferInfoTest : public FramebufferInfoTestBase { |
| 159 public: |
| 160 FramebufferInfoTest() |
| 161 : FramebufferInfoTestBase(ContextGroup::CONTEXT_TYPE_UNDEFINED) { |
| 162 } |
| 163 }; |
| 164 |
159 // GCC requires these declarations, but MSVC requires they not be present | 165 // GCC requires these declarations, but MSVC requires they not be present |
160 #ifndef COMPILER_MSVC | 166 #ifndef COMPILER_MSVC |
161 const GLuint FramebufferInfoTest::kClient1Id; | 167 const GLuint FramebufferInfoTestBase::kClient1Id; |
162 const GLuint FramebufferInfoTest::kService1Id; | 168 const GLuint FramebufferInfoTestBase::kService1Id; |
163 #endif | 169 #endif |
164 | 170 |
165 TEST_F(FramebufferInfoTest, Basic) { | 171 TEST_F(FramebufferInfoTest, Basic) { |
166 EXPECT_EQ(kService1Id, framebuffer_->service_id()); | 172 EXPECT_EQ(kService1Id, framebuffer_->service_id()); |
167 EXPECT_FALSE(framebuffer_->IsDeleted()); | 173 EXPECT_FALSE(framebuffer_->IsDeleted()); |
168 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0)); | 174 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0)); |
169 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT)); | 175 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_DEPTH_ATTACHMENT)); |
170 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT)); | 176 EXPECT_TRUE(NULL == framebuffer_->GetAttachment(GL_STENCIL_ATTACHMENT)); |
171 EXPECT_TRUE( | 177 EXPECT_TRUE( |
172 NULL == framebuffer_->GetAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); | 178 NULL == framebuffer_->GetAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); |
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
913 // Check Unbinding does not call CheckFramebufferStatus | 919 // Check Unbinding does not call CheckFramebufferStatus |
914 framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1); | 920 framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1); |
915 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { | 921 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { |
916 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) | 922 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) |
917 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | 923 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
918 .RetiresOnSaturation(); | 924 .RetiresOnSaturation(); |
919 } | 925 } |
920 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); | 926 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); |
921 } | 927 } |
922 | 928 |
| 929 class FramebufferInfoES3Test : public FramebufferInfoTestBase { |
| 930 public: |
| 931 FramebufferInfoES3Test() |
| 932 : FramebufferInfoTestBase(ContextGroup::CONTEXT_TYPE_WEBGL2) { |
| 933 } |
| 934 }; |
| 935 |
| 936 TEST_F(FramebufferInfoES3Test, DifferentDimensions) { |
| 937 const GLuint kRenderbufferClient1Id = 33; |
| 938 const GLuint kRenderbufferService1Id = 333; |
| 939 const GLuint kRenderbufferClient2Id = 34; |
| 940 const GLuint kRenderbufferService2Id = 334; |
| 941 const GLsizei kWidth1 = 16; |
| 942 const GLsizei kHeight1 = 32; |
| 943 const GLenum kFormat1 = GL_RGBA4; |
| 944 const GLsizei kSamples1 = 0; |
| 945 const GLsizei kWidth2 = 32; // Different from kWidth1 |
| 946 const GLsizei kHeight2 = 32; |
| 947 const GLenum kFormat2 = GL_DEPTH_COMPONENT16; |
| 948 const GLsizei kSamples2 = 0; |
| 949 |
| 950 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)); |
| 951 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT)); |
| 952 EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT)); |
| 953 EXPECT_FALSE( |
| 954 framebuffer_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)); |
| 955 |
| 956 renderbuffer_manager_->CreateRenderbuffer( |
| 957 kRenderbufferClient1Id, kRenderbufferService1Id); |
| 958 Renderbuffer* renderbuffer1 = |
| 959 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient1Id); |
| 960 ASSERT_TRUE(renderbuffer1 != NULL); |
| 961 renderbuffer_manager_->SetInfo( |
| 962 renderbuffer1, kSamples1, kFormat1, kWidth1, kHeight1); |
| 963 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, renderbuffer1); |
| 964 |
| 965 renderbuffer_manager_->CreateRenderbuffer( |
| 966 kRenderbufferClient2Id, kRenderbufferService2Id); |
| 967 Renderbuffer* renderbuffer2 = |
| 968 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClient2Id); |
| 969 ASSERT_TRUE(renderbuffer2 != NULL); |
| 970 renderbuffer_manager_->SetInfo( |
| 971 renderbuffer2, kSamples2, kFormat2, kWidth2, kHeight2); |
| 972 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer2); |
| 973 |
| 974 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
| 975 framebuffer_->IsPossiblyComplete()); |
| 976 } |
| 977 |
923 } // namespace gles2 | 978 } // namespace gles2 |
924 } // namespace gpu | 979 } // namespace gpu |
925 | 980 |
926 | 981 |
OLD | NEW |