rsLib cleanup

Change-Id: Ifb66059338e3435ac79435296a650c44699921aa
diff --git a/driver/rsdGL.cpp b/driver/rsdGL.cpp
index 48690d5..de9fb51 100644
--- a/driver/rsdGL.cpp
+++ b/driver/rsdGL.cpp
@@ -30,11 +30,8 @@
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
 
-//#include <cutils/sched_policy.h>
-//#include <sys/syscall.h>
 #include <string.h>
 
-
 #include "rsdCore.h"
 #include "rsdGL.h"
 
@@ -346,3 +343,27 @@
     eglSwapBuffers(dc->gl.egl.display, dc->gl.egl.surface);
 }
 
+void rsdGLCheckError(const android::renderscript::Context *rsc,
+                     const char *msg, bool isFatal) {
+    GLenum err = glGetError();
+    if (err != GL_NO_ERROR) {
+        char buf[1024];
+        snprintf(buf, sizeof(buf), "GL Error = 0x%08x, from: %s", err, msg);
+
+        if (isFatal) {
+            rsc->setError(RS_ERROR_FATAL_DRIVER, buf);
+        } else {
+            switch (err) {
+            case GL_OUT_OF_MEMORY:
+                rsc->setError(RS_ERROR_OUT_OF_MEMORY, buf);
+                break;
+            default:
+                rsc->setError(RS_ERROR_DRIVER, buf);
+                break;
+            }
+        }
+
+        LOGE("%p, %s", rsc, buf);
+    }
+
+}
diff --git a/driver/rsdGL.h b/driver/rsdGL.h
index 351b2d5..90cbe04 100644
--- a/driver/rsdGL.h
+++ b/driver/rsdGL.h
@@ -76,6 +76,8 @@
 bool rsdGLSetSurface(const android::renderscript::Context *rsc,
                      uint32_t w, uint32_t h, ANativeWindow *sur);
 void rsdGLSwap(const android::renderscript::Context *rsc);
+void rsdGLCheckError(const android::renderscript::Context *rsc,
+                     const char *msg, bool isFatal = false);
 
 #endif
 
diff --git a/driver/rsdMeshObj.cpp b/driver/rsdMeshObj.cpp
index 6bb33f7..2c07784 100644
--- a/driver/rsdMeshObj.cpp
+++ b/driver/rsdMeshObj.cpp
@@ -23,6 +23,7 @@
 #include <rsMesh.h>
 
 #include "rsdMeshObj.h"
+#include "rsdGL.h"
 
 using namespace android;
 using namespace android::renderscript;
@@ -134,7 +135,7 @@
         return;
     }
 
-    rsc->checkError("Mesh::renderPrimitiveRange 1");
+    rsdGLCheckError(rsc, "Mesh::renderPrimitiveRange 1");
     // update attributes with either buffer information or data ptr based on their current state
     for (uint32_t ct=0; ct < mAttribCount; ct++) {
         uint32_t allocIndex = mAttribAllocationIndex[ct];
@@ -149,9 +150,9 @@
     }
 
     RsdVertexArray va(mAttribs, mAttribCount);
-    va.setupGL2(rsc);
+    va.setup(rsc);
 
-    rsc->checkError("Mesh::renderPrimitiveRange 2");
+    rsdGLCheckError(rsc, "Mesh::renderPrimitiveRange 2");
     Mesh::Primitive_t *prim = mRSMesh->mHal.state.primitives[primIndex];
     if (prim->mIndexBuffer.get()) {
         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, prim->mIndexBuffer->getBufferObjectID());
@@ -160,7 +161,7 @@
         glDrawArrays(mGLPrimitives[primIndex], start, len);
     }
 
