summaryrefslogtreecommitdiff
path: root/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp')
-rw-r--r--Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp47
1 files changed, 44 insertions, 3 deletions
diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp
index 332e83d0e8..b524ded329 100644
--- a/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp
+++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp
@@ -39,6 +39,9 @@
#include "FileUtil.h"
#include "VideoBackend.h"
#include "Core.h"
+#include "OpcodeDecoder.h"
+#include "SWVertexLoader.h"
+#include "SWStatistics.h"
#define VSYNC_ENABLED 0
@@ -93,9 +96,33 @@ bool VideoSoftware::Initialize(void *&window_handle)
return true;
}
-void VideoSoftware::DoState(PointerWrap&)
+void VideoSoftware::DoState(PointerWrap& p)
{
- // NYI
+ bool software = true;
+ p.Do(software);
+ if (p.GetMode() == PointerWrap::MODE_READ && software == false)
+ // change mode to abort load of incompatible save state.
+ p.SetMode(PointerWrap::MODE_VERIFY);
+
+ // TODO: incomplete?
+ SWCommandProcessor::DoState(p);
+ SWPixelEngine::DoState(p);
+ EfbInterface::DoState(p);
+ OpcodeDecoder::DoState(p);
+ Clipper::DoState(p);
+ p.Do(swxfregs);
+ p.Do(bpmem);
+ p.Do(swstats);
+
+ // CP Memory
+ p.DoArray(arraybases, 16);
+ p.DoArray(arraystrides, 16);
+ p.Do(MatrixIndexA);
+ p.Do(MatrixIndexB);
+ p.Do(g_VtxDesc.Hex);
+ p.DoArray(g_VtxAttr, 8);
+ p.DoMarker("CP Memory");
+
}
void VideoSoftware::CheckInvalidState()
@@ -132,18 +159,26 @@ void VideoSoftware::EmuStateChange(EMUSTATE_CHANGE newState)
void VideoSoftware::Shutdown()
{
+ // TODO: should be in Video_Cleanup
HwRasterizer::Shutdown();
SWRenderer::Shutdown();
+
GLInterface->Shutdown();
}
+void VideoSoftware::Video_Cleanup()
+{
+}
+
// This is called after Video_Initialize() from the Core
void VideoSoftware::Video_Prepare()
{
GLInterface->MakeCurrent();
// Init extension support.
- // Required for WGL SwapInterval
#ifndef USE_GLES
+#ifdef __APPLE__
+ glewExperimental = 1;
+#endif
if (glewInit() != GLEW_OK) {
ERROR_LOG(VIDEO, "glewInit() failed!Does your video card support OpenGL 2.x?");
return;
@@ -198,6 +233,12 @@ u32 VideoSoftware::Video_AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputDa
return value;
}
+u32 VideoSoftware::Video_GetQueryResult(PerfQueryType type)
+{
+ // TODO:
+ return 0;
+}
+
bool VideoSoftware::Video_Screenshot(const char *_szFilename)
{
return false;