Link the video plugin statically into the main binary on OS X.

This makes the OS X build more robust and should help pave the
way for the integration of the video plugins as well as LTO.

There are now no more global class level namespace conflicts left,
as evidenced by the fact that Dolphin can be linked with -all_load,
not that you would want to.


git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6958 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Soren Jorvang 2011-01-29 04:52:19 +00:00
parent 4c58c7ea03
commit 1bcad428ea
25 changed files with 145 additions and 178 deletions

View File

@ -140,10 +140,8 @@ if sys.platform == 'darwin':
env['FRAMEWORKSFLAGS'] += ['-Xarch_i386', '-Wl,-framework,QuickTime']
env['LIBPATH'] += ['/usr/lib']
env['LINKFLAGS'] += ccld
env['LINKFLAGS'] += ['-Wl,-pagezero_size,0x1000']
env['LINKFLAGS'] += ['-Wl,-search_paths_first', '-Wl,-Z', '-F' + system]
env['SHCCFLAGS'] = env['CCFLAGS'] # Get rid of the -fPIC added in gcc.py
env['SHLINKFLAGS'] += ['-Wl,-undefined,dynamic_lookup']
env['SHLINKFLAGS'] += ['-Xarch_i386', '-Wl,-read_only_relocs,suppress']
if env['nowx']:
env['HAVE_WX'] = 0
@ -171,7 +169,6 @@ if sys.platform == 'darwin':
env['shared_zlib'] = True
env['data_dir'] = '#' + env['prefix'] + '/Dolphin.app/Contents/Resources'
env['plugin_dir'] = '#' + env['prefix'] + '/Dolphin.app/Contents/PlugIns'
if env['bundle']:
app = env['prefix'] + '/Dolphin.app'
@ -300,14 +297,12 @@ else:
if env['install'] == 'local':
env['binary_dir'] = '#' + env['prefix']
env['data_dir'] = '#' + env['prefix']
env['plugin_dir'] = '#' + env['prefix'] + '/plugins'
if env['bundle']:
env.Tar(tarname, env['prefix'])
else:
env['prefix'] = Dir(env['prefix']).abspath
env['binary_dir'] = env['prefix'] + '/bin'
env['data_dir'] = env['prefix'] + "/share/dolphin-emu"
env['plugin_dir'] = env['prefix'] + '/lib/dolphin-emu'
conf.Define('DATA_DIR', "\"" + env['data_dir'] + "/\"")
conf.Define('LIBS_DIR', "\"" + env['prefix'] + '/lib/dolphin-emu/' + "\"")
# Setup destdir for package building
@ -317,7 +312,6 @@ else:
env['destdir'] = Dir(env['destdir']).abspath
env['binary_dir'] = env['destdir'] + env['binary_dir']
env['data_dir'] = env['destdir'] + env['data_dir']
env['plugin_dir'] = env['destdir'] + env['plugin_dir']
env['prefix'] = env['destdir'] + env['prefix']
if env['bundle']:
env.Command(tarname + env['TARSUFFIX'], env['prefix'],
@ -343,12 +337,13 @@ dirs = [
'Externals/Lua',
'Externals/GLew',
'Externals/LZO',
#'Externals/OpenAL',
'Externals/SDL',
'Externals/SOIL',
'Externals/SFML/src',
#'Externals/wxWidgets',
'Externals/zlib',
'Source/Plugins/Plugin_VideoOGL/Src',
#'Source/Plugins/Plugin_VideoSoftware/Src',
'Source/Core/AudioCommon/Src',
'Source/Core/Common/Src',
'Source/Core/Core/Src',
@ -361,8 +356,6 @@ dirs = [
'Source/Core/VideoCommon/Src',
'Source/Core/VideoUICommon/Src',
'Source/DSPTool/Src',
'Source/Plugins/Plugin_VideoOGL/Src',
'Source/Plugins/Plugin_VideoSoftware/Src',
'Source/UnitTests',
]

View File

@ -76,17 +76,20 @@ int DynamicLibrary::Load(const char* filename)
#ifdef _WIN32
library = LoadLibrary(filename);
#else
#elif defined __linux__
// RTLD_NOW: resolve all symbols on load
// RTLD_LOCAL: don't resolve symbols for other libraries
library = dlopen(filename, RTLD_NOW | RTLD_LOCAL);
#else
library = RTLD_SELF;
return 1;
#endif
DEBUG_LOG(COMMON, "DL: LoadLibrary: %s(%p)", filename, library);
if (!library) {
ERROR_LOG(COMMON, "DL: Error loading DLL %s: %s", filename,
DllGetLastError());
DllGetLastError());
return 0;
}
@ -104,33 +107,35 @@ int DynamicLibrary::Load(const char* filename)
int DynamicLibrary::Unload()
{
INFO_LOG(COMMON, "DL: Unloading dynamic library %s", library_file.c_str());
int retval;
if (!IsLoaded()) { // library != null
int retval;
if (!IsLoaded()) { // library != null
ERROR_LOG(COMMON, "DL: Unload failed for %s: not loaded",
library_file.c_str());
PanicAlert("DL: Unload failed %s: not loaded",
library_file.c_str());
return 0;
}
library_file.c_str());
PanicAlert("DL: Unload failed %s: not loaded",
library_file.c_str());
return 0;
}
DEBUG_LOG(COMMON, "DL: FreeLibrary: %s %p\n",
library_file.c_str(), library);
DEBUG_LOG(COMMON, "DL: FreeLibrary: %s %p\n",
library_file.c_str(), library);
#ifdef _WIN32
retval = FreeLibrary(library);
retval = FreeLibrary(library);
#else
retval = dlclose(library)?0:1;
if (library == RTLD_SELF)
return 1;
else
retval = dlclose(library) ? 0 : 1;
#endif
if (! retval) {
ERROR_LOG(COMMON, "DL: Unload failed %s: %s",
library_file.c_str(),
DllGetLastError());
}
library = 0;
if (! retval) {
ERROR_LOG(COMMON, "DL: Unload failed %s: %s",
library_file.c_str(), DllGetLastError());
}
library = 0;
INFO_LOG(COMMON, "DL: Done unloading dynamic library %s",
library_file.c_str());
return retval;
return retval;
}
// Returns the address where symbol funcname is loaded or NULL on failure
@ -156,11 +161,10 @@ void* DynamicLibrary::Get(const char* funcname) const
if (!retval)
{
WARN_LOG(COMMON, "DL: Symbol %s missing in %s (error: %s)\n",
funcname, library_file.c_str(),
DllGetLastError());
funcname, library_file.c_str(), DllGetLastError());
}
INFO_LOG(COMMON, "DL: Done getting symbol %s: %s", library_file.c_str(),
funcname);
funcname);
return retval;
}

