Compacted FormatInfos table

This commit is contained in:
PatrickvL 2017-04-11 11:16:47 +02:00
parent 695491c97f
commit 2a60c17c4e
1 changed files with 88 additions and 148 deletions

View File

@ -49,7 +49,7 @@
// L = luminance, byte : 0 = pure black ARGB(1, 0,0,0) to 255 = pure white ARGB(1,255,255,255) // L = luminance, byte : 0 = pure black ARGB(1, 0,0,0) to 255 = pure white ARGB(1,255,255,255)
// P = pallete // P = pallete
enum _ComponentEncoding { enum _ComponentEncoding {
NoComponents = 0, // Format doesn't contain any component (ARGB/QWVU) NoCmpnts = 0, // Format doesn't contain any component (ARGB/QWVU)
A1R5G5B5, A1R5G5B5,
X1R5G5B5, X1R5G5B5,
A4R4G4B4, A4R4G4B4,
@ -103,10 +103,10 @@ static const XTL::ComponentEncodingInfo ComponentEncodingInfos[] = {
}; };
enum _FormatStorage { enum _FormatStorage {
Undefined = 0, Undfnd = 0, // Undefined
Linear, Linear,
Swizzled, Swzzld, // Swizzled
Compressed Cmprsd // Compressed
}; };
typedef struct _FormatInfo { typedef struct _FormatInfo {
@ -118,147 +118,87 @@ typedef struct _FormatInfo {
} FormatInfo; } FormatInfo;
static const FormatInfo FormatInfos[] = { static const FormatInfo FormatInfos[] = {
// X_D3DFMT_L8 = 0x00, // Notes :
{ 8, Swizzled, ______L8, XTL::D3DFMT_L8 }, // * This table should use a native format that most closely mirrors the Xbox format,
// X_D3DFMT_AL8 = 0x01, // and (for now) MUST use a format that uses the same number of bits/bytes per pixel,
{ 8, Swizzled, _____AL8, XTL::D3DFMT_L8, "X_D3DFMT_AL8 -> D3DFMT_L8" }, // Cxbx NOTE: Hack: Alpha ignored, basically // TODO : Requires conversion // as otherwise locked buffers wouldn't be of the same size as on the Xbox, which
// X_D3DFMT_A1R5G5B5 = 0x02, // could lead to out-of-bounds access violations.
{ 16, Swizzled, A1R5G5B5, XTL::D3DFMT_A1R5G5B5 }, // * Each format for which the host D3D8 doesn't have an identical native format,
// X_D3DFMT_X1R5G5B5 = 0x03, // and does specify color components (other than NoComponents), MUST specify this fact
{ 16, Swizzled, X1R5G5B5, XTL::D3DFMT_X1R5G5B5 }, // in the warning field, so EmuXBFormatRequiresConversionToARGB can return a conversion
// X_D3DFMT_A4R4G4B4 = 0x04, // to ARGB is needed (which is implemented in EMUPATCH(D3DResource_Register).
{ 16, Swizzled, A4R4G4B4, XTL::D3DFMT_A4R4G4B4 },
// X_D3DFMT_R5G6B5 = 0x05, /* 0x00 X_D3DFMT_L8 */ { 8, Swzzld, ______L8, XTL::D3DFMT_L8 },
{ 16, Swizzled, __R5G6B5, XTL::D3DFMT_R5G6B5 }, /* 0x01 X_D3DFMT_AL8 */ { 8, Swzzld, _____AL8, XTL::D3DFMT_L8, "X_D3DFMT_AL8 -> D3DFMT_L8" },
// X_D3DFMT_A8R8G8B8 = 0x06, /* 0x02 X_D3DFMT_A1R5G5B5 */ { 16, Swzzld, A1R5G5B5, XTL::D3DFMT_A1R5G5B5 },
{ 32, Swizzled, A8R8G8B8, XTL::D3DFMT_A8R8G8B8 }, /* 0x03 X_D3DFMT_X1R5G5B5 */ { 16, Swzzld, X1R5G5B5, XTL::D3DFMT_X1R5G5B5 },
// X_D3DFMT_X8R8G8B8 = 0x07, // Alias : X_D3DFMT_X8L8V8U8 /* 0x04 X_D3DFMT_A4R4G4B4 */ { 16, Swzzld, A4R4G4B4, XTL::D3DFMT_A4R4G4B4 },
{ 32, Swizzled, X8R8G8B8, XTL::D3DFMT_X8R8G8B8 }, /* 0x05 X_D3DFMT_R5G6B5 */ { 16, Swzzld, __R5G6B5, XTL::D3DFMT_R5G6B5 },
// undefined : 0x08, /* 0x06 X_D3DFMT_A8R8G8B8 */ { 32, Swzzld, A8R8G8B8, XTL::D3DFMT_A8R8G8B8 },
{ }, /* 0x07 X_D3DFMT_X8R8G8B8 */ { 32, Swzzld, X8R8G8B8, XTL::D3DFMT_X8R8G8B8 }, // Alias : X_D3DFMT_X8L8V8U8
// undefined : 0x09, /* 0x08 undefined */ {},
{ }, /* 0x09 undefined */ {},
// undefined : 0x0A, /* 0x0A undefined */ {},
{ }, /* 0x0B X_D3DFMT_P8 */ { 8, Swzzld, NoCmpnts, XTL::D3DFMT_P8 }, // 8-bit palletized
// X_D3DFMT_P8 = 0x0B, // 8-bit Palletized /* 0x0C X_D3DFMT_DXT1 */ { 4, Cmprsd, NoCmpnts, XTL::D3DFMT_DXT1 }, // opaque/one-bit alpha // NOTE : DXT1 is half byte per pixel, so divide Size and Pitch calculations by two!
{ 8, Swizzled, NoComponents, XTL::D3DFMT_P8 }, // 0x0D undefined */ {},
// X_D3DFMT_DXT1 = 0x0C, // opaque/one-bit alpha /* 0x0E X_D3DFMT_DXT3 */ { 8, Cmprsd, NoCmpnts, XTL::D3DFMT_DXT3 }, // Alias : X_D3DFMT_DXT2 // linear alpha
{ 4, Compressed, NoComponents, XTL::D3DFMT_DXT1 }, // NOTE : DXT1 is half byte per pixel, so divide Size and Pitch calculations by two! /* 0x0F X_D3DFMT_DXT5 */ { 8, Cmprsd, NoCmpnts, XTL::D3DFMT_DXT5 }, // Alias : X_D3DFMT_DXT4 // interpolated alpha
// undefined : 0x0D, /* 0x10 X_D3DFMT_LIN_A1R5G5B5 */ { 16, Linear, A1R5G5B5, XTL::D3DFMT_A1R5G5B5 },
{ }, /* 0x11 X_D3DFMT_LIN_R5G6B5 */ { 16, Linear, __R5G6B5, XTL::D3DFMT_R5G6B5 },
// X_D3DFMT_DXT3 = 0x0E, // linear alpha. Alias : X_D3DFMT_DXT2 /* 0x12 X_D3DFMT_LIN_A8R8G8B8 */ { 32, Linear, A8R8G8B8, XTL::D3DFMT_A8R8G8B8 },
{ 8, Compressed, NoComponents, XTL::D3DFMT_DXT3 }, /* 0x13 X_D3DFMT_LIN_L8 */ { 8, Linear, ______L8, XTL::D3DFMT_L8 },
// X_D3DFMT_DXT5 = 0x0F, // interpolated alpha. Alias : X_D3DFMT_DXT4 /* 0x14 undefined */ {},
{ 8, Compressed, NoComponents, XTL::D3DFMT_DXT5 }, /* 0x15 undefined */ {},
// X_D3DFMT_LIN_A1R5G5B5 = 0x10, /* 0x16 X_D3DFMT_LIN_R8B8 */ { 16, Linear, ____R8B8, XTL::D3DFMT_R5G6B5, "X_D3DFMT_LIN_R8B8 -> D3DFMT_R5G6B5" },
{ 16, Linear, A1R5G5B5, XTL::D3DFMT_A1R5G5B5 }, /* 0x17 X_D3DFMT_LIN_G8B8 */ { 16, Linear, ____G8B8, XTL::D3DFMT_R5G6B5, "X_D3DFMT_LIN_G8B8 -> D3DFMT_R5G6B5" }, // Alias : X_D3DFMT_LIN_V8U8
// X_D3DFMT_LIN_R5G6B5 = 0x11, // 0x18 undefined */ {},
{ 16, Linear, __R5G6B5, XTL::D3DFMT_R5G6B5 }, /* 0x19 X_D3DFMT_A8 */ { 8, Swzzld, ______A8, XTL::D3DFMT_A8 },
// X_D3DFMT_LIN_A8R8G8B8 = 0x12, /* 0x1A X_D3DFMT_A8L8 */ { 16, Swzzld, ____A8L8, XTL::D3DFMT_A8L8 },
{ 32, Linear, A8R8G8B8, XTL::D3DFMT_A8R8G8B8 }, /* 0x1B X_D3DFMT_LIN_AL8 */ { 8, Linear, _____AL8, XTL::D3DFMT_L8, "X_D3DFMT_LIN_AL8 -> D3DFMT_L8" },
// X_D3DFMT_LIN_L8 = 0x13, /* 0x1C X_D3DFMT_LIN_X1R5G5B5 */ { 16, Linear, X1R5G5B5, XTL::D3DFMT_X1R5G5B5 },
{ 8, Linear, ______L8, XTL::D3DFMT_L8 }, /* 0x1D X_D3DFMT_LIN_A4R4G4B4 */ { 16, Linear, A4R4G4B4, XTL::D3DFMT_A4R4G4B4 },
// undefined : 0x14, /* 0x1E X_D3DFMT_LIN_X8R8G8B8 */ { 32, Linear, X8R8G8B8, XTL::D3DFMT_X8R8G8B8 }, // Alias : X_D3DFMT_LIN_X8L8V8U8
{ }, /* 0x1F X_D3DFMT_LIN_A8 */ { 8, Linear, ______A8, XTL::D3DFMT_A8 },
// undefined : 0x15, /* 0x20 X_D3DFMT_LIN_A8L8 */ { 16, Linear, ____A8L8, XTL::D3DFMT_A8L8 },
{ }, /* 0x21 undefined */ {},
// X_D3DFMT_LIN_R8B8 = 0x16, /* 0x22 undefined */ {},
{ 16, Linear, ____R8B8, XTL::D3DFMT_R5G6B5, "X_D3DFMT_LIN_R8B8 -> D3DFMT_R5G6B5" }, // Cxbx NOTE: HACK: Totally and utterly wrong :) // TODO : Requires conversion /* 0x23 undefined */ {},
// X_D3DFMT_LIN_G8B8 = 0x17, // Alias : X_D3DFMT_LIN_V8U8 /* 0x24 X_D3DFMT_YUY2 */ { 16, Undfnd, NoCmpnts, XTL::D3DFMT_YUY2 },
{ 16, Linear, ____G8B8, XTL::D3DFMT_R5G6B5, "X_D3DFMT_LIN_G8B8 -> D3DFMT_R5G6B5" }, // Cxbx NOTE: HACK: Totally and utterly wrong :) // TODO : Requires conversion /* 0x25 X_D3DFMT_UYVY */ { 16, Undfnd, NoCmpnts, XTL::D3DFMT_UYVY },
// undefined : 0x18, // 0x26 undefined */ {},
{ }, /* 0x27 X_D3DFMT_L6V5U5 */ { 16, Swzzld, __R6G5B5, XTL::D3DFMT_L6V5U5 }, // Alias : X_D3DFMT_R6G5B5 // XQEMU NOTE : This might be signed
// X_D3DFMT_A8 = 0x19, /* 0x28 X_D3DFMT_V8U8 */ { 16, Swzzld, ____G8B8, XTL::D3DFMT_V8U8 }, // Alias : X_D3DFMT_G8B8 // XQEMU NOTE : This might be signed
{ 8, Swizzled, ______A8, XTL::D3DFMT_A8 }, /* 0x29 X_D3DFMT_R8B8 */ { 16, Swzzld, ____R8B8, XTL::D3DFMT_R5G6B5, "X_D3DFMT_R8B8 -> D3DFMT_R5G6B5" }, // XQEMU NOTE : This might be signed
// X_D3DFMT_A8L8 = 0x1A, /* 0x2A X_D3DFMT_D24S8 */ { 32, Swzzld, NoCmpnts, XTL::D3DFMT_D24S8 },
{ 16, Swizzled, ____A8L8, XTL::D3DFMT_A8L8 }, /* 0x2B X_D3DFMT_F24S8 */ { 32, Swzzld, NoCmpnts, XTL::D3DFMT_D24S8, "X_D3DFMT_F24S8 -> D3DFMT_D24S8" }, // HACK : PC doesn't have D3DFMT_F24S8 (Float vs Int)
// X_D3DFMT_LIN_AL8 = 0x1B, /* 0x2C X_D3DFMT_D16 */ { 16, Swzzld, NoCmpnts, XTL::D3DFMT_D16 }, // Alias : X_D3DFMT_D16_LOCKABLE // TODO : D3DFMT_D16 is always lockable on Xbox; Should PC use D3DFMT_D16_LOCKABLE instead? Needs testcase.
{ 8, Linear, _____AL8, XTL::D3DFMT_L8, "X_D3DFMT_LIN_AL8 -> D3DFMT_L8" }, // Cxbx NOTE: Hack: Alpha ignored, basically // TODO : Requires conversion /* 0x2D X_D3DFMT_F16 */ { 16, Swzzld, NoCmpnts, XTL::D3DFMT_D16, "X_D3DFMT_F16 -> D3DFMT_D16" }, // HACK : PC doesn't have D3DFMT_F16 (Float vs Int)
// X_D3DFMT_LIN_X1R5G5B5 = 0x1C, /* 0x2E X_D3DFMT_LIN_D24S8 */ { 32, Linear, NoCmpnts, XTL::D3DFMT_D24S8 },
{ 16, Linear, X1R5G5B5, XTL::D3DFMT_X1R5G5B5 }, /* 0x2F X_D3DFMT_LIN_F24S8 */ { 32, Linear, NoCmpnts, XTL::D3DFMT_D24S8, "X_D3DFMT_LIN_F24S8 -> D3DFMT_D24S8" }, // HACK : PC doesn't have D3DFMT_F24S8 (Float vs Int)
// X_D3DFMT_LIN_A4R4G4B4 = 0x1D, /* 0x30 X_D3DFMT_LIN_D16 */ { 16, Linear, NoCmpnts, XTL::D3DFMT_D16 }, // TODO : D3DFMT_D16 is always lockable on Xbox; Should PC use D3DFMT_D16_LOCKABLE instead? Needs testcase.
{ 16, Linear, A4R4G4B4, XTL::D3DFMT_A4R4G4B4 }, /* 0x31 X_D3DFMT_LIN_F16 */ { 16, Linear, NoCmpnts, XTL::D3DFMT_D16, "X_D3DFMT_LIN_F16 -> D3DFMT_D16" }, // HACK : PC doesn't have D3DFMT_F16 (Float vs Int)
// X_D3DFMT_LIN_X8R8G8B8 = 0x1E, // Alias : X_D3DFMT_LIN_X8L8V8U8 /* 0x32 X_D3DFMT_L16 */ { 16, Swzzld, _____L16, XTL::D3DFMT_A8L8, "X_D3DFMT_L16 -> D3DFMT_A8L8" },
{ 32, Linear, X8R8G8B8, XTL::D3DFMT_X8R8G8B8 }, /* 0x33 X_D3DFMT_V16U16 */ { 32, Swzzld, NoCmpnts, XTL::D3DFMT_V16U16 },
// X_D3DFMT_LIN_A8 = 0x1F, // 0x34 undefined */ {},
{ 8, Linear, ______A8, XTL::D3DFMT_A8 }, /* 0x35 X_D3DFMT_LIN_L16 */ { 16, Linear, _____L16, XTL::D3DFMT_A8L8, "X_D3DFMT_LIN_L16 -> D3DFMT_A8L8" },
// X_D3DFMT_LIN_A8L8 = 0x20, /* 0x36 X_D3DFMT_LIN_V16U16 */ { 32, Linear, NoCmpnts, XTL::D3DFMT_V16U16 },
{ 16, Linear, ____A8L8, XTL::D3DFMT_A8L8 }, /* 0x37 X_D3DFMT_LIN_L6V5U5 */ { 16, Linear, __R6G5B5, XTL::D3DFMT_L6V5U5 }, // Alias : X_D3DFMT_LIN_R6G5B5
// undefined : 0x21, /* 0x38 X_D3DFMT_R5G5B5A1 */ { 16, Swzzld, R5G5B5A1, XTL::D3DFMT_A1R5G5B5, "X_D3DFMT_R5G5B5A1 -> D3DFMT_A1R5G5B5" },
{ }, /* 0x39 X_D3DFMT_R4G4B4A4 */ { 16, Swzzld, R4G4B4A4, XTL::D3DFMT_A4R4G4B4, "X_D3DFMT_R4G4B4A4 -> D3DFMT_A4R4G4B4" },
// undefined : 0x22, /* 0x3A X_D3DFMT_Q8W8V8U8 */ { 32, Swzzld, A8B8G8R8, XTL::D3DFMT_Q8W8V8U8 }, // Alias : X_D3DFMT_A8B8G8R8 // TODO : Needs testcase.
{ }, /* 0x3B X_D3DFMT_B8G8R8A8 */ { 32, Swzzld, B8G8R8A8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_B8G8R8A8 -> D3DFMT_A8R8G8B8" },
// undefined : 0x23, /* 0x3C X_D3DFMT_R8G8B8A8 */ { 32, Swzzld, R8G8B8A8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_R8G8B8A8 -> D3DFMT_A8R8G8B8" },
{ }, /* 0x3D X_D3DFMT_LIN_R5G5B5A1 */ { 16, Linear, R5G5B5A1, XTL::D3DFMT_A1R5G5B5, "X_D3DFMT_LIN_R5G5B5A1 -> D3DFMT_A1R5G5B5" },
// X_D3DFMT_YUY2 = 0x24, /* 0x3E X_D3DFMT_LIN_R4G4B4A4 */ { 16, Linear, R4G4B4A4, XTL::D3DFMT_A4R4G4B4, "X_D3DFMT_LIN_R4G4B4A4 -> D3DFMT_A4R4G4B4" },
{ 16, Undefined, NoComponents, XTL::D3DFMT_YUY2 }, /* 0x3F X_D3DFMT_LIN_A8B8G8R8 */ { 32, Linear, A8B8G8R8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_LIN_A8B8G8R8 -> D3DFMT_A8R8G8B8" },
// X_D3DFMT_UYVY = 0x25, /* 0x40 X_D3DFMT_LIN_B8G8R8A8 */ { 32, Linear, B8G8R8A8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_LIN_B8G8R8A8 -> D3DFMT_A8R8G8B8" },
{ 16, Undefined, NoComponents, XTL::D3DFMT_UYVY }, /* 0x41 X_D3DFMT_LIN_R8G8B8A8 */ { 32, Linear, R8G8B8A8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_LIN_R8G8B8A8 -> D3DFMT_A8R8G8B8" },
// undefined : 0x26, #if 0
{ }, /* 0x42 to 0x63 undefined */ {},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},
// X_D3DFMT_L6V5U5 = 0x27, // Alias : X_D3DFMT_R6G5B5 /* 0x64 X_D3DFMT_VERTEXDATA */ { 8, Linear, NoCmpnts, XTL::D3DFMT_VERTEXDATA },
{ 16, Swizzled, __R6G5B5, XTL::D3DFMT_L6V5U5 }, // XQEMU NOTE: This might be signed /* 0x65 X_D3DFMT_INDEX16 */ { 16, Linear, NoCmpnts, XTL::D3DFMT_INDEX16 }, // Dxbx addition : X_D3DFMT_INDEX16 is not an Xbox format, but used internally
// X_D3DFMT_V8U8 = 0x28, // Alias : X_D3DFMT_G8B8 #endif
{ 16, Swizzled, ____G8B8, XTL::D3DFMT_V8U8 }, // XQEMU NOTE: This might be signed
// X_D3DFMT_R8B8 = 0x29,
{ 16, Swizzled, ____R8B8, XTL::D3DFMT_R5G6B5, "X_D3DFMT_R8B8 -> D3DFMT_R5G6B5" }, // Cxbx NOTE: HACK: Totally and utterly wrong, // XQEMU NOTE : This might be signed // TODO : Requires conversion
// X_D3DFMT_D24S8 = 0x2A,
{ 32, Swizzled, NoComponents, XTL::D3DFMT_D24S8 },
// X_D3DFMT_F24S8 = 0x2B,
{ 32, Swizzled, NoComponents, XTL::D3DFMT_D24S8, "X_D3DFMT_F24S8 -> D3DFMT_D24S8" }, // NOTE: Hack!! PC does not have XTL::D3DFMT_F24S8 (Float vs Int)
// X_D3DFMT_D16 = 0x2C, // Alias : X_D3DFMT_D16_LOCKABLE
{ 16, Swizzled, NoComponents, XTL::D3DFMT_D16 }, // TODO -oCXBX: XTL::D3DFMT_D16 on Xbox is always lockable - Should we use XTL::D3DFMT_D16_LOCKABLE instead? Needs testcase...
// X_D3DFMT_F16 = 0x2D,
{ 16, Swizzled, NoComponents, XTL::D3DFMT_D16, "X_D3DFMT_F16 -> D3DFMT_D16" }, // NOTE: Hack!! PC does not have XTL::D3DFMT_F16 (Float vs Int)
// X_D3DFMT_LIN_D24S8 = 0x2E,
{ 32, Linear, NoComponents, XTL::D3DFMT_D24S8 },
// X_D3DFMT_LIN_F24S8 = 0x2F,
{ 32, Linear, NoComponents, XTL::D3DFMT_D24S8, "X_D3DFMT_LIN_F24S8 -> D3DFMT_D24S8" }, // NOTE: Hack!! PC does not have XTL::D3DFMT_F24S8 (Float vs Int)
// X_D3DFMT_LIN_D16 = 0x30,
{ 16, Linear, NoComponents, XTL::D3DFMT_D16 }, // TODO -oCXBX: XTL::D3DFMT_D16 on Xbox is always lockable - Should we use XTL::D3DFMT_D16_LOCKABLE instead? Needs testcase...
// X_D3DFMT_LIN_F16 = 0x31,
{ 16, Linear, NoComponents, XTL::D3DFMT_D16, "X_D3DFMT_LIN_F16 -> D3DFMT_D16" }, // NOTE: Hack!! PC does not have XTL::D3DFMT_F16 (Float vs Int)
// X_D3DFMT_L16 = 0x32,
{ 16, Swizzled, _____L16, XTL::D3DFMT_A8L8, "X_D3DFMT_L16 -> D3DFMT_A8L8" }, // TODO : Requires conversion
// X_D3DFMT_V16U16 = 0x33,
{ 32, Swizzled, NoComponents, XTL::D3DFMT_V16U16 },
// undefined : 0x34,
{ },
// X_D3DFMT_LIN_L16 = 0x35,
{ 16, Linear, _____L16, XTL::D3DFMT_A8L8, "X_D3DFMT_L16 -> D3DFMT_A8L8" }, // TODO : Requires conversion
// X_D3DFMT_LIN_V16U16 = 0x36,
{ 32, Linear, NoComponents, XTL::D3DFMT_V16U16 },
// X_D3DFMT_LIN_L6V5U5 = 0x37, // Alias : X_D3DFMT_LIN_R6G5B5
{ 16, Linear, __R6G5B5, XTL::D3DFMT_L6V5U5 },
// X_D3DFMT_R5G5B5A1 = 0x38,
{ 16, Swizzled, R5G5B5A1, XTL::D3DFMT_A1R5G5B5, "X_D3DFMT_R5G5B5A1 -> D3DFMT_A1R5G5B5" }, // TODO : Requires conversion
// X_D3DFMT_R4G4B4A4 = 0x39,
{ 16, Swizzled, R4G4B4A4, XTL::D3DFMT_A4R4G4B4, "X_D3DFMT_R4G4B4A4 -> D3DFMT_A4R4G4B4" }, // TODO : Requires conversion
// X_D3DFMT_Q8W8V8U8 = 0x3A, // Alias : X_D3DFMT_A8B8G8R8
{ 32, Swizzled, A8B8G8R8, XTL::D3DFMT_Q8W8V8U8 }, // Was : D3DFMT_A8R8G8B8 // TODO : Test
// X_D3DFMT_B8G8R8A8 = 0x3B,
{ 32, Swizzled, B8G8R8A8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_B8G8R8A8 -> D3DFMT_A8R8G8B8" }, // TODO : Requires conversion
// X_D3DFMT_R8G8B8A8 = 0x3C,
{ 32, Swizzled, R8G8B8A8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_R8G8B8A8 -> D3DFMT_A8R8G8B8" }, // TODO : Requires conversion
// X_D3DFMT_LIN_R5G5B5A1 = 0x3D,
{ 16, Linear, R5G5B5A1, XTL::D3DFMT_A1R5G5B5, "X_D3DFMT_LIN_R5G5B5A1 -> D3DFMT_A1R5G5B5" }, // TODO : Requires conversion
// X_D3DFMT_LIN_R4G4B4A4 = 0x3E,
{ 16, Linear, R4G4B4A4, XTL::D3DFMT_A4R4G4B4, "X_D3DFMT_LIN_R4G4B4A4 -> D3DFMT_A4R4G4B4" }, // TODO : Requires conversion
// X_D3DFMT_LIN_A8B8G8R8 = 0x3F,
{ 32, Linear, A8B8G8R8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_LIN_A8B8G8R8 -> D3DFMT_A8R8G8B8" }, // Cxbx NOTE: HACK: R<->B Swapped! // TODO : Requires conversion
// X_D3DFMT_LIN_B8G8R8A8 = 0x40,
{ 32, Linear, B8G8R8A8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_LIN_B8G8R8A8 -> D3DFMT_A8R8G8B8" }, // TODO : Requires conversion
// X_D3DFMT_LIN_R8G8B8A8 = 0x41,
{ 32, Linear, R8G8B8A8, XTL::D3DFMT_A8R8G8B8, "X_D3DFMT_LIN_R8G8B8A8 -> D3DFMT_A8R8G8B8" }, // TODO : Requires conversion
/*
// undefined : 0x42-0x63
{},
// X_D3DFMT_VERTEXDATA = 0x64,
{ 8, Linear, NoComponents, XTL::D3DFMT_VERTEXDATA },
// Dxbx addition : X_D3DFMT_INDEX16 is not an Xbox format, but used internally
// X_D3DFMT_INDEX16 = 0x65
{ 16, Linear, NoComponents, XTL::D3DFMT_INDEX16 },
*/
}; };
XTL::D3DCOLOR XTL::DecodeUInt32ToColor(const ComponentEncodingInfo * encoding, const uint32 value) XTL::D3DCOLOR XTL::DecodeUInt32ToColor(const ComponentEncodingInfo * encoding, const uint32 value)
@ -274,7 +214,7 @@ XTL::D3DCOLOR XTL::DecodeUInt32ToColor(const ComponentEncodingInfo * encoding, c
const XTL::ComponentEncodingInfo *XTL::EmuXBFormatComponentEncodingInfo(X_D3DFORMAT Format) const XTL::ComponentEncodingInfo *XTL::EmuXBFormatComponentEncodingInfo(X_D3DFORMAT Format)
{ {
if (Format <= X_D3DFMT_LIN_R8G8B8A8) if (Format <= X_D3DFMT_LIN_R8G8B8A8)
if (FormatInfos[Format].components != NoComponents) if (FormatInfos[Format].components != NoCmpnts)
return &(ComponentEncodingInfos[FormatInfos[Format].components]); return &(ComponentEncodingInfos[FormatInfos[Format].components]);
return nullptr; return nullptr;
@ -308,7 +248,7 @@ DWORD XTL::EmuXBFormatBytesPerPixel(X_D3DFORMAT Format)
BOOL XTL::EmuXBFormatIsCompressed(X_D3DFORMAT Format) BOOL XTL::EmuXBFormatIsCompressed(X_D3DFORMAT Format)
{ {
if (Format <= X_D3DFMT_LIN_R8G8B8A8) if (Format <= X_D3DFMT_LIN_R8G8B8A8)
return (FormatInfos[Format].stored == Compressed); return (FormatInfos[Format].stored == Cmprsd);
return false; return false;
} }
@ -324,7 +264,7 @@ BOOL XTL::EmuXBFormatIsLinear(X_D3DFORMAT Format)
BOOL XTL::EmuXBFormatIsSwizzled(X_D3DFORMAT Format) BOOL XTL::EmuXBFormatIsSwizzled(X_D3DFORMAT Format)
{ {
if (Format <= X_D3DFMT_LIN_R8G8B8A8) if (Format <= X_D3DFMT_LIN_R8G8B8A8)
return (FormatInfos[Format].stored == Swizzled); return (FormatInfos[Format].stored == Swzzld);
return false; return false;
} }