| 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 | 
|---|