summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/program_cache.h
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-19 18:52:02 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-19 18:52:02 +0000
commit7f1a51c32f9c8c5a44118483c1255328d7983fce (patch)
tree5ca178adcc32507a067827922332f39c8bd64135 /gpu/command_buffer/service/program_cache.h
parentafaaacd757849f6f9117aa99bd582f52a152aa9c (diff)
downloadchromium_src-7f1a51c32f9c8c5a44118483c1255328d7983fce.zip
chromium_src-7f1a51c32f9c8c5a44118483c1255328d7983fce.tar.gz
chromium_src-7f1a51c32f9c8c5a44118483c1255328d7983fce.tar.bz2
Revert 147328 - Current status of patch:
- In-memory cache - maximum in memory limit (currently 6mb) - lru eviction - Cache includes saving the attribute + uniform mappings Wiring: - Added bindings for glProgramBinary and glGetProgramBinary - Plumbed the shader cache from gl_channel_manager to program_manager Refactoring: - moved the meat of DoCompile to the ProgramManager New: - added field to ShaderInfo to store if we have a possible pending cache compile - exposed attrib_map and uniform_map in ShaderInfo for the cache - program_cache base class with in-memory status storage - Simple memory_program_cache implementation, stores programs with lru eviction - Added caching logic to DoCompileShader in gles2_cmd_decoder and Link in program_manager Design doc: https://docs.google.com/document/d/1Vceem-nF4TCICoeGSh7OMXxfGuJEJYblGXRgN9V9hcE/edit BUG=88572 Review URL: https://chromiumcodereview.appspot.com/10534173 TBR=dmurph@chromium.org Review URL: https://chromiumcodereview.appspot.com/10795037 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@147497 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/program_cache.h')
-rw-r--r--gpu/command_buffer/service/program_cache.h122
1 files changed, 0 insertions, 122 deletions
diff --git a/gpu/command_buffer/service/program_cache.h b/gpu/command_buffer/service/program_cache.h
deleted file mode 100644
index 77f8b13..0000000
--- a/gpu/command_buffer/service/program_cache.h
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef GPU_COMMAND_BUFFER_SERVICE_PROGRAM_CACHE_H_
-#define GPU_COMMAND_BUFFER_SERVICE_PROGRAM_CACHE_H_
-
-#include <map>
-#include <string>
-
-#include "base/hash_tables.h"
-#include "base/sha1.h"
-#include "gpu/command_buffer/common/gles2_cmd_format.h"
-#include "gpu/command_buffer/service/shader_manager.h"
-
-namespace gpu {
-namespace gles2 {
-
-// Program cache base class for caching linked gpu programs
-class GPU_EXPORT ProgramCache {
- public:
- static const size_t kHashLength = base::kSHA1Length;
-
- typedef std::map<std::string, GLint> LocationMap;
-
- enum CompiledShaderStatus {
- COMPILATION_UNKNOWN,
- COMPILATION_SUCCEEDED
- };
-
- enum LinkedProgramStatus {
- LINK_UNKNOWN,
- LINK_SUCCEEDED
- };
-
- enum ProgramLoadResult {
- PROGRAM_LOAD_FAILURE,
- PROGRAM_LOAD_SUCCESS
- };
-
- ProgramCache();
- virtual ~ProgramCache();
-
- CompiledShaderStatus GetShaderCompilationStatus(
- const std::string& shader_src) const;
- void ShaderCompilationSucceeded(const std::string& shader_src);
-
- LinkedProgramStatus GetLinkedProgramStatus(
- const std::string& untranslated_a,
- const std::string& untranslated_b,
- const LocationMap* bind_attrib_location_map) const;
-
- virtual ProgramLoadResult LoadLinkedProgram(
- GLuint program,
- ShaderManager::ShaderInfo* shader_a,
- ShaderManager::ShaderInfo* shader_b,
- const LocationMap* bind_attrib_location_map) const = 0;
- virtual void SaveLinkedProgram(
- GLuint program,
- const ShaderManager::ShaderInfo* shader_a,
- const ShaderManager::ShaderInfo* shader_b,
- const LocationMap* bind_attrib_location_map) = 0;
-
- // clears the cache
- void Clear();
-
- // Only for testing
- void LinkedProgramCacheSuccess(const std::string& shader_a,
- const std::string& shader_b,
- const LocationMap* bind_attrib_location_map);
-
- protected:
- // called by implementing class after a shader was successfully cached
- void LinkedProgramCacheSuccess(const std::string& program_hash,
- const std::string& shader_a_hash,
- const std::string& shader_b_hash);
-
- // result is not null terminated
- void ComputeShaderHash(const std::string& shader,
- char* result) const;
-
- // result is not null terminated. hashed shaders are expected to be
- // kHashLength in length
- void ComputeProgramHash(
- const char* hashed_shader_0,
- const char* hashed_shader_1,
- const LocationMap* bind_attrib_location_map,
- char* result) const;
-
- void Evict(const std::string& program_hash,
- const std::string& shader_0_hash,
- const std::string& shader_1_hash);
-
- private:
- struct CompiledShaderInfo {
- CompiledShaderInfo() : status(COMPILATION_UNKNOWN), ref_count(0) { }
- explicit CompiledShaderInfo(CompiledShaderStatus status_)
- : status(status_),
- ref_count(0) { }
-
- CompiledShaderStatus status;
- size_t ref_count;
- };
-
- typedef base::hash_map<std::string,
- CompiledShaderInfo> CompileStatusMap;
- typedef base::hash_map<std::string,
- LinkedProgramStatus> LinkStatusMap;
-
- // called to clear the backend cache
- virtual void ClearBackend() = 0;
-
- CompileStatusMap shader_status_;
- LinkStatusMap link_status_;
-
- DISALLOW_COPY_AND_ASSIGN(ProgramCache);
-};
-
-} // namespace gles2
-} // namespace gpu
-
-#endif // GPU_COMMAND_BUFFER_SERVICE_PROGRAM_CACHE_H_