Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extra/rdotbl.c24
-rw-r--r--server/TracyTextureCompression.cpp55
2 files changed, 31 insertions, 48 deletions
diff --git a/extra/rdotbl.c b/extra/rdotbl.c
new file mode 100644
index 00000000..1fd8788d
--- /dev/null
+++ b/extra/rdotbl.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+
+int main()
+{
+ //int a = 16, b = 44, s = 4;
+ //int av = 12, bv = 6, cv = 3;
+
+ //int a = 32, b = 48, s = 16;
+ //int av = 12, bv = 6, cv = 3;
+
+ int a = 48, b = 64, s = 16;
+ int av = 48, bv = 32, cv = 24;
+
+ printf( "int TrTbl[] = { " );
+ int first = 1;
+ for( int i=0; i<256; i+=s )
+ {
+ if( first ) first = 0; else printf( ", " );
+ if( i < a ) printf( "%i", av );
+ else if( i < b ) printf( "%i", bv );
+ else printf( "%i", cv );
+ }
+ printf( " };\n" );
+}
diff --git a/server/TracyTextureCompression.cpp b/server/TracyTextureCompression.cpp
index 2cf4635b..af26c8ab 100644
--- a/server/TracyTextureCompression.cpp
+++ b/server/TracyTextureCompression.cpp
@@ -84,6 +84,10 @@ static tracy_force_inline int max3( int a, int b, int c )
}
}
+static constexpr int TrTbl1[] = { 12, 12, 12, 12, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 };
+static constexpr int TrTbl2[] = { 12, 12, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 };
+static constexpr int TrTbl3[] = { 48, 48, 48, 32, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 };
+
void TextureCompression::Rdo( char* data, size_t blocks )
{
assert( blocks > 0 );
@@ -124,22 +128,7 @@ void TextureCompression::Rdo( char* data, size_t blocks )
const int maxChan1 = max3( r0-1, g0, b0-2 );
const int maxDelta1 = max3( dr-1, dg, db-2 );
- const int tr1a = 16;
- const int tr1b = 45;
- int tr1;
- if( maxChan1 < tr1a )
- {
- tr1 = 12;
- }
- else if( maxChan1 < tr1b )
- {
- tr1 = 6;
- }
- else
- {
- tr1 = 3;
- }
-
+ const int tr1 = TrTbl1[maxChan1 / 4];
if( maxDelta1 <= tr1 )
{
uint64_t blk =
@@ -152,22 +141,7 @@ void TextureCompression::Rdo( char* data, size_t blocks )
{
const int maxChan23 = max3( r0-2, g0, b0-5 );
const int maxDelta23 = max3( dr-2, dg, db-5 );
- const int tr2a = 32;
- const int tr2b = 48;
- int tr2 = 0;
- if( maxChan23 < tr2a )
- {
- tr2 = 12;
- }
- else if( maxChan23 < tr2b )
- {
- tr2 = 6;
- }
- else
- {
- tr2 = 3;
- }
-
+ const int tr2 = TrTbl2[maxChan23 / 16];
if( maxDelta23 <= tr2 )
{
idx &= 0x55555555;
@@ -175,22 +149,7 @@ void TextureCompression::Rdo( char* data, size_t blocks )
}
else
{
- const int tr3a = 48;
- const int tr3b = 64;
- int tr3;
- if( maxChan23 < tr3a )
- {
- tr3 = 48;
- }
- else if( maxChan23 < tr3b )
- {
- tr3 = 32;
- }
- else
- {
- tr3 = 24;
- }
-
+ const int tr3 = TrTbl3[maxChan23 / 16];
if( maxDelta23 <= tr3 )
{
uint64_t c = c1 | ( uint64_t( c0 ) << 16 );