OLD | NEW |
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 <list> | 10 #include <list> |
(...skipping 2423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2434 const scoped_refptr<gfx::GLSurface>& surface, | 2434 const scoped_refptr<gfx::GLSurface>& surface, |
2435 const scoped_refptr<gfx::GLContext>& context, | 2435 const scoped_refptr<gfx::GLContext>& context, |
2436 bool offscreen, | 2436 bool offscreen, |
2437 const gfx::Size& size, | 2437 const gfx::Size& size, |
2438 const DisallowedFeatures& disallowed_features, | 2438 const DisallowedFeatures& disallowed_features, |
2439 const std::vector<int32>& attribs) { | 2439 const std::vector<int32>& attribs) { |
2440 TRACE_EVENT0("gpu", "GLES2DecoderImpl::Initialize"); | 2440 TRACE_EVENT0("gpu", "GLES2DecoderImpl::Initialize"); |
2441 DCHECK(context->IsCurrent(surface.get())); | 2441 DCHECK(context->IsCurrent(surface.get())); |
2442 DCHECK(!context_.get()); | 2442 DCHECK(!context_.get()); |
2443 | 2443 |
| 2444 ContextCreationAttribHelper attrib_parser; |
| 2445 if (!attrib_parser.Parse(attribs)) |
| 2446 return false; |
| 2447 |
2444 surfaceless_ = surface->IsSurfaceless() && !offscreen; | 2448 surfaceless_ = surface->IsSurfaceless() && !offscreen; |
2445 | 2449 |
2446 set_initialized(); | 2450 set_initialized(); |
2447 gpu_state_tracer_ = GPUStateTracer::Create(&state_); | 2451 gpu_state_tracer_ = GPUStateTracer::Create(&state_); |
2448 | 2452 |
2449 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2453 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
2450 switches::kEnableGPUDebugging)) { | 2454 switches::kEnableGPUDebugging)) { |
2451 set_debug(true); | 2455 set_debug(true); |
2452 } | 2456 } |
2453 | 2457 |
2454 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2458 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
2455 switches::kEnableGPUCommandLogging)) { | 2459 switches::kEnableGPUCommandLogging)) { |
2456 set_log_commands(true); | 2460 set_log_commands(true); |
2457 } | 2461 } |
2458 | 2462 |
2459 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2463 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
2460 switches::kEnableUnsafeES3APIs)) { | 2464 switches::kEnableUnsafeES3APIs) && |
| 2465 attrib_parser.es3_context_required) { |
| 2466 // TODO(zmo): We need to implement capabilities check to ensure we can |
| 2467 // actually create ES3 contexts. |
2461 set_unsafe_es3_apis_enabled(true); | 2468 set_unsafe_es3_apis_enabled(true); |
2462 } | 2469 } |
2463 | 2470 |
2464 compile_shader_always_succeeds_ = | 2471 compile_shader_always_succeeds_ = |
2465 base::CommandLine::ForCurrentProcess()->HasSwitch( | 2472 base::CommandLine::ForCurrentProcess()->HasSwitch( |
2466 switches::kCompileShaderAlwaysSucceeds); | 2473 switches::kCompileShaderAlwaysSucceeds); |
2467 | 2474 |
2468 // Take ownership of the context and surface. The surface can be replaced with | 2475 // Take ownership of the context and surface. The surface can be replaced with |
2469 // SetSurface. | 2476 // SetSurface. |
2470 context_ = context; | 2477 context_ = context; |
2471 surface_ = surface; | 2478 surface_ = surface; |
2472 | 2479 |
2473 ContextCreationAttribHelper attrib_parser; | |
2474 if (!attrib_parser.Parse(attribs)) | |
2475 return false; | |
2476 | |
2477 // Create GPU Tracer for timing values. | 2480 // Create GPU Tracer for timing values. |
2478 gpu_tracer_.reset(new GPUTracer(this)); | 2481 gpu_tracer_.reset(new GPUTracer(this)); |
2479 | 2482 |
2480 // Save the loseContextWhenOutOfMemory context creation attribute. | 2483 // Save the loseContextWhenOutOfMemory context creation attribute. |
2481 lose_context_when_out_of_memory_ = | 2484 lose_context_when_out_of_memory_ = |
2482 attrib_parser.lose_context_when_out_of_memory; | 2485 attrib_parser.lose_context_when_out_of_memory; |
2483 | 2486 |
2484 // If the failIfMajorPerformanceCaveat context creation attribute was true | 2487 // If the failIfMajorPerformanceCaveat context creation attribute was true |
2485 // and we are using a software renderer, fail. | 2488 // and we are using a software renderer, fail. |
2486 if (attrib_parser.fail_if_major_perf_caveat && | 2489 if (attrib_parser.fail_if_major_perf_caveat && |
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2949 resources.EXT_draw_buffers = | 2952 resources.EXT_draw_buffers = |
2950 features().ext_draw_buffers ? 1 : 0; | 2953 features().ext_draw_buffers ? 1 : 0; |
2951 resources.EXT_frag_depth = | 2954 resources.EXT_frag_depth = |
2952 features().ext_frag_depth ? 1 : 0; | 2955 features().ext_frag_depth ? 1 : 0; |
2953 resources.EXT_shader_texture_lod = | 2956 resources.EXT_shader_texture_lod = |
2954 features().ext_shader_texture_lod ? 1 : 0; | 2957 features().ext_shader_texture_lod ? 1 : 0; |
2955 resources.NV_draw_buffers = | 2958 resources.NV_draw_buffers = |
2956 features().nv_draw_buffers ? 1 : 0; | 2959 features().nv_draw_buffers ? 1 : 0; |
2957 } | 2960 } |
2958 | 2961 |
2959 ShShaderSpec shader_spec = force_webgl_glsl_validation_ ? SH_WEBGL_SPEC | 2962 ShShaderSpec shader_spec; |
2960 : SH_GLES2_SPEC; | 2963 if (force_webgl_glsl_validation_) { |
2961 if (shader_spec == SH_WEBGL_SPEC && features().enable_shader_name_hashing) | 2964 shader_spec = unsafe_es3_apis_enabled() ? SH_WEBGL2_SPEC : SH_WEBGL_SPEC; |
| 2965 } else { |
| 2966 shader_spec = unsafe_es3_apis_enabled() ? SH_GLES3_SPEC : SH_GLES2_SPEC; |
| 2967 } |
| 2968 |
| 2969 if ((shader_spec == SH_WEBGL_SPEC || shader_spec == SH_WEBGL2_SPEC) && |
| 2970 features().enable_shader_name_hashing) |
2962 resources.HashFunction = &CityHash64; | 2971 resources.HashFunction = &CityHash64; |
2963 else | 2972 else |
2964 resources.HashFunction = NULL; | 2973 resources.HashFunction = NULL; |
2965 ShaderTranslatorInterface::GlslImplementationType implementation_type = | 2974 ShaderTranslatorInterface::GlslImplementationType implementation_type = |
2966 gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2 ? | 2975 gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2 ? |
2967 ShaderTranslatorInterface::kGlslES : ShaderTranslatorInterface::kGlsl; | 2976 ShaderTranslatorInterface::kGlslES : ShaderTranslatorInterface::kGlsl; |
2968 int driver_bug_workarounds = 0; | 2977 int driver_bug_workarounds = 0; |
2969 if (workarounds().needs_glsl_built_in_function_emulation) | 2978 if (workarounds().needs_glsl_built_in_function_emulation) |
2970 driver_bug_workarounds |= SH_EMULATE_BUILT_IN_FUNCTIONS; | 2979 driver_bug_workarounds |= SH_EMULATE_BUILT_IN_FUNCTIONS; |
2971 if (workarounds().init_gl_position_in_vertex_shader) | 2980 if (workarounds().init_gl_position_in_vertex_shader) |
(...skipping 9155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12127 } | 12136 } |
12128 } | 12137 } |
12129 | 12138 |
12130 // Include the auto-generated part of this file. We split this because it means | 12139 // Include the auto-generated part of this file. We split this because it means |
12131 // we can easily edit the non-auto generated parts right here in this file | 12140 // we can easily edit the non-auto generated parts right here in this file |
12132 // instead of having to edit some template or the code generator. | 12141 // instead of having to edit some template or the code generator. |
12133 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 12142 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
12134 | 12143 |
12135 } // namespace gles2 | 12144 } // namespace gles2 |
12136 } // namespace gpu | 12145 } // namespace gpu |
OLD | NEW |