a little simplification for the dlist id and a little correction to YieldProcessor in windows.
in windows sleep(0) behaves more like what is defined in the yield instruction so use it instead. In my amd 6 core system brings a nice 8% speedup so please test I'm interested in knowing the behavior in different systems. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7261 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
d56390407f
commit
ccc12c6950
|
@ -133,14 +133,13 @@ void SetCurrentThreadAffinity(u32 mask);
|
|||
void SleepCurrentThread(int ms);
|
||||
void SwitchCurrentThread(); // On Linux, this is equal to sleep 1ms
|
||||
|
||||
// YieldCPU: This function is only effective on HyperThreading CPU
|
||||
// Use this function during a spin-wait to make the current thread
|
||||
// relax while another thread is working. This may be more efficient
|
||||
// than using events because event functions use kernel calls.
|
||||
inline void YieldCPU()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
YieldProcessor();
|
||||
Sleep(0);
|
||||
#elif defined(_M_IX86) || defined(_M_X64)
|
||||
usleep(1);
|
||||
#endif
|
||||
|
|
|
@ -213,27 +213,20 @@ inline u64 CreateMapId(u32 address, u32 size)
|
|||
|
||||
inline u64 CreateVMapId(u32 VATUSED)
|
||||
{
|
||||
u64 vmap_id = 0;
|
||||
u64 vmap_id = 0x9368e53c2f6af274 ^ g_VtxDesc.Hex;
|
||||
for(int i = 0; i < 8 ; i++)
|
||||
{
|
||||
if(VATUSED & (1 << i))
|
||||
{
|
||||
if(vmap_id != 0)
|
||||
{
|
||||
vmap_id ^= (((u64)g_VtxAttr[i].g0.Hex) | (((u64)g_VtxAttr[i].g1.Hex) << 32)) ^ (((u64)g_VtxAttr[i].g2.Hex) << 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
vmap_id = (((u64)g_VtxAttr[i].g0.Hex) | (((u64)g_VtxAttr[i].g1.Hex) << 32)) ^ (((u64)g_VtxAttr[i].g2.Hex) << 16);
|
||||
}
|
||||
vmap_id ^= (((u64)g_VtxAttr[i].g0.Hex) | (((u64)g_VtxAttr[i].g1.Hex) << 32)) ^ (((u64)g_VtxAttr[i].g2.Hex) << i);
|
||||
}
|
||||
}
|
||||
for(int i = 0; i < 12; i++)
|
||||
{
|
||||
if(VATUSED & (1 << (i + 16)))
|
||||
vmap_id = vmap_id ^ ((u64)cached_arraybases[i]) ^ (((u64)arraystrides[i]) << 16);
|
||||
vmap_id ^= (((u64)cached_arraybases[i]) ^ (((u64)arraystrides[i]) << i));
|
||||
}
|
||||
return vmap_id ^ g_VtxDesc.Hex;
|
||||
return vmap_id;
|
||||
}
|
||||
|
||||
typedef std::map<u64, CachedDisplayList> DLMap;
|
||||
|
|
Loading…
Reference in New Issue