OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "ui/gl/init/gl_factory.h" | 5 #include "ui/gl/init/gl_factory.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/trace_event/trace_event.h" | 8 #include "base/trace_event/trace_event.h" |
9 #include "ui/gl/gl_context.h" | 9 #include "ui/gl/gl_context.h" |
10 #include "ui/gl/gl_context_egl.h" | 10 #include "ui/gl/gl_context_egl.h" |
11 #include "ui/gl/gl_context_osmesa.h" | 11 #include "ui/gl/gl_context_osmesa.h" |
12 #include "ui/gl/gl_context_stub.h" | 12 #include "ui/gl/gl_context_stub.h" |
13 #include "ui/gl/gl_egl_api_implementation.h" | 13 #include "ui/gl/gl_egl_api_implementation.h" |
14 #include "ui/gl/gl_implementation.h" | 14 #include "ui/gl/gl_implementation.h" |
15 #include "ui/gl/gl_share_group.h" | 15 #include "ui/gl/gl_share_group.h" |
16 #include "ui/gl/gl_surface.h" | 16 #include "ui/gl/gl_surface.h" |
17 #include "ui/gl/gl_surface_egl.h" | 17 #include "ui/gl/gl_surface_egl.h" |
18 #include "ui/gl/gl_surface_osmesa.h" | 18 #include "ui/gl/gl_surface_osmesa.h" |
19 #include "ui/gl/gl_surface_stub.h" | 19 #include "ui/gl/gl_surface_stub.h" |
| 20 #include "ui/gl/init/ozone_util.h" |
20 #include "ui/ozone/public/ozone_platform.h" | 21 #include "ui/ozone/public/ozone_platform.h" |
21 #include "ui/ozone/public/surface_factory_ozone.h" | 22 #include "ui/ozone/public/surface_factory_ozone.h" |
22 | 23 |
23 namespace gl { | 24 namespace gl { |
24 namespace init { | 25 namespace init { |
25 | 26 |
26 namespace { | 27 namespace { |
27 | 28 |
28 ui::SurfaceFactoryOzone* GetSurfaceFactory() { | |
29 return ui::OzonePlatform::GetInstance()->GetSurfaceFactoryOzone(); | |
30 } | |
31 | |
32 bool HasDefaultImplementation(GLImplementation impl) { | 29 bool HasDefaultImplementation(GLImplementation impl) { |
33 return impl == kGLImplementationOSMesaGL || impl == kGLImplementationMockGL; | 30 return impl == kGLImplementationOSMesaGL || impl == kGLImplementationMockGL; |
34 } | 31 } |
35 | 32 |
36 scoped_refptr<GLSurface> CreateDefaultViewGLSurface( | 33 scoped_refptr<GLSurface> CreateDefaultViewGLSurface( |
37 gfx::AcceleratedWidget window) { | 34 gfx::AcceleratedWidget window) { |
38 switch (GetGLImplementation()) { | 35 switch (GetGLImplementation()) { |
39 case kGLImplementationOSMesaGL: | 36 case kGLImplementationOSMesaGL: |
40 return InitializeGLSurface(new GLSurfaceOSMesaHeadless()); | 37 return InitializeGLSurface(new GLSurfaceOSMesaHeadless()); |
41 case kGLImplementationMockGL: | 38 case kGLImplementationMockGL: |
(...skipping 14 matching lines...) Expand all Loading... |
56 return InitializeGLSurface(new GLSurfaceStub); | 53 return InitializeGLSurface(new GLSurfaceStub); |
57 default: | 54 default: |
58 NOTREACHED(); | 55 NOTREACHED(); |
59 } | 56 } |
60 return nullptr; | 57 return nullptr; |
61 } | 58 } |
62 | 59 |
63 } // namespace | 60 } // namespace |
64 | 61 |
65 std::vector<GLImplementation> GetAllowedGLImplementations() { | 62 std::vector<GLImplementation> GetAllowedGLImplementations() { |
66 std::vector<GLImplementation> impls; | 63 ui::OzonePlatform::InitializeForGPU(); |
67 impls.push_back(kGLImplementationEGLGLES2); | 64 return GetSurfaceFactoryOzone()->GetAllowedGLImplementations(); |
68 impls.push_back(kGLImplementationOSMesaGL); | |
69 return impls; | |
70 } | 65 } |
71 | 66 |
72 bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info) { | 67 bool GetGLWindowSystemBindingInfo(GLWindowSystemBindingInfo* info) { |
| 68 if (HasGLOzone()) |
| 69 return GetGLOzone()->GetGLWindowSystemBindingInfo(info); |
| 70 |
| 71 // TODO(kylechar): This is deprecated and can be removed once all Ozone |
| 72 // platforms use GLOzone instead. |
73 switch (GetGLImplementation()) { | 73 switch (GetGLImplementation()) { |
74 case kGLImplementationEGLGLES2: | 74 case kGLImplementationEGLGLES2: |
75 return GetGLWindowSystemBindingInfoEGL(info); | 75 return GetGLWindowSystemBindingInfoEGL(info); |
76 default: | 76 default: |
77 return false; | 77 return false; |
78 } | 78 } |
79 } | 79 } |
80 | 80 |
81 scoped_refptr<GLContext> CreateGLContext(GLShareGroup* share_group, | 81 scoped_refptr<GLContext> CreateGLContext(GLShareGroup* share_group, |
82 GLSurface* compatible_surface, | 82 GLSurface* compatible_surface, |
83 GpuPreference gpu_preference) { | 83 GpuPreference gpu_preference) { |
84 TRACE_EVENT0("gpu", "gl::init::CreateGLContext"); | 84 TRACE_EVENT0("gpu", "gl::init::CreateGLContext"); |
| 85 |
| 86 if (HasGLOzone()) { |
| 87 return GetGLOzone()->CreateGLContext(share_group, compatible_surface, |
| 88 gpu_preference); |
| 89 } |
| 90 |
85 switch (GetGLImplementation()) { | 91 switch (GetGLImplementation()) { |
86 case kGLImplementationMockGL: | 92 case kGLImplementationMockGL: |
87 return scoped_refptr<GLContext>(new GLContextStub(share_group)); | 93 return scoped_refptr<GLContext>(new GLContextStub(share_group)); |
88 case kGLImplementationOSMesaGL: | 94 case kGLImplementationOSMesaGL: |
89 return InitializeGLContext(new GLContextOSMesa(share_group), | 95 return InitializeGLContext(new GLContextOSMesa(share_group), |
90 compatible_surface, gpu_preference); | 96 compatible_surface, gpu_preference); |
91 case kGLImplementationEGLGLES2: | 97 case kGLImplementationEGLGLES2: |
92 return InitializeGLContext(new GLContextEGL(share_group), | 98 return InitializeGLContext(new GLContextEGL(share_group), |
93 compatible_surface, gpu_preference); | 99 compatible_surface, gpu_preference); |
94 default: | 100 default: |
95 NOTREACHED(); | 101 NOTREACHED(); |
96 } | 102 } |
97 return nullptr; | 103 return nullptr; |
98 } | 104 } |
99 | 105 |
100 scoped_refptr<GLSurface> CreateViewGLSurface(gfx::AcceleratedWidget window) { | 106 scoped_refptr<GLSurface> CreateViewGLSurface(gfx::AcceleratedWidget window) { |
101 TRACE_EVENT0("gpu", "gl::init::CreateViewGLSurface"); | 107 TRACE_EVENT0("gpu", "gl::init::CreateViewGLSurface"); |
102 | 108 |
| 109 if (HasGLOzone()) |
| 110 return GetGLOzone()->CreateViewGLSurface(window); |
| 111 |
103 if (HasDefaultImplementation(GetGLImplementation())) | 112 if (HasDefaultImplementation(GetGLImplementation())) |
104 return CreateDefaultViewGLSurface(window); | 113 return CreateDefaultViewGLSurface(window); |
105 | 114 |
106 return GetSurfaceFactory()->CreateViewGLSurface(GetGLImplementation(), | 115 // TODO(kylechar): This is deprecated and can be removed once all Ozone |
107 window); | 116 // platforms use GLOzone instead. |
| 117 return GetSurfaceFactoryOzone()->CreateViewGLSurface(GetGLImplementation(), |
| 118 window); |
108 } | 119 } |
109 | 120 |
110 scoped_refptr<GLSurface> CreateSurfacelessViewGLSurface( | 121 scoped_refptr<GLSurface> CreateSurfacelessViewGLSurface( |
111 gfx::AcceleratedWidget window) { | 122 gfx::AcceleratedWidget window) { |
112 TRACE_EVENT0("gpu", "gl::init::CreateSurfacelessViewGLSurface"); | 123 TRACE_EVENT0("gpu", "gl::init::CreateSurfacelessViewGLSurface"); |
113 | 124 |
114 return GetSurfaceFactory()->CreateSurfacelessViewGLSurface( | 125 if (HasGLOzone()) |
| 126 return GetGLOzone()->CreateSurfacelessViewGLSurface(window); |
| 127 |
| 128 // TODO(kylechar): This is deprecated and can be removed once all Ozone |
| 129 // platforms use GLOzone instead. |
| 130 return GetSurfaceFactoryOzone()->CreateSurfacelessViewGLSurface( |
115 GetGLImplementation(), window); | 131 GetGLImplementation(), window); |
116 } | 132 } |
117 | 133 |
118 scoped_refptr<GLSurface> CreateOffscreenGLSurface(const gfx::Size& size) { | 134 scoped_refptr<GLSurface> CreateOffscreenGLSurface(const gfx::Size& size) { |
119 TRACE_EVENT0("gpu", "gl::init::CreateOffscreenGLSurface"); | 135 TRACE_EVENT0("gpu", "gl::init::CreateOffscreenGLSurface"); |
120 | 136 |
| 137 if (HasGLOzone()) |
| 138 return GetGLOzone()->CreateOffscreenGLSurface(size); |
| 139 |
121 if (HasDefaultImplementation(GetGLImplementation())) | 140 if (HasDefaultImplementation(GetGLImplementation())) |
122 return CreateDefaultOffscreenGLSurface(size); | 141 return CreateDefaultOffscreenGLSurface(size); |
123 | 142 |
124 return GetSurfaceFactory()->CreateOffscreenGLSurface(GetGLImplementation(), | 143 // TODO(kylechar): This is deprecated and can be removed once all Ozone |
125 size); | 144 // platforms use GLOzone instead. |
| 145 return GetSurfaceFactoryOzone()->CreateOffscreenGLSurface( |
| 146 GetGLImplementation(), size); |
126 } | 147 } |
127 | 148 |
128 } // namespace init | 149 } // namespace init |
129 } // namespace gl | 150 } // namespace gl |
OLD | NEW |