diff options
| author | degasus <wickmarkus@web.de> | 2014-09-03 22:39:26 +0200 |
|---|---|---|
| committer | degasus <wickmarkus@web.de> | 2014-09-04 17:56:17 +0200 |
| commit | ef6f6a7fa9a90efa78d0ae557e5546dd6568bb74 (patch) | |
| tree | 3b11a704f1383648bf5a43fbd9d7be9853f500c6 /Source/Core/VideoCommon/XFStructs.cpp | |
| parent | e1248599ebdd9d179a109fff9184cabde8088f4c (diff) | |
VideoCommon: remove XFReg copy optimization
This code is just ugly and I doubt there is a way that copying twice is faster.
Diffstat (limited to 'Source/Core/VideoCommon/XFStructs.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/XFStructs.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/Source/Core/VideoCommon/XFStructs.cpp b/Source/Core/VideoCommon/XFStructs.cpp index 235c76bea6..650a4a913b 100644 --- a/Source/Core/VideoCommon/XFStructs.cpp +++ b/Source/Core/VideoCommon/XFStructs.cpp @@ -5,6 +5,7 @@ #include "Common/Common.h" #include "Core/HW/Memmap.h" #include "VideoCommon/CPMemory.h" +#include "VideoCommon/DataReader.h" #include "VideoCommon/PixelShaderManager.h" #include "VideoCommon/VertexManagerBase.h" #include "VideoCommon/VertexShaderManager.h" @@ -17,14 +18,14 @@ static void XFMemWritten(u32 transferSize, u32 baseAddress) VertexShaderManager::InvalidateXFRange(baseAddress, baseAddress + transferSize); } -static void XFRegWritten(int transferSize, u32 baseAddress, u32 *pData) +static void XFRegWritten(int transferSize, u32 baseAddress) { u32 address = baseAddress; u32 dataIndex = 0; while (transferSize > 0 && address < 0x1058) { - u32 newValue = pData[dataIndex]; + u32 newValue = DataPeek<u32>(dataIndex * sizeof(u32)); u32 nextAddress = address + 1; switch (address) @@ -191,7 +192,7 @@ static void XFRegWritten(int transferSize, u32 baseAddress, u32 *pData) } } -void LoadXFReg(u32 transferSize, u32 baseAddress, u32 *pData) +void LoadXFReg(u32 transferSize, u32 baseAddress) { // do not allow writes past registers if (baseAddress + transferSize > 0x1058) @@ -225,16 +226,20 @@ void LoadXFReg(u32 transferSize, u32 baseAddress, u32 *pData) } XFMemWritten(xfMemTransferSize, xfMemBase); - memcpy((u32*)(&xfmem) + xfMemBase, pData, xfMemTransferSize * 4); - - pData += xfMemTransferSize; + for (u32 i = 0; i < xfMemTransferSize; i++) + { + ((u32*)&xfmem)[xfMemBase + i] = DataRead<u32>(); + } } // write to XF regs if (transferSize > 0) { - XFRegWritten(transferSize, baseAddress, pData); - memcpy((u32*)(&xfmem) + baseAddress, pData, transferSize * 4); + XFRegWritten(transferSize, baseAddress); + for (u32 i = 0; i < transferSize; i++) + { + ((u32*)&xfmem)[baseAddress + i] = DataRead<u32>(); + } } } |
