mirror of
https://github.com/microsoft/DirectXTex.git
synced 2025-07-09 19:50:13 +02:00
DirectXTex: added alpha weight parameter for BC7 GPU compressor [breaking change]
- texconv has new '-aw' switch to take the parameter
This commit is contained in:
parent
5336f904da
commit
76b79c42b5
@ -309,7 +309,7 @@ static const uint8_t g_aFixUp[3][64][3] =
|
||||
// BC6H Compression
|
||||
const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{
|
||||
{ // 0x00 - 10 5 5 5
|
||||
{ // Mode 1 (0x00) - 10 5 5 5
|
||||
{ M, 0}, { M, 1}, {GY, 4}, {BY, 4}, {BZ, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -321,7 +321,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x01 - 7 6 6 6
|
||||
{ // Mode 2 (0x01) - 7 6 6 6
|
||||
{ M, 0}, { M, 1}, {GY, 5}, {GZ, 4}, {GZ, 5}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {BZ, 0}, {BZ, 1}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {BY, 5}, {BZ, 2}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -333,7 +333,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x02 - 11 5 4 4
|
||||
{ // Mode 3 (0x02) - 11 5 4 4
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -345,7 +345,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x06 - 11 4 5 4
|
||||
{ // Mode 4 (0x06) - 11 4 5 4
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -357,7 +357,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x0a - 11 4 4 5
|
||||
{ // Mode 5 (0x0a) - 11 4 4 5
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -369,7 +369,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x0e - 9 5 5 5
|
||||
{ // Mode 6 (0x0e) - 9 5 5 5
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -381,7 +381,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x12 - 8 6 5 5
|
||||
{ // Mode 7 (0x12) - 8 6 5 5
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {GZ, 4}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {BZ, 2}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -393,7 +393,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x16 - 8 5 6 5
|
||||
{ // Mode 8 (0x16) - 8 5 6 5
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {BZ, 0}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GY, 5}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -405,7 +405,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x1a - 8 5 5 6
|
||||
{ // Mode 9 (0x1a) - 8 5 5 6
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {BZ, 1}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {BY, 5}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -417,7 +417,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x1e - 6 6 6 6
|
||||
{ // Mode 10 (0x1e) - 6 6 6 6
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {GZ, 4}, {BZ, 0}, {BZ, 1}, {BY, 4}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GY, 5}, {BY, 5}, {BZ, 2}, {GY, 4}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -429,7 +429,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{ D, 3}, { D, 4},
|
||||
},
|
||||
|
||||
{ // 0x03 - 10 10
|
||||
{ // Mode 11 (0x03) - 10 10
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -441,7 +441,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{NA, 0}, {NA, 0},
|
||||
},
|
||||
|
||||
{ // 0x07 - 11 9
|
||||
{ // Mode 12 (0x07) - 11 9
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -453,7 +453,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{NA, 0}, {NA, 0},
|
||||
},
|
||||
|
||||
{ // 0x0b - 12 8
|
||||
{ // Mode 13 (0x0b) - 12 8
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -465,7 +465,7 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
{NA, 0}, {NA, 0},
|
||||
},
|
||||
|
||||
{ // 0x0f - 16 4
|
||||
{ // Mode 14 (0x0f) - 16 4
|
||||
{ M, 0}, { M, 1}, { M, 2}, { M, 3}, { M, 4}, {RW, 0}, {RW, 1}, {RW, 2}, {RW, 3}, {RW, 4},
|
||||
{RW, 5}, {RW, 6}, {RW, 7}, {RW, 8}, {RW, 9}, {GW, 0}, {GW, 1}, {GW, 2}, {GW, 3}, {GW, 4},
|
||||
{GW, 5}, {GW, 6}, {GW, 7}, {GW, 8}, {GW, 9}, {BW, 0}, {BW, 1}, {BW, 2}, {BW, 3}, {BW, 4},
|
||||
@ -481,56 +481,56 @@ const D3DX_BC6H::ModeDescriptor D3DX_BC6H::ms_aDesc[14][82] =
|
||||
// Mode, Partitions, Transformed, IndexPrec, RGBAPrec
|
||||
const D3DX_BC6H::ModeInfo D3DX_BC6H::ms_aInfo[] =
|
||||
{
|
||||
{0x00, 1, true, 3, LDRColorA(10,10,10,0), LDRColorA( 5, 5, 5,0), LDRColorA(5,5,5,0), LDRColorA(5,5,5,0)}, // Mode 0
|
||||
{0x01, 1, true, 3, LDRColorA( 7, 7, 7,0), LDRColorA( 6, 6, 6,0), LDRColorA(6,6,6,0), LDRColorA(6,6,6,0)}, // Mode 1
|
||||
{0x02, 1, true, 3, LDRColorA(11,11,11,0), LDRColorA( 5, 4, 4,0), LDRColorA(5,4,4,0), LDRColorA(5,4,4,0)}, // Mode 2
|
||||
{0x06, 1, true, 3, LDRColorA(11,11,11,0), LDRColorA( 4, 5, 4,0), LDRColorA(4,5,4,0), LDRColorA(4,5,4,0)}, // Mode 3
|
||||
{0x0a, 1, true, 3, LDRColorA(11,11,11,0), LDRColorA( 4, 4, 5,0), LDRColorA(4,4,5,0), LDRColorA(4,4,5,0)}, // Mode 4
|
||||
{0x0e, 1, true, 3, LDRColorA( 9, 9, 9,0), LDRColorA( 5, 5, 5,0), LDRColorA(5,5,5,0), LDRColorA(5,5,5,0)}, // Mode 5
|
||||
{0x12, 1, true, 3, LDRColorA( 8, 8, 8,0), LDRColorA( 6, 5, 5,0), LDRColorA(6,5,5,0), LDRColorA(6,5,5,0)}, // Mode 6
|
||||
{0x16, 1, true, 3, LDRColorA( 8, 8, 8,0), LDRColorA( 5, 6, 5,0), LDRColorA(5,6,5,0), LDRColorA(5,6,5,0)}, // Mode 7
|
||||
{0x1a, 1, true, 3, LDRColorA( 8, 8, 8,0), LDRColorA( 5, 5, 6,0), LDRColorA(5,5,6,0), LDRColorA(5,5,6,0)}, // Mode 8
|
||||
{0x1e, 1, false, 3, LDRColorA( 6, 6, 6,0), LDRColorA( 6, 6, 6,0), LDRColorA(6,6,6,0), LDRColorA(6,6,6,0)}, // Mode 9
|
||||
{0x03, 0, false, 4, LDRColorA(10,10,10,0), LDRColorA(10,10,10,0), LDRColorA(0,0,0,0), LDRColorA(0,0,0,0)}, // Mode 10
|
||||
{0x07, 0, true, 4, LDRColorA(11,11,11,0), LDRColorA( 9, 9, 9,0), LDRColorA(0,0,0,0), LDRColorA(0,0,0,0)}, // Mode 11
|
||||
{0x0b, 0, true, 4, LDRColorA(12,12,12,0), LDRColorA( 8, 8, 8,0), LDRColorA(0,0,0,0), LDRColorA(0,0,0,0)}, // Mode 12
|
||||
{0x0f, 0, true, 4, LDRColorA(16,16,16,0), LDRColorA( 4, 4, 4,0), LDRColorA(0,0,0,0), LDRColorA(0,0,0,0)}, // Mode 13
|
||||
{0x00, 1, true, 3, LDRColorA(10,10,10,0), LDRColorA( 5, 5, 5,0), LDRColorA(5,5,5,0), LDRColorA(5,5,5,0)}, // Mode 1
|
||||
{0x01, 1, true, 3, LDRColorA( 7, 7, 7,0), LDRColorA( 6, 6, 6,0), LDRColorA(6,6,6,0), LDRColorA(6,6,6,0)}, // Mode 2
|
||||
{0x02, 1, true, 3, LDRColorA(11,11,11,0), LDRColorA( 5, 4, 4,0), LDRColorA(5,4,4,0), LDRColorA(5,4,4,0)}, // Mode 3
|
||||
{0x06, 1, true, 3, LDRColorA(11,11,11,0), LDRColorA( 4, 5, 4,0), LDRColorA(4,5,4,0), LDRColorA(4,5,4,0)}, // Mode 4
|
||||
{0x0a, 1, true, 3, LDRColorA(11,11,11,0), LDRColorA( 4, 4, 5,0), LDRColorA(4,4,5,0), LDRColorA(4,4,5,0)}, // Mode 5
|
||||
{0x0e, 1, true, 3, LDRColorA( 9, 9, 9,0), LDRColorA( 5, 5, 5,0), LDRColorA(5,5,5,0), LDRColorA(5,5,5,0)}, // Mode 6
|
||||
{0x12, 1, true, 3, LDRColorA( 8, 8, 8,0), LDRColorA( 6, 5, 5,0), LDRColorA(6,5,5,0), LDRColorA(6,5,5,0)}, // Mode 7
|
||||
{0x16, 1, true, 3, LDRColorA( 8, 8, 8,0), LDRColorA( 5, 6, 5,0), LDRColorA(5,6,5,0), LDRColorA(5,6,5,0)}, // Mode 8
|
||||
{0x1a, 1, true, 3, LDRColorA( 8, 8, 8,0), LDRColorA( 5, 5, 6,0), LDRColorA(5,5,6,0), LDRColorA(5,5,6,0)}, // Mode 9
|
||||
{0x1e, 1, false, 3, LDRColorA( 6, 6, 6,0), LDRColorA( 6, 6, 6,0), LDRColorA(6,6,6,0), LDRColorA(6,6,6,0)}, // Mode 10
|
||||
{0x03, 0, false, 4, LDRColorA(10,10,10,0), LDRColorA(10,10,10,0), LDRColorA(0,0,0,0), LDRColorA(0,0,0,0)}, // Mode 11
|
||||
{0x07, 0, true, 4, LDRColorA(11,11,11,0), LDRColorA( 9, 9, 9,0), LDRColorA(0,0,0,0), LDRColorA(0,0,0,0)}, // Mode 12
|
||||
{0x0b, 0, true, 4, LDRColorA(12,12,12,0), LDRColorA( 8, 8, 8,0), LDRColorA(0,0,0,0), LDRColorA(0,0,0,0)}, // Mode 13
|
||||
{0x0f, 0, true, 4, LDRColorA(16,16,16,0), LDRColorA( 4, 4, 4,0), LDRColorA(0,0,0,0), LDRColorA(0,0,0,0)}, // Mode 14
|
||||
};
|
||||
|
||||
const int D3DX_BC6H::ms_aModeToInfo[] =
|
||||
{
|
||||
0, // 0x00
|
||||
1, // 0x01
|
||||
2, // 0x02
|
||||
10, // 0x03
|
||||
-1, // 0x04
|
||||
-1, // 0x05
|
||||
3, // 0x06
|
||||
11, // 0x07
|
||||
-1, // 0x08
|
||||
-1, // 0x09
|
||||
4, // 0x0a
|
||||
12, // 0x0b
|
||||
-1, // 0x0c
|
||||
-1, // 0x0d
|
||||
5, // 0x0e
|
||||
13, // 0x0f
|
||||
-1, // 0x10
|
||||
-1, // 0x11
|
||||
6, // 0x12
|
||||
-1, // 0x13
|
||||
-1, // 0x14
|
||||
-1, // 0x15
|
||||
7, // 0x16
|
||||
-1, // 0x17
|
||||
-1, // 0x18
|
||||
-1, // 0x19
|
||||
8, // 0x1a
|
||||
-1, // 0x1b
|
||||
-1, // 0x1c
|
||||
-1, // 0x1d
|
||||
9, // 0x1e
|
||||
-1, // 0x1f
|
||||
0, // Mode 1 - 0x00
|
||||
1, // Mode 2 - 0x01
|
||||
2, // Mode 3 - 0x02
|
||||
10, // Mode 11 - 0x03
|
||||
-1, // Invalid - 0x04
|
||||
-1, // Invalid - 0x05
|
||||
3, // Mode 4 - 0x06
|
||||
11, // Mode 12 - 0x07
|
||||
-1, // Invalid - 0x08
|
||||
-1, // Invalid - 0x09
|
||||
4, // Mode 5 - 0x0a
|
||||
12, // Mode 13 - 0x0b
|
||||
-1, // Invalid - 0x0c
|
||||
-1, // Invalid - 0x0d
|
||||
5, // Mode 6 - 0x0e
|
||||
13, // Mode 14 - 0x0f
|
||||
-1, // Invalid - 0x10
|
||||
-1, // Invalid - 0x11
|
||||
6, // Mode 7 - 0x12
|
||||
-1, // Reserved - 0x13
|
||||
-1, // Invalid - 0x14
|
||||
-1, // Invalid - 0x15
|
||||
7, // Mode 8 - 0x16
|
||||
-1, // Reserved - 0x17
|
||||
-1, // Invalid - 0x18
|
||||
-1, // Invalid - 0x19
|
||||
8, // Mode 9 - 0x1a
|
||||
-1, // Reserved - 0x1b
|
||||
-1, // Invalid - 0x1c
|
||||
-1, // Invalid - 0x1d
|
||||
9, // Mode 10 - 0x1e
|
||||
-1, // Resreved - 0x1f
|
||||
};
|
||||
|
||||
// BC7 compression: uPartitions, uPartitionBits, uPBits, uRotationBits, uIndexModeBits, uIndexPrec, uIndexPrec2, RGBAPrec, RGBAPrecWithP
|
||||
|
@ -191,6 +191,8 @@ HRESULT GPUCompressBC::Prepare( size_t width, size_t height, DXGI_FORMAT format,
|
||||
m_width = width;
|
||||
m_height = height;
|
||||
|
||||
m_alphaWeight = alphaWeight;
|
||||
|
||||
size_t xblocks = std::max<size_t>( 1, (width + 3) >> 2 );
|
||||
size_t yblocks = std::max<size_t>( 1, (height + 3) >> 2 );
|
||||
size_t num_blocks = xblocks * yblocks;
|
||||
|
@ -510,10 +510,10 @@ namespace DirectX
|
||||
// Note that alphaRef is only used by BC1. 0.5f is a typical value to use
|
||||
|
||||
HRESULT Compress( _In_ ID3D11Device* pDevice, _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ DWORD compress,
|
||||
_Out_ ScratchImage& image );
|
||||
_In_ float alphaWeight, _Out_ ScratchImage& image );
|
||||
HRESULT Compress( _In_ ID3D11Device* pDevice, _In_ const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata,
|
||||
_In_ DXGI_FORMAT format, _In_ DWORD compress, _Out_ ScratchImage& cImages );
|
||||
// DirectCompute-based compression
|
||||
_In_ DXGI_FORMAT format, _In_ DWORD compress, _In_ float alphaWeight, _Out_ ScratchImage& cImages );
|
||||
// DirectCompute-based compression (alphaWeight is only used by BC7. 1.0 is the typical value to use)
|
||||
|
||||
HRESULT Decompress( _In_ const Image& cImage, _In_ DXGI_FORMAT format, _Out_ ScratchImage& image );
|
||||
HRESULT Decompress( _In_reads_(nimages) const Image* cImages, _In_ size_t nimages, _In_ const TexMetadata& metadata,
|
||||
|
@ -198,7 +198,7 @@ inline static HRESULT _GPUCompress( _In_ GPUCompressBC* gpubc, _In_ const Image&
|
||||
// Compression
|
||||
//-------------------------------------------------------------------------------------
|
||||
_Use_decl_annotations_
|
||||
HRESULT Compress( ID3D11Device* pDevice, const Image& srcImage, DXGI_FORMAT format, DWORD compress, ScratchImage& image )
|
||||
HRESULT Compress( ID3D11Device* pDevice, const Image& srcImage, DXGI_FORMAT format, DWORD compress, float alphaWeight, ScratchImage& image )
|
||||
{
|
||||
if ( !pDevice || IsCompressed(srcImage.format) || !IsCompressed(format) )
|
||||
return E_INVALIDARG;
|
||||
@ -216,7 +216,7 @@ HRESULT Compress( ID3D11Device* pDevice, const Image& srcImage, DXGI_FORMAT form
|
||||
if ( FAILED(hr) )
|
||||
return hr;
|
||||
|
||||
hr = gpubc->Prepare( srcImage.width, srcImage.height, format );
|
||||
hr = gpubc->Prepare( srcImage.width, srcImage.height, format, alphaWeight );
|
||||
if ( FAILED(hr) )
|
||||
return hr;
|
||||
|
||||
@ -241,7 +241,7 @@ HRESULT Compress( ID3D11Device* pDevice, const Image& srcImage, DXGI_FORMAT form
|
||||
|
||||
_Use_decl_annotations_
|
||||
HRESULT Compress( ID3D11Device* pDevice, const Image* srcImages, size_t nimages, const TexMetadata& metadata,
|
||||
DXGI_FORMAT format, DWORD compress, ScratchImage& cImages )
|
||||
DXGI_FORMAT format, DWORD compress, float alphaWeight, ScratchImage& cImages )
|
||||
{
|
||||
if ( !pDevice || !srcImages || !nimages )
|
||||
return E_INVALIDARG;
|
||||
@ -295,7 +295,7 @@ HRESULT Compress( ID3D11Device* pDevice, const Image* srcImages, size_t nimages,
|
||||
|
||||
for( size_t level=0; level < metadata.mipLevels; ++level )
|
||||
{
|
||||
hr = gpubc->Prepare( w, h, format );
|
||||
hr = gpubc->Prepare( w, h, format, alphaWeight );
|
||||
if ( FAILED(hr) )
|
||||
{
|
||||
cImages.Release();
|
||||
@ -346,7 +346,7 @@ HRESULT Compress( ID3D11Device* pDevice, const Image* srcImages, size_t nimages,
|
||||
|
||||
for( size_t level=0; level < metadata.mipLevels; ++level )
|
||||
{
|
||||
hr = gpubc->Prepare( w, h, format );
|
||||
hr = gpubc->Prepare( w, h, format, alphaWeight );
|
||||
if ( FAILED(hr) )
|
||||
{
|
||||
cImages.Release();
|
||||
|
@ -46,6 +46,7 @@ enum OPTIONS // Note: dwOptions below assumes 32 or less options.
|
||||
OPT_NOGPU,
|
||||
OPT_FEATURE_LEVEL,
|
||||
OPT_FIT_POWEROF2,
|
||||
OPT_ALPHA_WEIGHT,
|
||||
OPT_MAX
|
||||
};
|
||||
|
||||
@ -99,6 +100,7 @@ SValue g_pOptions[] =
|
||||
{ L"nogpu", OPT_NOGPU },
|
||||
{ L"fl", OPT_FEATURE_LEVEL },
|
||||
{ L"pow2", OPT_FIT_POWEROF2 },
|
||||
{ L"aw", OPT_ALPHA_WEIGHT },
|
||||
{ nullptr, 0 }
|
||||
};
|
||||
|
||||
@ -393,6 +395,8 @@ void PrintUsage()
|
||||
wprintf( L" -wrap, -mirror texture addressing mode (wrap, mirror, or clamp)\n");
|
||||
wprintf( L" -pmalpha convert final texture to use premultiplied alpha\n");
|
||||
wprintf( L" -pow2 resize to fit a power-of-2, respecting aspect ratio\n" );
|
||||
wprintf( L" -aw BC7 GPU compressor weighting for alpha error metric\n"
|
||||
L" (defaults to 1.0)\n" );
|
||||
wprintf( L" -fl <feature-level> Set maximum feature level target (defaults to 11.0)\n");
|
||||
wprintf( L"\n (DDS input only)\n");
|
||||
wprintf( L" -t{u|f} TYPELESS format is treated as UNORM or FLOAT\n");
|
||||
@ -570,6 +574,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
|
||||
DWORD dwFilterOpts = 0;
|
||||
DWORD FileType = CODEC_DDS;
|
||||
DWORD maxSize = 16384;
|
||||
float alphaWeight = 1.f;
|
||||
|
||||
WCHAR szPrefix [MAX_PATH];
|
||||
WCHAR szSuffix [MAX_PATH];
|
||||
@ -759,6 +764,22 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case OPT_ALPHA_WEIGHT:
|
||||
if (swscanf_s(pValue, L"%f", &alphaWeight) != 1)
|
||||
{
|
||||
wprintf( L"Invalid value specified with -aw (%s)\n", pValue);
|
||||
printf("\n");
|
||||
PrintUsage();
|
||||
return 1;
|
||||
}
|
||||
else if ( alphaWeight < 0.f )
|
||||
{
|
||||
wprintf( L"-aw (%s) parameter must be positive\n", pValue);
|
||||
printf("\n");
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1388,7 +1409,7 @@ int __cdecl wmain(_In_ int argc, _In_z_count_(argc) wchar_t* argv[])
|
||||
|
||||
if ( bc6hbc7 && pDevice )
|
||||
{
|
||||
hr = Compress( pDevice, img, nimg, info, tformat, dwSRGB, *timage );
|
||||
hr = Compress( pDevice, img, nimg, info, tformat, dwSRGB, alphaWeight, *timage );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user