-    rsc->checkError("Mesh::renderPrimitiveRange");
+    rsdGLCheckError(rsc, "Mesh::renderPrimitiveRange");
 }
 
 void RsdMeshObj::updateGLPrimitives() {
diff --git a/driver/rsdShader.cpp b/driver/rsdShader.cpp
index 1710a8b..371266b 100644
--- a/driver/rsdShader.cpp
+++ b/driver/rsdShader.cpp
@@ -377,7 +377,7 @@
         glTexParameterf(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisoValue);
     }
 
-    rsc->checkError("Sampler::setupGL2 tex env");
+    rsdGLCheckError(rsc, "Sampler::setup tex env");
 }
 
 void RsdShader::setupTextures(const Context *rsc, RsdShaderCache *sc) {
@@ -385,8 +385,10 @@
         return;
     }
 
+    RsdHal *dc = (RsdHal *)rsc->mHal.drv;
+
     uint32_t numTexturesToBind = mRSProgram->mHal.state.texturesCount;
-    uint32_t numTexturesAvailable = rsc->getMaxFragmentTextures();
+    uint32_t numTexturesAvailable = dc->gl.gl.maxFragmentTextureImageUnits;
     if (numTexturesToBind >= numTexturesAvailable) {
         LOGE("Attempting to bind %u textures on shader id %u, but only %u are available",
              mRSProgram->mHal.state.texturesCount, (uint32_t)this, numTexturesAvailable);
@@ -408,7 +410,7 @@
             rsc->setError(RS_ERROR_BAD_SHADER, "Non-texture allocation bound to a shader");
         }
         glBindTexture(target, mRSProgram->mHal.state.textures[ct]->getTextureID());
-        rsc->checkError("ProgramFragment::setupGL2 tex bind");
+        rsdGLCheckError(rsc, "ProgramFragment::setup tex bind");
         if (mRSProgram->mHal.state.samplers[ct].get()) {
             setupSampler(rsc, mRSProgram->mHal.state.samplers[ct].get(), mRSProgram->mHal.state.textures[ct].get());
         } else {
@@ -416,16 +418,16 @@
             glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
             glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
             glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-            rsc->checkError("ProgramFragment::setupGL2 tex env");
+            rsdGLCheckError(rsc, "ProgramFragment::setup tex env");
         }
 
         glUniform1i(sc->fragUniformSlot(mTextureUniformIndexStart + ct), ct);
-        rsc->checkError("ProgramFragment::setupGL2 uniforms");
+        rsdGLCheckError(rsc, "ProgramFragment::setup uniforms");
     }
 
     glActiveTexture(GL_TEXTURE0);
     mDirty = false;
-    rsc->checkError("ProgramFragment::setupGL2");
+    rsdGLCheckError(rsc, "ProgramFragment::setup");
 }
 
 void RsdShader::setupUserConstants(const Context *rsc, RsdShaderCache *sc, bool isFragment) {
diff --git a/driver/rsdShaderCache.cpp b/driver/rsdShaderCache.cpp
index 18a8225..d11490c 100644
--- a/driver/rsdShaderCache.cpp
+++ b/driver/rsdShaderCache.cpp
@@ -19,6 +19,7 @@
 
 #include "rsdShader.h"
 #include "rsdShaderCache.h"
+#include "rsdGL.h"
 
 #include <GLES/gl.h>
 #include <GLES2/gl2.h>
@@ -128,7 +129,7 @@
             glUseProgram(mEntries[ct]->program);
             mCurrent = mEntries[ct];
             //LOGV("RsdShaderCache hit, using %i", ct);
-            rsc->checkError("RsdShaderCache::link (hit)");
+            rsdGLCheckError(rsc, "RsdShaderCache::link (hit)");
             return true;
         }
     }
@@ -230,7 +231,7 @@
 
     //LOGV("SC made program %i", e->program);
     glUseProgram(e->program);
-    rsc->checkError("RsdShaderCache::link (miss)");
+    rsdGLCheckError(rsc, "RsdShaderCache::link (miss)");
 
     return true;
 }
