From c1972f1b1389cbdbafbe22a862901e1dacb70374 Mon Sep 17 00:00:00 2001 From: starfrost013 Date: Sun, 18 May 2025 19:24:43 +0100 Subject: [PATCH] fix nv3_render_to_chroma --- src/video/nv/nv3/render/nv3_render_blit.c | 7 +++---- src/video/nv/nv3/render/nv3_render_core.c | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/video/nv/nv3/render/nv3_render_blit.c b/src/video/nv/nv3/render/nv3_render_blit.c index 0b0cb1c31..596d7b7a1 100644 --- a/src/video/nv/nv3/render/nv3_render_blit.c +++ b/src/video/nv/nv3/render/nv3_render_blit.c @@ -133,8 +133,7 @@ void nv3_render_blit_screen2screen(nv3_grobj_t grobj) if ((grobj.grobj_0 >> NV3_PGRAPH_CONTEXT_SWITCH_DST_BUFFER1_ENABLED) & 0x01) dst_buffer = 1; if ((grobj.grobj_0 >> NV3_PGRAPH_CONTEXT_SWITCH_DST_BUFFER2_ENABLED) & 0x01) dst_buffer = 2; if ((grobj.grobj_0 >> NV3_PGRAPH_CONTEXT_SWITCH_DST_BUFFER3_ENABLED) & 0x01) dst_buffer = 3; - - bool cross_buffer_blit = (nv3->pgraph.boffset[src_buffer] != nv3->pgraph.boffset[dst_buffer]); + nv3_coord_16_t old_position = nv3->pgraph.blit.point_in; nv3_coord_16_t new_position = nv3->pgraph.blit.point_out; @@ -160,7 +159,7 @@ void nv3_render_blit_screen2screen(nv3_grobj_t grobj) { buf_position = (nv3->pgraph.blit.size.x * y); /* shouldn't matter in non-wtf mode */ - vram_position = nv3_render_get_vram_address_for_buffer(old_position, src_buffer); + vram_position = nv3_render_get_vram_address_for_buffer(old_position, dst_buffer); memcpy(&nv3_s2sb_line_buffer[buf_position], &nv3->nvbase.svga.vram[vram_position], size_x); old_position.y++; @@ -171,7 +170,7 @@ void nv3_render_blit_screen2screen(nv3_grobj_t grobj) for (int32_t y = 0; y < nv3->pgraph.blit.size.y; y++) { buf_position = (nv3->pgraph.blit.size.x * y); - vram_position = nv3_render_get_vram_address_for_buffer(new_position, dst_buffer); + vram_position = nv3_render_get_vram_address_for_buffer(new_position, src_buffer); memcpy(&nv3->nvbase.svga.vram[vram_position], &nv3_s2sb_line_buffer[buf_position], size_x); new_position.y++; diff --git a/src/video/nv/nv3/render/nv3_render_core.c b/src/video/nv/nv3/render/nv3_render_core.c index 72617c6aa..9611d8349 100644 --- a/src/video/nv/nv3/render/nv3_render_core.c +++ b/src/video/nv/nv3/render/nv3_render_core.c @@ -187,7 +187,7 @@ bool nv3_render_chroma_test(uint32_t color, nv3_grobj_t grobj) uint32_t nv3_render_to_chroma(nv3_color_expanded_t expanded) { // convert the alpha to 1 bit. then return packed rgb10 - return !!expanded.a | (expanded.r << 30) | (expanded.b << 20) | (expanded.b << 10); + return !!expanded.a | (expanded.r << 30) | (expanded.g << 20) | (expanded.b << 10); } /* Get a colour for a palette index. (The colours are 24 bit RGB888 with a 0xFF alpha added for some purposes.) */ @@ -611,6 +611,8 @@ void nv3_render_current_bpp() + (nv3->nvbase.svga.crtc[NV3_CRTC_REGISTER_STARTADDR_HIGH] << 8) + nv3->nvbase.svga.crtc[NV3_CRTC_REGISTER_STARTADDR_LOW]; + //uint32_t dba = 1920000; + nv3_coord_16_t screen_size = {0}; screen_size.x = nv3->nvbase.svga.hdisp; screen_size.y = nv3->nvbase.svga.dispend;