skia: Add support for ANGLE on linux
authorhendrikw <hendrikw@chromium.org>
Wed, 23 Sep 2015 18:35:55 +0000 (11:35 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 23 Sep 2015 18:35:55 +0000 (11:35 -0700)
This will allow the ANGLE guys to test the ANGLE gl backend
with nanobench and DM

Review URL: https://codereview.chromium.org/1343193005

gyp/common.gypi
gyp/common_conditions.gypi
gyp/common_variables.gypi
include/views/SkOSWindow_Unix.h
src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp

index a3ce66e3621ff19052c50f1bfbd196225ff93fb2..46ae9f37e7f85015f7984d42916ee574e726f830 100644 (file)
@@ -30,8 +30,8 @@
         [ 'skia_mesa and skia_os not in ["mac", "linux"]', {
           'error': '<!(skia_mesa=1 only supported with skia_os="mac" or "linux".)',
         }],
-        [ 'skia_angle and not skia_os == "win"', {
-          'error': '<!(skia_angle=1 only supported with skia_os="win".)',
+        [ 'skia_angle and not (skia_os == "win" or skia_os == "linux")', {
+          'error': '<!(skia_angle=1 only supported with skia_os="win" or skia_os="linux".)',
         }],
         [ 'skia_os == "chromeos" and OS != "linux"', {
           'error': '<!(Skia ChromeOS build is only supported on Linux.)',
index 54fa54345ec1d18468a5eef84dd0c20963b02864..60020ed23a619de4664302b174b93e0803f4db8f 100644 (file)
                   '-m32',
                 ],
               }],
+              [ 'skia_angle == 1' , {
+                'cflags!': [
+                  '-fstrict-aliasing',
+                ],
+                'cflags_cc!': [
+                  '-Wnon-virtual-dtor',
+                ],
+                'cflags_cc': [
+                  '-Wno-unknown-pragmas',
+                ],
+              }],
             ],
           }],
           [ 'skia_warnings_as_errors', {
index 3f122a5a781f770a4fe0dc467fadfd2cdfeb79cb..e8a835541c649a5f42ec3abf527b950ab811ca77 100644 (file)
         }, {
           'os_posix%': 1,
         }],
+        [ 'skia_os == "linux"', {
+          # ANGLE on linux require these two variable be defined.
+          'chromeos%': 0,
+          'use_x11%': 1,
+        }],
         [ 'skia_os == "android"', {
           'skia_static_initializers%': 0,
           'skia_egl%': 1,
       }, {
         'skia_release_optimization_level%': '<(skia_default_gcc_optimization_level)',
       }],
+      [ 'skia_os == "linux"', {
+        # ANGLE on linux require these two variable be defined.
+        'chromeos%': 0,
+        'use_x11%': 1,
+      }],
       [ 'skia_sanitizer', {
         'skia_clang_build': 1,
         'skia_keep_frame_pointer': 1,
         'skia_clang_build%': 0,
         'skia_keep_frame_pointer%': 0,
       }],
-      [ 'skia_shared_lib or skia_sanitizer or skia_os == "android"', {
+      [ 'skia_shared_lib or skia_sanitizer or skia_os == "android" or (skia_os == "linux" and skia_angle == 1)', {
           'skia_pic%' : 1,
         }, {
           'skia_pic%' : 0,
index 62705b441ea75c418169f4db16d8fe24bd3b1a97..d7fcf6e3928663fdd9a9cd4af424fa3a081d3d2b 100644 (file)
@@ -36,6 +36,9 @@ public:
     enum SkBackEndTypes {
         kNone_BackEndType,
         kNativeGL_BackEndType,
+#if SK_ANGLE
+        kANGLE_BackEndType,
+#endif // SK_ANGLE
     };
 
     bool attach(SkBackEndTypes attachType, int msaaSampleCount, AttachmentInfo*);
index 51e461a0d808f4f88072b987fe6dea1f446e0531..9a4dffb4b199f081c559988f95ba07fbf5047a28 100644 (file)
 #include "gl/GrGLInterface.h"
 #include "gl/GrGLAssembleInterface.h"
 
+#if defined _WIN32
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
+#else
+#include <dlfcn.h>
+#endif // defined _WIN32
+
 #include <EGL/egl.h>
 
 static GrGLFuncPtr angle_get_gl_proc(void* ctx, const char name[]) {
+#if defined _WIN32
     GrGLFuncPtr proc = (GrGLFuncPtr) GetProcAddress((HMODULE)ctx, name);
+#else
+    GrGLFuncPtr proc = (GrGLFuncPtr) dlsym(ctx, name);
+#endif // defined _WIN32
     if (proc) {
         return proc;
     }
@@ -23,17 +32,21 @@ static GrGLFuncPtr angle_get_gl_proc(void* ctx, const char name[]) {
 }
 
 const GrGLInterface* GrGLCreateANGLEInterface() {
+    static void* gANGLELib = nullptr;
 
-    static HMODULE ghANGLELib = nullptr;
-
-    if (nullptr == ghANGLELib) {
+    if (nullptr == gANGLELib) {
         // We load the ANGLE library and never let it go
-        ghANGLELib = LoadLibrary("libGLESv2.dll");
+#if defined _WIN32
+        gANGLELib = LoadLibrary("libGLESv2.dll");
+#else
+        gANGLELib = dlopen("libGLESv2.so", RTLD_LAZY);
+#endif // defined _WIN32
     }
-    if (nullptr == ghANGLELib) {
-        // We can't setup the interface correctly w/o the DLL
+
+    if (nullptr == gANGLELib) {
+        // We can't setup the interface correctly w/o the so
         return nullptr;
     }
 
-    return GrGLAssembleGLESInterface(ghANGLELib, angle_get_gl_proc);
+    return GrGLAssembleGLESInterface(gANGLELib, angle_get_gl_proc);
 }