diff --git a/driver/rsdVertexArray.cpp b/driver/rsdVertexArray.cpp
index d0a5a54..62ec107 100644
--- a/driver/rsdVertexArray.cpp
+++ b/driver/rsdVertexArray.cpp
@@ -20,6 +20,7 @@
 #include <GLES/gl.h>
 #include <GLES2/gl2.h>
 
+#include "rsdGL.h"
 #include "rsdCore.h"
 #include "rsdVertexArray.h"
 #include "rsdShaderCache.h"
@@ -78,13 +79,13 @@
          mAttribs[idx].offset);
 }
 
-void RsdVertexArray::setupGL2(const Context *rsc) const {
+void RsdVertexArray::setup(const Context *rsc) const {
 
     RsdHal *dc = (RsdHal *)rsc->mHal.drv;
     RsdVertexArrayState *state = dc->gl.vertexArrayState;
     RsdShaderCache *sc = dc->gl.shaderCache;
 
-    rsc->checkError("RsdVertexArray::setupGL2 start");
+    rsdGLCheckError(rsc, "RsdVertexArray::setup start");
     uint32_t maxAttrs = state->mAttrsEnabledSize;
 
     for (uint32_t ct=1; ct < maxAttrs; ct++) {
@@ -94,7 +95,7 @@
         }
     }
 
-    rsc->checkError("RsdVertexArray::setupGL2 disabled");
+    rsdGLCheckError(rsc, "RsdVertexArray::setup disabled");
     for (uint32_t ct=0; ct < mCount; ct++) {
         int32_t slot = sc->vtxAttribSlot(mAttribs[ct].name);
         if (rsc->props.mLogShadersAttr) {
@@ -113,7 +114,7 @@
                               mAttribs[ct].stride,
                               mAttribs[ct].ptr + mAttribs[ct].offset);
     }
-    rsc->checkError("RsdVertexArray::setupGL2 done");
+    rsdGLCheckError(rsc, "RsdVertexArray::setup done");
 }
 ////////////////////////////////////////////
 RsdVertexArrayState::RsdVertexArrayState() {
diff --git a/driver/rsdVertexArray.h b/driver/rsdVertexArray.h
index 925a6ae..3e807a3 100644
--- a/driver/rsdVertexArray.h
+++ b/driver/rsdVertexArray.h
@@ -49,7 +49,7 @@
     RsdVertexArray(const Attrib *attribs, uint32_t numAttribs);
     virtual ~RsdVertexArray();
 
-    void setupGL2(const android::renderscript::Context *rsc) const;
+    void setup(const android::renderscript::Context *rsc) const;
     void logAttrib(uint32_t idx, uint32_t slot) const;
 
 protected:
diff --git a/rsAllocation.cpp b/rsAllocation.cpp
index b5f6f56..5b84ca6 100644
--- a/rsAllocation.cpp
+++ b/rsAllocation.cpp
@@ -209,7 +209,7 @@
         freeScriptMemory();
     }
 
-    rsc->checkError("Allocation::uploadToTexture");
+    //rsc->checkError("Allocation::uploadToTexture");
 #endif //ANDROID_RS_SERIALIZE
 }
 
@@ -334,7 +334,7 @@
     glBindBuffer(target, mBufferID);
     glBufferData(target, mHal.state.type->getSizeBytes(), getPtr(), GL_DYNAMIC_DRAW);
     glBindBuffer(target, 0);
-    rsc->checkError("Allocation::uploadToBufferObject");
+    //rsc->checkError("Allocation::uploadToBufferObject");
 #endif //ANDROID_RS_SERIALIZE
 }
 
diff --git a/rsContext.cpp b/rsContext.cpp
index e2e14f2..98adabc 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -27,11 +27,6 @@
 
 #include <cutils/properties.h>
 
-#include <GLES/gl.h>
-#include <GLES/glext.h>
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-
 #include <cutils/sched_policy.h>
 #include <sys/syscall.h>
 #include <string.h>
@@ -52,28 +47,6 @@
         return false;
     }
 
