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 "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
11 #include "gpu/command_buffer/common/id_allocator.h" | 11 #include "gpu/command_buffer/common/id_allocator.h" |
12 #include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h" | 12 #include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h" |
13 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h" | 13 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h" |
14 #include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h" | 14 #include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h" |
15 #include "gpu/command_buffer/service/cmd_buffer_engine.h" | 15 #include "gpu/command_buffer/service/cmd_buffer_engine.h" |
16 #include "gpu/command_buffer/service/context_group.h" | 16 #include "gpu/command_buffer/service/context_group.h" |
17 #include "gpu/command_buffer/service/context_state.h" | 17 #include "gpu/command_buffer/service/context_state.h" |
18 #include "gpu/command_buffer/service/gl_surface_mock.h" | 18 #include "gpu/command_buffer/service/gl_surface_mock.h" |
19 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h" | 19 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h" |
20 | 20 |
21 #include "gpu/command_buffer/service/gpu_switches.h" | 21 #include "gpu/command_buffer/service/gpu_switches.h" |
22 #include "gpu/command_buffer/service/image_manager.h" | 22 #include "gpu/command_buffer/service/image_manager.h" |
23 #include "gpu/command_buffer/service/mailbox_manager.h" | 23 #include "gpu/command_buffer/service/mailbox_manager.h" |
24 #include "gpu/command_buffer/service/mocks.h" | 24 #include "gpu/command_buffer/service/mocks.h" |
25 #include "gpu/command_buffer/service/program_manager.h" | 25 #include "gpu/command_buffer/service/program_manager.h" |
26 #include "gpu/command_buffer/service/test_helper.h" | 26 #include "gpu/command_buffer/service/test_helper.h" |
27 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
| 28 #include "ui/gl/gl_image_stub.h" |
28 #include "ui/gl/gl_implementation.h" | 29 #include "ui/gl/gl_implementation.h" |
29 #include "ui/gl/gl_mock.h" | 30 #include "ui/gl/gl_mock.h" |
30 #include "ui/gl/gl_surface_stub.h" | 31 #include "ui/gl/gl_surface_stub.h" |
31 | 32 |
32 #if !defined(GL_DEPTH24_STENCIL8) | 33 #if !defined(GL_DEPTH24_STENCIL8) |
33 #define GL_DEPTH24_STENCIL8 0x88F0 | 34 #define GL_DEPTH24_STENCIL8 0x88F0 |
34 #endif | 35 #endif |
35 | 36 |
36 using ::gfx::MockGLInterface; | 37 using ::gfx::MockGLInterface; |
37 using ::testing::_; | 38 using ::testing::_; |
(...skipping 2102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2140 TEST_P(GLES2DecoderTest, BindTexImage2DCHROMIUM) { | 2141 TEST_P(GLES2DecoderTest, BindTexImage2DCHROMIUM) { |
2141 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 2142 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
2142 DoTexImage2D( | 2143 DoTexImage2D( |
2143 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); | 2144 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); |
2144 TextureRef* texture_ref = | 2145 TextureRef* texture_ref = |
2145 group().texture_manager()->GetTexture(client_texture_id_); | 2146 group().texture_manager()->GetTexture(client_texture_id_); |
2146 ASSERT_TRUE(texture_ref != NULL); | 2147 ASSERT_TRUE(texture_ref != NULL); |
2147 Texture* texture = texture_ref->texture(); | 2148 Texture* texture = texture_ref->texture(); |
2148 EXPECT_EQ(kServiceTextureId, texture->service_id()); | 2149 EXPECT_EQ(kServiceTextureId, texture->service_id()); |
2149 | 2150 |
2150 group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1); | 2151 scoped_refptr<gfx::GLImage> image(new gfx::GLImageStub); |
2151 EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL); | 2152 GetImageManager()->AddImage(image.get(), 1); |
| 2153 EXPECT_FALSE(GetImageManager()->LookupImage(1) == NULL); |
2152 | 2154 |
2153 GLsizei width; | 2155 GLsizei width; |
2154 GLsizei height; | 2156 GLsizei height; |
2155 GLenum type; | 2157 GLenum type; |
2156 GLenum internal_format; | 2158 GLenum internal_format; |
2157 | 2159 |
2158 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); | 2160 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
2159 EXPECT_EQ(3, width); | 2161 EXPECT_EQ(3, width); |
2160 EXPECT_EQ(1, height); | 2162 EXPECT_EQ(1, height); |
2161 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); | 2163 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); |
(...skipping 16 matching lines...) Expand all Loading... |
2178 | 2180 |
2179 // Define new texture image. | 2181 // Define new texture image. |
2180 DoTexImage2D( | 2182 DoTexImage2D( |
2181 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); | 2183 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); |
2182 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); | 2184 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
2183 // Image should no longer be set. | 2185 // Image should no longer be set. |
2184 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); | 2186 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); |
2185 } | 2187 } |
2186 | 2188 |
2187 TEST_P(GLES2DecoderTest, BindTexImage2DCHROMIUMCubeMapNotAllowed) { | 2189 TEST_P(GLES2DecoderTest, BindTexImage2DCHROMIUMCubeMapNotAllowed) { |
2188 group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1); | 2190 scoped_refptr<gfx::GLImage> image(new gfx::GLImageStub); |
| 2191 GetImageManager()->AddImage(image.get(), 1); |
2189 DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId); | 2192 DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId); |
2190 | 2193 |
2191 BindTexImage2DCHROMIUM bind_tex_image_2d_cmd; | 2194 BindTexImage2DCHROMIUM bind_tex_image_2d_cmd; |
2192 bind_tex_image_2d_cmd.Init(GL_TEXTURE_CUBE_MAP, 1); | 2195 bind_tex_image_2d_cmd.Init(GL_TEXTURE_CUBE_MAP, 1); |
2193 EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd)); | 2196 EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd)); |
2194 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); | 2197 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); |
2195 } | 2198 } |
2196 | 2199 |
2197 TEST_P(GLES2DecoderTest, OrphanGLImageWithTexImage2D) { | 2200 TEST_P(GLES2DecoderTest, OrphanGLImageWithTexImage2D) { |
2198 group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1); | 2201 scoped_refptr<gfx::GLImage> image(new gfx::GLImageStub); |
| 2202 GetImageManager()->AddImage(image.get(), 1); |
2199 DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId); | 2203 DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId); |
2200 | 2204 |
2201 BindTexImage2DCHROMIUM bind_tex_image_2d_cmd; | 2205 BindTexImage2DCHROMIUM bind_tex_image_2d_cmd; |
2202 bind_tex_image_2d_cmd.Init(GL_TEXTURE_CUBE_MAP, 1); | 2206 bind_tex_image_2d_cmd.Init(GL_TEXTURE_CUBE_MAP, 1); |
2203 EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd)); | 2207 EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd)); |
2204 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); | 2208 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); |
2205 | 2209 |
2206 DoTexImage2D( | 2210 DoTexImage2D( |
2207 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); | 2211 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); |
2208 TextureRef* texture_ref = | 2212 TextureRef* texture_ref = |
2209 group().texture_manager()->GetTexture(client_texture_id_); | 2213 group().texture_manager()->GetTexture(client_texture_id_); |
2210 ASSERT_TRUE(texture_ref != NULL); | 2214 ASSERT_TRUE(texture_ref != NULL); |
2211 Texture* texture = texture_ref->texture(); | 2215 Texture* texture = texture_ref->texture(); |
2212 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); | 2216 EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL); |
2213 } | 2217 } |
2214 | 2218 |
2215 TEST_P(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) { | 2219 TEST_P(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) { |
2216 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 2220 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
2217 DoTexImage2D( | 2221 DoTexImage2D( |
2218 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); | 2222 GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0); |
2219 TextureRef* texture_ref = | 2223 TextureRef* texture_ref = |
2220 group().texture_manager()->GetTexture(client_texture_id_); | 2224 group().texture_manager()->GetTexture(client_texture_id_); |
2221 ASSERT_TRUE(texture_ref != NULL); | 2225 ASSERT_TRUE(texture_ref != NULL); |
2222 Texture* texture = texture_ref->texture(); | 2226 Texture* texture = texture_ref->texture(); |
2223 EXPECT_EQ(kServiceTextureId, texture->service_id()); | 2227 EXPECT_EQ(kServiceTextureId, texture->service_id()); |
2224 | 2228 |
2225 group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1); | 2229 scoped_refptr<gfx::GLImage> image(new gfx::GLImageStub); |
2226 EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL); | 2230 GetImageManager()->AddImage(image.get(), 1); |
| 2231 EXPECT_FALSE(GetImageManager()->LookupImage(1) == NULL); |
2227 | 2232 |
2228 GLsizei width; | 2233 GLsizei width; |
2229 GLsizei height; | 2234 GLsizei height; |
2230 GLenum type; | 2235 GLenum type; |
2231 GLenum internal_format; | 2236 GLenum internal_format; |
2232 | 2237 |
2233 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); | 2238 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height)); |
2234 EXPECT_EQ(3, width); | 2239 EXPECT_EQ(3, width); |
2235 EXPECT_EQ(1, height); | 2240 EXPECT_EQ(1, height); |
2236 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); | 2241 EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format)); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2297 kSharedMemoryOffset); | 2302 kSharedMemoryOffset); |
2298 | 2303 |
2299 TextureRef* texture_ref = | 2304 TextureRef* texture_ref = |
2300 group().texture_manager()->GetTexture(client_texture_id_); | 2305 group().texture_manager()->GetTexture(client_texture_id_); |
2301 ASSERT_TRUE(texture_ref != NULL); | 2306 ASSERT_TRUE(texture_ref != NULL); |
2302 Texture* texture = texture_ref->texture(); | 2307 Texture* texture = texture_ref->texture(); |
2303 EXPECT_EQ(kServiceTextureId, texture->service_id()); | 2308 EXPECT_EQ(kServiceTextureId, texture->service_id()); |
2304 | 2309 |
2305 const int32 kImageId = 1; | 2310 const int32 kImageId = 1; |
2306 scoped_refptr<MockGLImage> image(new MockGLImage); | 2311 scoped_refptr<MockGLImage> image(new MockGLImage); |
2307 group().image_manager()->AddImage(image.get(), kImageId); | 2312 GetImageManager()->AddImage(image.get(), kImageId); |
2308 | 2313 |
2309 // Bind image to texture. | 2314 // Bind image to texture. |
2310 EXPECT_CALL(*image, BindTexImage(GL_TEXTURE_2D)) | 2315 EXPECT_CALL(*image, BindTexImage(GL_TEXTURE_2D)) |
2311 .Times(1) | 2316 .Times(1) |
2312 .WillOnce(Return(true)) | 2317 .WillOnce(Return(true)) |
2313 .RetiresOnSaturation(); | 2318 .RetiresOnSaturation(); |
2314 EXPECT_CALL(*image, GetSize()) | 2319 EXPECT_CALL(*image, GetSize()) |
2315 .Times(1) | 2320 .Times(1) |
2316 .WillOnce(Return(gfx::Size(1, 1))) | 2321 .WillOnce(Return(gfx::Size(1, 1))) |
2317 .RetiresOnSaturation(); | 2322 .RetiresOnSaturation(); |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2822 // TODO(gman): CompressedTexSubImage2DImmediate | 2827 // TODO(gman): CompressedTexSubImage2DImmediate |
2823 | 2828 |
2824 // TODO(gman): TexImage2D | 2829 // TODO(gman): TexImage2D |
2825 | 2830 |
2826 // TODO(gman): TexImage2DImmediate | 2831 // TODO(gman): TexImage2DImmediate |
2827 | 2832 |
2828 // TODO(gman): TexSubImage2DImmediate | 2833 // TODO(gman): TexSubImage2DImmediate |
2829 | 2834 |
2830 } // namespace gles2 | 2835 } // namespace gles2 |
2831 } // namespace gpu | 2836 } // namespace gpu |
OLD | NEW |