[RenderEngine] Organize RenderEngine directory.

This patch:
1. adds proper namespace renderengine to all RenderEngine code,
   and namespace gl to all GLES related code
2. creates gl/ directory for GLES backend code
3. Reorder include header files, remove unused header files.

BUG: 112585051
Test: Build, flash, run display validation
Change-Id: I81f0b8831213607cde08562958f7c38ddaf4c9e6
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index 1bb7a85..3e2fb2e 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -58,7 +58,7 @@
         mRefreshPending(false) {
     ALOGV("Creating Layer %s", name.string());
 
-    mTexture.init(Texture::TEXTURE_EXTERNAL, mTextureName);
+    mTexture.init(renderengine::Texture::TEXTURE_EXTERNAL, mTextureName);
 
     mPremultipliedAlpha = !(flags & ISurfaceComposerClient::eNonPremultiplied);
 
@@ -608,7 +608,7 @@
 
     // TODO: we probably want to generate the texture coords with the mesh
     // here we assume that we only have 4 vertices
-    Mesh::VertexArray<vec2> texCoords(getBE().mMesh.getTexCoordArray<vec2>());
+    renderengine::Mesh::VertexArray<vec2> texCoords(getBE().mMesh.getTexCoordArray<vec2>());
     texCoords[0] = vec2(left, 1.0f - top);
     texCoords[1] = vec2(left, 1.0f - bottom);
     texCoords[2] = vec2(right, 1.0f - bottom);
diff --git a/services/surfaceflinger/BufferLayer.h b/services/surfaceflinger/BufferLayer.h
index 3d06ded..45906ff 100644
--- a/services/surfaceflinger/BufferLayer.h
+++ b/services/surfaceflinger/BufferLayer.h
@@ -178,7 +178,7 @@
     bool mBufferLatched; // TODO: Use mActiveBuffer?
 
     // The texture used to draw the layer in GLES composition mode
-    mutable Texture mTexture;
+    mutable renderengine::Texture mTexture;
 
     bool mRefreshPending;
 };
diff --git a/services/surfaceflinger/BufferLayerConsumer.cpp b/services/surfaceflinger/BufferLayerConsumer.cpp
index aa8f4e1..fa181ad 100644
--- a/services/surfaceflinger/BufferLayerConsumer.cpp
+++ b/services/surfaceflinger/BufferLayerConsumer.cpp
@@ -54,7 +54,8 @@
 static const mat4 mtxIdentity;
 
 BufferLayerConsumer::BufferLayerConsumer(const sp<IGraphicBufferConsumer>& bq,
-                                         RE::RenderEngine& engine, uint32_t tex, Layer* layer)
+                                         renderengine::RenderEngine& engine, uint32_t tex,
+                                         Layer* layer)
       : ConsumerBase(bq, false),
         mCurrentCrop(Rect::EMPTY_RECT),
         mCurrentTransform(0),
@@ -592,7 +593,8 @@
     ConsumerBase::dumpLocked(result, prefix);
 }
 
-BufferLayerConsumer::Image::Image(sp<GraphicBuffer> graphicBuffer, RE::RenderEngine& engine)
+BufferLayerConsumer::Image::Image(sp<GraphicBuffer> graphicBuffer,
+                                  renderengine::RenderEngine& engine)
       : mGraphicBuffer(graphicBuffer),
         mImage{engine.createImage()},
         mCreated(false),
diff --git a/services/surfaceflinger/BufferLayerConsumer.h b/services/surfaceflinger/BufferLayerConsumer.h
index 943b8a8..257a4e5 100644
--- a/services/surfaceflinger/BufferLayerConsumer.h
+++ b/services/surfaceflinger/BufferLayerConsumer.h
@@ -37,10 +37,10 @@
 class Layer;
 class String8;
 
-namespace RE {
+namespace renderengine {
 class RenderEngine;
 class Image;
-} // namespace RE
+} // namespace renderengine
 
 /*
  * BufferLayerConsumer consumes buffers of graphics data from a BufferQueue,
@@ -73,7 +73,7 @@
     // BufferLayerConsumer constructs a new BufferLayerConsumer object.  The
     // tex parameter indicates the name of the RenderEngine texture to which
     // images are to be streamed.
-    BufferLayerConsumer(const sp<IGraphicBufferConsumer>& bq, RE::RenderEngine& engine,
+    BufferLayerConsumer(const sp<IGraphicBufferConsumer>& bq, renderengine::RenderEngine& engine,
                         uint32_t tex, Layer* layer);
 
     // Sets the contents changed listener. This should be used instead of
@@ -216,19 +216,19 @@
     status_t bindTextureImageLocked();
 
 private:
-    // Image is a utility class for tracking and creating RE::Images. There
+    // Image is a utility class for tracking and creating renderengine::Images. There
     // is primarily just one image per slot, but there is also special cases:
     //  - After freeBuffer, we must still keep the current image/buffer
-    // Reference counting RE::Images lets us handle all these cases easily while
-    // also only creating new RE::Images from buffers when required.
+    // Reference counting renderengine::Images lets us handle all these cases easily while
+    // also only creating new renderengine::Images from buffers when required.
     class Image : public LightRefBase<Image> {
     public:
-        Image(sp<GraphicBuffer> graphicBuffer, RE::RenderEngine& engine);
+        Image(sp<GraphicBuffer> graphicBuffer, renderengine::RenderEngine& engine);
 
         Image(const Image& rhs) = delete;
         Image& operator=(const Image& rhs) = delete;
 
-        // createIfNeeded creates an RE::Image if we haven't created one yet.
+        // createIfNeeded creates an renderengine::Image if we haven't created one yet.
         status_t createIfNeeded();
 
         const sp<GraphicBuffer>& graphicBuffer() { return mGraphicBuffer; }
@@ -236,7 +236,7 @@
             return mGraphicBuffer == nullptr ? nullptr : mGraphicBuffer->handle;
         }
 
-        const RE::Image& image() const { return *mImage; }
+        const renderengine::Image& image() const { return *mImage; }
 
     private:
         // Only allow instantiation using ref counting.
@@ -247,7 +247,7 @@
         sp<GraphicBuffer> mGraphicBuffer;
 
         // mImage is the image created from mGraphicBuffer.
-        std::unique_ptr<RE::Image> mImage;
+        std::unique_ptr<renderengine::Image> mImage;
         bool mCreated;
         int32_t mCropWidth;
         int32_t mCropHeight;
@@ -255,7 +255,7 @@
 
     // freeBufferLocked frees up the given buffer slot. If the slot has been
     // initialized this will release the reference to the GraphicBuffer in
-    // that slot and destroy the RE::Image in that slot.  Otherwise it has no
+    // that slot and destroy the renderengine::Image in that slot.  Otherwise it has no
     // effect.
     //
     // This method must be called with mMutex locked.
@@ -351,7 +351,7 @@
     // setFilteringEnabled().
     bool mFilteringEnabled;
 
-    RE::RenderEngine& mRE;
+    renderengine::RenderEngine& mRE;
 
     // mTexName is the name of the RenderEngine texture to which streamed
     // images will be bound when bindTexImage is called. It is set at
diff --git a/services/surfaceflinger/BufferStateLayer.h b/services/surfaceflinger/BufferStateLayer.h
index 038eb01..5cc8d56 100644
--- a/services/surfaceflinger/BufferStateLayer.h
+++ b/services/surfaceflinger/BufferStateLayer.h
@@ -127,7 +127,7 @@
 private:
     void onFirstRef() override;
 
-    std::unique_ptr<RE::Image> mTextureImage;
+    std::unique_ptr<renderengine::Image> mTextureImage;
 
     std::array<float, 16> mTransformMatrix;
 
diff --git a/services/surfaceflinger/ColorLayer.cpp b/services/surfaceflinger/ColorLayer.cpp
index acadfa0..9bf75e8 100644
--- a/services/surfaceflinger/ColorLayer.cpp
+++ b/services/surfaceflinger/ColorLayer.cpp
@@ -45,7 +45,7 @@
                         bool useIdentityTransform) {
     half4 color = getColor();
     if (color.a > 0) {
-        Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2);
+        renderengine::Mesh mesh(renderengine::Mesh::TRIANGLE_FAN, 4, 2);
         computeGeometry(renderArea, mesh, useIdentityTransform);
         auto& engine(mFlinger->getRenderEngine());
         engine.setupLayerBlending(getPremultipledAlpha(), false /* opaque */,
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index aab6c22..1a99718 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -215,7 +215,7 @@
         const wp<IBinder>& displayToken,
         const sp<ANativeWindow>& nativeWindow,
         const sp<DisplaySurface>& displaySurface,
