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