diff options
| author | Stenzek <stenzek@gmail.com> | 2018-02-25 01:15:35 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2018-03-10 15:56:30 +1000 |
| commit | dec0c3bce85ceda89ea05f00b94aad00e675598d (patch) | |
| tree | 8c967a47d8a531ae3f0245e419d7ec652535ee3a /Source/Core/VideoBackends/OGL/ProgramShaderCache.h | |
| parent | 24df896eb8d1520706b086039743ef2dca7ce6df (diff) | |
Move shader caches to VideoCommon
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.h')
| -rw-r--r-- | Source/Core/VideoBackends/OGL/ProgramShaderCache.h | 148 |
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; |
