Merge pull request #1034 from yuriks/rg8-textures

videocore: Added RG8 texture support
This commit is contained in:
bunnei 2015-08-16 22:17:12 -04:00
commit 1f18c9f8dd
4 changed files with 27 additions and 2 deletions

View file

@ -73,7 +73,7 @@ TextureInfoDockWidget::TextureInfoDockWidget(const Pica::DebugUtils::TextureInfo
format_choice->addItem(tr("RGB565")); format_choice->addItem(tr("RGB565"));
format_choice->addItem(tr("RGBA4")); format_choice->addItem(tr("RGBA4"));
format_choice->addItem(tr("IA8")); format_choice->addItem(tr("IA8"));
format_choice->addItem(tr("UNK6")); format_choice->addItem(tr("RG8"));
format_choice->addItem(tr("I8")); format_choice->addItem(tr("I8"));
format_choice->addItem(tr("A8")); format_choice->addItem(tr("A8"));
format_choice->addItem(tr("IA4")); format_choice->addItem(tr("IA4"));

View file

@ -68,6 +68,15 @@ inline const Math::Vec4<u8> DecodeRGB8(const u8* bytes) {
return { bytes[2], bytes[1], bytes[0], 255 }; return { bytes[2], bytes[1], bytes[0], 255 };
} }
/**
* Decode a color stored in RG8 (aka HILO8) format
* @param bytes Pointer to encoded source color
* @return Result color decoded as Math::Vec4<u8>
*/
inline const Math::Vec4<u8> DecodeRG8(const u8* bytes) {
return { bytes[1], bytes[0], 0, 255 };
}
/** /**
* Decode a color stored in RGB565 format * Decode a color stored in RGB565 format
* @param bytes Pointer to encoded source color * @param bytes Pointer to encoded source color
@ -151,6 +160,15 @@ inline void EncodeRGB8(const Math::Vec4<u8>& color, u8* bytes) {
bytes[0] = color.b(); bytes[0] = color.b();
} }
/**
* Encode a color as RG8 (aka HILO8) format
* @param color Source color to encode
* @param bytes Destination pointer to store encoded color
*/
inline void EncodeRG8(const Math::Vec4<u8>& color, u8* bytes) {
bytes[1] = color.r();
bytes[0] = color.g();
}
/** /**
* Encode a color as RGB565 format * Encode a color as RGB565 format
* @param color Source color to encode * @param color Source color to encode

View file

@ -410,6 +410,12 @@ const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const Texture
} }
} }
case Regs::TextureFormat::RG8:
{
auto res = Color::DecodeRG8(source + VideoCore::GetMortonOffset(x, y, 2));
return { res.r(), res.g(), 0, 255 };
}
case Regs::TextureFormat::I8: case Regs::TextureFormat::I8:
{ {
const u8* source_ptr = source + VideoCore::GetMortonOffset(x, y, 1); const u8* source_ptr = source + VideoCore::GetMortonOffset(x, y, 1);

View file

@ -174,7 +174,7 @@ struct Regs {
RGB565 = 3, RGB565 = 3,
RGBA4 = 4, RGBA4 = 4,
IA8 = 5, IA8 = 5,
RG8 = 6, ///< @note Also called HILO8 in 3DBrew.
I8 = 7, I8 = 7,
A8 = 8, A8 = 8,
IA4 = 9, IA4 = 9,
@ -215,6 +215,7 @@ struct Regs {
case TextureFormat::RGB565: case TextureFormat::RGB565:
case TextureFormat::RGBA4: case TextureFormat::RGBA4:
case TextureFormat::IA8: case TextureFormat::IA8:
case TextureFormat::RG8:
return 4; return 4;
case TextureFormat::I4: case TextureFormat::I4: