Minor cleanups

This commit is contained in:
Henrik Rydgård committed 2015-10-14 11:18:45 +02:00
1 parent cdf61ad21a
commit 6bd1a43e20
2 files changed
+29 -25

No files matched your search

+24 -25
View File
@@ -15,15 +15,14 @@
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
#ifdef _WIN32
#define SHADERLOG
#endif
// #define SHADERLOG
#ifdef SHADERLOG
#if defined(_WIN32) && defined(SHADERLOG)
#include "Common/CommonWindows.h"
#endif
#include <map>
#include <cstdio>
#include "base/logging.h"
#include "math/math_util.h"
@@ -42,11 +41,16 @@
#include "Framebuffer.h"
#include "i18n/i18n.h"
Shader::Shader(const char *code, uint32_t shaderType, bool useHWTransform, const ShaderID &shaderID) : failed_(false), useHWTransform_(useHWTransform), id_(shaderID) {
Shader::Shader(const char *code, uint32_t shaderType, bool useHWTransform, const ShaderID &shaderID)
: id_(shaderID), failed_(false), useHWTransform_(useHWTransform) {
PROFILE_THIS_SCOPE("shadercomp");
source_ = code;
#ifdef SHADERLOG
#ifdef _WIN32
OutputDebugStringUTF8(code);
#else
printf("%s\n", code);
#endif
#endif
shader = glCreateShader(shaderType);
glShaderSource(shader, 1, &code, 0);
@@ -702,8 +706,11 @@ void LinkedShader::UpdateUniforms(u32 vertType) {
}
}
ShaderManager::ShaderManager() : lastShader_(NULL), globalDirty_(0xFFFFFFFF), shaderSwitchDirty_(0) {
ShaderManager::ShaderManager()
: lastShader_(nullptr), globalDirty_(0xFFFFFFFF), shaderSwitchDirty_(0) {
codeBuffer_ = new char[16384];
lastFSID_.set_invalid();
lastVSID_.set_invalid();
}
ShaderManager::~ShaderManager() {
@@ -725,8 +732,8 @@ void ShaderManager::Clear() {
fsCache_.clear();
vsCache_.clear();
globalDirty_ = 0xFFFFFFFF;
lastFSID_.clear();
lastVSID_.clear();
lastFSID_.set_invalid();
lastVSID_.set_invalid();
DirtyShader();
}
@@ -736,8 +743,8 @@ void ShaderManager::ClearCache(bool deleteThem) {
void ShaderManager::DirtyShader() {
// Forget the last shader ID
lastFSID_.clear();
lastVSID_.clear();
lastFSID_.set_invalid();
lastVSID_.set_invalid();
DirtyLastShader();
globalDirty_ = 0xFFFFFFFF;
shaderSwitchDirty_ = 0;
@@ -746,24 +753,16 @@ void ShaderManager::DirtyShader() {
void ShaderManager::DirtyLastShader() { // disables vertex arrays
if (lastShader_)
lastShader_->stop();
lastShader_ = 0;
lastShader_ = nullptr;
lastVShaderSame_ = false;
}
// This is to be used when debugging why incompatible shaders are being linked, like is
// happening as I write this in Tactics Ogre
bool ShaderManager::DebugAreShadersCompatibleForLinking(Shader *vs, Shader *fs) {
// Check clear mode flag just for starters.
ShaderID vsid = vs->ID();
ShaderID fsid = fs->ID();
// TODO: Make the flag fields more similar?
// Check DoTexture
if (((vsid.d[0] >> 4) & 1) != ((fsid.d[0] >> 1) & 1)) {
ERROR_LOG(G3D, "Texture enable flag mismatch!");
return false;
}
// ShaderID vsid = vs->ID();
// ShaderID fsid = fs->ID();
// TODO: Redo these checks.
return true;
}
@@ -848,7 +847,7 @@ LinkedShader *ShaderManager::ApplyFragmentShader(Shader *vs, int prim, u32 vertT
}
// Okay, we have both shaders. Let's see if there's a linked one.
LinkedShader *ls = NULL;
LinkedShader *ls = nullptr;
u32 switchDirty = shaderSwitchDirty_;
for (auto iter = linkedShaderCache_.begin(); iter != linkedShaderCache_.end(); ++iter) {
@@ -861,11 +860,11 @@ LinkedShader *ShaderManager::ApplyFragmentShader(Shader *vs, int prim, u32 vertT
}
shaderSwitchDirty_ = 0;
if (ls == NULL) {
if (ls == nullptr) {
// Check if we can link these.
#ifdef _DEBUG
if (!DebugAreShadersCompatibleForLinking(vs, fs)) {
return NULL;
return nullptr;
}
#endif
ls = new LinkedShader(vs, fs, vertType, vs->UseHWTransform(), lastShader_); // This does "use" automatically
+5
View File
@@ -34,6 +34,11 @@ struct ShaderID {
d[i] = 0;
}
}
void set_invalid() {
for (int i = 0; i < ARRAY_SIZE(d); i++) {
d[i] = 0xFFFFFFFF;
}
}
u32 d[2];
bool operator < (const ShaderID &other) const {