Place shader logging behind prop to declutter logs.
diff --git a/rsContext.cpp b/rsContext.cpp
index 96c289e..8f56efa 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -239,7 +239,7 @@
 void Context::setupCheck()
 {
     if (checkVersion2_0()) {
-        mShaderCache.lookup(mVertex.get(), mFragment.get());
+        mShaderCache.lookup(this, mVertex.get(), mFragment.get());
 
         mFragmentStore->setupGL2(this, &mStateFragmentStore);
         mFragment->setupGL2(this, &mStateFragment, &mShaderCache);
@@ -272,6 +272,7 @@
      rsc->props.mLogTimes = getProp("debug.rs.profile");
      rsc->props.mLogScripts = getProp("debug.rs.script");
      rsc->props.mLogObjects = getProp("debug.rs.objects");
+     rsc->props.mLogShaders = getProp("debug.rs.shaders");
 
      ScriptTLSStruct *tlsStruct = new ScriptTLSStruct;
      if (!tlsStruct) {
diff --git a/rsContext.h b/rsContext.h
index 790aca6..dd0423e 100644
--- a/rsContext.h
+++ b/rsContext.h
@@ -164,6 +164,7 @@
         bool mLogTimes;
         bool mLogScripts;
         bool mLogObjects;
+        bool mLogShaders;
     } props;
 
     void dumpDebug() const;
diff --git a/rsProgram.cpp b/rsProgram.cpp
index bcda5fb..e6d1e36 100644
--- a/rsProgram.cpp
+++ b/rsProgram.cpp
@@ -125,13 +125,15 @@
 {
 }
 
-bool Program::loadShader(uint32_t type)
+bool Program::loadShader(Context *rsc, uint32_t type)
 {
     mShaderID = glCreateShader(type);
     rsAssert(mShaderID);
 
-    LOGV("Loading shader type %x, ID %i", type, mShaderID);
-    LOGE(mShader.string());
+    if (rsc->props.mLogShaders) {
+        LOGV("Loading shader type %x, ID %i", type, mShaderID);
+        LOGV(mShader.string());
+    }
 
     if (mShaderID) {
         const char * ss = mShader.string();
@@ -156,7 +158,10 @@
             }
         }
     }
-    LOGV("--Shader load result %x ", glGetError());
+
+    if (rsc->props.mLogShaders) {
+        LOGV("--Shader load result %x ", glGetError());
+    }
     return true;
 }
 
diff --git a/rsProgram.h b/rsProgram.h
index e9837b7..003498e 100644
--- a/rsProgram.h
+++ b/rsProgram.h
@@ -72,7 +72,7 @@
     String8 mAttribNames[MAX_ATTRIBS];
     String8 mUniformNames[MAX_UNIFORMS];
 
-    bool loadShader(uint32_t type);
+    bool loadShader(Context *, uint32_t type);
 
 public:
     void forceDirty() const {mDirty = true;}
diff --git a/rsProgramFragment.cpp b/rsProgramFragment.cpp
index 2d18c42..c353301 100644
--- a/rsProgramFragment.cpp
+++ b/rsProgramFragment.cpp
@@ -161,8 +161,8 @@
     //LOGE("sgl2 frag2 %x", glGetError());
 }
 
-void ProgramFragment::loadShader() {
-    Program::loadShader(GL_FRAGMENT_SHADER);
+void ProgramFragment::loadShader(Context *rsc) {
+    Program::loadShader(rsc, GL_FRAGMENT_SHADER);
 }
 
 void ProgramFragment::createShader()
diff --git a/rsProgramFragment.h b/rsProgramFragment.h
index 1f548ad..14b4ec3 100644
--- a/rsProgramFragment.h
+++ b/rsProgramFragment.h
@@ -50,7 +50,7 @@
     void setTexEnable(uint32_t slot, bool);
 
     virtual void createShader();
-    virtual void loadShader();
+    virtual void loadShader(Context *rsc);
     virtual void init(Context *rsc);
 
 
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index 9a2edfc..058cd73 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -108,8 +108,8 @@
     mDirty = false;
 }
 
