mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 13:57:57 -07:00
72e3f1ecec
Making changes to ConfigManager.h has always been a pain, because it means rebuilding half of Dolphin, since a lot of files depend on and include this header. However, it turns out some includes are unnecessary. This commit removes ConfigManager includes from files which don't contain SConfig or GPUDeterminismMode or GPU_DETERMINISM (which means the ConfigManager include is not used). (I've also had to get rid of some indirect includes.)
94 lines
2.1 KiB
C++
94 lines
2.1 KiB
C++
// Copyright 2011 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <tuple>
|
|
|
|
#include "Common/GL/GLUtil.h"
|
|
#include "Common/LinearDiskCache.h"
|
|
|
|
#include "VideoCommon/GeometryShaderGen.h"
|
|
#include "VideoCommon/PixelShaderGen.h"
|
|
#include "VideoCommon/VertexShaderGen.h"
|
|
|
|
namespace OGL
|
|
{
|
|
class SHADERUID
|
|
{
|
|
public:
|
|
VertexShaderUid vuid;
|
|
PixelShaderUid puid;
|
|
GeometryShaderUid guid;
|
|
|
|
bool operator<(const SHADERUID& r) const
|
|
{
|
|
return std::tie(puid, vuid, guid) < std::tie(r.puid, r.vuid, r.guid);
|
|
}
|
|
|
|
bool operator==(const SHADERUID& r) const
|
|
{
|
|
return std::tie(puid, vuid, guid) == std::tie(r.puid, r.vuid, r.guid);
|
|
}
|
|
};
|
|
|
|
struct SHADER
|
|
{
|
|
SHADER() : glprogid(0) {}
|
|
void Destroy()
|
|
{
|
|
glDeleteProgram(glprogid);
|
|
glprogid = 0;
|
|
}
|
|
GLuint glprogid; // OpenGL program id
|
|
|
|
std::string strvprog, strpprog, strgprog;
|
|
|
|
void SetProgramVariables();
|
|
void SetProgramBindings();
|
|
void Bind();
|
|
};
|
|
|
|
class ProgramShaderCache
|
|
{
|
|
public:
|
|
struct PCacheEntry
|
|
{
|
|
SHADER shader;
|
|
bool in_cache;
|
|
|
|
void Destroy() { shader.Destroy(); }
|
|
};
|
|
|
|
static PCacheEntry GetShaderProgram();
|
|
static SHADER* SetShader(DSTALPHA_MODE dstAlphaMode, u32 primitive_type);
|
|
static void GetShaderId(SHADERUID* uid, DSTALPHA_MODE dstAlphaMode, u32 primitive_type);
|
|
|
|
static bool CompileShader(SHADER& shader, const std::string& vcode, const std::string& pcode,
|
|
const std::string& gcode = "");
|
|
static GLuint CompileSingleShader(GLuint type, const std::string& code);
|
|
static void UploadConstants();
|
|
|
|
static void Init();
|
|
static void Shutdown();
|
|
static void CreateHeader();
|
|
|
|
private:
|
|
class ProgramShaderCacheInserter : public LinearDiskCacheReader<SHADERUID, u8>
|
|
{
|
|
public:
|
|
void Read(const SHADERUID& key, const u8* value, u32 value_size) override;
|
|
};
|
|
|
|
typedef std::map<SHADERUID, PCacheEntry> PCache;
|
|
static PCache pshaders;
|
|
static PCacheEntry* last_entry;
|
|
static SHADERUID last_uid;
|
|
|
|
static u32 s_ubo_buffer_size;
|
|
static s32 s_ubo_align;
|
|
};
|
|
|
|
} // namespace OGL
|