Stop using std::pair and std::map. Switch over to u64 and std::unordered_map. Provides a very small speed boost.
This commit is contained in:
parent
c5fa3e0f3d
commit
d94f3c4155
|
@ -37,7 +37,11 @@ GLenum ProgramFormat;
|
||||||
|
|
||||||
GLuint ProgramShaderCache::PCacheEntry::prog_format = 0;
|
GLuint ProgramShaderCache::PCacheEntry::prog_format = 0;
|
||||||
|
|
||||||
std::pair<u32, u32> ProgramShaderCache::CurrentShaderProgram;
|
u64 ProgramShaderCache::CurrentShaderProgram;
|
||||||
|
u64 Create_Pair(u32 key1, u32 key2)
|
||||||
|
{
|
||||||
|
return (((u64)key1) << 32) | key2;
|
||||||
|
}
|
||||||
const char *UniformNames[NUM_UNIFORMS] =
|
const char *UniformNames[NUM_UNIFORMS] =
|
||||||
{
|
{
|
||||||
// PIXEL SHADER UNIFORMS
|
// PIXEL SHADER UNIFORMS
|
||||||
|
@ -142,7 +146,7 @@ void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<u32, u32> ShaderPair = std::make_pair(PS, VS);
|
u64 ShaderPair = Create_Pair(PS, VS);
|
||||||
|
|
||||||
// program is already bound
|
// program is already bound
|
||||||
if(ShaderPair == CurrentShaderProgram) return;
|
if(ShaderPair == CurrentShaderProgram) return;
|
||||||
|
@ -264,7 +268,7 @@ void ProgramShaderCache::Init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
CurrentProgram = 0;
|
CurrentProgram = 0;
|
||||||
CurrentShaderProgram = std::pair<u32,u32>(0,0);
|
CurrentShaderProgram = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProgramShaderCache::Shutdown(void)
|
void ProgramShaderCache::Shutdown(void)
|
||||||
|
|
|
@ -15,7 +15,8 @@
|
||||||
// Official SVN repository and contact information can be found at
|
// Official SVN repository and contact information can be found at
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
#pragma once
|
#ifndef PROGRAM_SHADER_CACHE_H_
|
||||||
|
#define PROGRAM_SHADER_CACHE_H_
|
||||||
|
|
||||||
#include "GLUtil.h"
|
#include "GLUtil.h"
|
||||||
|
|
||||||
|
@ -27,16 +28,18 @@
|
||||||
#include "LinearDiskCache.h"
|
#include "LinearDiskCache.h"
|
||||||
#include "ConfigManager.h"
|
#include "ConfigManager.h"
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
namespace OGL
|
namespace OGL
|
||||||
{
|
{
|
||||||
|
|
||||||
const int NUM_UNIFORMS = 19;
|
const int NUM_UNIFORMS = 19;
|
||||||
extern const char *UniformNames[NUM_UNIFORMS];
|
extern const char *UniformNames[NUM_UNIFORMS];
|
||||||
|
u64 Create_Pair(u32 key1, u32 key2);
|
||||||
|
|
||||||
class ProgramShaderCache
|
class ProgramShaderCache
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::pair<u32, u32> ShaderUID;
|
|
||||||
|
|
||||||
struct PCacheEntry
|
struct PCacheEntry
|
||||||
{
|
{
|
||||||
|
@ -59,7 +62,7 @@ public:
|
||||||
{
|
{
|
||||||
psid = pix_id;
|
psid = pix_id;
|
||||||
vsid = vert_id;
|
vsid = vert_id;
|
||||||
uid = std::make_pair(psid, vsid);
|
uid = Create_Pair(psid, vsid);
|
||||||
prog_id = glCreateProgram();
|
prog_id = glCreateProgram();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +150,7 @@ private:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::map<ShaderUID, PCacheEntry> PCache;
|
typedef std::unordered_map<u64, PCacheEntry> PCache;
|
||||||
|
|
||||||
static PCache pshaders;
|
static PCache pshaders;
|
||||||
static GLuint CurrentProgram;
|
static GLuint CurrentProgram;
|
||||||
|
@ -164,3 +167,4 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace OGL
|
} // namespace OGL
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue