diff options
| author | sl1nk3.s <sl1nk3.s@gmail.com> | 2011-03-04 23:14:21 +0000 |
|---|---|---|
| committer | sl1nk3.s <sl1nk3.s@gmail.com> | 2011-03-04 23:14:21 +0000 |
| commit | e8a1c04abf58fcc0fa28cb584f806d28f1607fd9 (patch) | |
| tree | 7626728e51376de5cd5cff27a89d71bfcded6693 /Source/Core | |
| parent | c569b33829e77ab9a568198152e5eabe32fdcb8d (diff) | |
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
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/VideoCommon/Src/BPFunctions.cpp | 28 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/Src/BPMemory.h | 16 |
2 files changed, 33 insertions, 11 deletions
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) diff --git a/Source/Core/VideoCommon/Src/BPMemory.h b/Source/Core/VideoCommon/Src/BPMemory.h index 422b515dcc..bcee41461f 100644 --- a/Source/Core/VideoCommon/Src/BPMemory.h +++ b/Source/Core/VideoCommon/Src/BPMemory.h @@ -757,13 +757,23 @@ union ConstantAlpha #define PIXELFMT_V8 6 #define PIXELFMT_YUV420 7 +#define ZC_LINEAR 0 +#define ZC_NEAR 1 +#define ZC_MID 2 +#define ZC_FAR 3 +// It seems these Z formats aren't supported/were removed ? +#define ZC_INV_LINEAR 4 +#define ZC_INV_NEAR 5 +#define ZC_INV_MID 6 +#define ZC_INV_FAR 7 + union PE_CONTROL { struct { - u32 pixel_format : 3; // PIXELFMT_X - u32 zformat : 3; // 0 - linear, 1 - near, 2 - mid, 3 - far - u32 zcomploc : 1; // 1: before tex stage + u32 pixel_format : 3; // PIXELFMT_X + u32 zformat : 3; // Z Compression for 16bit Z format + u32 zcomploc : 1; // 1: before tex stage u32 unused : 17; u32 rid : 8; }; |
