From e8a1c04abf58fcc0fa28cb584f806d28f1607fd9 Mon Sep 17 00:00:00 2001 From: "sl1nk3.s" Date: Fri, 4 Mar 2011 23:14:21 +0000 Subject: Fix a typo in BPFunctions causing a PanicAlert in SW:RS2. Really minor bugfix in DX9. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7285 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/VideoCommon/Src/BPFunctions.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'Source/Core/VideoCommon/Src/BPFunctions.cpp') diff --git a/Source/Core/VideoCommon/Src/BPFunctions.cpp b/Source/Core/VideoCommon/Src/BPFunctions.cpp index 7e804e1b57..70fad31a08 100644 --- a/Source/Core/VideoCommon/Src/BPFunctions.cpp +++ b/Source/Core/VideoCommon/Src/BPFunctions.cpp @@ -140,6 +140,15 @@ void ClearScreen(const BPCmd &bp, const EFBRectangle &rc) void OnPixelFormatChange(const BPCmd &bp) { int convtype = -1; + u32 current_format = Renderer::GetPrevPixelFormat(); + u32 new_format = bpmem.zcontrol.pixel_format; + u32 old_format = current_format & 0x3; + + // Check for Z compression format change + // When using 16bit Z, the game may enable a special compression format which we need to handle + // If we don't, Z values will be completely screwed up, currently only Star Wars:RS2 uses that. + //if (new_format == PIXELFMT_RGB565_Z16 && bpmem.zcontrol.zformat != (current_format >> 2)) + // VertexShaderManager::SetZformatChanged(); /* * When changing the EFB format, the pixel data won't get converted to the new format but stays the same. @@ -150,14 +159,12 @@ void OnPixelFormatChange(const BPCmd &bp) !g_ActiveConfig.backend_info.bSupportsFormatReinterpretation) return; - unsigned int new_format = bpmem.zcontrol.pixel_format; - unsigned int old_format = Renderer::GetPrevPixelFormat(); - - // no need to reinterpret pixel data in these cases + // no need to reinterpret pixel data in that cases if (new_format == old_format || old_format == (unsigned int)-1) goto skip; - switch (old_format) + // Check for pixel format changes + switch (old_format & 0x3) { case PIXELFMT_RGB8_Z24: case PIXELFMT_Z24: @@ -183,21 +190,26 @@ void OnPixelFormatChange(const BPCmd &bp) if (new_format == PIXELFMT_RGB8_Z24 || new_format == PIXELFMT_Z24) convtype = 4; - else if (new_format == PIXELFMT_RGB565_Z16) + else if (new_format == PIXELFMT_RGBA6_Z24) convtype = 5; break; default: break; } + if (convtype == -1) { - PanicAlert("Unhandled EFB format change: %d to %d\n", old_format, new_format); + ERROR_LOG(VIDEO, "Unhandled EFB format change: %d to %d\n", old_format & 0x3, new_format); goto skip; } + g_renderer->ReinterpretPixelData(convtype); + skip: - Renderer::StorePixelFormat(new_format); + DEBUG_LOG(VIDEO, "pixelfmt: pixel=%d, zc=%d", new_format, bpmem.zcontrol.zformat); + + Renderer::StorePixelFormat(new_format | (bpmem.zcontrol.zformat << 2)); } bool GetConfig(const int &type) -- cgit v1.2.3