Permalink
Browse files

Texture AverageDiff: Do more in int space and avoid excessive float c…

…onversion

Multiplying 2x 8bit values is guaranteed to fit in 16bits, 4 channels then in
18bits, which means an 'int' shouild be sufficient to avoid overflows
  • Loading branch information...
JonnyH committed May 17, 2018
1 parent 61a8179 commit b30d56ccc0a03c41c758afcd47f5d19fa34b0a98
Showing with 5 additions and 4 deletions.
  1. +5 −4 Source/Core/VideoCommon/TextureCacheBase.cpp
@@ -608,13 +608,14 @@ class ArbitraryMipmapDetector
const auto* row2 = ptr2;
for (u32 j = 0; j < shape.width; ++j, row1 += 4, row2 += 4)
{
int pixel_diff = 0;
for (int channel = 0; channel < 4; channel++)
{
const float diff =
std::abs(static_cast<float>(row1[channel]) - static_cast<float>(row2[channel]));
const float diff_squared = diff * diff;
average_diff += diff_squared;
const int diff = static_cast<int>(row1[channel]) - static_cast<int>(row2[channel]);
const int diff_squared = diff * diff;
pixel_diff += diff_squared;
}
average_diff += pixel_diff;
}
ptr1 += shape.row_length;
ptr2 += shape.row_length;

0 comments on commit b30d56c

Please sign in to comment.