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

Side by Side Diff: ui/gfx/buffer_format_util.cc

Issue 2920793005: gpu: support R16 GPUMemoryBuffer (Closed)
Patch Set: Add bug number to TODO. Created 3 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
« no previous file with comments | « gpu/ipc/host/gpu_memory_buffer_support.cc ('k') | ui/gfx/buffer_types.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "ui/gfx/buffer_format_util.h" 5 #include "ui/gfx/buffer_format_util.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/numerics/safe_math.h" 9 #include "base/numerics/safe_math.h"
10 10
11 namespace gfx { 11 namespace gfx {
12 namespace { 12 namespace {
13 13
14 const BufferFormat kBufferFormats[] = { 14 const BufferFormat kBufferFormats[] = {BufferFormat::ATC,
15 BufferFormat::ATC, BufferFormat::ATCIA, 15 BufferFormat::ATCIA,
16 BufferFormat::DXT1, BufferFormat::DXT5, 16 BufferFormat::DXT1,
17 BufferFormat::ETC1, BufferFormat::R_8, 17 BufferFormat::DXT5,
18 BufferFormat::RG_88, BufferFormat::BGR_565, 18 BufferFormat::ETC1,
19 BufferFormat::RGBA_4444, BufferFormat::RGBX_8888, 19 BufferFormat::R_8,
20 BufferFormat::RGBA_8888, BufferFormat::BGRX_8888, 20 BufferFormat::R_16,
21 BufferFormat::BGRA_8888, BufferFormat::RGBA_F16, 21 BufferFormat::RG_88,
22 BufferFormat::UYVY_422, BufferFormat::YUV_420_BIPLANAR, 22 BufferFormat::BGR_565,
23 BufferFormat::YVU_420}; 23 BufferFormat::RGBA_4444,
24 BufferFormat::RGBX_8888,
25 BufferFormat::RGBA_8888,
26 BufferFormat::BGRX_8888,
27 BufferFormat::BGRA_8888,
28 BufferFormat::RGBA_F16,
29 BufferFormat::UYVY_422,
30 BufferFormat::YUV_420_BIPLANAR,
31 BufferFormat::YVU_420};
24 32
25 static_assert(arraysize(kBufferFormats) == 33 static_assert(arraysize(kBufferFormats) ==
26 (static_cast<int>(BufferFormat::LAST) + 1), 34 (static_cast<int>(BufferFormat::LAST) + 1),
27 "BufferFormat::LAST must be last value of kBufferFormats"); 35 "BufferFormat::LAST must be last value of kBufferFormats");
28 36
29 37
30 bool RowSizeForBufferFormatChecked( 38 bool RowSizeForBufferFormatChecked(
31 size_t width, BufferFormat format, size_t plane, size_t* size_in_bytes) { 39 size_t width, BufferFormat format, size_t plane, size_t* size_in_bytes) {
32 base::CheckedNumeric<size_t> checked_size = width; 40 base::CheckedNumeric<size_t> checked_size = width;
33 switch (format) { 41 switch (format) {
34 case BufferFormat::ATCIA: 42 case BufferFormat::ATCIA:
35 case BufferFormat::DXT5: 43 case BufferFormat::DXT5:
36 DCHECK_EQ(0u, plane); 44 DCHECK_EQ(0u, plane);
37 *size_in_bytes = width; 45 *size_in_bytes = width;
38 return true; 46 return true;
39 case BufferFormat::ATC: 47 case BufferFormat::ATC:
40 case BufferFormat::DXT1: 48 case BufferFormat::DXT1:
41 case BufferFormat::ETC1: 49 case BufferFormat::ETC1:
42 DCHECK_EQ(0u, plane); 50 DCHECK_EQ(0u, plane);
43 DCHECK_EQ(0u, width % 2); 51 DCHECK_EQ(0u, width % 2);
44 *size_in_bytes = width / 2; 52 *size_in_bytes = width / 2;
45 return true; 53 return true;
46 case BufferFormat::R_8: 54 case BufferFormat::R_8:
47 checked_size += 3; 55 checked_size += 3;
48 if (!checked_size.IsValid()) 56 if (!checked_size.IsValid())
49 return false; 57 return false;
50 *size_in_bytes = (checked_size & ~0x3).ValueOrDie(); 58 *size_in_bytes = (checked_size & ~0x3).ValueOrDie();
51 return true; 59 return true;
60 case BufferFormat::R_16:
52 case BufferFormat::RG_88: 61 case BufferFormat::RG_88:
53 case BufferFormat::BGR_565: 62 case BufferFormat::BGR_565:
54 case BufferFormat::RGBA_4444: 63 case BufferFormat::RGBA_4444:
55 case BufferFormat::UYVY_422: 64 case BufferFormat::UYVY_422:
56 checked_size *= 2; 65 checked_size *= 2;
57 checked_size += 3; 66 checked_size += 3;
58 if (!checked_size.IsValid()) 67 if (!checked_size.IsValid())
59 return false; 68 return false;
60 *size_in_bytes = (checked_size & ~0x3).ValueOrDie(); 69 *size_in_bytes = (checked_size & ~0x3).ValueOrDie();
61 return true; 70 return true;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 } 104 }
96 105
97 size_t NumberOfPlanesForBufferFormat(BufferFormat format) { 106 size_t NumberOfPlanesForBufferFormat(BufferFormat format) {
98 switch (format) { 107 switch (format) {
99 case BufferFormat::ATC: 108 case BufferFormat::ATC:
100 case BufferFormat::ATCIA: 109 case BufferFormat::ATCIA:
101 case BufferFormat::DXT1: 110 case BufferFormat::DXT1:
102 case BufferFormat::DXT5: 111 case BufferFormat::DXT5:
103 case BufferFormat::ETC1: 112 case BufferFormat::ETC1:
104 case BufferFormat::R_8: 113 case BufferFormat::R_8:
114 case BufferFormat::R_16:
105 case BufferFormat::RG_88: 115 case BufferFormat::RG_88:
106 case BufferFormat::BGR_565: 116 case BufferFormat::BGR_565:
107 case BufferFormat::RGBA_4444: 117 case BufferFormat::RGBA_4444:
108 case BufferFormat::RGBX_8888: 118 case BufferFormat::RGBX_8888:
109 case BufferFormat::RGBA_8888: 119 case BufferFormat::RGBA_8888:
110 case BufferFormat::BGRX_8888: 120 case BufferFormat::BGRX_8888:
111 case BufferFormat::BGRA_8888: 121 case BufferFormat::BGRA_8888:
112 case BufferFormat::RGBA_F16: 122 case BufferFormat::RGBA_F16:
113 case BufferFormat::UYVY_422: 123 case BufferFormat::UYVY_422:
114 return 1; 124 return 1;
115 case BufferFormat::YUV_420_BIPLANAR: 125 case BufferFormat::YUV_420_BIPLANAR:
116 return 2; 126 return 2;
117 case BufferFormat::YVU_420: 127 case BufferFormat::YVU_420:
118 return 3; 128 return 3;
119 } 129 }
120 NOTREACHED(); 130 NOTREACHED();
121 return 0; 131 return 0;
122 } 132 }
123 133
124 size_t SubsamplingFactorForBufferFormat(BufferFormat format, size_t plane) { 134 size_t SubsamplingFactorForBufferFormat(BufferFormat format, size_t plane) {
125 switch (format) { 135 switch (format) {
126 case BufferFormat::ATC: 136 case BufferFormat::ATC:
127 case BufferFormat::ATCIA: 137 case BufferFormat::ATCIA:
128 case BufferFormat::DXT1: 138 case BufferFormat::DXT1:
129 case BufferFormat::DXT5: 139 case BufferFormat::DXT5:
130 case BufferFormat::ETC1: 140 case BufferFormat::ETC1:
131 case BufferFormat::R_8: 141 case BufferFormat::R_8:
142 case BufferFormat::R_16:
132 case BufferFormat::RG_88: 143 case BufferFormat::RG_88:
133 case BufferFormat::BGR_565: 144 case BufferFormat::BGR_565:
134 case BufferFormat::RGBA_4444: 145 case BufferFormat::RGBA_4444:
135 case BufferFormat::RGBX_8888: 146 case BufferFormat::RGBX_8888:
136 case BufferFormat::RGBA_8888: 147 case BufferFormat::RGBA_8888:
137 case BufferFormat::BGRX_8888: 148 case BufferFormat::BGRX_8888:
138 case BufferFormat::BGRA_8888: 149 case BufferFormat::BGRA_8888:
139 case BufferFormat::RGBA_F16: 150 case BufferFormat::RGBA_F16:
140 case BufferFormat::UYVY_422: 151 case BufferFormat::UYVY_422:
141 return 1; 152 return 1;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 BufferFormat format, 205 BufferFormat format,
195 size_t plane) { 206 size_t plane) {
196 DCHECK_LT(plane, gfx::NumberOfPlanesForBufferFormat(format)); 207 DCHECK_LT(plane, gfx::NumberOfPlanesForBufferFormat(format));
197 switch (format) { 208 switch (format) {
198 case BufferFormat::ATC: 209 case BufferFormat::ATC:
199 case BufferFormat::ATCIA: 210 case BufferFormat::ATCIA:
200 case BufferFormat::DXT1: 211 case BufferFormat::DXT1:
201 case BufferFormat::DXT5: 212 case BufferFormat::DXT5:
202 case BufferFormat::ETC1: 213 case BufferFormat::ETC1:
203 case BufferFormat::R_8: 214 case BufferFormat::R_8:
215 case BufferFormat::R_16:
204 case BufferFormat::RG_88: 216 case BufferFormat::RG_88:
205 case BufferFormat::BGR_565: 217 case BufferFormat::BGR_565:
206 case BufferFormat::RGBA_4444: 218 case BufferFormat::RGBA_4444:
207 case BufferFormat::RGBX_8888: 219 case BufferFormat::RGBX_8888:
208 case BufferFormat::RGBA_8888: 220 case BufferFormat::RGBA_8888:
209 case BufferFormat::BGRX_8888: 221 case BufferFormat::BGRX_8888:
210 case BufferFormat::BGRA_8888: 222 case BufferFormat::BGRA_8888:
211 case BufferFormat::RGBA_F16: 223 case BufferFormat::RGBA_F16:
212 case BufferFormat::UYVY_422: 224 case BufferFormat::UYVY_422:
213 return 0; 225 return 0;
214 case BufferFormat::YVU_420: { 226 case BufferFormat::YVU_420: {
215 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4, 5}; 227 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4, 5};
216 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes)); 228 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes));
217 return offset_in_2x2_sub_sampling_sizes[plane] * 229 return offset_in_2x2_sub_sampling_sizes[plane] *
218 (size.width() / 2 + size.height() / 2); 230 (size.width() / 2 + size.height() / 2);
219 } 231 }
220 case gfx::BufferFormat::YUV_420_BIPLANAR: { 232 case gfx::BufferFormat::YUV_420_BIPLANAR: {
221 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4}; 233 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4};
222 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes)); 234 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes));
223 return offset_in_2x2_sub_sampling_sizes[plane] * 235 return offset_in_2x2_sub_sampling_sizes[plane] *
224 (size.width() / 2 + size.height() / 2); 236 (size.width() / 2 + size.height() / 2);
225 } 237 }
226 } 238 }
227 NOTREACHED(); 239 NOTREACHED();
228 return 0; 240 return 0;
229 } 241 }
230 242
231 } // namespace gfx 243 } // namespace gfx
OLDNEW
« no previous file with comments | « gpu/ipc/host/gpu_memory_buffer_support.cc ('k') | ui/gfx/buffer_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698