drm_hwcomposer: add GLES compositor

This patch adds the GLES based compositor. This doesn't actually make
the hwcomposer use it, which will come in a later commit. This
version of the compositor uses syncpoints optimally and has no
fallback for the case where too many (32 currently) layers overlap.

(cherry picked from commit 6996227fe43bcf78c6e692e8098bdddb95bfda6e)

Change-Id: I3503cb5d1b309ae06d1ed2a8d244640ad81eda9e
diff --git a/gl_compositor.h b/gl_compositor.h
new file mode 100644
index 0000000..e88ff13
--- /dev/null
+++ b/gl_compositor.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdint.h>
+#include <stdint.h>
+#include "compositor.h"
+
+struct hwc_layer_1;
+struct hwc_import_context;
+
+namespace android {
+
+class GLComposition;
+
+class GLCompositor : public Compositor, public Targeting {
+ public:
+  GLCompositor();
+  virtual ~GLCompositor();
+
+  virtual int Init();
+  virtual Targeting *targeting();
+  virtual int CreateTarget(sp<android::GraphicBuffer> &buffer);
+  virtual void SetTarget(int target);
+  virtual void ForgetTarget(int target);
+  virtual Composition *CreateComposition();
+  virtual int QueueComposition(Composition *composition);
+  virtual int Composite();
+
+ private:
+  struct priv_data;
+  struct texture_from_handle;
+
+  struct priv_data *priv_;
+
+  int BeginContext();
+  int EndContext();
+  int GenerateShaders();
+  int DoComposition(const GLComposition &composition);
+  int DoFenceWait(int acquireFenceFd);
+  int CreateTextureFromHandle(buffer_handle_t handle,
+                              struct texture_from_handle *tex);
+  void DestroyTextureFromHandle(const struct texture_from_handle &tex);
+  void CheckAndDestroyTarget(int target_handle);
+
+  friend GLComposition;
+};
+
+}  // namespace android