From ec08914905ca1c4fe3b2456a9cc037a3f7eedd49 Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Wed, 10 Apr 2013 12:54:22 +0200 Subject: Move Shader UID mismatch checking to VideoCommon. --- .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 64 ---------------------- 1 file changed, 64 deletions(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 81621d2d38..0d571c29a9 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -23,9 +23,6 @@ #include "ImageWrite.h" #include "Render.h" -#include -#include - namespace OGL { @@ -356,73 +353,12 @@ GLuint ProgramShaderCache::CompileSingleShader (GLuint type, const char* code ) return result; } -template UidT GetPartialUid(const SHADERUID& uid); -template<> PixelShaderUid GetPartialUid(const SHADERUID& uid) { return uid.puid; } -template<> VertexShaderUid GetPartialUid(const SHADERUID& uid) { return uid.vuid; } - -template const std::string& GetShaderCode(const SHADER& shader); -template<> const std::string& GetShaderCode(const SHADER& shader) { return shader.strpprog; } -template<> const std::string& GetShaderCode(const SHADER& shader) { return shader.strvprog; } - -template -void CheckForUidMismatch(const ProgramShaderCache::PCache& cache, CodeT& new_code, const UidT& new_uid) -{ - static std::map s_shaders; - static std::vector s_uids; - - bool uid_is_indexed = std::find(s_uids.begin(), s_uids.end(), new_uid) != s_uids.end(); - if (!uid_is_indexed) - { - s_uids.push_back(new_uid); - s_shaders[new_uid] = new_code.GetBuffer(); - } - else - { - // uid is already in the index => check if there's a shader with the same uid but different code - auto& old_code = s_shaders[new_uid]; - if (strcmp(old_code.c_str(), new_code.GetBuffer()) != 0) - { - static int num_failures = 0; - - char szTemp[MAX_PATH]; - sprintf(szTemp, "%s%ssuid_mismatch_%04i.txt", File::GetUserPath(D_DUMP_IDX).c_str(), - (typeid(UidT) == typeid(PixelShaderUid)) ? "p" : (typeid(UidT) == typeid(VertexShaderUid)) ? "v" : "o", - ++num_failures); - - // TODO: Should also dump uids - std::ofstream file; - OpenFStream(file, szTemp, std::ios_base::out); - file << "Old shader code:\n" << old_code; - file << "\n\nNew shader code:\n" << new_code.GetBuffer(); - file.close(); - - // TODO: Make this more idiot-proof - ERROR_LOG(VIDEO, "%s shader uid mismatch!", - (typeid(UidT) == typeid(PixelShaderUid)) ? "Pixel" : (typeid(UidT) == typeid(VertexShaderUid)) ? "Vertex" : "Other"); - } - } -} - - void ProgramShaderCache::GetShaderId(SHADERUID* uid, DSTALPHA_MODE dstAlphaMode, u32 components) { GetPixelShaderUid(uid->puid, dstAlphaMode, API_OPENGL, components); GetVertexShaderUid(uid->vuid, components, API_OPENGL); - - if (g_ActiveConfig.bEnableShaderDebugging) - { - PixelShaderCode pcode; - VertexShaderCode vcode; - - GeneratePixelShaderCode(pcode, dstAlphaMode, API_OPENGL, components); - GenerateVertexShaderCode(vcode, components, API_OPENGL); - - CheckForUidMismatch(pshaders, pcode, uid->puid); - CheckForUidMismatch(pshaders, vcode, uid->vuid); - } } - ProgramShaderCache::PCacheEntry ProgramShaderCache::GetShaderProgram(void) { return *last_entry; -- cgit v1.2.3