| Index: gpu/command_buffer/client/program_info_manager.h
|
| diff --git a/gpu/command_buffer/client/program_info_manager.h b/gpu/command_buffer/client/program_info_manager.h
|
| index 712b8ed489a0b6ed18c727b236d803665c57f25a..efbff73f08423072061b687f35d0810fbbdcf484 100644
|
| --- a/gpu/command_buffer/client/program_info_manager.h
|
| +++ b/gpu/command_buffer/client/program_info_manager.h
|
| @@ -5,12 +5,13 @@
|
| #ifndef GPU_COMMAND_BUFFER_CLIENT_PROGRAM_INFO_MANAGER_H_
|
| #define GPU_COMMAND_BUFFER_CLIENT_PROGRAM_INFO_MANAGER_H_
|
|
|
| -#include <GLES2/gl2.h>
|
| +#include <GLES3/gl3.h>
|
|
|
| #include <string>
|
| #include <vector>
|
|
|
| #include "base/containers/hash_tables.h"
|
| +#include "base/gtest_prod_util.h"
|
| #include "base/synchronization/lock.h"
|
| #include "gles2_impl_export.h"
|
| #include "gpu/command_buffer/client/gles2_implementation.h"
|
| @@ -48,8 +49,30 @@ class GLES2_IMPL_EXPORT ProgramInfoManager {
|
| GLES2Implementation* gl, GLuint program, GLuint index, GLsizei bufsize,
|
| GLsizei* length, GLint* size, GLenum* type, char* name);
|
|
|
| + GLuint GetUniformBlockIndex(
|
| + GLES2Implementation* gl, GLuint program, const char* name);
|
| +
|
| + bool GetActiveUniformBlockName(
|
| + GLES2Implementation* gl, GLuint program, GLuint index,
|
| + GLsizei buf_size, GLsizei* length, char* name);
|
| +
|
| + bool GetActiveUniformBlockiv(
|
| + GLES2Implementation* gl, GLuint program, GLuint index,
|
| + GLenum pname, GLint* params);
|
| +
|
| private:
|
| - class Program {
|
| + friend class ProgramInfoManagerTest;
|
| +
|
| + FRIEND_TEST_ALL_PREFIXES(ProgramInfoManagerTest, UpdateES3UniformBlocks);
|
| +
|
| + enum ProgramInfoType {
|
| + kES2,
|
| + kES3UniformBlocks,
|
| + kNone,
|
| + };
|
| +
|
| + // Need GLES2_IMPL_EXPORT for tests.
|
| + class GLES2_IMPL_EXPORT Program {
|
| public:
|
| struct UniformInfo {
|
| UniformInfo(GLsizei _size, GLenum _type, const std::string& _name);
|
| @@ -71,6 +94,17 @@ class GLES2_IMPL_EXPORT ProgramInfoManager {
|
| GLint location;
|
| std::string name;
|
| };
|
| + struct UniformBlock {
|
| + UniformBlock();
|
| + ~UniformBlock();
|
| +
|
| + GLuint binding;
|
| + GLuint data_size;
|
| + std::vector<GLuint> active_uniform_indices;
|
| + GLboolean referenced_by_vertex_shader;
|
| + GLboolean referenced_by_fragment_shader;
|
| + std::string name;
|
| + };
|
|
|
| Program();
|
| ~Program();
|
| @@ -89,15 +123,20 @@ class GLES2_IMPL_EXPORT ProgramInfoManager {
|
|
|
| bool GetProgramiv(GLenum pname, GLint* params);
|
|
|
| - // Updates the program info after a successful link.
|
| - void Update(GLES2Implementation* gl,
|
| - GLuint program,
|
| - const std::vector<int8>& result);
|
| + // Gets the index of a uniform block by name.
|
| + GLuint GetUniformBlockIndex(const std::string& name) const;
|
| + const UniformBlock* GetUniformBlock(GLuint index) const;
|
|
|
| - bool cached() const;
|
| + // Updates the ES2 only program info after a successful link.
|
| + void UpdateES2(const std::vector<int8>& result);
|
| +
|
| + // Updates the ES3 UniformBlock info after a successful link.
|
| + void UpdateES3UniformBlocks(const std::vector<int8>& result);
|
| +
|
| + bool IsCached(ProgramInfoType type) const;
|
|
|
| private:
|
| - bool cached_;
|
| + bool cached_es2_;
|
|
|
| GLsizei max_attrib_name_length_;
|
|
|
| @@ -109,13 +148,23 @@ class GLES2_IMPL_EXPORT ProgramInfoManager {
|
| // Uniform info by index.
|
| std::vector<UniformInfo> uniform_infos_;
|
|
|
| - base::hash_map<std::string, GLint> frag_data_locations_;
|
| -
|
| // This is true if glLinkProgram was successful last time it was called.
|
| bool link_status_;
|
| +
|
| + // BELOW ARE ES3 ONLY INFORMATION.
|
| +
|
| + bool cached_es3_uniform_blocks_;
|
| +
|
| + uint32_t active_uniform_block_max_name_length_;
|
| +
|
| + // Uniform blocks by index.
|
| + std::vector<UniformBlock> uniform_blocks_;
|
| +
|
| + base::hash_map<std::string, GLint> frag_data_locations_;
|
| };
|
|
|
| - Program* GetProgramInfo(GLES2Implementation* gl, GLuint program);
|
| + Program* GetProgramInfo(
|
| + GLES2Implementation* gl, GLuint program, ProgramInfoType type);
|
|
|
| typedef base::hash_map<GLuint, Program> ProgramInfoMap;
|
|
|
|
|