OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef GPU_COMMAND_BUFFER_SERVICE_SHADER_TRANSLATOR_H_ | 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_SHADER_TRANSLATOR_H_ |
6 #define GPU_COMMAND_BUFFER_SERVICE_SHADER_TRANSLATOR_H_ | 6 #define GPU_COMMAND_BUFFER_SERVICE_SHADER_TRANSLATOR_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 enum GlslImplementationType { | 25 enum GlslImplementationType { |
26 kGlsl, | 26 kGlsl, |
27 kGlslES | 27 kGlslES |
28 }; | 28 }; |
29 | 29 |
30 enum GlslBuiltInFunctionBehavior { | 30 enum GlslBuiltInFunctionBehavior { |
31 kGlslBuiltInFunctionOriginal, | 31 kGlslBuiltInFunctionOriginal, |
32 kGlslBuiltInFunctionEmulated | 32 kGlslBuiltInFunctionEmulated |
33 }; | 33 }; |
34 | 34 |
35 virtual ~ShaderTranslatorInterface() { } | 35 struct VariableInfo { |
| 36 VariableInfo() |
| 37 : type(0), |
| 38 size(0) { |
| 39 } |
| 40 |
| 41 VariableInfo(int _type, int _size, std::string _name) |
| 42 : type(_type), |
| 43 size(_size), |
| 44 name(_name) { |
| 45 } |
| 46 |
| 47 int type; |
| 48 int size; |
| 49 std::string name; // name in the original shader source. |
| 50 }; |
| 51 |
| 52 // Mapping between variable name and info. |
| 53 typedef base::hash_map<std::string, VariableInfo> VariableMap; |
36 | 54 |
37 // Initializes the translator. | 55 // Initializes the translator. |
38 // Must be called once before using the translator object. | 56 // Must be called once before using the translator object. |
39 virtual bool Init( | 57 virtual bool Init( |
40 ShShaderType shader_type, | 58 ShShaderType shader_type, |
41 ShShaderSpec shader_spec, | 59 ShShaderSpec shader_spec, |
42 const ShBuiltInResources* resources, | 60 const ShBuiltInResources* resources, |
43 GlslImplementationType glsl_implementation_type, | 61 GlslImplementationType glsl_implementation_type, |
44 GlslBuiltInFunctionBehavior glsl_built_in_function_behavior) = 0; | 62 GlslBuiltInFunctionBehavior glsl_built_in_function_behavior) = 0; |
45 | 63 |
46 // Translates the given shader source. | 64 // Translates the given shader source. |
47 // Returns true if translation is successful, false otherwise. | 65 // Returns true if translation is successful, false otherwise. |
48 virtual bool Translate(const char* shader) = 0; | 66 virtual bool Translate(const char* shader) = 0; |
49 | 67 |
50 // The following functions return results from the last translation. | 68 // The following functions return results from the last translation. |
51 // The results are NULL/empty if the translation was unsuccessful. | 69 // The results are NULL/empty if the translation was unsuccessful. |
52 // A valid info-log is always returned irrespective of whether translation | 70 // A valid info-log is always returned irrespective of whether translation |
53 // was successful or not. | 71 // was successful or not. |
54 virtual const char* translated_shader() const = 0; | 72 virtual const char* translated_shader() const = 0; |
55 virtual const char* info_log() const = 0; | 73 virtual const char* info_log() const = 0; |
56 | 74 |
57 struct VariableInfo { | |
58 VariableInfo() | |
59 : type(0), | |
60 size(0) { | |
61 } | |
62 VariableInfo(int _type, int _size, std::string _name) | |
63 : type(_type), | |
64 size(_size), | |
65 name(_name) { | |
66 } | |
67 int type; | |
68 int size; | |
69 std::string name; // name in the original shader source. | |
70 }; | |
71 // Mapping between variable name and info. | |
72 typedef base::hash_map<std::string, VariableInfo> VariableMap; | |
73 virtual const VariableMap& attrib_map() const = 0; | 75 virtual const VariableMap& attrib_map() const = 0; |
74 virtual const VariableMap& uniform_map() const = 0; | 76 virtual const VariableMap& uniform_map() const = 0; |
| 77 |
| 78 protected: |
| 79 virtual ~ShaderTranslatorInterface() {} |
75 }; | 80 }; |
76 | 81 |
77 // Implementation of ShaderTranslatorInterface | 82 // Implementation of ShaderTranslatorInterface |
78 class GPU_EXPORT ShaderTranslator | 83 class GPU_EXPORT ShaderTranslator |
79 : public base::RefCounted<ShaderTranslator>, | 84 : public base::RefCounted<ShaderTranslator>, |
80 NON_EXPORTED_BASE(public ShaderTranslatorInterface) { | 85 NON_EXPORTED_BASE(public ShaderTranslatorInterface) { |
81 public: | 86 public: |
82 class DestructionObserver { | 87 class DestructionObserver { |
83 public: | 88 public: |
84 DestructionObserver(); | 89 DestructionObserver(); |
85 virtual ~DestructionObserver(); | 90 virtual ~DestructionObserver(); |
86 | 91 |
87 virtual void OnDestruct(ShaderTranslator* translator) = 0; | 92 virtual void OnDestruct(ShaderTranslator* translator) = 0; |
| 93 |
88 private: | 94 private: |
89 DISALLOW_COPY_AND_ASSIGN(DestructionObserver); | 95 DISALLOW_COPY_AND_ASSIGN(DestructionObserver); |
90 }; | 96 }; |
91 | 97 |
92 ShaderTranslator(); | 98 ShaderTranslator(); |
93 | 99 |
94 // Overridden from ShaderTranslatorInterface. | 100 // Overridden from ShaderTranslatorInterface. |
95 virtual bool Init( | 101 virtual bool Init( |
96 ShShaderType shader_type, | 102 ShShaderType shader_type, |
97 ShShaderSpec shader_spec, | 103 ShShaderSpec shader_spec, |
98 const ShBuiltInResources* resources, | 104 const ShBuiltInResources* resources, |
99 GlslImplementationType glsl_implementation_type, | 105 GlslImplementationType glsl_implementation_type, |
100 GlslBuiltInFunctionBehavior glsl_built_in_function_behavior) OVERRIDE; | 106 GlslBuiltInFunctionBehavior glsl_built_in_function_behavior) OVERRIDE; |
101 | 107 |
102 // Overridden from ShaderTranslatorInterface. | 108 // Overridden from ShaderTranslatorInterface. |
103 virtual bool Translate(const char* shader) OVERRIDE; | 109 virtual bool Translate(const char* shader) OVERRIDE; |
104 | 110 |
105 // Overridden from ShaderTranslatorInterface. | 111 // Overridden from ShaderTranslatorInterface. |
106 virtual const char* translated_shader() const OVERRIDE; | 112 virtual const char* translated_shader() const OVERRIDE; |
107 virtual const char* info_log() const OVERRIDE; | 113 virtual const char* info_log() const OVERRIDE; |
108 | 114 |
109 // Overridden from ShaderTranslatorInterface. | 115 // Overridden from ShaderTranslatorInterface. |
110 virtual const VariableMap& attrib_map() const OVERRIDE; | 116 virtual const VariableMap& attrib_map() const OVERRIDE; |
111 virtual const VariableMap& uniform_map() const OVERRIDE; | 117 virtual const VariableMap& uniform_map() const OVERRIDE; |
112 | 118 |
113 void AddDestructionObserver(DestructionObserver* observer); | 119 void AddDestructionObserver(DestructionObserver* observer); |
114 void RemoveDestructionObserver(DestructionObserver* observer); | 120 void RemoveDestructionObserver(DestructionObserver* observer); |
115 | 121 |
116 private: | 122 private: |
| 123 friend class base::RefCounted<ShaderTranslator>; |
| 124 |
117 virtual ~ShaderTranslator(); | 125 virtual ~ShaderTranslator(); |
118 | |
119 void ClearResults(); | 126 void ClearResults(); |
120 | 127 |
121 ShHandle compiler_; | 128 ShHandle compiler_; |
122 scoped_array<char> translated_shader_; | 129 scoped_array<char> translated_shader_; |
123 scoped_array<char> info_log_; | 130 scoped_array<char> info_log_; |
124 VariableMap attrib_map_; | 131 VariableMap attrib_map_; |
125 VariableMap uniform_map_; | 132 VariableMap uniform_map_; |
126 bool implementation_is_glsl_es_; | 133 bool implementation_is_glsl_es_; |
127 bool needs_built_in_function_emulation_; | 134 bool needs_built_in_function_emulation_; |
128 ObserverList<DestructionObserver> destruction_observers_; | 135 ObserverList<DestructionObserver> destruction_observers_; |
129 | 136 |
130 friend class base::RefCounted<ShaderTranslator>; | |
131 | |
132 DISALLOW_COPY_AND_ASSIGN(ShaderTranslator); | 137 DISALLOW_COPY_AND_ASSIGN(ShaderTranslator); |
133 }; | 138 }; |
134 | 139 |
135 } // namespace gles2 | 140 } // namespace gles2 |
136 } // namespace gpu | 141 } // namespace gpu |
137 | 142 |
138 #endif // GPU_COMMAND_BUFFER_SERVICE_SHADER_TRANSLATOR_H_ | 143 #endif // GPU_COMMAND_BUFFER_SERVICE_SHADER_TRANSLATOR_H_ |
139 | 144 |
OLD | NEW |