mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-13 07:49:19 +01:00
Dlist Cache step 2:
include referenced array data in the hash to avoid problems in some games. this version is a slower than the last version but is more stable, still much work to do but so little time to do it :) Added Dlist Caching Option to the plugin configuration so anyone can compare the performance change. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6205 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
08b999dbfa
commit
73adab0ce1
@ -57,14 +57,32 @@ enum DisplayListPass {
|
||||
DLPASS_RUN,
|
||||
};
|
||||
|
||||
struct VDataHashRegion
|
||||
#define DL_HASH_STEPS 512
|
||||
|
||||
struct ReferencedDataRegion
|
||||
{
|
||||
u32 hash;
|
||||
u32 start_address;
|
||||
int size;
|
||||
ReferencedDataRegion()
|
||||
:hash(0),
|
||||
start_address(NULL),
|
||||
size(0),
|
||||
MustClean(false),
|
||||
NextRegion(NULL)
|
||||
{}
|
||||
u64 hash;
|
||||
u8* start_address;
|
||||
u32 size;
|
||||
bool MustClean;
|
||||
ReferencedDataRegion* NextRegion;
|
||||
|
||||
int IntersectsMemoryRange(u8* range_address, u32 range_size)
|
||||
{
|
||||
if (start_address + size < range_address)
|
||||
return -1;
|
||||
if (start_address >= range_address + range_size)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
typedef u8* DataPointer;
|
||||
typedef std::map<u8, DataPointer> VdataMap;
|
||||
|
||||
struct CachedDisplayList
|
||||
{
|
||||
@ -72,18 +90,26 @@ struct CachedDisplayList
|
||||
: uncachable(false),
|
||||
pass(DLPASS_ANALYZE),
|
||||
next_check(1),
|
||||
BufferCount(0),
|
||||
num_xf_reg(0),
|
||||
num_cp_reg(0),
|
||||
num_bp_reg(0),
|
||||
num_index_xf(0),
|
||||
num_draw_call(0)
|
||||
num_draw_call(0),
|
||||
Regions(NULL),
|
||||
LastRegion(NULL),
|
||||
BufferCount(0)
|
||||
{
|
||||
frame_count = frameCount;
|
||||
}
|
||||
|
||||
|
||||
bool uncachable; // if set, this DL will always be interpreted. This gets set if hash ever changes.
|
||||
|
||||
// Analitic data
|
||||
int num_xf_reg;
|
||||
int num_cp_reg;
|
||||
int num_bp_reg;
|
||||
int num_index_xf;
|
||||
int num_draw_call;
|
||||
|
||||
int pass;
|
||||
u64 dl_hash;
|
||||
|
||||
@ -93,17 +119,99 @@ struct CachedDisplayList
|
||||
int frame_count;
|
||||
|
||||
// ... Something containing cached vertex buffers here ...
|
||||
u8 BufferCount;
|
||||
VdataMap Vdata;
|
||||
|
||||
int num_xf_reg;
|
||||
int num_cp_reg;
|
||||
int num_bp_reg;
|
||||
int num_index_xf;
|
||||
int num_draw_call;
|
||||
|
||||
int BufferCount;
|
||||
ReferencedDataRegion* Regions;
|
||||
ReferencedDataRegion* LastRegion;
|
||||
|
||||
// Compile the commands themselves down to native code.
|
||||
|
||||
const u8* compiled_code;
|
||||
|
||||
void InsertRegion(ReferencedDataRegion* NewRegion)
|
||||
{
|
||||
if(LastRegion)
|
||||
{
|
||||
LastRegion->NextRegion = NewRegion;
|
||||
}
|
||||
LastRegion = NewRegion;
|
||||
if(!Regions)
|
||||
{
|
||||
Regions = LastRegion;
|
||||
}
|
||||
BufferCount++;
|
||||
}
|
||||
|
||||
void InsertOverlapingRegion(u8* RegionStartAddress, u32 Size)
|
||||
{
|
||||
ReferencedDataRegion* NewRegion = FindOverlapingRegion(RegionStartAddress, Size);
|
||||
if(NewRegion)
|
||||
{
|
||||
bool RegionChanged = false;
|
||||
if(RegionStartAddress < NewRegion->start_address)
|
||||
{
|
||||
NewRegion->start_address = RegionStartAddress;
|
||||
RegionChanged = true;
|
||||
}
|
||||
if(RegionStartAddress + Size > NewRegion->start_address + NewRegion->size)
|
||||
{
|
||||
NewRegion->size += (RegionStartAddress + Size) - (NewRegion->start_address + NewRegion->size);
|
||||
RegionChanged = true;
|
||||
}
|
||||
if(RegionChanged)
|
||||
NewRegion->hash = GetHash64(NewRegion->start_address, NewRegion->size, DL_HASH_STEPS);
|
||||
}
|
||||
else
|
||||
{
|
||||
NewRegion = new ReferencedDataRegion;
|
||||
NewRegion->MustClean = false;
|
||||
NewRegion->size = Size;
|
||||
NewRegion->start_address = RegionStartAddress;
|
||||
NewRegion->hash = GetHash64(RegionStartAddress, Size, DL_HASH_STEPS);
|
||||
InsertRegion(NewRegion);
|
||||
}
|
||||
}
|
||||
|
||||
bool CheckRegions()
|
||||
{
|
||||
ReferencedDataRegion* Current = Regions;
|
||||
while(Current)
|
||||
{
|
||||
if(Current->hash)
|
||||
{
|
||||
if(Current->hash != GetHash64(Current->start_address, Current->size, DL_HASH_STEPS))
|
||||
return false;
|
||||
}
|
||||
Current = Current->NextRegion;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
ReferencedDataRegion* FindOverlapingRegion(u8* RegionStart, int Regionsize)
|
||||
{
|
||||
ReferencedDataRegion* Current = Regions;
|
||||
while(Current)
|
||||
{
|
||||
if(!Current->IntersectsMemoryRange(RegionStart, Regionsize))
|
||||
return Current;
|
||||
Current = Current->NextRegion;
|
||||
}
|
||||
return Current;
|
||||
}
|
||||
|
||||
void ClearRegions()
|
||||
{
|
||||
ReferencedDataRegion* Current = Regions;
|
||||
while(Current)
|
||||
{
|
||||
ReferencedDataRegion* temp = Current;
|
||||
Current = Current->NextRegion;
|
||||
if(temp->MustClean)
|
||||
delete [] temp->start_address;
|
||||
delete temp;
|
||||
}
|
||||
LastRegion = NULL;
|
||||
Regions = NULL;
|
||||
}
|
||||
};
|
||||
|
||||
// We want to allow caching DLs that start at the same address but have different lengths,
|
||||
@ -116,7 +224,7 @@ inline u64 CreateMapId(u32 address, u32 size)
|
||||
typedef std::map<u64, CachedDisplayList> DLMap;
|
||||
|
||||
static DLMap dl_map;
|
||||
static DataPointer dlcode_cache;
|
||||
static u8* dlcode_cache;
|
||||
|
||||
static Gen::XEmitter emitter;
|
||||
|
||||
@ -315,14 +423,17 @@ bool CompileAndRunDisplayList(u32 address, int size, CachedDisplayList *dl)
|
||||
int transfer_size = ((Cmd2 >> 16) & 15) + 1;
|
||||
u32 xf_address = Cmd2 & 0xFFFF;
|
||||
// TODO - speed this up. pshufb?
|
||||
DataPointer real_data_buffer = (DataPointer) new u8[transfer_size * 4];
|
||||
u32 *data_buffer = (u32*)real_data_buffer;
|
||||
ReferencedDataRegion* NewRegion = new ReferencedDataRegion;
|
||||
NewRegion->MustClean = true;
|
||||
NewRegion->size = transfer_size * 4;
|
||||
NewRegion->start_address = (u8*) new u8[NewRegion->size];
|
||||
NewRegion->hash = 0;
|
||||
dl->InsertRegion(NewRegion);
|
||||
u32 *data_buffer = (u32*)NewRegion->start_address;
|
||||
for (int i = 0; i < transfer_size; i++)
|
||||
data_buffer[i] = DataReadU32();
|
||||
LoadXFReg(transfer_size, xf_address, data_buffer);
|
||||
INCSTAT(stats.thisFrame.numXFLoads);
|
||||
dl->Vdata[dl->BufferCount] = real_data_buffer;
|
||||
dl->BufferCount++;
|
||||
// Compile
|
||||
emitter.ABI_CallFunctionCCP((void *)&LoadXFReg, transfer_size, xf_address, data_buffer);
|
||||
}
|
||||
@ -367,7 +478,7 @@ bool CompileAndRunDisplayList(u32 address, int size, CachedDisplayList *dl)
|
||||
|
||||
case GX_CMD_CALL_DL:
|
||||
{
|
||||
u32 addr = DataReadU32();
|
||||
u32 addr= DataReadU32();
|
||||
u32 count = DataReadU32();
|
||||
ExecuteDisplayList(addr, count);
|
||||
emitter.ABI_CallFunctionCC((void *)&ExecuteDisplayList, addr, count);
|
||||
@ -401,7 +512,6 @@ bool CompileAndRunDisplayList(u32 address, int size, CachedDisplayList *dl)
|
||||
|
||||
// Execute
|
||||
u16 numVertices = DataReadU16();
|
||||
|
||||
u8* StartAddress = VertexManager::s_pBaseBufferPointer;
|
||||
VertexManager::Flush();
|
||||
VertexLoaderManager::RunVertices(
|
||||
@ -413,12 +523,27 @@ bool CompileAndRunDisplayList(u32 address, int size, CachedDisplayList *dl)
|
||||
if (size > 0)
|
||||
{
|
||||
// Compile
|
||||
DataPointer NewData = (DataPointer)new u8[Vdatasize];
|
||||
memcpy(NewData,StartAddress,Vdatasize);
|
||||
dl->Vdata[dl->BufferCount] = NewData;
|
||||
dl->BufferCount++;
|
||||
emitter.ABI_CallFunctionCCCP((void *)&VertexLoaderManager::RunCompiledVertices,
|
||||
cmd_byte & GX_VAT_MASK, (cmd_byte & GX_PRIMITIVE_MASK) >> GX_PRIMITIVE_SHIFT, numVertices, NewData);
|
||||
ReferencedDataRegion* NewRegion = new ReferencedDataRegion;
|
||||
NewRegion->MustClean = true;
|
||||
NewRegion->size = Vdatasize;
|
||||
NewRegion->start_address = (u8*)new u8[Vdatasize];
|
||||
NewRegion->hash = 0;
|
||||
dl->InsertRegion(NewRegion);
|
||||
memcpy(NewRegion->start_address, StartAddress, Vdatasize);
|
||||
emitter.ABI_CallFunctionCCCP((void *)&VertexLoaderManager::RunCompiledVertices, cmd_byte & GX_VAT_MASK, (cmd_byte & GX_PRIMITIVE_MASK) >> GX_PRIMITIVE_SHIFT, numVertices, NewRegion->start_address);
|
||||
}
|
||||
const int tc[12] = {
|
||||
g_VtxDesc.Position, g_VtxDesc.Normal, g_VtxDesc.Color0, g_VtxDesc.Color1, g_VtxDesc.Tex0Coord, g_VtxDesc.Tex1Coord,
|
||||
g_VtxDesc.Tex2Coord, g_VtxDesc.Tex3Coord, g_VtxDesc.Tex4Coord, g_VtxDesc.Tex5Coord, g_VtxDesc.Tex6Coord, (g_VtxDesc.Hex >> 31) & 3
|
||||
};
|
||||
for(int i = 0; i < 12; i++)
|
||||
{
|
||||
if(tc[i] > 1)
|
||||
{
|
||||
u8* saddr = cached_arraybases[i];
|
||||
int arraySize = arraystrides[i] * ((tc[i] == 2)? 256 : 8192);
|
||||
dl->InsertOverlapingRegion(saddr, arraySize);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -440,7 +565,7 @@ bool CompileAndRunDisplayList(u32 address, int size, CachedDisplayList *dl)
|
||||
|
||||
void Init()
|
||||
{
|
||||
dlcode_cache = (DataPointer)AllocateExecutableMemory(DL_CODE_CACHE_SIZE, false); // Don't need low memory.
|
||||
dlcode_cache = (u8*)AllocateExecutableMemory(DL_CODE_CACHE_SIZE, false); // Don't need low memory.
|
||||
emitter.SetCodePtr(dlcode_cache);
|
||||
}
|
||||
|
||||
@ -456,13 +581,7 @@ void Clear()
|
||||
DLMap::iterator iter = dl_map.begin();
|
||||
while (iter != dl_map.end()) {
|
||||
CachedDisplayList &entry = iter->second;
|
||||
VdataMap::iterator viter = entry.Vdata.begin();
|
||||
while (viter != entry.Vdata.end())
|
||||
{
|
||||
DataPointer &ventry = viter->second;
|
||||
delete [] ventry;
|
||||
entry.Vdata.erase(viter++);
|
||||
}
|
||||
entry.ClearRegions();
|
||||
iter++;
|
||||
}
|
||||
dl_map.clear();
|
||||
@ -478,13 +597,7 @@ void ProgressiveCleanup()
|
||||
int limit = iter->second.uncachable ? 1200 : 400;
|
||||
if (entry.frame_count < frameCount - limit) {
|
||||
// entry.Destroy();
|
||||
VdataMap::iterator viter = entry.Vdata.begin();
|
||||
while (viter != entry.Vdata.end())
|
||||
{
|
||||
DataPointer &ventry = viter->second;
|
||||
delete [] ventry;
|
||||
entry.Vdata.erase(viter++);
|
||||
}
|
||||
entry.ClearRegions();
|
||||
dl_map.erase(iter++); // (this is gcc standard!)
|
||||
}
|
||||
else
|
||||
@ -510,17 +623,7 @@ bool HandleDisplayList(u32 address, u32 size)
|
||||
DLCache::CachedDisplayList &dl = iter->second;
|
||||
if (dl.uncachable)
|
||||
{
|
||||
dl.check--;
|
||||
if(dl.check <= 0)
|
||||
{
|
||||
dl.pass = DLCache::DLPASS_ANALYZE;
|
||||
dl.uncachable = false;
|
||||
dl.check = dl.next_check;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Got one! And it's been compiled too, so let's run the compiled code!
|
||||
@ -543,8 +646,7 @@ bool HandleDisplayList(u32 address, u32 size)
|
||||
if (dl.dl_hash != GetHash64(Memory_GetPtr(address), size, 0))
|
||||
{
|
||||
// PanicAlert("uncachable %08x", address);
|
||||
dl.uncachable = true;
|
||||
dl.check = 60;
|
||||
dl.uncachable = true;
|
||||
return false;
|
||||
}
|
||||
DLCache::CompileAndRunDisplayList(address, size, &dl);
|
||||
@ -556,18 +658,11 @@ bool HandleDisplayList(u32 address, u32 size)
|
||||
dl.check--;
|
||||
if (dl.check <= 0)
|
||||
{
|
||||
if (dl.dl_hash != GetHash64(Memory_GetPtr(address), size, 0))
|
||||
if (dl.dl_hash != GetHash64(Memory_GetPtr(address), size, 0) || !dl.CheckRegions())
|
||||
{
|
||||
dl.uncachable = true;
|
||||
dl.check = 60;
|
||||
DLCache::VdataMap::iterator viter = dl.Vdata.begin();
|
||||
while (viter != dl.Vdata.end())
|
||||
{
|
||||
DLCache::DataPointer &ventry = viter->second;
|
||||
delete [] ventry;
|
||||
dl.Vdata.erase(viter++);
|
||||
}
|
||||
dl.BufferCount = 0;
|
||||
dl.ClearRegions();
|
||||
return false;
|
||||
}
|
||||
dl.check = dl.next_check;
|
||||
@ -601,7 +696,7 @@ bool HandleDisplayList(u32 address, u32 size)
|
||||
DLCache::CachedDisplayList dl;
|
||||
|
||||
if (DLCache::AnalyzeAndRunDisplayList(address, size, &dl)) {
|
||||
dl.dl_hash = GetHash64(Memory_GetPtr(address), size, 0);
|
||||
dl.dl_hash = GetHash64(Memory_GetPtr(address), size,0);
|
||||
dl.pass = DLCache::DLPASS_COMPILE;
|
||||
dl.check = 1;
|
||||
dl.next_check = 1;
|
||||
|
@ -91,6 +91,8 @@ struct TabDirect3D : public W32Util::Tab
|
||||
Button_SetCheck(GetDlgItem(hDlg, IDC_WIDESCREEN_HACK), g_Config.bWidescreenHack);
|
||||
Button_SetCheck(GetDlgItem(hDlg, IDC_VSYNC), g_Config.bVSync);
|
||||
Button_SetCheck(GetDlgItem(hDlg, IDC_SAFE_TEXTURE_CACHE), g_Config.bSafeTextureCache);
|
||||
Button_SetCheck(GetDlgItem(hDlg, IDC_DLIST_CACHING), g_Config.bDlistCachingEnable);
|
||||
|
||||
|
||||
if (g_Config.iSafeTextureCache_ColorSamples == 0)
|
||||
{
|
||||
@ -136,6 +138,9 @@ struct TabDirect3D : public W32Util::Tab
|
||||
Button_Enable(GetDlgItem(hDlg, IDC_SAFE_TEXTURE_CACHE_NORMAL), g_Config.bSafeTextureCache);
|
||||
Button_Enable(GetDlgItem(hDlg, IDC_SAFE_TEXTURE_CACHE_FAST), g_Config.bSafeTextureCache);
|
||||
break;
|
||||
case IDC_DLIST_CACHING:
|
||||
g_Config.bDlistCachingEnable = Button_GetCheck(GetDlgItem(hDlg, IDC_DLIST_CACHING)) == 0 ? false : true;
|
||||
break;
|
||||
case IDC_EFB_ACCESS_ENABLE:
|
||||
g_Config.bEFBAccessEnable = Button_GetCheck(GetDlgItem(hDlg, IDC_EFB_ACCESS_ENABLE)) == 0 ? false : true;
|
||||
break;
|
||||
|
@ -6,7 +6,6 @@
|
||||
#define IDD_SETTINGS 103
|
||||
#define IDD_ADVANCED 105
|
||||
#define IDC_ADAPTER 1001
|
||||
//#define IDC_ANTIALIASMODE 1002
|
||||
#define IDC_VSYNC 1006
|
||||
#define IDC_ASPECT_16_9 1008
|
||||
#define IDC_ASPECT_4_3 1009
|
||||
@ -19,15 +18,10 @@
|
||||
#define IDC_OVERLAYSTATS 1016
|
||||
#define IDC_OVERLAYPROJSTATS 1017
|
||||
#define IDC_ENABLEEFBCOPY 1018
|
||||
//#define IDC_EFBTORAM 1019
|
||||
//#define IDC_EFBTOTEX 1020
|
||||
#define IDC_TEXFMT_OVERLAY 1024
|
||||
#define IDC_TEXFMT_CENTER 1025
|
||||
#define IDC_ENABLEXFB 1026
|
||||
#define IDC_FORCEANISOTROPY 1027
|
||||
//#define IDC_ENABLEXFB2 1027
|
||||
//#define IDC_ENABLEREALXFB 1027
|
||||
//#define IDC_LOADHIRESTEXTURE 1028
|
||||
#define IDC_EFBSCALEDCOPY 1029
|
||||
#define IDC_OSDHOTKEY 1030
|
||||
#define IDC_COMBO2 1040
|
||||
@ -36,7 +30,7 @@
|
||||
#define IDC_SAFE_TEXTURE_CACHE_NORMAL 1042
|
||||
#define IDC_RADIO3 1043
|
||||
#define IDC_SAFE_TEXTURE_CACHE_FAST 1043
|
||||
//#define IDC_DISABLEMIPS 1100
|
||||
#define IDC_DLIST_CACHING 1044
|
||||
#define IDC_STATIC -1
|
||||
|
||||
// Next default values for new objects
|
||||
@ -45,7 +39,7 @@
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 106
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1044
|
||||
#define _APS_NEXT_CONTROL_VALUE 1045
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
|
@ -46,10 +46,12 @@ BEGIN
|
||||
LTEXT "&Aspect Ratio:",IDC_STATIC,9,40,48,8
|
||||
COMBOBOX IDC_ASPECTRATIO,60,38,89,57,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "&Enable CPU->EFB access ",IDC_EFB_ACCESS_ENABLE,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,60,94,11
|
||||
CONTROL "Enable &Safe Texture Cache",IDC_SAFE_TEXTURE_CACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,74,108,11
|
||||
CONTROL "Enable &Safe Texture Cache",IDC_SAFE_TEXTURE_CACHE,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,74,108,11
|
||||
CONTROL "Safe",IDC_SAFE_TEXTURE_CACHE_SAFE,"Button",BS_AUTORADIOBUTTON,20,87,32,10
|
||||
CONTROL "Normal",IDC_SAFE_TEXTURE_CACHE_NORMAL,"Button",BS_AUTORADIOBUTTON,52,87,40,10
|
||||
CONTROL "Fast",IDC_SAFE_TEXTURE_CACHE_FAST,"Button",BS_AUTORADIOBUTTON,92,87,32,10
|
||||
CONTROL "Enable Dlist Caching",IDC_DLIST_CACHING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,98,80,10
|
||||
END
|
||||
|
||||
IDD_ADVANCED DIALOGEX 0, 0, 244, 200
|
||||
@ -63,69 +65,14 @@ BEGIN
|
||||
CONTROL "Enable EFB copy",IDC_ENABLEEFBCOPY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,33,81,8
|
||||
CONTROL "EFB Scaled Copy",IDC_EFBSCALEDCOPY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,48,64,8
|
||||
CONTROL "Enable &Wireframe",IDC_WIREFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,48,87,8
|
||||
CONTROL "Enable 16x &anisotropy filtering",IDC_FORCEANISOTROPY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,63,110,8
|
||||
|
||||
CONTROL "Enable 16x &anisotropy filtering",IDC_FORCEANISOTROPY,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,63,110,8
|
||||
GROUPBOX "Debugging Tools",IDC_STATIC,7,148,228,46
|
||||
CONTROL "&Overlay some statistics",IDC_OVERLAYSTATS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,159,90,8
|
||||
CONTROL "Enable TexFmt Overlay",IDC_TEXFMT_OVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,174,92,10
|
||||
CONTROL "Centered",IDC_TEXFMT_CENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,174,52,10
|
||||
END
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO
|
||||
BEGIN
|
||||
IDD_ABOUT, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 181
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 74
|
||||
END
|
||||
|
||||
IDD_SETTINGS, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 237
|
||||
VERTGUIDE, 7
|
||||
VERTGUIDE, 68
|
||||
VERTGUIDE, 81
|
||||
VERTGUIDE, 87
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 176
|
||||
END
|
||||
|
||||
IDD_ADVANCED, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 237
|
||||
VERTGUIDE, 14
|
||||
VERTGUIDE, 29
|
||||
VERTGUIDE, 114
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 195
|
||||
HORZGUIDE, 18
|
||||
HORZGUIDE, 33
|
||||
HORZGUIDE, 49
|
||||
HORZGUIDE, 156
|
||||
END
|
||||
|
||||
IDD_ENHANCEMENTS, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 217
|
||||
VERTGUIDE, 16
|
||||
VERTGUIDE, 74
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 168
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -45,6 +45,7 @@ BEGIN_EVENT_TABLE(GFXConfigDialogDX,wxDialog)
|
||||
EVT_CHOICE(ID_EFBSCALEMODE, GFXConfigDialogDX::DirectXSettingsChanged)
|
||||
EVT_CHECKBOX(ID_EFB_ACCESS_ENABLE, GFXConfigDialogDX::DirectXSettingsChanged)
|
||||
EVT_CHECKBOX(ID_SAFETEXTURECACHE, GFXConfigDialogDX::DirectXSettingsChanged)
|
||||
EVT_CHECKBOX(ID_DLISTCACHING, GFXConfigDialogDX::DirectXSettingsChanged)
|
||||
EVT_RADIOBUTTON(ID_RADIO_SAFETEXTURECACHE_SAFE, GFXConfigDialogDX::DirectXSettingsChanged)
|
||||
EVT_RADIOBUTTON(ID_RADIO_SAFETEXTURECACHE_NORMAL, GFXConfigDialogDX::DirectXSettingsChanged)
|
||||
EVT_RADIOBUTTON(ID_RADIO_SAFETEXTURECACHE_FAST, GFXConfigDialogDX::DirectXSettingsChanged)
|
||||
@ -111,6 +112,7 @@ void GFXConfigDialogDX::InitializeGUIValues()
|
||||
m_EFBScaleMode->SetSelection(g_Config.iEFBScale);
|
||||
m_EnableEFBAccess->SetValue(g_Config.bEFBAccessEnable);
|
||||
m_SafeTextureCache->SetValue(g_Config.bSafeTextureCache);
|
||||
m_DlistCaching->SetValue(g_Config.bDlistCachingEnable);
|
||||
if(g_Config.iSafeTextureCache_ColorSamples == 0)
|
||||
m_Radio_SafeTextureCache_Safe->SetValue(true);
|
||||
else
|
||||
@ -214,7 +216,7 @@ void GFXConfigDialogDX::CreateGUIControls()
|
||||
m_Radio_SafeTextureCache_Safe = new wxRadioButton( m_PageDirect3D, ID_RADIO_SAFETEXTURECACHE_SAFE, wxT("safe"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_Radio_SafeTextureCache_Normal = new wxRadioButton( m_PageDirect3D, ID_RADIO_SAFETEXTURECACHE_NORMAL, wxT("normal"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_Radio_SafeTextureCache_Fast = new wxRadioButton( m_PageDirect3D, ID_RADIO_SAFETEXTURECACHE_FAST, wxT("fast"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
||||
m_DlistCaching = new wxCheckBox( m_PageDirect3D, ID_DLISTCACHING, wxT("Use DList Caching"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
// Sizers
|
||||
wxGridBagSizer* sBasic;
|
||||
wxBoxSizer* sGeneral;
|
||||
@ -234,6 +236,7 @@ void GFXConfigDialogDX::CreateGUIControls()
|
||||
sBasic->Add( m_EFBScaleText, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||
sBasic->Add( m_EFBScaleMode, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||
sBasic->Add( m_EnableEFBAccess, wxGBPosition( 5, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||
sBasic->Add( m_DlistCaching, wxGBPosition( 6, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||
sbBasic->Add( sBasic, 0, 0, 5 );
|
||||
sGeneral->Add( sbBasic, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
@ -412,6 +415,9 @@ void GFXConfigDialogDX::DirectXSettingsChanged(wxCommandEvent& event)
|
||||
case ID_SAFETEXTURECACHE:
|
||||
g_Config.bSafeTextureCache = m_SafeTextureCache->IsChecked();
|
||||
break;
|
||||
case ID_DLISTCACHING:
|
||||
g_Config.bDlistCachingEnable = m_DlistCaching->IsChecked();
|
||||
break;
|
||||
case ID_RADIO_SAFETEXTURECACHE_SAFE:
|
||||
g_Config.iSafeTextureCache_ColorSamples = 0;
|
||||
break;
|
||||
|
@ -100,7 +100,7 @@ class GFXConfigDialogDX : public wxDialog
|
||||
wxRadioButton *m_Radio_SafeTextureCache_Fast;
|
||||
wxRadioButton *m_Radio_SafeTextureCache_Normal;
|
||||
wxRadioButton *m_Radio_SafeTextureCache_Safe;
|
||||
|
||||
wxCheckBox *m_DlistCaching;
|
||||
//Enhancements Tab
|
||||
wxCheckBox *m_ForceFiltering;
|
||||
wxCheckBox *m_MaxAnisotropy;
|
||||
@ -141,6 +141,7 @@ class GFXConfigDialogDX : public wxDialog
|
||||
ID_RADIO_SAFETEXTURECACHE_SAFE,
|
||||
ID_RADIO_SAFETEXTURECACHE_NORMAL,
|
||||
ID_RADIO_SAFETEXTURECACHE_FAST,
|
||||
ID_DLISTCACHING,
|
||||
ID_FORCEFILTERING,
|
||||
ID_FORCEANISOTROPY,
|
||||
ID_LOADHIRESTEXTURES,
|
||||
|
@ -76,6 +76,7 @@ BEGIN_EVENT_TABLE(GFXConfigDialogOGL,wxDialog)
|
||||
EVT_CHECKBOX(ID_CHECKBOX_DISABLECOPYEFB, GFXConfigDialogOGL::AdvancedSettingsChanged)
|
||||
EVT_RADIOBUTTON(ID_RADIO_COPYEFBTORAM, GFXConfigDialogOGL::AdvancedSettingsChanged)
|
||||
EVT_RADIOBUTTON(ID_RADIO_COPYEFBTOGL, GFXConfigDialogOGL::AdvancedSettingsChanged)
|
||||
EVT_CHECKBOX(ID_DLISTCACHING, GFXConfigDialogOGL::AdvancedSettingsChanged)
|
||||
EVT_CHOICE(ID_PHACKVALUE, GFXConfigDialogOGL::GeneralSettingsChanged)
|
||||
EVT_CHOICE(ID_POSTSHADER, GFXConfigDialogOGL::GeneralSettingsChanged)
|
||||
EVT_BUTTON(ID_RELOADSHADER, GFXConfigDialogOGL::ReloadShaderClick)
|
||||
@ -230,7 +231,7 @@ void GFXConfigDialogOGL::InitializeGUIValues()
|
||||
m_DisableTexturing->SetValue(g_Config.bDisableTexturing);
|
||||
m_DstAlphaPass->SetValue(g_Config.bDstAlphaPass);
|
||||
m_DisableFog->SetValue(g_Config.bDisableFog);
|
||||
|
||||
m_DlistCaching->SetValue(g_Config.bDlistCachingEnable);
|
||||
m_CheckBox_DisableCopyEFB->SetValue(g_Config.bEFBCopyDisable);
|
||||
g_Config.bCopyEFBToTexture ? m_Radio_CopyEFBToGL->SetValue(true) : m_Radio_CopyEFBToRAM->SetValue(true);
|
||||
|
||||
@ -251,6 +252,7 @@ void GFXConfigDialogOGL::InitializeGUIValues()
|
||||
m_Radio_SafeTextureCache_Normal->SetValue(true);
|
||||
else
|
||||
m_Radio_SafeTextureCache_Fast->SetValue(true);
|
||||
|
||||
}
|
||||
|
||||
void GFXConfigDialogOGL::InitializeGUITooltips()
|
||||
@ -317,6 +319,7 @@ void GFXConfigDialogOGL::InitializeGUITooltips()
|
||||
wxT("[This option will apply immediately and does not require a restart to take effect.]"));
|
||||
m_Radio_SafeTextureCache_Fast->SetToolTip(
|
||||
wxT("[This option will apply immediately and does not require a restart to take effect.]"));
|
||||
m_DlistCaching->SetToolTip(wxT("This will speed up things a little but still have some glitches in certain games."));
|
||||
}
|
||||
|
||||
void GFXConfigDialogOGL::CreateGUIControls()
|
||||
@ -452,7 +455,7 @@ void GFXConfigDialogOGL::CreateGUIControls()
|
||||
m_CheckBox_DisableCopyEFB = new wxCheckBox(m_PageAdvanced, ID_CHECKBOX_DISABLECOPYEFB, wxT("Disable"));
|
||||
m_Radio_CopyEFBToRAM = new wxRadioButton(m_PageAdvanced, ID_RADIO_COPYEFBTORAM, wxT("To RAM (accuracy)"));
|
||||
m_Radio_CopyEFBToGL = new wxRadioButton(m_PageAdvanced, ID_RADIO_COPYEFBTOGL, wxT("To GL texture (performance)"));
|
||||
|
||||
m_DlistCaching = new wxCheckBox(m_PageAdvanced, ID_DLISTCACHING, wxT("Use Dlist Caching"));
|
||||
// Utility
|
||||
sbUtilities = new wxStaticBoxSizer(wxVERTICAL, m_PageAdvanced, wxT("Utilities"));
|
||||
m_DumpTextures = new wxCheckBox(m_PageAdvanced, ID_DUMPTEXTURES, wxT("Dump textures"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
|
||||
@ -468,7 +471,7 @@ void GFXConfigDialogOGL::CreateGUIControls()
|
||||
m_Radio_SafeTextureCache_Safe = new wxRadioButton(m_PageAdvanced, ID_RADIO_SAFETEXTURECACHE_SAFE, wxT("Safe"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP);
|
||||
m_Radio_SafeTextureCache_Normal = new wxRadioButton(m_PageAdvanced, ID_RADIO_SAFETEXTURECACHE_NORMAL, wxT("Normal"));
|
||||
m_Radio_SafeTextureCache_Fast = new wxRadioButton(m_PageAdvanced, ID_RADIO_SAFETEXTURECACHE_FAST, wxT("Fast"));
|
||||
|
||||
|
||||
// Sizers
|
||||
sHacks->Add(m_PhackvalueCB, 0, wxTOP, 0);
|
||||
sbHacks = new wxStaticBoxSizer(wxHORIZONTAL, m_PageAdvanced, wxT("Safe Texture Cache"));
|
||||
@ -477,6 +480,7 @@ void GFXConfigDialogOGL::CreateGUIControls()
|
||||
sbHacks->Add(m_Radio_SafeTextureCache_Safe, 0, wxALL, 5);
|
||||
sbHacks->Add(m_Radio_SafeTextureCache_Normal, 0, wxALL, 5);
|
||||
sbHacks->Add(m_Radio_SafeTextureCache_Fast, 0, wxALL, 5);
|
||||
sbHacks->AddStretchSpacer();
|
||||
sHacks->Add(sbHacks, 0, wxEXPAND | (wxTOP), 5);
|
||||
|
||||
// Sizers
|
||||
@ -498,6 +502,8 @@ void GFXConfigDialogOGL::CreateGUIControls()
|
||||
sRendering->Add(m_DisableTexturing, wxGBPosition(2, 0), wxGBSpan(1, 1), wxALL, 4);
|
||||
sRendering->Add(m_DstAlphaPass, wxGBPosition(3, 0), wxGBSpan(1, 1), wxALL, 4);
|
||||
sRendering->Add(m_DisableFog, wxGBPosition(4, 0), wxGBSpan(1, 1), wxALL, 4);
|
||||
sRendering->Add(m_DlistCaching, wxGBPosition(5, 0), wxGBSpan(1, 1), wxALL, 4);
|
||||
|
||||
sRenderBoxRow1->Add(sRendering, 0, wxALL|wxEXPAND, 1);
|
||||
wxStaticBoxSizer *sSBox = new wxStaticBoxSizer(m_StaticBox_EFB, wxVERTICAL);
|
||||
wxBoxSizer *sStrip1 = new wxBoxSizer(wxHORIZONTAL);
|
||||
@ -707,6 +713,9 @@ void GFXConfigDialogOGL::AdvancedSettingsChanged(wxCommandEvent& event)
|
||||
case ID_SAFETEXTURECACHE:
|
||||
g_Config.bSafeTextureCache = m_SafeTextureCache->IsChecked();
|
||||
break;
|
||||
case ID_DLISTCACHING:
|
||||
g_Config.bDlistCachingEnable = m_DlistCaching->IsChecked();
|
||||
break;
|
||||
case ID_RADIO_SAFETEXTURECACHE_SAFE:
|
||||
g_Config.iSafeTextureCache_ColorSamples = 0;
|
||||
break;
|
||||
|
@ -128,6 +128,7 @@ class GFXConfigDialogOGL : public wxDialog
|
||||
wxRadioButton *m_Radio_SafeTextureCache_Safe;
|
||||
wxRadioButton *m_Radio_SafeTextureCache_Normal;
|
||||
wxRadioButton *m_Radio_SafeTextureCache_Fast;
|
||||
wxCheckBox *m_DlistCaching;
|
||||
// Screen size
|
||||
wxStaticText *m_TextScreenWidth, *m_TextScreenHeight, *m_TextScreenLeft, *m_TextScreenTop;
|
||||
wxSlider *m_SliderWidth, *m_SliderHeight, *m_SliderLeft, *m_SliderTop;
|
||||
@ -182,6 +183,7 @@ class GFXConfigDialogOGL : public wxDialog
|
||||
ID_RADIO_SAFETEXTURECACHE_FAST,
|
||||
ID_HACK,
|
||||
ID_PHACKVALUE,
|
||||
ID_DLISTCACHING,
|
||||
|
||||
ID_DUMPTEXTURES,
|
||||
ID_HIRESTEXTURES,
|
||||
@ -200,6 +202,7 @@ class GFXConfigDialogOGL : public wxDialog
|
||||
ID_POSTSHADERTEXT,
|
||||
ID_RELOADSHADER,
|
||||
ID_EDITSHADER,
|
||||
|
||||
};
|
||||
|
||||
void LoadShaders();
|
||||
|
Loading…
x
Reference in New Issue
Block a user