Add single color checks to CUDA compressors.

Use optimized bitmap table for CTX compressor.
This commit is contained in:
castano
2008-05-06 19:52:27 +00:00
parent 246f2a409a
commit d855d0461b
7 changed files with 863 additions and 20 deletions

View File

@ -1117,3 +1117,770 @@ const static uint s_bitmapTable[992] =
0x55555557,
0x55555557,
};
/*
void precomp()
{
unsigned int bitmaps[1024];
int num = 0;
printf("const static uint s_bitmapTableCTX[704] =\n{\n");
for (int a = 1; a <= 15; a++)
{
for (int b = a; b <= 15; b++)
{
for (int c = b; c <= 15; c++)
{
int indices[16];
int i = 0;
for(; i < a; i++) {
indices[i] = 0;
}
for(; i < a+b; i++) {
indices[i] = 2;
}
for(; i < a+b+c; i++) {
indices[i] = 3;
}
for(; i < 16; i++) {
indices[i] = 1;
}
unsigned int bm = 0;
for(i = 0; i < 16; i++) {
bm |= indices[i] << (i * 2);
}
printf("\t0x%8X, // %d %d %d %d\n", bm, a-0, b-a, c-b, 16-c);
bitmaps[num] = bm;
num++;
}
}
}
// Align to 32: 680 -> 704
while (num < 704)
{
printf("\t0x80000000,\n");
bitmaps[num] = 0x80000000; // 15 0 0 1;
num++;
}
printf("}; // num = %d\n", num);
}
*/
const static uint s_bitmapTableCTX[704] =
{
0x55555578, // 1 0 0 15
0x555555F8, // 1 0 1 14
0x555557F8, // 1 0 2 13
0x55555FF8, // 1 0 3 12
0x55557FF8, // 1 0 4 11
0x5555FFF8, // 1 0 5 10
0x5557FFF8, // 1 0 6 9
0x555FFFF8, // 1 0 7 8
0x557FFFF8, // 1 0 8 7
0x55FFFFF8, // 1 0 9 6
0x57FFFFF8, // 1 0 10 5
0x5FFFFFF8, // 1 0 11 4
0x7FFFFFF8, // 1 0 12 3
0xFFFFFFF8, // 1 0 13 2
0xFFFFFFF8, // 1 0 14 1
0x555557E8, // 1 1 0 14
0x55555FE8, // 1 1 1 13
0x55557FE8, // 1 1 2 12
0x5555FFE8, // 1 1 3 11
0x5557FFE8, // 1 1 4 10
0x555FFFE8, // 1 1 5 9
0x557FFFE8, // 1 1 6 8
0x55FFFFE8, // 1 1 7 7
0x57FFFFE8, // 1 1 8 6
0x5FFFFFE8, // 1 1 9 5
0x7FFFFFE8, // 1 1 10 4
0xFFFFFFE8, // 1 1 11 3
0xFFFFFFE8, // 1 1 12 2
0xFFFFFFE8, // 1 1 13 1
0x55557FA8, // 1 2 0 13
0x5555FFA8, // 1 2 1 12
0x5557FFA8, // 1 2 2 11
0x555FFFA8, // 1 2 3 10
0x557FFFA8, // 1 2 4 9
0x55FFFFA8, // 1 2 5 8
0x57FFFFA8, // 1 2 6 7
0x5FFFFFA8, // 1 2 7 6
0x7FFFFFA8, // 1 2 8 5
0xFFFFFFA8, // 1 2 9 4
0xFFFFFFA8, // 1 2 10 3
0xFFFFFFA8, // 1 2 11 2
0xFFFFFFA8, // 1 2 12 1
0x5557FEA8, // 1 3 0 12
0x555FFEA8, // 1 3 1 11
0x557FFEA8, // 1 3 2 10
0x55FFFEA8, // 1 3 3 9
0x57FFFEA8, // 1 3 4 8
0x5FFFFEA8, // 1 3 5 7
0x7FFFFEA8, // 1 3 6 6
0xFFFFFEA8, // 1 3 7 5
0xFFFFFEA8, // 1 3 8 4
0xFFFFFEA8, // 1 3 9 3
0xFFFFFEA8, // 1 3 10 2
0xFFFFFEA8, // 1 3 11 1
0x557FFAA8, // 1 4 0 11
0x55FFFAA8, // 1 4 1 10
0x57FFFAA8, // 1 4 2 9
0x5FFFFAA8, // 1 4 3 8
0x7FFFFAA8, // 1 4 4 7
0xFFFFFAA8, // 1 4 5 6
0xFFFFFAA8, // 1 4 6 5
0xFFFFFAA8, // 1 4 7 4
0xFFFFFAA8, // 1 4 8 3
0xFFFFFAA8, // 1 4 9 2
0xFFFFFAA8, // 1 4 10 1
0x57FFEAA8, // 1 5 0 10
0x5FFFEAA8, // 1 5 1 9
0x7FFFEAA8, // 1 5 2 8
0xFFFFEAA8, // 1 5 3 7
0xFFFFEAA8, // 1 5 4 6
0xFFFFEAA8, // 1 5 5 5
0xFFFFEAA8, // 1 5 6 4
0xFFFFEAA8, // 1 5 7 3
0xFFFFEAA8, // 1 5 8 2
0xFFFFEAA8, // 1 5 9 1
0x7FFFAAA8, // 1 6 0 9
0xFFFFAAA8, // 1 6 1 8
0xFFFFAAA8, // 1 6 2 7
0xFFFFAAA8, // 1 6 3 6
0xFFFFAAA8, // 1 6 4 5
0xFFFFAAA8, // 1 6 5 4
0xFFFFAAA8, // 1 6 6 3
0xFFFFAAA8, // 1 6 7 2
0xFFFFAAA8, // 1 6 8 1
0xFFFEAAA8, // 1 7 0 8
0xFFFEAAA8, // 1 7 1 7
0xFFFEAAA8, // 1 7 2 6
0xFFFEAAA8, // 1 7 3 5
0xFFFEAAA8, // 1 7 4 4
0xFFFEAAA8, // 1 7 5 3
0xFFFEAAA8, // 1 7 6 2
0xFFFEAAA8, // 1 7 7 1
0xFFFAAAA8, // 1 8 0 7
0xFFFAAAA8, // 1 8 1 6
0xFFFAAAA8, // 1 8 2 5
0xFFFAAAA8, // 1 8 3 4
0xFFFAAAA8, // 1 8 4 3
0xFFFAAAA8, // 1 8 5 2
0xFFFAAAA8, // 1 8 6 1
0xFFEAAAA8, // 1 9 0 6
0xFFEAAAA8, // 1 9 1 5
0xFFEAAAA8, // 1 9 2 4
0xFFEAAAA8, // 1 9 3 3
0xFFEAAAA8, // 1 9 4 2
0xFFEAAAA8, // 1 9 5 1
0xFFAAAAA8, // 1 10 0 5
0xFFAAAAA8, // 1 10 1 4
0xFFAAAAA8, // 1 10 2 3
0xFFAAAAA8, // 1 10 3 2
0xFFAAAAA8, // 1 10 4 1
0xFEAAAAA8, // 1 11 0 4
0xFEAAAAA8, // 1 11 1 3
0xFEAAAAA8, // 1 11 2 2
0xFEAAAAA8, // 1 11 3 1
0xFAAAAAA8, // 1 12 0 3
0xFAAAAAA8, // 1 12 1 2
0xFAAAAAA8, // 1 12 2 1
0xEAAAAAA8, // 1 13 0 2
0xEAAAAAA8, // 1 13 1 1
0xAAAAAAA8, // 1 14 0 1
0x55555FA0, // 2 0 0 14
0x55557FA0, // 2 0 1 13
0x5555FFA0, // 2 0 2 12
0x5557FFA0, // 2 0 3 11
0x555FFFA0, // 2 0 4 10
0x557FFFA0, // 2 0 5 9
0x55FFFFA0, // 2 0 6 8
0x57FFFFA0, // 2 0 7 7
0x5FFFFFA0, // 2 0 8 6
0x7FFFFFA0, // 2 0 9 5
0xFFFFFFA0, // 2 0 10 4
0xFFFFFFA0, // 2 0 11 3
0xFFFFFFA0, // 2 0 12 2
0xFFFFFFA0, // 2 0 13 1
0x5555FEA0, // 2 1 0 13
0x5557FEA0, // 2 1 1 12
0x555FFEA0, // 2 1 2 11
0x557FFEA0, // 2 1 3 10
0x55FFFEA0, // 2 1 4 9
0x57FFFEA0, // 2 1 5 8
0x5FFFFEA0, // 2 1 6 7
0x7FFFFEA0, // 2 1 7 6
0xFFFFFEA0, // 2 1 8 5
0xFFFFFEA0, // 2 1 9 4
0xFFFFFEA0, // 2 1 10 3
0xFFFFFEA0, // 2 1 11 2
0xFFFFFEA0, // 2 1 12 1
0x555FFAA0, // 2 2 0 12
0x557FFAA0, // 2 2 1 11
0x55FFFAA0, // 2 2 2 10
0x57FFFAA0, // 2 2 3 9
0x5FFFFAA0, // 2 2 4 8
0x7FFFFAA0, // 2 2 5 7
0xFFFFFAA0, // 2 2 6 6
0xFFFFFAA0, // 2 2 7 5
0xFFFFFAA0, // 2 2 8 4
0xFFFFFAA0, // 2 2 9 3
0xFFFFFAA0, // 2 2 10 2
0xFFFFFAA0, // 2 2 11 1
0x55FFEAA0, // 2 3 0 11
0x57FFEAA0, // 2 3 1 10
0x5FFFEAA0, // 2 3 2 9
0x7FFFEAA0, // 2 3 3 8
0xFFFFEAA0, // 2 3 4 7
0xFFFFEAA0, // 2 3 5 6
0xFFFFEAA0, // 2 3 6 5
0xFFFFEAA0, // 2 3 7 4
0xFFFFEAA0, // 2 3 8 3
0xFFFFEAA0, // 2 3 9 2
0xFFFFEAA0, // 2 3 10 1
0x5FFFAAA0, // 2 4 0 10
0x7FFFAAA0, // 2 4 1 9
0xFFFFAAA0, // 2 4 2 8
0xFFFFAAA0, // 2 4 3 7
0xFFFFAAA0, // 2 4 4 6
0xFFFFAAA0, // 2 4 5 5
0xFFFFAAA0, // 2 4 6 4
0xFFFFAAA0, // 2 4 7 3
0xFFFFAAA0, // 2 4 8 2
0xFFFFAAA0, // 2 4 9 1
0xFFFEAAA0, // 2 5 0 9
0xFFFEAAA0, // 2 5 1 8
0xFFFEAAA0, // 2 5 2 7
0xFFFEAAA0, // 2 5 3 6
0xFFFEAAA0, // 2 5 4 5
0xFFFEAAA0, // 2 5 5 4
0xFFFEAAA0, // 2 5 6 3
0xFFFEAAA0, // 2 5 7 2
0xFFFEAAA0, // 2 5 8 1
0xFFFAAAA0, // 2 6 0 8
0xFFFAAAA0, // 2 6 1 7
0xFFFAAAA0, // 2 6 2 6
0xFFFAAAA0, // 2 6 3 5
0xFFFAAAA0, // 2 6 4 4
0xFFFAAAA0, // 2 6 5 3
0xFFFAAAA0, // 2 6 6 2
0xFFFAAAA0, // 2 6 7 1
0xFFEAAAA0, // 2 7 0 7
0xFFEAAAA0, // 2 7 1 6
0xFFEAAAA0, // 2 7 2 5
0xFFEAAAA0, // 2 7 3 4
0xFFEAAAA0, // 2 7 4 3
0xFFEAAAA0, // 2 7 5 2
0xFFEAAAA0, // 2 7 6 1
0xFFAAAAA0, // 2 8 0 6
0xFFAAAAA0, // 2 8 1 5
0xFFAAAAA0, // 2 8 2 4
0xFFAAAAA0, // 2 8 3 3
0xFFAAAAA0, // 2 8 4 2
0xFFAAAAA0, // 2 8 5 1
0xFEAAAAA0, // 2 9 0 5
0xFEAAAAA0, // 2 9 1 4
0xFEAAAAA0, // 2 9 2 3
0xFEAAAAA0, // 2 9 3 2
0xFEAAAAA0, // 2 9 4 1
0xFAAAAAA0, // 2 10 0 4
0xFAAAAAA0, // 2 10 1 3
0xFAAAAAA0, // 2 10 2 2
0xFAAAAAA0, // 2 10 3 1
0xEAAAAAA0, // 2 11 0 3
0xEAAAAAA0, // 2 11 1 2
0xEAAAAAA0, // 2 11 2 1
0xAAAAAAA0, // 2 12 0 2
0xAAAAAAA0, // 2 12 1 1
0xAAAAAAA0, // 2 13 0 1
0x5557FA80, // 3 0 0 13
0x555FFA80, // 3 0 1 12
0x557FFA80, // 3 0 2 11
0x55FFFA80, // 3 0 3 10
0x57FFFA80, // 3 0 4 9
0x5FFFFA80, // 3 0 5 8
0x7FFFFA80, // 3 0 6 7
0xFFFFFA80, // 3 0 7 6
0xFFFFFA80, // 3 0 8 5
0xFFFFFA80, // 3 0 9 4
0xFFFFFA80, // 3 0 10 3
0xFFFFFA80, // 3 0 11 2
0xFFFFFA80, // 3 0 12 1
0x557FEA80, // 3 1 0 12
0x55FFEA80, // 3 1 1 11
0x57FFEA80, // 3 1 2 10
0x5FFFEA80, // 3 1 3 9
0x7FFFEA80, // 3 1 4 8
0xFFFFEA80, // 3 1 5 7
0xFFFFEA80, // 3 1 6 6
0xFFFFEA80, // 3 1 7 5
0xFFFFEA80, // 3 1 8 4
0xFFFFEA80, // 3 1 9 3
0xFFFFEA80, // 3 1 10 2
0xFFFFEA80, // 3 1 11 1
0x57FFAA80, // 3 2 0 11
0x5FFFAA80, // 3 2 1 10
0x7FFFAA80, // 3 2 2 9
0xFFFFAA80, // 3 2 3 8
0xFFFFAA80, // 3 2 4 7
0xFFFFAA80, // 3 2 5 6
0xFFFFAA80, // 3 2 6 5
0xFFFFAA80, // 3 2 7 4
0xFFFFAA80, // 3 2 8 3
0xFFFFAA80, // 3 2 9 2
0xFFFFAA80, // 3 2 10 1
0x7FFEAA80, // 3 3 0 10
0xFFFEAA80, // 3 3 1 9
0xFFFEAA80, // 3 3 2 8
0xFFFEAA80, // 3 3 3 7
0xFFFEAA80, // 3 3 4 6
0xFFFEAA80, // 3 3 5 5
0xFFFEAA80, // 3 3 6 4
0xFFFEAA80, // 3 3 7 3
0xFFFEAA80, // 3 3 8 2
0xFFFEAA80, // 3 3 9 1
0xFFFAAA80, // 3 4 0 9
0xFFFAAA80, // 3 4 1 8
0xFFFAAA80, // 3 4 2 7
0xFFFAAA80, // 3 4 3 6
0xFFFAAA80, // 3 4 4 5
0xFFFAAA80, // 3 4 5 4
0xFFFAAA80, // 3 4 6 3
0xFFFAAA80, // 3 4 7 2
0xFFFAAA80, // 3 4 8 1
0xFFEAAA80, // 3 5 0 8
0xFFEAAA80, // 3 5 1 7
0xFFEAAA80, // 3 5 2 6
0xFFEAAA80, // 3 5 3 5
0xFFEAAA80, // 3 5 4 4
0xFFEAAA80, // 3 5 5 3
0xFFEAAA80, // 3 5 6 2
0xFFEAAA80, // 3 5 7 1
0xFFAAAA80, // 3 6 0 7
0xFFAAAA80, // 3 6 1 6
0xFFAAAA80, // 3 6 2 5
0xFFAAAA80, // 3 6 3 4
0xFFAAAA80, // 3 6 4 3
0xFFAAAA80, // 3 6 5 2
0xFFAAAA80, // 3 6 6 1
0xFEAAAA80, // 3 7 0 6
0xFEAAAA80, // 3 7 1 5
0xFEAAAA80, // 3 7 2 4
0xFEAAAA80, // 3 7 3 3
0xFEAAAA80, // 3 7 4 2
0xFEAAAA80, // 3 7 5 1
0xFAAAAA80, // 3 8 0 5
0xFAAAAA80, // 3 8 1 4
0xFAAAAA80, // 3 8 2 3
0xFAAAAA80, // 3 8 3 2
0xFAAAAA80, // 3 8 4 1
0xEAAAAA80, // 3 9 0 4
0xEAAAAA80, // 3 9 1 3
0xEAAAAA80, // 3 9 2 2
0xEAAAAA80, // 3 9 3 1
0xAAAAAA80, // 3 10 0 3
0xAAAAAA80, // 3 10 1 2
0xAAAAAA80, // 3 10 2 1
0xAAAAAA80, // 3 11 0 2
0xAAAAAA80, // 3 11 1 1
0xAAAAAA80, // 3 12 0 1
0x55FFAA00, // 4 0 0 12
0x57FFAA00, // 4 0 1 11
0x5FFFAA00, // 4 0 2 10
0x7FFFAA00, // 4 0 3 9
0xFFFFAA00, // 4 0 4 8
0xFFFFAA00, // 4 0 5 7
0xFFFFAA00, // 4 0 6 6
0xFFFFAA00, // 4 0 7 5
0xFFFFAA00, // 4 0 8 4
0xFFFFAA00, // 4 0 9 3
0xFFFFAA00, // 4 0 10 2
0xFFFFAA00, // 4 0 11 1
0x5FFEAA00, // 4 1 0 11
0x7FFEAA00, // 4 1 1 10
0xFFFEAA00, // 4 1 2 9
0xFFFEAA00, // 4 1 3 8
0xFFFEAA00, // 4 1 4 7
0xFFFEAA00, // 4 1 5 6
0xFFFEAA00, // 4 1 6 5
0xFFFEAA00, // 4 1 7 4
0xFFFEAA00, // 4 1 8 3
0xFFFEAA00, // 4 1 9 2
0xFFFEAA00, // 4 1 10 1
0xFFFAAA00, // 4 2 0 10
0xFFFAAA00, // 4 2 1 9
0xFFFAAA00, // 4 2 2 8
0xFFFAAA00, // 4 2 3 7
0xFFFAAA00, // 4 2 4 6
0xFFFAAA00, // 4 2 5 5
0xFFFAAA00, // 4 2 6 4
0xFFFAAA00, // 4 2 7 3
0xFFFAAA00, // 4 2 8 2
0xFFFAAA00, // 4 2 9 1
0xFFEAAA00, // 4 3 0 9
0xFFEAAA00, // 4 3 1 8
0xFFEAAA00, // 4 3 2 7
0xFFEAAA00, // 4 3 3 6
0xFFEAAA00, // 4 3 4 5
0xFFEAAA00, // 4 3 5 4
0xFFEAAA00, // 4 3 6 3
0xFFEAAA00, // 4 3 7 2
0xFFEAAA00, // 4 3 8 1
0xFFAAAA00, // 4 4 0 8
0xFFAAAA00, // 4 4 1 7
0xFFAAAA00, // 4 4 2 6
0xFFAAAA00, // 4 4 3 5
0xFFAAAA00, // 4 4 4 4
0xFFAAAA00, // 4 4 5 3
0xFFAAAA00, // 4 4 6 2
0xFFAAAA00, // 4 4 7 1
0xFEAAAA00, // 4 5 0 7
0xFEAAAA00, // 4 5 1 6
0xFEAAAA00, // 4 5 2 5
0xFEAAAA00, // 4 5 3 4
0xFEAAAA00, // 4 5 4 3
0xFEAAAA00, // 4 5 5 2
0xFEAAAA00, // 4 5 6 1
0xFAAAAA00, // 4 6 0 6
0xFAAAAA00, // 4 6 1 5
0xFAAAAA00, // 4 6 2 4
0xFAAAAA00, // 4 6 3 3
0xFAAAAA00, // 4 6 4 2
0xFAAAAA00, // 4 6 5 1
0xEAAAAA00, // 4 7 0 5
0xEAAAAA00, // 4 7 1 4
0xEAAAAA00, // 4 7 2 3
0xEAAAAA00, // 4 7 3 2
0xEAAAAA00, // 4 7 4 1
0xAAAAAA00, // 4 8 0 4
0xAAAAAA00, // 4 8 1 3
0xAAAAAA00, // 4 8 2 2
0xAAAAAA00, // 4 8 3 1
0xAAAAAA00, // 4 9 0 3
0xAAAAAA00, // 4 9 1 2
0xAAAAAA00, // 4 9 2 1
0xAAAAAA00, // 4 10 0 2
0xAAAAAA00, // 4 10 1 1
0xAAAAAA00, // 4 11 0 1
0x7FFAA800, // 5 0 0 11
0xFFFAA800, // 5 0 1 10
0xFFFAA800, // 5 0 2 9
0xFFFAA800, // 5 0 3 8
0xFFFAA800, // 5 0 4 7
0xFFFAA800, // 5 0 5 6
0xFFFAA800, // 5 0 6 5
0xFFFAA800, // 5 0 7 4
0xFFFAA800, // 5 0 8 3
0xFFFAA800, // 5 0 9 2
0xFFFAA800, // 5 0 10 1
0xFFEAA800, // 5 1 0 10
0xFFEAA800, // 5 1 1 9
0xFFEAA800, // 5 1 2 8
0xFFEAA800, // 5 1 3 7
0xFFEAA800, // 5 1 4 6
0xFFEAA800, // 5 1 5 5
0xFFEAA800, // 5 1 6 4
0xFFEAA800, // 5 1 7 3
0xFFEAA800, // 5 1 8 2
0xFFEAA800, // 5 1 9 1
0xFFAAA800, // 5 2 0 9
0xFFAAA800, // 5 2 1 8
0xFFAAA800, // 5 2 2 7
0xFFAAA800, // 5 2 3 6
0xFFAAA800, // 5 2 4 5
0xFFAAA800, // 5 2 5 4
0xFFAAA800, // 5 2 6 3
0xFFAAA800, // 5 2 7 2
0xFFAAA800, // 5 2 8 1
0xFEAAA800, // 5 3 0 8
0xFEAAA800, // 5 3 1 7
0xFEAAA800, // 5 3 2 6
0xFEAAA800, // 5 3 3 5
0xFEAAA800, // 5 3 4 4
0xFEAAA800, // 5 3 5 3
0xFEAAA800, // 5 3 6 2
0xFEAAA800, // 5 3 7 1
0xFAAAA800, // 5 4 0 7
0xFAAAA800, // 5 4 1 6
0xFAAAA800, // 5 4 2 5
0xFAAAA800, // 5 4 3 4
0xFAAAA800, // 5 4 4 3
0xFAAAA800, // 5 4 5 2
0xFAAAA800, // 5 4 6 1
0xEAAAA800, // 5 5 0 6
0xEAAAA800, // 5 5 1 5
0xEAAAA800, // 5 5 2 4
0xEAAAA800, // 5 5 3 3
0xEAAAA800, // 5 5 4 2
0xEAAAA800, // 5 5 5 1
0xAAAAA800, // 5 6 0 5
0xAAAAA800, // 5 6 1 4
0xAAAAA800, // 5 6 2 3
0xAAAAA800, // 5 6 3 2
0xAAAAA800, // 5 6 4 1
0xAAAAA800, // 5 7 0 4
0xAAAAA800, // 5 7 1 3
0xAAAAA800, // 5 7 2 2
0xAAAAA800, // 5 7 3 1
0xAAAAA800, // 5 8 0 3
0xAAAAA800, // 5 8 1 2
0xAAAAA800, // 5 8 2 1
0xAAAAA800, // 5 9 0 2
0xAAAAA800, // 5 9 1 1
0xAAAAA800, // 5 10 0 1
0xFFAAA000, // 6 0 0 10
0xFFAAA000, // 6 0 1 9
0xFFAAA000, // 6 0 2 8
0xFFAAA000, // 6 0 3 7
0xFFAAA000, // 6 0 4 6
0xFFAAA000, // 6 0 5 5
0xFFAAA000, // 6 0 6 4
0xFFAAA000, // 6 0 7 3
0xFFAAA000, // 6 0 8 2
0xFFAAA000, // 6 0 9 1
0xFEAAA000, // 6 1 0 9
0xFEAAA000, // 6 1 1 8
0xFEAAA000, // 6 1 2 7
0xFEAAA000, // 6 1 3 6
0xFEAAA000, // 6 1 4 5
0xFEAAA000, // 6 1 5 4
0xFEAAA000, // 6 1 6 3
0xFEAAA000, // 6 1 7 2
0xFEAAA000, // 6 1 8 1
0xFAAAA000, // 6 2 0 8
0xFAAAA000, // 6 2 1 7
0xFAAAA000, // 6 2 2 6
0xFAAAA000, // 6 2 3 5
0xFAAAA000, // 6 2 4 4
0xFAAAA000, // 6 2 5 3
0xFAAAA000, // 6 2 6 2
0xFAAAA000, // 6 2 7 1
0xEAAAA000, // 6 3 0 7
0xEAAAA000, // 6 3 1 6
0xEAAAA000, // 6 3 2 5
0xEAAAA000, // 6 3 3 4
0xEAAAA000, // 6 3 4 3
0xEAAAA000, // 6 3 5 2
0xEAAAA000, // 6 3 6 1
0xAAAAA000, // 6 4 0 6
0xAAAAA000, // 6 4 1 5
0xAAAAA000, // 6 4 2 4
0xAAAAA000, // 6 4 3 3
0xAAAAA000, // 6 4 4 2
0xAAAAA000, // 6 4 5 1
0xAAAAA000, // 6 5 0 5
0xAAAAA000, // 6 5 1 4
0xAAAAA000, // 6 5 2 3
0xAAAAA000, // 6 5 3 2
0xAAAAA000, // 6 5 4 1
0xAAAAA000, // 6 6 0 4
0xAAAAA000, // 6 6 1 3
0xAAAAA000, // 6 6 2 2
0xAAAAA000, // 6 6 3 1
0xAAAAA000, // 6 7 0 3
0xAAAAA000, // 6 7 1 2
0xAAAAA000, // 6 7 2 1
0xAAAAA000, // 6 8 0 2
0xAAAAA000, // 6 8 1 1
0xAAAAA000, // 6 9 0 1
0xFAAA8000, // 7 0 0 9
0xFAAA8000, // 7 0 1 8
0xFAAA8000, // 7 0 2 7
0xFAAA8000, // 7 0 3 6
0xFAAA8000, // 7 0 4 5
0xFAAA8000, // 7 0 5 4
0xFAAA8000, // 7 0 6 3
0xFAAA8000, // 7 0 7 2
0xFAAA8000, // 7 0 8 1
0xEAAA8000, // 7 1 0 8
0xEAAA8000, // 7 1 1 7
0xEAAA8000, // 7 1 2 6
0xEAAA8000, // 7 1 3 5
0xEAAA8000, // 7 1 4 4
0xEAAA8000, // 7 1 5 3
0xEAAA8000, // 7 1 6 2
0xEAAA8000, // 7 1 7 1
0xAAAA8000, // 7 2 0 7
0xAAAA8000, // 7 2 1 6
0xAAAA8000, // 7 2 2 5
0xAAAA8000, // 7 2 3 4
0xAAAA8000, // 7 2 4 3
0xAAAA8000, // 7 2 5 2
0xAAAA8000, // 7 2 6 1
0xAAAA8000, // 7 3 0 6
0xAAAA8000, // 7 3 1 5
0xAAAA8000, // 7 3 2 4
0xAAAA8000, // 7 3 3 3
0xAAAA8000, // 7 3 4 2
0xAAAA8000, // 7 3 5 1
0xAAAA8000, // 7 4 0 5
0xAAAA8000, // 7 4 1 4
0xAAAA8000, // 7 4 2 3
0xAAAA8000, // 7 4 3 2
0xAAAA8000, // 7 4 4 1
0xAAAA8000, // 7 5 0 4
0xAAAA8000, // 7 5 1 3
0xAAAA8000, // 7 5 2 2
0xAAAA8000, // 7 5 3 1
0xAAAA8000, // 7 6 0 3
0xAAAA8000, // 7 6 1 2
0xAAAA8000, // 7 6 2 1
0xAAAA8000, // 7 7 0 2
0xAAAA8000, // 7 7 1 1
0xAAAA8000, // 7 8 0 1
0xAAAA0000, // 8 0 0 8
0xAAAA0000, // 8 0 1 7
0xAAAA0000, // 8 0 2 6
0xAAAA0000, // 8 0 3 5
0xAAAA0000, // 8 0 4 4
0xAAAA0000, // 8 0 5 3
0xAAAA0000, // 8 0 6 2
0xAAAA0000, // 8 0 7 1
0xAAAA0000, // 8 1 0 7
0xAAAA0000, // 8 1 1 6
0xAAAA0000, // 8 1 2 5
0xAAAA0000, // 8 1 3 4
0xAAAA0000, // 8 1 4 3
0xAAAA0000, // 8 1 5 2
0xAAAA0000, // 8 1 6 1
0xAAAA0000, // 8 2 0 6
0xAAAA0000, // 8 2 1 5
0xAAAA0000, // 8 2 2 4
0xAAAA0000, // 8 2 3 3
0xAAAA0000, // 8 2 4 2
0xAAAA0000, // 8 2 5 1
0xAAAA0000, // 8 3 0 5
0xAAAA0000, // 8 3 1 4
0xAAAA0000, // 8 3 2 3
0xAAAA0000, // 8 3 3 2
0xAAAA0000, // 8 3 4 1
0xAAAA0000, // 8 4 0 4
0xAAAA0000, // 8 4 1 3
0xAAAA0000, // 8 4 2 2
0xAAAA0000, // 8 4 3 1
0xAAAA0000, // 8 5 0 3
0xAAAA0000, // 8 5 1 2
0xAAAA0000, // 8 5 2 1
0xAAAA0000, // 8 6 0 2
0xAAAA0000, // 8 6 1 1
0xAAAA0000, // 8 7 0 1
0xAAA80000, // 9 0 0 7
0xAAA80000, // 9 0 1 6
0xAAA80000, // 9 0 2 5
0xAAA80000, // 9 0 3 4
0xAAA80000, // 9 0 4 3
0xAAA80000, // 9 0 5 2
0xAAA80000, // 9 0 6 1
0xAAA80000, // 9 1 0 6
0xAAA80000, // 9 1 1 5
0xAAA80000, // 9 1 2 4
0xAAA80000, // 9 1 3 3
0xAAA80000, // 9 1 4 2
0xAAA80000, // 9 1 5 1
0xAAA80000, // 9 2 0 5
0xAAA80000, // 9 2 1 4
0xAAA80000, // 9 2 2 3
0xAAA80000, // 9 2 3 2
0xAAA80000, // 9 2 4 1
0xAAA80000, // 9 3 0 4
0xAAA80000, // 9 3 1 3
0xAAA80000, // 9 3 2 2
0xAAA80000, // 9 3 3 1
0xAAA80000, // 9 4 0 3
0xAAA80000, // 9 4 1 2
0xAAA80000, // 9 4 2 1
0xAAA80000, // 9 5 0 2
0xAAA80000, // 9 5 1 1
0xAAA80000, // 9 6 0 1
0xAAA00000, // 10 0 0 6
0xAAA00000, // 10 0 1 5
0xAAA00000, // 10 0 2 4
0xAAA00000, // 10 0 3 3
0xAAA00000, // 10 0 4 2
0xAAA00000, // 10 0 5 1
0xAAA00000, // 10 1 0 5
0xAAA00000, // 10 1 1 4
0xAAA00000, // 10 1 2 3
0xAAA00000, // 10 1 3 2
0xAAA00000, // 10 1 4 1
0xAAA00000, // 10 2 0 4
0xAAA00000, // 10 2 1 3
0xAAA00000, // 10 2 2 2
0xAAA00000, // 10 2 3 1
0xAAA00000, // 10 3 0 3
0xAAA00000, // 10 3 1 2
0xAAA00000, // 10 3 2 1
0xAAA00000, // 10 4 0 2
0xAAA00000, // 10 4 1 1
0xAAA00000, // 10 5 0 1
0xAA800000, // 11 0 0 5
0xAA800000, // 11 0 1 4
0xAA800000, // 11 0 2 3
0xAA800000, // 11 0 3 2
0xAA800000, // 11 0 4 1
0xAA800000, // 11 1 0 4
0xAA800000, // 11 1 1 3
0xAA800000, // 11 1 2 2
0xAA800000, // 11 1 3 1
0xAA800000, // 11 2 0 3
0xAA800000, // 11 2 1 2
0xAA800000, // 11 2 2 1
0xAA800000, // 11 3 0 2
0xAA800000, // 11 3 1 1
0xAA800000, // 11 4 0 1
0xAA000000, // 12 0 0 4
0xAA000000, // 12 0 1 3
0xAA000000, // 12 0 2 2
0xAA000000, // 12 0 3 1
0xAA000000, // 12 1 0 3
0xAA000000, // 12 1 1 2
0xAA000000, // 12 1 2 1
0xAA000000, // 12 2 0 2
0xAA000000, // 12 2 1 1
0xAA000000, // 12 3 0 1
0xA8000000, // 13 0 0 3
0xA8000000, // 13 0 1 2
0xA8000000, // 13 0 2 1
0xA8000000, // 13 1 0 2
0xA8000000, // 13 1 1 1
0xA8000000, // 13 2 0 1
0xA0000000, // 14 0 0 2
0xA0000000, // 14 0 1 1
0xA0000000, // 14 1 0 1
0x80000000, // 15 0 0 1
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
};

