OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <GLES2/gl2.h> | 5 #include <GLES2/gl2.h> |
6 #include <GLES2/gl2ext.h> | 6 #include <GLES2/gl2ext.h> |
7 #include <GLES2/gl2extchromium.h> | 7 #include <GLES2/gl2extchromium.h> |
| 8 #include <stddef.h> |
| 9 #include <stdint.h> |
8 | 10 |
9 #include "gpu/command_buffer/client/gles2_lib.h" | 11 #include "gpu/command_buffer/client/gles2_lib.h" |
10 #include "gpu/command_buffer/common/mailbox.h" | 12 #include "gpu/command_buffer/common/mailbox.h" |
11 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 13 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
12 #include "gpu/command_buffer/service/mailbox_manager.h" | 14 #include "gpu/command_buffer/service/mailbox_manager.h" |
13 #include "gpu/command_buffer/tests/gl_manager.h" | 15 #include "gpu/command_buffer/tests/gl_manager.h" |
14 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
16 #include "ui/gl/gl_share_group.h" | 18 #include "ui/gl/gl_share_group.h" |
17 | 19 |
18 namespace gpu { | 20 namespace gpu { |
19 | 21 |
20 namespace { | 22 namespace { |
21 uint32 ReadTexel(GLuint id, GLint x, GLint y) { | 23 uint32_t ReadTexel(GLuint id, GLint x, GLint y) { |
22 GLint old_fbo = 0; | 24 GLint old_fbo = 0; |
23 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fbo); | 25 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fbo); |
24 | 26 |
25 GLuint fbo; | 27 GLuint fbo; |
26 glGenFramebuffers(1, &fbo); | 28 glGenFramebuffers(1, &fbo); |
27 glBindFramebuffer(GL_FRAMEBUFFER, fbo); | 29 glBindFramebuffer(GL_FRAMEBUFFER, fbo); |
28 glFramebufferTexture2D(GL_FRAMEBUFFER, | 30 glFramebufferTexture2D(GL_FRAMEBUFFER, |
29 GL_COLOR_ATTACHMENT0, | 31 GL_COLOR_ATTACHMENT0, |
30 GL_TEXTURE_2D, | 32 GL_TEXTURE_2D, |
31 id, | 33 id, |
32 0); | 34 0); |
33 // Some drivers (NVidia/SGX) require texture settings to be a certain way or | 35 // Some drivers (NVidia/SGX) require texture settings to be a certain way or |
34 // they won't report FRAMEBUFFER_COMPLETE. | 36 // they won't report FRAMEBUFFER_COMPLETE. |
35 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | 37 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
36 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | 38 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
37 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 39 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
38 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | 40 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
39 | 41 |
40 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), | 42 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
41 glCheckFramebufferStatus(GL_FRAMEBUFFER)); | 43 glCheckFramebufferStatus(GL_FRAMEBUFFER)); |
42 | 44 |
43 uint32 texel = 0; | 45 uint32_t texel = 0; |
44 glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &texel); | 46 glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &texel); |
45 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); | 47 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); |
46 | 48 |
47 glBindFramebuffer(GL_FRAMEBUFFER, old_fbo); | 49 glBindFramebuffer(GL_FRAMEBUFFER, old_fbo); |
48 | 50 |
49 glDeleteFramebuffers(1, &fbo); | 51 glDeleteFramebuffers(1, &fbo); |
50 | 52 |
51 return texel; | 53 return texel; |
52 } | 54 } |
53 } | 55 } |
(...skipping 22 matching lines...) Expand all Loading... |
76 GLbyte mailbox1[GL_MAILBOX_SIZE_CHROMIUM]; | 78 GLbyte mailbox1[GL_MAILBOX_SIZE_CHROMIUM]; |
77 glGenMailboxCHROMIUM(mailbox1); | 79 glGenMailboxCHROMIUM(mailbox1); |
78 | 80 |
79 GLbyte mailbox2[GL_MAILBOX_SIZE_CHROMIUM]; | 81 GLbyte mailbox2[GL_MAILBOX_SIZE_CHROMIUM]; |
80 glGenMailboxCHROMIUM(mailbox2); | 82 glGenMailboxCHROMIUM(mailbox2); |
81 | 83 |
82 GLuint tex1; | 84 GLuint tex1; |
83 glGenTextures(1, &tex1); | 85 glGenTextures(1, &tex1); |
84 | 86 |
85 glBindTexture(GL_TEXTURE_2D, tex1); | 87 glBindTexture(GL_TEXTURE_2D, tex1); |
86 uint32 source_pixel = 0xFF0000FF; | 88 uint32_t source_pixel = 0xFF0000FF; |
87 glTexImage2D(GL_TEXTURE_2D, | 89 glTexImage2D(GL_TEXTURE_2D, |
88 0, | 90 0, |
89 GL_RGBA, | 91 GL_RGBA, |
90 1, 1, | 92 1, 1, |
91 0, | 93 0, |
92 GL_RGBA, | 94 GL_RGBA, |
93 GL_UNSIGNED_BYTE, | 95 GL_UNSIGNED_BYTE, |
94 &source_pixel); | 96 &source_pixel); |
95 | 97 |
96 glProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox1); | 98 glProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox1); |
(...skipping 23 matching lines...) Expand all Loading... |
120 GLbyte mailbox1[GL_MAILBOX_SIZE_CHROMIUM]; | 122 GLbyte mailbox1[GL_MAILBOX_SIZE_CHROMIUM]; |
121 glGenMailboxCHROMIUM(mailbox1); | 123 glGenMailboxCHROMIUM(mailbox1); |
122 | 124 |
123 GLbyte mailbox2[GL_MAILBOX_SIZE_CHROMIUM]; | 125 GLbyte mailbox2[GL_MAILBOX_SIZE_CHROMIUM]; |
124 glGenMailboxCHROMIUM(mailbox2); | 126 glGenMailboxCHROMIUM(mailbox2); |
125 | 127 |
126 GLuint tex1; | 128 GLuint tex1; |
127 glGenTextures(1, &tex1); | 129 glGenTextures(1, &tex1); |
128 | 130 |
129 glBindTexture(GL_TEXTURE_2D, tex1); | 131 glBindTexture(GL_TEXTURE_2D, tex1); |
130 uint32 source_pixel = 0xFF000000; | 132 uint32_t source_pixel = 0xFF000000; |
131 glTexImage2D(GL_TEXTURE_2D, | 133 glTexImage2D(GL_TEXTURE_2D, |
132 0, | 134 0, |
133 GL_RGB, | 135 GL_RGB, |
134 1, 1, | 136 1, 1, |
135 0, | 137 0, |
136 GL_RGB, | 138 GL_RGB, |
137 GL_UNSIGNED_BYTE, | 139 GL_UNSIGNED_BYTE, |
138 &source_pixel); | 140 &source_pixel); |
139 | 141 |
140 glProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox1); | 142 glProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox1); |
(...skipping 23 matching lines...) Expand all Loading... |
164 GLbyte mailbox1[GL_MAILBOX_SIZE_CHROMIUM]; | 166 GLbyte mailbox1[GL_MAILBOX_SIZE_CHROMIUM]; |
165 glGenMailboxCHROMIUM(mailbox1); | 167 glGenMailboxCHROMIUM(mailbox1); |
166 | 168 |
167 GLbyte mailbox2[GL_MAILBOX_SIZE_CHROMIUM]; | 169 GLbyte mailbox2[GL_MAILBOX_SIZE_CHROMIUM]; |
168 glGenMailboxCHROMIUM(mailbox2); | 170 glGenMailboxCHROMIUM(mailbox2); |
169 | 171 |
170 GLuint tex1; | 172 GLuint tex1; |
171 glGenTextures(1, &tex1); | 173 glGenTextures(1, &tex1); |
172 | 174 |
173 glBindTexture(GL_TEXTURE_2D, tex1); | 175 glBindTexture(GL_TEXTURE_2D, tex1); |
174 uint32 source_pixel = 0xFF0000FF; | 176 uint32_t source_pixel = 0xFF0000FF; |
175 glTexImage2D(GL_TEXTURE_2D, | 177 glTexImage2D(GL_TEXTURE_2D, |
176 0, | 178 0, |
177 GL_RGBA, | 179 GL_RGBA, |
178 1, 1, | 180 1, 1, |
179 0, | 181 0, |
180 GL_RGBA, | 182 GL_RGBA, |
181 GL_UNSIGNED_BYTE, | 183 GL_UNSIGNED_BYTE, |
182 &source_pixel); | 184 &source_pixel); |
183 | 185 |
184 glProduceTextureDirectCHROMIUM(tex1, GL_TEXTURE_2D, mailbox1); | 186 glProduceTextureDirectCHROMIUM(tex1, GL_TEXTURE_2D, mailbox1); |
(...skipping 12 matching lines...) Expand all Loading... |
197 GLuint tex3 = glCreateAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox2); | 199 GLuint tex3 = glCreateAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox2); |
198 glBindTexture(GL_TEXTURE_2D, tex3); | 200 glBindTexture(GL_TEXTURE_2D, tex3); |
199 EXPECT_EQ(source_pixel, ReadTexel(tex3, 0, 0)); | 201 EXPECT_EQ(source_pixel, ReadTexel(tex3, 0, 0)); |
200 } | 202 } |
201 | 203 |
202 TEST_F(GLTextureMailboxTest, ConsumeTextureValidatesKey) { | 204 TEST_F(GLTextureMailboxTest, ConsumeTextureValidatesKey) { |
203 GLuint tex; | 205 GLuint tex; |
204 glGenTextures(1, &tex); | 206 glGenTextures(1, &tex); |
205 | 207 |
206 glBindTexture(GL_TEXTURE_2D, tex); | 208 glBindTexture(GL_TEXTURE_2D, tex); |
207 uint32 source_pixel = 0xFF0000FF; | 209 uint32_t source_pixel = 0xFF0000FF; |
208 glTexImage2D(GL_TEXTURE_2D, | 210 glTexImage2D(GL_TEXTURE_2D, |
209 0, | 211 0, |
210 GL_RGBA, | 212 GL_RGBA, |
211 1, 1, | 213 1, 1, |
212 0, | 214 0, |
213 GL_RGBA, | 215 GL_RGBA, |
214 GL_UNSIGNED_BYTE, | 216 GL_UNSIGNED_BYTE, |
215 &source_pixel); | 217 &source_pixel); |
216 | 218 |
217 GLbyte invalid_mailbox[GL_MAILBOX_SIZE_CHROMIUM]; | 219 GLbyte invalid_mailbox[GL_MAILBOX_SIZE_CHROMIUM]; |
218 glGenMailboxCHROMIUM(invalid_mailbox); | 220 glGenMailboxCHROMIUM(invalid_mailbox); |
219 | 221 |
220 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); | 222 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); |
221 glConsumeTextureCHROMIUM(GL_TEXTURE_2D, invalid_mailbox); | 223 glConsumeTextureCHROMIUM(GL_TEXTURE_2D, invalid_mailbox); |
222 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); | 224 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_OPERATION), glGetError()); |
223 | 225 |
224 // Ensure level 0 is still intact after glConsumeTextureCHROMIUM fails. | 226 // Ensure level 0 is still intact after glConsumeTextureCHROMIUM fails. |
225 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); | 227 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); |
226 EXPECT_EQ(source_pixel, ReadTexel(tex, 0, 0)); | 228 EXPECT_EQ(source_pixel, ReadTexel(tex, 0, 0)); |
227 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); | 229 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); |
228 } | 230 } |
229 | 231 |
230 TEST_F(GLTextureMailboxTest, SharedTextures) { | 232 TEST_F(GLTextureMailboxTest, SharedTextures) { |
231 gl1_.MakeCurrent(); | 233 gl1_.MakeCurrent(); |
232 GLuint tex1; | 234 GLuint tex1; |
233 glGenTextures(1, &tex1); | 235 glGenTextures(1, &tex1); |
234 | 236 |
235 glBindTexture(GL_TEXTURE_2D, tex1); | 237 glBindTexture(GL_TEXTURE_2D, tex1); |
236 uint32 source_pixel = 0xFF0000FF; | 238 uint32_t source_pixel = 0xFF0000FF; |
237 glTexImage2D(GL_TEXTURE_2D, | 239 glTexImage2D(GL_TEXTURE_2D, |
238 0, | 240 0, |
239 GL_RGBA, | 241 GL_RGBA, |
240 1, 1, | 242 1, 1, |
241 0, | 243 0, |
242 GL_RGBA, | 244 GL_RGBA, |
243 GL_UNSIGNED_BYTE, | 245 GL_UNSIGNED_BYTE, |
244 &source_pixel); | 246 &source_pixel); |
245 GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM]; | 247 GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM]; |
246 glGenMailboxCHROMIUM(mailbox); | 248 glGenMailboxCHROMIUM(mailbox); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 TEST_F(GLTextureMailboxTest, ProduceTextureDirectInvalidTarget) { | 379 TEST_F(GLTextureMailboxTest, ProduceTextureDirectInvalidTarget) { |
378 gl1_.MakeCurrent(); | 380 gl1_.MakeCurrent(); |
379 | 381 |
380 GLbyte mailbox1[GL_MAILBOX_SIZE_CHROMIUM]; | 382 GLbyte mailbox1[GL_MAILBOX_SIZE_CHROMIUM]; |
381 glGenMailboxCHROMIUM(mailbox1); | 383 glGenMailboxCHROMIUM(mailbox1); |
382 | 384 |
383 GLuint tex1; | 385 GLuint tex1; |
384 glGenTextures(1, &tex1); | 386 glGenTextures(1, &tex1); |
385 | 387 |
386 glBindTexture(GL_TEXTURE_CUBE_MAP, tex1); | 388 glBindTexture(GL_TEXTURE_CUBE_MAP, tex1); |
387 uint32 source_pixel = 0xFF0000FF; | 389 uint32_t source_pixel = 0xFF0000FF; |
388 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, | 390 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
389 0, | 391 0, |
390 GL_RGBA, | 392 GL_RGBA, |
391 1, 1, | 393 1, 1, |
392 0, | 394 0, |
393 GL_RGBA, | 395 GL_RGBA, |
394 GL_UNSIGNED_BYTE, | 396 GL_UNSIGNED_BYTE, |
395 &source_pixel); | 397 &source_pixel); |
396 | 398 |
397 glProduceTextureDirectCHROMIUM(tex1, GL_TEXTURE_2D, mailbox1); | 399 glProduceTextureDirectCHROMIUM(tex1, GL_TEXTURE_2D, mailbox1); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 other_gl[i].Destroy(); | 447 other_gl[i].Destroy(); |
446 } | 448 } |
447 | 449 |
448 gl1_.MakeCurrent(); | 450 gl1_.MakeCurrent(); |
449 glDeleteTextures(2, tex); | 451 glDeleteTextures(2, tex); |
450 } | 452 } |
451 #endif | 453 #endif |
452 | 454 |
453 } // namespace gpu | 455 } // namespace gpu |
454 | 456 |
OLD | NEW |