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

Side by Side Diff: ui/gl/gl_image_memory.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
« no previous file with comments | « ui/gl/gl_image_memory.h ('k') | ui/gl/gl_image_ozone_native_pixmap.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/gl/gl_image_memory.h" 5 #include "ui/gl/gl_image_memory.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/trace_event/trace_event.h" 8 #include "base/trace_event/trace_event.h"
9 #include "ui/gl/gl_bindings.h" 9 #include "ui/gl/gl_bindings.h"
10 #include "ui/gl/scoped_binders.h" 10 #include "ui/gl/scoped_binders.h"
(...skipping 15 matching lines...) Expand all
26 case GL_ETC1_RGB8_OES: 26 case GL_ETC1_RGB8_OES:
27 case GL_R8: 27 case GL_R8:
28 case GL_RGBA: 28 case GL_RGBA:
29 case GL_BGRA_EXT: 29 case GL_BGRA_EXT:
30 return true; 30 return true;
31 default: 31 default:
32 return false; 32 return false;
33 } 33 }
34 } 34 }
35 35
36 bool ValidFormat(GpuMemoryBuffer::Format format) { 36 bool ValidFormat(BufferFormat format) {
37 switch (format) { 37 switch (format) {
38 case GpuMemoryBuffer::ATC: 38 case BufferFormat::ATC:
39 case GpuMemoryBuffer::ATCIA: 39 case BufferFormat::ATCIA:
40 case GpuMemoryBuffer::DXT1: 40 case BufferFormat::DXT1:
41 case GpuMemoryBuffer::DXT5: 41 case BufferFormat::DXT5:
42 case GpuMemoryBuffer::ETC1: 42 case BufferFormat::ETC1:
43 case GpuMemoryBuffer::R_8: 43 case BufferFormat::R_8:
44 case GpuMemoryBuffer::RGBA_4444: 44 case BufferFormat::RGBA_4444:
45 case GpuMemoryBuffer::RGBA_8888: 45 case BufferFormat::RGBA_8888:
46 case GpuMemoryBuffer::BGRA_8888: 46 case BufferFormat::BGRA_8888:
47 return true; 47 return true;
48 case GpuMemoryBuffer::RGBX_8888: 48 case BufferFormat::RGBX_8888:
49 case GpuMemoryBuffer::YUV_420: 49 case BufferFormat::YUV_420:
50 return false; 50 return false;
51 } 51 }
52 52
53 NOTREACHED(); 53 NOTREACHED();
54 return false; 54 return false;
55 } 55 }
56 56
57 bool IsCompressedFormat(GpuMemoryBuffer::Format format) { 57 bool IsCompressedFormat(BufferFormat format) {
58 switch (format) { 58 switch (format) {
59 case GpuMemoryBuffer::ATC: 59 case BufferFormat::ATC:
60 case GpuMemoryBuffer::ATCIA: 60 case BufferFormat::ATCIA:
61 case GpuMemoryBuffer::DXT1: 61 case BufferFormat::DXT1:
62 case GpuMemoryBuffer::DXT5: 62 case BufferFormat::DXT5:
63 case GpuMemoryBuffer::ETC1: 63 case BufferFormat::ETC1:
64 case GpuMemoryBuffer::YUV_420: 64 case BufferFormat::YUV_420:
65 return true; 65 return true;
66 case GpuMemoryBuffer::R_8: 66 case BufferFormat::R_8:
67 case GpuMemoryBuffer::RGBA_4444: 67 case BufferFormat::RGBA_4444:
68 case GpuMemoryBuffer::RGBA_8888: 68 case BufferFormat::RGBA_8888:
69 case GpuMemoryBuffer::BGRA_8888: 69 case BufferFormat::BGRA_8888:
70 case GpuMemoryBuffer::RGBX_8888: 70 case BufferFormat::RGBX_8888:
71 return false; 71 return false;
72 } 72 }
73 73
74 NOTREACHED(); 74 NOTREACHED();
75 return false; 75 return false;
76 } 76 }
77 77
78 GLenum TextureFormat(GpuMemoryBuffer::Format format) { 78 GLenum TextureFormat(BufferFormat format) {
79 switch (format) { 79 switch (format) {
80 case GpuMemoryBuffer::ATC: 80 case BufferFormat::ATC:
81 return GL_ATC_RGB_AMD; 81 return GL_ATC_RGB_AMD;
82 case GpuMemoryBuffer::ATCIA: 82 case BufferFormat::ATCIA:
83 return GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD; 83 return GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD;
84 case GpuMemoryBuffer::DXT1: 84 case BufferFormat::DXT1:
85 return GL_COMPRESSED_RGB_S3TC_DXT1_EXT; 85 return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
86 case GpuMemoryBuffer::DXT5: 86 case BufferFormat::DXT5:
87 return GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; 87 return GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
88 case GpuMemoryBuffer::ETC1: 88 case BufferFormat::ETC1:
89 return GL_ETC1_RGB8_OES; 89 return GL_ETC1_RGB8_OES;
90 case GpuMemoryBuffer::R_8: 90 case BufferFormat::R_8:
91 return GL_RED; 91 return GL_RED;
92 case GpuMemoryBuffer::RGBA_4444: 92 case BufferFormat::RGBA_4444:
93 case GpuMemoryBuffer::RGBA_8888: 93 case BufferFormat::RGBA_8888:
94 return GL_RGBA; 94 return GL_RGBA;
95 case GpuMemoryBuffer::BGRA_8888: 95 case BufferFormat::BGRA_8888:
96 return GL_BGRA_EXT; 96 return GL_BGRA_EXT;
97 case GpuMemoryBuffer::RGBX_8888: 97 case BufferFormat::RGBX_8888:
98 case GpuMemoryBuffer::YUV_420: 98 case BufferFormat::YUV_420:
99 NOTREACHED(); 99 NOTREACHED();
100 return 0; 100 return 0;
101 } 101 }
102 102
103 NOTREACHED(); 103 NOTREACHED();
104 return 0; 104 return 0;
105 } 105 }
106 106
107 GLenum DataFormat(GpuMemoryBuffer::Format format) { 107 GLenum DataFormat(BufferFormat format) {
108 return TextureFormat(format); 108 return TextureFormat(format);
109 } 109 }
110 110
111 GLenum DataType(GpuMemoryBuffer::Format format) { 111 GLenum DataType(BufferFormat format) {
112 switch (format) { 112 switch (format) {
113 case GpuMemoryBuffer::RGBA_4444: 113 case BufferFormat::RGBA_4444:
114 return GL_UNSIGNED_SHORT_4_4_4_4; 114 return GL_UNSIGNED_SHORT_4_4_4_4;
115 case GpuMemoryBuffer::RGBA_8888: 115 case BufferFormat::RGBA_8888:
116 case GpuMemoryBuffer::BGRA_8888: 116 case BufferFormat::BGRA_8888:
117 case GpuMemoryBuffer::R_8: 117 case BufferFormat::R_8:
118 return GL_UNSIGNED_BYTE; 118 return GL_UNSIGNED_BYTE;
119 case GpuMemoryBuffer::ATC: 119 case BufferFormat::ATC:
120 case GpuMemoryBuffer::ATCIA: 120 case BufferFormat::ATCIA:
121 case GpuMemoryBuffer::DXT1: 121 case BufferFormat::DXT1:
122 case GpuMemoryBuffer::DXT5: 122 case BufferFormat::DXT5:
123 case GpuMemoryBuffer::ETC1: 123 case BufferFormat::ETC1:
124 case GpuMemoryBuffer::RGBX_8888: 124 case BufferFormat::RGBX_8888:
125 case GpuMemoryBuffer::YUV_420: 125 case BufferFormat::YUV_420:
126 NOTREACHED(); 126 NOTREACHED();
127 return 0; 127 return 0;
128 } 128 }
129 129
130 NOTREACHED(); 130 NOTREACHED();
131 return 0; 131 return 0;
132 } 132 }
133 133
134 GLsizei SizeInBytes(const Size& size, 134 GLsizei SizeInBytes(const Size& size, BufferFormat format) {
135 GpuMemoryBuffer::Format format) {
136 size_t stride_in_bytes = 0; 135 size_t stride_in_bytes = 0;
137 bool valid_stride = GLImageMemory::StrideInBytes( 136 bool valid_stride = GLImageMemory::StrideInBytes(
138 size.width(), format, &stride_in_bytes); 137 size.width(), format, &stride_in_bytes);
139 DCHECK(valid_stride); 138 DCHECK(valid_stride);
140 return static_cast<GLsizei>(stride_in_bytes * size.height()); 139 return static_cast<GLsizei>(stride_in_bytes * size.height());
141 } 140 }
142 141
143 } // namespace 142 } // namespace
144 143
145 GLImageMemory::GLImageMemory(const Size& size, unsigned internalformat) 144 GLImageMemory::GLImageMemory(const Size& size, unsigned internalformat)
146 : size_(size), 145 : size_(size),
147 internalformat_(internalformat), 146 internalformat_(internalformat),
148 memory_(NULL), 147 memory_(NULL),
149 format_(GpuMemoryBuffer::RGBA_8888), 148 format_(BufferFormat::RGBA_8888),
150 in_use_(false), 149 in_use_(false),
151 target_(0), 150 target_(0),
152 need_do_bind_tex_image_(false) 151 need_do_bind_tex_image_(false)
153 #if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \ 152 #if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \
154 defined(USE_OZONE) 153 defined(USE_OZONE)
155 , 154 ,
156 egl_texture_id_(0u), 155 egl_texture_id_(0u),
157 egl_image_(EGL_NO_IMAGE_KHR) 156 egl_image_(EGL_NO_IMAGE_KHR)
158 #endif 157 #endif
159 { 158 {
160 } 159 }
161 160
162 GLImageMemory::~GLImageMemory() { 161 GLImageMemory::~GLImageMemory() {
163 #if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \ 162 #if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \
164 defined(USE_OZONE) 163 defined(USE_OZONE)
165 DCHECK_EQ(EGL_NO_IMAGE_KHR, egl_image_); 164 DCHECK_EQ(EGL_NO_IMAGE_KHR, egl_image_);
166 DCHECK_EQ(0u, egl_texture_id_); 165 DCHECK_EQ(0u, egl_texture_id_);
167 #endif 166 #endif
168 } 167 }
169 168
170 // static 169 // static
171 bool GLImageMemory::StrideInBytes(size_t width, 170 bool GLImageMemory::StrideInBytes(size_t width,
172 GpuMemoryBuffer::Format format, 171 BufferFormat format,
173 size_t* stride_in_bytes) { 172 size_t* stride_in_bytes) {
174 base::CheckedNumeric<size_t> checked_stride = width; 173 base::CheckedNumeric<size_t> checked_stride = width;
175 switch (format) { 174 switch (format) {
176 case GpuMemoryBuffer::ATCIA: 175 case BufferFormat::ATCIA:
177 case GpuMemoryBuffer::DXT5: 176 case BufferFormat::DXT5:
178 *stride_in_bytes = width; 177 *stride_in_bytes = width;
179 return true; 178 return true;
180 case GpuMemoryBuffer::ATC: 179 case BufferFormat::ATC:
181 case GpuMemoryBuffer::DXT1: 180 case BufferFormat::DXT1:
182 case GpuMemoryBuffer::ETC1: 181 case BufferFormat::ETC1:
183 DCHECK_EQ(width % 2, 0u); 182 DCHECK_EQ(width % 2, 0u);
184 *stride_in_bytes = width / 2; 183 *stride_in_bytes = width / 2;
185 return true; 184 return true;
186 case GpuMemoryBuffer::R_8: 185 case BufferFormat::R_8:
187 checked_stride += 3; 186 checked_stride += 3;
188 if (!checked_stride.IsValid()) 187 if (!checked_stride.IsValid())
189 return false; 188 return false;
190 *stride_in_bytes = checked_stride.ValueOrDie() & ~0x3; 189 *stride_in_bytes = checked_stride.ValueOrDie() & ~0x3;
191 return true; 190 return true;
192 case GpuMemoryBuffer::RGBA_4444: 191 case BufferFormat::RGBA_4444:
193 checked_stride *= 2; 192 checked_stride *= 2;
194 if (!checked_stride.IsValid()) 193 if (!checked_stride.IsValid())
195 return false; 194 return false;
196 *stride_in_bytes = checked_stride.ValueOrDie(); 195 *stride_in_bytes = checked_stride.ValueOrDie();
197 return true; 196 return true;
198 case GpuMemoryBuffer::RGBA_8888: 197 case BufferFormat::RGBA_8888:
199 case GpuMemoryBuffer::BGRA_8888: 198 case BufferFormat::BGRA_8888:
200 checked_stride *= 4; 199 checked_stride *= 4;
201 if (!checked_stride.IsValid()) 200 if (!checked_stride.IsValid())
202 return false; 201 return false;
203 *stride_in_bytes = checked_stride.ValueOrDie(); 202 *stride_in_bytes = checked_stride.ValueOrDie();
204 return true; 203 return true;
205 case GpuMemoryBuffer::RGBX_8888: 204 case BufferFormat::RGBX_8888:
206 case GpuMemoryBuffer::YUV_420: 205 case BufferFormat::YUV_420:
207 NOTREACHED(); 206 NOTREACHED();
208 return false; 207 return false;
209 } 208 }
210 209
211 NOTREACHED(); 210 NOTREACHED();
212 return false; 211 return false;
213 } 212 }
214 213
215 bool GLImageMemory::Initialize(const unsigned char* memory, 214 bool GLImageMemory::Initialize(const unsigned char* memory,
216 GpuMemoryBuffer::Format format) { 215 BufferFormat format) {
217 if (!ValidInternalFormat(internalformat_)) { 216 if (!ValidInternalFormat(internalformat_)) {
218 LOG(ERROR) << "Invalid internalformat: " << internalformat_; 217 LOG(ERROR) << "Invalid internalformat: " << internalformat_;
219 return false; 218 return false;
220 } 219 }
221 220
222 if (!ValidFormat(format)) { 221 if (!ValidFormat(format)) {
223 LOG(ERROR) << "Invalid format: " << format; 222 LOG(ERROR) << "Invalid format: " << static_cast<int>(format);
224 return false; 223 return false;
225 } 224 }
226 225
227 DCHECK(memory); 226 DCHECK(memory);
228 DCHECK(!memory_); 227 DCHECK(!memory_);
229 DCHECK_IMPLIES(IsCompressedFormat(format), size_.width() % 4 == 0); 228 DCHECK_IMPLIES(IsCompressedFormat(format), size_.width() % 4 == 0);
230 DCHECK_IMPLIES(IsCompressedFormat(format), size_.height() % 4 == 0); 229 DCHECK_IMPLIES(IsCompressedFormat(format), size_.height() % 4 == 0);
231 memory_ = memory; 230 memory_ = memory;
232 format_ = format; 231 format_ = format;
233 return true; 232 return true;
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 size_.width(), 432 size_.width(),
434 size_.height(), 433 size_.height(),
435 0, // border 434 0, // border
436 DataFormat(format_), 435 DataFormat(format_),
437 DataType(format_), 436 DataType(format_),
438 memory_); 437 memory_);
439 } 438 }
440 } 439 }
441 440
442 } // namespace gfx 441 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gl/gl_image_memory.h ('k') | ui/gl/gl_image_ozone_native_pixmap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698