-void ProgramVertex::loadShader() {
-    Program::loadShader(GL_VERTEX_SHADER);
+void ProgramVertex::loadShader(Context *rsc) {
+    Program::loadShader(rsc, GL_VERTEX_SHADER);
 }
 
 void ProgramVertex::createShader()
diff --git a/rsProgramVertex.h b/rsProgramVertex.h
index b3115a3..4748acc 100644
--- a/rsProgramVertex.h
+++ b/rsProgramVertex.h
@@ -49,7 +49,7 @@
     void transformToScreen(const Context *, float *v4out, const float *v3in) const;
 
     virtual void createShader();
-    virtual void loadShader();
+    virtual void loadShader(Context *);
     virtual void init(Context *);
 
 
diff --git a/rsShaderCache.cpp b/rsShaderCache.cpp
index 4b16677..8e2af34 100644
--- a/rsShaderCache.cpp
+++ b/rsShaderCache.cpp
@@ -41,13 +41,13 @@
     free(mEntries);
 }
 
-bool ShaderCache::lookup(ProgramVertex *vtx, ProgramFragment *frag)
+bool ShaderCache::lookup(Context *rsc, ProgramVertex *vtx, ProgramFragment *frag)
 {
     if (!vtx->getShaderID()) {
-        vtx->loadShader();
+        vtx->loadShader(rsc);
     }
     if (!frag->getShaderID()) {
-        frag->loadShader();
+        frag->loadShader(rsc);
     }
     //LOGV("ShaderCache lookup  vtx %i, frag %i", vtx->getShaderID(), frag->getShaderID());
 
@@ -115,15 +115,21 @@
         }
         for (uint32_t ct=0; ct < vtx->getAttribCount(); ct++) {
             e->mVtxAttribSlots[ct] = glGetAttribLocation(pgm, vtx->getAttribName(ct));
-            LOGV("vtx A, %s = %d\n", vtx->getAttribName(ct).string(), e->mVtxAttribSlots[ct]);
+            if (rsc->props.mLogShaders) {
+                LOGV("vtx A, %s = %d\n", vtx->getAttribName(ct).string(), e->mVtxAttribSlots[ct]);
+            }
         }
         for (uint32_t ct=0; ct < vtx->getUniformCount(); ct++) {
             e->mVtxUniformSlots[ct] = glGetUniformLocation(pgm, vtx->getUniformName(ct));
-            LOGV("vtx U, %s = %d\n", vtx->getUniformName(ct).string(), e->mVtxUniformSlots[ct]);
+            if (rsc->props.mLogShaders) {
+                LOGV("vtx U, %s = %d\n", vtx->getUniformName(ct).string(), e->mVtxUniformSlots[ct]);
+            }
         }
         for (uint32_t ct=0; ct < vtx->getUniformCount(); ct++) {
             e->mFragUniformSlots[ct] = glGetUniformLocation(pgm, frag->getUniformName(ct));
-            LOGV("frag U, %s = %d\n", frag->getUniformName(ct).string(), e->mFragUniformSlots[ct]);
+            if (rsc->props.mLogShaders) {
+                LOGV("frag U, %s = %d\n", frag->getUniformName(ct).string(), e->mFragUniformSlots[ct]);
+            }
         }
     }
 
diff --git a/rsShaderCache.h b/rsShaderCache.h
index 4d9f8ec..ede3734 100644
--- a/rsShaderCache.h
+++ b/rsShaderCache.h
@@ -33,7 +33,7 @@
     ShaderCache();
     virtual ~ShaderCache();
 
-    bool lookup(ProgramVertex *, ProgramFragment *);
+    bool lookup(Context *rsc, ProgramVertex *, ProgramFragment *);
 
     void cleanupVertex(uint32_t id);
     void cleanupFragment(uint32_t id);