citra-qt: Add depth formats to framebuffer viewing widget.

master
Tony Wasserka 2015-04-21 22:18:58 +07:00
parent 88df3fbf27
commit 302e9a20f3
2 changed files with 33 additions and 6 deletions

@ -55,7 +55,9 @@ GraphicsFramebufferWidget::GraphicsFramebufferWidget(std::shared_ptr<Pica::Debug
framebuffer_format_control->addItem(tr("RGBA4")); framebuffer_format_control->addItem(tr("RGBA4"));
framebuffer_format_control->addItem(tr("D16")); framebuffer_format_control->addItem(tr("D16"));
framebuffer_format_control->addItem(tr("D24")); framebuffer_format_control->addItem(tr("D24"));
framebuffer_format_control->addItem(tr("D24S8")); framebuffer_format_control->addItem(tr("D24X8"));
framebuffer_format_control->addItem(tr("X24S8"));
framebuffer_format_control->addItem(tr("(unknown)"));
// TODO: This QLabel should shrink the image to the available space rather than just expanding... // TODO: This QLabel should shrink the image to the available space rather than just expanding...
framebuffer_picture_label = new QLabel; framebuffer_picture_label = new QLabel;
@ -221,7 +223,24 @@ void GraphicsFramebufferWidget::OnUpdate()
framebuffer_address = framebuffer.GetDepthBufferPhysicalAddress(); framebuffer_address = framebuffer.GetDepthBufferPhysicalAddress();
framebuffer_width = framebuffer.GetWidth(); framebuffer_width = framebuffer.GetWidth();
framebuffer_height = framebuffer.GetHeight(); framebuffer_height = framebuffer.GetHeight();
switch (framebuffer.depth_format) {
case Pica::Regs::DepthFormat::D16:
framebuffer_format = Format::D16; framebuffer_format = Format::D16;
break;
case Pica::Regs::DepthFormat::D24:
framebuffer_format = Format::D24;
break;
case Pica::Regs::DepthFormat::D24S8:
framebuffer_format = Format::D24X8;
break;
default:
framebuffer_format = Format::Unknown;
break;
}
break; break;
} }
@ -282,7 +301,7 @@ void GraphicsFramebufferWidget::OnUpdate()
color.b() = (data >> 16) & 0xFF; color.b() = (data >> 16) & 0xFF;
break; break;
} }
case Format::D24S8: case Format::D24X8:
{ {
Math::Vec2<u32> data = Color::DecodeD24S8(pixel); Math::Vec2<u32> data = Color::DecodeD24S8(pixel);
color.r() = data.x & 0xFF; color.r() = data.x & 0xFF;
@ -290,6 +309,12 @@ void GraphicsFramebufferWidget::OnUpdate()
color.b() = (data.x >> 16) & 0xFF; color.b() = (data.x >> 16) & 0xFF;
break; break;
} }
case Format::X24S8:
{
Math::Vec2<u32> data = Color::DecodeD24S8(pixel);
color.r() = color.g() = color.b() = data.y;
break;
}
default: default:
qDebug() << "Unknown fb color format " << static_cast<int>(framebuffer_format); qDebug() << "Unknown fb color format " << static_cast<int>(framebuffer_format);
break; break;
@ -310,7 +335,8 @@ void GraphicsFramebufferWidget::OnUpdate()
u32 GraphicsFramebufferWidget::BytesPerPixel(GraphicsFramebufferWidget::Format format) { u32 GraphicsFramebufferWidget::BytesPerPixel(GraphicsFramebufferWidget::Format format) {
switch (format) { switch (format) {
case Format::RGBA8: case Format::RGBA8:
case Format::D24S8: case Format::D24X8:
case Format::X24S8:
return 4; return 4;
case Format::RGB8: case Format::RGB8:
case Format::D24: case Format::D24:

@ -35,8 +35,9 @@ class GraphicsFramebufferWidget : public BreakPointObserverDock {
RGBA4 = 4, RGBA4 = 4,
D16 = 5, D16 = 5,
D24 = 6, D24 = 6,
D24S8 = 7, D24X8 = 7,
Unknown = 8 X24S8 = 8,
Unknown = 9
}; };
static u32 BytesPerPixel(Format format); static u32 BytesPerPixel(Format format);