View File

@ -30,18 +30,18 @@ PluginVideo::PluginVideo(const char *_Filename) : CPlugin(_Filename), validVideo
Video_Screenshot = 0;
Video_AddMessage = 0;
Video_AccessEFB = 0;
Video_SetRendering = 0;
Video_CommandProcessorRead16 = 0;
Video_CommandProcessorWrite16 = 0;
Video_PixelEngineRead16 = 0;
Video_PixelEngineWrite16 = 0;
Video_PixelEngineWrite32 = 0;
Video_GatherPipeBursted = 0;
Video_WaitForFrameFinish = 0;
Video_SetRendering = 0;
Video_CommandProcessorRead16 = 0;
Video_CommandProcessorWrite16 = 0;
Video_PixelEngineRead16 = 0;
Video_PixelEngineWrite16 = 0;
Video_PixelEngineWrite32 = 0;
Video_GatherPipeBursted = 0;
Video_WaitForFrameFinish = 0;
Video_IsFifoBusy = 0;
Video_AbortFrame = 0;
Video_Prepare = reinterpret_cast<TVideo_Prepare>
Video_Prepare = reinterpret_cast<TVideo_Prepare>
(LoadSymbol("Video_Prepare"));
Video_BeginField = reinterpret_cast<TVideo_BeginField>
(LoadSymbol("Video_BeginField"));
@ -59,43 +59,43 @@ PluginVideo::PluginVideo(const char *_Filename) : CPlugin(_Filename), validVideo
(LoadSymbol("Video_AccessEFB"));
Video_SetRendering = reinterpret_cast<TVideo_SetRendering>
(LoadSymbol("Video_SetRendering"));
Video_CommandProcessorRead16 = reinterpret_cast<TVideo_Read16>
Video_CommandProcessorRead16 = reinterpret_cast<TVideo_Read16>
(LoadSymbol("Video_CommandProcessorRead16"));
Video_CommandProcessorWrite16 = reinterpret_cast<TVideo_Write16>
Video_CommandProcessorWrite16 = reinterpret_cast<TVideo_Write16>
(LoadSymbol("Video_CommandProcessorWrite16"));
Video_PixelEngineRead16 = reinterpret_cast<TVideo_Read16>
Video_PixelEngineRead16 = reinterpret_cast<TVideo_Read16>
(LoadSymbol("Video_PixelEngineRead16"));
Video_PixelEngineWrite16 = reinterpret_cast<TVideo_Write16>
Video_PixelEngineWrite16 = reinterpret_cast<TVideo_Write16>
(LoadSymbol("Video_PixelEngineWrite16"));
Video_PixelEngineWrite32 = reinterpret_cast<TVideo_Write32>
Video_PixelEngineWrite32 = reinterpret_cast<TVideo_Write32>
(LoadSymbol("Video_PixelEngineWrite32"));
Video_GatherPipeBursted = reinterpret_cast<TVideo_GatherPipeBursted>
Video_GatherPipeBursted = reinterpret_cast<TVideo_GatherPipeBursted>
(LoadSymbol("Video_GatherPipeBursted"));
Video_WaitForFrameFinish = reinterpret_cast<TVideo_WaitForFrameFinish>
Video_WaitForFrameFinish = reinterpret_cast<TVideo_WaitForFrameFinish>
(LoadSymbol("Video_WaitForFrameFinish"));
Video_IsFifoBusy = reinterpret_cast<TVideo_IsFifoBusy>
Video_IsFifoBusy = reinterpret_cast<TVideo_IsFifoBusy>
(LoadSymbol("Video_IsFifoBusy"));
Video_AbortFrame = reinterpret_cast<TVideo_AbortFrame>
Video_AbortFrame = reinterpret_cast<TVideo_AbortFrame>
(LoadSymbol("Video_AbortFrame"));
if ((Video_Prepare != 0) &&
(Video_BeginField != 0) &&
(Video_EndField != 0) &&
(Video_EnterLoop != 0) &&
(Video_ExitLoop != 0) &&
(Video_Screenshot != 0) &&
(Video_AddMessage != 0) &&
(Video_SetRendering != 0) &&
(Video_AccessEFB != 0) &&
(Video_SetRendering != 0) &&
(Video_CommandProcessorRead16 != 0) &&
(Video_CommandProcessorWrite16 != 0) &&
(Video_PixelEngineRead16 != 0) &&
(Video_PixelEngineWrite16 != 0) &&
(Video_PixelEngineWrite32 != 0) &&
(Video_GatherPipeBursted != 0) &&
(Video_WaitForFrameFinish != 0) &&
(Video_IsFifoBusy != 0) &&
(Video_AbortFrame != 0))
if ((Video_Prepare != 0) &&
(Video_BeginField != 0) &&
(Video_EndField != 0) &&
(Video_EnterLoop != 0) &&
(Video_ExitLoop != 0) &&
(Video_Screenshot != 0) &&
(Video_AddMessage != 0) &&
(Video_SetRendering != 0) &&
(Video_AccessEFB != 0) &&
(Video_SetRendering != 0) &&
(Video_CommandProcessorRead16 != 0) &&
(Video_CommandProcessorWrite16 != 0) &&
(Video_PixelEngineRead16 != 0) &&
(Video_PixelEngineWrite16 != 0) &&
(Video_PixelEngineWrite32 != 0) &&
(Video_GatherPipeBursted != 0) &&
(Video_WaitForFrameFinish != 0) &&
(Video_IsFifoBusy != 0) &&
(Video_AbortFrame != 0))
validVideo = true;
}

