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

Side by Side Diff: gpu/command_buffer/tests/gl_apply_screen_space_antialiasing_CHROMIUM_unittest.cc

Issue 2697503002: CMAA: Avoid DCHECK failure for unsupported internalformats (Closed)
Patch Set: Created 3 years, 10 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
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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 #ifndef GL_GLEXT_PROTOTYPES 5 #ifndef GL_GLEXT_PROTOTYPES
6 #define GL_GLEXT_PROTOTYPES 6 #define GL_GLEXT_PROTOTYPES
7 #endif 7 #endif
8 8
9 #include <GLES2/gl2.h> 9 #include <GLES2/gl2.h>
10 #include <GLES2/gl2ext.h> 10 #include <GLES2/gl2ext.h>
11 #include <GLES2/gl2extchromium.h> 11 #include <GLES2/gl2extchromium.h>
12 #include <GLES3/gl3.h>
12 #include <stddef.h> 13 #include <stddef.h>
13 #include <stdint.h> 14 #include <stdint.h>
14 15
15 #include "base/command_line.h" 16 #include "base/command_line.h"
16 #include "gpu/command_buffer/tests/gl_manager.h" 17 #include "gpu/command_buffer/tests/gl_manager.h"
17 #include "gpu/command_buffer/tests/gl_test_utils.h" 18 #include "gpu/command_buffer/tests/gl_test_utils.h"
18 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
20 #include "ui/gl/gl_switches.h" 21 #include "ui/gl/gl_switches.h"
21 22
(...skipping 12 matching lines...) Expand all
34 glTexParameterf(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 35 glTexParameterf(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
35 glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 36 glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
36 glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 37 glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
37 38
38 glGenFramebuffers(1, &framebuffer_id_); 39 glGenFramebuffers(1, &framebuffer_id_);
39 glBindFramebuffer(GL_FRAMEBUFFER, framebuffer_id_); 40 glBindFramebuffer(GL_FRAMEBUFFER, framebuffer_id_);
40 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target, 41 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target,
41 textures_, 0); 42 textures_, 0);
42 } 43 }
43 44
44 void SetUp() override { 45 void CheckStatus() {
45 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
46 GLManager::Options options;
47 gl_.InitializeWithCommandLine(options, command_line);
48
49 available_ = 46 available_ =
50 GLTestHelper::HasExtension("GL_CHROMIUM_screen_space_antialiasing"); 47 GLTestHelper::HasExtension("GL_CHROMIUM_screen_space_antialiasing");
51 if (!available_) { 48 if (!available_) {
52 LOG(INFO) << "GL_CHROMIUM_screen_space_antialiasing not supported. " 49 LOG(INFO) << "GL_CHROMIUM_screen_space_antialiasing not supported. "
53 "Skipping test..."; 50 "Skipping test...";
54 return; 51 return;
55 } 52 }
56 53
57 CreateAndBindDestinationTextureAndFBO(GL_TEXTURE_2D); 54 CreateAndBindDestinationTextureAndFBO(GL_TEXTURE_2D);
58 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 55 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
(...skipping 11 matching lines...) Expand all
70 // For example, linux NVidia fails with this log. 67 // For example, linux NVidia fails with this log.
71 // ApplyFramebufferAttachmentCMAAINTEL: shader compilation failed: 68 // ApplyFramebufferAttachmentCMAAINTEL: shader compilation failed:
72 // GL_FRAGMENT_SHADER shader compilation failed: 0(98) : error C3013: 69 // GL_FRAGMENT_SHADER shader compilation failed: 0(98) : error C3013:
73 // input/output layout qualifiers supported above GL version 130 70 // input/output layout qualifiers supported above GL version 130
74 available_ = false; 71 available_ = false;
75 LOG(ERROR) << "GL_CHROMIUM_screen_space_antialiasing maybe not supported " 72 LOG(ERROR) << "GL_CHROMIUM_screen_space_antialiasing maybe not supported "
76 "in non-Intel GPU."; 73 "in non-Intel GPU.";
77 DeleteResources(); 74 DeleteResources();
78 } 75 }
79 76
77 void SetUp() override {
78 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
79 GLManager::Options options;
80 gl_.InitializeWithCommandLine(options, command_line);
81 CheckStatus();
82 }
83
80 void TearDown() override { 84 void TearDown() override {
81 if (available_) 85 if (available_)
82 DeleteResources(); 86 DeleteResources();
83 gl_.Destroy(); 87 gl_.Destroy();
84 } 88 }
85 89
86 void DeleteResources() { 90 void DeleteResources() {
87 glDeleteTextures(1, &textures_); 91 glDeleteTextures(1, &textures_);
88 glDeleteFramebuffers(1, &framebuffer_id_); 92 glDeleteFramebuffers(1, &framebuffer_id_);
89 } 93 }
90 94
91 GLManager gl_; 95 GLManager gl_;
92 GLuint textures_ = 0; 96 GLuint textures_ = 0;
93 GLuint framebuffer_id_ = 0; 97 GLuint framebuffer_id_ = 0;
94 bool available_ = false; 98 bool available_ = false;
95 }; 99 };
96 100
101 class GLApplyScreenSpaceAntialiasingCHROMIUMES3Test
102 : public GLApplyScreenSpaceAntialiasingCHROMIUMTest {
103 protected:
104 void SetUp() override {
105 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
106 GLManager::Options options;
107 options.context_type = gles2::CONTEXT_TYPE_OPENGLES3;
108 gl_.InitializeWithCommandLine(options, command_line);
109 CheckStatus();
110 }
111 };
112
97 // TODO(dongseong.hwang): This test fails on the Nexus 9 GPU fyi bot. 113 // TODO(dongseong.hwang): This test fails on the Nexus 9 GPU fyi bot.
98 // crbug.com/659638 114 // crbug.com/659638
99 #if defined(OS_ANDROID) 115 #if defined(OS_ANDROID)
100 #define MAYBE_Basic DISABLED_Basic 116 #define MAYBE_Basic DISABLED_Basic
101 #else 117 #else
102 #define MAYBE_Basic Basic 118 #define MAYBE_Basic Basic
103 #endif 119 #endif
104 // Test to ensure that the basic functionality of the extension works. 120 // Test to ensure that the basic functionality of the extension works.
105 TEST_F(GLApplyScreenSpaceAntialiasingCHROMIUMTest, MAYBE_Basic) { 121 TEST_F(GLApplyScreenSpaceAntialiasingCHROMIUMTest, MAYBE_Basic) {
106 if (!available_) 122 if (!available_)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 glApplyScreenSpaceAntialiasingCHROMIUM(); 173 glApplyScreenSpaceAntialiasingCHROMIUM();
158 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()) << "index:" 174 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()) << "index:"
159 << index; 175 << index;
160 176
161 uint8_t pixels[1 * 4] = {0u, 255u, 0u, 255u}; 177 uint8_t pixels[1 * 4] = {0u, 255u, 0u, 255u};
162 GLTestHelper::CheckPixels(0, 0, 1, 1, 0, pixels, nullptr); 178 GLTestHelper::CheckPixels(0, 0, 1, 1, 0, pixels, nullptr);
163 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); 179 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
164 } 180 }
165 } 181 }
166 182
183 struct FormatType {
184 GLenum internal_format;
185 GLenum format;
186 GLenum type;
187 };
188
189 TEST_F(GLApplyScreenSpaceAntialiasingCHROMIUMES3Test, InternalFormat) {
190 if (!available_)
191 return;
192
193 FormatType format_types[] = {
194 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE},
195 };
196
197 for (auto format_type : format_types) {
198 uint8_t pixels[1 * 4] = {0u, 255u, 0u, 255u};
Zhenyao Mo 2017/02/13 18:36:18 Shouldn't this be part of the format_types structu
qiankun 2017/02/14 08:08:17 Done.
199 glTexImage2D(GL_TEXTURE_2D, 0, format_type.internal_format, 1, 1, 0,
200 format_type.format, format_type.type, pixels);
201 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
202
203 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
204 textures_, 0);
205
206 // Only if the format is supported by FBO, supported by this extension.
207 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
208 continue;
209
210 glApplyScreenSpaceAntialiasingCHROMIUM();
211 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError())
212 << "internal_format: "
213 << gles2::GLES2Util::GetStringEnum(format_type.internal_format);
214
215 GLTestHelper::CheckPixels(0, 0, 1, 1, 0, pixels, nullptr);
216 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
217 }
218 }
219
220 TEST_F(GLApplyScreenSpaceAntialiasingCHROMIUMES3Test,
221 InternalFormatNotSupported) {
222 if (!available_)
223 return;
224
225 FormatType format_types[] = {
226 {GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT},
227 };
228
229 for (auto format_type : format_types) {
230 uint8_t pixels[1 * 4] = {0u, 255u, 0u, 255u};
Zhenyao Mo 2017/02/13 18:36:18 This looks wrong to me as it doesn't fit the forma
qiankun 2017/02/14 08:08:17 Done.
231 glTexImage2D(GL_TEXTURE_2D, 0, format_type.internal_format, 1, 1, 0,
232 format_type.format, format_type.type, pixels);
233 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
234
235 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
236 textures_, 0);
237
238 // Only if the format is supported by FBO, supported by this extension.
239 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
240 continue;
241
242 glApplyScreenSpaceAntialiasingCHROMIUM();
243 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError())
244 << "internal_format: "
245 << gles2::GLES2Util::GetStringEnum(format_type.internal_format);
246 }
247 }
248
167 TEST_F(GLApplyScreenSpaceAntialiasingCHROMIUMTest, ImmutableTexture) { 249 TEST_F(GLApplyScreenSpaceAntialiasingCHROMIUMTest, ImmutableTexture) {
168 if (!available_) 250 if (!available_)
169 return; 251 return;
170 252
171 if (!GLTestHelper::HasExtension("GL_EXT_texture_storage")) { 253 if (!GLTestHelper::HasExtension("GL_EXT_texture_storage")) {
172 LOG(INFO) << "GL_EXT_texture_storage not supported. Skipping test..."; 254 LOG(INFO) << "GL_EXT_texture_storage not supported. Skipping test...";
173 return; 255 return;
174 } 256 }
175 GLenum internal_formats[] = {GL_RGB8_OES, GL_RGBA8_OES, GL_BGRA8_EXT}; 257 GLenum internal_formats[] = {GL_RGB8_OES, GL_RGBA8_OES, GL_BGRA8_EXT};
176 for (auto internal_format : internal_formats) { 258 for (auto internal_format : internal_formats) {
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 1, 1, 0, expected, nullptr)); 496 EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 1, 1, 0, expected, nullptr));
415 497
416 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); 498 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
417 499
418 gl2.MakeCurrent(); 500 gl2.MakeCurrent();
419 gl2.Destroy(); 501 gl2.Destroy();
420 gl_.MakeCurrent(); 502 gl_.MakeCurrent();
421 } 503 }
422 504
423 } // namespace gpu 505 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698