-    const char * ext = (const char *)glGetString(GL_EXTENSIONS);
-
-    glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &mGL.mMaxVertexAttribs);
-    glGetIntegerv(GL_MAX_VERTEX_UNIFORM_VECTORS, &mGL.mMaxVertexUniformVectors);
-    glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &mGL.mMaxVertexTextureUnits);
-
-    glGetIntegerv(GL_MAX_VARYING_VECTORS, &mGL.mMaxVaryingVectors);
-    glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &mGL.mMaxTextureImageUnits);
-
-    glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &mGL.mMaxFragmentTextureImageUnits);
-    glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_VECTORS, &mGL.mMaxFragmentUniformVectors);
-
-    mGL.OES_texture_npot = NULL != strstr(ext, "GL_OES_texture_npot");
-    mGL.GL_IMG_texture_npot = NULL != strstr(ext, "GL_IMG_texture_npot");
-    mGL.GL_NV_texture_npot_2D_mipmap = NULL != strstr(ext, "GL_NV_texture_npot_2D_mipmap");
-    mGL.EXT_texture_max_aniso = 1.0f;
-    bool hasAniso = NULL != strstr(ext, "GL_EXT_texture_filter_anisotropic");
-    if (hasAniso) {
-        glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &mGL.EXT_texture_max_aniso);
-    }
-
-    LOGV("initGLThread end %p", this);
     pthread_mutex_unlock(&gInitMutex);
     return true;
 }
@@ -112,38 +85,11 @@
     return ret;
 }
 
-void Context::checkError(const char *msg, bool isFatal) const {
-
-    GLenum err = glGetError();
-    if (err != GL_NO_ERROR) {
-        char buf[1024];
-        snprintf(buf, sizeof(buf), "GL Error = 0x%08x, from: %s", err, msg);
-
-        if (isFatal) {
-            setError(RS_ERROR_FATAL_DRIVER, buf);
-        } else {
-            switch (err) {
-            case GL_OUT_OF_MEMORY:
-                setError(RS_ERROR_OUT_OF_MEMORY, buf);
-                break;
-            default:
-                setError(RS_ERROR_DRIVER, buf);
-                break;
-            }
-        }
-
-        LOGE("%p, %s", this, buf);
-    }
-}
-
 uint32_t Context::runRootScript() {
-    glViewport(0, 0, mWidth, mHeight);
-
     timerSet(RS_TIMER_SCRIPT);
     mStateFragmentStore.mLast.clear();
     uint32_t ret = runScript(mRootScript.get());
 
-    checkError("runRootScript");
     return ret;
 }
 
@@ -217,10 +163,10 @@
 bool Context::setupCheck() {
 
     mFragmentStore->setup(this, &mStateFragmentStore);
-    mFragment->setupGL2(this, &mStateFragment);
+    mFragment->setup(this, &mStateFragment);
     mRaster->setup(this, &mStateRaster);
-    mVertex->setupGL2(this, &mStateVertex);
-    mFBOCache.setupGL2(this);
+    mVertex->setup(this, &mStateVertex);
+    mFBOCache.setup(this);
     return true;
 }
 
@@ -406,7 +352,6 @@
         memset(&mUserSurfaceConfig, 0, sizeof(mUserSurfaceConfig));
     }
 
-    memset(&mGL, 0, sizeof(mGL));
     mIsGraphicsContext = sc != NULL;
 
     int status;
diff --git a/rsContext.h b/rsContext.h
index 107f639..1407b7e 100644
--- a/rsContext.h
+++ b/rsContext.h
@@ -42,9 +42,10 @@
 #include "rsgApiStructs.h"
 #include "rsLocklessFifo.h"
 
-#include <ui/egl/android_natives.h>
 #endif // ANDROID_RS_SERIALIZE
 
+class ANativeWindow;
+
 // ---------------------------------------------------------------------------
 namespace android {
 
@@ -197,43 +198,16 @@
     } props;
 
     void dumpDebug() const;
