citra_qt: Add enhanced texture debugging widgets.

Double-clicking a texture parameter command in the pica command lists will spawn these as a new tab in the pica command list dock area.
This commit is contained in:
Tony Wasserka 2014-08-24 17:23:02 +02:00
parent fd194d95b0
commit 2793619dce
5 changed files with 209 additions and 19 deletions

View file

@ -382,6 +382,18 @@ const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const Texture
return { source_ptr[2], source_ptr[1], source_ptr[0], 255 };
}
TextureInfo TextureInfo::FromPicaRegister(const Regs::TextureConfig& config,
const Regs::TextureFormat& format)
{
TextureInfo info;
info.address = config.GetPhysicalAddress();
info.width = config.width;
info.height = config.height;
info.format = format;
info.stride = Pica::Regs::BytesPerPixel(info.format) * info.width;
return info;
}
void DumpTexture(const Pica::Regs::TextureConfig& texture_config, u8* data) {
// NOTE: Permanently enabling this just trashes hard disks for no reason.
// Hence, this is currently disabled.

View file

@ -192,10 +192,14 @@ void OnPicaRegWrite(u32 id, u32 value);
std::unique_ptr<PicaTrace> FinishPicaTracing();
struct TextureInfo {
unsigned int address;
int width;
int height;
int stride;
Pica::Regs::TextureFormat format;
static TextureInfo FromPicaRegister(const Pica::Regs::TextureConfig& config,
const Pica::Regs::TextureFormat& format);
};
const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const TextureInfo& info);

View file

@ -130,7 +130,20 @@ struct Regs {
// Seems like they are luminance formats and compressed textures.
};
BitField<0, 1, u32> texturing_enable;
static unsigned BytesPerPixel(TextureFormat format) {
if (format == TextureFormat::RGBA8)
return 4;
else if (format == TextureFormat::RGB8)
return 3;
else if (format == TextureFormat::RGBA5551 ||
format == TextureFormat::RGB565 ||
format == TextureFormat::RGBA4)
return 2;
else // placeholder
return 1;
}
BitField< 0, 1, u32> texturing_enable;
TextureConfig texture0;
INSERT_PADDING_WORDS(0x8);
BitField<0, 4, TextureFormat> texture0_format;