• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "gpu/command_buffer/service/shader_translator_cache.h"
6 
7 namespace gpu {
8 namespace gles2 {
9 
ShaderTranslatorCache()10 ShaderTranslatorCache::ShaderTranslatorCache() {
11 }
12 
~ShaderTranslatorCache()13 ShaderTranslatorCache::~ShaderTranslatorCache() {
14   DCHECK(cache_.empty());
15 }
16 
OnDestruct(ShaderTranslator * translator)17 void ShaderTranslatorCache::OnDestruct(ShaderTranslator* translator) {
18   Cache::iterator it = cache_.begin();
19   while (it != cache_.end()) {
20     if (it->second == translator) {
21       cache_.erase(it);
22       return;
23     }
24     it++;
25   }
26 }
27 
GetTranslator(ShShaderType shader_type,ShShaderSpec shader_spec,const ShBuiltInResources * resources,ShaderTranslatorInterface::GlslImplementationType glsl_implementation_type,ShCompileOptions driver_bug_workarounds)28 scoped_refptr<ShaderTranslator> ShaderTranslatorCache::GetTranslator(
29     ShShaderType shader_type,
30     ShShaderSpec shader_spec,
31     const ShBuiltInResources* resources,
32     ShaderTranslatorInterface::GlslImplementationType
33         glsl_implementation_type,
34     ShCompileOptions driver_bug_workarounds) {
35   ShaderTranslatorInitParams params(shader_type,
36                                     shader_spec,
37                                     *resources,
38                                     glsl_implementation_type,
39                                     driver_bug_workarounds);
40 
41   Cache::iterator it = cache_.find(params);
42   if (it != cache_.end())
43     return it->second;
44 
45   ShaderTranslator* translator = new ShaderTranslator();
46   if (translator->Init(shader_type, shader_spec, resources,
47                        glsl_implementation_type,
48                        driver_bug_workarounds)) {
49     cache_[params] = translator;
50     translator->AddDestructionObserver(this);
51     return translator;
52   } else {
53     return NULL;
54   }
55 }
56 
57 }  // namespace gles2
58 }  // namespace gpu
59