From 4bd1a07706a2a65abe3c665671cd12caf9f54e12 Mon Sep 17 00:00:00 2001 From: Antonio Abbatangelo Date: Thu, 10 Feb 2022 21:18:09 -0500 Subject: [PATCH] nv2a: adjust display resolution in 1080i mode --- hw/xbox/nv2a/nv2a_regs.h | 4 ++++ hw/xbox/nv2a/pgraph.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/hw/xbox/nv2a/nv2a_regs.h b/hw/xbox/nv2a/nv2a_regs.h index 8e0110f2d1..05de51bbbe 100644 --- a/hw/xbox/nv2a/nv2a_regs.h +++ b/hw/xbox/nv2a/nv2a_regs.h @@ -619,6 +619,10 @@ #define NV_PCRTC_RASTER 0x00000808 +#define NV_PRMCIO_INTERLACE_MODE 0x00000039 +# define NV_PRMCIO_INTERLACE_MODE_DISABLED 0xff + + #define NV_PVIDEO_INTR 0x00000100 # define NV_PVIDEO_INTR_BUFFER_0 (1 << 0) # define NV_PVIDEO_INTR_BUFFER_1 (1 << 4) diff --git a/hw/xbox/nv2a/pgraph.c b/hw/xbox/nv2a/pgraph.c index 94de42a5fb..2c978acd12 100644 --- a/hw/xbox/nv2a/pgraph.c +++ b/hw/xbox/nv2a/pgraph.c @@ -4910,6 +4910,11 @@ static void pgraph_render_display(NV2AState *d, SurfaceBinding *surface) d->vga.get_offsets(&d->vga, &pline_offset, &pstart_addr, &pline_compare); int line_offset = surface->pitch / pline_offset; + /* Adjust viewport height for interlaced mode, used only in 1080i */ + if (d->vga.cr[NV_PRMCIO_INTERLACE_MODE] != NV_PRMCIO_INTERLACE_MODE_DISABLED) { + height *= 2; + } + pgraph_apply_scaling_factor(pg, &width, &height); glBindFramebuffer(GL_FRAMEBUFFER, d->pgraph.disp_rndr.fbo);