summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/ProgramShaderCache.h
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2018-02-25 01:15:35 +1000
committerStenzek <stenzek@gmail.com>2018-03-10 15:56:30 +1000
commitdec0c3bce85ceda89ea05f00b94aad00e675598d (patch)
tree8c967a47d8a531ae3f0245e419d7ec652535ee3a /Source/Core/VideoBackends/OGL/ProgramShaderCache.h
parent24df896eb8d1520706b086039743ef2dca7ce6df (diff)
Move shader caches to VideoCommon
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.h')
-rw-r--r--Source/Core/VideoBackends/OGL/ProgramShaderCache.h148
1 files changed, 0 insertions, 148 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.h b/Source/Core/VideoBackends/OGL/ProgramShaderCache.h
index 6db44460a1..af2aa10383 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.h
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.h
@@ -11,16 +11,6 @@
#include <unordered_map>
#include "Common/GL/GLUtil.h"
-#include "Common/LinearDiskCache.h"
-
-#include "VideoCommon/AsyncShaderCompiler.h"
-#include "VideoCommon/GeometryShaderGen.h"
-#include "VideoCommon/PixelShaderGen.h"
-#include "VideoCommon/UberShaderPixel.h"
-#include "VideoCommon/UberShaderVertex.h"
-#include "VideoCommon/VertexShaderGen.h"
-
-class cInterfaceBase;
namespace OGL
{
@@ -28,41 +18,6 @@ class OGLShader;
class GLVertexFormat;
class StreamBuffer;
-class SHADERUID
-{
-public:
- VertexShaderUid vuid;
- PixelShaderUid puid;
- GeometryShaderUid guid;
-
- bool operator<(const SHADERUID& r) const
- {
- return std::tie(vuid, puid, guid) < std::tie(r.vuid, r.puid, r.guid);
- }
-
- bool operator==(const SHADERUID& r) const
- {
- return std::tie(vuid, puid, guid) == std::tie(r.vuid, r.puid, r.guid);
- }
-};
-class UBERSHADERUID
-{
-public:
- UberShader::VertexShaderUid vuid;
- UberShader::PixelShaderUid puid;
- GeometryShaderUid guid;
-
- bool operator<(const UBERSHADERUID& r) const
- {
- return std::tie(vuid, puid, guid) < std::tie(r.vuid, r.puid, r.guid);
- }
-
- bool operator==(const UBERSHADERUID& r) const
- {
- return std::tie(vuid, puid, guid) == std::tie(r.vuid, r.puid, r.guid);
- }
-};
-
struct SHADER
{
void Destroy()
@@ -112,18 +67,6 @@ struct PipelineProgram
class ProgramShaderCache
{
public:
- struct PCacheEntry
- {
- SHADER shader;
- bool in_cache;
- bool pending;
-
- void Destroy() { shader.Destroy(); }
- };
-
- static PCacheEntry GetShaderProgram();
- static SHADER* SetShader(PrimitiveType primitive_type, const GLVertexFormat* vertex_format);
- static SHADER* SetUberShader(PrimitiveType primitive_type, const GLVertexFormat* vertex_format);
static void BindVertexFormat(const GLVertexFormat* vertex_format);
static void InvalidateVertexFormat();
static void InvalidateLastProgram();
@@ -141,11 +84,8 @@ public:
static void UploadConstants();
static void Init();
- static void Reload();
static void Shutdown();
static void CreateHeader();
- static void RetrieveAsyncShaders();
- static void PrecompileUberShaders();
static const PipelineProgram* GetPipelineProgram(const OGLShader* vertex_shader,
const OGLShader* geometry_shader,
@@ -153,103 +93,15 @@ public:
static void ReleasePipelineProgram(const PipelineProgram* prog);
private:
- template <typename UIDType>
- class ProgramShaderCacheInserter : public LinearDiskCacheReader<UIDType, u8>
- {
- public:
- ProgramShaderCacheInserter(std::map<UIDType, PCacheEntry>& shader_map)
- : m_shader_map(shader_map)
- {
- }
-
- void Read(const UIDType& key, const u8* value, u32 value_size) override
- {
- if (m_shader_map.find(key) != m_shader_map.end())
- return;
-
- PCacheEntry& entry = m_shader_map[key];
- if (!CreateCacheEntryFromBinary(&entry, value, value_size))
- {
- m_shader_map.erase(key);
- return;
- }
- }
-
- private:
- std::map<UIDType, PCacheEntry>& m_shader_map;
- };
-
- class SharedContextAsyncShaderCompiler : public VideoCommon::AsyncShaderCompiler
- {
- protected:
- bool WorkerThreadInitMainThread(void** param) override;
- bool WorkerThreadInitWorkerThread(void* param) override;
- void WorkerThreadExit(void* param) override;
- };
-
- struct SharedContextData
- {
- std::unique_ptr<cInterfaceBase> context;
- GLuint prerender_FBO;
- GLuint prerender_FBO_tex;
- GLuint prerender_FBO_depth;
- GLuint prerender_VBO;
- GLuint prerender_VAO;
- GLuint prerender_IBO;
- };
-
- class ShaderCompileWorkItem : public VideoCommon::AsyncShaderCompiler::WorkItem
- {
- public:
- explicit ShaderCompileWorkItem(const SHADERUID& uid);
-
- bool Compile() override;
- void Retrieve() override;
-
- private:
- SHADERUID m_uid;
- SHADER m_program;
- };
-
- class UberShaderCompileWorkItem : public VideoCommon::AsyncShaderCompiler::WorkItem
- {
- public:
- explicit UberShaderCompileWorkItem(const UBERSHADERUID& uid);
-
- bool Compile() override;
- void Retrieve() override;
-
- private:
- UBERSHADERUID m_uid;
- SHADER m_program;
- };
-
- typedef std::map<SHADERUID, PCacheEntry> PCache;
- typedef std::map<UBERSHADERUID, PCacheEntry> UberPCache;
typedef std::unordered_map<PipelineProgramKey, std::unique_ptr<PipelineProgram>,
PipelineProgramKeyHash>
PipelineProgramMap;
static void CreateAttributelessVAO();
- static GLuint CreateProgramFromBinary(const u8* value, u32 value_size);
- static bool CreateCacheEntryFromBinary(PCacheEntry* entry, const u8* value, u32 value_size);
- static void LoadProgramBinaries();
- static void SaveProgramBinaries();
- static void DestroyShaders();
- static void CreatePrerenderArrays(SharedContextData* data);
- static void DestroyPrerenderArrays(SharedContextData* data);
- static void DrawPrerenderArray(const SHADER& shader, PrimitiveType primitive_type);
- static PCache pshaders;
- static UberPCache ubershaders;
static PipelineProgramMap pipelineprograms;
static std::mutex pipelineprogramlock;
- static PCacheEntry* last_entry;
- static PCacheEntry* last_uber_entry;
- static SHADERUID last_uid;
- static UBERSHADERUID last_uber_uid;
- static std::unique_ptr<SharedContextAsyncShaderCompiler> s_async_compiler;
static u32 s_ubo_buffer_size;
static s32 s_ubo_align;