Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
index c0e0e3d7989901dd1718f8f9f588756c2095fa0d..64ff6160d8990a3bf08c0004693e9f771aed0f9e 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
@@ -774,6 +774,10 @@ class GLES2DecoderImpl : public GLES2Decoder, |
return group_->shader_manager(); |
} |
+ ShaderTranslatorCache* shader_translator_cache() { |
+ return group_->shader_translator_cache(); |
+ } |
+ |
const TextureManager* texture_manager() const { |
return group_->texture_manager(); |
} |
@@ -2762,9 +2766,10 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() { |
if (workarounds().unroll_for_loop_with_sampler_array_index) |
driver_bug_workarounds |= SH_UNROLL_FOR_LOOP_WITH_SAMPLER_ARRAY_INDEX; |
- ShaderTranslatorCache* cache = ShaderTranslatorCache::GetInstance(); |
- vertex_translator_ = cache->GetTranslator( |
- SH_VERTEX_SHADER, shader_spec, &resources, |
+ vertex_translator_ = shader_translator_cache()->GetTranslator( |
+ SH_VERTEX_SHADER, |
+ shader_spec, |
+ &resources, |
implementation_type, |
static_cast<ShCompileOptions>(driver_bug_workarounds)); |
if (!vertex_translator_.get()) { |
@@ -2773,8 +2778,10 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() { |
return false; |
} |
- fragment_translator_ = cache->GetTranslator( |
- SH_FRAGMENT_SHADER, shader_spec, &resources, |
+ fragment_translator_ = shader_translator_cache()->GetTranslator( |
+ SH_FRAGMENT_SHADER, |
+ shader_spec, |
+ &resources, |
implementation_type, |
static_cast<ShCompileOptions>(driver_bug_workarounds)); |
if (!fragment_translator_.get()) { |
@@ -3409,6 +3416,11 @@ void GLES2DecoderImpl::Destroy(bool have_context) { |
offscreen_resolved_frame_buffer_.reset(); |
offscreen_resolved_color_texture_.reset(); |
+ // Need to release these before releasing |group_| which may own the |
+ // ShaderTranslatorCache. |
+ fragment_translator_ = NULL; |
+ vertex_translator_ = NULL; |
+ |
// Should destroy the transfer manager before the texture manager held |
// by the context group. |
async_pixel_transfer_manager_.reset(); |