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

Side by Side Diff: gpu/command_buffer/service/shader_translator.cc

Issue 23441050: Add driver bug workaround for SH_INIT_GL_POSITION. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update Created 7 years, 3 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 | Annotate | Revision Log
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 #include "gpu/command_buffer/service/shader_translator.h" 5 #include "gpu/command_buffer/service/shader_translator.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <algorithm> 8 #include <algorithm>
9 9
10 #include "base/at_exit.h" 10 #include "base/at_exit.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 111
112 ShaderTranslator::DestructionObserver::DestructionObserver() { 112 ShaderTranslator::DestructionObserver::DestructionObserver() {
113 } 113 }
114 114
115 ShaderTranslator::DestructionObserver::~DestructionObserver() { 115 ShaderTranslator::DestructionObserver::~DestructionObserver() {
116 } 116 }
117 117
118 ShaderTranslator::ShaderTranslator() 118 ShaderTranslator::ShaderTranslator()
119 : compiler_(NULL), 119 : compiler_(NULL),
120 implementation_is_glsl_es_(false), 120 implementation_is_glsl_es_(false),
121 needs_built_in_function_emulation_(false) { 121 driver_bug_workarounds_(static_cast<ShCompileOptions>(0)) {
122 } 122 }
123 123
124 bool ShaderTranslator::Init( 124 bool ShaderTranslator::Init(
125 ShShaderType shader_type, 125 ShShaderType shader_type,
126 ShShaderSpec shader_spec, 126 ShShaderSpec shader_spec,
127 const ShBuiltInResources* resources, 127 const ShBuiltInResources* resources,
128 ShaderTranslatorInterface::GlslImplementationType glsl_implementation_type, 128 ShaderTranslatorInterface::GlslImplementationType glsl_implementation_type,
129 ShaderTranslatorInterface::GlslBuiltInFunctionBehavior 129 ShCompileOptions driver_bug_workarounds) {
130 glsl_built_in_function_behavior) {
131 // Make sure Init is called only once. 130 // Make sure Init is called only once.
132 DCHECK(compiler_ == NULL); 131 DCHECK(compiler_ == NULL);
133 DCHECK(shader_type == SH_FRAGMENT_SHADER || shader_type == SH_VERTEX_SHADER); 132 DCHECK(shader_type == SH_FRAGMENT_SHADER || shader_type == SH_VERTEX_SHADER);
134 DCHECK(shader_spec == SH_GLES2_SPEC || shader_spec == SH_WEBGL_SPEC); 133 DCHECK(shader_spec == SH_GLES2_SPEC || shader_spec == SH_WEBGL_SPEC);
135 DCHECK(resources != NULL); 134 DCHECK(resources != NULL);
136 135
137 if (!InitializeShaderTranslator()) 136 if (!InitializeShaderTranslator())
138 return false; 137 return false;
139 138
140 ShShaderOutput shader_output = 139 ShShaderOutput shader_output =
141 (glsl_implementation_type == kGlslES ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT); 140 (glsl_implementation_type == kGlslES ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT);
142 141
143 { 142 {
144 TRACE_EVENT0("gpu", "ShConstructCompiler"); 143 TRACE_EVENT0("gpu", "ShConstructCompiler");
145 compiler_ = ShConstructCompiler( 144 compiler_ = ShConstructCompiler(
146 shader_type, shader_spec, shader_output, resources); 145 shader_type, shader_spec, shader_output, resources);
147 } 146 }
148 compiler_options_ = *resources; 147 compiler_options_ = *resources;
149 implementation_is_glsl_es_ = (glsl_implementation_type == kGlslES); 148 implementation_is_glsl_es_ = (glsl_implementation_type == kGlslES);
150 needs_built_in_function_emulation_ = 149 driver_bug_workarounds_ = driver_bug_workarounds;
151 (glsl_built_in_function_behavior == kGlslBuiltInFunctionEmulated);
152 return compiler_ != NULL; 150 return compiler_ != NULL;
153 } 151 }
154 152
155 int ShaderTranslator::GetCompileOptions() const { 153 int ShaderTranslator::GetCompileOptions() const {
156 int compile_options = 154 int compile_options =
157 SH_OBJECT_CODE | SH_VARIABLES | 155 SH_OBJECT_CODE | SH_VARIABLES |
158 SH_MAP_LONG_VARIABLE_NAMES | SH_ENFORCE_PACKING_RESTRICTIONS | 156 SH_MAP_LONG_VARIABLE_NAMES | SH_ENFORCE_PACKING_RESTRICTIONS |
159 SH_LIMIT_EXPRESSION_COMPLEXITY | SH_LIMIT_CALL_STACK_DEPTH; 157 SH_LIMIT_EXPRESSION_COMPLEXITY | SH_LIMIT_CALL_STACK_DEPTH;
160 158
161 compile_options |= SH_CLAMP_INDIRECT_ARRAY_BOUNDS; 159 compile_options |= SH_CLAMP_INDIRECT_ARRAY_BOUNDS;
162 160
163 if (needs_built_in_function_emulation_) 161 compile_options |= driver_bug_workarounds_;
164 compile_options |= SH_EMULATE_BUILT_IN_FUNCTIONS;
165 162
166 return compile_options; 163 return compile_options;
167 } 164 }
168 165
169 bool ShaderTranslator::Translate(const char* shader) { 166 bool ShaderTranslator::Translate(const char* shader) {
170 // Make sure this instance is initialized. 167 // Make sure this instance is initialized.
171 DCHECK(compiler_ != NULL); 168 DCHECK(compiler_ != NULL);
172 DCHECK(shader != NULL); 169 DCHECK(shader != NULL);
173 ClearResults(); 170 ClearResults();
174 171
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 info_log_.reset(); 311 info_log_.reset();
315 attrib_map_.clear(); 312 attrib_map_.clear();
316 uniform_map_.clear(); 313 uniform_map_.clear();
317 varying_map_.clear(); 314 varying_map_.clear();
318 name_map_.clear(); 315 name_map_.clear();
319 } 316 }
320 317
321 } // namespace gles2 318 } // namespace gles2
322 } // namespace gpu 319 } // namespace gpu
323 320
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/shader_translator.h ('k') | gpu/command_buffer/service/shader_translator_cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698