-        std::unique_ptr<RE::Surface> renderSurface,
+        std::unique_ptr<renderengine::Surface> renderSurface,
         int displayWidth,
         int displayHeight,
         bool hasWideColorGamut,
diff --git a/services/surfaceflinger/DisplayDevice.h b/services/surfaceflinger/DisplayDevice.h
index ddb09c5..912deef 100644
--- a/services/surfaceflinger/DisplayDevice.h
+++ b/services/surfaceflinger/DisplayDevice.h
@@ -84,7 +84,7 @@
             const wp<IBinder>& displayToken,
             const sp<ANativeWindow>& nativeWindow,
             const sp<DisplaySurface>& displaySurface,
-            std::unique_ptr<RE::Surface> renderSurface,
+            std::unique_ptr<renderengine::Surface> renderSurface,
             int displayWidth,
             int displayHeight,
             bool hasWideColorGamut,
@@ -231,7 +231,7 @@
     sp<ANativeWindow> mNativeWindow;
     sp<DisplaySurface> mDisplaySurface;
 
-    std::unique_ptr<RE::Surface> mSurface;
+    std::unique_ptr<renderengine::Surface> mSurface;
     int             mDisplayWidth;
     int             mDisplayHeight;
     mutable uint32_t mPageFlipCount;
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index c7d67e2..d2ab1b3 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -795,7 +795,8 @@
     }
 }
 
-void Layer::computeGeometry(const RenderArea& renderArea, Mesh& mesh,
+void Layer::computeGeometry(const RenderArea& renderArea,
+                            renderengine::Mesh& mesh,
                             bool useIdentityTransform) const {
     const Layer::State& s(getDrawingState());
     const ui::Transform renderAreaTransform(renderArea.getTransform());
@@ -823,7 +824,7 @@
         boundPoint(&rt, finalCrop);
     }
 
-    Mesh::VertexArray<vec2> position(mesh.getPositionArray<vec2>());
+    renderengine::Mesh::VertexArray<vec2> position(mesh.getPositionArray<vec2>());
     position[0] = renderAreaTransform.transform(lt);
     position[1] = renderAreaTransform.transform(lb);
     position[2] = renderAreaTransform.transform(rb);
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index 604ec65..56261b9 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -284,7 +284,8 @@
         return getLayerStack() == layerStack && (!mPrimaryDisplayOnly || isPrimaryDisplay);
     }
 
-    void computeGeometry(const RenderArea& renderArea, Mesh& mesh, bool useIdentityTransform) const;
+    void computeGeometry(const RenderArea& renderArea, renderengine::Mesh& mesh,
+                         bool useIdentityTransform) const;
     FloatRect computeBounds(const Region& activeTransparentRegion) const;
     FloatRect computeBounds() const;
 
diff --git a/services/surfaceflinger/LayerBE.cpp b/services/surfaceflinger/LayerBE.cpp
index f389b57..da98bf5 100644
--- a/services/surfaceflinger/LayerBE.cpp
+++ b/services/surfaceflinger/LayerBE.cpp
@@ -30,14 +30,14 @@
 
 LayerBE::LayerBE(Layer* layer, std::string layerName)
       : mLayer(layer),
-        mMesh(Mesh::TRIANGLE_FAN, 4, 2, 2) {
+        mMesh(renderengine::Mesh::TRIANGLE_FAN, 4, 2, 2) {
     compositionInfo.layer = std::make_shared<LayerBE>(*this);
     compositionInfo.layerName = layerName;
 }
 
 LayerBE::LayerBE(const LayerBE& layer)
       : mLayer(layer.mLayer),
-        mMesh(Mesh::TRIANGLE_FAN, 4, 2, 2) {
+        mMesh(renderengine::Mesh::TRIANGLE_FAN, 4, 2, 2) {
     compositionInfo.layer = layer.compositionInfo.layer;
     compositionInfo.layerName = layer.mLayer->getName().string();
 }
@@ -48,7 +48,7 @@
     }
 }
 
