summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/BPStructs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/Src/BPStructs.cpp')
-rw-r--r--Source/Core/VideoCommon/Src/BPStructs.cpp43
1 files changed, 42 insertions, 1 deletions
diff --git a/Source/Core/VideoCommon/Src/BPStructs.cpp b/Source/Core/VideoCommon/Src/BPStructs.cpp
index 827e182f77..d36110494f 100644
--- a/Source/Core/VideoCommon/Src/BPStructs.cpp
+++ b/Source/Core/VideoCommon/Src/BPStructs.cpp
@@ -34,10 +34,18 @@
using namespace BPFunctions;
+u32 mapTexAddress;
+bool mapTexFound;
+int numWrites;
+
void BPInit()
{
memset(&bpmem, 0, sizeof(bpmem));
bpmem.bpMask = 0xFFFFFF;
+
+ mapTexAddress = 0;
+ numWrites = 0;
+ mapTexFound = false;
}
void RenderToXFB(const BPCmd &bp, const EFBRectangle &rc, float yScale, float xfbLines, u32 xfbAddr, const u32 dstWidth, const u32 dstHeight)
@@ -83,7 +91,40 @@ void BPWritten(const BPCmd& bp)
// FIXME: Hangs load-state, but should fix graphic-heavy games state loading
//s_bpCritical.Enter();
- FlushPipeline();
+ //BEGIN ZTP SPEEDUP HACK CHANGES
+ //This hunk of code disables the usual pipeline flush for certain BP Writes
+ //that occur while the minimap is being drawn in Zelda: twilight princess.
+ //This significantly increases speed while in hyrule field. In depth discussion
+ //on how this Hack came to be can be found at:http://forums.dolphin-emu.com/thread-10638.html
+ //-fircrestsk8
+ if (g_ActiveConfig.bZTPSpeedHack)
+ {
+ if (!mapTexFound)
+ {
+ if (bp.address == BPMEM_TEV_COLOR_ENV || bp.address == BPMEM_TEV_ALPHA_ENV)
+ {
+ numWrites++;
+ if (numWrites >= 100) //seem that if 100 consecutive BP writes are called to either of these addresses in ZTP,
+ { //then it is safe to assume the map texture address is currently loaded into the BP memory
+ mapTexAddress = (bpmem.tex[0].texImage3[0].hex << 5);
+ mapTexFound = true;
+ WARN_LOG(VIDEO, "\nZTP map texture found at address %08x\n", mapTexAddress);
+ }
+ }
+ else
+ numWrites = 0;
+ FlushPipeline();
+ }
+ else
+ {
+ if ( ((bpmem.tex[0].texImage3[0].hex << 5) != mapTexAddress) || !(bpmem.tevorders[0].getEnable(0)) || bp.address == BPMEM_TREF )
+ FlushPipeline();
+ }
+ }
+ else
+ FlushPipeline();
+ //END ZTP SPEEDUP HACK CHANGES
+
((u32*)&bpmem)[bp.address] = bp.newvalue;
switch (bp.address)