-    void checkError(const char *, bool isFatal = false) const;
     void setError(RsError e, const char *msg = NULL) const;
 
     mutable const ObjectBase * mObjHead;
 
-    bool ext_OES_texture_npot() const {return mGL.OES_texture_npot;}
-    bool ext_GL_IMG_texture_npot() const {return mGL.GL_IMG_texture_npot;}
-    bool ext_GL_NV_texture_npot_2D_mipmap() const {return mGL.GL_NV_texture_npot_2D_mipmap;}
-    float ext_texture_max_aniso() const {return mGL.EXT_texture_max_aniso; }
-    uint32_t getMaxFragmentTextures() const {return mGL.mMaxFragmentTextureImageUnits;}
-    uint32_t getMaxFragmentUniformVectors() const {return mGL.mMaxFragmentUniformVectors;}
-    uint32_t getMaxVertexUniformVectors() const {return mGL.mMaxVertexUniformVectors;}
-    uint32_t getMaxVertexAttributes() const {return mGL.mMaxVertexAttribs;}
-
     uint32_t getDPI() const {return mDPI;}
     void setDPI(uint32_t dpi) {mDPI = dpi;}
 
     Device *mDev;
 protected:
 
-    struct {
-        int32_t mMaxVaryingVectors;
-        int32_t mMaxTextureImageUnits;
-
-        int32_t mMaxFragmentTextureImageUnits;
-        int32_t mMaxFragmentUniformVectors;
-
-        int32_t mMaxVertexAttribs;
-        int32_t mMaxVertexUniformVectors;
-        int32_t mMaxVertexTextureUnits;
-
-        bool OES_texture_npot;
-        bool GL_IMG_texture_npot;
-        bool GL_NV_texture_npot_2D_mipmap;
-        float EXT_texture_max_aniso;
-    } mGL;
-
     uint32_t mDPI;
     uint32_t mWidth;
     uint32_t mHeight;
diff --git a/rsFBOCache.cpp b/rsFBOCache.cpp
index 78aa8ce..0f33f67 100644
--- a/rsFBOCache.cpp
+++ b/rsFBOCache.cpp
@@ -30,7 +30,7 @@
 
 FBOCache::FBOCache() {
     mFBOId = 0;
-    mDirty = false;
+    mDirty = true;
     mMaxTargets = 1;
     mColorTargets = new ObjectBaseRef<Allocation>[mMaxTargets];
 }
@@ -180,7 +180,7 @@
 #endif //ANDROID_RS_SERIALIZE
 }
 
-void FBOCache::setupGL2(Context *rsc) {
+void FBOCache::setup(Context *rsc) {
 #ifndef ANDROID_RS_SERIALIZE
     if (!mDirty) {
         return;
@@ -205,5 +205,6 @@
         glBindFramebuffer(GL_FRAMEBUFFER, 0);
         glViewport(0, 0, rsc->getWidth(), rsc->getHeight());
     }
+    mDirty = false;
 #endif //ANDROID_RS_SERIALIZE
 }
diff --git a/rsFBOCache.h b/rsFBOCache.h
index 9a0a3b6..c9ae1dc 100644
--- a/rsFBOCache.h
+++ b/rsFBOCache.h
@@ -34,7 +34,7 @@
     void bindDepthTarget(Context *, Allocation *a);
     void resetAll(Context *);
 
-    void setupGL2(Context *);
+    void setup(Context *);
 
 protected:
 
diff --git a/rsMesh.cpp b/rsMesh.cpp
index ed29063..35184c1 100644
--- a/rsMesh.cpp
+++ b/rsMesh.cpp
@@ -199,10 +199,8 @@
     if (prim->mIndexBuffer.get()) {
         prim->mIndexBuffer->uploadCheck(rsc);
     }
-    rsc->checkError("Mesh::renderPrimitiveRange upload check");
 
     mRSC->mHal.funcs.mesh.draw(mRSC, this, primIndex, start, len);
-    rsc->checkError("Mesh::renderPrimitiveRange draw");
 }
 
 void Mesh::uploadAll(Context *rsc) {
diff --git a/rsProgramFragment.cpp b/rsProgramFragment.cpp
index fcbfbc8..e40fc7b 100644
--- a/rsProgramFragment.cpp
+++ b/rsProgramFragment.cpp
@@ -55,14 +55,12 @@
     mDirty = true;
 }
 
