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:
Ryan Houdek 2013-01-28 15:18:54 -06:00
parent c5fa3e0f3d
commit d94f3c4155
2 changed files with 15 additions and 7 deletions

View File

@ -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)

View File

@ -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