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

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

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