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

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

Issue 2125023002: Reland "webgl: use immutable texture for the default FBO." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: m_webGLVersion > WebGL1 (for future versions) Created 4 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
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 #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>
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 if (target == GL_TEXTURE_RECTANGLE_ARB) { 66 if (target == GL_TEXTURE_RECTANGLE_ARB) {
67 GLuint image_id = glCreateGpuMemoryBufferImageCHROMIUM( 67 GLuint image_id = glCreateGpuMemoryBufferImageCHROMIUM(
68 width, height, GL_RGBA, GL_READ_WRITE_CHROMIUM); 68 width, height, GL_RGBA, GL_READ_WRITE_CHROMIUM);
69 glBindTexImage2DCHROMIUM(target, image_id); 69 glBindTexImage2DCHROMIUM(target, image_id);
70 } else { 70 } else {
71 glTexImage2D(target, 0, GL_RGBA, width, height, 0, GL_RGBA, 71 glTexImage2D(target, 0, GL_RGBA, width, height, 0, GL_RGBA,
72 GL_UNSIGNED_BYTE, nullptr); 72 GL_UNSIGNED_BYTE, nullptr);
73 } 73 }
74 } 74 }
75 75
76 GLenum ExtractFormatFrom(GLenum internalformat) {
77 switch (internalformat) {
78 case GL_RGBA8_OES:
79 return GL_RGBA;
80 case GL_RGB8_OES:
81 return GL_RGB;
82 case GL_BGRA8_EXT:
83 return GL_BGRA_EXT;
84 default:
85 NOTREACHED();
86 return GL_NONE;
87 }
88 }
89
76 GLManager gl_; 90 GLManager gl_;
77 GLuint textures_[2]; 91 GLuint textures_[2];
78 GLuint framebuffer_id_; 92 GLuint framebuffer_id_;
79 }; 93 };
80 94
81 INSTANTIATE_TEST_CASE_P(CopyType, 95 INSTANTIATE_TEST_CASE_P(CopyType,
82 GLCopyTextureCHROMIUMTest, 96 GLCopyTextureCHROMIUMTest,
83 ::testing::ValuesIn(kCopyTypes)); 97 ::testing::ValuesIn(kCopyTypes));
84 98
85 // Test to ensure that the basic functionality of the extension works. 99 // Test to ensure that the basic functionality of the extension works.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 GLTestHelper::CheckPixels(0, 0, 1, 1, 0, pixels); 131 GLTestHelper::CheckPixels(0, 0, 1, 1, 0, pixels);
118 EXPECT_TRUE(GL_NO_ERROR == glGetError()); 132 EXPECT_TRUE(GL_NO_ERROR == glGetError());
119 } 133 }
120 134
121 TEST_P(GLCopyTextureCHROMIUMTest, ImmutableTexture) { 135 TEST_P(GLCopyTextureCHROMIUMTest, ImmutableTexture) {
122 if (!GLTestHelper::HasExtension("GL_EXT_texture_storage")) { 136 if (!GLTestHelper::HasExtension("GL_EXT_texture_storage")) {
123 LOG(INFO) << "GL_EXT_texture_storage not supported. Skipping test..."; 137 LOG(INFO) << "GL_EXT_texture_storage not supported. Skipping test...";
124 return; 138 return;
125 } 139 }
126 CopyType copy_type = GetParam(); 140 CopyType copy_type = GetParam();
141 GLenum src_internal_formats[] = {GL_RGB8_OES, GL_RGBA8_OES, GL_BGRA8_EXT};
142 GLenum dest_internal_formats[] = {GL_RGB8_OES, GL_RGBA8_OES, GL_BGRA8_EXT};
127 143
128 uint8_t pixels[1 * 4] = {255u, 0u, 0u, 255u}; 144 uint8_t pixels[1 * 4] = {255u, 0u, 255u, 255u};
129 145
130 glBindTexture(GL_TEXTURE_2D, textures_[0]); 146 for (auto src_internal_format : src_internal_formats) {
131 glTexStorage2DEXT(GL_TEXTURE_2D, 1, GL_RGBA8_OES, 1, 1); 147 for (auto dest_internal_format : dest_internal_formats) {
132 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, 148 glDeleteTextures(2, textures_);
133 pixels); 149 glDeleteFramebuffers(1, &framebuffer_id_);
150 CreateAndBindDestinationTextureAndFBO(GL_TEXTURE_2D);
134 151
135 glBindTexture(GL_TEXTURE_2D, textures_[1]); 152 glBindTexture(GL_TEXTURE_2D, textures_[0]);
136 glTexStorage2DEXT(GL_TEXTURE_2D, 1, GL_RGBA8_OES, 1, 1); 153 glTexStorage2DEXT(GL_TEXTURE_2D, 1, src_internal_format, 1, 1);
137 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 154 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1,
138 textures_[1], 0); 155 ExtractFormatFrom(src_internal_format), GL_UNSIGNED_BYTE,
139 EXPECT_TRUE(glGetError() == GL_NO_ERROR); 156 pixels);
140 157
141 if (copy_type == TexImage) { 158 glBindTexture(GL_TEXTURE_2D, textures_[1]);
142 glCopyTextureCHROMIUM(textures_[0], textures_[1], GL_RGBA, 159 glTexStorage2DEXT(GL_TEXTURE_2D, 1, dest_internal_format, 1, 1);
143 GL_UNSIGNED_BYTE, false, false, false); 160 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
144 EXPECT_TRUE(glGetError() == GL_INVALID_OPERATION); 161 GL_TEXTURE_2D, textures_[1], 0);
145 } else { 162 EXPECT_TRUE(glGetError() == GL_NO_ERROR);
146 glCopySubTextureCHROMIUM(textures_[0], textures_[1], 0, 0, 0,
147 0, 1, 1, false, false, false);
148 EXPECT_TRUE(glGetError() == GL_NO_ERROR);
149 163
150 // Check the FB is still bound. 164 if (copy_type == TexImage) {
151 GLint value = 0; 165 glCopyTextureCHROMIUM(textures_[0], textures_[1],
152 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &value); 166 ExtractFormatFrom(dest_internal_format),
153 GLuint fb_id = value; 167 GL_UNSIGNED_BYTE, false, false, false);
154 EXPECT_EQ(framebuffer_id_, fb_id); 168 EXPECT_TRUE(glGetError() == GL_INVALID_OPERATION);
169 } else {
170 glCopySubTextureCHROMIUM(textures_[0], textures_[1], 0, 0, 0, 0, 1, 1,
171 false, false, false);
172 EXPECT_TRUE(glGetError() == GL_NO_ERROR);
155 173
156 // Check that FB is complete. 174 // Check the FB is still bound.
157 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), 175 GLint value = 0;
158 glCheckFramebufferStatus(GL_FRAMEBUFFER)); 176 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &value);
177 GLuint fb_id = value;
178 EXPECT_EQ(framebuffer_id_, fb_id);
159 179
160 GLTestHelper::CheckPixels(0, 0, 1, 1, 0, pixels); 180 // Check that FB is complete.
161 EXPECT_TRUE(GL_NO_ERROR == glGetError()); 181 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
182 glCheckFramebufferStatus(GL_FRAMEBUFFER));
183
184 GLTestHelper::CheckPixels(0, 0, 1, 1, 0, pixels);
185 EXPECT_TRUE(GL_NO_ERROR == glGetError());
186 }
187 }
162 } 188 }
163 } 189 }
164 190
165 TEST_P(GLCopyTextureCHROMIUMTest, InternalFormat) { 191 TEST_P(GLCopyTextureCHROMIUMTest, InternalFormat) {
166 CopyType copy_type = GetParam(); 192 CopyType copy_type = GetParam();
167 GLint src_formats[] = {GL_ALPHA, GL_RGB, GL_RGBA, 193 GLint src_formats[] = {GL_ALPHA, GL_RGB, GL_RGBA,
168 GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_BGRA_EXT}; 194 GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_BGRA_EXT};
169 GLint dest_formats[] = {GL_RGB, GL_RGBA, GL_BGRA_EXT}; 195 GLint dest_formats[] = {GL_RGB, GL_RGBA, GL_BGRA_EXT};
170 196
171 for (size_t src_index = 0; src_index < arraysize(src_formats); src_index++) { 197 for (size_t src_index = 0; src_index < arraysize(src_formats); src_index++) {
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 expected_color = y < copy_region_y + 1 ? blue : white; 894 expected_color = y < copy_region_y + 1 ? blue : white;
869 } 895 }
870 GLTestHelper::CheckPixels(x, y, 1, 1, 0, expected_color); 896 GLTestHelper::CheckPixels(x, y, 1, 1, 0, expected_color);
871 } 897 }
872 } 898 }
873 } 899 }
874 } 900 }
875 } 901 }
876 902
877 } // namespace gpu 903 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | third_party/WebKit/Source/modules/webgl/WebGL2RenderingContext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698