Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(410)

Side by Side Diff: gpu/command_buffer/service/shader_manager.h

Issue 10812002: Bug fixes for getTranslatedShader (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: last fixes Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_MANAGER_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_
7 7
8 #include <string> 8 #include <string>
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/hash_tables.h" 10 #include "base/hash_tables.h"
(...skipping 15 matching lines...) Expand all
26 public: 26 public:
27 // This is used to keep the source code for a shader. This is because in order 27 // This is used to keep the source code for a shader. This is because in order
28 // to emluate GLES2 the shaders will have to be re-written before passed to 28 // to emluate GLES2 the shaders will have to be re-written before passed to
29 // the underlying OpenGL. But, when the user calls glGetShaderSource they 29 // the underlying OpenGL. But, when the user calls glGetShaderSource they
30 // should get the source they passed in, not the re-written source. 30 // should get the source they passed in, not the re-written source.
31 class GPU_EXPORT ShaderInfo : public base::RefCounted<ShaderInfo> { 31 class GPU_EXPORT ShaderInfo : public base::RefCounted<ShaderInfo> {
32 public: 32 public:
33 typedef scoped_refptr<ShaderInfo> Ref; 33 typedef scoped_refptr<ShaderInfo> Ref;
34 typedef ShaderTranslator::VariableInfo VariableInfo; 34 typedef ShaderTranslator::VariableInfo VariableInfo;
35 35
36 enum CompilationStatus {
37 NOT_COMPILED,
38 // We're pending compilation for a cache hit with the program cache.
39 PENDING_DEFERRED_COMPILE,
40 COMPILED
41 };
42
36 void UpdateSource(const char* source) { 43 void UpdateSource(const char* source) {
37 // If the source is flagged as compiled, then store our previous source 44 // If the source is flagged as compiled, then store our previous source
38 // for deferred compile and caching. 45 // for deferred compile and caching.
39 if (!deferred_compilation_source_.get()) { 46 if (!deferred_compilation_source_.get()) {
40 deferred_compilation_source_.reset(source_.release()); 47 deferred_compilation_source_.reset(source_.release());
41 } 48 }
42 source_.reset(source ? new std::string(source) : NULL); 49 source_.reset(source ? new std::string(source) : NULL);
43 translated_source_.reset(NULL);
44 } 50 }
45 51
46 void UpdateTranslatedSource(const char* translated_source) { 52 void UpdateTranslatedSource(const char* translated_source) {
47 translated_source_.reset( 53 translated_source_.reset(
48 translated_source ? new std::string(translated_source) : NULL); 54 translated_source ? new std::string(translated_source) : NULL);
49 } 55 }
50 56
51 GLuint service_id() const { 57 GLuint service_id() const {
52 return service_id_; 58 return service_id_;
53 } 59 }
54 60
55 GLenum shader_type() const { 61 GLenum shader_type() const {
56 return shader_type_; 62 return shader_type_;
57 } 63 }
58 64
59 const std::string* source() const { 65 const std::string* source() const {
60 return source_.get(); 66 return source_.get();
61 } 67 }
62 68
63 const std::string* translated_source() const { 69 const std::string* translated_source() const {
64 return translated_source_.get(); 70 return translated_source_.get();
65 } 71 }
66 72
67 void SetStatus( 73 void SetStatus(
68 bool valid, const char* log, 74 bool valid, const char* log,
69 ShaderTranslatorInterface* translator); 75 ShaderTranslatorInterface* translator);
70 76
71 // If the source was actually compiled (compilation wasn't deferred) 77 CompilationStatus compilation_status() const {
72 bool source_compiled() const { 78 return compilation_status_;
73 return source_compiled_;
74 } 79 }
75 80
76 // The source that was used when the user called CompileShader. 81 // The source that was used when the user called CompileShader.
77 // This is used for a deferred compile and in the program cache 82 // This is used for a deferred compile and in the program cache
78 const std::string* deferred_compilation_source() const { 83 const std::string* deferred_compilation_source() const {
79 return deferred_compilation_source_.get() != NULL ? 84 return deferred_compilation_source_.get() != NULL ?
80 deferred_compilation_source_.get() : 85 deferred_compilation_source_.get() :
81 source_.get(); 86 source_.get();
82 } 87 }
83 88
84 // Resets our deferred compilation source and stores if the source was 89 // Resets our deferred compilation source and stores if the source was
85 // actually compiled, or if we're expecting a cache hit 90 // actually compiled, or if we're expecting a cache hit
86 void FlagSourceAsCompiled(bool actually_compiled) { 91 void FlagSourceAsCompiled(bool actually_compiled) {
87 source_compiled_ = actually_compiled; 92 compilation_status_ = actually_compiled ?
93 COMPILED :
94 PENDING_DEFERRED_COMPILE;
88 deferred_compilation_source_.reset(); 95 deferred_compilation_source_.reset();
89 } 96 }
90 97
91 const VariableInfo* GetAttribInfo(const std::string& name) const; 98 const VariableInfo* GetAttribInfo(const std::string& name) const;
92 const VariableInfo* GetUniformInfo(const std::string& name) const; 99 const VariableInfo* GetUniformInfo(const std::string& name) const;
93 100
94 // If the original_name is not found, return NULL. 101 // If the original_name is not found, return NULL.
95 const std::string* GetAttribMappedName( 102 const std::string* GetAttribMappedName(
96 const std::string& original_name) const; 103 const std::string& original_name) const;
97 104
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 // The translated shader source. 170 // The translated shader source.
164 scoped_ptr<std::string> translated_source_; 171 scoped_ptr<std::string> translated_source_;
165 172
166 // The shader translation log. 173 // The shader translation log.
167 scoped_ptr<std::string> log_info_; 174 scoped_ptr<std::string> log_info_;
168 175
169 // The type info when the shader was last compiled. 176 // The type info when the shader was last compiled.
170 VariableMap attrib_map_; 177 VariableMap attrib_map_;
171 VariableMap uniform_map_; 178 VariableMap uniform_map_;
172 179
173 // If the source was actually compiled (otherwise we're deferring 180 // The current compilation status of the shader
174 // compilation because of a possible cache hit) 181 CompilationStatus compilation_status_;
175 bool source_compiled_;
176 182
177 // Holds on to the source for a deferred compile. 183 // Holds on to the source for a deferred compile.
178 scoped_ptr<std::string> deferred_compilation_source_; 184 scoped_ptr<std::string> deferred_compilation_source_;
179 }; 185 };
180 186
181 ShaderManager(); 187 ShaderManager();
182 ~ShaderManager(); 188 ~ShaderManager();
183 189
184 // Must call before destruction. 190 // Must call before destruction.
185 void Destroy(bool have_context); 191 void Destroy(bool have_context);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 void RemoveShaderInfoIfUnused(ShaderInfo* info); 223 void RemoveShaderInfoIfUnused(ShaderInfo* info);
218 224
219 DISALLOW_COPY_AND_ASSIGN(ShaderManager); 225 DISALLOW_COPY_AND_ASSIGN(ShaderManager);
220 }; 226 };
221 227
222 } // namespace gles2 228 } // namespace gles2
223 } // namespace gpu 229 } // namespace gpu
224 230
225 #endif // GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_ 231 #endif // GPU_COMMAND_BUFFER_SERVICE_SHADER_MANAGER_H_
226 232
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/program_manager_unittest.cc ('k') | gpu/command_buffer/service/shader_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698