From 57795d81cbc26be2fd4ae764ad7656e27b790af6 Mon Sep 17 00:00:00 2001 From: antangelo <antonio.abbatangelo@gmail.com> Date: Tue, 28 Dec 2021 17:53:47 -0500 Subject: [PATCH] nv2a: Don't mark surface dirty on unchanged offset, pitch --- hw/xbox/nv2a/pgraph.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/hw/xbox/nv2a/pgraph.c b/hw/xbox/nv2a/pgraph.c index e76976849b..f7fa4af6b6 100644 --- a/hw/xbox/nv2a/pgraph.c +++ b/hw/xbox/nv2a/pgraph.c @@ -1180,30 +1180,28 @@ DEF_METHOD(NV097, SET_SURFACE_FORMAT) DEF_METHOD(NV097, SET_SURFACE_PITCH) { pgraph_update_surface(d, false, true, true); + unsigned int color_pitch = GET_MASK(parameter, NV097_SET_SURFACE_PITCH_COLOR); + unsigned int zeta_pitch = GET_MASK(parameter, NV097_SET_SURFACE_PITCH_ZETA); - pg->surface_color.pitch = - GET_MASK(parameter, NV097_SET_SURFACE_PITCH_COLOR); - pg->surface_zeta.pitch = - GET_MASK(parameter, NV097_SET_SURFACE_PITCH_ZETA); + pg->surface_color.buffer_dirty |= (pg->surface_color.pitch != color_pitch); + pg->surface_color.pitch = color_pitch; - pg->surface_color.buffer_dirty = true; - pg->surface_zeta.buffer_dirty = true; + pg->surface_zeta.buffer_dirty |= (pg->surface_zeta.pitch != zeta_pitch); + pg->surface_zeta.pitch = zeta_pitch; } DEF_METHOD(NV097, SET_SURFACE_COLOR_OFFSET) { pgraph_update_surface(d, false, true, true); - + pg->surface_color.buffer_dirty |= (pg->surface_color.offset != parameter); pg->surface_color.offset = parameter; - pg->surface_color.buffer_dirty = true; } DEF_METHOD(NV097, SET_SURFACE_ZETA_OFFSET) { pgraph_update_surface(d, false, true, true); - + pg->surface_zeta.buffer_dirty |= (pg->surface_zeta.offset != parameter); pg->surface_zeta.offset = parameter; - pg->surface_zeta.buffer_dirty = true; } DEF_METHOD(NV097, SET_COMBINER_ALPHA_ICW) @@ -5582,9 +5580,6 @@ static void pgraph_update_surface(NV2AState *d, bool upload, color_write = color_write && pgraph_color_write_enabled(pg); zeta_write = zeta_write && pgraph_zeta_write_enabled(pg); - // FIXME: We don't need to bind/unbind so much (fix reprogram of same - // pitch/offset causing dirty) - if (upload) { bool fb_dirty = pgraph_framebuffer_dirty(pg); if (fb_dirty) {