From 2f25de55d7fe38169b846bcb24d416e334a66acf Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 24 Sep 2025 20:06:39 +0200 Subject: [PATCH] change depth buffer tracking (#580) --- parallel-rdp/interface.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index f9c5a0ec..8afa7993 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -64,6 +64,7 @@ typedef struct uint32_t texture_pixel_size; uint32_t texture_width; uint32_t framebuffer_height; + bool depth_buffer_enabled; } FrameBufferInfo; typedef struct @@ -699,13 +700,6 @@ uint64_t rdp_process_commands() case RDP::Op::TextureZBufferTriangle: case RDP::Op::ShadeZBufferTriangle: case RDP::Op::ShadeTextureZBufferTriangle: - { - uint32_t offset_address = (rdp_device.frame_buffer_info.depthbuffer_address + pixel_size(2, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; - if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) - { - std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(2, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); - } - } case RDP::Op::FillTriangle: case RDP::Op::TextureTriangle: case RDP::Op::ShadeTriangle: @@ -719,6 +713,15 @@ uint64_t rdp_process_commands() { std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(rdp_device.frame_buffer_info.framebuffer_pixel_size, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); } + + if (rdp_device.frame_buffer_info.depth_buffer_enabled) + { + offset_address = (rdp_device.frame_buffer_info.depthbuffer_address + pixel_size(2, rdp_device.frame_buffer_info.framebuffer_y_offset * rdp_device.frame_buffer_info.framebuffer_width)) >> 3; + if (offset_address < rdram_dirty.size() && !rdram_dirty[offset_address]) + { + std::fill_n(rdram_dirty.begin() + offset_address, (pixel_size(2, rdp_device.frame_buffer_info.framebuffer_width * rdp_device.frame_buffer_info.framebuffer_height) + 7) >> 3, true); + } + } } break; case RDP::Op::LoadTLut: @@ -777,6 +780,9 @@ uint64_t rdp_process_commands() rdp_device.frame_buffer_info.framebuffer_height = lower_right_y - upper_left_y; } break; + case RDP::Op::SetOtherModes: + rdp_device.frame_buffer_info.depth_buffer_enabled = (w2 >> 5) & 1; + break; case RDP::Op::SyncFull: sync_signal = processor->signal_timeline();