OLD | NEW |
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 #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" |
(...skipping 8032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8043 // Set a mock Async delegate | 8043 // Set a mock Async delegate |
8044 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = | 8044 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = |
8045 new StrictMock<gpu::MockAsyncPixelTransferManager>; | 8045 new StrictMock<gpu::MockAsyncPixelTransferManager>; |
8046 manager->Initialize(group().texture_manager()); | 8046 manager->Initialize(group().texture_manager()); |
8047 decoder_->SetAsyncPixelTransferManagerForTest(manager); | 8047 decoder_->SetAsyncPixelTransferManagerForTest(manager); |
8048 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL; | 8048 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL; |
8049 | 8049 |
8050 // Tex(Sub)Image2D upload commands. | 8050 // Tex(Sub)Image2D upload commands. |
8051 AsyncTexImage2DCHROMIUM teximage_cmd; | 8051 AsyncTexImage2DCHROMIUM teximage_cmd; |
8052 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, | 8052 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, |
8053 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); | 8053 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, |
| 8054 0, 0, 0); |
8054 AsyncTexSubImage2DCHROMIUM texsubimage_cmd; | 8055 AsyncTexSubImage2DCHROMIUM texsubimage_cmd; |
8055 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA, | 8056 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA, |
8056 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); | 8057 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, |
| 8058 0, 0, 0); |
8057 WaitAsyncTexImage2DCHROMIUM wait_cmd; | 8059 WaitAsyncTexImage2DCHROMIUM wait_cmd; |
8058 wait_cmd.Init(GL_TEXTURE_2D); | 8060 wait_cmd.Init(GL_TEXTURE_2D); |
| 8061 WaitAllAsyncTexImage2DCHROMIUM wait_all_cmd; |
| 8062 wait_all_cmd.Init(); |
8059 | 8063 |
8060 // No transfer state exists initially. | 8064 // No transfer state exists initially. |
8061 EXPECT_FALSE( | 8065 EXPECT_FALSE( |
8062 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( | 8066 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
8063 texture_ref)); | 8067 texture_ref)); |
8064 | 8068 |
8065 base::Closure bind_callback; | 8069 base::Closure bind_callback; |
8066 | 8070 |
8067 // AsyncTexImage2D | 8071 // AsyncTexImage2D |
8068 { | 8072 { |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8209 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( | 8213 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
8210 texture_ref)); | 8214 texture_ref)); |
8211 | 8215 |
8212 EXPECT_TRUE(texture->IsImmutable()); | 8216 EXPECT_TRUE(texture->IsImmutable()); |
8213 // Wait for completion. | 8217 // Wait for completion. |
8214 EXPECT_CALL(*delegate, WaitForTransferCompletion()); | 8218 EXPECT_CALL(*delegate, WaitForTransferCompletion()); |
8215 EXPECT_CALL(*manager, BindCompletedAsyncTransfers()); | 8219 EXPECT_CALL(*manager, BindCompletedAsyncTransfers()); |
8216 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd)); | 8220 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd)); |
8217 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 8221 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
8218 } | 8222 } |
| 8223 |
| 8224 // WaitAllAsyncTexImage2D |
| 8225 EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation(); |
| 8226 DoDeleteTexture(client_texture_id_, kServiceTextureId); |
| 8227 EXPECT_FALSE( |
| 8228 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
| 8229 texture_ref)); |
| 8230 texture->SetImmutable(false); |
| 8231 delegate = NULL; |
| 8232 { |
| 8233 // Get a fresh texture since the existing texture cannot be respecified |
| 8234 // asynchronously and AsyncTexSubImage2D does not involved binding. |
| 8235 EXPECT_CALL(*gl_, GenTextures(1, _)) |
| 8236 .WillOnce(SetArgumentPointee<1>(kServiceTextureId)); |
| 8237 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
| 8238 texture_ref = GetTexture(client_texture_id_); |
| 8239 texture = texture_ref->texture(); |
| 8240 texture->SetImmutable(false); |
| 8241 // Create transfer state since it doesn't exist. |
| 8242 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) |
| 8243 .WillOnce(Return( |
| 8244 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) |
| 8245 .RetiresOnSaturation(); |
| 8246 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)) |
| 8247 .RetiresOnSaturation(); |
| 8248 // Start async transfer. |
| 8249 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); |
| 8250 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 8251 EXPECT_EQ( |
| 8252 delegate, |
| 8253 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
| 8254 texture_ref)); |
| 8255 |
| 8256 EXPECT_TRUE(texture->IsImmutable()); |
| 8257 // Wait for completion of all uploads. |
| 8258 EXPECT_CALL(*manager, WaitAllAsyncTexImage2D()).RetiresOnSaturation(); |
| 8259 EXPECT_CALL(*manager, BindCompletedAsyncTransfers()); |
| 8260 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_all_cmd)); |
| 8261 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 8262 } |
8219 } | 8263 } |
8220 | 8264 |
8221 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) { | 8265 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) { |
8222 InitDecoder( | 8266 InitDecoder( |
8223 "GL_CHROMIUM_async_pixel_transfers", // extensions | 8267 "GL_CHROMIUM_async_pixel_transfers", // extensions |
8224 "3.0", // gl version | 8268 "3.0", // gl version |
8225 false, false, false, // has alpha/depth/stencil | 8269 false, false, false, // has alpha/depth/stencil |
8226 false, false, false, // request alpha/depth/stencil | 8270 false, false, false, // request alpha/depth/stencil |
8227 true); // bind generates resource | 8271 true); // bind generates resource |
8228 | 8272 |
8229 // Set up the texture. | 8273 // Set up the texture. |
8230 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 8274 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
8231 TextureRef* texture_ref = GetTexture(client_texture_id_); | 8275 TextureRef* texture_ref = GetTexture(client_texture_id_); |
8232 | 8276 |
8233 // Set a mock Async delegate. | 8277 // Set a mock Async delegate. |
8234 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = | 8278 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = |
8235 new StrictMock<gpu::MockAsyncPixelTransferManager>; | 8279 new StrictMock<gpu::MockAsyncPixelTransferManager>; |
8236 manager->Initialize(group().texture_manager()); | 8280 manager->Initialize(group().texture_manager()); |
8237 decoder_->SetAsyncPixelTransferManagerForTest(manager); | 8281 decoder_->SetAsyncPixelTransferManagerForTest(manager); |
8238 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL; | 8282 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL; |
8239 | 8283 |
8240 AsyncTexImage2DCHROMIUM teximage_cmd; | 8284 AsyncTexImage2DCHROMIUM teximage_cmd; |
8241 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, | 8285 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, |
8242 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); | 8286 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, |
| 8287 0, 0, 0); |
8243 | 8288 |
8244 // No transfer delegate exists initially. | 8289 // No transfer delegate exists initially. |
8245 EXPECT_FALSE( | 8290 EXPECT_FALSE( |
8246 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( | 8291 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
8247 texture_ref)); | 8292 texture_ref)); |
8248 | 8293 |
8249 // Create delegate on AsyncTexImage2D. | 8294 // Create delegate on AsyncTexImage2D. |
8250 { | 8295 { |
8251 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) | 8296 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) |
8252 .WillOnce(Return( | 8297 .WillOnce(Return( |
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8878 // TODO(gman): TexImage2DImmediate | 8923 // TODO(gman): TexImage2DImmediate |
8879 | 8924 |
8880 // TODO(gman): TexSubImage2DImmediate | 8925 // TODO(gman): TexSubImage2DImmediate |
8881 | 8926 |
8882 // TODO(gman): UseProgram | 8927 // TODO(gman): UseProgram |
8883 | 8928 |
8884 // TODO(gman): SwapBuffers | 8929 // TODO(gman): SwapBuffers |
8885 | 8930 |
8886 } // namespace gles2 | 8931 } // namespace gles2 |
8887 } // namespace gpu | 8932 } // namespace gpu |
OLD | NEW |