View File

@ -159,7 +159,7 @@ __device__ void loadColorBlock(const uint * image, float3 colors[16], float3 sum
}
}
__device__ void loadColorBlock(const uint * image, float3 colors[16], float3 sums[16], float weights[16], int xrefs[16])
__device__ void loadColorBlock(const uint * image, float3 colors[16], float3 sums[16], float weights[16], int xrefs[16], int * sameColor)
{
const int bid = blockIdx.x;
const int idx = threadIdx.x;
@ -189,6 +189,8 @@ __device__ void loadColorBlock(const uint * image, float3 colors[16], float3 sum
colorSums(colors, sums);
float3 axis = bestFitLine(colors, sums[0], kColorMetric);
*sameColor = (axis == make_float3(0, 0, 0));
dps[idx] = dot(rawColors[idx], axis);
#if __DEVICE_EMULATION__
@ -205,7 +207,7 @@ __device__ void loadColorBlock(const uint * image, float3 colors[16], float3 sum
}
}
__device__ void loadColorBlock(const uint * image, float2 colors[16], float2 sums[16], int xrefs[16])
__device__ void loadColorBlock(const uint * image, float2 colors[16], float2 sums[16], int xrefs[16], int * sameColor)
{
const int bid = blockIdx.x;
const int idx = threadIdx.x;
@ -229,6 +231,8 @@ __device__ void loadColorBlock(const uint * image, float2 colors[16], float2 sum
colorSums(colors, sums);
float2 axis = bestFitLine(colors, sums[0]);
*sameColor = (axis == make_float2(0, 0));
dps[idx] = dot(colors[idx], axis);
#if __DEVICE_EMULATION__
@ -861,7 +865,7 @@ __device__ void evalAllPermutationsCTX(const float2 * colors, float2 colorSum, c
for(int i = 0; i < 16; i++)
{
int pidx = idx + NUM_THREADS * i;
if (pidx >= 992) break;
if (pidx >= 704) break;
ushort start, end;
uint permutation = permutations[pidx];
@ -1024,6 +1028,41 @@ __device__ void saveSingleColorBlockDXT1(float3 color, uint2 * result)
}
}
__device__ void saveSingleColorBlockDXT1(float2 color, uint2 * result)
{
const int bid = blockIdx.x;
int r = color.x * 255;
int g = color.y * 255;
ushort color0 = (OMatch5[r][0] << 11) | (OMatch6[g][0] << 5);
ushort color1 = (OMatch5[r][1] << 11) | (OMatch6[g][1] << 5);
if (color0 < color1)
{
result[bid].x = (color0 << 16) | color1;
result[bid].y = 0xffffffff;
}
else
{
result[bid].x = (color1 << 16) | color0;
result[bid].y = 0xaaaaaaaa;
}
}
__device__ void saveSingleColorBlockCTX1(float2 color, uint2 * result)
{
const int bid = blockIdx.x;
int r = color.x * 255;
int g = color.y * 255;
ushort color0 = (r << 8) | (g);
result[bid].x = (color0 << 16) | color0;
result[bid].y = 0x00000000;
}
////////////////////////////////////////////////////////////////////////////////
// Compress color block
@ -1069,11 +1108,18 @@ __global__ void compressWeightedDXT1(const uint * permutations, const uint * ima
__shared__ float3 sums[16];
__shared__ float weights[16];
__shared__ int xrefs[16];
__shared__ int sameColor;
loadColorBlock(image, colors, sums, weights, xrefs);
loadColorBlock(image, colors, sums, weights, xrefs, &sameColor);
__syncthreads();
if (sameColor)
{
if (threadIdx.x == 0) saveSingleColorBlockDXT1(colors[0], result);
return;
}
ushort bestStart, bestEnd;
uint bestPermutation;
@ -1097,11 +1143,18 @@ __global__ void compressNormalDXT1(const uint * permutations, const uint * image
__shared__ float2 colors[16];
__shared__ float2 sums[16];
__shared__ int xrefs[16];
loadColorBlock(image, colors, sums, xrefs);
__shared__ int sameColor;
loadColorBlock(image, colors, sums, xrefs, &sameColor);
__syncthreads();
if (sameColor)
{
if (threadIdx.x == 0) saveSingleColorBlockDXT1(colors[0], result);
return;
}
ushort bestStart, bestEnd;
uint bestPermutation;
@ -1124,11 +1177,18 @@ __global__ void compressCTX1(const uint * permutations, const uint * image, uint
__shared__ float2 colors[16];
__shared__ float2 sums[16];
__shared__ int xrefs[16];
__shared__ int sameColor;
loadColorBlock(image, colors, sums, xrefs);
loadColorBlock(image, colors, sums, xrefs, &sameColor);
__syncthreads();
if (sameColor)
{
if (threadIdx.x == 0) saveSingleColorBlockCTX1(colors[0], result);
return;
}
ushort bestStart, bestEnd;
uint bestPermutation;

View File

@ -83,7 +83,7 @@ static void convertToBlockLinear(const Image * image, uint * blockLinearImage)
#endif
CudaCompressor::CudaCompressor() : m_bitmapTable(NULL), m_data(NULL), m_result(NULL)
CudaCompressor::CudaCompressor() : m_bitmapTable(NULL), m_bitmapTableCTX(NULL), m_data(NULL), m_result(NULL)
{
#if defined HAVE_CUDA
// Allocate and upload bitmaps.
@ -93,6 +93,12 @@ CudaCompressor::CudaCompressor() : m_bitmapTable(NULL), m_data(NULL), m_result(N
cudaMemcpy(m_bitmapTable, s_bitmapTable, 992 * sizeof(uint), cudaMemcpyHostToDevice);
}
cudaMalloc((void**) &m_bitmapTableCTX, 704 * sizeof(uint));
if (m_bitmapTableCTX != NULL)
{
cudaMemcpy(m_bitmapTableCTX, s_bitmapTableCTX, 704 * sizeof(uint), cudaMemcpyHostToDevice);
}
// Allocate scratch buffers.
cudaMalloc((void**) &m_data, MAX_BLOCKS * 64U);
cudaMalloc((void**) &m_result, MAX_BLOCKS * 8U);
@ -558,7 +564,7 @@ void CudaCompressor::compressCTX1(const nvtt::CompressionOptions::Private & comp
cudaMemcpy(m_data, blockLinearImage + bn * 16, count * 64, cudaMemcpyHostToDevice);
// Launch kernel.
compressKernelCTX1(count, m_data, m_result, m_bitmapTable);
compressKernelCTX1(count, m_data, m_result, m_bitmapTableCTX);
// Check for errors.
cudaError_t err = cudaGetLastError();

View File

@ -50,6 +50,7 @@ namespace nv
private:
uint * m_bitmapTable;
uint * m_bitmapTableCTX;
uint * m_data;
uint * m_result;

View File

@ -139,6 +139,11 @@ inline __device__ __host__ void operator /=(float2 & b, float f)
b.y *= inv;
}
inline __device__ __host__ bool operator ==(float2 a, float2 b)
{
return a.x == b.x && a.y == b.y;
}
inline __device__ __host__ float dot(float2 a, float2 b)
{

View File

@ -74,7 +74,7 @@ bool nv::cuda::isHardwarePresent()
{
#if defined HAVE_CUDA
#if NV_OS_WIN32
if (isWindowsVista()) return false;
//if (isWindowsVista()) return false;
//if (isWindowsVista() || !isWow32()) return false;
#endif
int count = deviceCount();

View File

@ -34,7 +34,7 @@
#define WIDTH 2048
#define HEIGHT 2048
#define INPUT_SIZE (WIDTH*HEIGHT)
#define OUTPUT_SIZE (WIDTH*HEIGHT/16*2)
#define OUTPUT_SIZE (WIDTH*HEIGHT/16*4)
static int s_input[INPUT_SIZE];
static int s_reference[OUTPUT_SIZE];
@ -89,12 +89,8 @@ void precomp()
int num = 0;
printf("{\n");
printf("\t%8X,\n", 0);
printf("const static uint s_bitmapTableCTX[704] =\n{\n");
bitmaps[0] = 0;
num = 1;
for (int a = 1; a <= 15; a++)
{
for (int b = a; b <= 15; b++)
@ -130,9 +126,16 @@ void precomp()
}
}
printf("}\n");
// Align to 32: 680 -> 704
while (num < 704)
{
printf("\t0x80000000,\n");
printf("// num = %d\n", num);
bitmaps[num] = 0x80000000; // 15 0 0 1;
num++;
}
printf("}; // num = %d\n", num);
/*
for( int i = imax; i >= 0; --i )
@ -177,7 +180,7 @@ void precomp()
int main(int argc, char *argv[])
{
//precomp();
// precomp();
nvtt::InputOptions inputOptions;
inputOptions.setTextureLayout(nvtt::TextureType_2D, WIDTH, HEIGHT);
@ -191,7 +194,7 @@ int main(int argc, char *argv[])
inputOptions.setMipmapGeneration(false);
nvtt::CompressionOptions compressionOptions;
compressionOptions.setFormat(nvtt::Format_DXT1);
// compressionOptions.setFormat(nvtt::Format_DXT3);
// compressionOptions.setFormat(nvtt::Format_DXT1n);
// compressionOptions.setFormat(nvtt::Format_CTX1);
@ -203,6 +206,7 @@ int main(int argc, char *argv[])
nvtt::Compressor compressor;
// compressor.enableCudaAcceleration(false);
for (s_frame = 0; s_frame < FRAME_COUNT; s_frame++)
{