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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.cpp

Issue 2807923002: Replace ASSERT, ASSERT_NOT_REACHED, and RELEASE_ASSERT in platform/graphics (Closed)
Patch Set: fix typo Created 3 years, 8 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 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 "platform/graphics/gpu/WebGLImageConversion.h" 5 #include "platform/graphics/gpu/WebGLImageConversion.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include "platform/graphics/ImageObserver.h" 8 #include "platform/graphics/ImageObserver.h"
9 #include "platform/graphics/cpu/arm/WebGLImageConversionNEON.h" 9 #include "platform/graphics/cpu/arm/WebGLImageConversionNEON.h"
10 #include "platform/graphics/cpu/mips/WebGLImageConversionMSA.h" 10 #include "platform/graphics/cpu/mips/WebGLImageConversionMSA.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 break; 58 break;
59 case GL_RGB: 59 case GL_RGB:
60 case GL_RGB_INTEGER: 60 case GL_RGB_INTEGER:
61 dst_format = WebGLImageConversion::kDataFormatRGB8_S; 61 dst_format = WebGLImageConversion::kDataFormatRGB8_S;
62 break; 62 break;
63 case GL_RGBA: 63 case GL_RGBA:
64 case GL_RGBA_INTEGER: 64 case GL_RGBA_INTEGER:
65 dst_format = WebGLImageConversion::kDataFormatRGBA8_S; 65 dst_format = WebGLImageConversion::kDataFormatRGBA8_S;
66 break; 66 break;
67 default: 67 default:
68 ASSERT_NOT_REACHED(); 68 NOTREACHED();
69 } 69 }
70 break; 70 break;
71 case GL_UNSIGNED_BYTE: 71 case GL_UNSIGNED_BYTE:
72 switch (destination_format) { 72 switch (destination_format) {
73 case GL_RGB: 73 case GL_RGB:
74 case GL_RGB_INTEGER: 74 case GL_RGB_INTEGER:
75 case GL_SRGB_EXT: 75 case GL_SRGB_EXT:
76 dst_format = WebGLImageConversion::kDataFormatRGB8; 76 dst_format = WebGLImageConversion::kDataFormatRGB8;
77 break; 77 break;
78 case GL_RGBA: 78 case GL_RGBA:
(...skipping 10 matching lines...) Expand all
89 dst_format = WebGLImageConversion::kDataFormatR8; 89 dst_format = WebGLImageConversion::kDataFormatR8;
90 break; 90 break;
91 case GL_RG: 91 case GL_RG:
92 case GL_RG_INTEGER: 92 case GL_RG_INTEGER:
93 dst_format = WebGLImageConversion::kDataFormatRG8; 93 dst_format = WebGLImageConversion::kDataFormatRG8;
94 break; 94 break;
95 case GL_LUMINANCE_ALPHA: 95 case GL_LUMINANCE_ALPHA:
96 dst_format = WebGLImageConversion::kDataFormatRA8; 96 dst_format = WebGLImageConversion::kDataFormatRA8;
97 break; 97 break;
98 default: 98 default:
99 ASSERT_NOT_REACHED(); 99 NOTREACHED();
100 } 100 }
101 break; 101 break;
102 case GL_SHORT: 102 case GL_SHORT:
103 switch (destination_format) { 103 switch (destination_format) {
104 case GL_RED_INTEGER: 104 case GL_RED_INTEGER:
105 dst_format = WebGLImageConversion::kDataFormatR16_S; 105 dst_format = WebGLImageConversion::kDataFormatR16_S;
106 break; 106 break;
107 case GL_RG_INTEGER: 107 case GL_RG_INTEGER:
108 dst_format = WebGLImageConversion::kDataFormatRG16_S; 108 dst_format = WebGLImageConversion::kDataFormatRG16_S;
109 break; 109 break;
110 case GL_RGB_INTEGER: 110 case GL_RGB_INTEGER:
111 dst_format = WebGLImageConversion::kDataFormatRGB16_S; 111 dst_format = WebGLImageConversion::kDataFormatRGB16_S;
112 case GL_RGBA_INTEGER: 112 case GL_RGBA_INTEGER:
113 dst_format = WebGLImageConversion::kDataFormatRGBA16_S; 113 dst_format = WebGLImageConversion::kDataFormatRGBA16_S;
114 default: 114 default:
115 ASSERT_NOT_REACHED(); 115 NOTREACHED();
116 } 116 }
117 break; 117 break;
118 case GL_UNSIGNED_SHORT: 118 case GL_UNSIGNED_SHORT:
119 switch (destination_format) { 119 switch (destination_format) {
120 case GL_RED_INTEGER: 120 case GL_RED_INTEGER:
121 dst_format = WebGLImageConversion::kDataFormatR16; 121 dst_format = WebGLImageConversion::kDataFormatR16;
122 break; 122 break;
123 case GL_DEPTH_COMPONENT: 123 case GL_DEPTH_COMPONENT:
124 dst_format = WebGLImageConversion::kDataFormatD16; 124 dst_format = WebGLImageConversion::kDataFormatD16;
125 break; 125 break;
126 case GL_RG_INTEGER: 126 case GL_RG_INTEGER:
127 dst_format = WebGLImageConversion::kDataFormatRG16; 127 dst_format = WebGLImageConversion::kDataFormatRG16;
128 break; 128 break;
129 case GL_RGB_INTEGER: 129 case GL_RGB_INTEGER:
130 dst_format = WebGLImageConversion::kDataFormatRGB16; 130 dst_format = WebGLImageConversion::kDataFormatRGB16;
131 break; 131 break;
132 case GL_RGBA_INTEGER: 132 case GL_RGBA_INTEGER:
133 dst_format = WebGLImageConversion::kDataFormatRGBA16; 133 dst_format = WebGLImageConversion::kDataFormatRGBA16;
134 break; 134 break;
135 default: 135 default:
136 ASSERT_NOT_REACHED(); 136 NOTREACHED();
137 } 137 }
138 break; 138 break;
139 case GL_INT: 139 case GL_INT:
140 switch (destination_format) { 140 switch (destination_format) {
141 case GL_RED_INTEGER: 141 case GL_RED_INTEGER:
142 dst_format = WebGLImageConversion::kDataFormatR32_S; 142 dst_format = WebGLImageConversion::kDataFormatR32_S;
143 break; 143 break;
144 case GL_RG_INTEGER: 144 case GL_RG_INTEGER:
145 dst_format = WebGLImageConversion::kDataFormatRG32_S; 145 dst_format = WebGLImageConversion::kDataFormatRG32_S;
146 break; 146 break;
147 case GL_RGB_INTEGER: 147 case GL_RGB_INTEGER:
148 dst_format = WebGLImageConversion::kDataFormatRGB32_S; 148 dst_format = WebGLImageConversion::kDataFormatRGB32_S;
149 break; 149 break;
150 case GL_RGBA_INTEGER: 150 case GL_RGBA_INTEGER:
151 dst_format = WebGLImageConversion::kDataFormatRGBA32_S; 151 dst_format = WebGLImageConversion::kDataFormatRGBA32_S;
152 break; 152 break;
153 default: 153 default:
154 ASSERT_NOT_REACHED(); 154 NOTREACHED();
155 } 155 }
156 break; 156 break;
157 case GL_UNSIGNED_INT: 157 case GL_UNSIGNED_INT:
158 switch (destination_format) { 158 switch (destination_format) {
159 case GL_RED_INTEGER: 159 case GL_RED_INTEGER:
160 dst_format = WebGLImageConversion::kDataFormatR32; 160 dst_format = WebGLImageConversion::kDataFormatR32;
161 break; 161 break;
162 case GL_DEPTH_COMPONENT: 162 case GL_DEPTH_COMPONENT:
163 dst_format = WebGLImageConversion::kDataFormatD32; 163 dst_format = WebGLImageConversion::kDataFormatD32;
164 break; 164 break;
165 case GL_RG_INTEGER: 165 case GL_RG_INTEGER:
166 dst_format = WebGLImageConversion::kDataFormatRG32; 166 dst_format = WebGLImageConversion::kDataFormatRG32;
167 break; 167 break;
168 case GL_RGB_INTEGER: 168 case GL_RGB_INTEGER:
169 dst_format = WebGLImageConversion::kDataFormatRGB32; 169 dst_format = WebGLImageConversion::kDataFormatRGB32;
170 break; 170 break;
171 case GL_RGBA_INTEGER: 171 case GL_RGBA_INTEGER:
172 dst_format = WebGLImageConversion::kDataFormatRGBA32; 172 dst_format = WebGLImageConversion::kDataFormatRGBA32;
173 break; 173 break;
174 default: 174 default:
175 ASSERT_NOT_REACHED(); 175 NOTREACHED();
176 } 176 }
177 break; 177 break;
178 case GL_HALF_FLOAT_OES: // OES_texture_half_float 178 case GL_HALF_FLOAT_OES: // OES_texture_half_float
179 case GL_HALF_FLOAT: 179 case GL_HALF_FLOAT:
180 switch (destination_format) { 180 switch (destination_format) {
181 case GL_RGBA: 181 case GL_RGBA:
182 dst_format = WebGLImageConversion::kDataFormatRGBA16F; 182 dst_format = WebGLImageConversion::kDataFormatRGBA16F;
183 break; 183 break;
184 case GL_RGB: 184 case GL_RGB:
185 dst_format = WebGLImageConversion::kDataFormatRGB16F; 185 dst_format = WebGLImageConversion::kDataFormatRGB16F;
186 break; 186 break;
187 case GL_RG: 187 case GL_RG:
188 dst_format = WebGLImageConversion::kDataFormatRG16F; 188 dst_format = WebGLImageConversion::kDataFormatRG16F;
189 break; 189 break;
190 case GL_ALPHA: 190 case GL_ALPHA:
191 dst_format = WebGLImageConversion::kDataFormatA16F; 191 dst_format = WebGLImageConversion::kDataFormatA16F;
192 break; 192 break;
193 case GL_LUMINANCE: 193 case GL_LUMINANCE:
194 case GL_RED: 194 case GL_RED:
195 dst_format = WebGLImageConversion::kDataFormatR16F; 195 dst_format = WebGLImageConversion::kDataFormatR16F;
196 break; 196 break;
197 case GL_LUMINANCE_ALPHA: 197 case GL_LUMINANCE_ALPHA:
198 dst_format = WebGLImageConversion::kDataFormatRA16F; 198 dst_format = WebGLImageConversion::kDataFormatRA16F;
199 break; 199 break;
200 default: 200 default:
201 ASSERT_NOT_REACHED(); 201 NOTREACHED();
202 } 202 }
203 break; 203 break;
204 case GL_FLOAT: // OES_texture_float 204 case GL_FLOAT: // OES_texture_float
205 switch (destination_format) { 205 switch (destination_format) {
206 case GL_RGBA: 206 case GL_RGBA:
207 dst_format = WebGLImageConversion::kDataFormatRGBA32F; 207 dst_format = WebGLImageConversion::kDataFormatRGBA32F;
208 break; 208 break;
209 case GL_RGB: 209 case GL_RGB:
210 dst_format = WebGLImageConversion::kDataFormatRGB32F; 210 dst_format = WebGLImageConversion::kDataFormatRGB32F;
211 break; 211 break;
212 case GL_RG: 212 case GL_RG:
213 dst_format = WebGLImageConversion::kDataFormatRG32F; 213 dst_format = WebGLImageConversion::kDataFormatRG32F;
214 break; 214 break;
215 case GL_ALPHA: 215 case GL_ALPHA:
216 dst_format = WebGLImageConversion::kDataFormatA32F; 216 dst_format = WebGLImageConversion::kDataFormatA32F;
217 break; 217 break;
218 case GL_LUMINANCE: 218 case GL_LUMINANCE:
219 case GL_RED: 219 case GL_RED:
220 dst_format = WebGLImageConversion::kDataFormatR32F; 220 dst_format = WebGLImageConversion::kDataFormatR32F;
221 break; 221 break;
222 case GL_DEPTH_COMPONENT: 222 case GL_DEPTH_COMPONENT:
223 dst_format = WebGLImageConversion::kDataFormatD32F; 223 dst_format = WebGLImageConversion::kDataFormatD32F;
224 break; 224 break;
225 case GL_LUMINANCE_ALPHA: 225 case GL_LUMINANCE_ALPHA:
226 dst_format = WebGLImageConversion::kDataFormatRA32F; 226 dst_format = WebGLImageConversion::kDataFormatRA32F;
227 break; 227 break;
228 default: 228 default:
229 ASSERT_NOT_REACHED(); 229 NOTREACHED();
230 } 230 }
231 break; 231 break;
232 case GL_UNSIGNED_SHORT_4_4_4_4: 232 case GL_UNSIGNED_SHORT_4_4_4_4:
233 dst_format = WebGLImageConversion::kDataFormatRGBA4444; 233 dst_format = WebGLImageConversion::kDataFormatRGBA4444;
234 break; 234 break;
235 case GL_UNSIGNED_SHORT_5_5_5_1: 235 case GL_UNSIGNED_SHORT_5_5_5_1:
236 dst_format = WebGLImageConversion::kDataFormatRGBA5551; 236 dst_format = WebGLImageConversion::kDataFormatRGBA5551;
237 break; 237 break;
238 case GL_UNSIGNED_SHORT_5_6_5: 238 case GL_UNSIGNED_SHORT_5_6_5:
239 dst_format = WebGLImageConversion::kDataFormatRGB565; 239 dst_format = WebGLImageConversion::kDataFormatRGB565;
240 break; 240 break;
241 case GL_UNSIGNED_INT_5_9_9_9_REV: 241 case GL_UNSIGNED_INT_5_9_9_9_REV:
242 dst_format = WebGLImageConversion::kDataFormatRGB5999; 242 dst_format = WebGLImageConversion::kDataFormatRGB5999;
243 break; 243 break;
244 case GL_UNSIGNED_INT_24_8: 244 case GL_UNSIGNED_INT_24_8:
245 dst_format = WebGLImageConversion::kDataFormatDS24_8; 245 dst_format = WebGLImageConversion::kDataFormatDS24_8;
246 break; 246 break;
247 case GL_UNSIGNED_INT_10F_11F_11F_REV: 247 case GL_UNSIGNED_INT_10F_11F_11F_REV:
248 dst_format = WebGLImageConversion::kDataFormatRGB10F11F11F; 248 dst_format = WebGLImageConversion::kDataFormatRGB10F11F11F;
249 break; 249 break;
250 case GL_UNSIGNED_INT_2_10_10_10_REV: 250 case GL_UNSIGNED_INT_2_10_10_10_REV:
251 dst_format = WebGLImageConversion::kDataFormatRGBA2_10_10_10; 251 dst_format = WebGLImageConversion::kDataFormatRGBA2_10_10_10;
252 break; 252 break;
253 default: 253 default:
254 ASSERT_NOT_REACHED(); 254 NOTREACHED();
255 } 255 }
256 return dst_format; 256 return dst_format;
257 } 257 }
258 258
259 // The following Float to Half-Float conversion code is from the implementation 259 // The following Float to Half-Float conversion code is from the implementation
260 // of ftp://www.fox-toolkit.org/pub/fasthalffloatconversion.pdf, "Fast Half 260 // of ftp://www.fox-toolkit.org/pub/fasthalffloatconversion.pdf, "Fast Half
261 // Float Conversions" by Jeroen van der Zijp, November 2008 (Revised September 261 // Float Conversions" by Jeroen van der Zijp, November 2008 (Revised September
262 // 2010). Specially, the basetable[512] and shifttable[512] are generated as 262 // 2010). Specially, the basetable[512] and shifttable[512] are generated as
263 // follows: 263 // follows:
264 /* 264 /*
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 // The following packing and unpacking routines are expressed in terms of 394 // The following packing and unpacking routines are expressed in terms of
395 // function templates and inline functions to achieve generality and speedup. 395 // function templates and inline functions to achieve generality and speedup.
396 // Explicit template specializations correspond to the cases that would occur. 396 // Explicit template specializations correspond to the cases that would occur.
397 // Some code are merged back from Mozilla code in 397 // Some code are merged back from Mozilla code in
398 // http://mxr.mozilla.org/mozilla-central/source/content/canvas/src/WebGLTexelCo nversions.h 398 // http://mxr.mozilla.org/mozilla-central/source/content/canvas/src/WebGLTexelCo nversions.h
399 399
400 //---------------------------------------------------------------------- 400 //----------------------------------------------------------------------
401 // Pixel unpacking routines. 401 // Pixel unpacking routines.
402 template <int format, typename SourceType, typename DstType> 402 template <int format, typename SourceType, typename DstType>
403 void Unpack(const SourceType*, DstType*, unsigned) { 403 void Unpack(const SourceType*, DstType*, unsigned) {
404 ASSERT_NOT_REACHED(); 404 NOTREACHED();
405 } 405 }
406 406
407 template <> 407 template <>
408 void Unpack<WebGLImageConversion::kDataFormatARGB8, uint8_t, uint8_t>( 408 void Unpack<WebGLImageConversion::kDataFormatARGB8, uint8_t, uint8_t>(
409 const uint8_t* source, 409 const uint8_t* source,
410 uint8_t* destination, 410 uint8_t* destination,
411 unsigned pixels_per_row) { 411 unsigned pixels_per_row) {
412 for (unsigned i = 0; i < pixels_per_row; ++i) { 412 for (unsigned i = 0; i < pixels_per_row; ++i) {
413 destination[0] = source[1]; 413 destination[0] = source[1];
414 destination[1] = source[2]; 414 destination[1] = source[2];
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 destination += 4; 653 destination += 4;
654 } 654 }
655 } 655 }
656 656
657 //---------------------------------------------------------------------- 657 //----------------------------------------------------------------------
658 // Pixel packing routines. 658 // Pixel packing routines.
659 // 659 //
660 660
661 template <int format, int alphaOp, typename SourceType, typename DstType> 661 template <int format, int alphaOp, typename SourceType, typename DstType>
662 void Pack(const SourceType*, DstType*, unsigned) { 662 void Pack(const SourceType*, DstType*, unsigned) {
663 ASSERT_NOT_REACHED(); 663 NOTREACHED();
664 } 664 }
665 665
666 template <> 666 template <>
667 void Pack<WebGLImageConversion::kDataFormatA8, 667 void Pack<WebGLImageConversion::kDataFormatA8,
668 WebGLImageConversion::kAlphaDoNothing, 668 WebGLImageConversion::kAlphaDoNothing,
669 uint8_t, 669 uint8_t,
670 uint8_t>(const uint8_t* source, 670 uint8_t>(const uint8_t* source,
671 uint8_t* destination, 671 uint8_t* destination,
672 unsigned pixels_per_row) { 672 unsigned pixels_per_row) {
673 for (unsigned i = 0; i < pixels_per_row; ++i) { 673 for (unsigned i = 0; i < pixels_per_row; ++i) {
(...skipping 1585 matching lines...) Expand 10 before | Expand all | Expand 10 after
2259 dst_start_(dst_start), 2259 dst_start_(dst_start),
2260 src_stride_(src_stride), 2260 src_stride_(src_stride),
2261 src_row_offset_(src_row_offset), 2261 src_row_offset_(src_row_offset),
2262 dst_stride_(dst_stride), 2262 dst_stride_(dst_stride),
2263 success_(false) { 2263 success_(false) {
2264 const unsigned kMaxNumberOfComponents = 4; 2264 const unsigned kMaxNumberOfComponents = 4;
2265 const unsigned kMaxBytesPerComponent = 4; 2265 const unsigned kMaxBytesPerComponent = 4;
2266 unpacked_intermediate_src_data_ = WrapArrayUnique( 2266 unpacked_intermediate_src_data_ = WrapArrayUnique(
2267 new uint8_t[src_sub_rectangle_.Width() * kMaxNumberOfComponents * 2267 new uint8_t[src_sub_rectangle_.Width() * kMaxNumberOfComponents *
2268 kMaxBytesPerComponent]); 2268 kMaxBytesPerComponent]);
2269 ASSERT(unpacked_intermediate_src_data_.get()); 2269 DCHECK(unpacked_intermediate_src_data_.get());
2270 } 2270 }
2271 2271
2272 void Convert(WebGLImageConversion::DataFormat src_format, 2272 void Convert(WebGLImageConversion::DataFormat src_format,
2273 WebGLImageConversion::DataFormat dst_format, 2273 WebGLImageConversion::DataFormat dst_format,
2274 WebGLImageConversion::AlphaOp); 2274 WebGLImageConversion::AlphaOp);
2275 bool Success() const { return success_; } 2275 bool Success() const { return success_; }
2276 2276
2277 private: 2277 private:
2278 template <WebGLImageConversion::DataFormat SrcFormat> 2278 template <WebGLImageConversion::DataFormat SrcFormat>
2279 void Convert(WebGLImageConversion::DataFormat dst_format, 2279 void Convert(WebGLImageConversion::DataFormat dst_format,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2312 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatARGB8) 2312 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatARGB8)
2313 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatABGR8) 2313 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatABGR8)
2314 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatAR8) 2314 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatAR8)
2315 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatBGRA8) 2315 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatBGRA8)
2316 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatRGBA5551) 2316 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatRGBA5551)
2317 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatRGBA4444) 2317 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatRGBA4444)
2318 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatRGBA32F) 2318 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::kDataFormatRGBA32F)
2319 FORMATCONVERTER_CASE_SRCFORMAT( 2319 FORMATCONVERTER_CASE_SRCFORMAT(
2320 WebGLImageConversion::kDataFormatRGBA2_10_10_10) 2320 WebGLImageConversion::kDataFormatRGBA2_10_10_10)
2321 default: 2321 default:
2322 ASSERT_NOT_REACHED(); 2322 NOTREACHED();
2323 } 2323 }
2324 #undef FORMATCONVERTER_CASE_SRCFORMAT 2324 #undef FORMATCONVERTER_CASE_SRCFORMAT
2325 } 2325 }
2326 2326
2327 template <WebGLImageConversion::DataFormat SrcFormat> 2327 template <WebGLImageConversion::DataFormat SrcFormat>
2328 void FormatConverter::Convert(WebGLImageConversion::DataFormat dst_format, 2328 void FormatConverter::Convert(WebGLImageConversion::DataFormat dst_format,
2329 WebGLImageConversion::AlphaOp alpha_op) { 2329 WebGLImageConversion::AlphaOp alpha_op) {
2330 #define FORMATCONVERTER_CASE_DSTFORMAT(DstFormat) \ 2330 #define FORMATCONVERTER_CASE_DSTFORMAT(DstFormat) \
2331 case DstFormat: \ 2331 case DstFormat: \
2332 return Convert<SrcFormat, DstFormat>(alpha_op); 2332 return Convert<SrcFormat, DstFormat>(alpha_op);
(...skipping 21 matching lines...) Expand all
2354 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRGBA16) 2354 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRGBA16)
2355 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRGBA16_S) 2355 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRGBA16_S)
2356 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRGBA32) 2356 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRGBA32)
2357 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRGBA32_S) 2357 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRGBA32_S)
2358 FORMATCONVERTER_CASE_DSTFORMAT( 2358 FORMATCONVERTER_CASE_DSTFORMAT(
2359 WebGLImageConversion::kDataFormatRGBA2_10_10_10) 2359 WebGLImageConversion::kDataFormatRGBA2_10_10_10)
2360 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRG8) 2360 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRG8)
2361 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRG16F) 2361 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRG16F)
2362 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRG32F) 2362 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::kDataFormatRG32F)
2363 default: 2363 default:
2364 ASSERT_NOT_REACHED(); 2364 NOTREACHED();
2365 } 2365 }
2366 2366
2367 #undef FORMATCONVERTER_CASE_DSTFORMAT 2367 #undef FORMATCONVERTER_CASE_DSTFORMAT
2368 } 2368 }
2369 2369
2370 template <WebGLImageConversion::DataFormat SrcFormat, 2370 template <WebGLImageConversion::DataFormat SrcFormat,
2371 WebGLImageConversion::DataFormat DstFormat> 2371 WebGLImageConversion::DataFormat DstFormat>
2372 void FormatConverter::Convert(WebGLImageConversion::AlphaOp alpha_op) { 2372 void FormatConverter::Convert(WebGLImageConversion::AlphaOp alpha_op) {
2373 #define FORMATCONVERTER_CASE_ALPHAOP(alphaOp) \ 2373 #define FORMATCONVERTER_CASE_ALPHAOP(alphaOp) \
2374 case alphaOp: \ 2374 case alphaOp: \
2375 return Convert<SrcFormat, DstFormat, alphaOp>(); 2375 return Convert<SrcFormat, DstFormat, alphaOp>();
2376 2376
2377 switch (alpha_op) { 2377 switch (alpha_op) {
2378 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::kAlphaDoNothing) 2378 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::kAlphaDoNothing)
2379 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::kAlphaDoPremultiply) 2379 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::kAlphaDoPremultiply)
2380 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::kAlphaDoUnmultiply) 2380 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::kAlphaDoUnmultiply)
2381 default: 2381 default:
2382 ASSERT_NOT_REACHED(); 2382 NOTREACHED();
2383 } 2383 }
2384 #undef FORMATCONVERTER_CASE_ALPHAOP 2384 #undef FORMATCONVERTER_CASE_ALPHAOP
2385 } 2385 }
2386 2386
2387 template <int Format> 2387 template <int Format>
2388 struct SupportsConversionFromDomElements { 2388 struct SupportsConversionFromDomElements {
2389 STATIC_ONLY(SupportsConversionFromDomElements); 2389 STATIC_ONLY(SupportsConversionFromDomElements);
2390 static const bool value = 2390 static const bool value =
2391 Format == WebGLImageConversion::kDataFormatRGBA8 || 2391 Format == WebGLImageConversion::kDataFormatRGBA8 ||
2392 Format == WebGLImageConversion::kDataFormatRGB8 || 2392 Format == WebGLImageConversion::kDataFormatRGB8 ||
(...skipping 16 matching lines...) Expand all
2409 }; 2409 };
2410 2410
2411 template <WebGLImageConversion::DataFormat SrcFormat, 2411 template <WebGLImageConversion::DataFormat SrcFormat,
2412 WebGLImageConversion::DataFormat DstFormat, 2412 WebGLImageConversion::DataFormat DstFormat,
2413 WebGLImageConversion::AlphaOp alphaOp> 2413 WebGLImageConversion::AlphaOp alphaOp>
2414 void FormatConverter::Convert() { 2414 void FormatConverter::Convert() {
2415 // Many instantiations of this template function will never be entered, so we 2415 // Many instantiations of this template function will never be entered, so we
2416 // try to return immediately in these cases to avoid generating useless code. 2416 // try to return immediately in these cases to avoid generating useless code.
2417 if (SrcFormat == DstFormat && 2417 if (SrcFormat == DstFormat &&
2418 alphaOp == WebGLImageConversion::kAlphaDoNothing) { 2418 alphaOp == WebGLImageConversion::kAlphaDoNothing) {
2419 ASSERT_NOT_REACHED(); 2419 NOTREACHED();
2420 return; 2420 return;
2421 } 2421 }
2422 if (!IsFloatFormat<DstFormat>::value && IsFloatFormat<SrcFormat>::value) { 2422 if (!IsFloatFormat<DstFormat>::value && IsFloatFormat<SrcFormat>::value) {
2423 ASSERT_NOT_REACHED(); 2423 NOTREACHED();
2424 return; 2424 return;
2425 } 2425 }
2426 2426
2427 // Only textures uploaded from DOM elements or ImageData can allow DstFormat 2427 // Only textures uploaded from DOM elements or ImageData can allow DstFormat
2428 // != SrcFormat. 2428 // != SrcFormat.
2429 const bool src_format_comes_from_dom_element_or_image_data = 2429 const bool src_format_comes_from_dom_element_or_image_data =
2430 WebGLImageConversion::SrcFormatComeFromDOMElementOrImageData(SrcFormat); 2430 WebGLImageConversion::SrcFormatComeFromDOMElementOrImageData(SrcFormat);
2431 if (!src_format_comes_from_dom_element_or_image_data && 2431 if (!src_format_comes_from_dom_element_or_image_data &&
2432 SrcFormat != DstFormat) { 2432 SrcFormat != DstFormat) {
2433 ASSERT_NOT_REACHED(); 2433 NOTREACHED();
2434 return; 2434 return;
2435 } 2435 }
2436 // Likewise, only textures uploaded from DOM elements or ImageData can 2436 // Likewise, only textures uploaded from DOM elements or ImageData can
2437 // possibly need to be unpremultiplied. 2437 // possibly need to be unpremultiplied.
2438 if (!src_format_comes_from_dom_element_or_image_data && 2438 if (!src_format_comes_from_dom_element_or_image_data &&
2439 alphaOp == WebGLImageConversion::kAlphaDoUnmultiply) { 2439 alphaOp == WebGLImageConversion::kAlphaDoUnmultiply) {
2440 ASSERT_NOT_REACHED(); 2440 NOTREACHED();
2441 return; 2441 return;
2442 } 2442 }
2443 if (src_format_comes_from_dom_element_or_image_data && 2443 if (src_format_comes_from_dom_element_or_image_data &&
2444 alphaOp == WebGLImageConversion::kAlphaDoUnmultiply && 2444 alphaOp == WebGLImageConversion::kAlphaDoUnmultiply &&
2445 !SupportsConversionFromDomElements<DstFormat>::value) { 2445 !SupportsConversionFromDomElements<DstFormat>::value) {
2446 ASSERT_NOT_REACHED(); 2446 NOTREACHED();
2447 return; 2447 return;
2448 } 2448 }
2449 if ((!HasAlpha(SrcFormat) || !HasColor(SrcFormat) || !HasColor(DstFormat)) && 2449 if ((!HasAlpha(SrcFormat) || !HasColor(SrcFormat) || !HasColor(DstFormat)) &&
2450 alphaOp != WebGLImageConversion::kAlphaDoNothing) { 2450 alphaOp != WebGLImageConversion::kAlphaDoNothing) {
2451 ASSERT_NOT_REACHED(); 2451 NOTREACHED();
2452 return; 2452 return;
2453 } 2453 }
2454 // If converting DOM element data to UNSIGNED_INT_5_9_9_9_REV or 2454 // If converting DOM element data to UNSIGNED_INT_5_9_9_9_REV or
2455 // UNSIGNED_INT_10F_11F_11F_REV, we should always switch to FLOAT instead to 2455 // UNSIGNED_INT_10F_11F_11F_REV, we should always switch to FLOAT instead to
2456 // avoid unpacking/packing these two types. 2456 // avoid unpacking/packing these two types.
2457 if (src_format_comes_from_dom_element_or_image_data && 2457 if (src_format_comes_from_dom_element_or_image_data &&
2458 SrcFormat != DstFormat && 2458 SrcFormat != DstFormat &&
2459 (DstFormat == WebGLImageConversion::kDataFormatRGB5999 || 2459 (DstFormat == WebGLImageConversion::kDataFormatRGB5999 ||
2460 DstFormat == WebGLImageConversion::kDataFormatRGB10F11F11F)) { 2460 DstFormat == WebGLImageConversion::kDataFormatRGB10F11F11F)) {
2461 ASSERT_NOT_REACHED(); 2461 NOTREACHED();
2462 return; 2462 return;
2463 } 2463 }
2464 2464
2465 typedef typename DataTypeForFormat<SrcFormat>::Type SrcType; 2465 typedef typename DataTypeForFormat<SrcFormat>::Type SrcType;
2466 typedef typename DataTypeForFormat<DstFormat>::Type DstType; 2466 typedef typename DataTypeForFormat<DstFormat>::Type DstType;
2467 const int kIntermFormat = IntermediateFormat<DstFormat>::value; 2467 const int kIntermFormat = IntermediateFormat<DstFormat>::value;
2468 typedef typename DataTypeForFormat<kIntermFormat>::Type IntermType; 2468 typedef typename DataTypeForFormat<kIntermFormat>::Type IntermType;
2469 const ptrdiff_t src_stride_in_elements = src_stride_ / sizeof(SrcType); 2469 const ptrdiff_t src_stride_in_elements = src_stride_ / sizeof(SrcType);
2470 const ptrdiff_t dst_stride_in_elements = dst_stride_ / sizeof(DstType); 2470 const ptrdiff_t dst_stride_in_elements = dst_stride_ / sizeof(DstType);
2471 const bool kTrivialUnpack = SrcFormat == kIntermFormat; 2471 const bool kTrivialUnpack = SrcFormat == kIntermFormat;
2472 const bool kTrivialPack = DstFormat == kIntermFormat && 2472 const bool kTrivialPack = DstFormat == kIntermFormat &&
2473 alphaOp == WebGLImageConversion::kAlphaDoNothing; 2473 alphaOp == WebGLImageConversion::kAlphaDoNothing;
2474 ASSERT(!kTrivialUnpack || !kTrivialPack); 2474 DCHECK(!kTrivialUnpack || !kTrivialPack);
2475 2475
2476 const SrcType* src_row_start = 2476 const SrcType* src_row_start =
2477 static_cast<const SrcType*>(static_cast<const void*>( 2477 static_cast<const SrcType*>(static_cast<const void*>(
2478 static_cast<const uint8_t*>(src_start_) + 2478 static_cast<const uint8_t*>(src_start_) +
2479 ((src_stride_ * src_sub_rectangle_.Y()) + src_row_offset_))); 2479 ((src_stride_ * src_sub_rectangle_.Y()) + src_row_offset_)));
2480 2480
2481 // If packing multiple images into a 3D texture, and flipY is true, 2481 // If packing multiple images into a 3D texture, and flipY is true,
2482 // then the sub-rectangle is pointing at the start of the 2482 // then the sub-rectangle is pointing at the start of the
2483 // "bottommost" of those images. Since the source pointer strides in 2483 // "bottommost" of those images. Since the source pointer strides in
2484 // the positive direction, we need to back it up to point at the 2484 // the positive direction, we need to back it up to point at the
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
2628 GLenum WebGLImageConversion::ComputeImageSizeInBytes( 2628 GLenum WebGLImageConversion::ComputeImageSizeInBytes(
2629 GLenum format, 2629 GLenum format,
2630 GLenum type, 2630 GLenum type,
2631 GLsizei width, 2631 GLsizei width,
2632 GLsizei height, 2632 GLsizei height,
2633 GLsizei depth, 2633 GLsizei depth,
2634 const PixelStoreParams& params, 2634 const PixelStoreParams& params,
2635 unsigned* image_size_in_bytes, 2635 unsigned* image_size_in_bytes,
2636 unsigned* padding_in_bytes, 2636 unsigned* padding_in_bytes,
2637 unsigned* skip_size_in_bytes) { 2637 unsigned* skip_size_in_bytes) {
2638 ASSERT(image_size_in_bytes); 2638 DCHECK(image_size_in_bytes);
2639 ASSERT(params.alignment == 1 || params.alignment == 2 || 2639 DCHECK(params.alignment == 1 || params.alignment == 2 ||
2640 params.alignment == 4 || params.alignment == 8); 2640 params.alignment == 4 || params.alignment == 8);
2641 ASSERT(params.row_length >= 0 && params.image_height >= 0); 2641 DCHECK_GE(params.row_length, 0);
2642 ASSERT(params.skip_pixels >= 0 && params.skip_rows >= 0 && 2642 DCHECK_GE(params.image_height, 0);
2643 params.skip_images >= 0); 2643 DCHECK_GE(params.skip_pixels, 0);
2644 DCHECK_GE(params.skip_rows, 0);
2645 DCHECK_GE(params.skip_images, 0);
2644 if (width < 0 || height < 0 || depth < 0) 2646 if (width < 0 || height < 0 || depth < 0)
2645 return GL_INVALID_VALUE; 2647 return GL_INVALID_VALUE;
2646 if (!width || !height || !depth) { 2648 if (!width || !height || !depth) {
2647 *image_size_in_bytes = 0; 2649 *image_size_in_bytes = 0;
2648 if (padding_in_bytes) 2650 if (padding_in_bytes)
2649 *padding_in_bytes = 0; 2651 *padding_in_bytes = 0;
2650 if (skip_size_in_bytes) 2652 if (skip_size_in_bytes)
2651 *skip_size_in_bytes = 0; 2653 *skip_size_in_bytes = 0;
2652 return GL_NO_ERROR; 2654 return GL_NO_ERROR;
2653 } 2655 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
2745 bool premultiply_alpha, 2747 bool premultiply_alpha,
2746 bool ignore_color_space) { 2748 bool ignore_color_space) {
2747 image_ = image; 2749 image_ = image;
2748 image_html_dom_source_ = image_html_dom_source; 2750 image_html_dom_source_ = image_html_dom_source;
2749 ExtractImage(premultiply_alpha, ignore_color_space); 2751 ExtractImage(premultiply_alpha, ignore_color_space);
2750 } 2752 }
2751 2753
2752 void WebGLImageConversion::ImageExtractor::ExtractImage( 2754 void WebGLImageConversion::ImageExtractor::ExtractImage(
2753 bool premultiply_alpha, 2755 bool premultiply_alpha,
2754 bool ignore_color_space) { 2756 bool ignore_color_space) {
2755 ASSERT(!image_pixel_locker_); 2757 DCHECK(!image_pixel_locker_);
2756 2758
2757 if (!image_) 2759 if (!image_)
2758 return; 2760 return;
2759 2761
2760 sk_sp<SkImage> skia_image = image_->ImageForCurrentFrame(); 2762 sk_sp<SkImage> skia_image = image_->ImageForCurrentFrame();
2761 SkImageInfo info = 2763 SkImageInfo info =
2762 skia_image ? SkImageInfo::MakeN32Premul(image_->width(), image_->height()) 2764 skia_image ? SkImageInfo::MakeN32Premul(image_->width(), image_->height())
2763 : SkImageInfo::MakeUnknown(); 2765 : SkImageInfo::MakeUnknown();
2764 alpha_op_ = kAlphaDoNothing; 2766 alpha_op_ = kAlphaDoNothing;
2765 bool has_alpha = skia_image ? !skia_image->isOpaque() : true; 2767 bool has_alpha = skia_image ? !skia_image->isOpaque() : true;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2802 alpha_op_ = kAlphaDoUnmultiply; 2804 alpha_op_ = kAlphaDoUnmultiply;
2803 } 2805 }
2804 2806
2805 if (!skia_image) 2807 if (!skia_image)
2806 return; 2808 return;
2807 2809
2808 image_source_format_ = SK_B32_SHIFT ? kDataFormatRGBA8 : kDataFormatBGRA8; 2810 image_source_format_ = SK_B32_SHIFT ? kDataFormatRGBA8 : kDataFormatBGRA8;
2809 image_source_unpack_alignment_ = 2811 image_source_unpack_alignment_ =
2810 0; // FIXME: this seems to always be zero - why use at all? 2812 0; // FIXME: this seems to always be zero - why use at all?
2811 2813
2812 ASSERT(skia_image->width() && skia_image->height()); 2814 DCHECK(skia_image->width());
2815 DCHECK(skia_image->height());
2813 image_width_ = skia_image->width(); 2816 image_width_ = skia_image->width();
2814 image_height_ = skia_image->height(); 2817 image_height_ = skia_image->height();
2815 2818
2816 // Fail if the image was downsampled because of memory limits. 2819 // Fail if the image was downsampled because of memory limits.
2817 if (image_width_ != (unsigned)image_->width() || 2820 if (image_width_ != (unsigned)image_->width() ||
2818 image_height_ != (unsigned)image_->height()) 2821 image_height_ != (unsigned)image_->height())
2819 return; 2822 return;
2820 2823
2821 image_pixel_locker_.emplace(std::move(skia_image), info.alphaType(), 2824 image_pixel_locker_.emplace(std::move(skia_image), info.alphaType(),
2822 kN32_SkColorType); 2825 kN32_SkColorType);
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
3191 Pack<WebGLImageConversion::kDataFormatRGB565, 3194 Pack<WebGLImageConversion::kDataFormatRGB565,
3192 WebGLImageConversion::kAlphaDoNothing>(src_row_start, dst_row_start, 3195 WebGLImageConversion::kAlphaDoNothing>(src_row_start, dst_row_start,
3193 pixels_per_row); 3196 pixels_per_row);
3194 } break; 3197 } break;
3195 default: 3198 default:
3196 break; 3199 break;
3197 } 3200 }
3198 } 3201 }
3199 3202
3200 } // namespace blink 3203 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698