-void ProgramFragment::setupGL2(Context *rsc, ProgramFragmentState *state) {
+void ProgramFragment::setup(Context *rsc, ProgramFragmentState *state) {
     if ((state->mLast.get() == this) && !mDirty) {
         return;
     }
     state->mLast.set(this);
 
-    rsc->checkError("ProgramFragment::setupGL2 start");
-
     for (uint32_t ct=0; ct < mHal.state.texturesCount; ct++) {
         if (!mHal.state.textures[ct].get()) {
             LOGE("No texture bound for shader id %u, texture unit %u", (uint)this, ct);
diff --git a/rsProgramFragment.h b/rsProgramFragment.h
index 7520af0..d6e20cd 100644
--- a/rsProgramFragment.h
+++ b/rsProgramFragment.h
@@ -32,7 +32,7 @@
                              uint32_t paramLength);
     virtual ~ProgramFragment();
 
-    virtual void setupGL2(Context *, ProgramFragmentState *);
+    virtual void setup(Context *, ProgramFragmentState *);
 
     virtual void serialize(OStream *stream) const;
     virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_PROGRAM_FRAGMENT; }
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index b8b3c0b..534e8a6 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -32,7 +32,7 @@
     mRSC->mHal.funcs.vertex.destroy(mRSC, this);
 }
 
-void ProgramVertex::setupGL2(Context *rsc, ProgramVertexState *state) {
+void ProgramVertex::setup(Context *rsc, ProgramVertexState *state) {
     if ((state->mLast.get() == this) && !mDirty) {
         return;
     }
diff --git a/rsProgramVertex.h b/rsProgramVertex.h
index 04224a7..5cfdd8b 100644
--- a/rsProgramVertex.h
+++ b/rsProgramVertex.h
@@ -31,7 +31,7 @@
                   const uint32_t * params, uint32_t paramLength);
     virtual ~ProgramVertex();
 
-    virtual void setupGL2(Context *rsc, ProgramVertexState *state);
+    virtual void setup(Context *rsc, ProgramVertexState *state);
 
     void setProjectionMatrix(Context *, const rsc_Matrix *) const;
     void getProjectionMatrix(Context *, rsc_Matrix *) const;
diff --git a/rsScriptC_LibGL.cpp b/rsScriptC_LibGL.cpp
index ecda485..3259cb4 100644
--- a/rsScriptC_LibGL.cpp
+++ b/rsScriptC_LibGL.cpp
@@ -156,7 +156,7 @@
     attribs[1].set(GL_FLOAT, 2, 8, false, (uint32_t)tex, "ATTRIB_texture0");
 
     RsdVertexArray va(attribs, 2);
-    va.setupGL2(rsc);
+    va.setup(rsc);
 
     glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
 }
@@ -250,7 +250,7 @@
 
 
 void rsrClearColor(Context *rsc, Script *sc, float r, float g, float b, float a) {
-    rsc->mFBOCache.setupGL2(rsc);
+    rsc->mFBOCache.setup(rsc);
     rsc->setupProgramStore();
 
     glClearColor(r, g, b, a);
@@ -258,7 +258,7 @@
 }
 
 void rsrClearDepth(Context *rsc, Script *sc, float v) {
-    rsc->mFBOCache.setupGL2(rsc);
+    rsc->mFBOCache.setup(rsc);
     rsc->setupProgramStore();
 
     glClearDepthf(v);