View File

@ -27,7 +27,7 @@ typedef void (__cdecl* TVideo_Prepare)();
typedef void (__cdecl* TVideo_SendFifoData)(u8*,u32);
typedef void (__cdecl* TVideo_BeginField)(u32, FieldType, u32, u32);
typedef void (__cdecl* TVideo_EndField)();
typedef bool (__cdecl* TVideo_Screenshot)(const char* filename);
typedef void (__cdecl* TVideo_Screenshot)(const char* filename);
typedef void (__cdecl* TVideo_EnterLoop)();
typedef void (__cdecl* TVideo_ExitLoop)();
typedef void (__cdecl* TVideo_SetRendering)(bool bEnabled);

View File

@ -125,12 +125,6 @@ CPluginInfo::CPluginInfo(const char *_rFilename)
: m_Filename(_rFilename)
, m_Valid(false)
{
if (!File::Exists((File::GetPluginsDirectory() + _rFilename).c_str()))
{
PanicAlertT("Can't find plugin %s", _rFilename);
return;
}
// Check if the functions that are common to all plugins are present
Common::CPlugin *plugin = new Common::CPlugin(_rFilename);
if (plugin->IsValid())
@ -174,32 +168,7 @@ void CPluginManager::GetPluginInfo(CPluginInfo *&info, std::string Filename)
below. */
void *CPluginManager::LoadPlugin(const char *_rFilename)
{
if (!File::Exists((File::GetPluginsDirectory() + _rFilename).c_str())) {
PanicAlertT("Error loading plugin %s: can't find file. Please re-select your plugins.", _rFilename);
return NULL;
}
/* Avoid calling LoadLibrary() again and instead point to the plugin info that we found when
Dolphin was started */
CPluginInfo *info = NULL;
GetPluginInfo(info, _rFilename);
if (!info) {
PanicAlertT("Error loading %s: can't read info", _rFilename);
return NULL;
}
PLUGIN_TYPE type = info->GetPluginInfo().Type;
Common::CPlugin *plugin = NULL;
switch (type)
{
case PLUGIN_TYPE_VIDEO:
plugin = new Common::PluginVideo(_rFilename);
break;
default:
PanicAlertT("Trying to load unsupported type %d", type);
return NULL;
}
Common::CPlugin *plugin = new Common::PluginVideo(_rFilename);
// Check that the plugin has all the common and all the type specific functions
if (!plugin->IsValid())
@ -296,12 +265,6 @@ void CPluginManager::EmuStateChange(PLUGIN_EMUSTATE newState)
// Open config window. Input: _rFilename = Plugin filename , Type = Plugin type
void CPluginManager::OpenConfig(void* _Parent, const char *_rFilename, PLUGIN_TYPE Type)
{
if (! File::Exists((File::GetPluginsDirectory() + _rFilename).c_str()))
{
PanicAlertT("Can't find plugin %s", _rFilename);
return;
}
switch(Type)
{
case PLUGIN_TYPE_VIDEO:
@ -318,12 +281,6 @@ void CPluginManager::OpenConfig(void* _Parent, const char *_rFilename, PLUGIN_TY
// Open debugging window. Type = Video or DSP. Show = Show or hide window.
void *CPluginManager::OpenDebug(void* _Parent, const char *_rFilename, PLUGIN_TYPE Type, bool Show)
{
if (!File::Exists((File::GetPluginsDirectory() + _rFilename).c_str()))
{
PanicAlert("Can't find plugin %s", _rFilename);
return NULL;
}
switch(Type)
{
case PLUGIN_TYPE_VIDEO:

View File

@ -29,10 +29,6 @@
#include "MemoryView.h"
#include "HW/DSPLLE/DSPSymbols.h"
// Define these here to avoid undefined symbols while still saving functionality
void Host_NotifyMapLoaded() {}
void Host_UpdateBreakPointView() {}
DSPDebuggerLLE* m_DebuggerFrame = NULL;
BEGIN_EVENT_TABLE(DSPDebuggerLLE, wxPanel)

View File

@ -19,7 +19,7 @@
#include "DSPRegisterView.h"
wxString CRegTable::GetValue(int row, int col)
wxString CDSPRegTable::GetValue(int row, int col)
{
if (row < 32) // 32 "normal" regs
{
@ -33,11 +33,11 @@ wxString CRegTable::GetValue(int row, int col)
return wxString::FromAscii("");
}
void CRegTable::SetValue(int, int, const wxString &)
void CDSPRegTable::SetValue(int, int, const wxString &)
{
}
void CRegTable::UpdateCachedRegs()
void CDSPRegTable::UpdateCachedRegs()
{
if (m_CachedCounter == g_dsp.step_counter)
{
@ -53,7 +53,7 @@ void CRegTable::UpdateCachedRegs()
}
}
wxGridCellAttr *CRegTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind)
wxGridCellAttr *CDSPRegTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind)
{
wxGridCellAttr *attr = new wxGridCellAttr();
@ -79,7 +79,7 @@ wxGridCellAttr *CRegTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind)
DSPRegisterView::DSPRegisterView(wxWindow *parent, wxWindowID id)
: wxGrid(parent, id, wxDefaultPosition, wxSize(130, 120))
{
SetTable(new CRegTable(), true);
SetTable(new CDSPRegTable(), true);
SetRowLabelSize(0);
SetColLabelSize(0);
DisableDragRowSize();
@ -89,6 +89,6 @@ DSPRegisterView::DSPRegisterView(wxWindow *parent, wxWindowID id)
void DSPRegisterView::Update()
{
((CRegTable *)GetTable())->UpdateCachedRegs();
((CDSPRegTable *)GetTable())->UpdateCachedRegs();
ForceRefresh();
}

View File

@ -21,17 +21,17 @@
#include <wx/grid.h>
class CRegTable : public wxGridTableBase
class CDSPRegTable : public wxGridTableBase
{
private:
u64 m_CachedCounter;
u16 m_CachedRegs[32];
bool m_CachedRegHasChanged[32];
DECLARE_NO_COPY_CLASS(CRegTable);
DECLARE_NO_COPY_CLASS(CDSPRegTable);
public:
CRegTable()
CDSPRegTable()
{
memset(m_CachedRegs, 0, sizeof(m_CachedRegs));
memset(m_CachedRegHasChanged, 0, sizeof(m_CachedRegHasChanged));

View File

@ -251,8 +251,10 @@ void CConfigMain::UpdateGUI()
PathsPage->Disable();
#if defined _WIN32 || defined __linux__
// Disable stuff on PluginsPage
GraphicSelection->Disable();
#endif
}
}
@ -434,8 +436,10 @@ void CConfigMain::InitializeGUIValues()
ApploaderPath->SetPath(wxString(startup_params.m_strApploader.c_str(), *wxConvCurrent));
#if defined _WIN32 || defined __linux__
// Plugins
FillChoiceBox(GraphicSelection, PLUGIN_TYPE_VIDEO, startup_params.m_strVideoPlugin);
#endif
}
void CConfigMain::InitializeGUITooltips()
@ -501,10 +505,12 @@ void CConfigMain::CreateGUIControls()
Notebook->AddPage(GeneralPage, _("General"));
Notebook->AddPage(DisplayPage, _("Display"));
Notebook->AddPage(AudioPage, _("Audio"));
Notebook->AddPage(GamecubePage, _("GC"));
Notebook->AddPage(GamecubePage, _("Gamecube"));
Notebook->AddPage(WiiPage, _("Wii"));
Notebook->AddPage(PathsPage, _("Paths"));
#if defined _WIN32 || defined __linux__
Notebook->AddPage(PluginsPage, _("Plugins"));
#endif
// General page
@ -865,6 +871,7 @@ void CConfigMain::CreateGUIControls()
PathsPage->SetSizer(sPathsPage);
#if defined _WIN32 || defined __linux__
// Plugins page
sbGraphicsPlugin = new wxStaticBoxSizer(wxHORIZONTAL, PluginsPage, _("Graphics"));
GraphicSelection = new wxChoice(PluginsPage, ID_GRAPHIC_CB, wxDefaultPosition, wxDefaultSize, 0, NULL, 0, wxDefaultValidator);
@ -879,6 +886,7 @@ void CConfigMain::CreateGUIControls()
sPluginsPage->Add(sbGraphicsPlugin, 0, wxEXPAND|wxALL, 5);
PluginsPage->SetSizer(sPluginsPage);
#endif
m_Ok = new wxButton(this, wxID_OK);

View File

@ -10,8 +10,8 @@ files = [
]
libs = [
'audiocommon', 'core', 'dspcore', 'lzo2', 'discio', 'bdisasm',
'inputcommon', 'common', 'lua', 'z', 'sfml-network',
'audiocommon', 'bdisasm', 'common', 'core', 'discio', 'dspcore',
'inputcommon', 'lua', 'lzo2', 'sfml-network', 'z', 'GLEW', 'SOIL',
]
wxlibs = [ ]
@ -62,9 +62,8 @@ else:
if sys.platform == 'win32':
files += [ "stdafx.cpp" ]
elif sys.platform == 'darwin':
ldflags += [ '-Wl,-pagezero_size,0x1000' ]
ldflags += [ '-Wl,-ObjC' ] # XXX Hack to include wxGLCanvas
libs += [ 'iconv' ]
ldflags += [ '-Wl,-force_load,' + env['libvideo'][0].path ]
exe = '#' + env['prefix'] + '/Dolphin.app/Contents/MacOS/Dolphin'
if env['HAVE_WX']:

View File

@ -40,7 +40,6 @@ files = [
'VideoState.cpp',
'XFBConvert.cpp',
'XFMemory.cpp',
'XFMemory.cpp',
'XFStructs.cpp',
'memcpy_amd.cpp',
]

View File

@ -2070,13 +2070,13 @@ void TexDecoder_SetTexFmtOverlayOptions(bool enable, bool center)
PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, int texformat, int tlutaddr, int tlutfmt,bool rgbaOnly)
{
PC_TexFormat retval = PC_TEX_FMT_NONE;
if (g_Config.bEnableOpenCL)
retval = TexDecoder_Decode_OpenCL(dst, src, width, height, texformat, tlutaddr, tlutfmt, rgbaOnly);
if(retval == PC_TEX_FMT_NONE)
retval = rgbaOnly ? TexDecoder_Decode_RGBA((u32*)dst,src,width,height,texformat,tlutaddr,tlutfmt) : TexDecoder_Decode_real(dst,src,width,height,texformat,tlutaddr,tlutfmt);
PC_TexFormat retval = TexDecoder_Decode_OpenCL(dst, src,
width, height, texformat, tlutaddr, tlutfmt, rgbaOnly);
if (retval == PC_TEX_FMT_NONE)
retval = rgbaOnly ? TexDecoder_Decode_RGBA((u32*)dst, src,
width, height, texformat, tlutaddr, tlutfmt)
: TexDecoder_Decode_real(dst, src,
width, height, texformat, tlutaddr, tlutfmt);
if ((!TexFmt_Overlay_Enable)|| (retval == PC_TEX_FMT_NONE))
return retval;

View File

@ -4,8 +4,6 @@ Import('env')
import os
import sys
name = os.sep + "Plugin_VideoOGL"
files = [
'RasterFont.cpp',
'Render.cpp',
@ -21,9 +19,9 @@ files = [
'GLUtil.cpp'
]
libs = [ 'videocommon', 'GLEW', 'SOIL', 'common' ]
env['LIBS'] += ['videocommon']
if env['HAVE_WX']:
libs += [ 'videouicommon' ]
env['LIBS'] += [ 'videouicommon' ]
env.SharedLibrary(env['plugin_dir'] + name, files, LIBS = env['LIBS'] + libs)
env['libvideo'] = env.StaticLibrary(env['local_libs'] + 'video', files)

View File

@ -274,7 +274,7 @@ namespace Clipper
void ProcessTriangle(OutputVertexData *v0, OutputVertexData *v1, OutputVertexData *v2)
{
if (stats.thisFrame.numDrawnObjects < g_Config.drawStart || stats.thisFrame.numDrawnObjects >= g_Config.drawEnd )
if (stats.thisFrame.numDrawnObjects < g_SWVideoConfig.drawStart || stats.thisFrame.numDrawnObjects >= g_SWVideoConfig.drawEnd )
return;
INCSTAT(stats.thisFrame.numTrianglesIn)

View File

@ -216,10 +216,10 @@ void OnObjectBegin()
{
if (!g_bSkipCurrentFrame)
{
if (g_Config.bDumpTextures && stats.thisFrame.numDrawnObjects >= g_Config.drawStart && stats.thisFrame.numDrawnObjects < g_Config.drawEnd)
if (g_SWVideoConfig.bDumpTextures && stats.thisFrame.numDrawnObjects >= g_SWVideoConfig.drawStart && stats.thisFrame.numDrawnObjects < g_SWVideoConfig.drawEnd)
DumpActiveTextures();
if (g_Config.bHwRasterizer)
if (g_SWVideoConfig.bHwRasterizer)
{
HwRasterizer::BeginTriangles();
drawingHwTriangles = true;
@ -231,10 +231,10 @@ void OnObjectEnd()
{
if (!g_bSkipCurrentFrame)
{
if (g_Config.bDumpObjects && stats.thisFrame.numDrawnObjects >= g_Config.drawStart && stats.thisFrame.numDrawnObjects < g_Config.drawEnd)
if (g_SWVideoConfig.bDumpObjects && stats.thisFrame.numDrawnObjects >= g_SWVideoConfig.drawStart && stats.thisFrame.numDrawnObjects < g_SWVideoConfig.drawEnd)
DumpEfb(StringFromFormat("%sobject%i.tga", File::GetUserPath(D_DUMPFRAMES_IDX), stats.thisFrame.numDrawnObjects).c_str());
if (g_Config.bHwRasterizer || drawingHwTriangles)
if (g_SWVideoConfig.bHwRasterizer || drawingHwTriangles)
{
HwRasterizer::EndTriangles();
drawingHwTriangles = false;
@ -259,7 +259,7 @@ void OnFrameEnd()
{
if (!g_bSkipCurrentFrame)
{
if (g_Config.bDumpFrames)
if (g_SWVideoConfig.bDumpFrames)
{
DumpEfb(StringFromFormat("%sframe%i_color.tga", File::GetUserPath(D_DUMPFRAMES_IDX), stats.frameCount).c_str());
DumpDepth(StringFromFormat("%sframe%i_depth.tga", File::GetUserPath(D_DUMPFRAMES_IDX), stats.frameCount).c_str());

View File

@ -35,7 +35,7 @@ namespace EfbCopy
{
OpenGL_Update(); // just updates the render window position and the backbuffer size
if (!g_Config.bHwRasterizer)
if (!g_SWVideoConfig.bHwRasterizer)
{
// copy to open gl for rendering
EfbInterface::UpdateColorTexture();
@ -48,7 +48,7 @@ namespace EfbCopy
void CopyToRam()
{
if (!g_Config.bHwRasterizer)
if (!g_SWVideoConfig.bHwRasterizer)
{
u8 *dest_ptr = g_VideoInitialize.pGetMemoryPointer(bpmem.copyTexDest << 5);
@ -96,7 +96,7 @@ namespace EfbCopy
if (bpmem.triggerEFBCopy.clear)
{
if (g_Config.bHwRasterizer)
if (g_SWVideoConfig.bHwRasterizer)
HwRasterizer::Clear();
else
ClearEfb();

View File

@ -296,7 +296,7 @@ void DrawTriangleFrontFace(OutputVertexData *v0, OutputVertexData *v1, OutputVer
{
INCSTAT(stats.thisFrame.numTrianglesDrawn);
if (g_Config.bHwRasterizer)
if (g_SWVideoConfig.bHwRasterizer)
{
HwRasterizer::DrawTriangleFrontFace(v0, v1, v2);
return;

View File

@ -125,7 +125,7 @@ void Renderer::DrawDebugText()
char *p = debugtext_buffer;
p[0] = 0;
if (g_Config.bShowStats)
if (g_SWVideoConfig.bShowStats)
{
p+=sprintf(p,"Objects: %i\n",stats.thisFrame.numDrawnObjects);
p+=sprintf(p,"Primatives: %i\n",stats.thisFrame.numPrimatives);

View File

@ -4,8 +4,6 @@ Import('env')
import os
import sys
name = os.sep + "Plugin_VideoSoftware"
files = [
'BPMemLoader.cpp',
'Clipper.cpp',
@ -40,6 +38,21 @@ if env['HAVE_WX']:
if sys.platform == 'win32':
files += [ 'Win32.cpp' ]
libs = [ 'videocommon', 'GLEW', 'SOIL', 'common' ]
#env['LIBS'] += ['videocommon']
#
#if env['HAVE_WX']:
# env['LIBS'] += [ 'videouicommon' ]
# XXX partially converted to libvideocommon, but there are still conflicts
files += [
'../../../Core/VideoCommon/Src/ImageWrite.cpp',
'../../../Core/VideoCommon/Src/IndexGenerator.cpp',
'../../../Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp',
'../../../Core/VideoCommon/Src/TextureDecoder.cpp',
'../../../Core/VideoCommon/Src/VertexLoader_Color.cpp',
'../../../Core/VideoCommon/Src/VertexLoader_Normal.cpp',
'../../../Core/VideoCommon/Src/VertexLoader_Position.cpp',
'../../../Core/VideoCommon/Src/VertexLoader_TextCoord.cpp',
'../../../Core/VideoCommon/Src/VertexManagerBase.cpp',
]
env.SharedLibrary(env['plugin_dir'] + name, files, LIBS = env['LIBS'] + libs)
env['libvideo'] = env.StaticLibrary(env['local_libs'] + 'video', files)

View File

@ -599,7 +599,7 @@ void Tev::Draw()
IndirectLod[stageNum], IndirectLinear[stageNum], texmap, IndirectTex[stageNum]);
#if ALLOW_TEV_DUMPS
if (g_Config.bDumpTevStages)
if (g_SWVideoConfig.bDumpTevStages)
{
u8 stage[4] = { IndirectTex[stageNum][TextureSampler::ALP_SMP],
IndirectTex[stageNum][TextureSampler::BLU_SMP],
@ -635,7 +635,7 @@ void Tev::Draw()
TextureSampler::Sample(TexCoord.s, TexCoord.t, TextureLod[stageNum], TextureLinear[stageNum], texmap, texel);
#if ALLOW_TEV_DUMPS
if (g_Config.bDumpTevTextureFetches)
if (g_SWVideoConfig.bDumpTevTextureFetches)
DebugUtil::DrawTempBuffer(texel, DIRECT_TFETCH + stageNum);
#endif
@ -689,7 +689,7 @@ void Tev::Draw()
Reg[ac.dest][ALP_C] = Clamp1024(Reg[ac.dest][ALP_C]);
#if ALLOW_TEV_DUMPS
if (g_Config.bDumpTevStages)
if (g_SWVideoConfig.bDumpTevStages)
{
u8 stage[4] = {(u8)Reg[0][RED_C], (u8)Reg[0][GRN_C], (u8)Reg[0][BLU_C], (u8)Reg[0][ALP_C]};
DebugUtil::DrawTempBuffer(stage, DIRECT + stageNum);
@ -791,7 +791,7 @@ void Tev::Draw()
}
#if ALLOW_TEV_DUMPS
if (g_Config.bDumpTevStages)
if (g_SWVideoConfig.bDumpTevStages)
{
for (u32 i = 0; i < bpmem.genMode.numindstages; ++i)
DebugUtil::CopyTempBuffer(Position[0], Position[1], INDIRECT, i, "Indirect");
@ -799,7 +799,7 @@ void Tev::Draw()
DebugUtil::CopyTempBuffer(Position[0], Position[1], DIRECT, i, "Stage");
}
if (g_Config.bDumpTevTextureFetches)
if (g_SWVideoConfig.bDumpTevTextureFetches)
{
for (u32 i = 0; i <= bpmem.genMode.numtevstages; ++i)
{

View File

@ -19,7 +19,7 @@
#include "IniFile.h"
#include "VideoConfig.h"
SWVideoConfig g_Config;
SWVideoConfig g_SWVideoConfig;
SWVideoConfig::SWVideoConfig()
{

View File

@ -50,6 +50,6 @@ struct SWVideoConfig : NonCopyable
u32 drawEnd;
};
extern SWVideoConfig g_Config;
extern SWVideoConfig g_SWVideoConfig;
#endif // _PLUGIN_VIDEOSOFTWARE_CONFIG_H_

View File

@ -49,7 +49,7 @@ VideoConfigDialog::VideoConfigDialog(wxWindow* parent, const std::string& title,
wxDialog(parent, -1,
wxString(wxT("Dolphin ")).append(wxString::FromAscii(title.c_str())).append(wxT(" Graphics Configuration")),
wxDefaultPosition, wxDefaultSize),
vconfig(g_Config),
vconfig(g_SWVideoConfig),
ininame(_ininame)
{
vconfig.Load((File::GetUserPath(D_CONFIG_IDX) + ininame + ".ini").c_str());
@ -137,7 +137,7 @@ void VideoConfigDialog::Event_ClickClose(wxCommandEvent&)
void VideoConfigDialog::Event_Close(wxCloseEvent& ev)
{
g_Config.Save((File::GetUserPath(D_CONFIG_IDX) + ininame + ".ini").c_str());
g_SWVideoConfig.Save((File::GetUserPath(D_CONFIG_IDX) + ininame + ".ini").c_str());
ev.Skip();
}

View File

@ -129,7 +129,7 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
{
case VK_RETURN:
// Pressing Alt+Enter switch FullScreen/Windowed
if (m_hParent == NULL && !g_Config.renderToMainframe)
if (m_hParent == NULL && !g_SWVideoConfig.renderToMainframe)
{
ToggleFullscreen(hWnd);
}
@ -146,7 +146,7 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
switch (LOWORD( wParam ))
{
case VK_ESCAPE:
if (g_Config.bFullscreen)
if (g_SWVideoConfig.bFullscreen)
{
// Pressing Esc switches to Windowed mode from Fullscreen mode
ToggleFullscreen(hWnd);
@ -195,7 +195,7 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
if (m_hParent == NULL)
{
// Take it out of fullscreen and stop the game
if( g_Config.bFullscreen )
if( g_SWVidoConfig.bFullscreen )
ToggleFullscreen(m_hParent);
PostMessage(m_hParent, WM_USER, WM_USER_STOP, 0);
}
@ -262,7 +262,7 @@ HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const T
// Create new separate window
else
{
DWORD style = g_Config.bFullscreen ? WS_POPUP : WS_OVERLAPPEDWINDOW;
DWORD style = g_SWVideoConfig.bFullscreen ? WS_POPUP : WS_OVERLAPPEDWINDOW;
RECT rc = {0, 0, width, height};
AdjustWindowRect(&rc, style, false);
@ -294,10 +294,10 @@ void ToggleFullscreen(HWND hParent)
if (m_hParent == NULL)
{
int w_fs = 640, h_fs = 480;
if (g_Config.bFullscreen)
if (g_SWVideoConfig.bFullscreen)
{
// Get out of fullscreen
g_Config.bFullscreen = false;
g_SWVideoConfig.bFullscreen = false;
RECT rc = {0, 0, w_fs, h_fs};
// FullScreen -> Desktop
@ -336,7 +336,7 @@ void ToggleFullscreen(HWND hParent)
// Set new window style -> PopUp
SetWindowLong(hParent, GWL_STYLE, WS_POPUP);
g_Config.bFullscreen = true;
g_SWVideoConfig.bFullscreen = true;
ShowCursor(FALSE);
// SetWindowPos to the upper-left corner of the screen

View File

@ -85,7 +85,7 @@ void Initialize(void *init)
SVideoInitialize *_pVideoInitialize = (SVideoInitialize*)init;
g_VideoInitialize = *_pVideoInitialize;
g_Config.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_software.ini").c_str());
g_SWVideoConfig.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_software.ini").c_str());
InitBPMemory();
InitXFMemory();