Fix an issue with BPMEM_LOADTLUT, thanks to revned @ issue 1831, also fix a speed issue int the FIFO loop introduced recently (ZWW was ~20% slower)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4739 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
60a8d89b56
commit
bf6ed51b87
|
@ -19,17 +19,12 @@
|
|||
#define _DIRECTINPUTBASE_H
|
||||
|
||||
|
||||
|
||||
// Include
|
||||
// -------------------
|
||||
#include <windows.h> // System
|
||||
#include <stdio.h>
|
||||
|
||||
#define DIRECTINPUT_VERSION 0x0800 // DirectInput
|
||||
#include <dinput.h>
|
||||
|
||||
//#include "ConsoleWindow.h" // Common
|
||||
|
||||
|
||||
|
||||
class DInput
|
||||
|
|
|
@ -55,7 +55,7 @@ void BPWritten(const BPCmd& bp)
|
|||
some bp cases check the changes variable, because they might not have to be updated all the time
|
||||
NOTE: it seems not all bp cases like checking changes, so calling if (bp.changes == 0 ? false : true)
|
||||
had to be ditched and the games seem to work fine with out it.
|
||||
NOTE2: Yet Another Gamecube Documentation calls them Bypass Registers but possibly completely wrong
|
||||
NOTE2: Yet Another Gamecube Documentation calls them Bypass Raster State Registers but possibly completely wrong
|
||||
NOTE3: This controls the register groups: RAS1/2, SU, TF, TEV, C/Z, PEC
|
||||
TODO: Turn into function table. The (future) DisplayList (DL) jit can then call the functions directly,
|
||||
getting rid of dynamic dispatch. Unfortunately, few games use DLs properly - most\
|
||||
|
@ -247,8 +247,9 @@ void BPWritten(const BPCmd& bp)
|
|||
|
||||
break;
|
||||
}
|
||||
case BPMEM_LOADTLUT0: // Load a Texture Look Up Table
|
||||
case BPMEM_LOADTLUT1:
|
||||
case BPMEM_LOADTLUT0: // This one updates bpmem.tlutXferSrc, no need to do anything here.
|
||||
break;
|
||||
case BPMEM_LOADTLUT1: // Load a Texture Look Up Table
|
||||
{
|
||||
DVSTARTSUBPROFILE("LoadBPReg:GXLoadTlut");
|
||||
|
||||
|
|
|
@ -133,8 +133,8 @@ void Fifo_EnterLoop(const SVideoInitialize &video_initialize)
|
|||
while (fifoStateRun)
|
||||
{
|
||||
video_initialize.pPeekMessages();
|
||||
if (g_ActiveConfig.bEFBAccessEnable)
|
||||
VideoFifo_CheckEFBAccess();
|
||||
|
||||
VideoFifo_CheckEFBAccess();
|
||||
VideoFifo_CheckSwapRequest();
|
||||
|
||||
// check if we are able to run this buffer
|
||||
|
@ -197,12 +197,11 @@ void Fifo_EnterLoop(const SVideoInitialize &video_initialize)
|
|||
|
||||
CommandProcessor::FifoCriticalLeave();
|
||||
|
||||
/*
|
||||
video_initialize.pPeekMessages();
|
||||
if (g_ActiveConfig.bEFBAccessEnable)
|
||||
VideoFifo_CheckEFBAccess();
|
||||
// Those two are pretty important and must be called in the FIFO Loop.
|
||||
// If we don't, s_swapRequested (OGL only) or s_efbAccessRequested won't be set to false
|
||||
// leading the CPU thread to wait in Video_BeginField or Video_AccessEFB thus slowing things down.
|
||||
VideoFifo_CheckEFBAccess();
|
||||
VideoFifo_CheckSwapRequest();
|
||||
*/
|
||||
}
|
||||
Common::AtomicStore(_fifo.CPReadIdle, 1);
|
||||
CommandProcessor::SetFifoIdleFromVideoPlugin();
|
||||
|
@ -211,7 +210,7 @@ void Fifo_EnterLoop(const SVideoInitialize &video_initialize)
|
|||
{
|
||||
Common::YieldCPU();
|
||||
}
|
||||
}
|
||||
}
|
||||
fifo_exit_event.Set();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Version="9,00"
|
||||
Name="VideoCommon"
|
||||
ProjectGUID="{E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}"
|
||||
RootNamespace="VideoCommon"
|
||||
|
|
|
@ -35,7 +35,7 @@ typedef struct
|
|||
{
|
||||
HWND hWnd;
|
||||
TLog pLog;
|
||||
int padNumber;
|
||||
int padNumber;
|
||||
} SPADInitialize;
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -630,6 +630,9 @@ void Renderer::SetColorMask()
|
|||
|
||||
u32 Renderer::AccessEFB(EFBAccessType type, int x, int y)
|
||||
{
|
||||
if(!g_ActiveConfig.bEFBAccessEnable)
|
||||
return 0;
|
||||
|
||||
//Get the working buffer
|
||||
LPDIRECT3DSURFACE9 pBuffer = (type == PEEK_Z || type == POKE_Z) ?
|
||||
FBManager::GetEFBDepthRTSurface() : FBManager::GetEFBColorRTSurface();
|
||||
|
@ -645,9 +648,10 @@ u32 Renderer::AccessEFB(EFBAccessType type, int x, int y)
|
|||
D3DFORMAT ReadBufferFormat = (type == PEEK_Z || type == POKE_Z) ?
|
||||
FBManager::GetEFBDepthReadSurfaceFormat() : BufferFormat;
|
||||
|
||||
D3DLOCKED_RECT drect;
|
||||
if(!g_ActiveConfig.bEFBAccessEnable || BufferFormat == D3DFMT_D24X8)
|
||||
if(BufferFormat == D3DFMT_D24X8)
|
||||
return 0;
|
||||
|
||||
D3DLOCKED_RECT drect;
|
||||
|
||||
//Buffer not found alert
|
||||
if(!pBuffer) {
|
||||
|
|
|
@ -93,8 +93,9 @@ void BPWritten(int address, int newvalue)
|
|||
PixelEngine::pereg.boxBottom = newvalue >> 10;
|
||||
PixelEngine::pereg.boxTop = newvalue & 0x3ff;
|
||||
break;
|
||||
case BPMEM_LOADTLUT0: // Load a Texture Look Up Table
|
||||
case BPMEM_LOADTLUT1:
|
||||
case BPMEM_LOADTLUT0: // This one updates bpmem.tlutXferSrc, no need to do anything here.
|
||||
break;
|
||||
case BPMEM_LOADTLUT1: // Load a Texture Look Up Table
|
||||
{
|
||||
u32 tlutTMemAddr = (newvalue & 0x3FF) << 9;
|
||||
u32 tlutXferCount = (newvalue & 0x1FFC00) >> 5;
|
||||
|
|
Loading…
Reference in New Issue