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

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

Issue 207783002: Omit "int" when using "unsigned" modifier (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 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 "config.h" 5 #include "config.h"
6 #include "platform/graphics/gpu/WebGLImageConversion.h" 6 #include "platform/graphics/gpu/WebGLImageConversion.h"
7 7
8 #include "platform/CheckedInt.h" 8 #include "platform/CheckedInt.h"
9 #include "platform/graphics/ImageObserver.h" 9 #include "platform/graphics/ImageObserver.h"
10 #include "platform/graphics/cpu/arm/WebGLImageConversionNEON.h" 10 #include "platform/graphics/cpu/arm/WebGLImageConversionNEON.h"
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 //---------------------------------------------------------------------- 230 //----------------------------------------------------------------------
231 // Pixel unpacking routines. 231 // Pixel unpacking routines.
232 template<int format, typename SourceType, typename DstType> 232 template<int format, typename SourceType, typename DstType>
233 void unpack(const SourceType*, DstType*, unsigned) 233 void unpack(const SourceType*, DstType*, unsigned)
234 { 234 {
235 ASSERT_NOT_REACHED(); 235 ASSERT_NOT_REACHED();
236 } 236 }
237 237
238 template<> void unpack<WebGLImageConversion::DataFormatRGB8, uint8_t, uint8_t>(c onst uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 238 template<> void unpack<WebGLImageConversion::DataFormatRGB8, uint8_t, uint8_t>(c onst uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
239 { 239 {
240 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 240 for (unsigned i = 0; i < pixelsPerRow; ++i) {
241 destination[0] = source[0]; 241 destination[0] = source[0];
242 destination[1] = source[1]; 242 destination[1] = source[1];
243 destination[2] = source[2]; 243 destination[2] = source[2];
244 destination[3] = 0xFF; 244 destination[3] = 0xFF;
245 source += 3; 245 source += 3;
246 destination += 4; 246 destination += 4;
247 } 247 }
248 } 248 }
249 249
250 template<> void unpack<WebGLImageConversion::DataFormatBGR8, uint8_t, uint8_t>(c onst uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 250 template<> void unpack<WebGLImageConversion::DataFormatBGR8, uint8_t, uint8_t>(c onst uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
251 { 251 {
252 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 252 for (unsigned i = 0; i < pixelsPerRow; ++i) {
253 destination[0] = source[2]; 253 destination[0] = source[2];
254 destination[1] = source[1]; 254 destination[1] = source[1];
255 destination[2] = source[0]; 255 destination[2] = source[0];
256 destination[3] = 0xFF; 256 destination[3] = 0xFF;
257 source += 3; 257 source += 3;
258 destination += 4; 258 destination += 4;
259 } 259 }
260 } 260 }
261 261
262 template<> void unpack<WebGLImageConversion::DataFormatARGB8, uint8_t, uint8_t>( const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 262 template<> void unpack<WebGLImageConversion::DataFormatARGB8, uint8_t, uint8_t>( const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
263 { 263 {
264 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 264 for (unsigned i = 0; i < pixelsPerRow; ++i) {
265 destination[0] = source[1]; 265 destination[0] = source[1];
266 destination[1] = source[2]; 266 destination[1] = source[2];
267 destination[2] = source[3]; 267 destination[2] = source[3];
268 destination[3] = source[0]; 268 destination[3] = source[0];
269 source += 4; 269 source += 4;
270 destination += 4; 270 destination += 4;
271 } 271 }
272 } 272 }
273 273
274 template<> void unpack<WebGLImageConversion::DataFormatABGR8, uint8_t, uint8_t>( const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 274 template<> void unpack<WebGLImageConversion::DataFormatABGR8, uint8_t, uint8_t>( const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
275 { 275 {
276 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 276 for (unsigned i = 0; i < pixelsPerRow; ++i) {
277 destination[0] = source[3]; 277 destination[0] = source[3];
278 destination[1] = source[2]; 278 destination[1] = source[2];
279 destination[2] = source[1]; 279 destination[2] = source[1];
280 destination[3] = source[0]; 280 destination[3] = source[0];
281 source += 4; 281 source += 4;
282 destination += 4; 282 destination += 4;
283 } 283 }
284 } 284 }
285 285
286 template<> void unpack<WebGLImageConversion::DataFormatBGRA8, uint8_t, uint8_t>( const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 286 template<> void unpack<WebGLImageConversion::DataFormatBGRA8, uint8_t, uint8_t>( const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
287 { 287 {
288 const uint32_t* source32 = reinterpret_cast_ptr<const uint32_t*>(source); 288 const uint32_t* source32 = reinterpret_cast_ptr<const uint32_t*>(source);
289 uint32_t* destination32 = reinterpret_cast_ptr<uint32_t*>(destination); 289 uint32_t* destination32 = reinterpret_cast_ptr<uint32_t*>(destination);
290 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 290 for (unsigned i = 0; i < pixelsPerRow; ++i) {
291 uint32_t bgra = source32[i]; 291 uint32_t bgra = source32[i];
292 #if CPU(BIG_ENDIAN) 292 #if CPU(BIG_ENDIAN)
293 uint32_t brMask = 0xff00ff00; 293 uint32_t brMask = 0xff00ff00;
294 uint32_t gaMask = 0x00ff00ff; 294 uint32_t gaMask = 0x00ff00ff;
295 #else 295 #else
296 uint32_t brMask = 0x00ff00ff; 296 uint32_t brMask = 0x00ff00ff;
297 uint32_t gaMask = 0xff00ff00; 297 uint32_t gaMask = 0xff00ff00;
298 #endif 298 #endif
299 uint32_t rgba = (((bgra >> 16) | (bgra << 16)) & brMask) | (bgra & gaMas k); 299 uint32_t rgba = (((bgra >> 16) | (bgra << 16)) & brMask) | (bgra & gaMas k);
300 destination32[i] = rgba; 300 destination32[i] = rgba;
301 } 301 }
302 } 302 }
303 303
304 template<> void unpack<WebGLImageConversion::DataFormatRGBA5551, uint16_t, uint8 _t>(const uint16_t* source, uint8_t* destination, unsigned pixelsPerRow) 304 template<> void unpack<WebGLImageConversion::DataFormatRGBA5551, uint16_t, uint8 _t>(const uint16_t* source, uint8_t* destination, unsigned pixelsPerRow)
305 { 305 {
306 #if HAVE(ARM_NEON_INTRINSICS) 306 #if HAVE(ARM_NEON_INTRINSICS)
307 SIMD::unpackOneRowOfRGBA5551ToRGBA8(source, destination, pixelsPerRow); 307 SIMD::unpackOneRowOfRGBA5551ToRGBA8(source, destination, pixelsPerRow);
308 #endif 308 #endif
309 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 309 for (unsigned i = 0; i < pixelsPerRow; ++i) {
310 uint16_t packedValue = source[0]; 310 uint16_t packedValue = source[0];
311 uint8_t r = packedValue >> 11; 311 uint8_t r = packedValue >> 11;
312 uint8_t g = (packedValue >> 6) & 0x1F; 312 uint8_t g = (packedValue >> 6) & 0x1F;
313 uint8_t b = (packedValue >> 1) & 0x1F; 313 uint8_t b = (packedValue >> 1) & 0x1F;
314 destination[0] = (r << 3) | (r & 0x7); 314 destination[0] = (r << 3) | (r & 0x7);
315 destination[1] = (g << 3) | (g & 0x7); 315 destination[1] = (g << 3) | (g & 0x7);
316 destination[2] = (b << 3) | (b & 0x7); 316 destination[2] = (b << 3) | (b & 0x7);
317 destination[3] = (packedValue & 0x1) ? 0xFF : 0x0; 317 destination[3] = (packedValue & 0x1) ? 0xFF : 0x0;
318 source += 1; 318 source += 1;
319 destination += 4; 319 destination += 4;
320 } 320 }
321 } 321 }
322 322
323 template<> void unpack<WebGLImageConversion::DataFormatRGBA4444, uint16_t, uint8 _t>(const uint16_t* source, uint8_t* destination, unsigned pixelsPerRow) 323 template<> void unpack<WebGLImageConversion::DataFormatRGBA4444, uint16_t, uint8 _t>(const uint16_t* source, uint8_t* destination, unsigned pixelsPerRow)
324 { 324 {
325 #if HAVE(ARM_NEON_INTRINSICS) 325 #if HAVE(ARM_NEON_INTRINSICS)
326 SIMD::unpackOneRowOfRGBA4444ToRGBA8(source, destination, pixelsPerRow); 326 SIMD::unpackOneRowOfRGBA4444ToRGBA8(source, destination, pixelsPerRow);
327 #endif 327 #endif
328 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 328 for (unsigned i = 0; i < pixelsPerRow; ++i) {
329 uint16_t packedValue = source[0]; 329 uint16_t packedValue = source[0];
330 uint8_t r = packedValue >> 12; 330 uint8_t r = packedValue >> 12;
331 uint8_t g = (packedValue >> 8) & 0x0F; 331 uint8_t g = (packedValue >> 8) & 0x0F;
332 uint8_t b = (packedValue >> 4) & 0x0F; 332 uint8_t b = (packedValue >> 4) & 0x0F;
333 uint8_t a = packedValue & 0x0F; 333 uint8_t a = packedValue & 0x0F;
334 destination[0] = r << 4 | r; 334 destination[0] = r << 4 | r;
335 destination[1] = g << 4 | g; 335 destination[1] = g << 4 | g;
336 destination[2] = b << 4 | b; 336 destination[2] = b << 4 | b;
337 destination[3] = a << 4 | a; 337 destination[3] = a << 4 | a;
338 source += 1; 338 source += 1;
339 destination += 4; 339 destination += 4;
340 } 340 }
341 } 341 }
342 342
343 template<> void unpack<WebGLImageConversion::DataFormatRGB565, uint16_t, uint8_t >(const uint16_t* source, uint8_t* destination, unsigned pixelsPerRow) 343 template<> void unpack<WebGLImageConversion::DataFormatRGB565, uint16_t, uint8_t >(const uint16_t* source, uint8_t* destination, unsigned pixelsPerRow)
344 { 344 {
345 #if HAVE(ARM_NEON_INTRINSICS) 345 #if HAVE(ARM_NEON_INTRINSICS)
346 SIMD::unpackOneRowOfRGB565ToRGBA8(source, destination, pixelsPerRow); 346 SIMD::unpackOneRowOfRGB565ToRGBA8(source, destination, pixelsPerRow);
347 #endif 347 #endif
348 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 348 for (unsigned i = 0; i < pixelsPerRow; ++i) {
349 uint16_t packedValue = source[0]; 349 uint16_t packedValue = source[0];
350 uint8_t r = packedValue >> 11; 350 uint8_t r = packedValue >> 11;
351 uint8_t g = (packedValue >> 5) & 0x3F; 351 uint8_t g = (packedValue >> 5) & 0x3F;
352 uint8_t b = packedValue & 0x1F; 352 uint8_t b = packedValue & 0x1F;
353 destination[0] = (r << 3) | (r & 0x7); 353 destination[0] = (r << 3) | (r & 0x7);
354 destination[1] = (g << 2) | (g & 0x3); 354 destination[1] = (g << 2) | (g & 0x3);
355 destination[2] = (b << 3) | (b & 0x7); 355 destination[2] = (b << 3) | (b & 0x7);
356 destination[3] = 0xFF; 356 destination[3] = 0xFF;
357 source += 1; 357 source += 1;
358 destination += 4; 358 destination += 4;
359 } 359 }
360 } 360 }
361 361
362 template<> void unpack<WebGLImageConversion::DataFormatR8, uint8_t, uint8_t>(con st uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 362 template<> void unpack<WebGLImageConversion::DataFormatR8, uint8_t, uint8_t>(con st uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
363 { 363 {
364 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 364 for (unsigned i = 0; i < pixelsPerRow; ++i) {
365 destination[0] = source[0]; 365 destination[0] = source[0];
366 destination[1] = source[0]; 366 destination[1] = source[0];
367 destination[2] = source[0]; 367 destination[2] = source[0];
368 destination[3] = 0xFF; 368 destination[3] = 0xFF;
369 source += 1; 369 source += 1;
370 destination += 4; 370 destination += 4;
371 } 371 }
372 } 372 }
373 373
374 template<> void unpack<WebGLImageConversion::DataFormatRA8, uint8_t, uint8_t>(co nst uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 374 template<> void unpack<WebGLImageConversion::DataFormatRA8, uint8_t, uint8_t>(co nst uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
375 { 375 {
376 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 376 for (unsigned i = 0; i < pixelsPerRow; ++i) {
377 destination[0] = source[0]; 377 destination[0] = source[0];
378 destination[1] = source[0]; 378 destination[1] = source[0];
379 destination[2] = source[0]; 379 destination[2] = source[0];
380 destination[3] = source[1]; 380 destination[3] = source[1];
381 source += 2; 381 source += 2;
382 destination += 4; 382 destination += 4;
383 } 383 }
384 } 384 }
385 385
386 template<> void unpack<WebGLImageConversion::DataFormatAR8, uint8_t, uint8_t>(co nst uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 386 template<> void unpack<WebGLImageConversion::DataFormatAR8, uint8_t, uint8_t>(co nst uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
387 { 387 {
388 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 388 for (unsigned i = 0; i < pixelsPerRow; ++i) {
389 destination[0] = source[1]; 389 destination[0] = source[1];
390 destination[1] = source[1]; 390 destination[1] = source[1];
391 destination[2] = source[1]; 391 destination[2] = source[1];
392 destination[3] = source[0]; 392 destination[3] = source[0];
393 source += 2; 393 source += 2;
394 destination += 4; 394 destination += 4;
395 } 395 }
396 } 396 }
397 397
398 template<> void unpack<WebGLImageConversion::DataFormatA8, uint8_t, uint8_t>(con st uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 398 template<> void unpack<WebGLImageConversion::DataFormatA8, uint8_t, uint8_t>(con st uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
399 { 399 {
400 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 400 for (unsigned i = 0; i < pixelsPerRow; ++i) {
401 destination[0] = 0x0; 401 destination[0] = 0x0;
402 destination[1] = 0x0; 402 destination[1] = 0x0;
403 destination[2] = 0x0; 403 destination[2] = 0x0;
404 destination[3] = source[0]; 404 destination[3] = source[0];
405 source += 1; 405 source += 1;
406 destination += 4; 406 destination += 4;
407 } 407 }
408 } 408 }
409 409
410 template<> void unpack<WebGLImageConversion::DataFormatRGBA8, uint8_t, float>(co nst uint8_t* source, float* destination, unsigned pixelsPerRow) 410 template<> void unpack<WebGLImageConversion::DataFormatRGBA8, uint8_t, float>(co nst uint8_t* source, float* destination, unsigned pixelsPerRow)
411 { 411 {
412 const float scaleFactor = 1.0f / 255.0f; 412 const float scaleFactor = 1.0f / 255.0f;
413 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 413 for (unsigned i = 0; i < pixelsPerRow; ++i) {
414 destination[0] = source[0] * scaleFactor; 414 destination[0] = source[0] * scaleFactor;
415 destination[1] = source[1] * scaleFactor; 415 destination[1] = source[1] * scaleFactor;
416 destination[2] = source[2] * scaleFactor; 416 destination[2] = source[2] * scaleFactor;
417 destination[3] = source[3] * scaleFactor; 417 destination[3] = source[3] * scaleFactor;
418 source += 4; 418 source += 4;
419 destination += 4; 419 destination += 4;
420 } 420 }
421 } 421 }
422 422
423 template<> void unpack<WebGLImageConversion::DataFormatBGRA8, uint8_t, float>(co nst uint8_t* source, float* destination, unsigned pixelsPerRow) 423 template<> void unpack<WebGLImageConversion::DataFormatBGRA8, uint8_t, float>(co nst uint8_t* source, float* destination, unsigned pixelsPerRow)
424 { 424 {
425 const float scaleFactor = 1.0f / 255.0f; 425 const float scaleFactor = 1.0f / 255.0f;
426 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 426 for (unsigned i = 0; i < pixelsPerRow; ++i) {
427 destination[0] = source[2] * scaleFactor; 427 destination[0] = source[2] * scaleFactor;
428 destination[1] = source[1] * scaleFactor; 428 destination[1] = source[1] * scaleFactor;
429 destination[2] = source[0] * scaleFactor; 429 destination[2] = source[0] * scaleFactor;
430 destination[3] = source[3] * scaleFactor; 430 destination[3] = source[3] * scaleFactor;
431 source += 4; 431 source += 4;
432 destination += 4; 432 destination += 4;
433 } 433 }
434 } 434 }
435 435
436 template<> void unpack<WebGLImageConversion::DataFormatABGR8, uint8_t, float>(co nst uint8_t* source, float* destination, unsigned pixelsPerRow) 436 template<> void unpack<WebGLImageConversion::DataFormatABGR8, uint8_t, float>(co nst uint8_t* source, float* destination, unsigned pixelsPerRow)
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 destination[1] = source[1] * scaleFactor; 480 destination[1] = source[1] * scaleFactor;
481 destination[2] = source[0] * scaleFactor; 481 destination[2] = source[0] * scaleFactor;
482 destination[3] = 1; 482 destination[3] = 1;
483 source += 3; 483 source += 3;
484 destination += 4; 484 destination += 4;
485 } 485 }
486 } 486 }
487 487
488 template<> void unpack<WebGLImageConversion::DataFormatRGB32F, float, float>(con st float* source, float* destination, unsigned pixelsPerRow) 488 template<> void unpack<WebGLImageConversion::DataFormatRGB32F, float, float>(con st float* source, float* destination, unsigned pixelsPerRow)
489 { 489 {
490 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 490 for (unsigned i = 0; i < pixelsPerRow; ++i) {
491 destination[0] = source[0]; 491 destination[0] = source[0];
492 destination[1] = source[1]; 492 destination[1] = source[1];
493 destination[2] = source[2]; 493 destination[2] = source[2];
494 destination[3] = 1; 494 destination[3] = 1;
495 source += 3; 495 source += 3;
496 destination += 4; 496 destination += 4;
497 } 497 }
498 } 498 }
499 499
500 template<> void unpack<WebGLImageConversion::DataFormatR32F, float, float>(const float* source, float* destination, unsigned pixelsPerRow) 500 template<> void unpack<WebGLImageConversion::DataFormatR32F, float, float>(const float* source, float* destination, unsigned pixelsPerRow)
501 { 501 {
502 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 502 for (unsigned i = 0; i < pixelsPerRow; ++i) {
503 destination[0] = source[0]; 503 destination[0] = source[0];
504 destination[1] = source[0]; 504 destination[1] = source[0];
505 destination[2] = source[0]; 505 destination[2] = source[0];
506 destination[3] = 1; 506 destination[3] = 1;
507 source += 1; 507 source += 1;
508 destination += 4; 508 destination += 4;
509 } 509 }
510 } 510 }
511 511
512 template<> void unpack<WebGLImageConversion::DataFormatRA32F, float, float>(cons t float* source, float* destination, unsigned pixelsPerRow) 512 template<> void unpack<WebGLImageConversion::DataFormatRA32F, float, float>(cons t float* source, float* destination, unsigned pixelsPerRow)
513 { 513 {
514 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 514 for (unsigned i = 0; i < pixelsPerRow; ++i) {
515 destination[0] = source[0]; 515 destination[0] = source[0];
516 destination[1] = source[0]; 516 destination[1] = source[0];
517 destination[2] = source[0]; 517 destination[2] = source[0];
518 destination[3] = source[1]; 518 destination[3] = source[1];
519 source += 2; 519 source += 2;
520 destination += 4; 520 destination += 4;
521 } 521 }
522 } 522 }
523 523
524 template<> void unpack<WebGLImageConversion::DataFormatA32F, float, float>(const float* source, float* destination, unsigned pixelsPerRow) 524 template<> void unpack<WebGLImageConversion::DataFormatA32F, float, float>(const float* source, float* destination, unsigned pixelsPerRow)
525 { 525 {
526 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 526 for (unsigned i = 0; i < pixelsPerRow; ++i) {
527 destination[0] = 0; 527 destination[0] = 0;
528 destination[1] = 0; 528 destination[1] = 0;
529 destination[2] = 0; 529 destination[2] = 0;
530 destination[3] = source[0]; 530 destination[3] = source[0];
531 source += 1; 531 source += 1;
532 destination += 4; 532 destination += 4;
533 } 533 }
534 } 534 }
535 535
536 //---------------------------------------------------------------------- 536 //----------------------------------------------------------------------
537 // Pixel packing routines. 537 // Pixel packing routines.
538 // 538 //
539 539
540 template<int format, int alphaOp, typename SourceType, typename DstType> 540 template<int format, int alphaOp, typename SourceType, typename DstType>
541 void pack(const SourceType*, DstType*, unsigned) 541 void pack(const SourceType*, DstType*, unsigned)
542 { 542 {
543 ASSERT_NOT_REACHED(); 543 ASSERT_NOT_REACHED();
544 } 544 }
545 545
546 template<> void pack<WebGLImageConversion::DataFormatA8, WebGLImageConversion::A lphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, un signed pixelsPerRow) 546 template<> void pack<WebGLImageConversion::DataFormatA8, WebGLImageConversion::A lphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, un signed pixelsPerRow)
547 { 547 {
548 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 548 for (unsigned i = 0; i < pixelsPerRow; ++i) {
549 destination[0] = source[3]; 549 destination[0] = source[3];
550 source += 4; 550 source += 4;
551 destination += 1; 551 destination += 1;
552 } 552 }
553 } 553 }
554 554
555 template<> void pack<WebGLImageConversion::DataFormatR8, WebGLImageConversion::A lphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, un signed pixelsPerRow) 555 template<> void pack<WebGLImageConversion::DataFormatR8, WebGLImageConversion::A lphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, un signed pixelsPerRow)
556 { 556 {
557 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 557 for (unsigned i = 0; i < pixelsPerRow; ++i) {
558 destination[0] = source[0]; 558 destination[0] = source[0];
559 source += 4; 559 source += 4;
560 destination += 1; 560 destination += 1;
561 } 561 }
562 } 562 }
563 563
564 template<> void pack<WebGLImageConversion::DataFormatR8, WebGLImageConversion::A lphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination , unsigned pixelsPerRow) 564 template<> void pack<WebGLImageConversion::DataFormatR8, WebGLImageConversion::A lphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination , unsigned pixelsPerRow)
565 { 565 {
566 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 566 for (unsigned i = 0; i < pixelsPerRow; ++i) {
567 float scaleFactor = source[3] / 255.0f; 567 float scaleFactor = source[3] / 255.0f;
568 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 568 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
569 destination[0] = sourceR; 569 destination[0] = sourceR;
570 source += 4; 570 source += 4;
571 destination += 1; 571 destination += 1;
572 } 572 }
573 } 573 }
574 574
575 // FIXME: this routine is lossy and must be removed. 575 // FIXME: this routine is lossy and must be removed.
576 template<> void pack<WebGLImageConversion::DataFormatR8, WebGLImageConversion::A lphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 576 template<> void pack<WebGLImageConversion::DataFormatR8, WebGLImageConversion::A lphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
577 { 577 {
578 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 578 for (unsigned i = 0; i < pixelsPerRow; ++i) {
579 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f; 579 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f;
580 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 580 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
581 destination[0] = sourceR; 581 destination[0] = sourceR;
582 source += 4; 582 source += 4;
583 destination += 1; 583 destination += 1;
584 } 584 }
585 } 585 }
586 586
587 template<> void pack<WebGLImageConversion::DataFormatRA8, WebGLImageConversion:: AlphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, u nsigned pixelsPerRow) 587 template<> void pack<WebGLImageConversion::DataFormatRA8, WebGLImageConversion:: AlphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, u nsigned pixelsPerRow)
588 { 588 {
589 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 589 for (unsigned i = 0; i < pixelsPerRow; ++i) {
590 destination[0] = source[0]; 590 destination[0] = source[0];
591 destination[1] = source[3]; 591 destination[1] = source[3];
592 source += 4; 592 source += 4;
593 destination += 2; 593 destination += 2;
594 } 594 }
595 } 595 }
596 596
597 template<> void pack<WebGLImageConversion::DataFormatRA8, WebGLImageConversion:: AlphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinatio n, unsigned pixelsPerRow) 597 template<> void pack<WebGLImageConversion::DataFormatRA8, WebGLImageConversion:: AlphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinatio n, unsigned pixelsPerRow)
598 { 598 {
599 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 599 for (unsigned i = 0; i < pixelsPerRow; ++i) {
600 float scaleFactor = source[3] / 255.0f; 600 float scaleFactor = source[3] / 255.0f;
601 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 601 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
602 destination[0] = sourceR; 602 destination[0] = sourceR;
603 destination[1] = source[3]; 603 destination[1] = source[3];
604 source += 4; 604 source += 4;
605 destination += 2; 605 destination += 2;
606 } 606 }
607 } 607 }
608 608
609 // FIXME: this routine is lossy and must be removed. 609 // FIXME: this routine is lossy and must be removed.
610 template<> void pack<WebGLImageConversion::DataFormatRA8, WebGLImageConversion:: AlphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination , unsigned pixelsPerRow) 610 template<> void pack<WebGLImageConversion::DataFormatRA8, WebGLImageConversion:: AlphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination , unsigned pixelsPerRow)
611 { 611 {
612 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 612 for (unsigned i = 0; i < pixelsPerRow; ++i) {
613 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f; 613 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f;
614 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 614 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
615 destination[0] = sourceR; 615 destination[0] = sourceR;
616 destination[1] = source[3]; 616 destination[1] = source[3];
617 source += 4; 617 source += 4;
618 destination += 2; 618 destination += 2;
619 } 619 }
620 } 620 }
621 621
622 template<> void pack<WebGLImageConversion::DataFormatRGB8, WebGLImageConversion: :AlphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 622 template<> void pack<WebGLImageConversion::DataFormatRGB8, WebGLImageConversion: :AlphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
623 { 623 {
624 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 624 for (unsigned i = 0; i < pixelsPerRow; ++i) {
625 destination[0] = source[0]; 625 destination[0] = source[0];
626 destination[1] = source[1]; 626 destination[1] = source[1];
627 destination[2] = source[2]; 627 destination[2] = source[2];
628 source += 4; 628 source += 4;
629 destination += 3; 629 destination += 3;
630 } 630 }
631 } 631 }
632 632
633 template<> void pack<WebGLImageConversion::DataFormatRGB8, WebGLImageConversion: :AlphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinati on, unsigned pixelsPerRow) 633 template<> void pack<WebGLImageConversion::DataFormatRGB8, WebGLImageConversion: :AlphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinati on, unsigned pixelsPerRow)
634 { 634 {
635 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 635 for (unsigned i = 0; i < pixelsPerRow; ++i) {
636 float scaleFactor = source[3] / 255.0f; 636 float scaleFactor = source[3] / 255.0f;
637 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 637 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
638 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 638 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
639 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 639 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
640 destination[0] = sourceR; 640 destination[0] = sourceR;
641 destination[1] = sourceG; 641 destination[1] = sourceG;
642 destination[2] = sourceB; 642 destination[2] = sourceB;
643 source += 4; 643 source += 4;
644 destination += 3; 644 destination += 3;
645 } 645 }
646 } 646 }
647 647
648 // FIXME: this routine is lossy and must be removed. 648 // FIXME: this routine is lossy and must be removed.
649 template<> void pack<WebGLImageConversion::DataFormatRGB8, WebGLImageConversion: :AlphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinatio n, unsigned pixelsPerRow) 649 template<> void pack<WebGLImageConversion::DataFormatRGB8, WebGLImageConversion: :AlphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinatio n, unsigned pixelsPerRow)
650 { 650 {
651 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 651 for (unsigned i = 0; i < pixelsPerRow; ++i) {
652 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f; 652 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f;
653 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 653 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
654 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 654 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
655 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 655 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
656 destination[0] = sourceR; 656 destination[0] = sourceR;
657 destination[1] = sourceG; 657 destination[1] = sourceG;
658 destination[2] = sourceB; 658 destination[2] = sourceB;
659 source += 4; 659 source += 4;
660 destination += 3; 660 destination += 3;
661 } 661 }
662 } 662 }
663 663
664 664
665 template<> void pack<WebGLImageConversion::DataFormatRGBA8, WebGLImageConversion ::AlphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow) 665 template<> void pack<WebGLImageConversion::DataFormatRGBA8, WebGLImageConversion ::AlphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
666 { 666 {
667 memcpy(destination, source, pixelsPerRow * 4); 667 memcpy(destination, source, pixelsPerRow * 4);
668 } 668 }
669 669
670 template<> void pack<WebGLImageConversion::DataFormatRGBA8, WebGLImageConversion ::AlphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinat ion, unsigned pixelsPerRow) 670 template<> void pack<WebGLImageConversion::DataFormatRGBA8, WebGLImageConversion ::AlphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinat ion, unsigned pixelsPerRow)
671 { 671 {
672 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 672 for (unsigned i = 0; i < pixelsPerRow; ++i) {
673 float scaleFactor = source[3] / 255.0f; 673 float scaleFactor = source[3] / 255.0f;
674 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 674 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
675 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 675 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
676 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 676 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
677 destination[0] = sourceR; 677 destination[0] = sourceR;
678 destination[1] = sourceG; 678 destination[1] = sourceG;
679 destination[2] = sourceB; 679 destination[2] = sourceB;
680 destination[3] = source[3]; 680 destination[3] = source[3];
681 source += 4; 681 source += 4;
682 destination += 4; 682 destination += 4;
683 } 683 }
684 } 684 }
685 685
686 // FIXME: this routine is lossy and must be removed. 686 // FIXME: this routine is lossy and must be removed.
687 template<> void pack<WebGLImageConversion::DataFormatRGBA8, WebGLImageConversion ::AlphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinati on, unsigned pixelsPerRow) 687 template<> void pack<WebGLImageConversion::DataFormatRGBA8, WebGLImageConversion ::AlphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destinati on, unsigned pixelsPerRow)
688 { 688 {
689 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 689 for (unsigned i = 0; i < pixelsPerRow; ++i) {
690 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f; 690 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f;
691 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 691 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
692 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 692 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
693 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 693 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
694 destination[0] = sourceR; 694 destination[0] = sourceR;
695 destination[1] = sourceG; 695 destination[1] = sourceG;
696 destination[2] = sourceB; 696 destination[2] = sourceB;
697 destination[3] = source[3]; 697 destination[3] = source[3];
698 source += 4; 698 source += 4;
699 destination += 4; 699 destination += 4;
700 } 700 }
701 } 701 }
702 702
703 template<> void pack<WebGLImageConversion::DataFormatRGBA4444, WebGLImageConvers ion::AlphaDoNothing, uint8_t, uint16_t>(const uint8_t* source, uint16_t* destina tion, unsigned pixelsPerRow) 703 template<> void pack<WebGLImageConversion::DataFormatRGBA4444, WebGLImageConvers ion::AlphaDoNothing, uint8_t, uint16_t>(const uint8_t* source, uint16_t* destina tion, unsigned pixelsPerRow)
704 { 704 {
705 #if HAVE(ARM_NEON_INTRINSICS) 705 #if HAVE(ARM_NEON_INTRINSICS)
706 SIMD::packOneRowOfRGBA8ToUnsignedShort4444(source, destination, pixelsPerRow ); 706 SIMD::packOneRowOfRGBA8ToUnsignedShort4444(source, destination, pixelsPerRow );
707 #endif 707 #endif
708 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 708 for (unsigned i = 0; i < pixelsPerRow; ++i) {
709 *destination = (((source[0] & 0xF0) << 8) 709 *destination = (((source[0] & 0xF0) << 8)
710 | ((source[1] & 0xF0) << 4) 710 | ((source[1] & 0xF0) << 4)
711 | (source[2] & 0xF0) 711 | (source[2] & 0xF0)
712 | (source[3] >> 4)); 712 | (source[3] >> 4));
713 source += 4; 713 source += 4;
714 destination += 1; 714 destination += 1;
715 } 715 }
716 } 716 }
717 717
718 template<> void pack<WebGLImageConversion::DataFormatRGBA4444, WebGLImageConvers ion::AlphaDoPremultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* des tination, unsigned pixelsPerRow) 718 template<> void pack<WebGLImageConversion::DataFormatRGBA4444, WebGLImageConvers ion::AlphaDoPremultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* des tination, unsigned pixelsPerRow)
719 { 719 {
720 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 720 for (unsigned i = 0; i < pixelsPerRow; ++i) {
721 float scaleFactor = source[3] / 255.0f; 721 float scaleFactor = source[3] / 255.0f;
722 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 722 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
723 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 723 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
724 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 724 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
725 *destination = (((sourceR & 0xF0) << 8) 725 *destination = (((sourceR & 0xF0) << 8)
726 | ((sourceG & 0xF0) << 4) 726 | ((sourceG & 0xF0) << 4)
727 | (sourceB & 0xF0) 727 | (sourceB & 0xF0)
728 | (source[3] >> 4)); 728 | (source[3] >> 4));
729 source += 4; 729 source += 4;
730 destination += 1; 730 destination += 1;
731 } 731 }
732 } 732 }
733 733
734 // FIXME: this routine is lossy and must be removed. 734 // FIXME: this routine is lossy and must be removed.
735 template<> void pack<WebGLImageConversion::DataFormatRGBA4444, WebGLImageConvers ion::AlphaDoUnmultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* dest ination, unsigned pixelsPerRow) 735 template<> void pack<WebGLImageConversion::DataFormatRGBA4444, WebGLImageConvers ion::AlphaDoUnmultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* dest ination, unsigned pixelsPerRow)
736 { 736 {
737 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 737 for (unsigned i = 0; i < pixelsPerRow; ++i) {
738 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f; 738 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f;
739 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 739 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
740 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 740 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
741 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 741 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
742 *destination = (((sourceR & 0xF0) << 8) 742 *destination = (((sourceR & 0xF0) << 8)
743 | ((sourceG & 0xF0) << 4) 743 | ((sourceG & 0xF0) << 4)
744 | (sourceB & 0xF0) 744 | (sourceB & 0xF0)
745 | (source[3] >> 4)); 745 | (source[3] >> 4));
746 source += 4; 746 source += 4;
747 destination += 1; 747 destination += 1;
748 } 748 }
749 } 749 }
750 750
751 template<> void pack<WebGLImageConversion::DataFormatRGBA5551, WebGLImageConvers ion::AlphaDoNothing, uint8_t, uint16_t>(const uint8_t* source, uint16_t* destina tion, unsigned pixelsPerRow) 751 template<> void pack<WebGLImageConversion::DataFormatRGBA5551, WebGLImageConvers ion::AlphaDoNothing, uint8_t, uint16_t>(const uint8_t* source, uint16_t* destina tion, unsigned pixelsPerRow)
752 { 752 {
753 #if HAVE(ARM_NEON_INTRINSICS) 753 #if HAVE(ARM_NEON_INTRINSICS)
754 SIMD::packOneRowOfRGBA8ToUnsignedShort5551(source, destination, pixelsPerRow ); 754 SIMD::packOneRowOfRGBA8ToUnsignedShort5551(source, destination, pixelsPerRow );
755 #endif 755 #endif
756 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 756 for (unsigned i = 0; i < pixelsPerRow; ++i) {
757 *destination = (((source[0] & 0xF8) << 8) 757 *destination = (((source[0] & 0xF8) << 8)
758 | ((source[1] & 0xF8) << 3) 758 | ((source[1] & 0xF8) << 3)
759 | ((source[2] & 0xF8) >> 2) 759 | ((source[2] & 0xF8) >> 2)
760 | (source[3] >> 7)); 760 | (source[3] >> 7));
761 source += 4; 761 source += 4;
762 destination += 1; 762 destination += 1;
763 } 763 }
764 } 764 }
765 765
766 template<> void pack<WebGLImageConversion::DataFormatRGBA5551, WebGLImageConvers ion::AlphaDoPremultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* des tination, unsigned pixelsPerRow) 766 template<> void pack<WebGLImageConversion::DataFormatRGBA5551, WebGLImageConvers ion::AlphaDoPremultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* des tination, unsigned pixelsPerRow)
767 { 767 {
768 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 768 for (unsigned i = 0; i < pixelsPerRow; ++i) {
769 float scaleFactor = source[3] / 255.0f; 769 float scaleFactor = source[3] / 255.0f;
770 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 770 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
771 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 771 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
772 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 772 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
773 *destination = (((sourceR & 0xF8) << 8) 773 *destination = (((sourceR & 0xF8) << 8)
774 | ((sourceG & 0xF8) << 3) 774 | ((sourceG & 0xF8) << 3)
775 | ((sourceB & 0xF8) >> 2) 775 | ((sourceB & 0xF8) >> 2)
776 | (source[3] >> 7)); 776 | (source[3] >> 7));
777 source += 4; 777 source += 4;
778 destination += 1; 778 destination += 1;
779 } 779 }
780 } 780 }
781 781
782 // FIXME: this routine is lossy and must be removed. 782 // FIXME: this routine is lossy and must be removed.
783 template<> void pack<WebGLImageConversion::DataFormatRGBA5551, WebGLImageConvers ion::AlphaDoUnmultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* dest ination, unsigned pixelsPerRow) 783 template<> void pack<WebGLImageConversion::DataFormatRGBA5551, WebGLImageConvers ion::AlphaDoUnmultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* dest ination, unsigned pixelsPerRow)
784 { 784 {
785 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 785 for (unsigned i = 0; i < pixelsPerRow; ++i) {
786 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f; 786 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f;
787 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 787 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
788 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 788 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
789 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 789 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
790 *destination = (((sourceR & 0xF8) << 8) 790 *destination = (((sourceR & 0xF8) << 8)
791 | ((sourceG & 0xF8) << 3) 791 | ((sourceG & 0xF8) << 3)
792 | ((sourceB & 0xF8) >> 2) 792 | ((sourceB & 0xF8) >> 2)
793 | (source[3] >> 7)); 793 | (source[3] >> 7));
794 source += 4; 794 source += 4;
795 destination += 1; 795 destination += 1;
796 } 796 }
797 } 797 }
798 798
799 template<> void pack<WebGLImageConversion::DataFormatRGB565, WebGLImageConversio n::AlphaDoNothing, uint8_t, uint16_t>(const uint8_t* source, uint16_t* destinati on, unsigned pixelsPerRow) 799 template<> void pack<WebGLImageConversion::DataFormatRGB565, WebGLImageConversio n::AlphaDoNothing, uint8_t, uint16_t>(const uint8_t* source, uint16_t* destinati on, unsigned pixelsPerRow)
800 { 800 {
801 #if HAVE(ARM_NEON_INTRINSICS) 801 #if HAVE(ARM_NEON_INTRINSICS)
802 SIMD::packOneRowOfRGBA8ToUnsignedShort565(source, destination, pixelsPerRow) ; 802 SIMD::packOneRowOfRGBA8ToUnsignedShort565(source, destination, pixelsPerRow) ;
803 #endif 803 #endif
804 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 804 for (unsigned i = 0; i < pixelsPerRow; ++i) {
805 *destination = (((source[0] & 0xF8) << 8) 805 *destination = (((source[0] & 0xF8) << 8)
806 | ((source[1] & 0xFC) << 3) 806 | ((source[1] & 0xFC) << 3)
807 | ((source[2] & 0xF8) >> 3)); 807 | ((source[2] & 0xF8) >> 3));
808 source += 4; 808 source += 4;
809 destination += 1; 809 destination += 1;
810 } 810 }
811 } 811 }
812 812
813 template<> void pack<WebGLImageConversion::DataFormatRGB565, WebGLImageConversio n::AlphaDoPremultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* desti nation, unsigned pixelsPerRow) 813 template<> void pack<WebGLImageConversion::DataFormatRGB565, WebGLImageConversio n::AlphaDoPremultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* desti nation, unsigned pixelsPerRow)
814 { 814 {
815 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 815 for (unsigned i = 0; i < pixelsPerRow; ++i) {
816 float scaleFactor = source[3] / 255.0f; 816 float scaleFactor = source[3] / 255.0f;
817 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 817 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
818 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 818 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
819 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 819 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
820 *destination = (((sourceR & 0xF8) << 8) 820 *destination = (((sourceR & 0xF8) << 8)
821 | ((sourceG & 0xFC) << 3) 821 | ((sourceG & 0xFC) << 3)
822 | ((sourceB & 0xF8) >> 3)); 822 | ((sourceB & 0xF8) >> 3));
823 source += 4; 823 source += 4;
824 destination += 1; 824 destination += 1;
825 } 825 }
826 } 826 }
827 827
828 // FIXME: this routine is lossy and must be removed. 828 // FIXME: this routine is lossy and must be removed.
829 template<> void pack<WebGLImageConversion::DataFormatRGB565, WebGLImageConversio n::AlphaDoUnmultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* destin ation, unsigned pixelsPerRow) 829 template<> void pack<WebGLImageConversion::DataFormatRGB565, WebGLImageConversio n::AlphaDoUnmultiply, uint8_t, uint16_t>(const uint8_t* source, uint16_t* destin ation, unsigned pixelsPerRow)
830 { 830 {
831 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 831 for (unsigned i = 0; i < pixelsPerRow; ++i) {
832 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f; 832 float scaleFactor = source[3] ? 255.0f / source[3] : 1.0f;
833 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor); 833 uint8_t sourceR = static_cast<uint8_t>(static_cast<float>(source[0]) * s caleFactor);
834 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor); 834 uint8_t sourceG = static_cast<uint8_t>(static_cast<float>(source[1]) * s caleFactor);
835 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor); 835 uint8_t sourceB = static_cast<uint8_t>(static_cast<float>(source[2]) * s caleFactor);
836 *destination = (((sourceR & 0xF8) << 8) 836 *destination = (((sourceR & 0xF8) << 8)
837 | ((sourceG & 0xFC) << 3) 837 | ((sourceG & 0xFC) << 3)
838 | ((sourceB & 0xF8) >> 3)); 838 | ((sourceB & 0xF8) >> 3));
839 source += 4; 839 source += 4;
840 destination += 1; 840 destination += 1;
841 } 841 }
842 } 842 }
843 843
844 template<> void pack<WebGLImageConversion::DataFormatRGB32F, WebGLImageConversio n::AlphaDoNothing, float, float>(const float* source, float* destination, unsign ed pixelsPerRow) 844 template<> void pack<WebGLImageConversion::DataFormatRGB32F, WebGLImageConversio n::AlphaDoNothing, float, float>(const float* source, float* destination, unsign ed pixelsPerRow)
845 { 845 {
846 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 846 for (unsigned i = 0; i < pixelsPerRow; ++i) {
847 destination[0] = source[0]; 847 destination[0] = source[0];
848 destination[1] = source[1]; 848 destination[1] = source[1];
849 destination[2] = source[2]; 849 destination[2] = source[2];
850 source += 4; 850 source += 4;
851 destination += 3; 851 destination += 3;
852 } 852 }
853 } 853 }
854 854
855 template<> void pack<WebGLImageConversion::DataFormatRGB32F, WebGLImageConversio n::AlphaDoPremultiply, float, float>(const float* source, float* destination, un signed pixelsPerRow) 855 template<> void pack<WebGLImageConversion::DataFormatRGB32F, WebGLImageConversio n::AlphaDoPremultiply, float, float>(const float* source, float* destination, un signed pixelsPerRow)
856 { 856 {
857 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 857 for (unsigned i = 0; i < pixelsPerRow; ++i) {
858 float scaleFactor = source[3]; 858 float scaleFactor = source[3];
859 destination[0] = source[0] * scaleFactor; 859 destination[0] = source[0] * scaleFactor;
860 destination[1] = source[1] * scaleFactor; 860 destination[1] = source[1] * scaleFactor;
861 destination[2] = source[2] * scaleFactor; 861 destination[2] = source[2] * scaleFactor;
862 source += 4; 862 source += 4;
863 destination += 3; 863 destination += 3;
864 } 864 }
865 } 865 }
866 866
867 template<> void pack<WebGLImageConversion::DataFormatRGB32F, WebGLImageConversio n::AlphaDoUnmultiply, float, float>(const float* source, float* destination, uns igned pixelsPerRow) 867 template<> void pack<WebGLImageConversion::DataFormatRGB32F, WebGLImageConversio n::AlphaDoUnmultiply, float, float>(const float* source, float* destination, uns igned pixelsPerRow)
868 { 868 {
869 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 869 for (unsigned i = 0; i < pixelsPerRow; ++i) {
870 float scaleFactor = source[3] ? 1.0f / source[3] : 1.0f; 870 float scaleFactor = source[3] ? 1.0f / source[3] : 1.0f;
871 destination[0] = source[0] * scaleFactor; 871 destination[0] = source[0] * scaleFactor;
872 destination[1] = source[1] * scaleFactor; 872 destination[1] = source[1] * scaleFactor;
873 destination[2] = source[2] * scaleFactor; 873 destination[2] = source[2] * scaleFactor;
874 source += 4; 874 source += 4;
875 destination += 3; 875 destination += 3;
876 } 876 }
877 } 877 }
878 878
879 // Used only during RGBA8 or BGRA8 -> floating-point uploads. 879 // Used only during RGBA8 or BGRA8 -> floating-point uploads.
880 template<> void pack<WebGLImageConversion::DataFormatRGBA32F, WebGLImageConversi on::AlphaDoNothing, float, float>(const float* source, float* destination, unsig ned pixelsPerRow) 880 template<> void pack<WebGLImageConversion::DataFormatRGBA32F, WebGLImageConversi on::AlphaDoNothing, float, float>(const float* source, float* destination, unsig ned pixelsPerRow)
881 { 881 {
882 memcpy(destination, source, pixelsPerRow * 4 * sizeof(float)); 882 memcpy(destination, source, pixelsPerRow * 4 * sizeof(float));
883 } 883 }
884 884
885 template<> void pack<WebGLImageConversion::DataFormatRGBA32F, WebGLImageConversi on::AlphaDoPremultiply, float, float>(const float* source, float* destination, u nsigned pixelsPerRow) 885 template<> void pack<WebGLImageConversion::DataFormatRGBA32F, WebGLImageConversi on::AlphaDoPremultiply, float, float>(const float* source, float* destination, u nsigned pixelsPerRow)
886 { 886 {
887 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 887 for (unsigned i = 0; i < pixelsPerRow; ++i) {
888 float scaleFactor = source[3]; 888 float scaleFactor = source[3];
889 destination[0] = source[0] * scaleFactor; 889 destination[0] = source[0] * scaleFactor;
890 destination[1] = source[1] * scaleFactor; 890 destination[1] = source[1] * scaleFactor;
891 destination[2] = source[2] * scaleFactor; 891 destination[2] = source[2] * scaleFactor;
892 destination[3] = source[3]; 892 destination[3] = source[3];
893 source += 4; 893 source += 4;
894 destination += 4; 894 destination += 4;
895 } 895 }
896 } 896 }
897 897
898 template<> void pack<WebGLImageConversion::DataFormatRGBA32F, WebGLImageConversi on::AlphaDoUnmultiply, float, float>(const float* source, float* destination, un signed pixelsPerRow) 898 template<> void pack<WebGLImageConversion::DataFormatRGBA32F, WebGLImageConversi on::AlphaDoUnmultiply, float, float>(const float* source, float* destination, un signed pixelsPerRow)
899 { 899 {
900 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 900 for (unsigned i = 0; i < pixelsPerRow; ++i) {
901 float scaleFactor = source[3] ? 1.0f / source[3] : 1.0f; 901 float scaleFactor = source[3] ? 1.0f / source[3] : 1.0f;
902 destination[0] = source[0] * scaleFactor; 902 destination[0] = source[0] * scaleFactor;
903 destination[1] = source[1] * scaleFactor; 903 destination[1] = source[1] * scaleFactor;
904 destination[2] = source[2] * scaleFactor; 904 destination[2] = source[2] * scaleFactor;
905 destination[3] = source[3]; 905 destination[3] = source[3];
906 source += 4; 906 source += 4;
907 destination += 4; 907 destination += 4;
908 } 908 }
909 } 909 }
910 910
911 template<> void pack<WebGLImageConversion::DataFormatA32F, WebGLImageConversion: :AlphaDoNothing, float, float>(const float* source, float* destination, unsigned pixelsPerRow) 911 template<> void pack<WebGLImageConversion::DataFormatA32F, WebGLImageConversion: :AlphaDoNothing, float, float>(const float* source, float* destination, unsigned pixelsPerRow)
912 { 912 {
913 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 913 for (unsigned i = 0; i < pixelsPerRow; ++i) {
914 destination[0] = source[3]; 914 destination[0] = source[3];
915 source += 4; 915 source += 4;
916 destination += 1; 916 destination += 1;
917 } 917 }
918 } 918 }
919 919
920 template<> void pack<WebGLImageConversion::DataFormatR32F, WebGLImageConversion: :AlphaDoNothing, float, float>(const float* source, float* destination, unsigned pixelsPerRow) 920 template<> void pack<WebGLImageConversion::DataFormatR32F, WebGLImageConversion: :AlphaDoNothing, float, float>(const float* source, float* destination, unsigned pixelsPerRow)
921 { 921 {
922 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 922 for (unsigned i = 0; i < pixelsPerRow; ++i) {
923 destination[0] = source[0]; 923 destination[0] = source[0];
924 source += 4; 924 source += 4;
925 destination += 1; 925 destination += 1;
926 } 926 }
927 } 927 }
928 928
929 template<> void pack<WebGLImageConversion::DataFormatR32F, WebGLImageConversion: :AlphaDoPremultiply, float, float>(const float* source, float* destination, unsi gned pixelsPerRow) 929 template<> void pack<WebGLImageConversion::DataFormatR32F, WebGLImageConversion: :AlphaDoPremultiply, float, float>(const float* source, float* destination, unsi gned pixelsPerRow)
930 { 930 {
931 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 931 for (unsigned i = 0; i < pixelsPerRow; ++i) {
932 float scaleFactor = source[3]; 932 float scaleFactor = source[3];
933 destination[0] = source[0] * scaleFactor; 933 destination[0] = source[0] * scaleFactor;
934 source += 4; 934 source += 4;
935 destination += 1; 935 destination += 1;
936 } 936 }
937 } 937 }
938 938
939 template<> void pack<WebGLImageConversion::DataFormatR32F, WebGLImageConversion: :AlphaDoUnmultiply, float, float>(const float* source, float* destination, unsig ned pixelsPerRow) 939 template<> void pack<WebGLImageConversion::DataFormatR32F, WebGLImageConversion: :AlphaDoUnmultiply, float, float>(const float* source, float* destination, unsig ned pixelsPerRow)
940 { 940 {
941 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 941 for (unsigned i = 0; i < pixelsPerRow; ++i) {
942 float scaleFactor = source[3] ? 1.0f / source[3] : 1.0f; 942 float scaleFactor = source[3] ? 1.0f / source[3] : 1.0f;
943 destination[0] = source[0] * scaleFactor; 943 destination[0] = source[0] * scaleFactor;
944 source += 4; 944 source += 4;
945 destination += 1; 945 destination += 1;
946 } 946 }
947 } 947 }
948 948
949 template<> void pack<WebGLImageConversion::DataFormatRA32F, WebGLImageConversion ::AlphaDoNothing, float, float>(const float* source, float* destination, unsigne d pixelsPerRow) 949 template<> void pack<WebGLImageConversion::DataFormatRA32F, WebGLImageConversion ::AlphaDoNothing, float, float>(const float* source, float* destination, unsigne d pixelsPerRow)
950 { 950 {
951 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 951 for (unsigned i = 0; i < pixelsPerRow; ++i) {
952 destination[0] = source[0]; 952 destination[0] = source[0];
953 destination[1] = source[3]; 953 destination[1] = source[3];
954 source += 4; 954 source += 4;
955 destination += 2; 955 destination += 2;
956 } 956 }
957 } 957 }
958 958
959 template<> void pack<WebGLImageConversion::DataFormatRA32F, WebGLImageConversion ::AlphaDoPremultiply, float, float>(const float* source, float* destination, uns igned pixelsPerRow) 959 template<> void pack<WebGLImageConversion::DataFormatRA32F, WebGLImageConversion ::AlphaDoPremultiply, float, float>(const float* source, float* destination, uns igned pixelsPerRow)
960 { 960 {
961 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 961 for (unsigned i = 0; i < pixelsPerRow; ++i) {
962 float scaleFactor = source[3]; 962 float scaleFactor = source[3];
963 destination[0] = source[0] * scaleFactor; 963 destination[0] = source[0] * scaleFactor;
964 destination[1] = source[3]; 964 destination[1] = source[3];
965 source += 4; 965 source += 4;
966 destination += 2; 966 destination += 2;
967 } 967 }
968 } 968 }
969 969
970 template<> void pack<WebGLImageConversion::DataFormatRA32F, WebGLImageConversion ::AlphaDoUnmultiply, float, float>(const float* source, float* destination, unsi gned pixelsPerRow) 970 template<> void pack<WebGLImageConversion::DataFormatRA32F, WebGLImageConversion ::AlphaDoUnmultiply, float, float>(const float* source, float* destination, unsi gned pixelsPerRow)
971 { 971 {
972 for (unsigned int i = 0; i < pixelsPerRow; ++i) { 972 for (unsigned i = 0; i < pixelsPerRow; ++i) {
973 float scaleFactor = source[3] ? 1.0f / source[3] : 1.0f; 973 float scaleFactor = source[3] ? 1.0f / source[3] : 1.0f;
974 destination[0] = source[0] * scaleFactor; 974 destination[0] = source[0] * scaleFactor;
975 destination[1] = source[3]; 975 destination[1] = source[3];
976 source += 4; 976 source += 4;
977 destination += 2; 977 destination += 2;
978 } 978 }
979 } 979 }
980 980
981 template<> void pack<WebGLImageConversion::DataFormatRGBA16F, WebGLImageConversi on::AlphaDoNothing, float, uint16_t>(const float* source, uint16_t* destination, unsigned pixelsPerRow) 981 template<> void pack<WebGLImageConversion::DataFormatRGBA16F, WebGLImageConversi on::AlphaDoNothing, float, uint16_t>(const float* source, uint16_t* destination, unsigned pixelsPerRow)
982 { 982 {
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after
1763 } 1763 }
1764 1764
1765 FormatConverter converter(width, height, sourceData, destinationData, srcStr ide, dstStride); 1765 FormatConverter converter(width, height, sourceData, destinationData, srcStr ide, dstStride);
1766 converter.convert(sourceDataFormat, dstDataFormat, alphaOp); 1766 converter.convert(sourceDataFormat, dstDataFormat, alphaOp);
1767 if (!converter.Success()) 1767 if (!converter.Success())
1768 return false; 1768 return false;
1769 return true; 1769 return true;
1770 } 1770 }
1771 1771
1772 } // namespace WebCore 1772 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/platform/audio/DenormalDisabler.h ('k') | Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698