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

Side by Side Diff: content/common/gpu/client/gpu_memory_buffer_impl_io_surface.cc

Issue 77023002: gpu: Add IOSurface backed GpuMemoryBuffer implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address review feedback Created 7 years 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
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/common/gpu/client/gpu_memory_buffer_impl_io_surface.h"
6
7 #include "base/logging.h"
8 #include "ui/gl/gl_bindings.h"
9 #include "ui/gl/io_surface_support_mac.h"
10
11 namespace content {
12
13 GpuMemoryBufferImplIOSurface::GpuMemoryBufferImplIOSurface(
14 gfx::Size size, unsigned internalformat)
15 : GpuMemoryBufferImpl(size, internalformat) {
16 }
17
18 GpuMemoryBufferImplIOSurface::~GpuMemoryBufferImplIOSurface() {
19 }
20
21 // static
22 bool GpuMemoryBufferImplIOSurface::IsFormatSupported(unsigned internalformat) {
23 switch (internalformat) {
24 case GL_BGRA8_EXT:
25 return true;
26 default:
27 return false;
28 }
29 }
30
31 // static
32 uint32 GpuMemoryBufferImplIOSurface::PixelFormat(unsigned internalformat) {
33 switch (internalformat) {
34 case GL_BGRA8_EXT:
35 return 'BGRA';
36 default:
37 NOTREACHED();
38 return 0;
39 }
40 }
41
42 bool GpuMemoryBufferImplIOSurface::Initialize(
43 gfx::GpuMemoryBufferHandle handle) {
44 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
Ken Russell (switch to Gerrit) 2013/12/03 22:36:13 Consider caching this object as a member.
reveman 2013/12/04 02:00:31 Done.
45 if (!io_surface_support) {
46 LOG(ERROR) << "IOSurfaces only supported on 10.6.";
Ken Russell (switch to Gerrit) 2013/12/03 22:36:13 Chrome doesn't run on 10.5 any more, so this log m
reveman 2013/12/04 02:00:31 Added CHECK to ctor.
47 return false;
48 }
49
50 io_surface_.reset(io_surface_support->IOSurfaceLookup(handle.io_surface_id));
51 if (!io_surface_) {
52 LOG(ERROR) << "IOSurface lookup failed";
53 return false;
54 }
55
56 return true;
57 }
58
59 void GpuMemoryBufferImplIOSurface::Map(AccessMode mode, void** vaddr) {
60 DCHECK(!mapped_);
61 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
62 io_surface_support->IOSurfaceLock(io_surface_, 0, NULL);
63 *vaddr = io_surface_support->IOSurfaceGetBaseAddress(io_surface_);
64 mapped_ = true;
65 }
66
67 void GpuMemoryBufferImplIOSurface::Unmap() {
68 DCHECK(mapped_);
69 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
70 io_surface_support->IOSurfaceUnlock(io_surface_, 0, NULL);
71 mapped_ = false;
72 }
73
74 uint32 GpuMemoryBufferImplIOSurface::GetStride() const {
75 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
76 return io_surface_support->IOSurfaceGetBytesPerRow(io_surface_);
77 }
78
79 gfx::GpuMemoryBufferHandle GpuMemoryBufferImplIOSurface::GetHandle() const {
80 gfx::GpuMemoryBufferHandle handle;
81 handle.type = gfx::IO_SURFACE_BUFFER;
82 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
83 handle.io_surface_id = io_surface_support->IOSurfaceGetID(io_surface_);
84 return handle;
85 }
86
87 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698