mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +00:00
Refactor CRC code: move CRC32 algorithm into separate file to avoid multiple copy of the same code
This commit is contained in:
parent
0f9107ad2e
commit
9f8e07e571
|
@ -275,6 +275,7 @@
|
||||||
<ClCompile Include="..\..\src\Config.cpp" />
|
<ClCompile Include="..\..\src\Config.cpp" />
|
||||||
<ClCompile Include="..\..\src\convert.cpp" />
|
<ClCompile Include="..\..\src\convert.cpp" />
|
||||||
<ClCompile Include="..\..\src\CRC.cpp" />
|
<ClCompile Include="..\..\src\CRC.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\CRC32.cpp" />
|
||||||
<ClCompile Include="..\..\src\DepthBuffer.cpp" />
|
<ClCompile Include="..\..\src\DepthBuffer.cpp" />
|
||||||
<ClCompile Include="..\..\src\DepthBufferRender\ClipPolygon.cpp" />
|
<ClCompile Include="..\..\src\DepthBufferRender\ClipPolygon.cpp" />
|
||||||
<ClCompile Include="..\..\src\DepthBufferRender\DepthBufferRender.cpp" />
|
<ClCompile Include="..\..\src\DepthBufferRender\DepthBufferRender.cpp" />
|
||||||
|
@ -386,6 +387,7 @@
|
||||||
<ClInclude Include="..\..\src\Config.h" />
|
<ClInclude Include="..\..\src\Config.h" />
|
||||||
<ClInclude Include="..\..\src\convert.h" />
|
<ClInclude Include="..\..\src\convert.h" />
|
||||||
<ClInclude Include="..\..\src\CRC.h" />
|
<ClInclude Include="..\..\src\CRC.h" />
|
||||||
|
<ClInclude Include="..\..\src\CRC32.h" />
|
||||||
<ClInclude Include="..\..\src\Debug.h" />
|
<ClInclude Include="..\..\src\Debug.h" />
|
||||||
<ClInclude Include="..\..\src\DepthBuffer.h" />
|
<ClInclude Include="..\..\src\DepthBuffer.h" />
|
||||||
<ClInclude Include="..\..\src\DepthBufferRender\ClipPolygon.h" />
|
<ClInclude Include="..\..\src\DepthBufferRender\ClipPolygon.h" />
|
||||||
|
|
|
@ -251,6 +251,9 @@
|
||||||
<ClCompile Include="..\..\src\Performance.cpp">
|
<ClCompile Include="..\..\src\Performance.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\CRC32.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\src\3DMath.h">
|
<ClInclude Include="..\..\src\3DMath.h">
|
||||||
|
@ -445,5 +448,8 @@
|
||||||
<ClInclude Include="..\..\src\Performance.h">
|
<ClInclude Include="..\..\src\Performance.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\CRC32.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -13,6 +13,7 @@ set(GLideN64_SOURCES
|
||||||
Config.cpp
|
Config.cpp
|
||||||
convert.cpp
|
convert.cpp
|
||||||
CRC.cpp
|
CRC.cpp
|
||||||
|
CRC32.cpp
|
||||||
DepthBuffer.cpp
|
DepthBuffer.cpp
|
||||||
F3D.cpp
|
F3D.cpp
|
||||||
F3DDKR.cpp
|
F3DDKR.cpp
|
||||||
|
|
55
src/CRC.cpp
55
src/CRC.cpp
|
@ -1,65 +1,22 @@
|
||||||
#include "CRC.h"
|
#include "CRC.h"
|
||||||
|
#include "CRC32.h"
|
||||||
|
|
||||||
#define CRC32_POLYNOMIAL 0x04C11DB7
|
void CRC_Init()
|
||||||
|
|
||||||
unsigned int CRCTable[ 256 ];
|
|
||||||
|
|
||||||
u32 Reflect( u32 ref, char ch )
|
|
||||||
{
|
{
|
||||||
u32 value = 0;
|
CRC32_BuildTable();
|
||||||
|
|
||||||
// Swap bit 0 for bit 7
|
|
||||||
// bit 1 for bit 6, etc.
|
|
||||||
for (int i = 1; i < (ch + 1); ++i) {
|
|
||||||
if(ref & 1)
|
|
||||||
value |= 1 << (ch - i);
|
|
||||||
ref >>= 1;
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CRC_BuildTable()
|
|
||||||
{
|
|
||||||
u32 crc;
|
|
||||||
|
|
||||||
for (int i = 0; i < 256; ++i) {
|
|
||||||
crc = Reflect( i, 8 ) << 24;
|
|
||||||
for (int j = 0; j < 8; ++j)
|
|
||||||
crc = (crc << 1) ^ (crc & (1 << 31) ? CRC32_POLYNOMIAL : 0);
|
|
||||||
|
|
||||||
CRCTable[i] = Reflect( crc, 32 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CRC_Calculate_Strict( u32 crc, const void * buffer, u32 count )
|
u32 CRC_Calculate_Strict( u32 crc, const void * buffer, u32 count )
|
||||||
{
|
{
|
||||||
u8 *p;
|
return CRC32_Calculate(crc, buffer, count);
|
||||||
u32 orig = crc;
|
|
||||||
|
|
||||||
p = (u8*) buffer;
|
|
||||||
while (count--)
|
|
||||||
crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
|
|
||||||
|
|
||||||
return crc ^ orig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CRC_Calculate( u32 crc, const void * buffer, u32 count )
|
u32 CRC_Calculate( u32 crc, const void * buffer, u32 count )
|
||||||
{
|
{
|
||||||
return CRC_Calculate_Strict(crc, buffer, count);
|
return CRC32_Calculate(crc, buffer, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CRC_CalculatePalette(u32 crc, const void * buffer, u32 count )
|
u32 CRC_CalculatePalette(u32 crc, const void * buffer, u32 count )
|
||||||
{
|
{
|
||||||
u8 *p;
|
return CRC32_CalculatePalette(crc, buffer, count);
|
||||||
u32 orig = crc;
|
|
||||||
|
|
||||||
p = (u8*) buffer;
|
|
||||||
while (count--) {
|
|
||||||
crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
|
|
||||||
crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
|
|
||||||
|
|
||||||
p += 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
return crc ^ orig;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "Types.h"
|
#include "Types.h"
|
||||||
|
|
||||||
void CRC_BuildTable();
|
void CRC_Init();
|
||||||
|
|
||||||
// CRC32
|
// Strict chacksum calculation. usually CRC32
|
||||||
u32 CRC_Calculate_Strict( u32 crc, const void *buffer, u32 count );
|
u32 CRC_Calculate_Strict( u32 crc, const void *buffer, u32 count );
|
||||||
u32 CRC_Calculate( u32 crc, const void *buffer, u32 count );
|
u32 CRC_Calculate( u32 crc, const void *buffer, u32 count );
|
||||||
u32 CRC_CalculatePalette( u32 crc, const void *buffer, u32 count );
|
u32 CRC_CalculatePalette( u32 crc, const void *buffer, u32 count );
|
||||||
|
|
61
src/CRC32.cpp
Normal file
61
src/CRC32.cpp
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#include "CRC32.h"
|
||||||
|
|
||||||
|
#define CRC32_POLYNOMIAL 0x04C11DB7
|
||||||
|
|
||||||
|
unsigned int CRCTable[ 256 ];
|
||||||
|
|
||||||
|
static
|
||||||
|
u32 Reflect( u32 ref, char ch )
|
||||||
|
{
|
||||||
|
u32 value = 0;
|
||||||
|
|
||||||
|
// Swap bit 0 for bit 7
|
||||||
|
// bit 1 for bit 6, etc.
|
||||||
|
for (int i = 1; i < (ch + 1); ++i) {
|
||||||
|
if(ref & 1)
|
||||||
|
value |= 1 << (ch - i);
|
||||||
|
ref >>= 1;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRC32_BuildTable()
|
||||||
|
{
|
||||||
|
u32 crc;
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; ++i) {
|
||||||
|
crc = Reflect( i, 8 ) << 24;
|
||||||
|
for (int j = 0; j < 8; ++j)
|
||||||
|
crc = (crc << 1) ^ (crc & (1 << 31) ? CRC32_POLYNOMIAL : 0);
|
||||||
|
|
||||||
|
CRCTable[i] = Reflect( crc, 32 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 CRC32_Calculate( u32 crc, const void * buffer, u32 count )
|
||||||
|
{
|
||||||
|
u8 *p;
|
||||||
|
u32 orig = crc;
|
||||||
|
|
||||||
|
p = (u8*) buffer;
|
||||||
|
while (count--)
|
||||||
|
crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
|
||||||
|
|
||||||
|
return crc ^ orig;
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 CRC32_CalculatePalette(u32 crc, const void * buffer, u32 count )
|
||||||
|
{
|
||||||
|
u8 *p;
|
||||||
|
u32 orig = crc;
|
||||||
|
|
||||||
|
p = (u8*) buffer;
|
||||||
|
while (count--) {
|
||||||
|
crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
|
||||||
|
crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
|
||||||
|
|
||||||
|
p += 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
return crc ^ orig;
|
||||||
|
}
|
6
src/CRC32.h
Normal file
6
src/CRC32.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#include "Types.h"
|
||||||
|
|
||||||
|
void CRC32_BuildTable();
|
||||||
|
|
||||||
|
u32 CRC32_Calculate( u32 crc, const void *buffer, u32 count );
|
||||||
|
u32 CRC32_CalculatePalette( u32 crc, const void *buffer, u32 count );
|
|
@ -1,11 +1,11 @@
|
||||||
#include "CRC.h"
|
#include "CRC.h"
|
||||||
#include <arm_acle.h>
|
#include <arm_acle.h>
|
||||||
|
|
||||||
void CRC_BuildTable()
|
void CRC_Init()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CRC_Calculate_Strict( u32 crc, const void * buffer, u32 count )
|
u32 CRC_Calculate( u32 crc, const void * buffer, u32 count )
|
||||||
{
|
{
|
||||||
u8 *p;
|
u8 *p;
|
||||||
u32 orig = crc;
|
u32 orig = crc;
|
||||||
|
@ -35,9 +35,9 @@ u32 CRC_Calculate_Strict( u32 crc, const void * buffer, u32 count )
|
||||||
return crc ^ orig;
|
return crc ^ orig;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CRC_Calculate( u32 crc, const void * buffer, u32 count )
|
u32 CRC_Calculate_Strict( u32 crc, const void * buffer, u32 count )
|
||||||
{
|
{
|
||||||
return CRC_Calculate_Strict(crc, buffer, count);
|
return CRC_Calculate(crc, buffer, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CRC_CalculatePalette(u32 crc, const void * buffer, u32 count )
|
u32 CRC_CalculatePalette(u32 crc, const void * buffer, u32 count )
|
||||||
|
|
|
@ -1,46 +1,14 @@
|
||||||
#include "CRC.h"
|
#include "CRC.h"
|
||||||
|
#include "CRC32.h"
|
||||||
|
|
||||||
#define CRC32_POLYNOMIAL 0x04C11DB7
|
void CRC_Init()
|
||||||
|
|
||||||
unsigned int CRCTable[ 256 ];
|
|
||||||
|
|
||||||
u32 Reflect( u32 ref, char ch )
|
|
||||||
{
|
{
|
||||||
u32 value = 0;
|
CRC32_BuildTable();
|
||||||
|
|
||||||
// Swap bit 0 for bit 7
|
|
||||||
// bit 1 for bit 6, etc.
|
|
||||||
for (int i = 1; i < (ch + 1); ++i) {
|
|
||||||
if(ref & 1)
|
|
||||||
value |= 1 << (ch - i);
|
|
||||||
ref >>= 1;
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CRC_BuildTable()
|
|
||||||
{
|
|
||||||
u32 crc;
|
|
||||||
|
|
||||||
for (int i = 0; i < 256; ++i) {
|
|
||||||
crc = Reflect( i, 8 ) << 24;
|
|
||||||
for (int j = 0; j < 8; ++j)
|
|
||||||
crc = (crc << 1) ^ (crc & (1 << 31) ? CRC32_POLYNOMIAL : 0);
|
|
||||||
|
|
||||||
CRCTable[i] = Reflect( crc, 32 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CRC_Calculate_Strict( u32 crc, const void * buffer, u32 count )
|
u32 CRC_Calculate_Strict( u32 crc, const void * buffer, u32 count )
|
||||||
{
|
{
|
||||||
u8 *p;
|
return CRC32_Calculate(crc, buffer, count);
|
||||||
u32 orig = crc;
|
|
||||||
|
|
||||||
p = (u8*) buffer;
|
|
||||||
while (count--)
|
|
||||||
crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
|
|
||||||
|
|
||||||
return crc ^ orig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CRC_Calculate( u32 crc, const void * buffer, u32 count )
|
u32 CRC_Calculate( u32 crc, const void * buffer, u32 count )
|
||||||
|
|
|
@ -68,7 +68,7 @@ private:
|
||||||
{
|
{
|
||||||
current[0] = nullptr;
|
current[0] = nullptr;
|
||||||
current[1] = nullptr;
|
current[1] = nullptr;
|
||||||
CRC_BuildTable();
|
CRC_Init();
|
||||||
}
|
}
|
||||||
TextureCache(const TextureCache &);
|
TextureCache(const TextureCache &);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user