diff options
Diffstat (limited to 'Source/Plugins/Plugin_VideoDX9/Src/OpcodeDecoding.cpp')
| -rw-r--r-- | Source/Plugins/Plugin_VideoDX9/Src/OpcodeDecoding.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/OpcodeDecoding.cpp b/Source/Plugins/Plugin_VideoDX9/Src/OpcodeDecoding.cpp index 914acd7f29..d9bdc337da 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/OpcodeDecoding.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/OpcodeDecoding.cpp @@ -38,6 +38,14 @@ extern int FAKE_GetFifoSize(); CDataReader_Fifo g_fifoReader;
+template <class T>
+void Xchg(T& a, T&b)
+{
+ T c = a;
+ a = b;
+ b = c;
+}
+
void ExecuteDisplayList(u32 address, u32 size)
{
IDataReader* pOldReader = g_pDataReader;
@@ -46,11 +54,24 @@ void ExecuteDisplayList(u32 address, u32 size) CDataReader_Memory memoryReader(address);
g_pDataReader = &memoryReader;
+ // temporarily swap dl and non-dl(small "hack" for the stats)
+ Xchg(stats.thisFrame.numDLPrims,stats.thisFrame.numPrims);
+ Xchg(stats.thisFrame.numXFLoadsInDL,stats.thisFrame.numXFLoads);
+ Xchg(stats.thisFrame.numCPLoadsInDL,stats.thisFrame.numCPLoads);
+ Xchg(stats.thisFrame.numBPLoadsInDL,stats.thisFrame.numBPLoads);
+
while((memoryReader.GetReadAddress() - address) < size)
{
Decode();
}
- INCSTAT(stats.numDListsAlive);
+
+ // un-swap
+ Xchg(stats.thisFrame.numDLPrims,stats.thisFrame.numPrims);
+ Xchg(stats.thisFrame.numXFLoadsInDL,stats.thisFrame.numXFLoads);
+ Xchg(stats.thisFrame.numCPLoadsInDL,stats.thisFrame.numCPLoads);
+ Xchg(stats.thisFrame.numBPLoadsInDL,stats.thisFrame.numBPLoads);
+
+ INCSTAT(stats.numDListsCalled);
// reset to the old reader
g_pDataReader = pOldReader;
}
|
