mirror of https://github.com/PCSX2/pcsx2.git
GSdx: trying to get rid of windows dependencies, still many classes to replace :P
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1168 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
ef01d581b0
commit
d3547e0662
|
@ -239,9 +239,7 @@ EXPORT_C GPUupdateLace()
|
|||
|
||||
EXPORT_C GPUmakeSnapshot()
|
||||
{
|
||||
LPCTSTR path = _T("C:\\"); // TODO
|
||||
|
||||
s_gpu->MakeSnapshot(path);
|
||||
s_gpu->MakeSnapshot("c:\\"); // TODO
|
||||
}
|
||||
|
||||
EXPORT_C GPUdisplayText(char* text)
|
||||
|
|
|
@ -568,7 +568,7 @@ void GPULocalMemory::Expand24(const WORD* RESTRICT src, DWORD* RESTRICT dst, int
|
|||
}
|
||||
}
|
||||
|
||||
void GPULocalMemory::SaveBMP(LPCTSTR path, CRect r, int tp, int cx, int cy)
|
||||
void GPULocalMemory::SaveBMP(const string& path, CRect r, int tp, int cx, int cy)
|
||||
{
|
||||
r.left <<= m_scale.cx;
|
||||
r.top <<= m_scale.cy;
|
||||
|
@ -578,7 +578,7 @@ void GPULocalMemory::SaveBMP(LPCTSTR path, CRect r, int tp, int cx, int cy)
|
|||
r.left &= ~1;
|
||||
r.right &= ~1;
|
||||
|
||||
if(FILE* fp = _tfopen(path, _T("wb")))
|
||||
if(FILE* fp = fopen(path.c_str(), "wb"))
|
||||
{
|
||||
BITMAPINFOHEADER bih;
|
||||
memset(&bih, 0, sizeof(bih));
|
||||
|
|
|
@ -79,7 +79,7 @@ public:
|
|||
void Expand16(const WORD* RESTRICT src, DWORD* RESTRICT dst, int pixels);
|
||||
void Expand24(const WORD* RESTRICT src, DWORD* RESTRICT dst, int pixels);
|
||||
|
||||
void SaveBMP(LPCTSTR path, CRect r, int tp, int cx, int cy);
|
||||
void SaveBMP(const string& path, CRect r, int tp, int cx, int cy);
|
||||
};
|
||||
|
||||
#pragma warning(default: 4244)
|
|
@ -22,4 +22,4 @@
|
|||
#include "StdAfx.h"
|
||||
#include "GPURenderer.h"
|
||||
|
||||
CAtlMap<HWND, GPURendererBase*> GPURendererBase::m_wnd2gpu;
|
||||
map<HWND, GPURendererBase*> GPURendererBase::m_wnd2gpu;
|
|
@ -38,13 +38,15 @@ class GPURendererBase : public GPUState, protected GPURendererSettings
|
|||
protected:
|
||||
HWND m_hWnd;
|
||||
WNDPROC m_wndproc;
|
||||
static CAtlMap<HWND, GPURendererBase*> m_wnd2gpu;
|
||||
static map<HWND, GPURendererBase*> m_wnd2gpu;
|
||||
|
||||
static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if(CAtlMap<HWND, GPURendererBase*>::CPair* pair = m_wnd2gpu.Lookup(hWnd))
|
||||
map<HWND, GPURendererBase*>::iterator i = m_wnd2gpu.find(hWnd);
|
||||
|
||||
if(i != m_wnd2gpu.end())
|
||||
{
|
||||
return pair->m_value->OnMessage(message, wParam, lParam);
|
||||
return (*i).second->OnMessage(message, wParam, lParam);
|
||||
}
|
||||
|
||||
ASSERT(0);
|
||||
|
@ -92,7 +94,7 @@ public:
|
|||
{
|
||||
SetWindowLongPtr(m_hWnd, GWLP_WNDPROC, (LONG_PTR)m_wndproc);
|
||||
|
||||
m_wnd2gpu.RemoveKey(m_hWnd);
|
||||
m_wnd2gpu.erase(m_hWnd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,7 +104,8 @@ public:
|
|||
|
||||
m_wndproc = (WNDPROC)GetWindowLongPtr(hWnd, GWLP_WNDPROC);
|
||||
SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)WndProc);
|
||||
m_wnd2gpu.SetAt(hWnd, this);
|
||||
|
||||
m_wnd2gpu[hWnd] = this;
|
||||
|
||||
DWORD style = GetWindowLong(hWnd, GWL_STYLE);
|
||||
style |= WS_OVERLAPPEDWINDOW;
|
||||
|
@ -115,7 +118,7 @@ public:
|
|||
}
|
||||
|
||||
virtual void VSync() = 0;
|
||||
virtual bool MakeSnapshot(LPCTSTR path) = 0;
|
||||
virtual bool MakeSnapshot(const string& path) = 0;
|
||||
};
|
||||
|
||||
template<class Device, class Vertex>
|
||||
|
@ -207,7 +210,7 @@ protected:
|
|||
if(m_count > 0)
|
||||
{
|
||||
/*
|
||||
Dump(_T("db"));
|
||||
Dump("db");
|
||||
|
||||
if(m_env.PRIM.TME)
|
||||
{
|
||||
|
@ -218,9 +221,7 @@ protected:
|
|||
r.right = r.left + 256;
|
||||
r.bottom = r.top + 256;
|
||||
|
||||
CString str;
|
||||
str.Format(_T("da_%d_%d_%d_%d_%d"), m_env.STATUS.TP, r);
|
||||
Dump(str, m_env.STATUS.TP, r, false);
|
||||
Dump(format("da_%d_%d_%d_%d_%d", m_env.STATUS.TP, r).c_str(), m_env.STATUS.TP, r, false);
|
||||
}
|
||||
*/
|
||||
|
||||
|
@ -228,7 +229,7 @@ protected:
|
|||
|
||||
m_count = 0;
|
||||
|
||||
//Dump(_T("dc"), false);
|
||||
//Dump("dc", false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -334,7 +335,7 @@ public:
|
|||
// osd
|
||||
|
||||
static UINT64 s_frame = 0;
|
||||
static CString s_stats;
|
||||
static string s_stats;
|
||||
|
||||
if(m_perfmon.GetFrame() - s_frame >= 30)
|
||||
{
|
||||
|
@ -349,8 +350,8 @@ public:
|
|||
int w = r.Width() << m_scale.cx;
|
||||
int h = r.Height() << m_scale.cy;
|
||||
|
||||
s_stats.Format(
|
||||
_T("%I64d | %d x %d | %.2f fps (%d%%) | %d/%d | %d%% CPU | %.2f | %.2f"),
|
||||
s_stats = format(
|
||||
"%I64d | %d x %d | %.2f fps (%d%%) | %d/%d | %d%% CPU | %.2f | %.2f",
|
||||
m_perfmon.GetFrame(), w, h, fps, (int)(100.0 * fps / m_env.GetFPS()),
|
||||
(int)m_perfmon.Get(GSPerfMon::Prim),
|
||||
(int)m_perfmon.Get(GSPerfMon::Draw),
|
||||
|
@ -363,10 +364,10 @@ public:
|
|||
|
||||
if(fillrate > 0)
|
||||
{
|
||||
s_stats.Format(_T("%s | %.2f mpps"), CString(s_stats), fps * fillrate / (1024 * 1024));
|
||||
s_stats = format("%s | %.2f mpps", s_stats.c_str(), fps * fillrate / (1024 * 1024));
|
||||
}
|
||||
|
||||
SetWindowText(m_hWnd, s_stats);
|
||||
SetWindowText(m_hWnd, s_stats.c_str());
|
||||
}
|
||||
|
||||
if(m_dev.IsLost())
|
||||
|
@ -383,12 +384,8 @@ public:
|
|||
m_dev.Present(r);
|
||||
}
|
||||
|
||||
virtual bool MakeSnapshot(LPCTSTR path)
|
||||
virtual bool MakeSnapshot(const string& path)
|
||||
{
|
||||
CString fn;
|
||||
|
||||
fn.Format(_T("%s_%s"), path, CTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S")));
|
||||
|
||||
return m_dev.SaveCurrent(fn + _T(".bmp"));
|
||||
return m_dev.SaveCurrent(format("%s_%s", path.c_str(), CTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S"))) + ".bmp");
|
||||
}
|
||||
};
|
||||
|
|
|
@ -136,17 +136,17 @@ BOOL GPUSettingsDlg::OnInitDialog()
|
|||
memset(&caps, 0, sizeof(caps));
|
||||
caps.PixelShaderVersion = D3DPS_VERSION(0, 0);
|
||||
|
||||
m_modes.RemoveAll();
|
||||
m_modes.clear();
|
||||
|
||||
// windowed
|
||||
|
||||
{
|
||||
D3DDISPLAYMODE mode;
|
||||
memset(&mode, 0, sizeof(mode));
|
||||
m_modes.AddTail(mode);
|
||||
m_modes.push_back(mode);
|
||||
|
||||
int iItem = m_resolution.AddString(_T("Windowed"));
|
||||
m_resolution.SetItemDataPtr(iItem, m_modes.GetTailPosition());
|
||||
m_resolution.SetItemDataPtr(iItem, &m_modes.back());
|
||||
m_resolution.SetCurSel(iItem);
|
||||
}
|
||||
|
||||
|
@ -170,8 +170,8 @@ BOOL GPUSettingsDlg::OnInitDialog()
|
|||
str.Format(_T("%dx%d %dHz"), mode.Width, mode.Height, mode.RefreshRate);
|
||||
int iItem = m_resolution.AddString(str);
|
||||
|
||||
m_modes.AddTail(mode);
|
||||
m_resolution.SetItemDataPtr(iItem, m_modes.GetTailPosition());
|
||||
m_modes.push_back(mode);
|
||||
m_resolution.SetItemDataPtr(iItem, &m_modes.back());
|
||||
|
||||
if(ModeWidth == mode.Width && ModeHeight == mode.Height && ModeRefreshRate == mode.RefreshRate)
|
||||
{
|
||||
|
@ -185,16 +185,16 @@ BOOL GPUSettingsDlg::OnInitDialog()
|
|||
|
||||
bool isdx10avail = GSUtil::IsDirect3D10Available();
|
||||
|
||||
CAtlArray<GSSetting> renderers;
|
||||
vector<GSSetting> renderers;
|
||||
|
||||
for(size_t i = 0; i < countof(g_renderers); i++)
|
||||
{
|
||||
if(i == 2 && !isdx10avail) continue;
|
||||
|
||||
renderers.Add(g_renderers[i]);
|
||||
renderers.push_back(g_renderers[i]);
|
||||
}
|
||||
|
||||
GSSetting::InitComboBox(renderers.GetData(), renderers.GetCount(), m_renderer, pApp->GetProfileInt(_T("GPUSettings"), _T("Renderer"), 1));
|
||||
GSSetting::InitComboBox(&renderers[0], renderers.size(), m_renderer, pApp->GetProfileInt(_T("GPUSettings"), _T("Renderer"), 1));
|
||||
GSSetting::InitComboBox(g_psversion, countof(g_psversion), m_psversion, pApp->GetProfileInt(_T("Settings"), _T("PixelShaderVersion2"), D3DPS_VERSION(2, 0)), caps.PixelShaderVersion);
|
||||
GSSetting::InitComboBox(g_filter, countof(g_filter), m_filter, pApp->GetProfileInt(_T("GPUSettings"), _T("filter"), 0));
|
||||
GSSetting::InitComboBox(g_dithering, countof(g_dithering), m_dithering, pApp->GetProfileInt(_T("GPUSettings"), _T("dithering"), 1));
|
||||
|
@ -225,7 +225,8 @@ void GPUSettingsDlg::OnOK()
|
|||
|
||||
if(m_resolution.GetCurSel() >= 0)
|
||||
{
|
||||
D3DDISPLAYMODE& mode = m_modes.GetAt((POSITION)m_resolution.GetItemData(m_resolution.GetCurSel()));
|
||||
D3DDISPLAYMODE& mode = *(D3DDISPLAYMODE*)m_resolution.GetItemData(m_resolution.GetCurSel());
|
||||
|
||||
pApp->WriteProfileInt(_T("Settings"), _T("ModeWidth"), mode.Width);
|
||||
pApp->WriteProfileInt(_T("Settings"), _T("ModeHeight"), mode.Height);
|
||||
pApp->WriteProfileInt(_T("Settings"), _T("ModeRefreshRate"), mode.RefreshRate);
|
||||
|
|
|
@ -29,7 +29,7 @@ class GPUSettingsDlg : public CDialog
|
|||
DECLARE_DYNAMIC(GPUSettingsDlg)
|
||||
|
||||
private:
|
||||
CAtlList<D3DDISPLAYMODE> m_modes;
|
||||
list<D3DDISPLAYMODE> m_modes;
|
||||
|
||||
public:
|
||||
GPUSettingsDlg(CWnd* pParent = NULL); // standard constructor
|
||||
|
|
|
@ -356,7 +356,7 @@ int GPUState::PH_Command(GPUReg* r, int size)
|
|||
|
||||
Invalidate(r2);
|
||||
|
||||
Dump(_T("f"));
|
||||
Dump("f");
|
||||
|
||||
return 3;
|
||||
}
|
||||
|
@ -568,7 +568,7 @@ int GPUState::PH_Move(GPUReg* r, int size)
|
|||
|
||||
Invalidate(CRect(dst, CSize(w, h)));
|
||||
|
||||
// Dump(_T("m"));
|
||||
// Dump("m");
|
||||
|
||||
return 4;
|
||||
}
|
||||
|
@ -597,7 +597,7 @@ int GPUState::PH_Write(GPUReg* r, int size)
|
|||
|
||||
Invalidate(r2);
|
||||
|
||||
Dump(_T("w"));
|
||||
Dump("w");
|
||||
|
||||
m_perfmon.Put(GSPerfMon::Swizzle, w * h * 2);
|
||||
|
||||
|
@ -626,7 +626,7 @@ int GPUState::PH_Read(GPUReg* r, int size)
|
|||
|
||||
m_mem.ReadRect(r2, (WORD*)m_read.buff);
|
||||
|
||||
Dump(_T("r"));
|
||||
Dump("r");
|
||||
|
||||
m_env.STATUS.IMG = 1;
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ protected:
|
|||
|
||||
int s_n;
|
||||
|
||||
void Dump(LPCTSTR s, UINT32 TP, const CRect& r, int inc = true)
|
||||
void Dump(const string& s, UINT32 TP, const CRect& r, int inc = true)
|
||||
{
|
||||
//if(m_perfmon.GetFrame() < 1000)
|
||||
//if((m_env.TWIN.ai32 & 0xfffff) == 0)
|
||||
|
@ -103,12 +103,10 @@ protected:
|
|||
#ifdef DEBUG
|
||||
dir = 2;
|
||||
#endif
|
||||
CString str;
|
||||
str.Format(_T("c:\\temp%d\\%04d_%s.bmp"), dir, s_n, s);
|
||||
m_mem.SaveBMP(str, r, TP, m_env.CLUT.X, m_env.CLUT.Y);
|
||||
m_mem.SaveBMP(format("c:\\temp%d\\%04d_%s.bmp", dir, s_n, s), r, TP, m_env.CLUT.X, m_env.CLUT.Y);
|
||||
}
|
||||
|
||||
void Dump(LPCTSTR s, int inc = true)
|
||||
void Dump(const string& s, int inc = true)
|
||||
{
|
||||
Dump(s, 2, CRect(0, 0, 1024, 512), inc);
|
||||
}
|
||||
|
|
|
@ -133,7 +133,7 @@ static INT32 GSopen(void* dsp, char* title, int mt, int renderer)
|
|||
|
||||
s_hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
||||
|
||||
if(!s_gs->Create(CString(title)))
|
||||
if(!s_gs->Create(title))
|
||||
{
|
||||
GSclose();
|
||||
|
||||
|
@ -152,15 +152,21 @@ static INT32 GSopen(void* dsp, char* title, int mt, int renderer)
|
|||
EXPORT_C_(INT32) GSopen(void* dsp, char* title, int mt)
|
||||
{
|
||||
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||||
|
||||
int renderer;
|
||||
|
||||
if (mt == 2){ //pcsx2 sent a switch renderer request
|
||||
if(mt == 2)
|
||||
{
|
||||
// pcsx2 sent a switch renderer request
|
||||
renderer = 1; //DX9 sw
|
||||
mt = 1;
|
||||
}
|
||||
else { //normal init
|
||||
else
|
||||
{
|
||||
// normal init
|
||||
renderer = AfxGetApp()->GetProfileInt(_T("Settings"), _T("renderer"), 0);
|
||||
}
|
||||
|
||||
return GSopen(dsp, title, mt, renderer);
|
||||
}
|
||||
|
||||
|
@ -211,7 +217,7 @@ EXPORT_C GSvsync(int field)
|
|||
|
||||
EXPORT_C_(UINT32) GSmakeSnapshot(char* path)
|
||||
{
|
||||
return s_gs->MakeSnapshot(CString(path) + _T("gsdx"));
|
||||
return s_gs->MakeSnapshot(string(path) + "gsdx");
|
||||
}
|
||||
|
||||
EXPORT_C GSkeyEvent(keyEvent* ev)
|
||||
|
@ -303,7 +309,7 @@ EXPORT_C GSReplay(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
|
|||
|
||||
::SetPriorityClass(::GetCurrentProcess(), HIGH_PRIORITY_CLASS);
|
||||
|
||||
CAtlArray<BYTE> buff;
|
||||
vector<BYTE> buff;
|
||||
|
||||
if(FILE* fp = fopen(lpszCmdLine, "rb"))
|
||||
{
|
||||
|
@ -313,7 +319,7 @@ EXPORT_C GSReplay(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
|
|||
GSsetBaseMem(regs);
|
||||
|
||||
HWND hWnd = NULL;
|
||||
GSopen(&hWnd, _T(""), true, renderer);
|
||||
GSopen(&hWnd, "", true, renderer);
|
||||
|
||||
DWORD crc;
|
||||
fread(&crc, 4, 1, fp);
|
||||
|
@ -348,20 +354,20 @@ EXPORT_C GSReplay(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
|
|||
switch(index)
|
||||
{
|
||||
case 0:
|
||||
if(buff.GetCount() < 0x4000) buff.SetCount(0x4000);
|
||||
if(buff.size() < 0x4000) buff.resize(0x4000);
|
||||
addr = 0x4000 - size;
|
||||
fread(buff.GetData() + addr, size, 1, fp);
|
||||
GSgifTransfer1(buff.GetData(), addr);
|
||||
fread(&buff[0] + addr, size, 1, fp);
|
||||
GSgifTransfer1(&buff[0], addr);
|
||||
break;
|
||||
case 1:
|
||||
if(buff.GetCount() < size) buff.SetCount(size);
|
||||
fread(buff.GetData(), size, 1, fp);
|
||||
GSgifTransfer2(buff.GetData(), size / 16);
|
||||
if(buff.size() < size) buff.resize(size);
|
||||
fread(&buff[0], size, 1, fp);
|
||||
GSgifTransfer2(&buff[0], size / 16);
|
||||
break;
|
||||
case 2:
|
||||
if(buff.GetCount() < size) buff.SetCount(size);
|
||||
fread(buff.GetData(), size, 1, fp);
|
||||
GSgifTransfer3(buff.GetData(), size / 16);
|
||||
if(buff.size() < size) buff.resize(size);
|
||||
fread(&buff[0], size, 1, fp);
|
||||
GSgifTransfer3(&buff[0], size / 16);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -371,8 +377,8 @@ EXPORT_C GSReplay(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
|
|||
break;
|
||||
case 2:
|
||||
fread(&size, 4, 1, fp);
|
||||
if(buff.GetCount() < size) buff.SetCount(size);
|
||||
GSreadFIFO2(buff.GetData(), size / 16);
|
||||
if(buff.size() < size) buff.resize(size);
|
||||
GSreadFIFO2(&buff[0], size / 16);
|
||||
break;
|
||||
case 3:
|
||||
fread(regs, 0x2000, 1, fp);
|
||||
|
@ -394,15 +400,15 @@ EXPORT_C GSBenchmark(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow
|
|||
{
|
||||
::SetPriorityClass(::GetCurrentProcess(), HIGH_PRIORITY_CLASS);
|
||||
|
||||
FILE* file = _tfopen(_T("c:\\log.txt"), _T("a"));
|
||||
FILE* file = fopen("c:\\log.txt", "a");
|
||||
|
||||
_ftprintf(file, _T("-------------------------\n\n"));
|
||||
fprintf(file, "-------------------------\n\n");
|
||||
|
||||
if(1)
|
||||
{
|
||||
GSLocalMemory mem;
|
||||
|
||||
static struct {int psm; LPCSTR name;} s_format[] =
|
||||
static struct {int psm; const char* name;} s_format[] =
|
||||
{
|
||||
{PSM_PSMCT32, "32"},
|
||||
{PSM_PSMCT24, "24"},
|
||||
|
@ -432,7 +438,7 @@ EXPORT_C GSBenchmark(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow
|
|||
int w = 1 << tbw;
|
||||
int h = 1 << tbw;
|
||||
|
||||
_ftprintf(file, _T("%d x %d\n\n"), w, h);
|
||||
fprintf(file, "%d x %d\n\n", w, h);
|
||||
|
||||
for(int i = 0; i < countof(s_format); i++)
|
||||
{
|
||||
|
@ -496,7 +502,7 @@ EXPORT_C GSBenchmark(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow
|
|||
|
||||
end = clock();
|
||||
|
||||
_ftprintf(file, _T("%6d %6d | "), (int)((float)trlen * n / (end - start) / 1000), (int)((float)(w * h) * n / (end - start) / 1000));
|
||||
fprintf(file, "%6d %6d | ", (int)((float)trlen * n / (end - start) / 1000), (int)((float)(w * h) * n / (end - start) / 1000));
|
||||
|
||||
start = clock();
|
||||
|
||||
|
@ -510,7 +516,7 @@ EXPORT_C GSBenchmark(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow
|
|||
|
||||
end = clock();
|
||||
|
||||
_ftprintf(file, _T("%6d %6d | "), (int)((float)trlen * n / (end - start) / 1000), (int)((float)(w * h) * n / (end - start) / 1000));
|
||||
fprintf(file, "%6d %6d | ", (int)((float)trlen * n / (end - start) / 1000), (int)((float)(w * h) * n / (end - start) / 1000));
|
||||
|
||||
start = clock();
|
||||
|
||||
|
@ -521,7 +527,7 @@ EXPORT_C GSBenchmark(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow
|
|||
|
||||
end = clock();
|
||||
|
||||
_ftprintf(file, _T("%6d %6d "), (int)((float)len * n / (end - start) / 1000), (int)((float)(w * h) * n / (end - start) / 1000));
|
||||
fprintf(file, "%6d %6d ", (int)((float)len * n / (end - start) / 1000), (int)((float)(w * h) * n / (end - start) / 1000));
|
||||
|
||||
if(psm.pal > 0)
|
||||
{
|
||||
|
@ -534,15 +540,15 @@ EXPORT_C GSBenchmark(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow
|
|||
|
||||
end = clock();
|
||||
|
||||
_ftprintf(file, _T("| %6d %6d "), (int)((float)len * n / (end - start) / 1000), (int)((float)(w * h) * n / (end - start) / 1000));
|
||||
fprintf(file, "| %6d %6d ", (int)((float)len * n / (end - start) / 1000), (int)((float)(w * h) * n / (end - start) / 1000));
|
||||
}
|
||||
|
||||
_ftprintf(file, _T("\n"));
|
||||
fprintf(file, "\n");
|
||||
|
||||
fflush(file);
|
||||
}
|
||||
|
||||
_ftprintf(file, _T("\n"));
|
||||
fprintf(file, "\n");
|
||||
}
|
||||
|
||||
_aligned_free(ptr);
|
||||
|
|
|
@ -60,7 +60,7 @@ GSSource : public CBaseFilter, private CCritSec, public IGSSource
|
|||
class GSSourceOutputPin : public CBaseOutputPin
|
||||
{
|
||||
CSize m_size;
|
||||
CAtlArray<CMediaType> m_mts;
|
||||
vector<CMediaType> m_mts;
|
||||
|
||||
public:
|
||||
GSSourceOutputPin(CSize size, REFERENCE_TIME atpf, CBaseFilter* pFilter, CCritSec* pLock, HRESULT& hr)
|
||||
|
@ -91,7 +91,7 @@ GSSource : public CBaseFilter, private CCritSec, public IGSSource
|
|||
vih.bmiHeader.biSizeImage = m_size.cx * m_size.cy * 2;
|
||||
mt.SetFormat((BYTE*)&vih, sizeof(vih));
|
||||
|
||||
m_mts.Add(mt);
|
||||
m_mts.push_back(mt);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -106,7 +106,7 @@ GSSource : public CBaseFilter, private CCritSec, public IGSSource
|
|||
vih.bmiHeader.biSizeImage = m_size.cx * m_size.cy * 4;
|
||||
mt.SetFormat((BYTE*)&vih, sizeof(vih));
|
||||
|
||||
m_mts.Add(mt);
|
||||
m_mts.push_back(mt);
|
||||
}
|
||||
|
||||
HRESULT GSSourceOutputPin::DecideBufferSize(IMemAllocator* pAlloc, ALLOCATOR_PROPERTIES* pProperties)
|
||||
|
@ -137,9 +137,9 @@ GSSource : public CBaseFilter, private CCritSec, public IGSSource
|
|||
|
||||
HRESULT CheckMediaType(const CMediaType* pmt)
|
||||
{
|
||||
for(int i = 0, j = m_mts.GetCount(); i < j; i++)
|
||||
for(vector<CMediaType>::iterator i = m_mts.begin(); i != m_mts.end(); i++)
|
||||
{
|
||||
if(m_mts[i].majortype == pmt->majortype && m_mts[i].subtype == pmt->subtype)
|
||||
if(i->majortype == pmt->majortype && i->subtype == pmt->subtype)
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
|
|
@ -44,11 +44,11 @@ int GSCaptureDlg::GetSelCodec(Codec& c)
|
|||
|
||||
if(iSel < 0) return 0;
|
||||
|
||||
POSITION pos = (POSITION)m_codeclist.GetItemDataPtr(iSel);
|
||||
Codec* codec = (Codec*)m_codeclist.GetItemDataPtr(iSel);
|
||||
|
||||
if(pos == NULL) return 2;
|
||||
if(codec == NULL) return 2;
|
||||
|
||||
c = m_codecs.GetAt(pos);
|
||||
c = *codec;
|
||||
|
||||
if(!c.filter)
|
||||
{
|
||||
|
@ -83,7 +83,7 @@ BOOL GSCaptureDlg::OnInitDialog()
|
|||
{
|
||||
__super::OnInitDialog();
|
||||
|
||||
m_codecs.RemoveAll();
|
||||
m_codecs.clear();
|
||||
|
||||
m_codeclist.ResetContent();
|
||||
m_codeclist.SetItemDataPtr(m_codeclist.AddString(_T("Uncompressed")), NULL);
|
||||
|
@ -116,7 +116,8 @@ BOOL GSCaptureDlg::OnInitDialog()
|
|||
else if(str.Find(L"@device:cm:") == 0) prefix = _T("(VfW) ");
|
||||
c.FriendlyName = prefix + c.FriendlyName;
|
||||
|
||||
m_codeclist.SetItemDataPtr(m_codeclist.AddString(c.FriendlyName), m_codecs.AddTail(c));
|
||||
m_codecs.push_back(c);
|
||||
m_codeclist.SetItemDataPtr(m_codeclist.AddString(c.FriendlyName), &m_codecs.back());
|
||||
}
|
||||
EndEnumSysDev
|
||||
|
||||
|
@ -128,13 +129,17 @@ BOOL GSCaptureDlg::OnInitDialog()
|
|||
{
|
||||
CString DisplayName;
|
||||
|
||||
POSITION pos = (POSITION)m_codeclist.GetItemDataPtr(i);
|
||||
Codec* codec = (Codec*)m_codeclist.GetItemDataPtr(i);
|
||||
|
||||
if(pos) DisplayName = m_codecs.GetAt(pos).DisplayName;
|
||||
if(codec)
|
||||
{
|
||||
DisplayName = codec->DisplayName;
|
||||
}
|
||||
|
||||
if(DisplayName == DisplayNameToFind)
|
||||
{
|
||||
m_codeclist.SetCurSel(i);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ private:
|
|||
CComBSTR DisplayName;
|
||||
};
|
||||
|
||||
CAtlList<Codec> m_codecs;
|
||||
list<Codec> m_codecs;
|
||||
|
||||
int GetSelCodec(Codec& c);
|
||||
|
||||
|
|
|
@ -32,9 +32,9 @@ GSCodeBuffer::GSCodeBuffer(size_t blocksize)
|
|||
|
||||
GSCodeBuffer::~GSCodeBuffer()
|
||||
{
|
||||
while(!m_buffers.IsEmpty())
|
||||
for(list<void*>::iterator i = m_buffers.begin(); i != m_buffers.end(); i++)
|
||||
{
|
||||
VirtualFree(m_buffers.RemoveHead(), 0, MEM_RELEASE);
|
||||
VirtualFree(*i, 0, MEM_RELEASE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ void* GSCodeBuffer::GetBuffer(size_t size)
|
|||
|
||||
m_pos = 0;
|
||||
|
||||
m_buffers.AddTail(m_ptr);
|
||||
m_buffers.push_back(m_ptr);
|
||||
}
|
||||
|
||||
BYTE* ptr = &m_ptr[m_pos];
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
class GSCodeBuffer
|
||||
{
|
||||
CAtlList<void*> m_buffers;
|
||||
list<void*> m_buffers;
|
||||
size_t m_blocksize;
|
||||
size_t m_pos, m_reserved;
|
||||
BYTE* m_ptr;
|
||||
|
|
|
@ -131,11 +131,11 @@ CRC::Game CRC::m_games[] =
|
|||
{0xFB236A46, SonicUnleashed, US},
|
||||
};
|
||||
|
||||
CAtlMap<DWORD, CRC::Game*> CRC::m_map;
|
||||
hash_map<DWORD, CRC::Game*> CRC::m_map;
|
||||
|
||||
CRC::Game CRC::Lookup(DWORD crc)
|
||||
{
|
||||
if(m_map.IsEmpty())
|
||||
if(m_map.empty())
|
||||
{
|
||||
for(int i = 0; i < countof(m_games); i++)
|
||||
{
|
||||
|
@ -143,9 +143,11 @@ CRC::Game CRC::Lookup(DWORD crc)
|
|||
}
|
||||
}
|
||||
|
||||
if(CAtlMap<DWORD, Game*>::CPair* pair = m_map.Lookup(crc))
|
||||
hash_map<DWORD, Game*>::iterator i = m_map.find(crc);
|
||||
|
||||
if(i != m_map.end())
|
||||
{
|
||||
return *pair->m_value;
|
||||
return *(*i).second;
|
||||
}
|
||||
|
||||
return m_games[0];
|
||||
|
|
|
@ -91,7 +91,7 @@ public:
|
|||
|
||||
private:
|
||||
static Game m_games[];
|
||||
static CAtlMap<DWORD, Game*> m_map;
|
||||
static hash_map<DWORD, Game*> m_map;
|
||||
|
||||
public:
|
||||
static Game Lookup(DWORD crc);
|
||||
|
|
|
@ -46,7 +46,7 @@ struct InterlaceConstantBuffer
|
|||
|
||||
template<class Texture> class GSDevice
|
||||
{
|
||||
CAtlList<Texture> m_pool;
|
||||
list<Texture> m_pool;
|
||||
|
||||
protected:
|
||||
HWND m_hWnd;
|
||||
|
@ -62,15 +62,15 @@ protected:
|
|||
{
|
||||
Recycle(t);
|
||||
|
||||
for(POSITION pos = m_pool.GetHeadPosition(); pos; m_pool.GetNext(pos))
|
||||
for(list<Texture>::iterator i = m_pool.begin(); i != m_pool.end(); i++)
|
||||
{
|
||||
const Texture& t2 = m_pool.GetAt(pos);
|
||||
const Texture& t2 = *i;
|
||||
|
||||
if(t2.GetType() == type && t2.GetWidth() == w && t2.GetHeight() == h && t2.GetFormat() == format)
|
||||
{
|
||||
t = t2;
|
||||
|
||||
m_pool.RemoveAt(pos);
|
||||
m_pool.erase(i);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ public:
|
|||
|
||||
virtual bool Reset(int w, int h, bool fs)
|
||||
{
|
||||
m_pool.RemoveAll();
|
||||
m_pool.clear();
|
||||
m_backbuffer = Texture();
|
||||
m_merge = Texture();
|
||||
m_weavebob = Texture();
|
||||
|
@ -121,7 +121,7 @@ public:
|
|||
|
||||
virtual void EndScene() = 0;
|
||||
|
||||
virtual void Draw(LPCTSTR str) = 0;
|
||||
virtual void Draw(const string& s) = 0;
|
||||
|
||||
virtual bool CopyOffscreen(Texture& src, const GSVector4& sr, Texture& dst, int w, int h, int format = 0) = 0;
|
||||
|
||||
|
@ -157,18 +157,18 @@ public:
|
|||
{
|
||||
if(t)
|
||||
{
|
||||
m_pool.AddHead(t);
|
||||
m_pool.push_front(t);
|
||||
|
||||
while(m_pool.GetCount() > 200)
|
||||
while(m_pool.size() > 200)
|
||||
{
|
||||
m_pool.RemoveTail();
|
||||
m_pool.pop_back();
|
||||
}
|
||||
|
||||
t = Texture();
|
||||
}
|
||||
}
|
||||
|
||||
bool SaveCurrent(LPCTSTR fn)
|
||||
bool SaveCurrent(const string& fn)
|
||||
{
|
||||
return m_current.Save(fn);
|
||||
}
|
||||
|
|
|
@ -112,9 +112,7 @@ bool GSDevice10::Create(HWND hWnd, bool vsync)
|
|||
|
||||
for(int i = 0; i < countof(m_convert.ps); i++)
|
||||
{
|
||||
CStringA main;
|
||||
main.Format("ps_main%d", i);
|
||||
hr = CompileShader(IDR_CONVERT10_FX, main, NULL, &m_convert.ps[i]);
|
||||
hr = CompileShader(IDR_CONVERT10_FX, format("ps_main%d", i), NULL, &m_convert.ps[i]);
|
||||
}
|
||||
|
||||
memset(&bd, 0, sizeof(bd));
|
||||
|
@ -155,9 +153,7 @@ bool GSDevice10::Create(HWND hWnd, bool vsync)
|
|||
|
||||
for(int i = 0; i < countof(m_merge.ps); i++)
|
||||
{
|
||||
CStringA main;
|
||||
main.Format("ps_main%d", i);
|
||||
hr = CompileShader(IDR_MERGE10_FX, main, NULL, &m_merge.ps[i]);
|
||||
hr = CompileShader(IDR_MERGE10_FX, format("ps_main%d", i), NULL, &m_merge.ps[i]);
|
||||
}
|
||||
|
||||
memset(&bsd, 0, sizeof(bsd));
|
||||
|
@ -187,9 +183,7 @@ bool GSDevice10::Create(HWND hWnd, bool vsync)
|
|||
|
||||
for(int i = 0; i < countof(m_interlace.ps); i++)
|
||||
{
|
||||
CStringA main;
|
||||
main.Format("ps_main%d", i);
|
||||
hr = CompileShader(IDR_INTERLACE10_FX, main, NULL, &m_interlace.ps[i]);
|
||||
hr = CompileShader(IDR_INTERLACE10_FX, format("ps_main%d", i), NULL, &m_interlace.ps[i]);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -298,7 +292,7 @@ void GSDevice10::EndScene()
|
|||
// OMSetRenderTargets(NULL, NULL);
|
||||
}
|
||||
|
||||
void GSDevice10::Draw(LPCTSTR str)
|
||||
void GSDevice10::Draw(const string& s)
|
||||
{
|
||||
/*
|
||||
BOOL fs;
|
||||
|
@ -741,13 +735,13 @@ void GSDevice10::StretchRect(Texture& st, const GSVector4& sr, Texture& dt, cons
|
|||
EndScene();
|
||||
}
|
||||
|
||||
HRESULT GSDevice10::CompileShader(UINT id, LPCSTR entry, D3D10_SHADER_MACRO* macro, ID3D10VertexShader** ps, D3D10_INPUT_ELEMENT_DESC* layout, int count, ID3D10InputLayout** il)
|
||||
HRESULT GSDevice10::CompileShader(UINT id, const string& entry, D3D10_SHADER_MACRO* macro, ID3D10VertexShader** ps, D3D10_INPUT_ELEMENT_DESC* layout, int count, ID3D10InputLayout** il)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
CComPtr<ID3D10Blob> shader, error;
|
||||
|
||||
hr = D3DX10CompileFromResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(id), NULL, macro, NULL, entry, "vs_4_0", 0, 0, NULL, &shader, &error, NULL);
|
||||
hr = D3DX10CompileFromResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(id), NULL, macro, NULL, entry.c_str(), "vs_4_0", 0, 0, NULL, &shader, &error, NULL);
|
||||
|
||||
if(error)
|
||||
{
|
||||
|
@ -776,13 +770,13 @@ HRESULT GSDevice10::CompileShader(UINT id, LPCSTR entry, D3D10_SHADER_MACRO* mac
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT GSDevice10::CompileShader(UINT id, LPCSTR entry, D3D10_SHADER_MACRO* macro, ID3D10GeometryShader** gs)
|
||||
HRESULT GSDevice10::CompileShader(UINT id, const string& entry, D3D10_SHADER_MACRO* macro, ID3D10GeometryShader** gs)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
CComPtr<ID3D10Blob> shader, error;
|
||||
|
||||
hr = D3DX10CompileFromResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(id), NULL, macro, NULL, entry, "gs_4_0", 0, 0, NULL, &shader, &error, NULL);
|
||||
hr = D3DX10CompileFromResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(id), NULL, macro, NULL, entry.c_str(), "gs_4_0", 0, 0, NULL, &shader, &error, NULL);
|
||||
|
||||
if(error)
|
||||
{
|
||||
|
@ -804,13 +798,13 @@ HRESULT GSDevice10::CompileShader(UINT id, LPCSTR entry, D3D10_SHADER_MACRO* mac
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT GSDevice10::CompileShader(UINT id, LPCSTR entry, D3D10_SHADER_MACRO* macro, ID3D10PixelShader** ps)
|
||||
HRESULT GSDevice10::CompileShader(UINT id, const string& entry, D3D10_SHADER_MACRO* macro, ID3D10PixelShader** ps)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
CComPtr<ID3D10Blob> shader, error;
|
||||
|
||||
hr = D3DX10CompileFromResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(id), NULL, macro, NULL, entry, "ps_4_0", 0, 0, NULL, &shader, &error, NULL);
|
||||
hr = D3DX10CompileFromResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(id), NULL, macro, NULL, entry.c_str(), "ps_4_0", 0, 0, NULL, &shader, &error, NULL);
|
||||
|
||||
if(error)
|
||||
{
|
||||
|
|
|
@ -103,7 +103,7 @@ public:
|
|||
void Present(const CRect& r);
|
||||
void BeginScene();
|
||||
void EndScene();
|
||||
void Draw(LPCTSTR str);
|
||||
void Draw(const string& s);
|
||||
bool CopyOffscreen(Texture& src, const GSVector4& sr, Texture& dst, int w, int h, int format = 0);
|
||||
|
||||
void ClearRenderTarget(Texture& t, const GSVector4& c);
|
||||
|
@ -138,10 +138,7 @@ public:
|
|||
void StretchRect(Texture& st, const GSVector4& sr, Texture& dt, const GSVector4& dr, ID3D10PixelShader* ps, ID3D10Buffer* ps_cb, bool linear = true);
|
||||
void StretchRect(Texture& st, const GSVector4& sr, Texture& dt, const GSVector4& dr, ID3D10PixelShader* ps, ID3D10Buffer* ps_cb, ID3D10BlendState* bs, bool linear = true);
|
||||
|
||||
HRESULT CompileShader(UINT id, LPCSTR entry, D3D10_SHADER_MACRO* macro, ID3D10VertexShader** vs, D3D10_INPUT_ELEMENT_DESC* layout, int count, ID3D10InputLayout** il);
|
||||
HRESULT CompileShader(UINT id, LPCSTR entry, D3D10_SHADER_MACRO* macro, ID3D10GeometryShader** gs);
|
||||
HRESULT CompileShader(UINT id, LPCSTR entry, D3D10_SHADER_MACRO* macro, ID3D10PixelShader** ps);
|
||||
|
||||
// TODO
|
||||
bool SaveToFileD32S8X24(ID3D10Texture2D* ds, LPCTSTR fn);
|
||||
HRESULT CompileShader(UINT id, const string& entry, D3D10_SHADER_MACRO* macro, ID3D10VertexShader** vs, D3D10_INPUT_ELEMENT_DESC* layout, int count, ID3D10InputLayout** il);
|
||||
HRESULT CompileShader(UINT id, const string& entry, D3D10_SHADER_MACRO* macro, ID3D10GeometryShader** gs);
|
||||
HRESULT CompileShader(UINT id, const string& entry, D3D10_SHADER_MACRO* macro, ID3D10PixelShader** ps);
|
||||
};
|
||||
|
|
|
@ -48,7 +48,7 @@ public:
|
|||
void Present(const CRect& r);
|
||||
void BeginScene() {}
|
||||
void EndScene() {}
|
||||
void Draw(LPCTSTR str) {}
|
||||
void Draw(const string& s) {}
|
||||
bool CopyOffscreen(Texture& src, const GSVector4& sr, Texture& dst, int w, int h, int format = 0) {return false;}
|
||||
|
||||
void ClearRenderTarget(Texture& t, const GSVector4& c) {}
|
||||
|
|
|
@ -141,9 +141,7 @@ bool GSDevice9::Create(HWND hWnd, bool vsync)
|
|||
|
||||
for(int i = 0; i < countof(m_convert.ps); i++)
|
||||
{
|
||||
CStringA main;
|
||||
main.Format("ps_main%d", i);
|
||||
CompileShader(IDR_CONVERT9_FX, main, NULL, &m_convert.ps[i]);
|
||||
CompileShader(IDR_CONVERT9_FX, format("ps_main%d", i), NULL, &m_convert.ps[i]);
|
||||
}
|
||||
|
||||
m_convert.dss.DepthEnable = false;
|
||||
|
@ -170,9 +168,7 @@ bool GSDevice9::Create(HWND hWnd, bool vsync)
|
|||
|
||||
for(int i = 0; i < countof(m_merge.ps); i++)
|
||||
{
|
||||
CStringA main;
|
||||
main.Format("ps_main%d", i);
|
||||
CompileShader(IDR_MERGE9_FX, main, NULL, &m_merge.ps[i]);
|
||||
CompileShader(IDR_MERGE9_FX, format("ps_main%d", i), NULL, &m_merge.ps[i]);
|
||||
}
|
||||
|
||||
m_merge.bs.BlendEnable = true;
|
||||
|
@ -188,9 +184,7 @@ bool GSDevice9::Create(HWND hWnd, bool vsync)
|
|||
|
||||
for(int i = 0; i < countof(m_interlace.ps); i++)
|
||||
{
|
||||
CStringA main;
|
||||
main.Format("ps_main%d", i);
|
||||
CompileShader(IDR_INTERLACE9_FX, main, NULL, &m_interlace.ps[i]);
|
||||
CompileShader(IDR_INTERLACE9_FX, format("ps_main%d", i), NULL, &m_interlace.ps[i]);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -393,7 +387,7 @@ void GSDevice9::EndScene()
|
|||
m_dev->EndScene();
|
||||
}
|
||||
|
||||
void GSDevice9::Draw(LPCTSTR str)
|
||||
void GSDevice9::Draw(const string& s)
|
||||
{
|
||||
/*
|
||||
if(!m_pp.Windowed)
|
||||
|
@ -941,9 +935,9 @@ static HRESULT LoadShader(UINT id, LPCSTR& data, DWORD& size)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT GSDevice9::CompileShader(UINT id, LPCSTR entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il)
|
||||
HRESULT GSDevice9::CompileShader(UINT id, const string& entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il)
|
||||
{
|
||||
LPCSTR target;
|
||||
const char* target;
|
||||
|
||||
if(m_d3dcaps.VertexShaderVersion >= D3DVS_VERSION(3, 0))
|
||||
{
|
||||
|
@ -962,7 +956,7 @@ HRESULT GSDevice9::CompileShader(UINT id, LPCSTR entry, const D3DXMACRO* macro,
|
|||
|
||||
CComPtr<ID3DXBuffer> shader, error;
|
||||
|
||||
// FIXME: hr = D3DXCompileShaderFromResource(AfxGetResourceHandle(), MAKEINTRESOURCE(id), macro, NULL, entry, target, 0, &shader, &error, NULL);
|
||||
// FIXME: hr = D3DXCompileShaderFromResource(AfxGetResourceHandle(), MAKEINTRESOURCE(id), macro, NULL, entry.c_str(), target, 0, &shader, &error, NULL);
|
||||
|
||||
LPCSTR data;
|
||||
DWORD size;
|
||||
|
@ -971,7 +965,7 @@ HRESULT GSDevice9::CompileShader(UINT id, LPCSTR entry, const D3DXMACRO* macro,
|
|||
|
||||
if(FAILED(hr)) return E_FAIL;
|
||||
|
||||
hr = D3DXCompileShader(data, size, macro, NULL, entry, target, 0, &shader, &error, NULL);
|
||||
hr = D3DXCompileShader(data, size, macro, NULL, entry.c_str(), target, 0, &shader, &error, NULL);
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
|
@ -1001,9 +995,9 @@ HRESULT GSDevice9::CompileShader(UINT id, LPCSTR entry, const D3DXMACRO* macro,
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT GSDevice9::CompileShader(UINT id, LPCSTR entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps)
|
||||
HRESULT GSDevice9::CompileShader(UINT id, const string& entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps)
|
||||
{
|
||||
LPCSTR target = NULL;
|
||||
const char* target = NULL;
|
||||
UINT flags = 0;
|
||||
|
||||
if(m_d3dcaps.PixelShaderVersion >= D3DPS_VERSION(3, 0))
|
||||
|
@ -1024,7 +1018,7 @@ HRESULT GSDevice9::CompileShader(UINT id, LPCSTR entry, const D3DXMACRO* macro,
|
|||
|
||||
CComPtr<ID3DXBuffer> shader, error;
|
||||
|
||||
// FIXME: hr = D3DXCompileShaderFromResource(AfxGetResourceHandle(), MAKEINTRESOURCE(id), macro, NULL, entry, target, flags, &shader, &error, NULL);
|
||||
// FIXME: hr = D3DXCompileShaderFromResource(AfxGetResourceHandle(), MAKEINTRESOURCE(id), macro, NULL, entry.c_str(), target, flags, &shader, &error, NULL);
|
||||
|
||||
LPCSTR data;
|
||||
DWORD size;
|
||||
|
@ -1033,7 +1027,7 @@ HRESULT GSDevice9::CompileShader(UINT id, LPCSTR entry, const D3DXMACRO* macro,
|
|||
|
||||
if(FAILED(hr)) return E_FAIL;
|
||||
|
||||
hr = D3DXCompileShader(data, size, macro, NULL, entry, target, 0, &shader, &error, NULL);
|
||||
hr = D3DXCompileShader(data, size, macro, NULL, entry.c_str(), target, 0, &shader, &error, NULL);
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
|
|
|
@ -139,7 +139,7 @@ public:
|
|||
void Present(const CRect& r);
|
||||
void BeginScene();
|
||||
void EndScene();
|
||||
void Draw(LPCTSTR str);
|
||||
void Draw(const string& s);
|
||||
bool CopyOffscreen(Texture& src, const GSVector4& sr, Texture& dst, int w, int h, int format = 0);
|
||||
|
||||
void ClearRenderTarget(Texture& t, const GSVector4& c);
|
||||
|
@ -179,14 +179,11 @@ public:
|
|||
void StretchRect(Texture& st, const GSVector4& sr, Texture& dt, const GSVector4& dr, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, bool linear = true);
|
||||
void StretchRect(Texture& st, const GSVector4& sr, Texture& dt, const GSVector4& dr, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, Direct3DBlendState9* bs, bool linear = true);
|
||||
|
||||
HRESULT CompileShader(UINT id, LPCSTR entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il);
|
||||
HRESULT CompileShader(UINT id, LPCSTR entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps);
|
||||
HRESULT CompileShader(UINT id, const string& entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il);
|
||||
HRESULT CompileShader(UINT id, const string& entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps);
|
||||
|
||||
virtual bool IsCurrentRGBA()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO
|
||||
bool SaveToFileD24S8(IDirect3DSurface9* ds, LPCTSTR fn);
|
||||
};
|
||||
|
|
|
@ -43,7 +43,7 @@ public:
|
|||
void Present(const CRect& r) {}
|
||||
void BeginScene() {}
|
||||
void EndScene() {}
|
||||
void Draw(LPCTSTR str) {}
|
||||
void Draw(const string& s) {}
|
||||
bool CopyOffscreen(Texture& src, const GSVector4& sr, Texture& dst, int w, int h, int format = 0) {return false;}
|
||||
|
||||
void ClearRenderTarget(Texture& t, const GSVector4& c) {}
|
||||
|
|
|
@ -62,9 +62,17 @@ CRect GSDirtyRect::GetDirtyRect(const GIFRegTEX0& TEX0)
|
|||
|
||||
CRect GSDirtyRectList::GetDirtyRect(const GIFRegTEX0& TEX0, CSize size)
|
||||
{
|
||||
if(IsEmpty()) return CRect(0, 0, 0, 0);
|
||||
if(empty())
|
||||
{
|
||||
return CRect(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
CRect r(INT_MAX, INT_MAX, 0, 0);
|
||||
POSITION pos = GetHeadPosition();
|
||||
while(pos) r |= GetNext(pos).GetDirtyRect(TEX0);
|
||||
|
||||
for(list<GSDirtyRect>::iterator i = begin(); i != end(); i++)
|
||||
{
|
||||
r |= i->GetDirtyRect(TEX0);
|
||||
}
|
||||
|
||||
return r & CRect(0, 0, size.cx, size.cy);
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ public:
|
|||
CRect GetDirtyRect(const GIFRegTEX0& TEX0);
|
||||
};
|
||||
|
||||
class GSDirtyRectList : public CAtlList<GSDirtyRect>
|
||||
class GSDirtyRectList : public list<GSDirtyRect>
|
||||
{
|
||||
public:
|
||||
GSDirtyRectList() {}
|
||||
|
|
|
@ -36,10 +36,10 @@ GSDump::~GSDump()
|
|||
Close();
|
||||
}
|
||||
|
||||
void GSDump::Open(const CString& fn, DWORD crc, const GSFreezeData& fd, const GSPrivRegSet* regs)
|
||||
void GSDump::Open(const string& fn, DWORD crc, const GSFreezeData& fd, const GSPrivRegSet* regs)
|
||||
{
|
||||
m_gs = _tfopen(fn + _T(".gs"), _T("wb"));
|
||||
m_obj = _tfopen(fn + _T(".obj"), _T("wt"));
|
||||
m_gs = fopen((fn + ".gs").c_str(), "wb");
|
||||
m_obj = fopen((fn + ".obj").c_str(), "wt");
|
||||
|
||||
m_frames = 0;
|
||||
m_objects = 0;
|
||||
|
@ -123,20 +123,20 @@ void GSDump::Object(GSVertexSW* vertices, int count, GS_PRIM_CLASS primclass)
|
|||
float y = vertices[i].p.y;
|
||||
float z = vertices[i].p.z;
|
||||
|
||||
_ftprintf(m_obj, _T("v %f %f %f\n"), x, y, z);
|
||||
fprintf(m_obj, "v %f %f %f\n", x, y, z);
|
||||
}
|
||||
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
_ftprintf(m_obj, _T("vt %f %f %f\n"), vertices[i].t.x, vertices[i].t.y, vertices[i].t.z);
|
||||
fprintf(m_obj, "vt %f %f %f\n", vertices[i].t.x, vertices[i].t.y, vertices[i].t.z);
|
||||
}
|
||||
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
_ftprintf(m_obj, _T("vn %f %f %f\n"), 0.0f, 0.0f, 0.0f);
|
||||
fprintf(m_obj, "vn %f %f %f\n", 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
|
||||
_ftprintf(m_obj, _T("g f%d_o%d_p%d_v%d\n"), m_frames, m_objects, primclass, count);
|
||||
fprintf(m_obj, "g f%d_o%d_p%d_v%d\n", m_frames, m_objects, primclass, count);
|
||||
|
||||
for(int i = 0; i < count; i += 3)
|
||||
{
|
||||
|
@ -144,7 +144,7 @@ void GSDump::Object(GSVertexSW* vertices, int count, GS_PRIM_CLASS primclass)
|
|||
int b = m_vertices + i + 2;
|
||||
int c = m_vertices + i + 3;
|
||||
|
||||
_ftprintf(m_obj, _T("f %d/%d/%d %d/%d/%d %d/%d/%d \n"), a, a, a, b, b, b, c, c, c);
|
||||
fprintf(m_obj, "f %d/%d/%d %d/%d/%d %d/%d/%d\n", a, a, a, b, b, b, c, c, c);
|
||||
}
|
||||
|
||||
m_vertices += count;
|
||||
|
|
|
@ -55,7 +55,7 @@ public:
|
|||
GSDump();
|
||||
virtual ~GSDump();
|
||||
|
||||
void Open(const CString& fn, DWORD crc, const GSFreezeData& fd, const GSPrivRegSet* regs);
|
||||
void Open(const string& fn, DWORD crc, const GSFreezeData& fd, const GSPrivRegSet* regs);
|
||||
void Close();
|
||||
void ReadFIFO(UINT32 size);
|
||||
void Transfer(int index, BYTE* mem, size_t size);
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "GS.h"
|
||||
#include "GSCodeBuffer.h"
|
||||
|
||||
struct GSRasterizerStats
|
||||
{
|
||||
|
@ -50,8 +51,9 @@ protected:
|
|||
VALUE f;
|
||||
};
|
||||
|
||||
CRBMap<KEY, VALUE> m_map;
|
||||
CRBMap<KEY, ActivePtr*> m_map_active;
|
||||
hash_map<KEY, VALUE> m_map;
|
||||
hash_map<KEY, ActivePtr*> m_map_active;
|
||||
|
||||
ActivePtr* m_active;
|
||||
|
||||
virtual VALUE GetDefaultFunction(KEY key) = 0;
|
||||
|
@ -64,28 +66,25 @@ public:
|
|||
|
||||
virtual ~GSFunctionMap()
|
||||
{
|
||||
POSITION pos = m_map_active.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<KEY, ActivePtr*>::iterator i = m_map_active.begin(); i != m_map_active.end(); i++)
|
||||
{
|
||||
delete m_map_active.GetNextValue(pos);
|
||||
delete (*i).second;
|
||||
}
|
||||
|
||||
m_map_active.RemoveAll();
|
||||
}
|
||||
|
||||
void SetAt(KEY key, VALUE f)
|
||||
{
|
||||
m_map.SetAt(key, f);
|
||||
}
|
||||
|
||||
VALUE Lookup(KEY key)
|
||||
{
|
||||
m_active = NULL;
|
||||
|
||||
if(!m_map_active.Lookup(key, m_active))
|
||||
hash_map<KEY, ActivePtr*>::iterator i = m_map_active.find(key);
|
||||
|
||||
if(i != m_map_active.end())
|
||||
{
|
||||
CRBMap<KEY, VALUE>::CPair* pair = m_map.Lookup(key);
|
||||
m_active = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
hash_map<KEY, VALUE>::iterator i = m_map.find(key);
|
||||
|
||||
ActivePtr* p = new ActivePtr();
|
||||
|
||||
|
@ -93,9 +92,9 @@ public:
|
|||
|
||||
p->frame = (UINT64)-1;
|
||||
|
||||
p->f = pair ? pair->m_value : GetDefaultFunction(key);
|
||||
p->f = i != m_map.end() ? (*i).second : GetDefaultFunction(key);
|
||||
|
||||
m_map_active.SetAt(key, p);
|
||||
m_map_active[key] = p;
|
||||
|
||||
m_active = p;
|
||||
}
|
||||
|
@ -122,11 +121,9 @@ public:
|
|||
{
|
||||
__int64 ttpf = 0;
|
||||
|
||||
POSITION pos = m_map_active.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<KEY, ActivePtr*>::iterator i = m_map_active.begin(); i != m_map_active.end(); i++)
|
||||
{
|
||||
ActivePtr* p = m_map_active.GetNextValue(pos);
|
||||
ActivePtr* p = (*i).second;
|
||||
|
||||
if(p->frames)
|
||||
{
|
||||
|
@ -134,14 +131,10 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
pos = m_map_active.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<KEY, ActivePtr*>::iterator i = m_map_active.begin(); i != m_map_active.end(); i++)
|
||||
{
|
||||
KEY key;
|
||||
ActivePtr* p;
|
||||
|
||||
m_map_active.GetNextAssoc(pos, key, p);
|
||||
KEY key = (*i).first;
|
||||
ActivePtr* p = (*i).second;
|
||||
|
||||
if(p->frames > 0)
|
||||
{
|
||||
|
@ -150,7 +143,7 @@ public:
|
|||
__int64 ppf = p->frames > 0 ? p->pixels / p->frames : 0;
|
||||
|
||||
printf("[%012I64x]%c %6.2f%% | %5.2f%% | f %4I64d | p %10I64d | tpp %4I64d | tpf %9I64d | ppf %7I64d\n",
|
||||
(UINT64)key, !m_map.Lookup(key) ? '*' : ' ',
|
||||
(UINT64)key, m_map.find(key) == m_map.end() ? '*' : ' ',
|
||||
(float)(tpf * 10000 / 50000000) / 100,
|
||||
(float)(tpf * 10000 / ttpf) / 100,
|
||||
p->frames, p->pixels,
|
||||
|
@ -160,15 +153,14 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
#include "GSCodeBuffer.h"
|
||||
#include "vtune/JITProfiling.h"
|
||||
|
||||
template<class CG, class KEY, class VALUE>
|
||||
class GSCodeGeneratorFunctionMap : public GSFunctionMap<KEY, VALUE>
|
||||
{
|
||||
DWORD m_id;
|
||||
CStringA m_name;
|
||||
CRBMap<UINT64, CG*> m_cgmap;
|
||||
string m_name;
|
||||
hash_map<UINT64, CG*> m_cgmap;
|
||||
GSCodeBuffer m_cb;
|
||||
|
||||
enum {MAX_SIZE = 4096};
|
||||
|
@ -177,7 +169,7 @@ protected:
|
|||
virtual CG* Create(KEY key, void* ptr, size_t maxsize = MAX_SIZE) = 0;
|
||||
|
||||
public:
|
||||
GSCodeGeneratorFunctionMap(LPCSTR name)
|
||||
GSCodeGeneratorFunctionMap(const char* name)
|
||||
: m_id(0x100000)
|
||||
, m_name(name)
|
||||
{
|
||||
|
@ -185,11 +177,9 @@ public:
|
|||
|
||||
virtual ~GSCodeGeneratorFunctionMap()
|
||||
{
|
||||
POSITION pos = m_cgmap.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<UINT64, CG*>::iterator i = m_cgmap.begin(); i != m_cgmap.end(); i++)
|
||||
{
|
||||
delete m_cgmap.GetNextValue(pos);
|
||||
delete (*i).second;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -197,7 +187,13 @@ public:
|
|||
{
|
||||
CG* cg = NULL;
|
||||
|
||||
if(!m_cgmap.Lookup(key, cg))
|
||||
hash_map<UINT64, CG*>::iterator i = m_cgmap.find(key);
|
||||
|
||||
if(i != m_cgmap.end())
|
||||
{
|
||||
cg = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
void* ptr = m_cb.GetBuffer(MAX_SIZE);
|
||||
|
||||
|
@ -207,20 +203,18 @@ public:
|
|||
|
||||
m_cb.ReleaseBuffer(cg->getSize());
|
||||
|
||||
m_cgmap.SetAt(key, cg);
|
||||
m_cgmap[key] = cg;
|
||||
|
||||
// vtune method registration
|
||||
|
||||
CStringA name;
|
||||
|
||||
name.Format("%s<%016I64x>()", m_name, (UINT64)key);
|
||||
string name = format("%s<%016I64x>()", m_name.c_str(), (UINT64)key);
|
||||
|
||||
iJIT_Method_Load ml;
|
||||
|
||||
memset(&ml, 0, sizeof(ml));
|
||||
|
||||
ml.method_id = m_id++;
|
||||
ml.method_name = (LPSTR)(LPCSTR)name;
|
||||
ml.method_name = (char*)name.c_str();
|
||||
ml.method_load_address = (void*)cg->getCode();
|
||||
ml.method_size = cg->getSize();
|
||||
|
||||
|
|
|
@ -465,11 +465,9 @@ GSLocalMemory::~GSLocalMemory()
|
|||
{
|
||||
VirtualFree(m_vm8, 0, MEM_RELEASE);
|
||||
|
||||
POSITION pos = m_omap.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<DWORD, Offset*>::iterator i = m_omap.begin(); i != m_omap.end(); i++)
|
||||
{
|
||||
Offset* o = m_omap.GetNextValue(pos);
|
||||
Offset* o = (*i).second;
|
||||
|
||||
for(int i = 0; i < countof(o->col); i++)
|
||||
{
|
||||
|
@ -479,16 +477,10 @@ GSLocalMemory::~GSLocalMemory()
|
|||
_aligned_free(o);
|
||||
}
|
||||
|
||||
m_omap.RemoveAll();
|
||||
|
||||
pos = m_o4map.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<DWORD, Offset4*>::iterator i = m_o4map.begin(); i != m_o4map.end(); i++)
|
||||
{
|
||||
_aligned_free(m_o4map.GetNextValue(pos));
|
||||
_aligned_free((*i).second);
|
||||
}
|
||||
|
||||
m_o4map.RemoveAll();
|
||||
}
|
||||
|
||||
GSLocalMemory::Offset* GSLocalMemory::GetOffset(DWORD bp, DWORD bw, DWORD psm)
|
||||
|
@ -499,9 +491,11 @@ GSLocalMemory::Offset* GSLocalMemory::GetOffset(DWORD bp, DWORD bw, DWORD psm)
|
|||
|
||||
DWORD hash = bp | (bw << 14) | (psm << 20);
|
||||
|
||||
if(CRBMap<DWORD, Offset*>::CPair* pair = m_omap.Lookup(hash))
|
||||
hash_map<DWORD, Offset*>::iterator i = m_omap.find(hash);
|
||||
|
||||
if(i != m_omap.end())
|
||||
{
|
||||
return pair->m_value;
|
||||
return (*i).second;
|
||||
}
|
||||
|
||||
Offset* o = (Offset*)_aligned_malloc(sizeof(Offset), 16);
|
||||
|
@ -524,7 +518,7 @@ GSLocalMemory::Offset* GSLocalMemory::GetOffset(DWORD bp, DWORD bw, DWORD psm)
|
|||
memcpy(o->col[i], m_psm[psm].rowOffset[0], sizeof(int) * 2048);
|
||||
}
|
||||
|
||||
m_omap.SetAt(hash, o);
|
||||
m_omap[hash] = o;
|
||||
|
||||
return o;
|
||||
}
|
||||
|
@ -546,9 +540,11 @@ GSLocalMemory::Offset4* GSLocalMemory::GetOffset4(const GIFRegFRAME& FRAME, cons
|
|||
|
||||
DWORD hash = (FRAME.FBP << 0) | (ZBUF.ZBP << 9) | (bw << 18) | (fpsm_hash << 24) | (zpsm_hash << 28);
|
||||
|
||||
if(CRBMap<DWORD, Offset4*>::CPair* pair = m_o4map.Lookup(hash))
|
||||
hash_map<DWORD, Offset4*>::iterator i = m_o4map.find(hash);
|
||||
|
||||
if(i != m_o4map.end())
|
||||
{
|
||||
return pair->m_value;
|
||||
return (*i).second;
|
||||
}
|
||||
|
||||
Offset4* o = (Offset4*)_aligned_malloc(sizeof(Offset4), 16);
|
||||
|
@ -573,7 +569,7 @@ GSLocalMemory::Offset4* GSLocalMemory::GetOffset4(const GIFRegFRAME& FRAME, cons
|
|||
o->col[i].y = m_psm[zpsm].rowOffset[0][i * 4] << zs;
|
||||
}
|
||||
|
||||
m_o4map.SetAt(hash, o);
|
||||
m_o4map[hash] = o;
|
||||
|
||||
return o;
|
||||
}
|
||||
|
@ -2543,7 +2539,7 @@ if(!aligned) printf("unaligned memory pointer passed to ReadTexture\n");
|
|||
}
|
||||
}
|
||||
|
||||
HRESULT GSLocalMemory::SaveBMP(LPCTSTR fn, DWORD bp, DWORD bw, DWORD psm, int w, int h)
|
||||
HRESULT GSLocalMemory::SaveBMP(const string& fn, DWORD bp, DWORD bw, DWORD psm, int w, int h)
|
||||
{
|
||||
int pitch = w * 4;
|
||||
int size = pitch * h;
|
||||
|
@ -2571,7 +2567,7 @@ HRESULT GSLocalMemory::SaveBMP(LPCTSTR fn, DWORD bp, DWORD bw, DWORD psm, int w,
|
|||
for(int i = 0; i < w; i++)
|
||||
((DWORD*)p)[i] = (this->*rp)(i, j, TEX0.TBP0, TEX0.TBW);
|
||||
|
||||
if(FILE* fp = _tfopen(fn, _T("wb")))
|
||||
if(FILE* fp = fopen(fn.c_str(), "wb"))
|
||||
{
|
||||
BITMAPINFOHEADER bih;
|
||||
memset(&bih, 0, sizeof(bih));
|
||||
|
|
|
@ -141,8 +141,8 @@ protected:
|
|||
|
||||
//
|
||||
|
||||
CRBMapC<DWORD, Offset*> m_omap;
|
||||
CRBMapC<DWORD, Offset4*> m_o4map;
|
||||
hash_map<DWORD, Offset*> m_omap;
|
||||
hash_map<DWORD, Offset4*> m_o4map;
|
||||
|
||||
public:
|
||||
GSLocalMemory();
|
||||
|
@ -993,7 +993,7 @@ public:
|
|||
|
||||
//
|
||||
|
||||
HRESULT SaveBMP(LPCTSTR fn, DWORD bp, DWORD bw, DWORD psm, int w, int h);
|
||||
HRESULT SaveBMP(const string& fn, DWORD bp, DWORD bw, DWORD psm, int w, int h);
|
||||
};
|
||||
|
||||
#pragma warning(default: 4244)
|
|
@ -33,7 +33,6 @@ GSPerfMon::GSPerfMon()
|
|||
{
|
||||
memset(m_counters, 0, sizeof(m_counters));
|
||||
memset(m_stats, 0, sizeof(m_stats));
|
||||
memset(m_warnings, 0, sizeof(m_warnings));
|
||||
}
|
||||
|
||||
void GSPerfMon::Put(counter_t c, double val)
|
||||
|
|
|
@ -25,12 +25,10 @@ class GSPerfMon
|
|||
{
|
||||
public:
|
||||
enum counter_t {Frame, Prim, Draw, Swizzle, Unswizzle, Fillrate, Quad, CounterLast};
|
||||
enum warning_t {DATE, PABE, ABE, COLCLAMP, DepthTexture, WarningLast};
|
||||
|
||||
protected:
|
||||
double m_counters[CounterLast];
|
||||
double m_stats[CounterLast];
|
||||
bool m_warnings[WarningLast];
|
||||
UINT64 m_begin, m_total, m_start, m_frame;
|
||||
clock_t m_lastframe;
|
||||
int m_count;
|
||||
|
@ -47,8 +45,6 @@ public:
|
|||
UINT64 GetFrame() {return m_frame;}
|
||||
void Put(counter_t c, double val = 0);
|
||||
double Get(counter_t c) {return m_stats[c];}
|
||||
void Put(warning_t c) {m_warnings[c] = true;}
|
||||
bool Get(warning_t c) {bool b = m_warnings[c]; m_warnings[c] = false; return b;}
|
||||
void Update();
|
||||
int CPU();
|
||||
};
|
||||
|
|
|
@ -922,10 +922,12 @@ GSRasterizerList::~GSRasterizerList()
|
|||
|
||||
void GSRasterizerList::FreeRasterizers()
|
||||
{
|
||||
while(!IsEmpty())
|
||||
for(list<IRasterizer*>::iterator i = begin(); i != end(); i++)
|
||||
{
|
||||
delete RemoveHead();
|
||||
delete *i;
|
||||
}
|
||||
|
||||
clear();
|
||||
}
|
||||
|
||||
void GSRasterizerList::Draw(const GSRasterizerData* data)
|
||||
|
@ -936,11 +938,9 @@ void GSRasterizerList::Draw(const GSRasterizerData* data)
|
|||
|
||||
__int64 start = __rdtsc();
|
||||
|
||||
POSITION pos = GetTailPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<IRasterizer*>::reverse_iterator i = rbegin(); i != rend(); i++)
|
||||
{
|
||||
GetPrev(pos)->Draw(data);
|
||||
(*i)->Draw(data);
|
||||
}
|
||||
|
||||
while(*m_sync)
|
||||
|
@ -950,13 +950,11 @@ void GSRasterizerList::Draw(const GSRasterizerData* data)
|
|||
|
||||
m_stats.ticks = __rdtsc() - start;
|
||||
|
||||
pos = GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<IRasterizer*>::iterator i = begin(); i != end(); i++)
|
||||
{
|
||||
GSRasterizerStats s;
|
||||
|
||||
GetNext(pos)->GetStats(s);
|
||||
(*i)->GetStats(s);
|
||||
|
||||
m_stats.pixels += s.pixels;
|
||||
m_stats.prims = max(m_stats.prims, s.prims);
|
||||
|
@ -970,8 +968,8 @@ void GSRasterizerList::GetStats(GSRasterizerStats& stats)
|
|||
|
||||
void GSRasterizerList::PrintStats()
|
||||
{
|
||||
if(!IsEmpty())
|
||||
if(!empty())
|
||||
{
|
||||
GetHead()->PrintStats();
|
||||
front()->PrintStats();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -123,7 +123,7 @@ public:
|
|||
void Draw(const GSRasterizerData* data);
|
||||
};
|
||||
|
||||
class GSRasterizerList : protected CAtlList<IRasterizer*>, public IRasterizer
|
||||
class GSRasterizerList : protected list<IRasterizer*>, public IRasterizer
|
||||
{
|
||||
long* m_sync;
|
||||
GSRasterizerStats m_stats;
|
||||
|
@ -142,7 +142,7 @@ public:
|
|||
|
||||
for(int i = 0; i < threads; i++)
|
||||
{
|
||||
AddTail(new GSRasterizerMT(new DS(parent, i), i, threads, m_sync));
|
||||
push_back(new GSRasterizerMT(new DS(parent, i), i, threads, m_sync));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -108,9 +108,9 @@ public:
|
|||
m_blur = rs.m_blur;
|
||||
};
|
||||
|
||||
virtual bool Create(LPCTSTR title) = 0;
|
||||
virtual bool Create(const string& title) = 0;
|
||||
virtual void VSync(int field) = 0;
|
||||
virtual bool MakeSnapshot(LPCTSTR path) = 0;
|
||||
virtual bool MakeSnapshot(const string& path) = 0;
|
||||
};
|
||||
|
||||
template<class Device> class GSRenderer : public GSRendererBase
|
||||
|
@ -323,7 +323,7 @@ protected:
|
|||
|
||||
void DoSnapshot(int field)
|
||||
{
|
||||
if(!m_snapshot.IsEmpty())
|
||||
if(!m_snapshot.empty())
|
||||
{
|
||||
if(!m_dump && (::GetAsyncKeyState(VK_SHIFT) & 0x8000))
|
||||
{
|
||||
|
@ -339,9 +339,9 @@ protected:
|
|||
delete [] fd.data;
|
||||
}
|
||||
|
||||
m_dev.SaveCurrent(m_snapshot + _T(".bmp"));
|
||||
m_dev.SaveCurrent(m_snapshot + ".bmp");
|
||||
|
||||
m_snapshot.Empty();
|
||||
m_snapshot.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -408,7 +408,7 @@ public:
|
|||
bool s_save;
|
||||
bool s_savez;
|
||||
|
||||
CString m_snapshot;
|
||||
string m_snapshot;
|
||||
GSCapture m_capture;
|
||||
|
||||
public:
|
||||
|
@ -422,9 +422,9 @@ public:
|
|||
s_savez = !!AfxGetApp()->GetProfileInt(_T("Debug"), _T("savez"), 0);
|
||||
}
|
||||
|
||||
bool Create(LPCTSTR title)
|
||||
bool Create(const string& title)
|
||||
{
|
||||
if(!m_wnd.Create(title))
|
||||
if(!m_wnd.Create(title.c_str()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -456,7 +456,7 @@ public:
|
|||
// osd
|
||||
|
||||
static UINT64 s_frame = 0;
|
||||
static CString s_stats;
|
||||
static string s_stats;
|
||||
|
||||
if(m_perfmon.GetFrame() - s_frame >= 30)
|
||||
{
|
||||
|
@ -465,11 +465,13 @@ public:
|
|||
s_frame = m_perfmon.GetFrame();
|
||||
|
||||
double fps = 1000.0f / m_perfmon.Get(GSPerfMon::Frame);
|
||||
|
||||
string interlace = m_regs->SMODE2.INT ? (string("Interlaced ") + (m_regs->SMODE2.FFMD ? "(frame)" : "(field)")) : "Progressive";
|
||||
|
||||
s_stats.Format(
|
||||
_T("%I64d | %d x %d | %.2f fps (%d%%) | %s - %s | %s | %d/%d/%d | %d%% CPU | %.2f | %.2f"),
|
||||
s_stats = format(
|
||||
"%I64d | %d x %d | %.2f fps (%d%%) | %s - %s | %s | %d/%d/%d | %d%% CPU | %.2f | %.2f",
|
||||
m_perfmon.GetFrame(), GetDisplaySize().cx, GetDisplaySize().cy, fps, (int)(100.0 * fps / GetFPS()),
|
||||
m_regs->SMODE2.INT ? (CString(_T("Interlaced ")) + (m_regs->SMODE2.FFMD ? _T("(frame)") : _T("(field)"))) : _T("Progressive"),
|
||||
interlace.c_str(),
|
||||
GSSettingsDlg::g_interlace[m_interlace].name,
|
||||
GSSettingsDlg::g_aspectratio[m_aspectratio].name,
|
||||
(int)m_perfmon.Get(GSPerfMon::Quad),
|
||||
|
@ -484,26 +486,20 @@ public:
|
|||
|
||||
if(fillrate > 0)
|
||||
{
|
||||
s_stats.Format(_T("%s | %.2f mpps"), CString(s_stats), fps * fillrate / (1024 * 1024));
|
||||
s_stats += format(" | %.2f mpps", fps * fillrate / (1024 * 1024));
|
||||
}
|
||||
|
||||
if(m_capture.IsCapturing())
|
||||
{
|
||||
s_stats += _T(" | Recording...");
|
||||
s_stats += " | Recording...";
|
||||
}
|
||||
|
||||
if(m_perfmon.Get(GSPerfMon::COLCLAMP)) _tprintf(_T("*** NOT SUPPORTED: color wrap ***\n"));
|
||||
if(m_perfmon.Get(GSPerfMon::PABE)) _tprintf(_T("*** NOT SUPPORTED: per pixel alpha blend ***\n"));
|
||||
if(m_perfmon.Get(GSPerfMon::DATE)) _tprintf(_T("*** PERFORMANCE WARNING: destination alpha test used ***\n"));
|
||||
if(m_perfmon.Get(GSPerfMon::ABE)) _tprintf(_T("*** NOT SUPPORTED: alpha blending mode ***\n"));
|
||||
if(m_perfmon.Get(GSPerfMon::DepthTexture)) _tprintf(_T("*** NOT SUPPORTED: depth texture ***\n"));
|
||||
|
||||
m_wnd.SetWindowText(s_stats);
|
||||
m_wnd.SetWindowText(s_stats.c_str());
|
||||
}
|
||||
|
||||
if(m_osd)
|
||||
{
|
||||
m_dev.Draw(s_stats + _T("\n\nF5: interlace mode\nF6: aspect ratio\nF7: OSD"));
|
||||
m_dev.Draw(s_stats + "\n\nF5: interlace mode\nF6: aspect ratio\nF7: OSD");
|
||||
}
|
||||
|
||||
if(m_frameskip)
|
||||
|
@ -535,11 +531,11 @@ public:
|
|||
DoCapture();
|
||||
}
|
||||
|
||||
bool MakeSnapshot(LPCTSTR path)
|
||||
bool MakeSnapshot(const string& path)
|
||||
{
|
||||
if(m_snapshot.IsEmpty())
|
||||
if(m_snapshot.empty())
|
||||
{
|
||||
m_snapshot.Format(_T("%s_%s"), path, CTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S")));
|
||||
m_snapshot = format("%s_%s", path.c_str(), CTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S")));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -261,9 +261,12 @@ protected:
|
|||
|
||||
if(s_dump)
|
||||
{
|
||||
CString str;
|
||||
str.Format(_T("c:\\temp2\\_%05d_f%I64d_fr%d_%05x_%d.bmp"), s_n++, m_perfmon.GetFrame(), i, (int)TEX0.TBP0, (int)TEX0.PSM);
|
||||
if(s_save) rt->m_texture.Save(str);
|
||||
if(s_save)
|
||||
{
|
||||
rt->m_texture.Save(format("c:\\temp2\\_%05d_f%I64d_fr%d_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), i, (int)TEX0.TBP0, (int)TEX0.PSM));
|
||||
}
|
||||
|
||||
s_n++;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -321,19 +324,45 @@ protected:
|
|||
|
||||
if(s_dump)
|
||||
{
|
||||
CString str;
|
||||
str.Format(_T("c:\\temp2\\_%05d_f%I64d_tex_%05x_%d_%d%d_%02x_%02x_%02x_%02x.dds"),
|
||||
s_n++, m_perfmon.GetFrame(), (int)context->TEX0.TBP0, (int)context->TEX0.PSM,
|
||||
(int)context->CLAMP.WMS, (int)context->CLAMP.WMT,
|
||||
(int)context->CLAMP.MINU, (int)context->CLAMP.MAXU,
|
||||
(int)context->CLAMP.MINV, (int)context->CLAMP.MAXV);
|
||||
if(PRIM->TME) if(s_save) tex->m_texture.Save(str, true);
|
||||
str.Format(_T("c:\\temp2\\_%05d_f%I64d_tpx_%05x_%d.dds"), s_n-1, m_perfmon.GetFrame(), context->TEX0.CBP, context->TEX0.CPSM);
|
||||
if(PRIM->TME && tex->m_palette) if(s_save) tex->m_palette.Save(str, true);
|
||||
str.Format(_T("c:\\temp2\\_%05d_f%I64d_rt0_%05x_%d.bmp"), s_n++, m_perfmon.GetFrame(), context->FRAME.Block(), context->FRAME.PSM);
|
||||
if(s_save) rt->m_texture.Save(str);
|
||||
str.Format(_T("c:\\temp2\\_%05d_f%I64d_rz0_%05x_%d.bmp"), s_n-1, m_perfmon.GetFrame(), context->ZBUF.Block(), context->ZBUF.PSM);
|
||||
if(s_savez) ds->m_texture.Save(str);
|
||||
UINT64 frame = m_perfmon.GetFrame();
|
||||
|
||||
string s;
|
||||
|
||||
if(s_save && PRIM->TME)
|
||||
{
|
||||
s = format("c:\\temp2\\_%05d_f%I64d_tex_%05x_%d_%d%d_%02x_%02x_%02x_%02x.dds",
|
||||
s_n, frame, (int)context->TEX0.TBP0, (int)context->TEX0.PSM,
|
||||
(int)context->CLAMP.WMS, (int)context->CLAMP.WMT,
|
||||
(int)context->CLAMP.MINU, (int)context->CLAMP.MAXU,
|
||||
(int)context->CLAMP.MINV, (int)context->CLAMP.MAXV);
|
||||
|
||||
tex->m_texture.Save(s, true);
|
||||
|
||||
if(tex->m_palette)
|
||||
{
|
||||
s = format("c:\\temp2\\_%05d_f%I64d_tpx_%05x_%d.dds", s_n, frame, context->TEX0.CBP, context->TEX0.CPSM);
|
||||
|
||||
tex->m_palette.Save(s, true);
|
||||
}
|
||||
}
|
||||
|
||||
s_n++;
|
||||
|
||||
if(s_save)
|
||||
{
|
||||
s = format("c:\\temp2\\_%05d_f%I64d_rt0_%05x_%d.bmp", s_n, frame, context->FRAME.Block(), context->FRAME.PSM);
|
||||
|
||||
rt->m_texture.Save(s);
|
||||
}
|
||||
|
||||
if(s_savez)
|
||||
{
|
||||
s = format("c:\\temp2\\_%05d_f%I64d_rz0_%05x_%d.bmp", s_n, frame, context->ZBUF.Block(), context->ZBUF.PSM);
|
||||
|
||||
ds->m_texture.Save(s);
|
||||
}
|
||||
|
||||
s_n++;
|
||||
}
|
||||
|
||||
int prim = PRIM->PRIM;
|
||||
|
@ -349,12 +378,25 @@ protected:
|
|||
|
||||
if(s_dump)
|
||||
{
|
||||
CString str;
|
||||
str.Format(_T("c:\\temp2\\_%05d_f%I64d_rt1_%05x_%d.bmp"), s_n++, m_perfmon.GetFrame(), context->FRAME.Block(), context->FRAME.PSM);
|
||||
if(s_save) rt->m_texture.Save(str);
|
||||
str.Format(_T("c:\\temp2\\_%05d_f%I64d_rz1_%05x_%d.bmp"), s_n-1, m_perfmon.GetFrame(), context->ZBUF.Block(), context->ZBUF.PSM);
|
||||
if(s_savez) ds->m_texture.Save(str);
|
||||
// if(s_savez) m_dev.SaveToFileD32S8X24(ds->m_texture, str); // TODO
|
||||
UINT64 frame = m_perfmon.GetFrame();
|
||||
|
||||
string s;
|
||||
|
||||
if(s_save)
|
||||
{
|
||||
s = format("c:\\temp2\\_%05d_f%I64d_rt1_%05x_%d.bmp", s_n, frame, context->FRAME.Block(), context->FRAME.PSM);
|
||||
|
||||
rt->m_texture.Save(s);
|
||||
}
|
||||
|
||||
if(s_savez)
|
||||
{
|
||||
s = format("c:\\temp2\\_%05d_f%I64d_rz1_%05x_%d.bmp", s_n, frame, context->ZBUF.Block(), context->ZBUF.PSM);
|
||||
|
||||
ds->m_texture.Save(s);
|
||||
}
|
||||
|
||||
s_n++;
|
||||
}
|
||||
|
||||
m_tc->InvalidateTextures(context->FRAME, context->ZBUF);
|
||||
|
|
|
@ -30,7 +30,7 @@ GSRendererHW10::GSRendererHW10(BYTE* base, bool mt, void (*irq)(), const GSRende
|
|||
InitVertexKick<GSRendererHW10>();
|
||||
}
|
||||
|
||||
bool GSRendererHW10::Create(LPCTSTR title)
|
||||
bool GSRendererHW10::Create(const string& title)
|
||||
{
|
||||
if(!__super::Create(title))
|
||||
return false;
|
||||
|
|
|
@ -50,7 +50,7 @@ protected:
|
|||
public:
|
||||
GSRendererHW10(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs);
|
||||
|
||||
bool Create(LPCTSTR title);
|
||||
bool Create(const string& title);
|
||||
|
||||
template<DWORD prim, DWORD tme, DWORD fst> void VertexKick(bool skip);
|
||||
};
|
|
@ -33,7 +33,7 @@ GSRendererHW9::GSRendererHW9(BYTE* base, bool mt, void (*irq)(), const GSRendere
|
|||
InitVertexKick<GSRendererHW9>();
|
||||
}
|
||||
|
||||
bool GSRendererHW9::Create(LPCTSTR title)
|
||||
bool GSRendererHW9::Create(const string& title)
|
||||
{
|
||||
if(!__super::Create(title))
|
||||
return false;
|
||||
|
|
|
@ -59,7 +59,7 @@ protected:
|
|||
public:
|
||||
GSRendererHW9(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs);
|
||||
|
||||
bool Create(LPCTSTR title);
|
||||
bool Create(const string& title);
|
||||
|
||||
template<DWORD prim, DWORD tme, DWORD fst> void VertexKick(bool skip);
|
||||
};
|
||||
|
|
|
@ -109,9 +109,12 @@ protected:
|
|||
|
||||
if(s_dump)
|
||||
{
|
||||
CString str;
|
||||
str.Format(_T("c:\\temp1\\_%05d_f%I64d_fr%d_%05x_%d.bmp"), s_n++, m_perfmon.GetFrame(), i, (int)TEX0.TBP0, (int)TEX0.PSM);
|
||||
if(s_save) t.Save(str);
|
||||
if(s_save)
|
||||
{
|
||||
t.Save(format("c:\\temp1\\_%05d_f%I64d_fr%d_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), i, (int)TEX0.TBP0, (int)TEX0.PSM));
|
||||
}
|
||||
|
||||
s_n++;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -550,13 +553,34 @@ protected:
|
|||
|
||||
if(s_dump)
|
||||
{
|
||||
CString str;
|
||||
str.Format(_T("c:\\temp1\\_%05d_f%I64d_tex_%05x_%d.bmp"), s_n++, m_perfmon.GetFrame(), (int)m_context->TEX0.TBP0, (int)m_context->TEX0.PSM);
|
||||
if(PRIM->TME) if(s_save) {m_mem.SaveBMP(str, m_context->TEX0.TBP0, m_context->TEX0.TBW, m_context->TEX0.PSM, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH);}
|
||||
str.Format(_T("c:\\temp1\\_%05d_f%I64d_rt0_%05x_%d.bmp"), s_n++, m_perfmon.GetFrame(), m_context->FRAME.Block(), m_context->FRAME.PSM);
|
||||
if(s_save) {m_mem.SaveBMP(str, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameSize().cx, 512);}//GetFrameSize(1).cy);
|
||||
str.Format(_T("c:\\temp1\\_%05d_f%I64d_rz0_%05x_%d.bmp"), s_n-1, m_perfmon.GetFrame(), m_context->ZBUF.Block(), m_context->ZBUF.PSM);
|
||||
if(s_savez) {m_mem.SaveBMP(str, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameSize().cx, 512);}
|
||||
UINT64 frame = m_perfmon.GetFrame();
|
||||
|
||||
string s;
|
||||
|
||||
if(s_save && PRIM->TME)
|
||||
{
|
||||
s = format("c:\\temp1\\_%05d_f%I64d_tex_%05x_%d.bmp", s_n, frame, (int)m_context->TEX0.TBP0, (int)m_context->TEX0.PSM);
|
||||
|
||||
m_mem.SaveBMP(s, m_context->TEX0.TBP0, m_context->TEX0.TBW, m_context->TEX0.PSM, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH);
|
||||
}
|
||||
|
||||
s_n++;
|
||||
|
||||
if(s_save)
|
||||
{
|
||||
s = format("c:\\temp1\\_%05d_f%I64d_rt0_%05x_%d.bmp", s_n, frame, m_context->FRAME.Block(), m_context->FRAME.PSM);
|
||||
|
||||
m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameSize().cx, 512);//GetFrameSize(1).cy);
|
||||
}
|
||||
|
||||
if(s_savez)
|
||||
{
|
||||
s = format("c:\\temp1\\_%05d_f%I64d_rz0_%05x_%d.bmp", s_n, frame, m_context->ZBUF.Block(), m_context->ZBUF.PSM);
|
||||
|
||||
m_mem.SaveBMP(s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameSize().cx, 512);
|
||||
}
|
||||
|
||||
s_n++;
|
||||
}
|
||||
|
||||
GSRasterizerData data;
|
||||
|
@ -611,11 +635,25 @@ protected:
|
|||
|
||||
if(s_dump)
|
||||
{
|
||||
CString str;
|
||||
str.Format(_T("c:\\temp1\\_%05d_f%I64d_rt1_%05x_%d.bmp"), s_n++, m_perfmon.GetFrame(), m_context->FRAME.Block(), m_context->FRAME.PSM);
|
||||
if(s_save) {m_mem.SaveBMP(str, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameSize().cx, 512);}//GetFrameSize(1).cy);
|
||||
str.Format(_T("c:\\temp1\\_%05d_f%I64d_rz1_%05x_%d.bmp"), s_n-1, m_perfmon.GetFrame(), m_context->ZBUF.Block(), m_context->ZBUF.PSM);
|
||||
if(s_savez) {m_mem.SaveBMP(str, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameSize().cx, 512);}
|
||||
UINT64 frame = m_perfmon.GetFrame();
|
||||
|
||||
string s;
|
||||
|
||||
if(s_save)
|
||||
{
|
||||
s = format("c:\\temp1\\_%05d_f%I64d_rt1_%05x_%d.bmp", s_n, frame, m_context->FRAME.Block(), m_context->FRAME.PSM);
|
||||
|
||||
m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameSize().cx, 512);//GetFrameSize(1).cy);
|
||||
}
|
||||
|
||||
if(s_savez)
|
||||
{
|
||||
s = format("c:\\temp1\\_%05d_f%I64d_rz1_%05x_%d.bmp", s_n, frame, m_context->ZBUF.Block(), m_context->ZBUF.PSM);
|
||||
|
||||
m_mem.SaveBMP(s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameSize().cx, 512);
|
||||
}
|
||||
|
||||
s_n++;
|
||||
}
|
||||
|
||||
if(0)//stats.ticks > 5000000)
|
||||
|
|
|
@ -147,17 +147,17 @@ BOOL GSSettingsDlg::OnInitDialog()
|
|||
memset(&caps, 0, sizeof(caps));
|
||||
caps.PixelShaderVersion = D3DPS_VERSION(0, 0);
|
||||
|
||||
m_modes.RemoveAll();
|
||||
m_modes.clear();
|
||||
|
||||
// windowed
|
||||
|
||||
{
|
||||
D3DDISPLAYMODE mode;
|
||||
memset(&mode, 0, sizeof(mode));
|
||||
m_modes.AddTail(mode);
|
||||
m_modes.push_back(mode);
|
||||
|
||||
int iItem = m_resolution.AddString(_T("Windowed"));
|
||||
m_resolution.SetItemDataPtr(iItem, m_modes.GetTailPosition());
|
||||
m_resolution.SetItemDataPtr(iItem, &m_modes.back());
|
||||
m_resolution.SetCurSel(iItem);
|
||||
}
|
||||
|
||||
|
@ -177,12 +177,11 @@ BOOL GSSettingsDlg::OnInitDialog()
|
|||
|
||||
if(S_OK == d3d->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, i, &mode))
|
||||
{
|
||||
CString str;
|
||||
str.Format(_T("%dx%d %dHz"), mode.Width, mode.Height, mode.RefreshRate);
|
||||
int iItem = m_resolution.AddString(str);
|
||||
string str = format("%dx%d %dHz", mode.Width, mode.Height, mode.RefreshRate);
|
||||
int iItem = m_resolution.AddString(str.c_str());
|
||||
|
||||
m_modes.AddTail(mode);
|
||||
m_resolution.SetItemDataPtr(iItem, m_modes.GetTailPosition());
|
||||
m_modes.push_back(mode);
|
||||
m_resolution.SetItemDataPtr(iItem, &m_modes.back());
|
||||
|
||||
if(ModeWidth == mode.Width && ModeHeight == mode.Height && ModeRefreshRate == mode.RefreshRate)
|
||||
{
|
||||
|
@ -196,16 +195,16 @@ BOOL GSSettingsDlg::OnInitDialog()
|
|||
|
||||
bool isdx10avail = GSUtil::IsDirect3D10Available();
|
||||
|
||||
CAtlArray<GSSetting> renderers;
|
||||
vector<GSSetting> renderers;
|
||||
|
||||
for(size_t i = 0; i < countof(g_renderers); i++)
|
||||
{
|
||||
if(i >= 3 && i <= 5 && !isdx10avail) continue;
|
||||
|
||||
renderers.Add(g_renderers[i]);
|
||||
renderers.push_back(g_renderers[i]);
|
||||
}
|
||||
|
||||
GSSetting::InitComboBox(renderers.GetData(), renderers.GetCount(), m_renderer, pApp->GetProfileInt(_T("Settings"), _T("Renderer"), 0));
|
||||
GSSetting::InitComboBox(&renderers[0], renderers.size(), m_renderer, pApp->GetProfileInt(_T("Settings"), _T("Renderer"), 0));
|
||||
GSSetting::InitComboBox(g_psversion, countof(g_psversion), m_psversion, pApp->GetProfileInt(_T("Settings"), _T("PixelShaderVersion2"), D3DPS_VERSION(2, 0)), caps.PixelShaderVersion);
|
||||
GSSetting::InitComboBox(g_interlace, countof(g_interlace), m_interlace, pApp->GetProfileInt(_T("Settings"), _T("Interlace"), 0));
|
||||
GSSetting::InitComboBox(g_aspectratio, countof(g_aspectratio), m_aspectratio, pApp->GetProfileInt(_T("Settings"), _T("AspectRatio"), 1));
|
||||
|
@ -251,7 +250,8 @@ void GSSettingsDlg::OnOK()
|
|||
|
||||
if(m_resolution.GetCurSel() >= 0)
|
||||
{
|
||||
D3DDISPLAYMODE& mode = m_modes.GetAt((POSITION)m_resolution.GetItemData(m_resolution.GetCurSel()));
|
||||
D3DDISPLAYMODE& mode = *(D3DDISPLAYMODE*)m_resolution.GetItemData(m_resolution.GetCurSel());
|
||||
|
||||
pApp->WriteProfileInt(_T("Settings"), _T("ModeWidth"), mode.Width);
|
||||
pApp->WriteProfileInt(_T("Settings"), _T("ModeHeight"), mode.Height);
|
||||
pApp->WriteProfileInt(_T("Settings"), _T("ModeRefreshRate"), mode.RefreshRate);
|
||||
|
|
|
@ -29,7 +29,7 @@ class GSSettingsDlg : public CDialog
|
|||
DECLARE_DYNAMIC(GSSettingsDlg)
|
||||
|
||||
private:
|
||||
CAtlList<D3DDISPLAYMODE> m_modes;
|
||||
list<D3DDISPLAYMODE> m_modes;
|
||||
|
||||
public:
|
||||
GSSettingsDlg(CWnd* pParent = NULL); // standard constructor
|
||||
|
|
|
@ -1000,11 +1000,11 @@ void GSState::FlushWrite()
|
|||
InvalidateVideoMem(m_env.BITBLTBUF, r);
|
||||
/*
|
||||
static int n = 0;
|
||||
CString str;
|
||||
str.Format(_T("c:\\temp1\\[%04d]_%05x_%d_%d_%d_%d_%d_%d.bmp"),
|
||||
string s;
|
||||
s = format("c:\\temp1\\[%04d]_%05x_%d_%d_%d_%d_%d_%d.bmp",
|
||||
n++, (int)m_env.BITBLTBUF.DBP, (int)m_env.BITBLTBUF.DBW, (int)m_env.BITBLTBUF.DPSM,
|
||||
r.left, r.top, r.right, r.bottom);
|
||||
m_mem.SaveBMP(str, m_env.BITBLTBUF.DBP, m_env.BITBLTBUF.DBW, m_env.BITBLTBUF.DPSM, r.right, r.bottom);
|
||||
m_mem.SaveBMP(s, m_env.BITBLTBUF.DBP, m_env.BITBLTBUF.DBW, m_env.BITBLTBUF.DPSM, r.right, r.bottom);
|
||||
*/
|
||||
}
|
||||
|
||||
|
@ -1275,6 +1275,7 @@ template<int index> void GSState::Transfer(BYTE* mem, UINT32 size)
|
|||
break;
|
||||
|
||||
case GIF_FLG_IMAGE:
|
||||
|
||||
{
|
||||
int len = (int)min(size, path.nloop);
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ public:
|
|||
virtual bool Update(const CRect& r, const void* data, int pitch) = 0;
|
||||
virtual bool Map(BYTE** bits, int& pitch, const RECT* r = NULL) = 0;
|
||||
virtual void Unmap() = 0;
|
||||
virtual bool Save(CString fn, bool dds = false) = 0;
|
||||
virtual bool Save(const string& fn, bool dds = false) = 0;
|
||||
|
||||
CSize GetSize() {return CSize(GetWidth(), GetHeight());}
|
||||
};
|
||||
|
|
|
@ -109,7 +109,7 @@ void GSTexture10::Unmap()
|
|||
}
|
||||
}
|
||||
|
||||
bool GSTexture10::Save(CString fn, bool dds)
|
||||
bool GSTexture10::Save(const string& fn, bool dds)
|
||||
{
|
||||
CComPtr<ID3D10Resource> res;
|
||||
|
||||
|
@ -164,7 +164,7 @@ bool GSTexture10::Save(CString fn, bool dds)
|
|||
res = m_texture;
|
||||
}
|
||||
|
||||
return SUCCEEDED(D3DX10SaveTextureToFile(res, dds ? D3DX10_IFF_DDS : D3DX10_IFF_BMP, fn));
|
||||
return SUCCEEDED(D3DX10SaveTextureToFile(res, dds ? D3DX10_IFF_DDS : D3DX10_IFF_BMP, fn.c_str()));
|
||||
}
|
||||
|
||||
ID3D10Texture2D* GSTexture10::operator->()
|
||||
|
|
|
@ -46,7 +46,7 @@ public:
|
|||
bool Update(const CRect& r, const void* data, int pitch);
|
||||
bool Map(BYTE** bits, int& pitch, const RECT* r = NULL);
|
||||
void Unmap();
|
||||
bool Save(CString fn, bool dds = false);
|
||||
bool Save(const string& fn, bool dds = false);
|
||||
|
||||
ID3D10Texture2D* operator->(); // TODO: remove direct access
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ void GSTexture7::Unmap()
|
|||
}
|
||||
}
|
||||
|
||||
bool GSTexture7::Save(CString fn, bool dds)
|
||||
bool GSTexture7::Save(const string& fn, bool dds)
|
||||
{
|
||||
// TODO
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ public:
|
|||
bool Update(const CRect& r, const void* data, int pitch);
|
||||
bool Map(BYTE** bits, int& pitch, const RECT* r = NULL);
|
||||
void Unmap();
|
||||
bool Save(CString fn, bool dds = false);
|
||||
bool Save(const string& fn, bool dds = false);
|
||||
|
||||
IDirectDrawSurface7* operator->(); // TODO: remove direct access
|
||||
|
||||
|
|
|
@ -138,7 +138,7 @@ void GSTexture9::Unmap()
|
|||
}
|
||||
}
|
||||
|
||||
bool GSTexture9::Save(CString fn, bool dds)
|
||||
bool GSTexture9::Save(const string& fn, bool dds)
|
||||
{
|
||||
CComPtr<IDirect3DSurface9> surface;
|
||||
|
||||
|
@ -181,12 +181,12 @@ bool GSTexture9::Save(CString fn, bool dds)
|
|||
|
||||
if(surface != NULL)
|
||||
{
|
||||
return SUCCEEDED(D3DXSaveSurfaceToFile(fn, dds ? D3DXIFF_DDS : D3DXIFF_BMP, surface, NULL, NULL));
|
||||
return SUCCEEDED(D3DXSaveSurfaceToFile(fn.c_str(), dds ? D3DXIFF_DDS : D3DXIFF_BMP, surface, NULL, NULL));
|
||||
}
|
||||
/*
|
||||
if(CComQIPtr<IDirect3DTexture9> texture = surface)
|
||||
{
|
||||
return SUCCEEDED(D3DXSaveTextureToFile(fn, dds ? D3DXIFF_DDS : D3DXIFF_BMP, texture, NULL));
|
||||
return SUCCEEDED(D3DXSaveTextureToFile(fn.c_str(), dds ? D3DXIFF_DDS : D3DXIFF_BMP, texture, NULL));
|
||||
}
|
||||
*/
|
||||
return false;
|
||||
|
|
|
@ -45,7 +45,7 @@ public:
|
|||
bool Update(const CRect& r, const void* data, int pitch);
|
||||
bool Map(BYTE** bits, int& pitch, const RECT* r = NULL);
|
||||
void Unmap();
|
||||
bool Save(CString fn, bool dds = false);
|
||||
bool Save(const string& fn, bool dds = false);
|
||||
|
||||
IDirect3DTexture9* operator->(); // TODO: remove direct access
|
||||
|
||||
|
|
|
@ -114,11 +114,9 @@ public:
|
|||
|
||||
CRect r(0, 0, w, h);
|
||||
|
||||
POSITION pos = m_dirty.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<GSDirtyRect>::iterator i = m_dirty.begin(); i != m_dirty.end(); i++)
|
||||
{
|
||||
const CRect& dirty = m_dirty.GetNext(pos).GetDirtyRect(m_TEX0) & r;
|
||||
const CRect& dirty = i->GetDirtyRect(m_TEX0) & r;
|
||||
|
||||
if(!(m_valid & dirty).IsRectEmpty())
|
||||
{
|
||||
|
@ -145,7 +143,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
m_dirty.RemoveAll();
|
||||
m_dirty.clear();
|
||||
|
||||
m_renderer->MinMaxUV(w, h, r);
|
||||
|
||||
|
@ -214,23 +212,21 @@ public:
|
|||
|
||||
protected:
|
||||
GSRenderer<Device>* m_renderer;
|
||||
CAtlList<GSRenderTarget*> m_rt;
|
||||
CAtlList<GSDepthStencil*> m_ds;
|
||||
CAtlList<GSTexture*> m_tex;
|
||||
list<GSRenderTarget*> m_rt;
|
||||
list<GSDepthStencil*> m_ds;
|
||||
list<GSTexture*> m_tex;
|
||||
|
||||
template<class T> void RecycleByAge(CAtlList<T*>& l, int maxage = 60)
|
||||
template<class T> void RecycleByAge(list<T*>& l, int maxage = 60)
|
||||
{
|
||||
POSITION pos = l.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<T*>::iterator i = l.begin(); i != l.end(); )
|
||||
{
|
||||
POSITION cur = pos;
|
||||
list<T*>::iterator j = i++;
|
||||
|
||||
T* t = l.GetNext(pos);
|
||||
T* t = *j;
|
||||
|
||||
if(++t->m_age > maxage)
|
||||
{
|
||||
l.RemoveAt(cur);
|
||||
l.erase(j);
|
||||
|
||||
delete t;
|
||||
}
|
||||
|
@ -254,9 +250,26 @@ public:
|
|||
|
||||
void RemoveAll()
|
||||
{
|
||||
while(m_rt.GetCount()) delete m_rt.RemoveHead();
|
||||
while(m_ds.GetCount()) delete m_ds.RemoveHead();
|
||||
while(m_tex.GetCount()) delete m_tex.RemoveHead();
|
||||
for(list<GSRenderTarget*>::iterator i = m_rt.begin(); i != m_rt.end(); i++)
|
||||
{
|
||||
delete *i;
|
||||
}
|
||||
|
||||
m_rt.clear();
|
||||
|
||||
for(list<GSDepthStencil*>::iterator i = m_ds.begin(); i != m_ds.end(); i++)
|
||||
{
|
||||
delete *i;
|
||||
}
|
||||
|
||||
m_ds.clear();
|
||||
|
||||
for(list<GSTexture*>::iterator i = m_tex.begin(); i != m_tex.end(); i++)
|
||||
{
|
||||
delete *i;
|
||||
}
|
||||
|
||||
m_tex.clear();
|
||||
}
|
||||
|
||||
GSRenderTarget* GetRenderTarget(const GIFRegTEX0& TEX0, int w, int h, bool fb = false)
|
||||
|
@ -265,13 +278,13 @@ public:
|
|||
|
||||
if(rt == NULL)
|
||||
{
|
||||
for(POSITION pos = m_rt.GetHeadPosition(); pos; m_rt.GetNext(pos))
|
||||
for(list<GSRenderTarget*>::iterator i = m_rt.begin(); i != m_rt.end(); i++)
|
||||
{
|
||||
GSRenderTarget* rt2 = m_rt.GetAt(pos);
|
||||
GSRenderTarget* rt2 = *i;
|
||||
|
||||
if(rt2->m_TEX0.TBP0 == TEX0.TBP0)
|
||||
{
|
||||
m_rt.MoveToHead(pos);
|
||||
m_rt.splice(m_rt.begin(), m_rt, i);
|
||||
|
||||
rt = rt2;
|
||||
|
||||
|
@ -288,9 +301,9 @@ public:
|
|||
{
|
||||
// HACK: try to find something close to the base pointer
|
||||
|
||||
for(POSITION pos = m_rt.GetHeadPosition(); pos; m_rt.GetNext(pos))
|
||||
for(list<GSRenderTarget*>::iterator i = m_rt.begin(); i != m_rt.end(); i++)
|
||||
{
|
||||
GSRenderTarget* rt2 = m_rt.GetAt(pos);
|
||||
GSRenderTarget* rt2 = *i;
|
||||
|
||||
if(rt2->m_TEX0.TBP0 <= TEX0.TBP0 && TEX0.TBP0 < rt2->m_TEX0.TBP0 + 0x700 && (!rt || rt2->m_TEX0.TBP0 >= rt->m_TEX0.TBP0))
|
||||
{
|
||||
|
@ -317,7 +330,7 @@ public:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
m_rt.AddHead(rt);
|
||||
m_rt.push_front(rt);
|
||||
}
|
||||
|
||||
if(m_renderer->CanUpscale())
|
||||
|
@ -351,13 +364,13 @@ public:
|
|||
|
||||
if(ds == NULL)
|
||||
{
|
||||
for(POSITION pos = m_ds.GetHeadPosition(); pos; m_ds.GetNext(pos))
|
||||
for(list<GSDepthStencil*>::iterator i = m_ds.begin(); i != m_ds.end(); i++)
|
||||
{
|
||||
GSDepthStencil* ds2 = m_ds.GetAt(pos);
|
||||
GSDepthStencil* ds2 = *i;
|
||||
|
||||
if(ds2->m_TEX0.TBP0 == TEX0.TBP0)
|
||||
{
|
||||
m_ds.MoveToHead(pos);
|
||||
m_ds.splice(m_ds.begin(), m_ds, i);
|
||||
|
||||
ds = ds2;
|
||||
|
||||
|
@ -383,7 +396,7 @@ public:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
m_ds.AddHead(ds);
|
||||
m_ds.push_front(ds);
|
||||
}
|
||||
|
||||
if(m_renderer->m_context->DepthWrite())
|
||||
|
@ -459,9 +472,9 @@ public:
|
|||
|
||||
GSTexture* t = NULL;
|
||||
|
||||
for(POSITION pos = m_tex.GetHeadPosition(); pos; m_tex.GetNext(pos))
|
||||
for(list<GSTexture*>::iterator i = m_tex.begin(); i != m_tex.end(); i++)
|
||||
{
|
||||
t = m_tex.GetAt(pos);
|
||||
t = *i;
|
||||
|
||||
if(GSUtil::HasSharedBits(t->m_TEX0.TBP0, t->m_TEX0.PSM, TEX0.TBP0, TEX0.PSM))
|
||||
{
|
||||
|
@ -470,7 +483,7 @@ public:
|
|||
&& (m_renderer->m_psrr || (CLAMP.WMS != 3 && t->m_CLAMP.WMS != 3 && CLAMP.WMT != 3 && t->m_CLAMP.WMT != 3 || CLAMP.i64 == t->m_CLAMP.i64))
|
||||
&& (pal == 0 || TEX0.CPSM == t->m_TEX0.CPSM && GSVector4i::compare(t->m_clut, clut, pal * sizeof(clut[0]))))
|
||||
{
|
||||
m_tex.MoveToHead(pos);
|
||||
m_tex.splice(m_tex.begin(), m_tex, i);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -481,11 +494,11 @@ public:
|
|||
|
||||
if(t == NULL)
|
||||
{
|
||||
for(POSITION pos = m_rt.GetHeadPosition(); pos; m_rt.GetNext(pos))
|
||||
for(list<GSRenderTarget*>::iterator i = m_rt.begin(); i != m_rt.end(); i++)
|
||||
{
|
||||
GSRenderTarget* rt = m_rt.GetAt(pos);
|
||||
GSRenderTarget* rt = *i;
|
||||
|
||||
if(rt->m_dirty.IsEmpty() && GSUtil::HasSharedBits(rt->m_TEX0.TBP0, rt->m_TEX0.PSM, TEX0.TBP0, TEX0.PSM))
|
||||
if(rt->m_dirty.empty() && GSUtil::HasSharedBits(rt->m_TEX0.TBP0, rt->m_TEX0.PSM, TEX0.TBP0, TEX0.PSM))
|
||||
{
|
||||
t = CreateTexture();
|
||||
|
||||
|
@ -496,7 +509,7 @@ public:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
m_tex.AddHead(t);
|
||||
m_tex.push_front(t);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -505,11 +518,11 @@ public:
|
|||
|
||||
if(t == NULL)
|
||||
{
|
||||
for(POSITION pos = m_ds.GetHeadPosition(); pos; m_ds.GetNext(pos))
|
||||
for(list<GSDepthStencil*>::iterator i = m_ds.begin(); i != m_ds.end(); i++)
|
||||
{
|
||||
GSDepthStencil* ds = m_ds.GetAt(pos);
|
||||
GSDepthStencil* ds = *i;
|
||||
|
||||
if(ds->m_dirty.IsEmpty() && ds->m_used && GSUtil::HasSharedBits(ds->m_TEX0.TBP0, ds->m_TEX0.PSM, TEX0.TBP0, TEX0.PSM))
|
||||
if(ds->m_dirty.empty() && ds->m_used && GSUtil::HasSharedBits(ds->m_TEX0.TBP0, ds->m_TEX0.PSM, TEX0.TBP0, TEX0.PSM))
|
||||
{
|
||||
t = CreateTexture();
|
||||
|
||||
|
@ -520,7 +533,7 @@ public:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
m_tex.AddHead(t);
|
||||
m_tex.push_front(t);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -538,7 +551,7 @@ public:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
m_tex.AddHead(t);
|
||||
m_tex.push_front(t);
|
||||
}
|
||||
|
||||
if(pal > 0)
|
||||
|
@ -574,18 +587,16 @@ public:
|
|||
|
||||
void InvalidateTextures(const GIFRegFRAME& FRAME, const GIFRegZBUF& ZBUF)
|
||||
{
|
||||
POSITION pos = m_tex.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<GSTexture*>::iterator i = m_tex.begin(); i != m_tex.end(); )
|
||||
{
|
||||
POSITION cur = pos;
|
||||
list<GSTexture*>::iterator j = i++;
|
||||
|
||||
GSTexture* t = m_tex.GetNext(pos);
|
||||
GSTexture* t = *j;
|
||||
|
||||
if(GSUtil::HasSharedBits(FRAME.Block(), FRAME.PSM, t->m_TEX0.TBP0, t->m_TEX0.PSM)
|
||||
|| GSUtil::HasSharedBits(ZBUF.Block(), ZBUF.PSM, t->m_TEX0.TBP0, t->m_TEX0.PSM))
|
||||
{
|
||||
m_tex.RemoveAt(cur);
|
||||
m_tex.erase(j);
|
||||
|
||||
delete t;
|
||||
}
|
||||
|
@ -596,26 +607,23 @@ public:
|
|||
{
|
||||
bool found = false;
|
||||
|
||||
POSITION pos = m_tex.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<GSTexture*>::iterator i = m_tex.begin(); i != m_tex.end(); )
|
||||
{
|
||||
POSITION cur = pos;
|
||||
list<GSTexture*>::iterator j = i++;
|
||||
|
||||
GSTexture* t = m_tex.GetNext(pos);
|
||||
GSTexture* t = *j;
|
||||
|
||||
if(GSUtil::HasSharedBits(BITBLTBUF.DBP, BITBLTBUF.DPSM, t->m_TEX0.TBP0, t->m_TEX0.PSM))
|
||||
{
|
||||
if(BITBLTBUF.DBW == t->m_TEX0.TBW && !t->m_rendered)
|
||||
{
|
||||
t->m_dirty.AddTail(GSDirtyRect(BITBLTBUF.DPSM, r));
|
||||
t->m_dirty.push_back(GSDirtyRect(BITBLTBUF.DPSM, r));
|
||||
|
||||
found = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_tex.RemoveAt(cur);
|
||||
|
||||
m_tex.erase(j);
|
||||
delete t;
|
||||
}
|
||||
}
|
||||
|
@ -637,31 +645,29 @@ public:
|
|||
|
||||
if(r2.bottom > 0 && r2.top < h && r2.right > 0 && r2.left < w)
|
||||
{
|
||||
t->m_dirty.AddTail(GSDirtyRect(BITBLTBUF.DPSM, r2));
|
||||
t->m_dirty.push_back(GSDirtyRect(BITBLTBUF.DPSM, r2));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pos = m_rt.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<GSRenderTarget*>::iterator i = m_rt.begin(); i != m_rt.end(); )
|
||||
{
|
||||
POSITION cur = pos;
|
||||
list<GSRenderTarget*>::iterator j = i++;
|
||||
|
||||
GSRenderTarget* rt = m_rt.GetNext(pos);
|
||||
GSRenderTarget* rt = *j;
|
||||
|
||||
if(GSUtil::HasSharedBits(BITBLTBUF.DBP, BITBLTBUF.DPSM, rt->m_TEX0.TBP0, rt->m_TEX0.PSM))
|
||||
{
|
||||
if(!found && GSUtil::HasCompatibleBits(BITBLTBUF.DPSM, rt->m_TEX0.PSM))
|
||||
{
|
||||
rt->m_dirty.AddTail(GSDirtyRect(BITBLTBUF.DPSM, r));
|
||||
rt->m_dirty.push_back(GSDirtyRect(BITBLTBUF.DPSM, r));
|
||||
rt->m_TEX0.TBW = BITBLTBUF.DBW;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_rt.RemoveAt(cur);
|
||||
m_rt.erase(j);
|
||||
delete rt;
|
||||
continue;
|
||||
}
|
||||
|
@ -679,7 +685,7 @@ public:
|
|||
if(r.bottom > y)
|
||||
{
|
||||
// TODO: do not add this rect above too
|
||||
rt->m_dirty.AddTail(GSDirtyRect(BITBLTBUF.DPSM, CRect(r.left, r.top - y, r.right, r.bottom - y)));
|
||||
rt->m_dirty.push_back(GSDirtyRect(BITBLTBUF.DPSM, CRect(r.left, r.top - y, r.right, r.bottom - y)));
|
||||
rt->m_TEX0.TBW = BITBLTBUF.DBW;
|
||||
continue;
|
||||
}
|
||||
|
@ -689,24 +695,22 @@ public:
|
|||
|
||||
// copypaste for ds
|
||||
|
||||
pos = m_ds.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<GSDepthStencil*>::iterator i = m_ds.begin(); i != m_ds.end(); )
|
||||
{
|
||||
POSITION cur = pos;
|
||||
list<GSDepthStencil*>::iterator j = i++;
|
||||
|
||||
GSDepthStencil* ds = m_ds.GetNext(pos);
|
||||
GSDepthStencil* ds = *j;
|
||||
|
||||
if(GSUtil::HasSharedBits(BITBLTBUF.DBP, BITBLTBUF.DPSM, ds->m_TEX0.TBP0, ds->m_TEX0.PSM))
|
||||
{
|
||||
if(!found && GSUtil::HasCompatibleBits(BITBLTBUF.DPSM, ds->m_TEX0.PSM))
|
||||
{
|
||||
ds->m_dirty.AddTail(GSDirtyRect(BITBLTBUF.DPSM, r));
|
||||
ds->m_dirty.push_back(GSDirtyRect(BITBLTBUF.DPSM, r));
|
||||
ds->m_TEX0.TBW = BITBLTBUF.DBW;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ds.RemoveAt(cur);
|
||||
m_ds.erase(j);
|
||||
delete ds;
|
||||
continue;
|
||||
}
|
||||
|
@ -724,7 +728,7 @@ public:
|
|||
if(r.bottom > y)
|
||||
{
|
||||
// TODO: do not add this rect above too
|
||||
ds->m_dirty.AddTail(GSDirtyRect(BITBLTBUF.DPSM, CRect(r.left, r.top - y, r.right, r.bottom - y)));
|
||||
ds->m_dirty.push_back(GSDirtyRect(BITBLTBUF.DPSM, CRect(r.left, r.top - y, r.right, r.bottom - y)));
|
||||
ds->m_TEX0.TBW = BITBLTBUF.DBW;
|
||||
continue;
|
||||
}
|
||||
|
@ -736,13 +740,11 @@ public:
|
|||
|
||||
void InvalidateLocalMem(const GIFRegBITBLTBUF& BITBLTBUF, const CRect& r)
|
||||
{
|
||||
POSITION pos = m_rt.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<GSRenderTarget*>::iterator i = m_rt.begin(); i != m_rt.end(); )
|
||||
{
|
||||
POSITION cur = pos;
|
||||
list<GSRenderTarget*>::iterator j = i++;
|
||||
|
||||
GSRenderTarget* rt = m_rt.GetNext(pos);
|
||||
GSRenderTarget* rt = *j;
|
||||
|
||||
if(GSUtil::HasSharedBits(BITBLTBUF.SBP, BITBLTBUF.SPSM, rt->m_TEX0.TBP0, rt->m_TEX0.PSM))
|
||||
{
|
||||
|
@ -760,7 +762,7 @@ public:
|
|||
}
|
||||
else
|
||||
{
|
||||
m_rt.RemoveAt(cur);
|
||||
m_rt.erase(j);
|
||||
delete rt;
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ void GSTextureCache10::GSRenderTargetHW10::Update()
|
|||
|
||||
CRect r = m_dirty.GetDirtyRect(m_TEX0, m_texture.GetSize());
|
||||
|
||||
m_dirty.RemoveAll();
|
||||
m_dirty.clear();
|
||||
|
||||
if(r.IsRectEmpty()) return;
|
||||
|
||||
|
@ -93,7 +93,7 @@ void GSTextureCache10::GSRenderTargetHW10::Read(CRect r)
|
|||
return;
|
||||
}
|
||||
|
||||
if(!m_dirty.IsEmpty())
|
||||
if(!m_dirty.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ void GSTextureCache9::GSRenderTarget9::Update()
|
|||
|
||||
CRect r = m_dirty.GetDirtyRect(m_TEX0, m_texture.GetSize());
|
||||
|
||||
m_dirty.RemoveAll();
|
||||
m_dirty.clear();
|
||||
|
||||
if(r.IsRectEmpty()) return;
|
||||
|
||||
|
@ -96,7 +96,7 @@ void GSTextureCache9::GSRenderTarget9::Read(CRect r)
|
|||
return;
|
||||
}
|
||||
|
||||
if(!m_dirty.IsEmpty())
|
||||
if(!m_dirty.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -38,16 +38,14 @@ const GSTextureCacheSW::GSTexture* GSTextureCacheSW::Lookup(const GIFRegTEX0& TE
|
|||
|
||||
const GSLocalMemory::psm_t& psm = GSLocalMemory::m_psm[TEX0.PSM];
|
||||
|
||||
const CAtlMap<GSTexture*, bool>& map = m_map[TEX0.TBP0 >> 5];
|
||||
const hash_map<GSTexture*, bool>& map = m_map[TEX0.TBP0 >> 5];
|
||||
|
||||
GSTexture* t = NULL;
|
||||
|
||||
POSITION pos = map.GetStartPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<GSTexture*, bool>::const_iterator i = map.begin(); i != map.end(); i++)
|
||||
{
|
||||
GSTexture* t2 = map.GetNextKey(pos);
|
||||
|
||||
GSTexture* t2 = (*i).first;
|
||||
|
||||
// if(t2->m_TEX0.TBP0 != TEX0.TBP0 || t2->m_TEX0.TBW != TEX0.TBW || t2->m_TEX0.PSM != TEX0.PSM || t2->m_TEX0.TW != TEX0.TW || t2->m_TEX0.TH != TEX0.TH)
|
||||
if(((t2->m_TEX0.ai32[0] ^ TEX0.ai32[0]) | ((t2->m_TEX0.ai32[1] ^ TEX0.ai32[1]) & 3)) != 0)
|
||||
{
|
||||
|
@ -70,7 +68,7 @@ const GSTextureCacheSW::GSTexture* GSTextureCacheSW::Lookup(const GIFRegTEX0& TE
|
|||
{
|
||||
t = new GSTexture(m_state);
|
||||
|
||||
t->m_pos = m_textures.AddTail(t);
|
||||
m_textures[t] = true;
|
||||
|
||||
int tw = 1 << TEX0.TW;
|
||||
int th = 1 << TEX0.TH;
|
||||
|
@ -93,7 +91,7 @@ const GSTextureCacheSW::GSTexture* GSTextureCacheSW::Lookup(const GIFRegTEX0& TE
|
|||
continue;
|
||||
}
|
||||
|
||||
m_map[page].SetAt(t, true);
|
||||
m_map[page][t] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -102,11 +100,11 @@ const GSTextureCacheSW::GSTexture* GSTextureCacheSW::Lookup(const GIFRegTEX0& TE
|
|||
{
|
||||
printf("!@#$%\n"); // memory allocation may fail if the game is too hungry
|
||||
|
||||
m_textures.RemoveAt(t->m_pos);
|
||||
m_textures.erase(t);
|
||||
|
||||
for(int i = 0; i < MAX_PAGES; i++)
|
||||
{
|
||||
m_map[i].RemoveKey(t);
|
||||
m_map[i].erase(t);
|
||||
}
|
||||
|
||||
delete t;
|
||||
|
@ -119,38 +117,34 @@ const GSTextureCacheSW::GSTexture* GSTextureCacheSW::Lookup(const GIFRegTEX0& TE
|
|||
|
||||
void GSTextureCacheSW::RemoveAll()
|
||||
{
|
||||
POSITION pos = m_textures.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<GSTexture*, bool>::iterator i = m_textures.begin(); i != m_textures.end(); i++)
|
||||
{
|
||||
delete m_textures.GetNext(pos);
|
||||
delete i->first;
|
||||
}
|
||||
|
||||
m_textures.RemoveAll();
|
||||
m_textures.clear();
|
||||
|
||||
for(int i = 0; i < MAX_PAGES; i++)
|
||||
{
|
||||
m_map[i].RemoveAll();
|
||||
m_map[i].clear();
|
||||
}
|
||||
}
|
||||
|
||||
void GSTextureCacheSW::IncAge()
|
||||
{
|
||||
POSITION pos = m_textures.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<GSTexture*, bool>::iterator i = m_textures.begin(); i != m_textures.end(); )
|
||||
{
|
||||
POSITION cur = pos;
|
||||
hash_map<GSTexture*, bool>::iterator j = i++;
|
||||
|
||||
GSTexture* t = m_textures.GetNext(pos);
|
||||
GSTexture* t = j->first;
|
||||
|
||||
if(++t->m_age > 30)
|
||||
{
|
||||
m_textures.RemoveAt(cur);
|
||||
m_textures.erase(j);
|
||||
|
||||
for(int i = 0; i < MAX_PAGES; i++)
|
||||
{
|
||||
m_map[i].RemoveKey(t);
|
||||
m_map[i].erase(t);
|
||||
}
|
||||
|
||||
delete t;
|
||||
|
@ -187,13 +181,11 @@ void GSTextureCacheSW::InvalidateVideoMem(const GIFRegBITBLTBUF& BITBLTBUF, cons
|
|||
continue;
|
||||
}
|
||||
|
||||
const CAtlMap<GSTexture*, bool>& map = m_map[page];
|
||||
const hash_map<GSTexture*, bool>& map = m_map[page];
|
||||
|
||||
POSITION pos = map.GetStartPosition();
|
||||
|
||||
while(pos)
|
||||
for(hash_map<GSTexture*, bool>::const_iterator i = map.begin(); i != map.end(); i++)
|
||||
{
|
||||
GSTexture* t = map.GetNextKey(pos);
|
||||
GSTexture* t = (*i).first;
|
||||
|
||||
t->m_valid[page] = 0;
|
||||
|
||||
|
@ -210,7 +202,6 @@ GSTextureCacheSW::GSTexture::GSTexture(GSState* state)
|
|||
, m_buff(NULL)
|
||||
, m_tw(0)
|
||||
, m_age(0)
|
||||
, m_pos(NULL)
|
||||
, m_complete(false)
|
||||
{
|
||||
memset(m_valid, 0, sizeof(m_valid));
|
||||
|
|
|
@ -39,7 +39,6 @@ public:
|
|||
DWORD m_tw;
|
||||
DWORD m_valid[MAX_PAGES]; // each DWORD bits map to the 32 blocks of that page
|
||||
DWORD m_age;
|
||||
POSITION m_pos;
|
||||
bool m_complete;
|
||||
|
||||
explicit GSTexture(GSState* state);
|
||||
|
@ -50,8 +49,8 @@ public:
|
|||
|
||||
protected:
|
||||
GSState* m_state;
|
||||
CAtlList<GSTexture*> m_textures;
|
||||
CAtlMap<GSTexture*, bool> m_map[MAX_PAGES];
|
||||
hash_map<GSTexture*, bool> m_textures;
|
||||
hash_map<GSTexture*, bool> m_map[MAX_PAGES];
|
||||
|
||||
public:
|
||||
GSTextureCacheSW(GSState* state);
|
||||
|
|
|
@ -163,27 +163,29 @@ bool GSTextureFX10::SetupVS(VSSelector sel, const VSConstantBuffer* cb)
|
|||
{
|
||||
CComPtr<ID3D10VertexShader> vs;
|
||||
|
||||
if(CRBMap<DWORD, CComPtr<ID3D10VertexShader> >::CPair* pair = m_vs.Lookup(sel))
|
||||
hash_map<DWORD, CComPtr<ID3D10VertexShader> >::iterator i = m_vs.find(sel);
|
||||
|
||||
if(i != m_vs.end())
|
||||
{
|
||||
vs = pair->m_value;
|
||||
vs = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
CStringA str[5];
|
||||
string str[5];
|
||||
|
||||
str[0].Format("%d", sel.bpp);
|
||||
str[1].Format("%d", sel.bppz);
|
||||
str[2].Format("%d", sel.tme);
|
||||
str[3].Format("%d", sel.fst);
|
||||
str[4].Format("%d", sel.prim);
|
||||
str[0] = format("%d", sel.bpp);
|
||||
str[1] = format("%d", sel.bppz);
|
||||
str[2] = format("%d", sel.tme);
|
||||
str[3] = format("%d", sel.fst);
|
||||
str[4] = format("%d", sel.prim);
|
||||
|
||||
D3D10_SHADER_MACRO macro[] =
|
||||
{
|
||||
{"VS_BPP", str[0]},
|
||||
{"VS_BPPZ", str[1]},
|
||||
{"VS_TME", str[2]},
|
||||
{"VS_FST", str[3]},
|
||||
{"VS_PRIM", str[4]},
|
||||
{"VS_BPP", str[0].c_str()},
|
||||
{"VS_BPPZ", str[1].c_str()},
|
||||
{"VS_TME", str[2].c_str()},
|
||||
{"VS_FST", str[3].c_str()},
|
||||
{"VS_PRIM", str[4].c_str()},
|
||||
{NULL, NULL},
|
||||
};
|
||||
|
||||
|
@ -206,7 +208,7 @@ bool GSTextureFX10::SetupVS(VSSelector sel, const VSConstantBuffer* cb)
|
|||
m_il = il;
|
||||
}
|
||||
|
||||
m_vs.SetAt(sel, vs);
|
||||
m_vs[sel] = vs;
|
||||
}
|
||||
|
||||
if(m_vs_cb_cache.Update(cb))
|
||||
|
@ -227,27 +229,29 @@ bool GSTextureFX10::SetupGS(GSSelector sel)
|
|||
|
||||
if(sel.prim > 0 && (sel.iip == 0 || sel.prim == 3)) // geometry shader works in every case, but not needed
|
||||
{
|
||||
if(CRBMap<DWORD, CComPtr<ID3D10GeometryShader> >::CPair* pair = m_gs.Lookup(sel))
|
||||
hash_map<DWORD, CComPtr<ID3D10GeometryShader> >::iterator i = m_gs.find(sel);
|
||||
|
||||
if(i != m_gs.end())
|
||||
{
|
||||
gs = pair->m_value;
|
||||
gs = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
CStringA str[2];
|
||||
string str[2];
|
||||
|
||||
str[0].Format("%d", sel.iip);
|
||||
str[1].Format("%d", sel.prim);
|
||||
str[0] = format("%d", sel.iip);
|
||||
str[1] = format("%d", sel.prim);
|
||||
|
||||
D3D10_SHADER_MACRO macro[] =
|
||||
{
|
||||
{"IIP", str[0]},
|
||||
{"PRIM", str[1]},
|
||||
{"IIP", str[0].c_str()},
|
||||
{"PRIM", str[1].c_str()},
|
||||
{NULL, NULL},
|
||||
};
|
||||
|
||||
hr = m_dev->CompileShader(IDR_TFX10_FX, "gs_main", macro, &gs);
|
||||
|
||||
m_gs.SetAt(sel, gs);
|
||||
m_gs[sel] = gs;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -271,49 +275,51 @@ void GSTextureFX10::UpdatePS(PSSelector sel, const PSConstantBuffer* cb, PSSampl
|
|||
|
||||
CComPtr<ID3D10PixelShader> ps;
|
||||
|
||||
if(CRBMap<DWORD, CComPtr<ID3D10PixelShader> >::CPair* pair = m_ps.Lookup(sel))
|
||||
hash_map<DWORD, CComPtr<ID3D10PixelShader> >::iterator i = m_ps.find(sel);
|
||||
|
||||
if(i != m_ps.end())
|
||||
{
|
||||
ps = pair->m_value;
|
||||
ps = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
CStringA str[13];
|
||||
string str[13];
|
||||
|
||||
str[0].Format("%d", sel.fst);
|
||||
str[1].Format("%d", sel.wms);
|
||||
str[2].Format("%d", sel.wmt);
|
||||
str[3].Format("%d", sel.bpp);
|
||||
str[4].Format("%d", sel.aem);
|
||||
str[5].Format("%d", sel.tfx);
|
||||
str[6].Format("%d", sel.tcc);
|
||||
str[7].Format("%d", sel.ate);
|
||||
str[8].Format("%d", sel.atst);
|
||||
str[9].Format("%d", sel.fog);
|
||||
str[10].Format("%d", sel.clr1);
|
||||
str[11].Format("%d", sel.fba);
|
||||
str[12].Format("%d", sel.aout);
|
||||
str[0] = format("%d", sel.fst);
|
||||
str[1] = format("%d", sel.wms);
|
||||
str[2] = format("%d", sel.wmt);
|
||||
str[3] = format("%d", sel.bpp);
|
||||
str[4] = format("%d", sel.aem);
|
||||
str[5] = format("%d", sel.tfx);
|
||||
str[6] = format("%d", sel.tcc);
|
||||
str[7] = format("%d", sel.ate);
|
||||
str[8] = format("%d", sel.atst);
|
||||
str[9] = format("%d", sel.fog);
|
||||
str[10] = format("%d", sel.clr1);
|
||||
str[11] = format("%d", sel.fba);
|
||||
str[12] = format("%d", sel.aout);
|
||||
|
||||
D3D10_SHADER_MACRO macro[] =
|
||||
{
|
||||
{"FST", str[0]},
|
||||
{"WMS", str[1]},
|
||||
{"WMT", str[2]},
|
||||
{"BPP", str[3]},
|
||||
{"AEM", str[4]},
|
||||
{"TFX", str[5]},
|
||||
{"TCC", str[6]},
|
||||
{"ATE", str[7]},
|
||||
{"ATST", str[8]},
|
||||
{"FOG", str[9]},
|
||||
{"CLR1", str[10]},
|
||||
{"FBA", str[11]},
|
||||
{"AOUT", str[12]},
|
||||
{"FST", str[0].c_str()},
|
||||
{"WMS", str[1].c_str()},
|
||||
{"WMT", str[2].c_str()},
|
||||
{"BPP", str[3].c_str()},
|
||||
{"AEM", str[4].c_str()},
|
||||
{"TFX", str[5].c_str()},
|
||||
{"TCC", str[6].c_str()},
|
||||
{"ATE", str[7].c_str()},
|
||||
{"ATST", str[8].c_str()},
|
||||
{"FOG", str[9].c_str()},
|
||||
{"CLR1", str[10].c_str()},
|
||||
{"FBA", str[11].c_str()},
|
||||
{"AOUT", str[12].c_str()},
|
||||
{NULL, NULL},
|
||||
};
|
||||
|
||||
hr = m_dev->CompileShader(IDR_TFX10_FX, "ps_main", macro, &ps);
|
||||
|
||||
m_ps.SetAt(sel, ps);
|
||||
m_ps[sel] = ps;
|
||||
}
|
||||
|
||||
if(m_ps_cb_cache.Update(cb))
|
||||
|
@ -332,9 +338,11 @@ void GSTextureFX10::UpdatePS(PSSelector sel, const PSConstantBuffer* cb, PSSampl
|
|||
ssel.min = ssel.mag = 0;
|
||||
}
|
||||
|
||||
if(CRBMap<DWORD, CComPtr<ID3D10SamplerState> >::CPair* pair = m_ps_ss.Lookup(ssel))
|
||||
hash_map<DWORD, CComPtr<ID3D10SamplerState> >::iterator i = m_ps_ss.find(ssel);
|
||||
|
||||
if(i != m_ps_ss.end())
|
||||
{
|
||||
ss0 = pair->m_value;
|
||||
ss0 = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -358,7 +366,7 @@ void GSTextureFX10::UpdatePS(PSSelector sel, const PSConstantBuffer* cb, PSSampl
|
|||
|
||||
hr = (*m_dev)->CreateSamplerState(&sd, &ss0);
|
||||
|
||||
m_ps_ss.SetAt(ssel, ss0);
|
||||
m_ps_ss[ssel] = ss0;
|
||||
}
|
||||
|
||||
if(sel.bpp == 3)
|
||||
|
@ -388,9 +396,11 @@ void GSTextureFX10::UpdateOM(OMDepthStencilSelector dssel, OMBlendSelector bsel,
|
|||
|
||||
CComPtr<ID3D10DepthStencilState> dss;
|
||||
|
||||
if(CRBMap<DWORD, CComPtr<ID3D10DepthStencilState> >::CPair* pair = m_om_dss.Lookup(dssel))
|
||||
hash_map<DWORD, CComPtr<ID3D10DepthStencilState> >::iterator i = m_om_dss.find(dssel);
|
||||
|
||||
if(i != m_om_dss.end())
|
||||
{
|
||||
dss = pair->m_value;
|
||||
dss = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -430,16 +440,18 @@ void GSTextureFX10::UpdateOM(OMDepthStencilSelector dssel, OMBlendSelector bsel,
|
|||
|
||||
hr = (*m_dev)->CreateDepthStencilState(&dsd, &dss);
|
||||
|
||||
m_om_dss.SetAt(dssel, dss);
|
||||
m_om_dss[dssel] = dss;
|
||||
}
|
||||
|
||||
m_dev->OMSetDepthStencilState(dss, 1);
|
||||
|
||||
CComPtr<ID3D10BlendState> bs;
|
||||
|
||||
if(CRBMap<DWORD, CComPtr<ID3D10BlendState> >::CPair* pair = m_om_bs.Lookup(bsel))
|
||||
hash_map<DWORD, CComPtr<ID3D10BlendState> >::iterator j = m_om_bs.find(bsel);
|
||||
|
||||
if(j != m_om_bs.end())
|
||||
{
|
||||
bs = pair->m_value;
|
||||
bs = (*j).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -571,7 +583,7 @@ void GSTextureFX10::UpdateOM(OMDepthStencilSelector dssel, OMBlendSelector bsel,
|
|||
|
||||
hr = (*m_dev)->CreateBlendState(&bd, &bs);
|
||||
|
||||
m_om_bs.SetAt(bsel, bs);
|
||||
m_om_bs[bsel] = bs;
|
||||
}
|
||||
|
||||
m_dev->OMSetBlendState(bs, bf);
|
||||
|
|
|
@ -213,15 +213,15 @@ public:
|
|||
private:
|
||||
GSDevice10* m_dev;
|
||||
CComPtr<ID3D10InputLayout> m_il;
|
||||
CRBMapC<DWORD, CComPtr<ID3D10VertexShader> > m_vs;
|
||||
hash_map<DWORD, CComPtr<ID3D10VertexShader> > m_vs;
|
||||
CComPtr<ID3D10Buffer> m_vs_cb;
|
||||
CRBMapC<DWORD, CComPtr<ID3D10GeometryShader> > m_gs;
|
||||
CRBMapC<DWORD, CComPtr<ID3D10PixelShader> > m_ps;
|
||||
hash_map<DWORD, CComPtr<ID3D10GeometryShader> > m_gs;
|
||||
hash_map<DWORD, CComPtr<ID3D10PixelShader> > m_ps;
|
||||
CComPtr<ID3D10Buffer> m_ps_cb;
|
||||
CRBMapC<DWORD, CComPtr<ID3D10SamplerState> > m_ps_ss;
|
||||
hash_map<DWORD, CComPtr<ID3D10SamplerState> > m_ps_ss;
|
||||
CComPtr<ID3D10SamplerState> m_palette_ss;
|
||||
CRBMapC<DWORD, CComPtr<ID3D10DepthStencilState> > m_om_dss;
|
||||
CRBMapC<DWORD, CComPtr<ID3D10BlendState> > m_om_bs;
|
||||
hash_map<DWORD, CComPtr<ID3D10DepthStencilState> > m_om_dss;
|
||||
hash_map<DWORD, CComPtr<ID3D10BlendState> > m_om_bs;
|
||||
|
||||
CComPtr<ID3D10Buffer> m_vb, m_vb_old;
|
||||
int m_vb_max;
|
||||
|
|
|
@ -50,9 +50,11 @@ bool GSTextureFX9::CreateMskFix(GSTexture9& t, DWORD size, DWORD msk, DWORD fix)
|
|||
{
|
||||
DWORD hash = (size << 20) | (msk << 10) | fix;
|
||||
|
||||
if(CRBMap<DWORD, GSTexture9>::CPair* pair = m_mskfix.Lookup(hash))
|
||||
hash_map<DWORD, GSTexture9>::iterator i = m_mskfix.find(hash);
|
||||
|
||||
if(i != m_mskfix.end())
|
||||
{
|
||||
t = pair->m_value;
|
||||
t = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -74,7 +76,7 @@ bool GSTextureFX9::CreateMskFix(GSTexture9& t, DWORD size, DWORD msk, DWORD fix)
|
|||
t.Unmap();
|
||||
}
|
||||
|
||||
m_mskfix.SetAt(hash, t);
|
||||
m_mskfix[hash] = t;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -93,25 +95,27 @@ bool GSTextureFX9::SetupVS(VSSelector sel, const VSConstantBuffer* cb)
|
|||
{
|
||||
CComPtr<IDirect3DVertexShader9> vs;
|
||||
|
||||
if(CRBMap<DWORD, CComPtr<IDirect3DVertexShader9> >::CPair* pair = m_vs.Lookup(sel))
|
||||
hash_map<DWORD, CComPtr<IDirect3DVertexShader9> >::iterator i = m_vs.find(sel);
|
||||
|
||||
if(i != m_vs.end())
|
||||
{
|
||||
vs = pair->m_value;
|
||||
vs = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
CStringA str[4];
|
||||
string str[4];
|
||||
|
||||
str[0].Format("%d", sel.bppz);
|
||||
str[1].Format("%d", sel.tme);
|
||||
str[2].Format("%d", sel.fst);
|
||||
str[3].Format("%d", sel.logz);
|
||||
str[0] = format("%d", sel.bppz);
|
||||
str[1] = format("%d", sel.tme);
|
||||
str[2] = format("%d", sel.fst);
|
||||
str[3] = format("%d", sel.logz);
|
||||
|
||||
D3DXMACRO macro[] =
|
||||
{
|
||||
{"VS_BPPZ", str[0]},
|
||||
{"VS_TME", str[1]},
|
||||
{"VS_FST", str[2]},
|
||||
{"VS_LOGZ", str[3]},
|
||||
{"VS_BPPZ", str[0].c_str()},
|
||||
{"VS_TME", str[1].c_str()},
|
||||
{"VS_FST", str[2].c_str()},
|
||||
{"VS_LOGZ", str[3].c_str()},
|
||||
{NULL, NULL},
|
||||
};
|
||||
|
||||
|
@ -133,7 +137,7 @@ bool GSTextureFX9::SetupVS(VSSelector sel, const VSConstantBuffer* cb)
|
|||
m_il = il;
|
||||
}
|
||||
|
||||
m_vs.SetAt(sel, vs);
|
||||
m_vs[sel] = vs;
|
||||
}
|
||||
|
||||
m_dev->VSSetShader(vs, (const float*)cb, sizeof(*cb) / sizeof(GSVector4));
|
||||
|
@ -187,47 +191,49 @@ void GSTextureFX9::UpdatePS(PSSelector sel, const PSConstantBuffer* cb, PSSample
|
|||
|
||||
CComPtr<IDirect3DPixelShader9> ps;
|
||||
|
||||
if(CRBMap<DWORD, CComPtr<IDirect3DPixelShader9> >::CPair* pair = m_ps.Lookup(sel))
|
||||
hash_map<DWORD, CComPtr<IDirect3DPixelShader9> >::iterator i = m_ps.find(sel);
|
||||
|
||||
if(i != m_ps.end())
|
||||
{
|
||||
ps = pair->m_value;
|
||||
ps = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
CStringA str[12];
|
||||
string str[12];
|
||||
|
||||
str[0].Format("%d", sel.fst);
|
||||
str[1].Format("%d", sel.wms);
|
||||
str[2].Format("%d", sel.wmt);
|
||||
str[3].Format("%d", sel.bpp);
|
||||
str[4].Format("%d", sel.aem);
|
||||
str[5].Format("%d", sel.tfx);
|
||||
str[6].Format("%d", sel.tcc);
|
||||
str[7].Format("%d", sel.ate);
|
||||
str[8].Format("%d", sel.atst);
|
||||
str[9].Format("%d", sel.fog);
|
||||
str[10].Format("%d", sel.clr1);
|
||||
str[11].Format("%d", sel.rt);
|
||||
str[0] = format("%d", sel.fst);
|
||||
str[1] = format("%d", sel.wms);
|
||||
str[2] = format("%d", sel.wmt);
|
||||
str[3] = format("%d", sel.bpp);
|
||||
str[4] = format("%d", sel.aem);
|
||||
str[5] = format("%d", sel.tfx);
|
||||
str[6] = format("%d", sel.tcc);
|
||||
str[7] = format("%d", sel.ate);
|
||||
str[8] = format("%d", sel.atst);
|
||||
str[9] = format("%d", sel.fog);
|
||||
str[10] = format("%d", sel.clr1);
|
||||
str[11] = format("%d", sel.rt);
|
||||
|
||||
D3DXMACRO macro[] =
|
||||
{
|
||||
{"FST", str[0]},
|
||||
{"WMS", str[1]},
|
||||
{"WMT", str[2]},
|
||||
{"BPP", str[3]},
|
||||
{"AEM", str[4]},
|
||||
{"TFX", str[5]},
|
||||
{"TCC", str[6]},
|
||||
{"ATE", str[7]},
|
||||
{"ATST", str[8]},
|
||||
{"FOG", str[9]},
|
||||
{"CLR1", str[10]},
|
||||
{"RT", str[11]},
|
||||
{"FST", str[0].c_str()},
|
||||
{"WMS", str[1].c_str()},
|
||||
{"WMT", str[2].c_str()},
|
||||
{"BPP", str[3].c_str()},
|
||||
{"AEM", str[4].c_str()},
|
||||
{"TFX", str[5].c_str()},
|
||||
{"TCC", str[6].c_str()},
|
||||
{"ATE", str[7].c_str()},
|
||||
{"ATST", str[8].c_str()},
|
||||
{"FOG", str[9].c_str()},
|
||||
{"CLR1", str[10].c_str()},
|
||||
{"RT", str[11].c_str()},
|
||||
{NULL, NULL},
|
||||
};
|
||||
|
||||
hr = m_dev->CompileShader(IDR_TFX9_FX, "ps_main", macro, &ps);
|
||||
|
||||
m_ps.SetAt(sel, ps);
|
||||
m_ps[sel] = ps;
|
||||
}
|
||||
|
||||
m_dev->PSSetShader(ps, (const float*)cb, sizeof(*cb) / sizeof(GSVector4));
|
||||
|
@ -241,9 +247,11 @@ void GSTextureFX9::UpdatePS(PSSelector sel, const PSConstantBuffer* cb, PSSample
|
|||
ssel.min = ssel.mag = 0;
|
||||
}
|
||||
|
||||
if(CRBMap<DWORD, Direct3DSamplerState9*>::CPair* pair = m_ps_ss.Lookup(ssel))
|
||||
hash_map<DWORD, Direct3DSamplerState9* >::iterator i = m_ps_ss.find(ssel);
|
||||
|
||||
if(i != m_ps_ss.end())
|
||||
{
|
||||
ss = pair->m_value;
|
||||
ss = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -259,7 +267,7 @@ void GSTextureFX9::UpdatePS(PSSelector sel, const PSConstantBuffer* cb, PSSample
|
|||
ss->AddressU = ssel.tau ? D3DTADDRESS_WRAP : D3DTADDRESS_CLAMP;
|
||||
ss->AddressV = ssel.tav ? D3DTADDRESS_WRAP : D3DTADDRESS_CLAMP;
|
||||
|
||||
m_ps_ss.SetAt(ssel, ss);
|
||||
m_ps_ss[ssel] = ss;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -282,9 +290,11 @@ void GSTextureFX9::UpdateOM(OMDepthStencilSelector dssel, OMBlendSelector bsel,
|
|||
{
|
||||
Direct3DDepthStencilState9* dss = NULL;
|
||||
|
||||
if(CRBMap<DWORD, Direct3DDepthStencilState9*>::CPair* pair = m_om_dss.Lookup(dssel))
|
||||
hash_map<DWORD, Direct3DDepthStencilState9*>::iterator i = m_om_dss.find(dssel);
|
||||
|
||||
if(i != m_om_dss.end())
|
||||
{
|
||||
dss = pair->m_value;
|
||||
dss = (*i).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -318,16 +328,18 @@ void GSTextureFX9::UpdateOM(OMDepthStencilSelector dssel, OMBlendSelector bsel,
|
|||
dss->DepthFunc = ztst[dssel.ztst];
|
||||
}
|
||||
|
||||
m_om_dss.SetAt(dssel, dss);
|
||||
m_om_dss[dssel] = dss;
|
||||
}
|
||||
|
||||
m_dev->OMSetDepthStencilState(dss, 3);
|
||||
|
||||
Direct3DBlendState9* bs = NULL;
|
||||
|
||||
if(CRBMap<DWORD, Direct3DBlendState9*>::CPair* pair = m_om_bs.Lookup(bsel))
|
||||
hash_map<DWORD, Direct3DBlendState9*>::iterator j = m_om_bs.find(bsel);
|
||||
|
||||
if(j != m_om_bs.end())
|
||||
{
|
||||
bs = pair->m_value;
|
||||
bs = (*j).second;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -457,7 +469,7 @@ void GSTextureFX9::UpdateOM(OMDepthStencilSelector dssel, OMBlendSelector bsel,
|
|||
if(bsel.wb) bs->RenderTargetWriteMask |= D3DCOLORWRITEENABLE_BLUE;
|
||||
if(bsel.wa) bs->RenderTargetWriteMask |= D3DCOLORWRITEENABLE_ALPHA;
|
||||
|
||||
m_om_bs.SetAt(bsel, bs);
|
||||
m_om_bs[bsel] = bs;
|
||||
}
|
||||
|
||||
m_dev->OMSetBlendState(bs, 0x010101 * bf);
|
||||
|
|
|
@ -149,13 +149,13 @@ public:
|
|||
private:
|
||||
GSDevice9* m_dev;
|
||||
CComPtr<IDirect3DVertexDeclaration9> m_il;
|
||||
CRBMapC<DWORD, CComPtr<IDirect3DVertexShader9> > m_vs;
|
||||
hash_map<DWORD, CComPtr<IDirect3DVertexShader9> > m_vs;
|
||||
D3DXHANDLE m_vs_params;
|
||||
CRBMapC<DWORD, CComPtr<IDirect3DPixelShader9> > m_ps;
|
||||
CRBMapC<DWORD, Direct3DSamplerState9* > m_ps_ss;
|
||||
CRBMapC<DWORD, Direct3DDepthStencilState9* > m_om_dss;
|
||||
CRBMapC<DWORD, Direct3DBlendState9* > m_om_bs;
|
||||
CRBMapC<DWORD, GSTexture9> m_mskfix;
|
||||
hash_map<DWORD, CComPtr<IDirect3DPixelShader9> > m_ps;
|
||||
hash_map<DWORD, Direct3DSamplerState9* > m_ps_ss;
|
||||
hash_map<DWORD, Direct3DDepthStencilState9* > m_om_dss;
|
||||
hash_map<DWORD, Direct3DBlendState9* > m_om_bs;
|
||||
hash_map<DWORD, GSTexture9> m_mskfix;
|
||||
|
||||
public:
|
||||
GSTextureFX9();
|
||||
|
|
|
@ -40,5 +40,5 @@ public:
|
|||
bool Update(const CRect& r, const void* data, int pitch) {return true;}
|
||||
bool Map(BYTE** bits, int& pitch, const RECT* r = NULL) {return true;}
|
||||
void Unmap() {}
|
||||
bool Save(CString fn, bool dds = false) {return false;}
|
||||
bool Save(const string& fn, bool dds = false) {return false;}
|
||||
};
|
||||
|
|
|
@ -148,11 +148,7 @@ void GSUtil::FitRect(CRect& r, int aspectratio)
|
|||
|
||||
bool GSUtil::CheckDirectX()
|
||||
{
|
||||
CString str;
|
||||
|
||||
str.Format(_T("d3dx9_%d.dll"), D3DX_SDK_VERSION);
|
||||
|
||||
if(HINSTANCE hDll = LoadLibrary(str))
|
||||
if(HINSTANCE hDll = LoadLibrary(format("d3dx9_%d.dll", D3DX_SDK_VERSION).c_str()))
|
||||
{
|
||||
FreeLibrary(hDll);
|
||||
}
|
||||
|
@ -199,9 +195,9 @@ bool GSUtil::CheckSSE()
|
|||
{
|
||||
if(!_CheckSSE())
|
||||
{
|
||||
CString str;
|
||||
str.Format(_T("This CPU does not support SSE %d.%02d"), _M_SSE >> 8, _M_SSE & 0xff);
|
||||
AfxMessageBox(str, MB_OK);
|
||||
string s = format("This CPU does not support SSE %d.%02d", _M_SSE >> 8, _M_SSE & 0xff);
|
||||
|
||||
AfxMessageBox(s.c_str(), MB_OK);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -223,50 +219,40 @@ bool GSUtil::IsDirect3D10Available()
|
|||
|
||||
char* GSUtil::GetLibName()
|
||||
{
|
||||
CString str;
|
||||
static string str = format("GSdx %d", SVN_REV);
|
||||
|
||||
str.Format(_T("GSdx %d"), SVN_REV);
|
||||
|
||||
if(SVN_MODS) str += _T("m");
|
||||
if(SVN_MODS) str += "m";
|
||||
|
||||
#if _M_AMD64
|
||||
str += _T(" 64-bit");
|
||||
str += " 64-bit";
|
||||
#endif
|
||||
|
||||
CAtlList<CString> sl;
|
||||
list<string> sl;
|
||||
|
||||
#ifdef __INTEL_COMPILER
|
||||
CString s;
|
||||
s.Format(_T("Intel C++ %d.%02d"), __INTEL_COMPILER/100, __INTEL_COMPILER%100);
|
||||
sl.AddTail(s);
|
||||
sl.push_back(format("Intel C++ %d.%02d", __INTEL_COMPILER / 100, __INTEL_COMPILER % 100));
|
||||
#elif _MSC_VER
|
||||
CString s;
|
||||
s.Format(_T("MSVC %d.%02d"), _MSC_VER/100, _MSC_VER%100);
|
||||
sl.AddTail(s);
|
||||
sl.push_back(format("MSVC %d.%02d", _MSC_VER / 100, _MSC_VER % 100));
|
||||
#endif
|
||||
|
||||
#if _M_SSE >= 0x402
|
||||
sl.AddTail(_T("SSE42"));
|
||||
sl.push_back("SSE42");
|
||||
#elif _M_SSE >= 0x401
|
||||
sl.AddTail(_T("SSE41"));
|
||||
sl.push_back("SSE41");
|
||||
#elif _M_SSE >= 0x301
|
||||
sl.AddTail(_T("SSSE3"));
|
||||
sl.push_back("SSSE3");
|
||||
#elif _M_SSE >= 0x200
|
||||
sl.AddTail(_T("SSE2"));
|
||||
sl.push_back("SSE2");
|
||||
#elif _M_SSE >= 0x100
|
||||
sl.AddTail(_T("SSE"));
|
||||
sl.push_back("SSE");
|
||||
#endif
|
||||
|
||||
POSITION pos = sl.GetHeadPosition();
|
||||
|
||||
while(pos)
|
||||
for(list<string>::iterator i = sl.begin(); i != sl.end(); )
|
||||
{
|
||||
if(pos == sl.GetHeadPosition()) str += _T(" (");
|
||||
str += sl.GetNext(pos);
|
||||
str += pos ? _T(", ") : _T(")");
|
||||
if(i == sl.begin()) str += " (";
|
||||
str += *i;
|
||||
str += ++i != sl.end() ? ", " : ")";
|
||||
}
|
||||
|
||||
static char buff[256];
|
||||
strncpy(buff, CStringA(str), min(countof(buff)-1, str.GetLength()));
|
||||
return buff;
|
||||
return (char*)str.c_str();
|
||||
}
|
|
@ -35,8 +35,8 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
typedef __declspec(align(8)) GSVector2T<float> GSVector2;
|
||||
typedef __declspec(align(8)) GSVector2T<int> GSVector2i;
|
||||
typedef GSVector2T<float> GSVector2;
|
||||
typedef GSVector2T<int> GSVector2i;
|
||||
|
||||
class GSVector4;
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ GSWnd::~GSWnd()
|
|||
DestroyWindow();
|
||||
}
|
||||
|
||||
bool GSWnd::Create(LPCTSTR title)
|
||||
bool GSWnd::Create(const string& title)
|
||||
{
|
||||
CRect r;
|
||||
|
||||
|
@ -53,7 +53,7 @@ bool GSWnd::Create(LPCTSTR title)
|
|||
|
||||
LPCTSTR wc = AfxRegisterWndClass(CS_VREDRAW|CS_HREDRAW|CS_DBLCLKS, AfxGetApp()->LoadStandardCursor(IDC_ARROW), 0, 0);
|
||||
|
||||
return !!CreateEx(0, wc, title, WS_OVERLAPPEDWINDOW, r, NULL, 0);
|
||||
return !!CreateEx(0, wc, title.c_str(), WS_OVERLAPPEDWINDOW, r, NULL, 0);
|
||||
}
|
||||
|
||||
void GSWnd::Show()
|
||||
|
|
|
@ -29,7 +29,7 @@ public:
|
|||
GSWnd();
|
||||
virtual ~GSWnd();
|
||||
|
||||
virtual bool Create(LPCTSTR title);
|
||||
virtual bool Create(const string& title);
|
||||
|
||||
void Show();
|
||||
void Hide();
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
#include "stdafx.h"
|
||||
#include "GSdx.h"
|
||||
#include <atlbase.h>
|
||||
#include <atlpath.h>
|
||||
|
||||
//
|
||||
// Note!
|
||||
|
|
|
@ -6,3 +6,34 @@
|
|||
|
||||
// TODO: reference any additional headers you need in STDAFX.H
|
||||
// and not in this file
|
||||
|
||||
string format(const char* fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
|
||||
int result = -1, length = 256;
|
||||
|
||||
char* buffer = NULL;
|
||||
|
||||
while(result == -1)
|
||||
{
|
||||
if(buffer) delete [] buffer;
|
||||
|
||||
buffer = new char[length + 1];
|
||||
|
||||
memset(buffer, 0, length + 1);
|
||||
|
||||
result = _vsnprintf(buffer, length, fmt, args);
|
||||
|
||||
length *= 2;
|
||||
}
|
||||
|
||||
va_end(args);
|
||||
|
||||
string s(buffer);
|
||||
|
||||
delete [] buffer;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
|
|
@ -36,9 +36,6 @@
|
|||
#include <afxcmn.h> // MFC support for Windows Common Controls
|
||||
#endif // _AFX_NO_AFXCMN_SUPPORT
|
||||
//#include <afxmt.h>
|
||||
#include <atlbase.h>
|
||||
#include <atlcoll.h>
|
||||
#include <atlpath.h>
|
||||
#include <ddraw.h>
|
||||
#include <d3d9.h>
|
||||
#include <d3dx9.h>
|
||||
|
@ -46,6 +43,17 @@
|
|||
#include <d3dx10.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <hash_map>
|
||||
|
||||
using namespace std;
|
||||
using namespace stdext;
|
||||
|
||||
extern string format(const char* fmt, ...);
|
||||
|
||||
#if !defined(_M_SSE) && (defined(_M_AMD64) || defined(_M_IX86_FP) && _M_IX86_FP >= 2)
|
||||
#define _M_SSE 0x200
|
||||
#endif
|
||||
|
@ -73,35 +81,3 @@
|
|||
#define D3DCOLORWRITEENABLE_RGBA (D3DCOLORWRITEENABLE_RGB|D3DCOLORWRITEENABLE_ALPHA)
|
||||
|
||||
#define QI(i) (riid == __uuidof(i)) ? GetInterface((i*)this, ppv) :
|
||||
|
||||
template<class K, class V> class CRBMapC : public CRBMap<K, V>
|
||||
{
|
||||
// CRBMap + a cache for the last value (simple, but already a lot better)
|
||||
|
||||
CPair* m_pair;
|
||||
|
||||
public:
|
||||
CRBMapC() : m_pair(NULL) {}
|
||||
|
||||
CPair* Lookup(KINARGTYPE key)
|
||||
{
|
||||
if(m_pair && key == m_pair->m_key)
|
||||
{
|
||||
return m_pair;
|
||||
}
|
||||
|
||||
m_pair = __super::Lookup(key);
|
||||
|
||||
return m_pair;
|
||||
}
|
||||
|
||||
POSITION SetAt(KINARGTYPE key, VINARGTYPE value)
|
||||
{
|
||||
POSITION pos = __super::SetAt(key, value);
|
||||
|
||||
m_pair = __super::GetAt(pos);
|
||||
|
||||
return pos;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue