Initial work to connect gralloc to egl::Image

Change-Id: Ia11a9520bb6525dc367e0b2956850574b29e4796
Reviewed-on: https://swiftshader-review.googlesource.com/2900
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Common/GrallocAndroid.cpp b/src/Common/GrallocAndroid.cpp
new file mode 100644
index 0000000..307a16f
--- /dev/null
+++ b/src/Common/GrallocAndroid.cpp
@@ -0,0 +1,31 @@
+#include "GrallocAndroid.hpp"
+
+#include <cutils/log.h>
+
+GrallocModule* GrallocModule::getInstance()
+{
+    static GrallocModule instance;
+    return &instance;
+}
+
+GrallocModule::GrallocModule()
+{
+    const hw_module_t* module;
+    hw_get_module("converting_gralloc", &module);
+    if (module)
+    {
+        m_supportsConversion = true;
+        ALOGI("Loaded converting gralloc");
+    }
+    else
+    {
+        m_supportsConversion = false;
+        ALOGE("Falling back to standard gralloc with reduced format support");
+        hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
+    }
+    if (!module)
+    {
+        ALOGE("Failed to load standard gralloc");
+    }
+    m_module = reinterpret_cast<const gralloc_module_t*>(module);
+}
diff --git a/src/Common/GrallocAndroid.hpp b/src/Common/GrallocAndroid.hpp
new file mode 100644
index 0000000..4714d36
--- /dev/null
+++ b/src/Common/GrallocAndroid.hpp
@@ -0,0 +1,27 @@
+#ifndef GRALLOC_ANDROID
+#define GRALLOC_ANDROID
+
+#include <hardware/gralloc.h>
+
+class GrallocModule
+{
+public:
+    static GrallocModule* getInstance();
+    bool supportsConversion() const { return m_supportsConversion; }
+    int lock(
+        buffer_handle_t handle, int usage,
+        int left, int top, int width, int height, void**vaddr) {
+        return m_module->lock(m_module, handle, 0, left, top, width, height, vaddr);
+    }
+
+    int unlock(buffer_handle_t handle) {
+        return m_module->unlock(m_module, handle);
+    }
+
+private:
+    GrallocModule();
+    bool m_supportsConversion;
+    const gralloc_module_t* m_module;
+};
+
+#endif  // GRALLOC_ANDROID