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

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

Issue 1143393007: Teach GPU command buffer whether a context is webgl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cmath> 10 #include <cmath>
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 } 861 }
862 862
863 bool EnsureGPUMemoryAvailable(size_t estimated_size) { 863 bool EnsureGPUMemoryAvailable(size_t estimated_size) {
864 MemoryTracker* tracker = memory_tracker(); 864 MemoryTracker* tracker = memory_tracker();
865 if (tracker) { 865 if (tracker) {
866 return tracker->EnsureGPUMemoryAvailable(estimated_size); 866 return tracker->EnsureGPUMemoryAvailable(estimated_size);
867 } 867 }
868 return true; 868 return true;
869 } 869 }
870 870
871 bool IsWebGLContext() const {
872 return webgl_version_ == 1 || webgl_version_ == 2;
873 }
874
871 bool IsOffscreenBufferMultisampled() const { 875 bool IsOffscreenBufferMultisampled() const {
872 return offscreen_target_samples_ > 1; 876 return offscreen_target_samples_ > 1;
873 } 877 }
874 878
875 // Creates a Texture for the given texture. 879 // Creates a Texture for the given texture.
876 TextureRef* CreateTexture( 880 TextureRef* CreateTexture(
877 GLuint client_id, GLuint service_id) { 881 GLuint client_id, GLuint service_id) {
878 return texture_manager()->CreateTexture(client_id, service_id); 882 return texture_manager()->CreateTexture(client_id, service_id);
879 } 883 }
880 884
(...skipping 1084 matching lines...) Expand 10 before | Expand all | Expand 10 after
1965 1969
1966 // Number of commands remaining to be processed in DoCommands(). 1970 // Number of commands remaining to be processed in DoCommands().
1967 int commands_to_process_; 1971 int commands_to_process_;
1968 1972
1969 bool has_robustness_extension_; 1973 bool has_robustness_extension_;
1970 error::ContextLostReason context_lost_reason_; 1974 error::ContextLostReason context_lost_reason_;
1971 bool context_was_lost_; 1975 bool context_was_lost_;
1972 bool reset_by_robustness_extension_; 1976 bool reset_by_robustness_extension_;
1973 bool supports_post_sub_buffer_; 1977 bool supports_post_sub_buffer_;
1974 1978
1979 // Indicates whether this is a context for WebGL1, WebGL2, or others.
1980 // 0: other types
1981 // 1: WebGL 1
1982 // 2: WebGL 2
1983 unsigned webgl_version_;
1984
1975 // These flags are used to override the state of the shared feature_info_ 1985 // These flags are used to override the state of the shared feature_info_
1976 // member. Because the same FeatureInfo instance may be shared among many 1986 // member. Because the same FeatureInfo instance may be shared among many
1977 // contexts, the assumptions on the availablity of extensions in WebGL 1987 // contexts, the assumptions on the availablity of extensions in WebGL
1978 // contexts may be broken. These flags override the shared state to preserve 1988 // contexts may be broken. These flags override the shared state to preserve
1979 // WebGL semantics. 1989 // WebGL semantics.
1980 bool force_webgl_glsl_validation_;
1981 bool derivatives_explicitly_enabled_; 1990 bool derivatives_explicitly_enabled_;
1982 bool frag_depth_explicitly_enabled_; 1991 bool frag_depth_explicitly_enabled_;
1983 bool draw_buffers_explicitly_enabled_; 1992 bool draw_buffers_explicitly_enabled_;
1984 bool shader_texture_lod_explicitly_enabled_; 1993 bool shader_texture_lod_explicitly_enabled_;
1985 1994
1986 bool compile_shader_always_succeeds_; 1995 bool compile_shader_always_succeeds_;
1987 1996
1988 // An optional behaviour to lose the context and group when OOM. 1997 // An optional behaviour to lose the context and group when OOM.
1989 bool lose_context_when_out_of_memory_; 1998 bool lose_context_when_out_of_memory_;
1990 1999
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
2509 current_decoder_error_(error::kNoError), 2518 current_decoder_error_(error::kNoError),
2510 use_shader_translator_(true), 2519 use_shader_translator_(true),
2511 validators_(group_->feature_info()->validators()), 2520 validators_(group_->feature_info()->validators()),
2512 feature_info_(group_->feature_info()), 2521 feature_info_(group_->feature_info()),
2513 frame_number_(0), 2522 frame_number_(0),
2514 has_robustness_extension_(false), 2523 has_robustness_extension_(false),
2515 context_lost_reason_(error::kUnknown), 2524 context_lost_reason_(error::kUnknown),
2516 context_was_lost_(false), 2525 context_was_lost_(false),
2517 reset_by_robustness_extension_(false), 2526 reset_by_robustness_extension_(false),
2518 supports_post_sub_buffer_(false), 2527 supports_post_sub_buffer_(false),
2519 force_webgl_glsl_validation_(false), 2528 webgl_version_(0),
2520 derivatives_explicitly_enabled_(false), 2529 derivatives_explicitly_enabled_(false),
2521 frag_depth_explicitly_enabled_(false), 2530 frag_depth_explicitly_enabled_(false),
2522 draw_buffers_explicitly_enabled_(false), 2531 draw_buffers_explicitly_enabled_(false),
2523 shader_texture_lod_explicitly_enabled_(false), 2532 shader_texture_lod_explicitly_enabled_(false),
2524 compile_shader_always_succeeds_(false), 2533 compile_shader_always_succeeds_(false),
2525 lose_context_when_out_of_memory_(false), 2534 lose_context_when_out_of_memory_(false),
2526 service_logging_(base::CommandLine::ForCurrentProcess()->HasSwitch( 2535 service_logging_(base::CommandLine::ForCurrentProcess()->HasSwitch(
2527 switches::kEnableGPUServiceLoggingGPU)), 2536 switches::kEnableGPUServiceLoggingGPU)),
2528 viewport_max_width_(0), 2537 viewport_max_width_(0),
2529 viewport_max_height_(0), 2538 viewport_max_height_(0),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2566 const DisallowedFeatures& disallowed_features, 2575 const DisallowedFeatures& disallowed_features,
2567 const std::vector<int32>& attribs) { 2576 const std::vector<int32>& attribs) {
2568 TRACE_EVENT0("gpu", "GLES2DecoderImpl::Initialize"); 2577 TRACE_EVENT0("gpu", "GLES2DecoderImpl::Initialize");
2569 DCHECK(context->IsCurrent(surface.get())); 2578 DCHECK(context->IsCurrent(surface.get()));
2570 DCHECK(!context_.get()); 2579 DCHECK(!context_.get());
2571 DCHECK(!offscreen || !offscreen_size.IsEmpty()); 2580 DCHECK(!offscreen || !offscreen_size.IsEmpty());
2572 2581
2573 ContextCreationAttribHelper attrib_parser; 2582 ContextCreationAttribHelper attrib_parser;
2574 if (!attrib_parser.Parse(attribs)) 2583 if (!attrib_parser.Parse(attribs))
2575 return false; 2584 return false;
2585 webgl_version_ = attrib_parser.webgl_version;
2576 2586
2577 surfaceless_ = surface->IsSurfaceless() && !offscreen; 2587 surfaceless_ = surface->IsSurfaceless() && !offscreen;
2578 2588
2579 set_initialized(); 2589 set_initialized();
2580 gpu_state_tracer_ = GPUStateTracer::Create(&state_); 2590 gpu_state_tracer_ = GPUStateTracer::Create(&state_);
2581 2591
2582 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 2592 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
2583 switches::kEnableGPUDebugging)) { 2593 switches::kEnableGPUDebugging)) {
2584 set_debug(true); 2594 set_debug(true);
2585 } 2595 }
(...skipping 21 matching lines...) Expand all
2607 2617
2608 // If the failIfMajorPerformanceCaveat context creation attribute was true 2618 // If the failIfMajorPerformanceCaveat context creation attribute was true
2609 // and we are using a software renderer, fail. 2619 // and we are using a software renderer, fail.
2610 if (attrib_parser.fail_if_major_perf_caveat && 2620 if (attrib_parser.fail_if_major_perf_caveat &&
2611 feature_info_->feature_flags().is_swiftshader) { 2621 feature_info_->feature_flags().is_swiftshader) {
2612 group_ = NULL; // Must not destroy ContextGroup if it is not initialized. 2622 group_ = NULL; // Must not destroy ContextGroup if it is not initialized.
2613 Destroy(true); 2623 Destroy(true);
2614 return false; 2624 return false;
2615 } 2625 }
2616 2626
2617 if (!group_->Initialize(this, disallowed_features)) { 2627 disallowed_features_ = disallowed_features;
2618 LOG(ERROR) << "GpuScheduler::InitializeCommon failed because group " 2628 if (webgl_version_ == 1) {
2619 << "failed to initialize."; 2629 disallowed_features_.npot_support = true;
2630 }
2631
2632 if (!group_->Initialize(this,
2633 ContextGroup::GetContextType(webgl_version_),
2634 disallowed_features_)) {
2620 group_ = NULL; // Must not destroy ContextGroup if it is not initialized. 2635 group_ = NULL; // Must not destroy ContextGroup if it is not initialized.
2621 Destroy(true); 2636 Destroy(true);
2622 return false; 2637 return false;
2623 } 2638 }
2624 CHECK_GL_ERROR(); 2639 CHECK_GL_ERROR();
2625 2640
2626 if (attrib_parser.es3_context_required && 2641 if (webgl_version_ == 2) {
2627 feature_info_->IsES3Capable()) { 2642 if (!feature_info_->IsES3Capable()) {
2643 LOG(ERROR) << "Underlying driver does not support ES3.";
2644 Destroy(true);
2645 return false;
2646 }
2628 feature_info_->EnableES3Validators(); 2647 feature_info_->EnableES3Validators();
2629 set_unsafe_es3_apis_enabled(true); 2648 set_unsafe_es3_apis_enabled(true);
2630 } 2649 }
2631 2650
2632 disallowed_features_ = disallowed_features;
2633
2634 state_.attrib_values.resize(group_->max_vertex_attribs()); 2651 state_.attrib_values.resize(group_->max_vertex_attribs());
2635 vertex_array_manager_.reset(new VertexArrayManager()); 2652 vertex_array_manager_.reset(new VertexArrayManager());
2636 2653
2637 GLuint default_vertex_attrib_service_id = 0; 2654 GLuint default_vertex_attrib_service_id = 0;
2638 if (features().native_vertex_array_object) { 2655 if (features().native_vertex_array_object) {
2639 glGenVertexArraysOES(1, &default_vertex_attrib_service_id); 2656 glGenVertexArraysOES(1, &default_vertex_attrib_service_id);
2640 glBindVertexArrayOES(default_vertex_attrib_service_id); 2657 glBindVertexArrayOES(default_vertex_attrib_service_id);
2641 } 2658 }
2642 2659
2643 state_.default_vertex_attrib_manager = 2660 state_.default_vertex_attrib_manager =
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
3150 resources.MaxExpressionComplexity = 256; 3167 resources.MaxExpressionComplexity = 256;
3151 resources.MaxCallStackDepth = 256; 3168 resources.MaxCallStackDepth = 256;
3152 3169
3153 GLint range[2] = { 0, 0 }; 3170 GLint range[2] = { 0, 0 };
3154 GLint precision = 0; 3171 GLint precision = 0;
3155 GetShaderPrecisionFormatImpl(GL_FRAGMENT_SHADER, GL_HIGH_FLOAT, 3172 GetShaderPrecisionFormatImpl(GL_FRAGMENT_SHADER, GL_HIGH_FLOAT,
3156 range, &precision); 3173 range, &precision);
3157 resources.FragmentPrecisionHigh = 3174 resources.FragmentPrecisionHigh =
3158 PrecisionMeetsSpecForHighpFloat(range[0], range[1], precision); 3175 PrecisionMeetsSpecForHighpFloat(range[0], range[1], precision);
3159 3176
3160 if (force_webgl_glsl_validation_) { 3177 if (IsWebGLContext()) {
3161 resources.OES_standard_derivatives = derivatives_explicitly_enabled_; 3178 resources.OES_standard_derivatives = derivatives_explicitly_enabled_;
3162 resources.EXT_frag_depth = frag_depth_explicitly_enabled_; 3179 resources.EXT_frag_depth = frag_depth_explicitly_enabled_;
3163 resources.EXT_draw_buffers = draw_buffers_explicitly_enabled_; 3180 resources.EXT_draw_buffers = draw_buffers_explicitly_enabled_;
3164 if (!draw_buffers_explicitly_enabled_) 3181 if (!draw_buffers_explicitly_enabled_)
3165 resources.MaxDrawBuffers = 1; 3182 resources.MaxDrawBuffers = 1;
3166 resources.EXT_shader_texture_lod = shader_texture_lod_explicitly_enabled_; 3183 resources.EXT_shader_texture_lod = shader_texture_lod_explicitly_enabled_;
3167 resources.NV_draw_buffers = 3184 resources.NV_draw_buffers =
3168 draw_buffers_explicitly_enabled_ && features().nv_draw_buffers; 3185 draw_buffers_explicitly_enabled_ && features().nv_draw_buffers;
3169 } else { 3186 } else {
3170 resources.OES_standard_derivatives = 3187 resources.OES_standard_derivatives =
3171 features().oes_standard_derivatives ? 1 : 0; 3188 features().oes_standard_derivatives ? 1 : 0;
3172 resources.ARB_texture_rectangle = 3189 resources.ARB_texture_rectangle =
3173 features().arb_texture_rectangle ? 1 : 0; 3190 features().arb_texture_rectangle ? 1 : 0;
3174 resources.OES_EGL_image_external = 3191 resources.OES_EGL_image_external =
3175 features().oes_egl_image_external ? 1 : 0; 3192 features().oes_egl_image_external ? 1 : 0;
3176 resources.EXT_draw_buffers = 3193 resources.EXT_draw_buffers =
3177 features().ext_draw_buffers ? 1 : 0; 3194 features().ext_draw_buffers ? 1 : 0;
3178 resources.EXT_frag_depth = 3195 resources.EXT_frag_depth =
3179 features().ext_frag_depth ? 1 : 0; 3196 features().ext_frag_depth ? 1 : 0;
3180 resources.EXT_shader_texture_lod = 3197 resources.EXT_shader_texture_lod =
3181 features().ext_shader_texture_lod ? 1 : 0; 3198 features().ext_shader_texture_lod ? 1 : 0;
3182 resources.NV_draw_buffers = 3199 resources.NV_draw_buffers =
3183 features().nv_draw_buffers ? 1 : 0; 3200 features().nv_draw_buffers ? 1 : 0;
3184 } 3201 }
3185 3202
3186 ShShaderSpec shader_spec; 3203 ShShaderSpec shader_spec;
3187 if (force_webgl_glsl_validation_) { 3204 if (IsWebGLContext()) {
3188 shader_spec = unsafe_es3_apis_enabled() ? SH_WEBGL2_SPEC : SH_WEBGL_SPEC; 3205 shader_spec = webgl_version_ == 2 ? SH_WEBGL2_SPEC : SH_WEBGL_SPEC;
3189 } else { 3206 } else {
3190 shader_spec = unsafe_es3_apis_enabled() ? SH_GLES3_SPEC : SH_GLES2_SPEC; 3207 shader_spec = unsafe_es3_apis_enabled() ? SH_GLES3_SPEC : SH_GLES2_SPEC;
3191 } 3208 }
3192 3209
3193 if ((shader_spec == SH_WEBGL_SPEC || shader_spec == SH_WEBGL2_SPEC) && 3210 if ((shader_spec == SH_WEBGL_SPEC || shader_spec == SH_WEBGL2_SPEC) &&
3194 features().enable_shader_name_hashing) 3211 features().enable_shader_name_hashing)
3195 resources.HashFunction = &CityHash64; 3212 resources.HashFunction = &CityHash64;
3196 else 3213 else
3197 resources.HashFunction = NULL; 3214 resources.HashFunction = NULL;
3198 ShaderTranslatorInterface::GlslImplementationType implementation_type = 3215 ShaderTranslatorInterface::GlslImplementationType implementation_type =
(...skipping 5598 matching lines...) Expand 10 before | Expand all | Expand 10 after
8797 GLenum name = static_cast<GLenum>(c.name); 8814 GLenum name = static_cast<GLenum>(c.name);
8798 if (!validators_->string_type.IsValid(name)) { 8815 if (!validators_->string_type.IsValid(name)) {
8799 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetString", name, "name"); 8816 LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetString", name, "name");
8800 return error::kNoError; 8817 return error::kNoError;
8801 } 8818 }
8802 8819
8803 const char* str = nullptr; 8820 const char* str = nullptr;
8804 std::string extensions; 8821 std::string extensions;
8805 switch (name) { 8822 switch (name) {
8806 case GL_VERSION: 8823 case GL_VERSION:
8807 str = "OpenGL ES 2.0 Chromium"; 8824 if (unsafe_es3_apis_enabled())
8825 str = "OpenGL ES 3.0 Chromium";
8826 else
8827 str = "OpenGL ES 2.0 Chromium";
8808 break; 8828 break;
8809 case GL_SHADING_LANGUAGE_VERSION: 8829 case GL_SHADING_LANGUAGE_VERSION:
8810 str = "OpenGL ES GLSL ES 1.0 Chromium"; 8830 if (unsafe_es3_apis_enabled())
8831 str = "OpenGL ES GLSL ES 3.0 Chromium";
8832 else
8833 str = "OpenGL ES GLSL ES 1.0 Chromium";
8811 break; 8834 break;
8812 case GL_RENDERER: 8835 case GL_RENDERER:
8813 case GL_VENDOR: 8836 case GL_VENDOR:
8814 // Return the unmasked VENDOR/RENDERER string for WebGL contexts. 8837 // Return the unmasked VENDOR/RENDERER string for WebGL contexts.
8815 // They are used by WEBGL_debug_renderer_info. 8838 // They are used by WEBGL_debug_renderer_info.
8816 if (!force_webgl_glsl_validation_) 8839 if (!IsWebGLContext())
8817 str = "Chromium"; 8840 str = "Chromium";
8818 else 8841 else
8819 str = reinterpret_cast<const char*>(glGetString(name)); 8842 str = reinterpret_cast<const char*>(glGetString(name));
8820 break; 8843 break;
8821 case GL_EXTENSIONS: 8844 case GL_EXTENSIONS:
8822 { 8845 {
8823 // For WebGL contexts, strip out the OES derivatives and 8846 // For WebGL contexts, strip out the OES derivatives and
8824 // EXT frag depth extensions if they have not been enabled. 8847 // EXT frag depth extensions if they have not been enabled.
8825 if (force_webgl_glsl_validation_) { 8848 if (IsWebGLContext()) {
8826 extensions = feature_info_->extensions(); 8849 extensions = feature_info_->extensions();
8827 if (!derivatives_explicitly_enabled_) { 8850 if (!derivatives_explicitly_enabled_) {
8828 size_t offset = extensions.find(kOESDerivativeExtension); 8851 size_t offset = extensions.find(kOESDerivativeExtension);
8829 if (std::string::npos != offset) { 8852 if (std::string::npos != offset) {
8830 extensions.replace(offset, arraysize(kOESDerivativeExtension), 8853 extensions.replace(offset, arraysize(kOESDerivativeExtension),
8831 std::string()); 8854 std::string());
8832 } 8855 }
8833 } 8856 }
8834 if (!frag_depth_explicitly_enabled_) { 8857 if (!frag_depth_explicitly_enabled_) {
8835 size_t offset = extensions.find(kEXTFragDepthExtension); 8858 size_t offset = extensions.find(kEXTFragDepthExtension);
(...skipping 2288 matching lines...) Expand 10 before | Expand all | Expand 10 after
11124 // TODO(gman): decide how to remove the need for this const_cast. 11147 // TODO(gman): decide how to remove the need for this const_cast.
11125 // I could make validators_ non const but that seems bad as this is the only 11148 // I could make validators_ non const but that seems bad as this is the only
11126 // place it is needed. I could make some special friend class of validators 11149 // place it is needed. I could make some special friend class of validators
11127 // just to allow this to set them. That seems silly. I could refactor this 11150 // just to allow this to set them. That seems silly. I could refactor this
11128 // code to use the extension mechanism or the initialization attributes to 11151 // code to use the extension mechanism or the initialization attributes to
11129 // turn this feature on. Given that the only real point of this is to make 11152 // turn this feature on. Given that the only real point of this is to make
11130 // the conformance tests pass and given that there is lots of real work that 11153 // the conformance tests pass and given that there is lots of real work that
11131 // needs to be done it seems like refactoring for one to one of those 11154 // needs to be done it seems like refactoring for one to one of those
11132 // methods is a very low priority. 11155 // methods is a very low priority.
11133 const_cast<Validators*>(validators_)->vertex_attrib_type.AddValue(GL_FIXED); 11156 const_cast<Validators*>(validators_)->vertex_attrib_type.AddValue(GL_FIXED);
11134 } else if (feature_str.compare("webgl_enable_glsl_webgl_validation") == 0) {
11135 force_webgl_glsl_validation_ = true;
11136 InitializeShaderTranslator();
11137 } else { 11157 } else {
11138 return error::kNoError; 11158 return error::kNoError;
11139 } 11159 }
11140 11160
11141 *result = 1; // true. 11161 *result = 1; // true.
11142 return error::kNoError; 11162 return error::kNoError;
11143 } 11163 }
11144 11164
11145 error::Error GLES2DecoderImpl::HandleGetRequestableExtensionsCHROMIUM( 11165 error::Error GLES2DecoderImpl::HandleGetRequestableExtensionsCHROMIUM(
11146 uint32 immediate_data_size, 11166 uint32 immediate_data_size,
(...skipping 15 matching lines...) Expand all
11162 *static_cast<const gles2::cmds::RequestExtensionCHROMIUM*>(cmd_data); 11182 *static_cast<const gles2::cmds::RequestExtensionCHROMIUM*>(cmd_data);
11163 Bucket* bucket = GetBucket(c.bucket_id); 11183 Bucket* bucket = GetBucket(c.bucket_id);
11164 if (!bucket || bucket->size() == 0) { 11184 if (!bucket || bucket->size() == 0) {
11165 return error::kInvalidArguments; 11185 return error::kInvalidArguments;
11166 } 11186 }
11167 std::string feature_str; 11187 std::string feature_str;
11168 if (!bucket->GetAsString(&feature_str)) { 11188 if (!bucket->GetAsString(&feature_str)) {
11169 return error::kInvalidArguments; 11189 return error::kInvalidArguments;
11170 } 11190 }
11171 11191
11172 bool desire_webgl_glsl_validation =
11173 feature_str.find("GL_CHROMIUM_webglsl") != std::string::npos;
11174 bool desire_standard_derivatives = false; 11192 bool desire_standard_derivatives = false;
11175 bool desire_frag_depth = false; 11193 bool desire_frag_depth = false;
11176 bool desire_draw_buffers = false; 11194 bool desire_draw_buffers = false;
11177 bool desire_shader_texture_lod = false; 11195 bool desire_shader_texture_lod = false;
11178 if (force_webgl_glsl_validation_) { 11196 if (IsWebGLContext()) {
11179 desire_standard_derivatives = 11197 desire_standard_derivatives =
11180 feature_str.find("GL_OES_standard_derivatives") != std::string::npos; 11198 feature_str.find("GL_OES_standard_derivatives") != std::string::npos;
11181 desire_frag_depth = 11199 desire_frag_depth =
11182 feature_str.find("GL_EXT_frag_depth") != std::string::npos; 11200 feature_str.find("GL_EXT_frag_depth") != std::string::npos;
11183 desire_draw_buffers = 11201 desire_draw_buffers =
11184 feature_str.find("GL_EXT_draw_buffers") != std::string::npos; 11202 feature_str.find("GL_EXT_draw_buffers") != std::string::npos;
11185 desire_shader_texture_lod = 11203 desire_shader_texture_lod =
11186 feature_str.find("GL_EXT_shader_texture_lod") != std::string::npos; 11204 feature_str.find("GL_EXT_shader_texture_lod") != std::string::npos;
11187 } 11205 }
11188 11206
11189 if (desire_webgl_glsl_validation != force_webgl_glsl_validation_ || 11207 if (desire_standard_derivatives != derivatives_explicitly_enabled_ ||
11190 desire_standard_derivatives != derivatives_explicitly_enabled_ ||
11191 desire_frag_depth != frag_depth_explicitly_enabled_ || 11208 desire_frag_depth != frag_depth_explicitly_enabled_ ||
11192 desire_draw_buffers != draw_buffers_explicitly_enabled_) { 11209 desire_draw_buffers != draw_buffers_explicitly_enabled_ ||
11193 force_webgl_glsl_validation_ |= desire_webgl_glsl_validation; 11210 desire_shader_texture_lod != shader_texture_lod_explicitly_enabled_) {
11194 derivatives_explicitly_enabled_ |= desire_standard_derivatives; 11211 derivatives_explicitly_enabled_ |= desire_standard_derivatives;
11195 frag_depth_explicitly_enabled_ |= desire_frag_depth; 11212 frag_depth_explicitly_enabled_ |= desire_frag_depth;
11196 draw_buffers_explicitly_enabled_ |= desire_draw_buffers; 11213 draw_buffers_explicitly_enabled_ |= desire_draw_buffers;
11197 shader_texture_lod_explicitly_enabled_ |= desire_shader_texture_lod; 11214 shader_texture_lod_explicitly_enabled_ |= desire_shader_texture_lod;
11198 InitializeShaderTranslator(); 11215 InitializeShaderTranslator();
11199 } 11216 }
11200 11217
11201 UpdateCapabilities(); 11218 UpdateCapabilities();
11202 11219
11203 return error::kNoError; 11220 return error::kNoError;
(...skipping 2225 matching lines...) Expand 10 before | Expand all | Expand 10 after
13429 } 13446 }
13430 } 13447 }
13431 13448
13432 // Include the auto-generated part of this file. We split this because it means 13449 // Include the auto-generated part of this file. We split this because it means
13433 // we can easily edit the non-auto generated parts right here in this file 13450 // we can easily edit the non-auto generated parts right here in this file
13434 // instead of having to edit some template or the code generator. 13451 // instead of having to edit some template or the code generator.
13435 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 13452 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
13436 13453
13437 } // namespace gles2 13454 } // namespace gles2
13438 } // namespace gpu 13455 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698