Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Partially revert "Check if BP and XF changes actually change values b…
…efore flushing". Dolphin code sucks too much to get optimizations.

This reverts commit 5a77cae.

Fixes issue 5459.
Fixes issue 5606.
  • Loading branch information
neobrain committed Nov 19, 2012
1 parent d7e65f0 commit 4f652c4
Showing 1 changed file with 18 additions and 49 deletions.
67 changes: 18 additions & 49 deletions Source/Core/VideoCommon/Src/XFStructs.cpp
Expand Up @@ -121,18 +121,12 @@ void XFRegWritten(int transferSize, u32 baseAddress, u32 *pData)
case XFMEM_SETVIEWPORT+3:
case XFMEM_SETVIEWPORT+4:
case XFMEM_SETVIEWPORT+5:
{
u8 size = std::min(transferSize * 4, 6 * 4);
if (memcmp((u32*)&xfregs + (address - 0x1000), pData + dataIndex, size))
{
VertexManager::Flush();
VertexShaderManager::SetViewportChanged();
PixelShaderManager::SetViewportChanged();
}
VertexManager::Flush();
VertexShaderManager::SetViewportChanged();
PixelShaderManager::SetViewportChanged();

nextAddress = XFMEM_SETVIEWPORT + 6;
break;
}
nextAddress = XFMEM_SETVIEWPORT + 6;
break;

case XFMEM_SETPROJECTION:
case XFMEM_SETPROJECTION+1:
Expand All @@ -141,21 +135,15 @@ void XFRegWritten(int transferSize, u32 baseAddress, u32 *pData)
case XFMEM_SETPROJECTION+4:
case XFMEM_SETPROJECTION+5:
case XFMEM_SETPROJECTION+6:
{
u8 size = std::min(transferSize * 4, 7 * 4);
if (memcmp((u32*)&xfregs + (address - 0x1000), pData + dataIndex, size))
{
VertexManager::Flush();
VertexShaderManager::SetProjectionChanged();
}
VertexManager::Flush();
VertexShaderManager::SetProjectionChanged();

nextAddress = XFMEM_SETPROJECTION + 7;
break;
}
nextAddress = XFMEM_SETPROJECTION + 7;
break;

case XFMEM_SETNUMTEXGENS: // GXSetNumTexGens
if (xfregs.numTexGen.numTexGens != (newValue & 15))
VertexManager::Flush();
VertexManager::Flush();
break;

case XFMEM_SETTEXMTXINFO:
Expand All @@ -166,16 +154,10 @@ void XFRegWritten(int transferSize, u32 baseAddress, u32 *pData)
case XFMEM_SETTEXMTXINFO+5:
case XFMEM_SETTEXMTXINFO+6:
case XFMEM_SETTEXMTXINFO+7:
{
u8 size = std::min(transferSize * 4, 8 * 4);
if (memcmp((u32*)&xfregs + (address - 0x1000), pData + dataIndex, size))
{
VertexManager::Flush();
}
VertexManager::Flush();

nextAddress = XFMEM_SETTEXMTXINFO + 8;
break;
}
nextAddress = XFMEM_SETTEXMTXINFO + 8;
break;

case XFMEM_SETPOSMTXINFO:
case XFMEM_SETPOSMTXINFO+1:
Expand All @@ -185,16 +167,10 @@ void XFRegWritten(int transferSize, u32 baseAddress, u32 *pData)
case XFMEM_SETPOSMTXINFO+5:
case XFMEM_SETPOSMTXINFO+6:
case XFMEM_SETPOSMTXINFO+7:
{
u8 size = std::min(transferSize * 4, 8 * 4);
if (memcmp((u32*)&xfregs + (address - 0x1000), pData + dataIndex, size))
{
VertexManager::Flush();
}
VertexManager::Flush();

nextAddress = XFMEM_SETPOSMTXINFO + 8;
break;
}
nextAddress = XFMEM_SETPOSMTXINFO + 8;
break;

// --------------
// Unknown Regs
Expand Down Expand Up @@ -264,15 +240,8 @@ void LoadXFReg(u32 transferSize, u32 baseAddress, u32 *pData)
transferSize = 0;
}

for (u32 i = 0; i < xfMemTransferSize; ++i)
{
if (((u32*)&xfmem[xfMemBase])[i] != pData[i])
{
XFMemWritten(xfMemTransferSize, xfMemBase);
memcpy_gc(&xfmem[xfMemBase], pData, xfMemTransferSize * 4);
break;
}
}
XFMemWritten(xfMemTransferSize, xfMemBase);
memcpy_gc(&xfmem[xfMemBase], pData, xfMemTransferSize * 4);

pData += xfMemTransferSize;
}
Expand Down

0 comments on commit 4f652c4

Please sign in to comment.