drm_hwcomposer: Move eglCreateImageKHR into Importer

Since NV has a "special" nonstandard way to get an EGLImage from a
handle, move this into Importer where the other NV specialness is
abstracted.  For the platformdrmgeneric case, use the dmabuf EGL
Extension.

Change-Id: I5353f4c95f55174df55ba92931cdc9a9eab80dca
Signed-off-by: Robert Foss <robert.foss@collabora.com>
diff --git a/glworker.cpp b/glworker.cpp
index 6ce2de3..e12995e 100644
--- a/glworker.cpp
+++ b/glworker.cpp
@@ -35,14 +35,10 @@
 #include <utils/Trace.h>
 
 #include "drmdisplaycomposition.h"
+#include "platform.h"
 
 #include "glworker.h"
 
-// TODO(zachr): use hwc_drm_bo to turn buffer handles into textures
-#ifndef EGL_NATIVE_HANDLE_ANDROID_NVX
-#define EGL_NATIVE_HANDLE_ANDROID_NVX 0x322A
-#endif
-
 #define MAX_OVERLAPPING_LAYERS 64
 
 namespace android {
@@ -416,10 +412,9 @@
 
 static int CreateTextureFromHandle(EGLDisplay egl_display,
                                    buffer_handle_t handle,
+                                   Importer *importer,
                                    AutoEGLImageAndGLTexture *out) {
-  EGLImageKHR image = eglCreateImageKHR(
-      egl_display, EGL_NO_CONTEXT, EGL_NATIVE_HANDLE_ANDROID_NVX,
-      (EGLClientBuffer)handle, NULL /* no attribs */);
+  EGLImageKHR image = importer->ImportImage(egl_display, handle);
 
   if (image == EGL_NO_IMAGE_KHR) {
     ALOGE("Failed to make image %s %p", GetEGLError(), handle);
@@ -552,7 +547,8 @@
 int GLWorkerCompositor::Composite(DrmHwcLayer *layers,
                                   DrmCompositionRegion *regions,
                                   size_t num_regions,
-                                  const sp<GraphicBuffer> &framebuffer) {
+                                  const sp<GraphicBuffer> &framebuffer,
+                                  Importer *importer) {
   ATRACE_CALL();
   int ret = 0;
   std::vector<AutoEGLImageAndGLTexture> layer_textures;
@@ -590,7 +586,7 @@
       continue;
 
     ret = CreateTextureFromHandle(egl_display_, layer->get_usable_handle(),
-                                  &layer_textures.back());
+                                  importer, &layer_textures.back());
 
     if (!ret) {
       ret = EGLFenceWait(egl_display_, layer->acquire_fence.Release());