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

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: Replace ASSERT, ASSERT_NOT_REACHED, and RELEASE_ASSERT in platform/graphics 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 dstFormat = WebGLImageConversion::DataFormatRGB8_S; 61 dstFormat = WebGLImageConversion::DataFormatRGB8_S;
62 break; 62 break;
63 case GL_RGBA: 63 case GL_RGBA:
64 case GL_RGBA_INTEGER: 64 case GL_RGBA_INTEGER:
65 dstFormat = WebGLImageConversion::DataFormatRGBA8_S; 65 dstFormat = WebGLImageConversion::DataFormatRGBA8_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 (destinationFormat) { 72 switch (destinationFormat) {
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 dstFormat = WebGLImageConversion::DataFormatRGB8; 76 dstFormat = WebGLImageConversion::DataFormatRGB8;
77 break; 77 break;
78 case GL_RGBA: 78 case GL_RGBA:
(...skipping 10 matching lines...) Expand all
89 dstFormat = WebGLImageConversion::DataFormatR8; 89 dstFormat = WebGLImageConversion::DataFormatR8;
90 break; 90 break;
91 case GL_RG: 91 case GL_RG:
92 case GL_RG_INTEGER: 92 case GL_RG_INTEGER:
93 dstFormat = WebGLImageConversion::DataFormatRG8; 93 dstFormat = WebGLImageConversion::DataFormatRG8;
94 break; 94 break;
95 case GL_LUMINANCE_ALPHA: 95 case GL_LUMINANCE_ALPHA:
96 dstFormat = WebGLImageConversion::DataFormatRA8; 96 dstFormat = WebGLImageConversion::DataFormatRA8;
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 (destinationFormat) { 103 switch (destinationFormat) {
104 case GL_RED_INTEGER: 104 case GL_RED_INTEGER:
105 dstFormat = WebGLImageConversion::DataFormatR16_S; 105 dstFormat = WebGLImageConversion::DataFormatR16_S;
106 break; 106 break;
107 case GL_RG_INTEGER: 107 case GL_RG_INTEGER:
108 dstFormat = WebGLImageConversion::DataFormatRG16_S; 108 dstFormat = WebGLImageConversion::DataFormatRG16_S;
109 break; 109 break;
110 case GL_RGB_INTEGER: 110 case GL_RGB_INTEGER:
111 dstFormat = WebGLImageConversion::DataFormatRGB16_S; 111 dstFormat = WebGLImageConversion::DataFormatRGB16_S;
112 case GL_RGBA_INTEGER: 112 case GL_RGBA_INTEGER:
113 dstFormat = WebGLImageConversion::DataFormatRGBA16_S; 113 dstFormat = WebGLImageConversion::DataFormatRGBA16_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 (destinationFormat) { 119 switch (destinationFormat) {
120 case GL_RED_INTEGER: 120 case GL_RED_INTEGER:
121 dstFormat = WebGLImageConversion::DataFormatR16; 121 dstFormat = WebGLImageConversion::DataFormatR16;
122 break; 122 break;
123 case GL_DEPTH_COMPONENT: 123 case GL_DEPTH_COMPONENT:
124 dstFormat = WebGLImageConversion::DataFormatD16; 124 dstFormat = WebGLImageConversion::DataFormatD16;
125 break; 125 break;
126 case GL_RG_INTEGER: 126 case GL_RG_INTEGER:
127 dstFormat = WebGLImageConversion::DataFormatRG16; 127 dstFormat = WebGLImageConversion::DataFormatRG16;
128 break; 128 break;
129 case GL_RGB_INTEGER: 129 case GL_RGB_INTEGER:
130 dstFormat = WebGLImageConversion::DataFormatRGB16; 130 dstFormat = WebGLImageConversion::DataFormatRGB16;
131 break; 131 break;
132 case GL_RGBA_INTEGER: 132 case GL_RGBA_INTEGER:
133 dstFormat = WebGLImageConversion::DataFormatRGBA16; 133 dstFormat = WebGLImageConversion::DataFormatRGBA16;
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 (destinationFormat) { 140 switch (destinationFormat) {
141 case GL_RED_INTEGER: 141 case GL_RED_INTEGER:
142 dstFormat = WebGLImageConversion::DataFormatR32_S; 142 dstFormat = WebGLImageConversion::DataFormatR32_S;
143 break; 143 break;
144 case GL_RG_INTEGER: 144 case GL_RG_INTEGER:
145 dstFormat = WebGLImageConversion::DataFormatRG32_S; 145 dstFormat = WebGLImageConversion::DataFormatRG32_S;
146 break; 146 break;
147 case GL_RGB_INTEGER: 147 case GL_RGB_INTEGER:
148 dstFormat = WebGLImageConversion::DataFormatRGB32_S; 148 dstFormat = WebGLImageConversion::DataFormatRGB32_S;
149 break; 149 break;
150 case GL_RGBA_INTEGER: 150 case GL_RGBA_INTEGER:
151 dstFormat = WebGLImageConversion::DataFormatRGBA32_S; 151 dstFormat = WebGLImageConversion::DataFormatRGBA32_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 (destinationFormat) { 158 switch (destinationFormat) {
159 case GL_RED_INTEGER: 159 case GL_RED_INTEGER:
160 dstFormat = WebGLImageConversion::DataFormatR32; 160 dstFormat = WebGLImageConversion::DataFormatR32;
161 break; 161 break;
162 case GL_DEPTH_COMPONENT: 162 case GL_DEPTH_COMPONENT:
163 dstFormat = WebGLImageConversion::DataFormatD32; 163 dstFormat = WebGLImageConversion::DataFormatD32;
164 break; 164 break;
165 case GL_RG_INTEGER: 165 case GL_RG_INTEGER:
166 dstFormat = WebGLImageConversion::DataFormatRG32; 166 dstFormat = WebGLImageConversion::DataFormatRG32;
167 break; 167 break;
168 case GL_RGB_INTEGER: 168 case GL_RGB_INTEGER:
169 dstFormat = WebGLImageConversion::DataFormatRGB32; 169 dstFormat = WebGLImageConversion::DataFormatRGB32;
170 break; 170 break;
171 case GL_RGBA_INTEGER: 171 case GL_RGBA_INTEGER:
172 dstFormat = WebGLImageConversion::DataFormatRGBA32; 172 dstFormat = WebGLImageConversion::DataFormatRGBA32;
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 (destinationFormat) { 180 switch (destinationFormat) {
181 case GL_RGBA: 181 case GL_RGBA:
182 dstFormat = WebGLImageConversion::DataFormatRGBA16F; 182 dstFormat = WebGLImageConversion::DataFormatRGBA16F;
183 break; 183 break;
184 case GL_RGB: 184 case GL_RGB:
185 dstFormat = WebGLImageConversion::DataFormatRGB16F; 185 dstFormat = WebGLImageConversion::DataFormatRGB16F;
186 break; 186 break;
187 case GL_RG: 187 case GL_RG:
188 dstFormat = WebGLImageConversion::DataFormatRG16F; 188 dstFormat = WebGLImageConversion::DataFormatRG16F;
189 break; 189 break;
190 case GL_ALPHA: 190 case GL_ALPHA:
191 dstFormat = WebGLImageConversion::DataFormatA16F; 191 dstFormat = WebGLImageConversion::DataFormatA16F;
192 break; 192 break;
193 case GL_LUMINANCE: 193 case GL_LUMINANCE:
194 case GL_RED: 194 case GL_RED:
195 dstFormat = WebGLImageConversion::DataFormatR16F; 195 dstFormat = WebGLImageConversion::DataFormatR16F;
196 break; 196 break;
197 case GL_LUMINANCE_ALPHA: 197 case GL_LUMINANCE_ALPHA:
198 dstFormat = WebGLImageConversion::DataFormatRA16F; 198 dstFormat = WebGLImageConversion::DataFormatRA16F;
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 (destinationFormat) { 205 switch (destinationFormat) {
206 case GL_RGBA: 206 case GL_RGBA:
207 dstFormat = WebGLImageConversion::DataFormatRGBA32F; 207 dstFormat = WebGLImageConversion::DataFormatRGBA32F;
208 break; 208 break;
209 case GL_RGB: 209 case GL_RGB:
210 dstFormat = WebGLImageConversion::DataFormatRGB32F; 210 dstFormat = WebGLImageConversion::DataFormatRGB32F;
211 break; 211 break;
212 case GL_RG: 212 case GL_RG:
213 dstFormat = WebGLImageConversion::DataFormatRG32F; 213 dstFormat = WebGLImageConversion::DataFormatRG32F;
214 break; 214 break;
215 case GL_ALPHA: 215 case GL_ALPHA:
216 dstFormat = WebGLImageConversion::DataFormatA32F; 216 dstFormat = WebGLImageConversion::DataFormatA32F;
217 break; 217 break;
218 case GL_LUMINANCE: 218 case GL_LUMINANCE:
219 case GL_RED: 219 case GL_RED:
220 dstFormat = WebGLImageConversion::DataFormatR32F; 220 dstFormat = WebGLImageConversion::DataFormatR32F;
221 break; 221 break;
222 case GL_DEPTH_COMPONENT: 222 case GL_DEPTH_COMPONENT:
223 dstFormat = WebGLImageConversion::DataFormatD32F; 223 dstFormat = WebGLImageConversion::DataFormatD32F;
224 break; 224 break;
225 case GL_LUMINANCE_ALPHA: 225 case GL_LUMINANCE_ALPHA:
226 dstFormat = WebGLImageConversion::DataFormatRA32F; 226 dstFormat = WebGLImageConversion::DataFormatRA32F;
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 dstFormat = WebGLImageConversion::DataFormatRGBA4444; 233 dstFormat = WebGLImageConversion::DataFormatRGBA4444;
234 break; 234 break;
235 case GL_UNSIGNED_SHORT_5_5_5_1: 235 case GL_UNSIGNED_SHORT_5_5_5_1:
236 dstFormat = WebGLImageConversion::DataFormatRGBA5551; 236 dstFormat = WebGLImageConversion::DataFormatRGBA5551;
237 break; 237 break;
238 case GL_UNSIGNED_SHORT_5_6_5: 238 case GL_UNSIGNED_SHORT_5_6_5:
239 dstFormat = WebGLImageConversion::DataFormatRGB565; 239 dstFormat = WebGLImageConversion::DataFormatRGB565;
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 dstFormat = WebGLImageConversion::DataFormatRGB5999; 242 dstFormat = WebGLImageConversion::DataFormatRGB5999;
243 break; 243 break;
244 case GL_UNSIGNED_INT_24_8: 244 case GL_UNSIGNED_INT_24_8:
245 dstFormat = WebGLImageConversion::DataFormatDS24_8; 245 dstFormat = WebGLImageConversion::DataFormatDS24_8;
246 break; 246 break;
247 case GL_UNSIGNED_INT_10F_11F_11F_REV: 247 case GL_UNSIGNED_INT_10F_11F_11F_REV:
248 dstFormat = WebGLImageConversion::DataFormatRGB10F11F11F; 248 dstFormat = WebGLImageConversion::DataFormatRGB10F11F11F;
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 dstFormat = WebGLImageConversion::DataFormatRGBA2_10_10_10; 251 dstFormat = WebGLImageConversion::DataFormatRGBA2_10_10_10;
252 break; 252 break;
253 default: 253 default:
254 ASSERT_NOT_REACHED(); 254 NOTREACHED();
255 } 255 }
256 return dstFormat; 256 return dstFormat;
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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 // The following packing and unpacking routines are expressed in terms of 393 // The following packing and unpacking routines are expressed in terms of
394 // function templates and inline functions to achieve generality and speedup. 394 // function templates and inline functions to achieve generality and speedup.
395 // Explicit template specializations correspond to the cases that would occur. 395 // Explicit template specializations correspond to the cases that would occur.
396 // Some code are merged back from Mozilla code in 396 // Some code are merged back from Mozilla code in
397 // http://mxr.mozilla.org/mozilla-central/source/content/canvas/src/WebGLTexelCo nversions.h 397 // http://mxr.mozilla.org/mozilla-central/source/content/canvas/src/WebGLTexelCo nversions.h
398 398
399 //---------------------------------------------------------------------- 399 //----------------------------------------------------------------------
400 // Pixel unpacking routines. 400 // Pixel unpacking routines.
401 template <int format, typename SourceType, typename DstType> 401 template <int format, typename SourceType, typename DstType>
402 void unpack(const SourceType*, DstType*, unsigned) { 402 void unpack(const SourceType*, DstType*, unsigned) {
403 ASSERT_NOT_REACHED(); 403 NOTREACHED();
404 } 404 }
405 405
406 template <> 406 template <>
407 void unpack<WebGLImageConversion::DataFormatARGB8, uint8_t, uint8_t>( 407 void unpack<WebGLImageConversion::DataFormatARGB8, uint8_t, uint8_t>(
408 const uint8_t* source, 408 const uint8_t* source,
409 uint8_t* destination, 409 uint8_t* destination,
410 unsigned pixelsPerRow) { 410 unsigned pixelsPerRow) {
411 for (unsigned i = 0; i < pixelsPerRow; ++i) { 411 for (unsigned i = 0; i < pixelsPerRow; ++i) {
412 destination[0] = source[1]; 412 destination[0] = source[1];
413 destination[1] = source[2]; 413 destination[1] = source[2];
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 destination += 4; 648 destination += 4;
649 } 649 }
650 } 650 }
651 651
652 //---------------------------------------------------------------------- 652 //----------------------------------------------------------------------
653 // Pixel packing routines. 653 // Pixel packing routines.
654 // 654 //
655 655
656 template <int format, int alphaOp, typename SourceType, typename DstType> 656 template <int format, int alphaOp, typename SourceType, typename DstType>
657 void pack(const SourceType*, DstType*, unsigned) { 657 void pack(const SourceType*, DstType*, unsigned) {
658 ASSERT_NOT_REACHED(); 658 NOTREACHED();
659 } 659 }
660 660
661 template <> 661 template <>
662 void pack<WebGLImageConversion::DataFormatA8, 662 void pack<WebGLImageConversion::DataFormatA8,
663 WebGLImageConversion::AlphaDoNothing, 663 WebGLImageConversion::AlphaDoNothing,
664 uint8_t, 664 uint8_t,
665 uint8_t>(const uint8_t* source, 665 uint8_t>(const uint8_t* source,
666 uint8_t* destination, 666 uint8_t* destination,
667 unsigned pixelsPerRow) { 667 unsigned pixelsPerRow) {
668 for (unsigned i = 0; i < pixelsPerRow; ++i) { 668 for (unsigned i = 0; i < pixelsPerRow; ++i) {
(...skipping 1578 matching lines...) Expand 10 before | Expand all | Expand 10 after
2247 m_dstStart(dstStart), 2247 m_dstStart(dstStart),
2248 m_srcStride(srcStride), 2248 m_srcStride(srcStride),
2249 m_srcRowOffset(srcRowOffset), 2249 m_srcRowOffset(srcRowOffset),
2250 m_dstStride(dstStride), 2250 m_dstStride(dstStride),
2251 m_success(false) { 2251 m_success(false) {
2252 const unsigned MaxNumberOfComponents = 4; 2252 const unsigned MaxNumberOfComponents = 4;
2253 const unsigned MaxBytesPerComponent = 4; 2253 const unsigned MaxBytesPerComponent = 4;
2254 m_unpackedIntermediateSrcData = wrapArrayUnique( 2254 m_unpackedIntermediateSrcData = wrapArrayUnique(
2255 new uint8_t[m_srcSubRectangle.width() * MaxNumberOfComponents * 2255 new uint8_t[m_srcSubRectangle.width() * MaxNumberOfComponents *
2256 MaxBytesPerComponent]); 2256 MaxBytesPerComponent]);
2257 ASSERT(m_unpackedIntermediateSrcData.get()); 2257 DCHECK(m_unpackedIntermediateSrcData.get());
2258 } 2258 }
2259 2259
2260 void convert(WebGLImageConversion::DataFormat srcFormat, 2260 void convert(WebGLImageConversion::DataFormat srcFormat,
2261 WebGLImageConversion::DataFormat dstFormat, 2261 WebGLImageConversion::DataFormat dstFormat,
2262 WebGLImageConversion::AlphaOp); 2262 WebGLImageConversion::AlphaOp);
2263 bool Success() const { return m_success; } 2263 bool Success() const { return m_success; }
2264 2264
2265 private: 2265 private:
2266 template <WebGLImageConversion::DataFormat SrcFormat> 2266 template <WebGLImageConversion::DataFormat SrcFormat>
2267 void convert(WebGLImageConversion::DataFormat dstFormat, 2267 void convert(WebGLImageConversion::DataFormat dstFormat,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2300 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatARGB8) 2300 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatARGB8)
2301 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatABGR8) 2301 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatABGR8)
2302 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatAR8) 2302 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatAR8)
2303 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatBGRA8) 2303 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatBGRA8)
2304 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA5551) 2304 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA5551)
2305 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA4444) 2305 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA4444)
2306 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA32F) 2306 FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA32F)
2307 FORMATCONVERTER_CASE_SRCFORMAT( 2307 FORMATCONVERTER_CASE_SRCFORMAT(
2308 WebGLImageConversion::DataFormatRGBA2_10_10_10) 2308 WebGLImageConversion::DataFormatRGBA2_10_10_10)
2309 default: 2309 default:
2310 ASSERT_NOT_REACHED(); 2310 NOTREACHED();
2311 } 2311 }
2312 #undef FORMATCONVERTER_CASE_SRCFORMAT 2312 #undef FORMATCONVERTER_CASE_SRCFORMAT
2313 } 2313 }
2314 2314
2315 template <WebGLImageConversion::DataFormat SrcFormat> 2315 template <WebGLImageConversion::DataFormat SrcFormat>
2316 void FormatConverter::convert(WebGLImageConversion::DataFormat dstFormat, 2316 void FormatConverter::convert(WebGLImageConversion::DataFormat dstFormat,
2317 WebGLImageConversion::AlphaOp alphaOp) { 2317 WebGLImageConversion::AlphaOp alphaOp) {
2318 #define FORMATCONVERTER_CASE_DSTFORMAT(DstFormat) \ 2318 #define FORMATCONVERTER_CASE_DSTFORMAT(DstFormat) \
2319 case DstFormat: \ 2319 case DstFormat: \
2320 return convert<SrcFormat, DstFormat>(alphaOp); 2320 return convert<SrcFormat, DstFormat>(alphaOp);
(...skipping 21 matching lines...) Expand all
2342 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA16) 2342 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA16)
2343 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA16_S) 2343 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA16_S)
2344 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA32) 2344 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA32)
2345 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA32_S) 2345 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA32_S)
2346 FORMATCONVERTER_CASE_DSTFORMAT( 2346 FORMATCONVERTER_CASE_DSTFORMAT(
2347 WebGLImageConversion::DataFormatRGBA2_10_10_10) 2347 WebGLImageConversion::DataFormatRGBA2_10_10_10)
2348 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRG8) 2348 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRG8)
2349 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRG16F) 2349 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRG16F)
2350 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRG32F) 2350 FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRG32F)
2351 default: 2351 default:
2352 ASSERT_NOT_REACHED(); 2352 NOTREACHED();
2353 } 2353 }
2354 2354
2355 #undef FORMATCONVERTER_CASE_DSTFORMAT 2355 #undef FORMATCONVERTER_CASE_DSTFORMAT
2356 } 2356 }
2357 2357
2358 template <WebGLImageConversion::DataFormat SrcFormat, 2358 template <WebGLImageConversion::DataFormat SrcFormat,
2359 WebGLImageConversion::DataFormat DstFormat> 2359 WebGLImageConversion::DataFormat DstFormat>
2360 void FormatConverter::convert(WebGLImageConversion::AlphaOp alphaOp) { 2360 void FormatConverter::convert(WebGLImageConversion::AlphaOp alphaOp) {
2361 #define FORMATCONVERTER_CASE_ALPHAOP(alphaOp) \ 2361 #define FORMATCONVERTER_CASE_ALPHAOP(alphaOp) \
2362 case alphaOp: \ 2362 case alphaOp: \
2363 return convert<SrcFormat, DstFormat, alphaOp>(); 2363 return convert<SrcFormat, DstFormat, alphaOp>();
2364 2364
2365 switch (alphaOp) { 2365 switch (alphaOp) {
2366 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::AlphaDoNothing) 2366 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::AlphaDoNothing)
2367 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::AlphaDoPremultiply) 2367 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::AlphaDoPremultiply)
2368 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::AlphaDoUnmultiply) 2368 FORMATCONVERTER_CASE_ALPHAOP(WebGLImageConversion::AlphaDoUnmultiply)
2369 default: 2369 default:
2370 ASSERT_NOT_REACHED(); 2370 NOTREACHED();
2371 } 2371 }
2372 #undef FORMATCONVERTER_CASE_ALPHAOP 2372 #undef FORMATCONVERTER_CASE_ALPHAOP
2373 } 2373 }
2374 2374
2375 template <int Format> 2375 template <int Format>
2376 struct SupportsConversionFromDomElements { 2376 struct SupportsConversionFromDomElements {
2377 STATIC_ONLY(SupportsConversionFromDomElements); 2377 STATIC_ONLY(SupportsConversionFromDomElements);
2378 static const bool value = 2378 static const bool value =
2379 Format == WebGLImageConversion::DataFormatRGBA8 || 2379 Format == WebGLImageConversion::DataFormatRGBA8 ||
2380 Format == WebGLImageConversion::DataFormatRGB8 || 2380 Format == WebGLImageConversion::DataFormatRGB8 ||
(...skipping 16 matching lines...) Expand all
2397 }; 2397 };
2398 2398
2399 template <WebGLImageConversion::DataFormat SrcFormat, 2399 template <WebGLImageConversion::DataFormat SrcFormat,
2400 WebGLImageConversion::DataFormat DstFormat, 2400 WebGLImageConversion::DataFormat DstFormat,
2401 WebGLImageConversion::AlphaOp alphaOp> 2401 WebGLImageConversion::AlphaOp alphaOp>
2402 void FormatConverter::convert() { 2402 void FormatConverter::convert() {
2403 // Many instantiations of this template function will never be entered, so we 2403 // Many instantiations of this template function will never be entered, so we
2404 // try to return immediately in these cases to avoid generating useless code. 2404 // try to return immediately in these cases to avoid generating useless code.
2405 if (SrcFormat == DstFormat && 2405 if (SrcFormat == DstFormat &&
2406 alphaOp == WebGLImageConversion::AlphaDoNothing) { 2406 alphaOp == WebGLImageConversion::AlphaDoNothing) {
2407 ASSERT_NOT_REACHED(); 2407 NOTREACHED();
2408 return; 2408 return;
2409 } 2409 }
2410 if (!IsFloatFormat<DstFormat>::value && IsFloatFormat<SrcFormat>::value) { 2410 if (!IsFloatFormat<DstFormat>::value && IsFloatFormat<SrcFormat>::value) {
2411 ASSERT_NOT_REACHED(); 2411 NOTREACHED();
2412 return; 2412 return;
2413 } 2413 }
2414 2414
2415 // Only textures uploaded from DOM elements or ImageData can allow DstFormat 2415 // Only textures uploaded from DOM elements or ImageData can allow DstFormat
2416 // != SrcFormat. 2416 // != SrcFormat.
2417 const bool srcFormatComesFromDOMElementOrImageData = 2417 const bool srcFormatComesFromDOMElementOrImageData =
2418 WebGLImageConversion::srcFormatComeFromDOMElementOrImageData(SrcFormat); 2418 WebGLImageConversion::srcFormatComeFromDOMElementOrImageData(SrcFormat);
2419 if (!srcFormatComesFromDOMElementOrImageData && SrcFormat != DstFormat) { 2419 if (!srcFormatComesFromDOMElementOrImageData && SrcFormat != DstFormat) {
2420 ASSERT_NOT_REACHED(); 2420 NOTREACHED();
2421 return; 2421 return;
2422 } 2422 }
2423 // Likewise, only textures uploaded from DOM elements or ImageData can 2423 // Likewise, only textures uploaded from DOM elements or ImageData can
2424 // possibly need to be unpremultiplied. 2424 // possibly need to be unpremultiplied.
2425 if (!srcFormatComesFromDOMElementOrImageData && 2425 if (!srcFormatComesFromDOMElementOrImageData &&
2426 alphaOp == WebGLImageConversion::AlphaDoUnmultiply) { 2426 alphaOp == WebGLImageConversion::AlphaDoUnmultiply) {
2427 ASSERT_NOT_REACHED(); 2427 NOTREACHED();
2428 return; 2428 return;
2429 } 2429 }
2430 if (srcFormatComesFromDOMElementOrImageData && 2430 if (srcFormatComesFromDOMElementOrImageData &&
2431 alphaOp == WebGLImageConversion::AlphaDoUnmultiply && 2431 alphaOp == WebGLImageConversion::AlphaDoUnmultiply &&
2432 !SupportsConversionFromDomElements<DstFormat>::value) { 2432 !SupportsConversionFromDomElements<DstFormat>::value) {
2433 ASSERT_NOT_REACHED(); 2433 NOTREACHED();
2434 return; 2434 return;
2435 } 2435 }
2436 if ((!HasAlpha(SrcFormat) || !HasColor(SrcFormat) || !HasColor(DstFormat)) && 2436 if ((!HasAlpha(SrcFormat) || !HasColor(SrcFormat) || !HasColor(DstFormat)) &&
2437 alphaOp != WebGLImageConversion::AlphaDoNothing) { 2437 alphaOp != WebGLImageConversion::AlphaDoNothing) {
2438 ASSERT_NOT_REACHED(); 2438 NOTREACHED();
2439 return; 2439 return;
2440 } 2440 }
2441 // If converting DOM element data to UNSIGNED_INT_5_9_9_9_REV or 2441 // If converting DOM element data to UNSIGNED_INT_5_9_9_9_REV or
2442 // UNSIGNED_INT_10F_11F_11F_REV, we should always switch to FLOAT instead to 2442 // UNSIGNED_INT_10F_11F_11F_REV, we should always switch to FLOAT instead to
2443 // avoid unpacking/packing these two types. 2443 // avoid unpacking/packing these two types.
2444 if (srcFormatComesFromDOMElementOrImageData && SrcFormat != DstFormat && 2444 if (srcFormatComesFromDOMElementOrImageData && SrcFormat != DstFormat &&
2445 (DstFormat == WebGLImageConversion::DataFormatRGB5999 || 2445 (DstFormat == WebGLImageConversion::DataFormatRGB5999 ||
2446 DstFormat == WebGLImageConversion::DataFormatRGB10F11F11F)) { 2446 DstFormat == WebGLImageConversion::DataFormatRGB10F11F11F)) {
2447 ASSERT_NOT_REACHED(); 2447 NOTREACHED();
2448 return; 2448 return;
2449 } 2449 }
2450 2450
2451 typedef typename DataTypeForFormat<SrcFormat>::Type SrcType; 2451 typedef typename DataTypeForFormat<SrcFormat>::Type SrcType;
2452 typedef typename DataTypeForFormat<DstFormat>::Type DstType; 2452 typedef typename DataTypeForFormat<DstFormat>::Type DstType;
2453 const int IntermFormat = IntermediateFormat<DstFormat>::value; 2453 const int IntermFormat = IntermediateFormat<DstFormat>::value;
2454 typedef typename DataTypeForFormat<IntermFormat>::Type IntermType; 2454 typedef typename DataTypeForFormat<IntermFormat>::Type IntermType;
2455 const ptrdiff_t srcStrideInElements = m_srcStride / sizeof(SrcType); 2455 const ptrdiff_t srcStrideInElements = m_srcStride / sizeof(SrcType);
2456 const ptrdiff_t dstStrideInElements = m_dstStride / sizeof(DstType); 2456 const ptrdiff_t dstStrideInElements = m_dstStride / sizeof(DstType);
2457 const bool trivialUnpack = SrcFormat == IntermFormat; 2457 const bool trivialUnpack = SrcFormat == IntermFormat;
2458 const bool trivialPack = DstFormat == IntermFormat && 2458 const bool trivialPack = DstFormat == IntermFormat &&
2459 alphaOp == WebGLImageConversion::AlphaDoNothing; 2459 alphaOp == WebGLImageConversion::AlphaDoNothing;
2460 ASSERT(!trivialUnpack || !trivialPack); 2460 DCHECK(!trivialUnpack || !trivialPack);
2461 2461
2462 const SrcType* srcRowStart = 2462 const SrcType* srcRowStart =
2463 static_cast<const SrcType*>(static_cast<const void*>( 2463 static_cast<const SrcType*>(static_cast<const void*>(
2464 static_cast<const uint8_t*>(m_srcStart) + 2464 static_cast<const uint8_t*>(m_srcStart) +
2465 ((m_srcStride * m_srcSubRectangle.y()) + m_srcRowOffset))); 2465 ((m_srcStride * m_srcSubRectangle.y()) + m_srcRowOffset)));
2466 2466
2467 // If packing multiple images into a 3D texture, and flipY is true, 2467 // If packing multiple images into a 3D texture, and flipY is true,
2468 // then the sub-rectangle is pointing at the start of the 2468 // then the sub-rectangle is pointing at the start of the
2469 // "bottommost" of those images. Since the source pointer strides in 2469 // "bottommost" of those images. Since the source pointer strides in
2470 // the positive direction, we need to back it up to point at the 2470 // the positive direction, we need to back it up to point at the
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
2611 GLenum WebGLImageConversion::computeImageSizeInBytes( 2611 GLenum WebGLImageConversion::computeImageSizeInBytes(
2612 GLenum format, 2612 GLenum format,
2613 GLenum type, 2613 GLenum type,
2614 GLsizei width, 2614 GLsizei width,
2615 GLsizei height, 2615 GLsizei height,
2616 GLsizei depth, 2616 GLsizei depth,
2617 const PixelStoreParams& params, 2617 const PixelStoreParams& params,
2618 unsigned* imageSizeInBytes, 2618 unsigned* imageSizeInBytes,
2619 unsigned* paddingInBytes, 2619 unsigned* paddingInBytes,
2620 unsigned* skipSizeInBytes) { 2620 unsigned* skipSizeInBytes) {
2621 ASSERT(imageSizeInBytes); 2621 DCHECK(imageSizeInBytes);
2622 ASSERT(params.alignment == 1 || params.alignment == 2 || 2622 DCHECK(params.alignment == 1 || params.alignment == 2 ||
2623 params.alignment == 4 || params.alignment == 8); 2623 params.alignment == 4 || params.alignment == 8);
2624 ASSERT(params.rowLength >= 0 && params.imageHeight >= 0); 2624 DCHECK(params.rowLength >= 0 && params.imageHeight >= 0);
tkent 2017/04/09 23:17:27 Split this into two DCHECKs.
Hwanseung Lee 2017/04/11 22:24:10 Done.
2625 ASSERT(params.skipPixels >= 0 && params.skipRows >= 0 && 2625 DCHECK(params.skipPixels >= 0 && params.skipRows >= 0 &&
tkent 2017/04/09 23:17:27 Split this into three DCHECKs.
Hwanseung Lee 2017/04/11 22:24:10 Done.
2626 params.skipImages >= 0); 2626 params.skipImages >= 0);
2627 if (width < 0 || height < 0 || depth < 0) 2627 if (width < 0 || height < 0 || depth < 0)
2628 return GL_INVALID_VALUE; 2628 return GL_INVALID_VALUE;
2629 if (!width || !height || !depth) { 2629 if (!width || !height || !depth) {
2630 *imageSizeInBytes = 0; 2630 *imageSizeInBytes = 0;
2631 if (paddingInBytes) 2631 if (paddingInBytes)
2632 *paddingInBytes = 0; 2632 *paddingInBytes = 0;
2633 if (skipSizeInBytes) 2633 if (skipSizeInBytes)
2634 *skipSizeInBytes = 0; 2634 *skipSizeInBytes = 0;
2635 return GL_NO_ERROR; 2635 return GL_NO_ERROR;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
2727 ImageHtmlDomSource imageHtmlDomSource, 2727 ImageHtmlDomSource imageHtmlDomSource,
2728 bool premultiplyAlpha, 2728 bool premultiplyAlpha,
2729 bool ignoreColorSpace) { 2729 bool ignoreColorSpace) {
2730 m_image = image; 2730 m_image = image;
2731 m_imageHtmlDomSource = imageHtmlDomSource; 2731 m_imageHtmlDomSource = imageHtmlDomSource;
2732 extractImage(premultiplyAlpha, ignoreColorSpace); 2732 extractImage(premultiplyAlpha, ignoreColorSpace);
2733 } 2733 }
2734 2734
2735 void WebGLImageConversion::ImageExtractor::extractImage(bool premultiplyAlpha, 2735 void WebGLImageConversion::ImageExtractor::extractImage(bool premultiplyAlpha,
2736 bool ignoreColorSpace) { 2736 bool ignoreColorSpace) {
2737 ASSERT(!m_imagePixelLocker); 2737 DCHECK(!m_imagePixelLocker);
2738 2738
2739 if (!m_image) 2739 if (!m_image)
2740 return; 2740 return;
2741 2741
2742 sk_sp<SkImage> skiaImage = m_image->imageForCurrentFrame(); 2742 sk_sp<SkImage> skiaImage = m_image->imageForCurrentFrame();
2743 SkImageInfo info = skiaImage ? SkImageInfo::MakeN32Premul(m_image->width(), 2743 SkImageInfo info = skiaImage ? SkImageInfo::MakeN32Premul(m_image->width(),
2744 m_image->height()) 2744 m_image->height())
2745 : SkImageInfo::MakeUnknown(); 2745 : SkImageInfo::MakeUnknown();
2746 m_alphaOp = AlphaDoNothing; 2746 m_alphaOp = AlphaDoNothing;
2747 bool hasAlpha = skiaImage ? !skiaImage->isOpaque() : true; 2747 bool hasAlpha = skiaImage ? !skiaImage->isOpaque() : true;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2783 m_alphaOp = AlphaDoUnmultiply; 2783 m_alphaOp = AlphaDoUnmultiply;
2784 } 2784 }
2785 2785
2786 if (!skiaImage) 2786 if (!skiaImage)
2787 return; 2787 return;
2788 2788
2789 m_imageSourceFormat = SK_B32_SHIFT ? DataFormatRGBA8 : DataFormatBGRA8; 2789 m_imageSourceFormat = SK_B32_SHIFT ? DataFormatRGBA8 : DataFormatBGRA8;
2790 m_imageSourceUnpackAlignment = 2790 m_imageSourceUnpackAlignment =
2791 0; // FIXME: this seems to always be zero - why use at all? 2791 0; // FIXME: this seems to always be zero - why use at all?
2792 2792
2793 ASSERT(skiaImage->width() && skiaImage->height()); 2793 DCHECK(skiaImage->width() && skiaImage->height());
tkent 2017/04/09 23:17:27 Split this into two DCHECKs.
Hwanseung Lee 2017/04/11 22:24:10 Done.
2794 m_imageWidth = skiaImage->width(); 2794 m_imageWidth = skiaImage->width();
2795 m_imageHeight = skiaImage->height(); 2795 m_imageHeight = skiaImage->height();
2796 2796
2797 // Fail if the image was downsampled because of memory limits. 2797 // Fail if the image was downsampled because of memory limits.
2798 if (m_imageWidth != (unsigned)m_image->width() || 2798 if (m_imageWidth != (unsigned)m_image->width() ||
2799 m_imageHeight != (unsigned)m_image->height()) 2799 m_imageHeight != (unsigned)m_image->height())
2800 return; 2800 return;
2801 2801
2802 m_imagePixelLocker.emplace(std::move(skiaImage), info.alphaType(), 2802 m_imagePixelLocker.emplace(std::move(skiaImage), info.alphaType(),
2803 kN32_SkColorType); 2803 kN32_SkColorType);
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
3168 pack<WebGLImageConversion::DataFormatRGB565, 3168 pack<WebGLImageConversion::DataFormatRGB565,
3169 WebGLImageConversion::AlphaDoNothing>(srcRowStart, dstRowStart, 3169 WebGLImageConversion::AlphaDoNothing>(srcRowStart, dstRowStart,
3170 pixelsPerRow); 3170 pixelsPerRow);
3171 } break; 3171 } break;
3172 default: 3172 default:
3173 break; 3173 break;
3174 } 3174 }
3175 } 3175 }
3176 3176
3177 } // namespace blink 3177 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698