From 232a2c0b84f760d50a2ab10d49a9998a81c84b92 Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Tue, 16 Dec 2014 16:30:43 +0600 Subject: [PATCH] Rewrite _calculateCRC(): - fixed bytes per line calculation - fixed CRC for 32bit textures. --- Textures.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/Textures.cpp b/Textures.cpp index 45377301..6592f0e8 100644 --- a/Textures.cpp +++ b/Textures.cpp @@ -1070,26 +1070,24 @@ struct TextureParams static u32 _calculateCRC(u32 t, const TextureParams & _params) { - u32 crc; - u32 y, bpl, lineBytes, line; - u64 *src; - - src = (u64*)&TMEM[gSP.textureTile[t]->tmem]; - bpl = _params.width << gSP.textureTile[t]->size >> 1; - lineBytes = gSP.textureTile[t]->line << 3; - - line = gSP.textureTile[t]->line; - if (gSP.textureTile[t]->size == G_IM_SIZ_32b) - line <<= 1; - - crc = 0xFFFFFFFF; - for (y = 0; y < _params.height; y++) - { - crc = CRC_Calculate( crc, src, bpl ); + const u32 line = gSP.textureTile[t]->line; + const u32 lineBytes = line << 3; + const u64 *src = (u64*)&TMEM[gSP.textureTile[t]->tmem]; + u32 crc = 0xFFFFFFFF; + for (u32 y = 0; y < _params.height; ++y) { + crc = CRC_Calculate(crc, src, lineBytes); src += line; } + if (gSP.textureTile[t]->size == G_IM_SIZ_32b) { + src = (u64*)&TMEM[gSP.textureTile[t]->tmem + 256]; + for (u32 y = 0; y < _params.height; ++y) { + crc = CRC_Calculate(crc, src, lineBytes); + src += line; + } + } + if (gDP.otherMode.textureLUT != G_TT_NONE || gSP.textureTile[t]->format == G_IM_FMT_CI) { if (gSP.textureTile[t]->size == G_IM_SIZ_4b) crc = CRC_Calculate( crc, &gDP.paletteCRC16[gSP.textureTile[t]->palette], 4 );