-void LayerBE::clear(RE::RenderEngine& engine) {
+void LayerBE::clear(renderengine::RenderEngine& engine) {
     engine.setupFillWithColor(0, 0, 0, 0);
     engine.drawMesh(mMesh);
 }
diff --git a/services/surfaceflinger/LayerBE.h b/services/surfaceflinger/LayerBE.h
index 531cdcd..f5150a7 100644
--- a/services/surfaceflinger/LayerBE.h
+++ b/services/surfaceflinger/LayerBE.h
@@ -91,13 +91,13 @@
     explicit LayerBE(const LayerBE& layer);
 
     void onLayerDisplayed(const sp<Fence>& releaseFence);
-    void clear(RE::RenderEngine& renderEngine);
-    Mesh& getMesh() { return mMesh; }
+    void clear(renderengine::RenderEngine& renderEngine);
+    renderengine::Mesh& getMesh() { return mMesh; }
 
 private:
     Layer*const mLayer;
     // The mesh used to draw the layer in GLES composition mode
-    Mesh mMesh;
+    renderengine::Mesh mMesh;
 
     // HWC items, accessed from the main thread
     struct HWCInfo {
diff --git a/services/surfaceflinger/RenderEngine/Android.bp b/services/surfaceflinger/RenderEngine/Android.bp
index 13752f2..f62596f 100644
--- a/services/surfaceflinger/RenderEngine/Android.bp
+++ b/services/surfaceflinger/RenderEngine/Android.bp
@@ -41,18 +41,24 @@
     name: "librenderengine_sources",
     srcs: [
         "Description.cpp",
-        "GLES20RenderEngine.cpp",
-        "GLExtensions.cpp",
         "Image.cpp",
         "Mesh.cpp",
-        "Program.cpp",
-        "ProgramCache.cpp",
         "RenderEngine.cpp",
         "Surface.cpp",
         "Texture.cpp",
     ],
 }
 
+filegroup {
+    name: "librenderengine_gl_sources",
+    srcs: [
+        "gl/GLES20RenderEngine.cpp",
+        "gl/GLExtensions.cpp",
+        "gl/Program.cpp",
+        "gl/ProgramCache.cpp",
+    ],
+}
+
 cc_library_static {
     name: "librenderengine",
     defaults: ["librenderengine_defaults"],
@@ -68,6 +74,7 @@
     ],
     srcs: [
         ":librenderengine_sources",
+        ":librenderengine_gl_sources",
     ],
     lto: {
         thin: true,
diff --git a/services/surfaceflinger/RenderEngine/Description.cpp b/services/surfaceflinger/RenderEngine/Description.cpp
index d5f2103..b7522da 100644
--- a/services/surfaceflinger/RenderEngine/Description.cpp
+++ b/services/surfaceflinger/RenderEngine/Description.cpp
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-#include <renderengine/Description.h>
+#include <renderengine/private/Description.h>
 
 #include <stdint.h>
-#include <string.h>
 
 #include <utils/TypeHelpers.h>
 
 namespace android {
+namespace renderengine {
 
 void Description::setPremultipliedAlpha(bool premultipliedAlpha) {
     mPremultipliedAlpha = premultipliedAlpha;
@@ -95,4 +95,5 @@
     mDisplayMaxLuminance = maxLuminance;
 }
 
-} /* namespace android */
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/Image.cpp b/services/surfaceflinger/RenderEngine/Image.cpp
index ee140eb..cabcace 100644
--- a/services/surfaceflinger/RenderEngine/Image.cpp
+++ b/services/surfaceflinger/RenderEngine/Image.cpp
@@ -19,12 +19,11 @@
 #include <vector>
 
 #include <log/log.h>
-
-#include <renderengine/GLExtensions.h>
 #include <renderengine/RenderEngine.h>
+#include "gl/GLExtensions.h"
 
 namespace android {
-namespace RE {
+namespace renderengine {
 
 Image::~Image() = default;
 
@@ -43,7 +42,7 @@
     attrs.push_back(EGL_IMAGE_PRESERVED_KHR);
     attrs.push_back(EGL_TRUE);
 
-    if (isProtected && GLExtensions::getInstance().hasProtectedContent()) {
+    if (isProtected && gl::GLExtensions::getInstance().hasProtectedContent()) {
         attrs.push_back(EGL_PROTECTED_CONTENT_EXT);
         attrs.push_back(EGL_TRUE);
     }
@@ -74,6 +73,6 @@
     return true;
 }
 
-} // namespace impl
-} // namespace RE
-} // namespace android
+}  // namespace impl
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/Mesh.cpp b/services/surfaceflinger/RenderEngine/Mesh.cpp
index 43852eb..5a3c2c8 100644
--- a/services/surfaceflinger/RenderEngine/Mesh.cpp
+++ b/services/surfaceflinger/RenderEngine/Mesh.cpp
@@ -19,6 +19,7 @@
 #include <utils/Log.h>
 
 namespace android {
+namespace renderengine {
 
 Mesh::Mesh(Primitive primitive, size_t vertexCount, size_t vertexSize, size_t texCoordSize)
       : mVertexCount(vertexCount),
@@ -94,4 +95,5 @@
     return mStride;
 }
 
-} /* namespace android */
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.cpp b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
index 594b1ed..c843428 100644
--- a/services/surfaceflinger/RenderEngine/RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/RenderEngine.cpp
@@ -16,29 +16,30 @@
 
 #include <renderengine/RenderEngine.h>
 
+#include <vector>
+
 #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
 #include <configstore/Utils.h>
 #include <log/log.h>
 #include <private/gui/SyncFeatures.h>
-#include <renderengine/GLES20RenderEngine.h>
-#include <renderengine/GLExtensions.h>
 #include <renderengine/Image.h>
 #include <renderengine/Mesh.h>
 #include <renderengine/Surface.h>
 #include <ui/Rect.h>
 #include <ui/Region.h>
-
-#include <vector>
+#include <utils/KeyedVector.h>
+#include "gl/GLES20RenderEngine.h"
+#include "gl/GLExtensions.h"
+#include "gl/ProgramCache.h"
 
 using namespace android::hardware::configstore;
 using namespace android::hardware::configstore::V1_0;
+using namespace android::renderengine::gl;
 
 extern "C" EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint name);
 
-// ---------------------------------------------------------------------------
 namespace android {
-namespace RE {
-// ---------------------------------------------------------------------------
+namespace renderengine {
 
 RenderEngine::~RenderEngine() = default;
 
@@ -187,22 +188,22 @@
     return mEGLDisplay == eglGetCurrentDisplay() && mEGLContext == eglGetCurrentContext();
 }
 
-std::unique_ptr<RE::Surface> RenderEngine::createSurface() {
+std::unique_ptr<renderengine::Surface> RenderEngine::createSurface() {
     return std::make_unique<Surface>(*this);
 }
 
-std::unique_ptr<RE::Image> RenderEngine::createImage() {
+std::unique_ptr<renderengine::Image> RenderEngine::createImage() {
     return std::make_unique<Image>(*this);
 }
 
-bool RenderEngine::setCurrentSurface(const android::RE::Surface& surface) {
-    // Note: RE::Surface is an abstract interface. This implementation only ever
-    // creates RE::impl::Surface's, so it is safe to just cast to the actual
+bool RenderEngine::setCurrentSurface(const android::renderengine::Surface& surface) {
+    // Note: renderengine::Surface is an abstract interface. This implementation only ever
+    // creates renderengine::impl::Surface's, so it is safe to just cast to the actual
     // type.
-    return setCurrentSurface(static_cast<const android::RE::impl::Surface&>(surface));
+    return setCurrentSurface(static_cast<const android::renderengine::impl::Surface&>(surface));
 }
 
-bool RenderEngine::setCurrentSurface(const android::RE::impl::Surface& surface) {
+bool RenderEngine::setCurrentSurface(const android::renderengine::impl::Surface& surface) {
     bool success = true;
     EGLSurface eglSurface = surface.getEGLSurface();
     if (eglSurface != eglGetCurrentSurface(EGL_DRAW)) {
@@ -374,14 +375,16 @@
     glDeleteTextures(count, names);
 }
 
-void RenderEngine::bindExternalTextureImage(uint32_t texName, const android::RE::Image& image) {
-    // Note: RE::Image is an abstract interface. This implementation only ever
-    // creates RE::impl::Image's, so it is safe to just cast to the actual type.
-    return bindExternalTextureImage(texName, static_cast<const android::RE::impl::Image&>(image));
+void RenderEngine::bindExternalTextureImage(uint32_t texName,
+                                            const android::renderengine::Image& image) {
+    // Note: renderengine::Image is an abstract interface. This implementation only ever
+    // creates renderengine::impl::Image's, so it is safe to just cast to the actual type.
+    return bindExternalTextureImage(texName,
+                                    static_cast<const android::renderengine::impl::Image&>(image));
 }
 
 void RenderEngine::bindExternalTextureImage(uint32_t texName,
-                                            const android::RE::impl::Image& image) {
+                                            const android::renderengine::impl::Image& image) {
     const GLenum target = GL_TEXTURE_EXTERNAL_OES;
 
     glBindTexture(target, texName);
@@ -405,10 +408,9 @@
     result.appendFormat("%s\n", extensions.getExtensions());
 }
 
-// ---------------------------------------------------------------------------
-
-void RenderEngine::bindNativeBufferAsFrameBuffer(ANativeWindowBuffer* buffer,
-                                                 RE::BindNativeBufferAsFramebuffer* bindHelper) {
+void RenderEngine::bindNativeBufferAsFrameBuffer(
+        ANativeWindowBuffer* buffer,
+        renderengine::BindNativeBufferAsFramebuffer* bindHelper) {
     bindHelper->mImage = eglCreateImageKHR(mEGLDisplay, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID,
                                            buffer, nullptr);
     if (bindHelper->mImage == EGL_NO_IMAGE_KHR) {
@@ -426,7 +428,8 @@
     bindHelper->mStatus = glStatus == GL_FRAMEBUFFER_COMPLETE_OES ? NO_ERROR : BAD_VALUE;
 }
 
-void RenderEngine::unbindNativeBufferAsFrameBuffer(RE::BindNativeBufferAsFramebuffer* bindHelper) {
+void RenderEngine::unbindNativeBufferAsFrameBuffer(
+        renderengine::BindNativeBufferAsFramebuffer* bindHelper) {
     if (bindHelper->mImage == EGL_NO_IMAGE_KHR) {
         return;
     }
@@ -598,8 +601,7 @@
     ProgramCache::getInstance().primeCache(mFeatureFlags & USE_COLOR_MANAGEMENT);
 }
 
-// ---------------------------------------------------------------------------
 
-} // namespace impl
-} // namespace RE
-} // namespace android
+}  // namespace impl
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/Surface.cpp b/services/surfaceflinger/RenderEngine/Surface.cpp
index 3e98ab4..b9f095b 100644
--- a/services/surfaceflinger/RenderEngine/Surface.cpp
+++ b/services/surfaceflinger/RenderEngine/Surface.cpp
@@ -21,7 +21,7 @@
 #include <ui/PixelFormat.h>
 
 namespace android {
-namespace RE {
+namespace renderengine {
 
 Surface::~Surface() = default;
 
@@ -106,6 +106,6 @@
     return querySurface(EGL_HEIGHT);
 }
 
-} // namespace impl
-} // namespace RE
-} // namespace android
+}  // namespace impl
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/Texture.cpp b/services/surfaceflinger/RenderEngine/Texture.cpp
index c07ba08..5eabbcf 100644
--- a/services/surfaceflinger/RenderEngine/Texture.cpp
+++ b/services/surfaceflinger/RenderEngine/Texture.cpp
@@ -16,9 +16,8 @@
 
 #include <renderengine/Texture.h>
 
-#include <string.h>
-
 namespace android {
+namespace renderengine {
 
 Texture::Texture()
       : mTextureName(0), mTextureTarget(TEXTURE_2D), mWidth(0), mHeight(0), mFiltering(false) {}
@@ -74,4 +73,5 @@
     return mHeight;
 }
 
-} /* namespace android */
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp b/services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.cpp
similarity index 96%
rename from services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
rename to services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.cpp
index 617ba76..e0f1850 100644
--- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.cpp
@@ -19,28 +19,26 @@
 #define LOG_TAG "RenderEngine"
 #define ATRACE_TAG ATRACE_TAG_GRAPHICS
 
-#include <renderengine/GLES20RenderEngine.h>
+#include "GLES20RenderEngine.h"
+
+#include <math.h>
+#include <fstream>
+#include <sstream>
 
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
-#include <renderengine/Description.h>
+#include <cutils/compiler.h>
 #include <renderengine/Mesh.h>
-#include <renderengine/Program.h>
-#include <renderengine/ProgramCache.h>
 #include <renderengine/Texture.h>
+#include <renderengine/private/Description.h>
 #include <ui/ColorSpace.h>
 #include <ui/DebugUtils.h>
 #include <ui/Rect.h>
 #include <utils/String8.h>
 #include <utils/Trace.h>
+#include "Program.h"
+#include "ProgramCache.h"
 
-#include <cutils/compiler.h>
-#include <math.h>
-
-#include <fstream>
-#include <sstream>
-
-// ---------------------------------------------------------------------------
 bool checkGlError(const char* op, int lineNumber) {
     bool errorFound = false;
     GLint error = glGetError();
@@ -100,11 +98,9 @@
     file.write(reinterpret_cast<char*>(outBuffer.data()), outBuffer.size());
 }
 
-// ---------------------------------------------------------------------------
 namespace android {
-namespace RE {
-namespace impl {
-// ---------------------------------------------------------------------------
+namespace renderengine {
+namespace gl {
 
 using ui::Dataspace;
 
@@ -463,11 +459,9 @@
     return (isInputHdrDataSpace || isOutputHdrDataSpace) && inputTransfer != outputTransfer;
 }
 
-// ---------------------------------------------------------------------------
-} // namespace impl
-} // namespace RE
-} // namespace android
-// ---------------------------------------------------------------------------
+}  // namespace gl
+}  // namespace renderengine
+}  // namespace android
 
 #if defined(__gl_h_)
 #error "don't include gl/gl.h in this file"
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/GLES20RenderEngine.h b/services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.h
similarity index 85%
rename from services/surfaceflinger/RenderEngine/include/renderengine/GLES20RenderEngine.h
rename to services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.h
index 0e9efdb..c830184 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/GLES20RenderEngine.h
+++ b/services/surfaceflinger/RenderEngine/gl/GLES20RenderEngine.h
@@ -21,22 +21,21 @@
 #include <sys/types.h>
 
 #include <GLES2/gl2.h>
-#include <renderengine/Description.h>
-#include <renderengine/ProgramCache.h>
 #include <renderengine/RenderEngine.h>
+#include <renderengine/private/Description.h>
 
-// ---------------------------------------------------------------------------
 namespace android {
-// ---------------------------------------------------------------------------
 
 class String8;
+
+namespace renderengine {
+
 class Mesh;
 class Texture;
 
-namespace RE {
-namespace impl {
+namespace gl {
 
-class GLES20RenderEngine : public RenderEngine {
+class GLES20RenderEngine : public impl::RenderEngine {
     GLuint mProtectedTexName;
     GLint mMaxViewportDims[2];
     GLint mMaxTextureSize;
@@ -52,7 +51,6 @@
     };
 
     Description mState;
-    Vector<Group> mGroupStack;
 
     virtual void bindImageAsFramebuffer(EGLImageKHR image, uint32_t* texName, uint32_t* fbName,
                                         uint32_t* status);
@@ -112,10 +110,8 @@
     bool needsXYZTransformMatrix() const;
 };
 
-// ---------------------------------------------------------------------------
-} // namespace impl
-} // namespace RE
-} // namespace android
-// ---------------------------------------------------------------------------
+}  // namespace gl
+}  // namespace renderengine
+}  // namespace android
 
 #endif /* SF_GLES20RENDERENGINE_H_ */
diff --git a/services/surfaceflinger/RenderEngine/GLExtensions.cpp b/services/surfaceflinger/RenderEngine/gl/GLExtensions.cpp
similarity index 92%
rename from services/surfaceflinger/RenderEngine/GLExtensions.cpp
rename to services/surfaceflinger/RenderEngine/gl/GLExtensions.cpp
index b4fb2a1..6f50ea7 100644
--- a/services/surfaceflinger/RenderEngine/GLExtensions.cpp
+++ b/services/surfaceflinger/RenderEngine/gl/GLExtensions.cpp
@@ -14,16 +14,17 @@
  * limitations under the License.
  */
 
-#include <renderengine/GLExtensions.h>
+#include "GLExtensions.h"
 
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 
-namespace android {
-// ---------------------------------------------------------------------------
+ANDROID_SINGLETON_STATIC_INSTANCE(android::renderengine::gl::GLExtensions)
 
-ANDROID_SINGLETON_STATIC_INSTANCE(GLExtensions)
+namespace android {
+namespace renderengine {
+namespace gl {
 
 SortedVector<String8> GLExtensions::parseExtensionString(char const* extensions) {
     SortedVector<String8> list;
@@ -120,5 +121,6 @@
     return mEGLExtensionList.indexOf(s) >= 0;
 }
 
-// ---------------------------------------------------------------------------
-}; // namespace android
+}  // namespace gl
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/GLExtensions.h b/services/surfaceflinger/RenderEngine/gl/GLExtensions.h
similarity index 93%
rename from services/surfaceflinger/RenderEngine/include/renderengine/GLExtensions.h
rename to services/surfaceflinger/RenderEngine/gl/GLExtensions.h
index 1ff0d24..efdd8b7 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/GLExtensions.h
+++ b/services/surfaceflinger/RenderEngine/gl/GLExtensions.h
@@ -24,13 +24,13 @@
 #include <EGL/eglext.h>
 #include <GLES/gl.h>
 #include <GLES/glext.h>
-
 #include <utils/Singleton.h>
 #include <utils/SortedVector.h>
 #include <utils/String8.h>
 
 namespace android {
-// ---------------------------------------------------------------------------
+namespace renderengine {
+namespace gl {
 
 class GLExtensions : public Singleton<GLExtensions> {
     friend class Singleton<GLExtensions>;
@@ -82,7 +82,8 @@
     bool hasEGLExtension(char const* extension) const;
 };
 
-// ---------------------------------------------------------------------------
-}; // namespace android
+}  // namespace gl
+}  // namespace renderengine
+}  // namespace android
 
 #endif // ANDROID_SF_GLEXTENSION_H
diff --git a/services/surfaceflinger/RenderEngine/Program.cpp b/services/surfaceflinger/RenderEngine/gl/Program.cpp
similarity index 96%
rename from services/surfaceflinger/RenderEngine/Program.cpp
rename to services/surfaceflinger/RenderEngine/gl/Program.cpp
index 87371dc..4d6839b 100644
--- a/services/surfaceflinger/RenderEngine/Program.cpp
+++ b/services/surfaceflinger/RenderEngine/gl/Program.cpp
@@ -14,17 +14,19 @@
  * limitations under the License.
  */
 
-#include <renderengine/Program.h>
+#include "Program.h"
 
 #include <stdint.h>
 
 #include <log/log.h>
 #include <math/mat4.h>
-#include <renderengine/Description.h>
-#include <renderengine/ProgramCache.h>
+#include <renderengine/private/Description.h>
 #include <utils/String8.h>
+#include "ProgramCache.h"
 
 namespace android {
+namespace renderengine {
+namespace gl {
 
 Program::Program(const ProgramCache::Key& /*needs*/, const char* vertex, const char* fragment)
       : mInitialized(false) {
@@ -152,4 +154,6 @@
     glUniformMatrix4fv(mProjectionMatrixLoc, 1, GL_FALSE, desc.mProjectionMatrix.asArray());
 }
 
-} /* namespace android */
+}  // namespace gl
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/Program.h b/services/surfaceflinger/RenderEngine/gl/Program.h
similarity index 92%
rename from services/surfaceflinger/RenderEngine/include/renderengine/Program.h
rename to services/surfaceflinger/RenderEngine/gl/Program.h
index 5e621cb..bb429ef 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/Program.h
+++ b/services/surfaceflinger/RenderEngine/gl/Program.h
@@ -20,13 +20,16 @@
 #include <stdint.h>
 
 #include <GLES2/gl2.h>
-#include <renderengine/Description.h>
-#include <renderengine/ProgramCache.h>
+#include <renderengine/private/Description.h>
+#include "ProgramCache.h"
 
 namespace android {
 
 class String8;
 
+namespace renderengine {
+namespace gl {
+
 /*
  * Abstracts a GLSL program comprising a vertex and fragment shader
  */
@@ -85,6 +88,8 @@
     GLint mOutputTransformMatrixLoc;
 };
 
-} /* namespace android */
+}  // namespace gl
+}  // namespace renderengine
+}  // namespace android
 
 #endif /* SF_RENDER_ENGINE_PROGRAM_H */
diff --git a/services/surfaceflinger/RenderEngine/ProgramCache.cpp b/services/surfaceflinger/RenderEngine/gl/ProgramCache.cpp
similarity index 98%
rename from services/surfaceflinger/RenderEngine/ProgramCache.cpp
rename to services/surfaceflinger/RenderEngine/gl/ProgramCache.cpp
index b7101e0..a19c1f1 100644
--- a/services/surfaceflinger/RenderEngine/ProgramCache.cpp
+++ b/services/surfaceflinger/RenderEngine/gl/ProgramCache.cpp
@@ -16,17 +16,20 @@
 
 #define ATRACE_TAG ATRACE_TAG_GRAPHICS
 
-#include <renderengine/ProgramCache.h>
+#include "ProgramCache.h"
 
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
-#include <renderengine/Description.h>
-#include <renderengine/Program.h>
+#include <renderengine/private/Description.h>
 #include <utils/String8.h>
 #include <utils/Trace.h>
+#include "Program.h"
+
+ANDROID_SINGLETON_STATIC_INSTANCE(android::renderengine::gl::ProgramCache)
 
 namespace android {
-// -----------------------------------------------------------------------------------------------
+namespace renderengine {
+namespace gl {
 
 /*
  * A simple formatter class to automatically add the endl and
@@ -73,10 +76,6 @@
     return f;
 }
 
-// -----------------------------------------------------------------------------------------------
-
-ANDROID_SINGLETON_STATIC_INSTANCE(ProgramCache)
-
 ProgramCache::ProgramCache() {}
 
 ProgramCache::~ProgramCache() {}
@@ -685,4 +684,6 @@
     }
 }
 
-} /* namespace android */
+}  // namespace gl
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/ProgramCache.h b/services/surfaceflinger/RenderEngine/gl/ProgramCache.h
similarity index 96%
rename from services/surfaceflinger/RenderEngine/include/renderengine/ProgramCache.h
rename to services/surfaceflinger/RenderEngine/gl/ProgramCache.h
index a5bee45..ea77a2d 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/ProgramCache.h
+++ b/services/surfaceflinger/RenderEngine/gl/ProgramCache.h
@@ -18,17 +18,23 @@
 #define SF_RENDER_ENGINE_PROGRAMCACHE_H
 
 #include <GLES2/gl2.h>
-#include <renderengine/Description.h>
+#include <renderengine/private/Description.h>
 #include <utils/KeyedVector.h>
 #include <utils/Singleton.h>
 #include <utils/TypeHelpers.h>
 
 namespace android {
 
+class String8;
+
+namespace renderengine {
+
 class Description;
+
+namespace gl {
+
 class Formatter;
 class Program;
-class String8;
 
 /*
  * This class generates GLSL programs suitable to handle a given
@@ -188,8 +194,11 @@
     DefaultKeyedVector<Key, Program*> mCache;
 };
 
-ANDROID_BASIC_TYPES_TRAITS(ProgramCache::Key)
+}  // namespace gl
+}  // namespace renderengine
 
-} /* namespace android */
+ANDROID_BASIC_TYPES_TRAITS(renderengine::gl::ProgramCache::Key)
+
+}  // namespace android
 
 #endif /* SF_RENDER_ENGINE_PROGRAMCACHE_H */
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/Image.h b/services/surfaceflinger/RenderEngine/include/renderengine/Image.h
index c38fe0a..9b34b68 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/Image.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/Image.h
@@ -24,7 +24,7 @@
 struct ANativeWindowBuffer;
 
 namespace android {
-namespace RE {
+namespace renderengine {
 
 class Image {
 public:
@@ -36,7 +36,7 @@
 
 class RenderEngine;
 
-class Image : public RE::Image {
+class Image : public renderengine::Image {
 public:
     explicit Image(const RenderEngine& engine);
     ~Image() override;
@@ -55,6 +55,6 @@
     EGLImageKHR mEGLImage = EGL_NO_IMAGE_KHR;
 };
 
-} // namespace impl
-} // namespace RE
-} // namespace android
+}  // namespace impl
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/Mesh.h b/services/surfaceflinger/RenderEngine/include/renderengine/Mesh.h
index d0a9ac0..39ca2f7 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/Mesh.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/Mesh.h
@@ -20,6 +20,7 @@
 #include <stdint.h>
 
 namespace android {
+namespace renderengine {
 
 class Mesh {
 public:
@@ -97,5 +98,6 @@
     Primitive mPrimitive;
 };
 
-} /* namespace android */
+}  // namespace renderengine
+}  // namespace android
 #endif /* SF_RENDER_ENGINE_MESH_H */
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h b/services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h
index 6213784..c532adc 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/RenderEngine.h
@@ -17,10 +17,9 @@
 #ifndef SF_RENDERENGINE_H_
 #define SF_RENDERENGINE_H_
 
-#include <memory>
-
 #include <stdint.h>
 #include <sys/types.h>
+#include <memory>
 
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
@@ -33,21 +32,19 @@
 
 struct ANativeWindowBuffer;
 
-// ---------------------------------------------------------------------------
 namespace android {
-// ---------------------------------------------------------------------------
 
 class String8;
 class Rect;
 class Region;
+
+namespace renderengine {
+
+class BindNativeBufferAsFramebuffer;
 class Mesh;
-class Texture;
-
-namespace RE {
-
 class Image;
 class Surface;
-class BindNativeBufferAsFramebuffer;
+class Texture;
 
 namespace impl {
 class RenderEngine;
@@ -61,8 +58,8 @@
 
     virtual ~RenderEngine() = 0;
 
-    virtual std::unique_ptr<RE::Surface> createSurface() = 0;
-    virtual std::unique_ptr<RE::Image> createImage() = 0;
+    virtual std::unique_ptr<renderengine::Surface> createSurface() = 0;
+    virtual std::unique_ptr<renderengine::Image> createImage() = 0;
 
     virtual void primeCache() const = 0;
 
@@ -73,7 +70,7 @@
     virtual bool useWaitSync() const = 0;
 
     virtual bool isCurrent() const = 0;
-    virtual bool setCurrentSurface(const RE::Surface& surface) = 0;
+    virtual bool setCurrentSurface(const renderengine::Surface& surface) = 0;
     virtual void resetCurrentSurface() = 0;
 
     // helpers
@@ -97,11 +94,11 @@
     virtual void disableScissor() = 0;
     virtual void genTextures(size_t count, uint32_t* names) = 0;
     virtual void deleteTextures(size_t count, uint32_t const* names) = 0;
-    virtual void bindExternalTextureImage(uint32_t texName, const RE::Image& image) = 0;
+    virtual void bindExternalTextureImage(uint32_t texName, const renderengine::Image& image) = 0;
     virtual void readPixels(size_t l, size_t b, size_t w, size_t h, uint32_t* pixels) = 0;
     virtual void bindNativeBufferAsFrameBuffer(ANativeWindowBuffer* buffer,
-                                               RE::BindNativeBufferAsFramebuffer* bindHelper) = 0;
-    virtual void unbindNativeBufferAsFrameBuffer(RE::BindNativeBufferAsFramebuffer* bindHelper) = 0;
+                                               BindNativeBufferAsFramebuffer* bindHelper) = 0;
+    virtual void unbindNativeBufferAsFrameBuffer(BindNativeBufferAsFramebuffer* bindHelper) = 0;
 
     // set-up
     virtual void checkErrors() const;
@@ -155,7 +152,7 @@
 class Image;
 class Surface;
 
-class RenderEngine : public RE::RenderEngine {
+class RenderEngine : public renderengine::RenderEngine {
     enum GlesVersion {
         GLES_VERSION_1_0 = 0x10000,
         GLES_VERSION_1_1 = 0x10001,
@@ -185,8 +182,8 @@
 
     // RenderEngine interface implementation
 
-    std::unique_ptr<RE::Surface> createSurface() override;
-    std::unique_ptr<RE::Image> createImage() override;
+    std::unique_ptr<renderengine::Surface> createSurface() override;
+    std::unique_ptr<renderengine::Image> createImage() override;
 
     void primeCache() const override;
 
@@ -197,7 +194,7 @@
     bool useWaitSync() const override;
 
     bool isCurrent() const;
-    bool setCurrentSurface(const RE::Surface& surface) override;
+    bool setCurrentSurface(const renderengine::Surface& surface) override;
     void resetCurrentSurface() override;
 
     // synchronization
@@ -223,7 +220,7 @@
     void disableScissor() override;
     void genTextures(size_t count, uint32_t* names) override;
     void deleteTextures(size_t count, uint32_t const* names) override;
-    void bindExternalTextureImage(uint32_t texName, const RE::Image& image) override;
+    void bindExternalTextureImage(uint32_t texName, const renderengine::Image& image) override;
     void readPixels(size_t l, size_t b, size_t w, size_t h, uint32_t* pixels) override;
 
     void checkErrors() const override;
@@ -235,12 +232,14 @@
     EGLConfig getEGLConfig() const;
 
     // Common implementation
-    bool setCurrentSurface(const RE::impl::Surface& surface);
-    void bindExternalTextureImage(uint32_t texName, const RE::impl::Image& image);
+    bool setCurrentSurface(const renderengine::impl::Surface& surface);
+    void bindExternalTextureImage(uint32_t texName, const renderengine::impl::Image& image);
 
-    void bindNativeBufferAsFrameBuffer(ANativeWindowBuffer* buffer,
-                                       RE::BindNativeBufferAsFramebuffer* bindHelper) override;
-    void unbindNativeBufferAsFrameBuffer(RE::BindNativeBufferAsFramebuffer* bindHelper) override;
+    void bindNativeBufferAsFrameBuffer(
+            ANativeWindowBuffer* buffer,
+            renderengine::BindNativeBufferAsFramebuffer* bindHelper) override;
+    void unbindNativeBufferAsFrameBuffer(
+            renderengine::BindNativeBufferAsFramebuffer* bindHelper) override;
 
     // Overriden by each specialization
     virtual void bindImageAsFramebuffer(EGLImageKHR image, uint32_t* texName, uint32_t* fbName,
@@ -248,8 +247,8 @@
     virtual void unbindFramebuffer(uint32_t texName, uint32_t fbName) = 0;
 };
 
-} // namespace impl
-} // namespace RE
-} // namespace android
+}  // namespace impl
+}  // namespace renderengine
+}  // namespace android
 
 #endif /* SF_RENDERENGINE_H_ */
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/Surface.h b/services/surfaceflinger/RenderEngine/include/renderengine/Surface.h
index d4d3d8c..aaa9c7b 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/Surface.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/Surface.h
@@ -23,7 +23,7 @@
 struct ANativeWindow;
 
 namespace android {
-namespace RE {
+namespace renderengine {
 
 class Surface {
 public:
@@ -48,7 +48,7 @@
 
 class RenderEngine;
 
-class Surface final : public RE::Surface {
+class Surface final : public renderengine::Surface {
 public:
     Surface(const RenderEngine& engine);
     ~Surface();
@@ -56,7 +56,7 @@
     Surface(const Surface&) = delete;
     Surface& operator=(const Surface&) = delete;
 
-    // RE::Surface implementation
+    // renderengine::Surface implementation
     void setCritical(bool enable) override { mCritical = enable; }
     void setAsync(bool enable) override { mAsync = enable; }
 
@@ -90,6 +90,6 @@
     EGLSurface mEGLSurface = EGL_NO_SURFACE;
 };
 
-} // namespace impl
-} // namespace RE
-} // namespace android
+}  // namespace impl
+}  // namespace renderengine
+}  // namespace android
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/Texture.h b/services/surfaceflinger/RenderEngine/include/renderengine/Texture.h
index 56b6b31..130037c 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/Texture.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/Texture.h
@@ -14,13 +14,15 @@
  * limitations under the License.
  */
 
-#include <math/mat4.h>
-#include <stdint.h>
-
 #ifndef SF_RENDER_ENGINE_TEXTURE_H
 #define SF_RENDER_ENGINE_TEXTURE_H
 
+#include <stdint.h>
+
+#include <math/mat4.h>
+
 namespace android {
+namespace renderengine {
 
 class Texture {
     uint32_t mTextureName;
@@ -52,5 +54,6 @@
     size_t getHeight() const;
 };
 
-} /* namespace android */
+}  // namespace renderengine
+}  // namespace android
 #endif /* SF_RENDER_ENGINE_TEXTURE_H */
diff --git a/services/surfaceflinger/RenderEngine/include/renderengine/Description.h b/services/surfaceflinger/RenderEngine/include/renderengine/private/Description.h
similarity index 93%
rename from services/surfaceflinger/RenderEngine/include/renderengine/Description.h
rename to services/surfaceflinger/RenderEngine/include/renderengine/private/Description.h
index 9bc7e1c..a6301ae 100644
--- a/services/surfaceflinger/RenderEngine/include/renderengine/Description.h
+++ b/services/surfaceflinger/RenderEngine/include/renderengine/private/Description.h
@@ -14,15 +14,18 @@
  * limitations under the License.
  */
 
-#include <GLES2/gl2.h>
-#include <renderengine/Texture.h>
-
 #ifndef SF_RENDER_ENGINE_DESCRIPTION_H_
 #define SF_RENDER_ENGINE_DESCRIPTION_H_
 
-namespace android {
+#include <renderengine/Texture.h>
 
+namespace android {
+namespace renderengine {
+
+namespace gl {
 class Program;
+class ProgramCache;
+}
 
 /*
  * This holds the state of the rendering engine. This class is used
@@ -63,8 +66,8 @@
     void setDisplayMaxLuminance(const float maxLuminance);
 
 private:
-    friend class Program;
-    friend class ProgramCache;
+    friend class gl::Program;
+    friend class gl::ProgramCache;
 
     // whether textures are premultiplied
     bool mPremultipliedAlpha = false;
@@ -94,6 +97,7 @@
     mat4 mOutputTransformMatrix;
 };
 
-} /* namespace android */
+}  // namespace renderengine
+}  // namespace android
 
 #endif /* SF_RENDER_ENGINE_DESCRIPTION_H_ */
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 888dd38..2787132 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -618,9 +618,10 @@
 
     // Get a RenderEngine for the given display / config (can't fail)
     int32_t renderEngineFeature = 0;
-    renderEngineFeature |= (useColorManagement ? RE::RenderEngine::USE_COLOR_MANAGEMENT : 0);
-    getBE().mRenderEngine =
-            RE::impl::RenderEngine::create(HAL_PIXEL_FORMAT_RGBA_8888, renderEngineFeature);
+    renderEngineFeature |= (useColorManagement ?
+                            renderengine::RenderEngine::USE_COLOR_MANAGEMENT : 0);
+    getBE().mRenderEngine = renderengine::impl::RenderEngine::create(HAL_PIXEL_FORMAT_RGBA_8888,
+                                                                      renderEngineFeature);
     LOG_ALWAYS_FATAL_IF(getBE().mRenderEngine == nullptr, "couldn't create RenderEngine");
 
     LOG_ALWAYS_FATAL_IF(mVrFlingerRequestsDisplay,
@@ -2420,7 +2421,7 @@
     /*
      * Create our display's surface
      */
-    std::unique_ptr<RE::Surface> renderSurface = getRenderEngine().createSurface();
+    std::unique_ptr<renderengine::Surface> renderSurface = getRenderEngine().createSurface();
     renderSurface->setCritical(state.type == DisplayDevice::DISPLAY_PRIMARY);
     renderSurface->setAsync(state.isVirtual());
     renderSurface->setNativeWindow(nativeWindow.get());
@@ -5458,7 +5459,7 @@
 
     // this binds the given EGLImage as a framebuffer for the
     // duration of this scope.
-    RE::BindNativeBufferAsFramebuffer bufferBond(getRenderEngine(), buffer);
+    renderengine::BindNativeBufferAsFramebuffer bufferBond(getRenderEngine(), buffer);
     if (bufferBond.getStatus() != NO_ERROR) {
         ALOGE("got ANWB binding error while taking screenshot");
         return INVALID_OPERATION;
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 3dbceae..fad9410 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -106,7 +106,7 @@
 class EventThread;
 } // namespace impl
 
-namespace RE {
+namespace renderengine {
 class RenderEngine;
 }
 
@@ -175,7 +175,7 @@
     const std::string mHwcServiceName; // "default" for real use, something else for testing.
 
     // constant members (no synchronization needed for access)
-    std::unique_ptr<RE::RenderEngine> mRenderEngine;
+    std::unique_ptr<renderengine::RenderEngine> mRenderEngine;
     EGLContext mEGLContext;
     EGLDisplay mEGLDisplay;
 
@@ -345,7 +345,7 @@
     // TODO: this should be made accessible only to HWComposer
     const Vector< sp<Layer> >& getLayerSortedByZForHwcDisplay(int id);
 
-    RE::RenderEngine& getRenderEngine() const { return *getBE().mRenderEngine; }
+    renderengine::RenderEngine& getRenderEngine() const { return *getBE().mRenderEngine; }
 
     bool authenticateSurfaceTextureLocked(
         const sp<IGraphicBufferProducer>& bufferProducer) const;
diff --git a/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp b/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp
index 1f57b8e..32712c7 100644
--- a/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp
+++ b/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp
@@ -116,7 +116,7 @@
     // These mocks are created by the test, but are destroyed by SurfaceFlinger
     // by virtue of being stored into a std::unique_ptr. However we still need
     // to keep a reference to them for use in setting up call expectations.
-    RE::mock::RenderEngine* mRenderEngine = new RE::mock::RenderEngine();
+    renderengine::mock::RenderEngine* mRenderEngine = new renderengine::mock::RenderEngine();
     Hwc2::mock::Composer* mComposer = nullptr;
     mock::MessageQueue* mMessageQueue = new mock::MessageQueue();
     mock::SurfaceInterceptor* mSurfaceInterceptor = new mock::SurfaceInterceptor();
@@ -127,7 +127,7 @@
     sp<mock::GraphicBufferProducer> mProducer;
     mock::NativeWindowSurface* mNativeWindowSurface = nullptr;
     sp<mock::NativeWindow> mNativeWindow;
-    RE::mock::Surface* mRenderSurface = nullptr;
+    renderengine::mock::Surface* mRenderSurface = nullptr;
 };
 
 DisplayTransactionTest::DisplayTransactionTest() {
@@ -155,7 +155,7 @@
     mFlinger.mutableEventControlThread().reset(mEventControlThread);
     mFlinger.mutableEventThread().reset(mEventThread);
     mFlinger.mutableEventQueue().reset(mMessageQueue);
-    mFlinger.setupRenderEngine(std::unique_ptr<RE::RenderEngine>(mRenderEngine));
+    mFlinger.setupRenderEngine(std::unique_ptr<renderengine::RenderEngine>(mRenderEngine));
     mFlinger.mutableInterceptor().reset(mSurfaceInterceptor);
     mFlinger.mutablePrimaryDispSync().reset(mPrimaryDispSync);
 
@@ -277,9 +277,10 @@
         // For simplicity, we only expect to create a single render surface for
         // each test.
         ASSERT_TRUE(test->mRenderSurface == nullptr);
-        test->mRenderSurface = new RE::mock::Surface();
+        test->mRenderSurface = new renderengine::mock::Surface();
         EXPECT_CALL(*test->mRenderEngine, createSurface())
-                .WillOnce(Return(ByMove(std::unique_ptr<RE::Surface>(test->mRenderSurface))));
+                .WillOnce(Return(ByMove(
+                        std::unique_ptr<renderengine::Surface>(test->mRenderSurface))));
         EXPECT_CALL(*test->mRenderSurface, setAsync(static_cast<bool>(ASYNC))).Times(1);
         EXPECT_CALL(*test->mRenderSurface, setCritical(static_cast<bool>(CRITICAL))).Times(1);
         EXPECT_CALL(*test->mRenderSurface, setNativeWindow(test->mNativeWindow.get())).Times(1);
@@ -1735,11 +1736,11 @@
     // A display is set up
     auto nativeWindow = new mock::NativeWindow();
     auto displaySurface = new mock::DisplaySurface();
-    auto renderSurface = new RE::mock::Surface();
+    auto renderSurface = new renderengine::mock::Surface();
     auto display = Case::Display::makeFakeExistingDisplayInjector(this);
     display.setNativeWindow(nativeWindow);
     display.setDisplaySurface(displaySurface);
-    display.setRenderSurface(std::unique_ptr<RE::Surface>(renderSurface));
+    display.setRenderSurface(std::unique_ptr<renderengine::Surface>(renderSurface));
     display.inject();
 
     // There is a change to the viewport state
@@ -1776,11 +1777,11 @@
     // A display is set up
     auto nativeWindow = new mock::NativeWindow();
     auto displaySurface = new mock::DisplaySurface();
-    auto renderSurface = new RE::mock::Surface();
+    auto renderSurface = new renderengine::mock::Surface();
     auto display = Case::Display::makeFakeExistingDisplayInjector(this);
     display.setNativeWindow(nativeWindow);
     display.setDisplaySurface(displaySurface);
-    display.setRenderSurface(std::unique_ptr<RE::Surface>(renderSurface));
+    display.setRenderSurface(std::unique_ptr<renderengine::Surface>(renderSurface));
     display.inject();
 
     // There is a change to the viewport state
diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
index d8e7581..b0103df 100644
--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
+++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
@@ -23,7 +23,7 @@
 
 class EventThread;
 
-namespace RE {
+namespace renderengine {
 class RenderEngine;
 }
 
@@ -36,7 +36,7 @@
     // Extend this as needed for accessing SurfaceFlinger private (and public)
     // functions.
 
-    void setupRenderEngine(std::unique_ptr<RE::RenderEngine> renderEngine) {
+    void setupRenderEngine(std::unique_ptr<renderengine::RenderEngine> renderEngine) {
         mFlinger->getBE().mRenderEngine = std::move(renderEngine);
     }
 
@@ -313,7 +313,7 @@
             return *this;
         }
 
-        auto& setRenderSurface(std::unique_ptr<RE::Surface> renderSurface) {
+        auto& setRenderSurface(std::unique_ptr<renderengine::Surface> renderSurface) {
             mRenderSurface = std::move(renderSurface);
             return *this;
         }
@@ -352,7 +352,7 @@
         const int32_t mDisplayId;
         sp<ANativeWindow> mNativeWindow;
         sp<DisplaySurface> mDisplaySurface;
-        std::unique_ptr<RE::Surface> mRenderSurface;
+        std::unique_ptr<renderengine::Surface> mRenderSurface;
         bool mSecure = false;
     };
 
diff --git a/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.cpp b/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.cpp
index 200f214..06ef0b2 100644
--- a/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.cpp
+++ b/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.cpp
@@ -19,7 +19,7 @@
 #include <ui/Region.h>
 
 namespace android {
-namespace RE {
+namespace renderengine {
 namespace mock {
 
 // Explicit default instantiation is recommended.
@@ -33,5 +33,5 @@
 Image::~Image() = default;
 
 } // namespace mock
-} // namespace RE
+} // namespace renderengine
 } // namespace android
diff --git a/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h b/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h
index b907c49..bf3c09a 100644
--- a/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h
+++ b/services/surfaceflinger/tests/unittests/mock/RenderEngine/MockRenderEngine.h
@@ -25,22 +25,22 @@
 #include <renderengine/Texture.h>
 
 namespace android {
-namespace RE {
+namespace renderengine {
 namespace mock {
 
-class RenderEngine : public RE::RenderEngine {
+class RenderEngine : public renderengine::RenderEngine {
 public:
     RenderEngine();
     ~RenderEngine() override;
 
-    MOCK_METHOD0(createSurface, std::unique_ptr<RE::Surface>());
-    MOCK_METHOD0(createImage, std::unique_ptr<RE::Image>());
+    MOCK_METHOD0(createSurface, std::unique_ptr<renderengine::Surface>());
+    MOCK_METHOD0(createImage, std::unique_ptr<renderengine::Image>());
     MOCK_CONST_METHOD0(primeCache, void());
     MOCK_METHOD1(dump, void(String8&));
     MOCK_CONST_METHOD0(useNativeFenceSync, bool());
     MOCK_CONST_METHOD0(useWaitSync, bool());
     MOCK_CONST_METHOD0(isCurrent, bool());
-    MOCK_METHOD1(setCurrentSurface, bool(const RE::Surface&));
+    MOCK_METHOD1(setCurrentSurface, bool(const renderengine::Surface&));
     MOCK_METHOD0(resetCurrentSurface, void());
     MOCK_METHOD0(flush, base::unique_fd());
     MOCK_METHOD0(finish, bool());
@@ -52,7 +52,7 @@
     MOCK_METHOD0(disableScissor, void());
     MOCK_METHOD2(genTextures, void(size_t, uint32_t*));
     MOCK_METHOD2(deleteTextures, void(size_t, uint32_t const*));
-    MOCK_METHOD2(bindExternalTextureImage, void(uint32_t, const RE::Image&));
+    MOCK_METHOD2(bindExternalTextureImage, void(uint32_t, const renderengine::Image&));
     MOCK_METHOD5(readPixels, void(size_t, size_t, size_t, size_t, uint32_t*));
     MOCK_CONST_METHOD0(checkErrors, void());
     MOCK_METHOD6(setViewportAndProjection,
@@ -70,14 +70,16 @@
     MOCK_METHOD1(setOutputDataSpace, void(ui::Dataspace));
     MOCK_METHOD1(setDisplayMaxLuminance, void(const float));
     MOCK_METHOD2(bindNativeBufferAsFrameBuffer,
-                 void(ANativeWindowBuffer*, RE::BindNativeBufferAsFramebuffer*));
-    MOCK_METHOD1(unbindNativeBufferAsFrameBuffer, void(RE::BindNativeBufferAsFramebuffer*));
+                 void(ANativeWindowBuffer*,
+                      renderengine::BindNativeBufferAsFramebuffer*));
+    MOCK_METHOD1(unbindNativeBufferAsFrameBuffer,
+                 void(renderengine::BindNativeBufferAsFramebuffer*));
     MOCK_METHOD1(drawMesh, void(const Mesh&));
     MOCK_CONST_METHOD0(getMaxTextureSize, size_t());
     MOCK_CONST_METHOD0(getMaxViewportDims, size_t());
 };
 
-class Surface : public RE::Surface {
+class Surface : public renderengine::Surface {
 public:
     Surface();
     ~Surface() override;
@@ -94,7 +96,7 @@
     MOCK_CONST_METHOD0(queryHeight, int32_t());
 };
 
-class Image : public RE::Image {
+class Image : public renderengine::Image {
 public:
     Image();
     ~Image() override;
@@ -104,5 +106,5 @@
 };
 
 } // namespace mock
-} // namespace RE
+} // namespace renderengine
 } // namespace android