| 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 |