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/tests/gl_manager.h" | 5 #include "gpu/command_buffer/tests/gl_manager.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "gpu/command_buffer/client/gles2_implementation.h" | 11 #include "gpu/command_buffer/client/gles2_implementation.h" |
12 #include "gpu/command_buffer/client/gles2_lib.h" | 12 #include "gpu/command_buffer/client/gles2_lib.h" |
13 #include "gpu/command_buffer/client/transfer_buffer.h" | 13 #include "gpu/command_buffer/client/transfer_buffer.h" |
14 #include "gpu/command_buffer/common/constants.h" | 14 #include "gpu/command_buffer/common/constants.h" |
15 #include "gpu/command_buffer/service/command_buffer_service.h" | 15 #include "gpu/command_buffer/service/command_buffer_service.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/gl_context_virtual.h" |
17 #include "gpu/command_buffer/service/gpu_scheduler.h" | 18 #include "gpu/command_buffer/service/gpu_scheduler.h" |
18 #include "gpu/command_buffer/service/mailbox_manager.h" | 19 #include "gpu/command_buffer/service/mailbox_manager.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
20 #include "ui/gl/gl_context.h" | 21 #include "ui/gl/gl_context.h" |
21 #include "ui/gl/gl_share_group.h" | 22 #include "ui/gl/gl_share_group.h" |
22 #include "ui/gl/gl_surface.h" | 23 #include "ui/gl/gl_surface.h" |
23 | 24 |
24 namespace gpu { | 25 namespace gpu { |
25 | 26 |
26 GLManager::GLManager() { | 27 GLManager::GLManager() { |
27 } | 28 } |
28 | 29 |
29 GLManager::~GLManager() { | 30 GLManager::~GLManager() { |
30 } | 31 } |
31 | 32 |
32 void GLManager::Initialize(const gfx::Size& size) { | 33 void GLManager::Initialize(const gfx::Size& size) { |
33 Setup(size, NULL, NULL, NULL, NULL); | 34 Setup(size, NULL, NULL, NULL, NULL, NULL); |
34 } | 35 } |
35 | 36 |
36 void GLManager::InitializeShared( | 37 void GLManager::InitializeShared( |
37 const gfx::Size& size, GLManager* gl_manager) { | 38 const gfx::Size& size, GLManager* gl_manager) { |
38 DCHECK(gl_manager); | 39 DCHECK(gl_manager); |
39 Setup( | 40 Setup( |
40 size, | 41 size, |
41 gl_manager->mailbox_manager(), | 42 gl_manager->mailbox_manager(), |
42 gl_manager->share_group(), | 43 gl_manager->share_group(), |
43 gl_manager->decoder_->GetContextGroup(), | 44 gl_manager->decoder_->GetContextGroup(), |
44 gl_manager->gles2_implementation()->share_group()); | 45 gl_manager->gles2_implementation()->share_group(), |
| 46 NULL); |
45 } | 47 } |
46 | 48 |
47 void GLManager::InitializeSharedMailbox( | 49 void GLManager::InitializeSharedMailbox( |
48 const gfx::Size& size, GLManager* gl_manager) { | 50 const gfx::Size& size, GLManager* gl_manager) { |
49 DCHECK(gl_manager); | 51 DCHECK(gl_manager); |
50 Setup( | 52 Setup( |
51 size, | 53 size, |
52 gl_manager->mailbox_manager(), | 54 gl_manager->mailbox_manager(), |
53 gl_manager->share_group(), | 55 gl_manager->share_group(), |
54 NULL, | 56 NULL, |
| 57 NULL, |
55 NULL); | 58 NULL); |
56 } | 59 } |
57 | 60 |
| 61 void GLManager::InitializeVirtual( |
| 62 const gfx::Size& size, GLManager* real_gl_manager) { |
| 63 DCHECK(real_gl_manager); |
| 64 Setup( |
| 65 size, |
| 66 NULL, |
| 67 NULL, |
| 68 NULL, |
| 69 NULL, |
| 70 real_gl_manager->context()); |
| 71 } |
| 72 |
58 void GLManager::Setup( | 73 void GLManager::Setup( |
59 const gfx::Size& size, | 74 const gfx::Size& size, |
60 gles2::MailboxManager* mailbox_manager, | 75 gles2::MailboxManager* mailbox_manager, |
61 gfx::GLShareGroup* share_group, | 76 gfx::GLShareGroup* share_group, |
62 gles2::ContextGroup* context_group, | 77 gles2::ContextGroup* context_group, |
63 gles2::ShareGroup* client_share_group) { | 78 gles2::ShareGroup* client_share_group, |
| 79 gfx::GLContext* real_gl_context) { |
64 const int32 kCommandBufferSize = 1024 * 1024; | 80 const int32 kCommandBufferSize = 1024 * 1024; |
65 const size_t kStartTransferBufferSize = 4 * 1024 * 1024; | 81 const size_t kStartTransferBufferSize = 4 * 1024 * 1024; |
66 const size_t kMinTransferBufferSize = 1 * 256 * 1024; | 82 const size_t kMinTransferBufferSize = 1 * 256 * 1024; |
67 const size_t kMaxTransferBufferSize = 16 * 1024 * 1024; | 83 const size_t kMaxTransferBufferSize = 16 * 1024 * 1024; |
68 const bool kBindGeneratesResource = false; | 84 const bool kBindGeneratesResource = false; |
69 const bool kShareResources = true; | 85 const bool kShareResources = true; |
70 | 86 |
71 // From <EGL/egl.h>. | 87 // From <EGL/egl.h>. |
72 const int32 EGL_ALPHA_SIZE = 0x3021; | 88 const int32 EGL_ALPHA_SIZE = 0x3021; |
73 const int32 EGL_BLUE_SIZE = 0x3022; | 89 const int32 EGL_BLUE_SIZE = 0x3022; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 | 128 |
113 gpu_scheduler_.reset(new GpuScheduler(command_buffer_.get(), | 129 gpu_scheduler_.reset(new GpuScheduler(command_buffer_.get(), |
114 decoder_.get(), | 130 decoder_.get(), |
115 decoder_.get())); | 131 decoder_.get())); |
116 | 132 |
117 decoder_->set_engine(gpu_scheduler_.get()); | 133 decoder_->set_engine(gpu_scheduler_.get()); |
118 | 134 |
119 surface_ = gfx::GLSurface::CreateOffscreenGLSurface(false, size); | 135 surface_ = gfx::GLSurface::CreateOffscreenGLSurface(false, size); |
120 ASSERT_TRUE(surface_.get() != NULL) << "could not create offscreen surface"; | 136 ASSERT_TRUE(surface_.get() != NULL) << "could not create offscreen surface"; |
121 | 137 |
122 context_ = gfx::GLContext::CreateGLContext(share_group_.get(), | 138 if (real_gl_context) { |
123 surface_.get(), | 139 context_ = scoped_refptr<gfx::GLContext>(new gpu::GLContextVirtual( |
124 gpu_preference); | 140 share_group_.get(), real_gl_context, decoder_.get())); |
| 141 ASSERT_TRUE(context_->Initialize( |
| 142 surface_.get(), gfx::PreferIntegratedGpu)); |
| 143 } else { |
| 144 context_ = gfx::GLContext::CreateGLContext(share_group_.get(), |
| 145 surface_.get(), |
| 146 gpu_preference); |
| 147 } |
125 ASSERT_TRUE(context_.get() != NULL) << "could not create GL context"; | 148 ASSERT_TRUE(context_.get() != NULL) << "could not create GL context"; |
126 | 149 |
127 ASSERT_TRUE(context_->MakeCurrent(surface_.get())); | 150 ASSERT_TRUE(context_->MakeCurrent(surface_.get())); |
128 | 151 |
129 ASSERT_TRUE(decoder_->Initialize( | 152 ASSERT_TRUE(decoder_->Initialize( |
130 surface_.get(), | 153 surface_.get(), |
131 context_.get(), | 154 context_.get(), |
132 true, | 155 true, |
133 size, | 156 size, |
134 ::gpu::gles2::DisallowedFeatures(), | 157 ::gpu::gles2::DisallowedFeatures(), |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 ::gpu::CommandBuffer::State state = command_buffer_->GetState(); | 212 ::gpu::CommandBuffer::State state = command_buffer_->GetState(); |
190 ASSERT_EQ(::gpu::error::kNoError, state.error); | 213 ASSERT_EQ(::gpu::error::kNoError, state.error); |
191 } | 214 } |
192 | 215 |
193 bool GLManager::GetBufferChanged(int32 transfer_buffer_id) { | 216 bool GLManager::GetBufferChanged(int32 transfer_buffer_id) { |
194 return gpu_scheduler_->SetGetBuffer(transfer_buffer_id); | 217 return gpu_scheduler_->SetGetBuffer(transfer_buffer_id); |
195 } | 218 } |
196 | 219 |
197 } // namespace gpu | 220 } // namespace gpu |
198 | 221 |
OLD | NEW |