| Index: gpu/command_buffer/service/program_manager.h
|
| diff --git a/gpu/command_buffer/service/program_manager.h b/gpu/command_buffer/service/program_manager.h
|
| index 964b9337be2c4a39b784bce23c02c534ee0e6416..bf8b34864496060bc2a65df30dd0d7f6888a03a5 100644
|
| --- a/gpu/command_buffer/service/program_manager.h
|
| +++ b/gpu/command_buffer/service/program_manager.h
|
| @@ -11,7 +11,6 @@
|
| #include "base/basictypes.h"
|
| #include "base/logging.h"
|
| #include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| #include "gpu/command_buffer/service/common_decoder.h"
|
| #include "gpu/command_buffer/service/gl_utils.h"
|
| #include "gpu/command_buffer/service/shader_manager.h"
|
| @@ -19,6 +18,8 @@
|
|
|
| namespace gpu {
|
| namespace gles2 {
|
| +class ProgramCache;
|
| +class FeatureInfo;
|
|
|
| // Tracks the Programs.
|
| //
|
| @@ -26,6 +27,8 @@ namespace gles2 {
|
| // need to be shared by multiple GLES2Decoders.
|
| class GPU_EXPORT ProgramManager {
|
| public:
|
| + typedef std::map<std::string, GLint> LocationMap;
|
| +
|
| // This is used to track which attributes a particular program needs
|
| // so we can verify at glDrawXXX time that every attribute is either disabled
|
| // or if enabled that it points to a valid source.
|
| @@ -150,7 +153,10 @@ class GPU_EXPORT ProgramManager {
|
| bool CanLink() const;
|
|
|
| // Performs glLinkProgram and related activities.
|
| - bool Link();
|
| + bool Link(ShaderManager* manager,
|
| + ShaderTranslator* vertex_translator,
|
| + ShaderTranslator* fragment_shader,
|
| + FeatureInfo* feature_info);
|
|
|
| // Performs glValidateProgram and related activities.
|
| void Validate();
|
| @@ -178,12 +184,15 @@ class GPU_EXPORT ProgramManager {
|
| // We only consider the declared attributes in the program.
|
| bool DetectAttribLocationBindingConflicts() const;
|
|
|
| + // Visible for testing
|
| + const LocationMap& bind_attrib_location_map() const {
|
| + return bind_attrib_location_map_;
|
| + }
|
| +
|
| private:
|
| friend class base::RefCounted<ProgramInfo>;
|
| friend class ProgramManager;
|
|
|
| - typedef std::map<std::string, GLint> LocationMap;
|
| -
|
| ~ProgramInfo();
|
|
|
| void set_log_info(const char* str) {
|
| @@ -299,7 +308,7 @@ class GPU_EXPORT ProgramManager {
|
| LocationMap bind_uniform_location_map_;
|
| };
|
|
|
| - ProgramManager();
|
| + explicit ProgramManager(ProgramCache* program_cache);
|
| ~ProgramManager();
|
|
|
| // Must call before destruction.
|
| @@ -314,6 +323,9 @@ class GPU_EXPORT ProgramManager {
|
| // Gets a client id for a given service id.
|
| bool GetClientId(GLuint service_id, GLuint* client_id) const;
|
|
|
| + // Gets the shader cache
|
| + ProgramCache* program_cache() const;
|
| +
|
| // Marks a program as deleted. If it is not used the info will be deleted.
|
| void MarkAsDeleted(ShaderManager* shader_manager, ProgramInfo* info);
|
|
|
| @@ -334,7 +346,19 @@ class GPU_EXPORT ProgramManager {
|
|
|
| static int32 MakeFakeLocation(int32 index, int32 element);
|
|
|
| + // Cache-aware shader compiling. If no cache or if the shader wasn't
|
| + // previously compiled, ForceCompileShader is called
|
| + void DoCompileShader(ShaderManager::ShaderInfo* info,
|
| + ShaderTranslator* translator,
|
| + FeatureInfo* feature_info);
|
| +
|
| private:
|
| + // Actually compiles the shader
|
| + void ForceCompileShader(const std::string* source,
|
| + ShaderManager::ShaderInfo* info,
|
| + ShaderTranslator* translator,
|
| + FeatureInfo* feature_info);
|
| +
|
| void StartTracking(ProgramInfo* info);
|
| void StopTracking(ProgramInfo* info);
|
|
|
| @@ -354,6 +378,8 @@ class GPU_EXPORT ProgramManager {
|
| // Used to clear uniforms.
|
| std::vector<uint8> zero_;
|
|
|
| + ProgramCache* program_cache_;
|
| +
|
| void RemoveProgramInfoIfUnused(
|
| ShaderManager* shader_manager, ProgramInfo* info);
|
|
|
|
|