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

Side by Side Diff: src/core/SkConvolver.cpp

Issue 323013005: Support for larger than "signed 32b limit" sized bitmaps in BGRAConvolve2D. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "SkConvolver.h" 5 #include "SkConvolver.h"
6 #include "SkSize.h" 6 #include "SkSize.h"
7 #include "SkTypes.h" 7 #include "SkTypes.h"
8 8
9 namespace { 9 namespace {
10 10
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 &filterOffset, &filterLength); 398 &filterOffset, &filterLength);
399 399
400 // Generate output rows until we have enough to run the current filter. 400 // Generate output rows until we have enough to run the current filter.
401 while (nextXRow < filterOffset + filterLength) { 401 while (nextXRow < filterOffset + filterLength) {
402 if (convolveProcs.fConvolve4RowsHorizontally && 402 if (convolveProcs.fConvolve4RowsHorizontally &&
403 nextXRow + 3 < lastFilterOffset + lastFilterLength - 403 nextXRow + 3 < lastFilterOffset + lastFilterLength -
404 avoidSimdRows) { 404 avoidSimdRows) {
405 const unsigned char* src[4]; 405 const unsigned char* src[4];
406 unsigned char* outRow[4]; 406 unsigned char* outRow[4];
407 for (int i = 0; i < 4; ++i) { 407 for (int i = 0; i < 4; ++i) {
408 src[i] = &sourceData[(nextXRow + i) * sourceByteRowStride]; 408 src[i] = &sourceData[(uint64_t)(nextXRow + i) * sourceByteRo wStride];
409 outRow[i] = rowBuffer.advanceRow(); 409 outRow[i] = rowBuffer.advanceRow();
410 } 410 }
411 convolveProcs.fConvolve4RowsHorizontally(src, filterX, outRow); 411 convolveProcs.fConvolve4RowsHorizontally(src, filterX, outRow);
412 nextXRow += 4; 412 nextXRow += 4;
413 } else { 413 } else {
414 // Check if we need to avoid SSE2 for this row. 414 // Check if we need to avoid SSE2 for this row.
415 if (convolveProcs.fConvolveHorizontally && 415 if (convolveProcs.fConvolveHorizontally &&
416 nextXRow < lastFilterOffset + lastFilterLength - 416 nextXRow < lastFilterOffset + lastFilterLength -
417 avoidSimdRows) { 417 avoidSimdRows) {
418 convolveProcs.fConvolveHorizontally( 418 convolveProcs.fConvolveHorizontally(
419 &sourceData[nextXRow * sourceByteRowStride], 419 &sourceData[(uint64_t)nextXRow * sourceByteRowStride],
420 filterX, rowBuffer.advanceRow(), sourceHasAlpha); 420 filterX, rowBuffer.advanceRow(), sourceHasAlpha);
421 } else { 421 } else {
422 if (sourceHasAlpha) { 422 if (sourceHasAlpha) {
423 ConvolveHorizontally<true>( 423 ConvolveHorizontally<true>(
424 &sourceData[nextXRow * sourceByteRowStride], 424 &sourceData[(uint64_t)nextXRow * sourceByteRowStride ],
425 filterX, rowBuffer.advanceRow()); 425 filterX, rowBuffer.advanceRow());
426 } else { 426 } else {
427 ConvolveHorizontally<false>( 427 ConvolveHorizontally<false>(
428 &sourceData[nextXRow * sourceByteRowStride], 428 &sourceData[(uint64_t)nextXRow * sourceByteRowStride ],
429 filterX, rowBuffer.advanceRow()); 429 filterX, rowBuffer.advanceRow());
430 } 430 }
431 } 431 }
432 nextXRow++; 432 nextXRow++;
433 } 433 }
434 } 434 }
435 435
436 // Compute where in the output image this row of final data will go. 436 // Compute where in the output image this row of final data will go.
437 unsigned char* curOutputRow = &output[outY * outputByteRowStride]; 437 unsigned char* curOutputRow = &output[outY * outputByteRowStride];
438 438
(...skipping 13 matching lines...) Expand all
452 filterX.numValues(), curOutputRow , 452 filterX.numValues(), curOutputRow ,
453 sourceHasAlpha); 453 sourceHasAlpha);
454 } else { 454 } else {
455 ConvolveVertically(filterValues, filterLength, 455 ConvolveVertically(filterValues, filterLength,
456 firstRowForFilter, 456 firstRowForFilter,
457 filterX.numValues(), curOutputRow, 457 filterX.numValues(), curOutputRow,
458 sourceHasAlpha); 458 sourceHasAlpha);
459 } 459 }
460 } 460 }
461 } 461 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698