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

Side by Side Diff: components/view_manager/gles2/mojo_gpu_memory_buffer.cc

Issue 1269503007: Unify graphics buffer format & usage enums for GpuMemoryBuffer & SurfaceFactoryOzone (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add header to BUILD.gn Created 5 years, 4 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/view_manager/gles2/mojo_gpu_memory_buffer.h" 5 #include "components/view_manager/gles2/mojo_gpu_memory_buffer.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/shared_memory.h" 8 #include "base/memory/shared_memory.h"
9 #include "base/numerics/safe_conversions.h" 9 #include "base/numerics/safe_conversions.h"
10 10
11 namespace gles2 { 11 namespace gles2 {
12 12
13 namespace { 13 namespace {
14 14
15 int NumberOfPlanesForGpuMemoryBufferFormat( 15 int NumberOfPlanesForGpuMemoryBufferFormat(gfx::BufferFormat format) {
16 gfx::GpuMemoryBuffer::Format format) {
17 switch (format) { 16 switch (format) {
18 case gfx::GpuMemoryBuffer::ATC: 17 case gfx::BufferFormat::ATC:
19 case gfx::GpuMemoryBuffer::ATCIA: 18 case gfx::BufferFormat::ATCIA:
20 case gfx::GpuMemoryBuffer::DXT1: 19 case gfx::BufferFormat::DXT1:
21 case gfx::GpuMemoryBuffer::DXT5: 20 case gfx::BufferFormat::DXT5:
22 case gfx::GpuMemoryBuffer::ETC1: 21 case gfx::BufferFormat::ETC1:
23 case gfx::GpuMemoryBuffer::R_8: 22 case gfx::BufferFormat::R_8:
24 case gfx::GpuMemoryBuffer::RGBA_4444: 23 case gfx::BufferFormat::RGBA_4444:
25 case gfx::GpuMemoryBuffer::RGBA_8888: 24 case gfx::BufferFormat::RGBA_8888:
26 case gfx::GpuMemoryBuffer::RGBX_8888: 25 case gfx::BufferFormat::RGBX_8888:
27 case gfx::GpuMemoryBuffer::BGRA_8888: 26 case gfx::BufferFormat::BGRA_8888:
28 return 1; 27 return 1;
29 case gfx::GpuMemoryBuffer::YUV_420: 28 case gfx::BufferFormat::YUV_420:
30 return 3; 29 return 3;
31 } 30 }
32 NOTREACHED(); 31 NOTREACHED();
33 return 0; 32 return 0;
34 } 33 }
35 34
36 size_t SubsamplingFactor(gfx::GpuMemoryBuffer::Format format, int plane) { 35 size_t SubsamplingFactor(gfx::BufferFormat format, int plane) {
37 switch (format) { 36 switch (format) {
38 case gfx::GpuMemoryBuffer::ATC: 37 case gfx::BufferFormat::ATC:
39 case gfx::GpuMemoryBuffer::ATCIA: 38 case gfx::BufferFormat::ATCIA:
40 case gfx::GpuMemoryBuffer::DXT1: 39 case gfx::BufferFormat::DXT1:
41 case gfx::GpuMemoryBuffer::DXT5: 40 case gfx::BufferFormat::DXT5:
42 case gfx::GpuMemoryBuffer::ETC1: 41 case gfx::BufferFormat::ETC1:
43 case gfx::GpuMemoryBuffer::R_8: 42 case gfx::BufferFormat::R_8:
44 case gfx::GpuMemoryBuffer::RGBA_4444: 43 case gfx::BufferFormat::RGBA_4444:
45 case gfx::GpuMemoryBuffer::RGBA_8888: 44 case gfx::BufferFormat::RGBA_8888:
46 case gfx::GpuMemoryBuffer::RGBX_8888: 45 case gfx::BufferFormat::RGBX_8888:
47 case gfx::GpuMemoryBuffer::BGRA_8888: 46 case gfx::BufferFormat::BGRA_8888:
48 return 1; 47 return 1;
49 case gfx::GpuMemoryBuffer::YUV_420: { 48 case gfx::BufferFormat::YUV_420: {
50 static size_t factor[] = {1, 2, 2}; 49 static size_t factor[] = {1, 2, 2};
51 DCHECK_LT(static_cast<size_t>(plane), arraysize(factor)); 50 DCHECK_LT(static_cast<size_t>(plane), arraysize(factor));
52 return factor[plane]; 51 return factor[plane];
53 } 52 }
54 } 53 }
55 NOTREACHED(); 54 NOTREACHED();
56 return 0; 55 return 0;
57 } 56 }
58 57
59 size_t StrideInBytes(size_t width, 58 size_t StrideInBytes(size_t width, gfx::BufferFormat format, int plane) {
60 gfx::GpuMemoryBuffer::Format format,
61 int plane) {
62 switch (format) { 59 switch (format) {
63 case gfx::GpuMemoryBuffer::ATCIA: 60 case gfx::BufferFormat::ATCIA:
64 case gfx::GpuMemoryBuffer::DXT5: 61 case gfx::BufferFormat::DXT5:
65 DCHECK_EQ(plane, 0); 62 DCHECK_EQ(plane, 0);
66 return width; 63 return width;
67 case gfx::GpuMemoryBuffer::ATC: 64 case gfx::BufferFormat::ATC:
68 case gfx::GpuMemoryBuffer::DXT1: 65 case gfx::BufferFormat::DXT1:
69 case gfx::GpuMemoryBuffer::ETC1: 66 case gfx::BufferFormat::ETC1:
70 DCHECK_EQ(plane, 0); 67 DCHECK_EQ(plane, 0);
71 DCHECK_EQ(width % 2, 0u); 68 DCHECK_EQ(width % 2, 0u);
72 return width / 2; 69 return width / 2;
73 case gfx::GpuMemoryBuffer::R_8: 70 case gfx::BufferFormat::R_8:
74 return (width + 3) & ~0x3; 71 return (width + 3) & ~0x3;
75 case gfx::GpuMemoryBuffer::RGBA_4444: 72 case gfx::BufferFormat::RGBA_4444:
76 DCHECK_EQ(plane, 0); 73 DCHECK_EQ(plane, 0);
77 return width * 2; 74 return width * 2;
78 case gfx::GpuMemoryBuffer::RGBA_8888: 75 case gfx::BufferFormat::RGBA_8888:
79 case gfx::GpuMemoryBuffer::RGBX_8888: 76 case gfx::BufferFormat::RGBX_8888:
80 case gfx::GpuMemoryBuffer::BGRA_8888: 77 case gfx::BufferFormat::BGRA_8888:
81 DCHECK_EQ(plane, 0); 78 DCHECK_EQ(plane, 0);
82 return width * 4; 79 return width * 4;
83 case gfx::GpuMemoryBuffer::YUV_420: 80 case gfx::BufferFormat::YUV_420:
84 return width / SubsamplingFactor(format, plane); 81 return width / SubsamplingFactor(format, plane);
85 } 82 }
86 NOTREACHED(); 83 NOTREACHED();
87 return 0; 84 return 0;
88 } 85 }
89 86
90 size_t BufferSizeInBytes(const gfx::Size& size, 87 size_t BufferSizeInBytes(const gfx::Size& size, gfx::BufferFormat format) {
91 gfx::GpuMemoryBuffer::Format format) {
92 size_t size_in_bytes = 0; 88 size_t size_in_bytes = 0;
93 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format); 89 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format);
94 for (int i = 0; i < num_planes; ++i) { 90 for (int i = 0; i < num_planes; ++i) {
95 size_in_bytes += StrideInBytes(size.width(), format, i) * 91 size_in_bytes += StrideInBytes(size.width(), format, i) *
96 (size.height() / SubsamplingFactor(format, i)); 92 (size.height() / SubsamplingFactor(format, i));
97 } 93 }
98 return size_in_bytes; 94 return size_in_bytes;
99 } 95 }
100 96
101 } // namespace 97 } // namespace
102 98
103 MojoGpuMemoryBufferImpl::MojoGpuMemoryBufferImpl( 99 MojoGpuMemoryBufferImpl::MojoGpuMemoryBufferImpl(
104 const gfx::Size& size, 100 const gfx::Size& size,
105 Format format, 101 gfx::BufferFormat format,
106 scoped_ptr<base::SharedMemory> shared_memory) 102 scoped_ptr<base::SharedMemory> shared_memory)
107 : size_(size), 103 : size_(size),
108 format_(format), 104 format_(format),
109 shared_memory_(shared_memory.Pass()), 105 shared_memory_(shared_memory.Pass()),
110 mapped_(false) { 106 mapped_(false) {}
111 }
112 107
113 MojoGpuMemoryBufferImpl::~MojoGpuMemoryBufferImpl() { 108 MojoGpuMemoryBufferImpl::~MojoGpuMemoryBufferImpl() {
114 } 109 }
115 110
116 scoped_ptr<gfx::GpuMemoryBuffer> MojoGpuMemoryBufferImpl::Create( 111 scoped_ptr<gfx::GpuMemoryBuffer> MojoGpuMemoryBufferImpl::Create(
117 const gfx::Size& size, 112 const gfx::Size& size,
118 Format format, 113 gfx::BufferFormat format,
119 Usage usage) { 114 gfx::BufferUsage usage) {
120 size_t bytes = BufferSizeInBytes(size, format); 115 size_t bytes = BufferSizeInBytes(size, format);
121 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory); 116 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory);
122 if (!shared_memory->CreateAnonymous(bytes)) 117 if (!shared_memory->CreateAnonymous(bytes))
123 return nullptr; 118 return nullptr;
124 return make_scoped_ptr<gfx::GpuMemoryBuffer>( 119 return make_scoped_ptr<gfx::GpuMemoryBuffer>(
125 new MojoGpuMemoryBufferImpl(size, format, shared_memory.Pass())); 120 new MojoGpuMemoryBufferImpl(size, format, shared_memory.Pass()));
126 } 121 }
127 122
128 MojoGpuMemoryBufferImpl* MojoGpuMemoryBufferImpl::FromClientBuffer( 123 MojoGpuMemoryBufferImpl* MojoGpuMemoryBufferImpl::FromClientBuffer(
129 ClientBuffer buffer) { 124 ClientBuffer buffer) {
(...skipping 18 matching lines...) Expand all
148 void MojoGpuMemoryBufferImpl::Unmap() { 143 void MojoGpuMemoryBufferImpl::Unmap() {
149 DCHECK(mapped_); 144 DCHECK(mapped_);
150 shared_memory_->Unmap(); 145 shared_memory_->Unmap();
151 mapped_ = false; 146 mapped_ = false;
152 } 147 }
153 148
154 bool MojoGpuMemoryBufferImpl::IsMapped() const { 149 bool MojoGpuMemoryBufferImpl::IsMapped() const {
155 return mapped_; 150 return mapped_;
156 } 151 }
157 152
158 gfx::GpuMemoryBuffer::Format MojoGpuMemoryBufferImpl::GetFormat() const { 153 gfx::BufferFormat MojoGpuMemoryBufferImpl::GetFormat() const {
159 return format_; 154 return format_;
160 } 155 }
161 156
162 void MojoGpuMemoryBufferImpl::GetStride(int* stride) const { 157 void MojoGpuMemoryBufferImpl::GetStride(int* stride) const {
163 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format_); 158 int num_planes = NumberOfPlanesForGpuMemoryBufferFormat(format_);
164 for (int i = 0; i < num_planes; ++i) 159 for (int i = 0; i < num_planes; ++i)
165 stride[i] = 160 stride[i] =
166 base::checked_cast<int>(StrideInBytes(size_.width(), format_, i)); 161 base::checked_cast<int>(StrideInBytes(size_.width(), format_, i));
167 } 162 }
168 163
169 gfx::GpuMemoryBufferId MojoGpuMemoryBufferImpl::GetId() const { 164 gfx::GpuMemoryBufferId MojoGpuMemoryBufferImpl::GetId() const {
170 return 0; 165 return 0;
171 } 166 }
172 167
173 gfx::GpuMemoryBufferHandle MojoGpuMemoryBufferImpl::GetHandle() const { 168 gfx::GpuMemoryBufferHandle MojoGpuMemoryBufferImpl::GetHandle() const {
174 gfx::GpuMemoryBufferHandle handle; 169 gfx::GpuMemoryBufferHandle handle;
175 handle.type = gfx::SHARED_MEMORY_BUFFER; 170 handle.type = gfx::SHARED_MEMORY_BUFFER;
176 handle.handle = shared_memory_->handle(); 171 handle.handle = shared_memory_->handle();
177 return handle; 172 return handle;
178 } 173 }
179 174
180 ClientBuffer MojoGpuMemoryBufferImpl::AsClientBuffer() { 175 ClientBuffer MojoGpuMemoryBufferImpl::AsClientBuffer() {
181 return reinterpret_cast<ClientBuffer>(this); 176 return reinterpret_cast<ClientBuffer>(this);
182 } 177 }
183 178
184 } // namespace gles2 179 } // namespace gles2
OLDNEW
« no previous file with comments | « components/view_manager/gles2/mojo_gpu_memory_buffer.h ('k') | components/view_manager/gles2/mojo_gpu_memory_buffer_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698