Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: gpu/command_buffer/tests/gl_manager.cc

Issue 331723003: gpu: Remove Create/DeleteImage IPC by adding an X11_PIXMAP_BUFFER GpuMemoryBuffer type. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: crown of aragorn Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <GLES2/gl2.h>
8 #include <GLES2/gl2ext.h>
9
7 #include <vector> 10 #include <vector>
8 11
9 #include "base/at_exit.h" 12 #include "base/at_exit.h"
10 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/memory/ref_counted_memory.h"
11 #include "gpu/command_buffer/client/gles2_implementation.h" 15 #include "gpu/command_buffer/client/gles2_implementation.h"
12 #include "gpu/command_buffer/client/gles2_lib.h" 16 #include "gpu/command_buffer/client/gles2_lib.h"
13 #include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
14 #include "gpu/command_buffer/client/transfer_buffer.h" 17 #include "gpu/command_buffer/client/transfer_buffer.h"
15 #include "gpu/command_buffer/common/constants.h" 18 #include "gpu/command_buffer/common/constants.h"
16 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 19 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
17 #include "gpu/command_buffer/service/command_buffer_service.h" 20 #include "gpu/command_buffer/service/command_buffer_service.h"
18 #include "gpu/command_buffer/service/context_group.h" 21 #include "gpu/command_buffer/service/context_group.h"
19 #include "gpu/command_buffer/service/gl_context_virtual.h" 22 #include "gpu/command_buffer/service/gl_context_virtual.h"
20 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 23 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
21 #include "gpu/command_buffer/service/gpu_control_service.h"
22 #include "gpu/command_buffer/service/gpu_scheduler.h" 24 #include "gpu/command_buffer/service/gpu_scheduler.h"
23 #include "gpu/command_buffer/service/image_manager.h" 25 #include "gpu/command_buffer/service/image_manager.h"
24 #include "gpu/command_buffer/service/mailbox_manager.h" 26 #include "gpu/command_buffer/service/mailbox_manager.h"
25 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
28 #include "ui/gfx/gpu_memory_buffer.h"
26 #include "ui/gl/gl_context.h" 29 #include "ui/gl/gl_context.h"
30 #include "ui/gl/gl_image_ref_counted_memory.h"
27 #include "ui/gl/gl_share_group.h" 31 #include "ui/gl/gl_share_group.h"
28 #include "ui/gl/gl_surface.h" 32 #include "ui/gl/gl_surface.h"
29 33
30 namespace gpu { 34 namespace gpu {
35 namespace {
36
37 int BytesPerPixel(unsigned internalformat) {
38 switch (internalformat) {
39 case GL_RGBA8_OES:
40 return 4;
41 default:
42 NOTREACHED();
43 return 0;
44 }
45 }
46
no sievers 2014/07/11 18:33:29 I've been wanting to use InProcessCommandBuffer fo
reveman 2014/07/11 21:08:06 Acknowledged.
47 class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
48 public:
49 GpuMemoryBufferImpl(base::RefCountedBytes* bytes,
50 const gfx::Size& size,
51 unsigned internalformat)
52 : bytes_(bytes),
53 size_(size),
54 internalformat_(internalformat),
55 mapped_(false) {}
56
57 // Overridden from gfx::GpuMemoryBuffer:
58 virtual void* Map() OVERRIDE {
59 mapped_ = true;
60 return &bytes_->data().front();
61 }
62 virtual void Unmap() OVERRIDE { mapped_ = false; }
63 virtual bool IsMapped() const OVERRIDE { return mapped_; }
64 virtual uint32 GetStride() const OVERRIDE {
65 return size_.width() * BytesPerPixel(internalformat_);
66 }
67 virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE {
68 NOTREACHED();
69 return gfx::GpuMemoryBufferHandle();
70 }
71
72 private:
73 scoped_refptr<base::RefCountedBytes> bytes_;
74 const gfx::Size size_;
75 unsigned internalformat_;
76 bool mapped_;
77 };
78
79 } // namespace
31 80
32 int GLManager::use_count_; 81 int GLManager::use_count_;
33 scoped_refptr<gfx::GLShareGroup>* GLManager::base_share_group_; 82 scoped_refptr<gfx::GLShareGroup>* GLManager::base_share_group_;
34 scoped_refptr<gfx::GLSurface>* GLManager::base_surface_; 83 scoped_refptr<gfx::GLSurface>* GLManager::base_surface_;
35 scoped_refptr<gfx::GLContext>* GLManager::base_context_; 84 scoped_refptr<gfx::GLContext>* GLManager::base_context_;
36 85
37 GLManager::Options::Options() 86 GLManager::Options::Options()
38 : size(4, 4), 87 : size(4, 4),
39 share_group_manager(NULL), 88 share_group_manager(NULL),
40 share_mailbox_manager(NULL), 89 share_mailbox_manager(NULL),
41 virtual_manager(NULL), 90 virtual_manager(NULL),
42 bind_generates_resource(false), 91 bind_generates_resource(false),
43 lose_context_when_out_of_memory(false), 92 lose_context_when_out_of_memory(false),
44 context_lost_allowed(false), 93 context_lost_allowed(false) {
45 image_manager(NULL) {} 94 }
46 95
47 GLManager::GLManager() 96 GLManager::GLManager() : context_lost_allowed_(false) {
48 : context_lost_allowed_(false), gpu_memory_buffer_factory_(NULL) {
49 SetupBaseContext(); 97 SetupBaseContext();
50 } 98 }
51 99
52 GLManager::~GLManager() { 100 GLManager::~GLManager() {
53 --use_count_; 101 --use_count_;
54 if (!use_count_) { 102 if (!use_count_) {
55 if (base_share_group_) { 103 if (base_share_group_) {
56 delete base_context_; 104 delete base_context_;
57 base_context_ = NULL; 105 base_context_ = NULL;
58 } 106 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 attrib_helper.red_size_ = 8; 161 attrib_helper.red_size_ = 8;
114 attrib_helper.green_size_ = 8; 162 attrib_helper.green_size_ = 8;
115 attrib_helper.blue_size_ = 8; 163 attrib_helper.blue_size_ = 8;
116 attrib_helper.alpha_size_ = 8; 164 attrib_helper.alpha_size_ = 8;
117 attrib_helper.depth_size_ = 16; 165 attrib_helper.depth_size_ = 16;
118 attrib_helper.Serialize(&attribs); 166 attrib_helper.Serialize(&attribs);
119 167
120 if (!context_group) { 168 if (!context_group) {
121 context_group = 169 context_group =
122 new gles2::ContextGroup(mailbox_manager_.get(), 170 new gles2::ContextGroup(mailbox_manager_.get(),
123 options.image_manager,
124 NULL, 171 NULL,
125 new gpu::gles2::ShaderTranslatorCache, 172 new gpu::gles2::ShaderTranslatorCache,
126 NULL, 173 NULL,
127 options.bind_generates_resource); 174 options.bind_generates_resource);
128 } 175 }
129 176
130 decoder_.reset(::gpu::gles2::GLES2Decoder::Create(context_group)); 177 decoder_.reset(::gpu::gles2::GLES2Decoder::Create(context_group));
131 178
132 command_buffer_.reset(new CommandBufferService( 179 command_buffer_.reset(new CommandBufferService(
133 decoder_->GetContextGroup()->transfer_buffer_manager())); 180 decoder_->GetContextGroup()->transfer_buffer_manager()));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 ASSERT_TRUE(context_->MakeCurrent(surface_.get())); 212 ASSERT_TRUE(context_->MakeCurrent(surface_.get()));
166 213
167 ASSERT_TRUE(decoder_->Initialize( 214 ASSERT_TRUE(decoder_->Initialize(
168 surface_.get(), 215 surface_.get(),
169 context_.get(), 216 context_.get(),
170 true, 217 true,
171 options.size, 218 options.size,
172 ::gpu::gles2::DisallowedFeatures(), 219 ::gpu::gles2::DisallowedFeatures(),
173 attribs)) << "could not initialize decoder"; 220 attribs)) << "could not initialize decoder";
174 221
175 gpu_control_service_.reset(
176 new GpuControlService(decoder_->GetContextGroup()->image_manager(),
177 decoder_->GetQueryManager()));
178 gpu_memory_buffer_factory_ = options.gpu_memory_buffer_factory;
179
180 command_buffer_->SetPutOffsetChangeCallback( 222 command_buffer_->SetPutOffsetChangeCallback(
181 base::Bind(&GLManager::PumpCommands, base::Unretained(this))); 223 base::Bind(&GLManager::PumpCommands, base::Unretained(this)));
182 command_buffer_->SetGetBufferChangeCallback( 224 command_buffer_->SetGetBufferChangeCallback(
183 base::Bind(&GLManager::GetBufferChanged, base::Unretained(this))); 225 base::Bind(&GLManager::GetBufferChanged, base::Unretained(this)));
184 226
185 // Create the GLES2 helper, which writes the command buffer protocol. 227 // Create the GLES2 helper, which writes the command buffer protocol.
186 gles2_helper_.reset(new gles2::GLES2CmdHelper(command_buffer_.get())); 228 gles2_helper_.reset(new gles2::GLES2CmdHelper(command_buffer_.get()));
187 ASSERT_TRUE(gles2_helper_->Initialize(kCommandBufferSize)); 229 ASSERT_TRUE(gles2_helper_->Initialize(kCommandBufferSize));
188 230
189 // Create a transfer buffer. 231 // Create a transfer buffer.
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 Capabilities GLManager::GetCapabilities() { 313 Capabilities GLManager::GetCapabilities() {
272 return decoder_->GetCapabilities(); 314 return decoder_->GetCapabilities();
273 } 315 }
274 316
275 gfx::GpuMemoryBuffer* GLManager::CreateGpuMemoryBuffer( 317 gfx::GpuMemoryBuffer* GLManager::CreateGpuMemoryBuffer(
276 size_t width, 318 size_t width,
277 size_t height, 319 size_t height,
278 unsigned internalformat, 320 unsigned internalformat,
279 unsigned usage, 321 unsigned usage,
280 int32* id) { 322 int32* id) {
323 gfx::Size size(width, height);
324
281 *id = -1; 325 *id = -1;
326
327 std::vector<unsigned char> data(
328 size.GetArea() * BytesPerPixel(internalformat), 0);
329 scoped_refptr<base::RefCountedBytes> bytes(new base::RefCountedBytes(data));
282 scoped_ptr<gfx::GpuMemoryBuffer> buffer( 330 scoped_ptr<gfx::GpuMemoryBuffer> buffer(
283 gpu_memory_buffer_factory_->CreateGpuMemoryBuffer( 331 new GpuMemoryBufferImpl(bytes.get(), size, internalformat));
284 width, height, internalformat, usage)); 332
285 if (!buffer.get()) 333 static int32 next_id = 1;
334 int32 new_id = next_id++;
335
336 scoped_refptr<gfx::GLImageRefCountedMemory> image(
337 new gfx::GLImageRefCountedMemory(size, internalformat));
338 if (!image->Initialize(bytes.get()))
286 return NULL; 339 return NULL;
287 340
288 static int32 next_id = 1; 341 decoder()->GetImageManager()->AddImage(image.get(), new_id);
289 *id = next_id++; 342
290 gpu_control_service_->RegisterGpuMemoryBuffer( 343 *id = new_id;
291 *id, buffer->GetHandle(), width, height, internalformat); 344 gpu_memory_buffers_.add(new_id, buffer.Pass());
292 gfx::GpuMemoryBuffer* raw_buffer = buffer.get(); 345 return gpu_memory_buffers_.get(new_id);
reveman 2014/07/11 21:08:06 Changed this to be consistent with CommandBufferPr
293 memory_buffers_.add(*id, buffer.Pass());
294 return raw_buffer;
295 } 346 }
296 347
297 void GLManager::DestroyGpuMemoryBuffer(int32 id) { 348 void GLManager::DestroyGpuMemoryBuffer(int32 id) {
298 memory_buffers_.erase(id); 349 decoder()->GetImageManager()->RemoveImage(id);
299 gpu_control_service_->UnregisterGpuMemoryBuffer(id); 350 gpu_memory_buffers_.erase(id);
300 } 351 }
301 352
302 uint32 GLManager::InsertSyncPoint() { 353 uint32 GLManager::InsertSyncPoint() {
303 NOTIMPLEMENTED(); 354 NOTIMPLEMENTED();
304 return 0u; 355 return 0u;
305 } 356 }
306 357
307 uint32 GLManager::InsertFutureSyncPoint() { 358 uint32 GLManager::InsertFutureSyncPoint() {
308 NOTIMPLEMENTED(); 359 NOTIMPLEMENTED();
309 return 0u; 360 return 0u;
(...skipping 19 matching lines...) Expand all
329 void GLManager::Echo(const base::Closure& callback) { 380 void GLManager::Echo(const base::Closure& callback) {
330 NOTIMPLEMENTED(); 381 NOTIMPLEMENTED();
331 } 382 }
332 383
333 uint32 GLManager::CreateStreamTexture(uint32 texture_id) { 384 uint32 GLManager::CreateStreamTexture(uint32 texture_id) {
334 NOTIMPLEMENTED(); 385 NOTIMPLEMENTED();
335 return 0; 386 return 0;
336 } 387 }
337 388
338 } // namespace gpu 389 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698