Cleanup error message for null binding address.
Only print the debug if script debugging is enabled.

Change-Id: I72b9c2a73d49987a73b354442e9defec02b93bc6

Implement inner utiliy class to specify surface formats.
Remove boxed bitmap upload functions.

Change-Id: I3ff5ca59e53d02b9d75277afa947ea3d218459eb
diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java
index 2c076b3..06bfbcf 100644
--- a/graphics/java/android/renderscript/Allocation.java
+++ b/graphics/java/android/renderscript/Allocation.java
@@ -372,17 +372,6 @@
         return a;
     }
 
-    static Allocation createFromBitmapBoxed(RenderScript rs, Bitmap b, Element dstFmt, boolean genMips)
-        throws IllegalArgumentException {
-
-        rs.validate();
-        int id = rs.nAllocationCreateFromBitmapBoxed(dstFmt.mID, genMips, b);
-        if(id == 0) {
-            throw new IllegalStateException("Load failed.");
-        }
-        return new Allocation(id, rs, null);
-    }
-
     static public Allocation createFromBitmapResource(RenderScript rs, Resources res, int id, Element dstFmt, boolean genMips)
         throws IllegalArgumentException {
 
@@ -415,24 +404,6 @@
         return null;
     }
 
-    static public Allocation createFromBitmapResourceBoxed(RenderScript rs, Resources res, int id, Element dstFmt, boolean genMips)
-        throws IllegalArgumentException {
-
-        mBitmapOptions.inPreferredConfig = null;
-        if (dstFmt == rs.mElement_RGBA_8888) {
-            mBitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
-        } else if (dstFmt == rs.mElement_RGB_888) {
-            mBitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
-        } else if (dstFmt == rs.mElement_RGBA_4444) {
-            mBitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_4444;
-        } else if (dstFmt == rs.mElement_RGB_565) {
-            mBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565;
-        }
-
-        Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions);
-        return createFromBitmapBoxed(rs, b, dstFmt, genMips);
-    }
-
     static public Allocation createFromString(RenderScript rs, String str)
         throws IllegalArgumentException {
         byte[] allocArray = null;
diff --git a/graphics/java/android/renderscript/RSSurfaceView.java b/graphics/java/android/renderscript/RSSurfaceView.java
index f05e84c..2540d01 100644
--- a/graphics/java/android/renderscript/RSSurfaceView.java
+++ b/graphics/java/android/renderscript/RSSurfaceView.java
@@ -25,7 +25,6 @@
 import android.os.Message;
 import android.util.AttributeSet;
 import android.util.Log;
-import android.util.Log;
 import android.view.Surface;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
@@ -146,22 +145,18 @@
 
     // ----------------------------------------------------------------------
 
-    public RenderScriptGL createRenderScript(boolean useDepth, boolean forceSW) {
+    public RenderScriptGL createRenderScript(RenderScriptGL.SurfaceConfig sc) {
         Log.v(RenderScript.LOG_TAG, "createRenderScript");
-        mRS = new RenderScriptGL(useDepth, forceSW);
+        mRS = new RenderScriptGL(sc);
         return mRS;
     }
 
-    public RenderScriptGL createRenderScript(boolean useDepth) {
-        return createRenderScript(useDepth, false);
-    }
-
     public void destroyRenderScript() {
         Log.v(RenderScript.LOG_TAG, "destroyRenderScript");
         mRS.destroy();
         mRS = null;
     }
-    
+
     public void createRenderScript(RenderScriptGL rs) {
         mRS = rs;
     }
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 0088373..27c40fa 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -194,10 +194,6 @@
     synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
         return rsnAllocationCreateBitmapRef(mContext, type, bmp);
     }
-    native int  rsnAllocationCreateFromBitmapBoxed(int con, int dstFmt, boolean genMips, Bitmap bmp);
-    synchronized int nAllocationCreateFromBitmapBoxed(int dstFmt, boolean genMips, Bitmap bmp) {
-        return rsnAllocationCreateFromBitmapBoxed(mContext, dstFmt, genMips, bmp);
-    }
     native int  rsnAllocationCreateFromAssetStream(int con, int dstFmt, boolean genMips, int assetStream);
     synchronized int nAllocationCreateFromAssetStream(int dstFmt, boolean genMips, int assetStream) {
         return rsnAllocationCreateFromAssetStream(mContext, dstFmt, genMips, assetStream);
diff --git a/graphics/java/android/renderscript/RenderScriptGL.java b/graphics/java/android/renderscript/RenderScriptGL.java
index 61ecc8d..b60c689 100644
--- a/graphics/java/android/renderscript/RenderScriptGL.java
+++ b/graphics/java/android/renderscript/RenderScriptGL.java
@@ -23,7 +23,8 @@
 import android.util.Config;
 import android.util.Log;
 import android.view.Surface;
-
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
 
 /**
  * @hide
@@ -34,16 +35,90 @@
     int mWidth;
     int mHeight;
 
+    public static class SurfaceConfig {
+        int mDepthMin       = 0;
+        int mDepthPref      = 0;
+        int mStencilMin     = 0;
+        int mStencilPref    = 0;
+        int mColorMin       = 8;
+        int mColorPref      = 8;
+        int mAlphaMin       = 0;
+        int mAlphaPref      = 0;
+        int mSamplesMin     = 1;
+        int mSamplesPref    = 1;
+        float mSamplesQ     = 1.f;
 
-    public RenderScriptGL(boolean useDepth, boolean forceSW) {
+        public SurfaceConfig() {
+        }
+
+        public SurfaceConfig(SurfaceConfig sc) {
+            mDepthMin = sc.mDepthMin;
+            mDepthPref = sc.mDepthPref;
+            mStencilMin = sc.mStencilMin;
+            mStencilPref = sc.mStencilPref;
+            mColorMin = sc.mColorMin;
+            mColorPref = sc.mColorPref;
+            mAlphaMin = sc.mAlphaMin;
+            mAlphaPref = sc.mAlphaPref;
+            mSamplesMin = sc.mSamplesMin;
+            mSamplesPref = sc.mSamplesPref;
+            mSamplesQ = sc.mSamplesQ;
+        }
+
+        private void validateRange(int umin, int upref, int rmin, int rmax) {
+            if (umin < rmin || umin > rmax) {
+                throw new IllegalArgumentException("Minimum value provided out of range.");
+            }
+            if (upref < umin) {
+                throw new IllegalArgumentException("Prefered must be >= Minimum.");
+            }
+        }
+
+        public void setColor(int minimum, int prefered) {
+            validateRange(minimum, prefered, 5, 8);
+            mColorMin = minimum;
+            mColorPref = prefered;
+        }
+        public void setAlpha(int minimum, int prefered) {
+            validateRange(minimum, prefered, 0, 8);
+            mAlphaMin = minimum;
+            mAlphaPref = prefered;
+        }
+        public void setDepth(int minimum, int prefered) {
+            validateRange(minimum, prefered, 0, 24);
+            mDepthMin = minimum;
+            mDepthPref = prefered;
+        }
+        public void setSamples(int minimum, int prefered, float Q) {
+            validateRange(minimum, prefered, 0, 24);
+            if (Q < 0.0f || Q > 1.0f) {
+                throw new IllegalArgumentException("Quality out of 0-1 range.");
+            }
+            mSamplesMin = minimum;
+            mSamplesPref = prefered;
+            mSamplesQ = Q;
+        }
+    };
+
+    SurfaceConfig mSurfaceConfig;
+
+    public void configureSurface(SurfaceHolder sh) {
+        //getHolder().setFormat(PixelFormat.TRANSLUCENT);
+    }
+
+    public void checkSurface(SurfaceHolder sh) {
+    }
+
+    public RenderScriptGL(SurfaceConfig sc) {
+        mSurfaceConfig = new SurfaceConfig(sc);
+
+
+
         mSurface = null;
         mWidth = 0;
         mHeight = 0;
         mDev = nDeviceCreate();
-        if(forceSW) {
-            nDeviceSetConfig(mDev, 0, 1);
-        }
-        mContext = nContextCreateGL(mDev, 0, useDepth);
+        mContext = nContextCreateGL(mDev, 0, mSurfaceConfig.mDepthMin > 0);
         mMessageThread = new MessageThread(this);
         mMessageThread.start();
         Element.initPredefined(this);
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index 8f1e93c..3e52fef 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -466,29 +466,6 @@
     return 0;
 }
 
-static int
-nAllocationCreateFromBitmapBoxed(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
-{
-    SkBitmap const * nativeBitmap =
-            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
-    const SkBitmap& bitmap(*nativeBitmap);
-    SkBitmap::Config config = bitmap.getConfig();
-
-    RsElement e = SkBitmapToPredefined(config);
-
-    if (e) {
-        bitmap.lockPixels();
-        const int w = bitmap.width();
-        const int h = bitmap.height();
-        const void* ptr = bitmap.getPixels();
-        jint id = (jint)rsAllocationCreateFromBitmapBoxed(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
-        bitmap.unlockPixels();
-        return id;
-    }
-    return 0;
-}
-
-
 static void
 nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
 {
@@ -1252,7 +1229,6 @@
 {"rsnAllocationCreateTyped",         "(II)I",                                 (void*)nAllocationCreateTyped },
 {"rsnAllocationCreateFromBitmap",    "(IIZLandroid/graphics/Bitmap;)I",       (void*)nAllocationCreateFromBitmap },
 {"rsnAllocationCreateBitmapRef",     "(IILandroid/graphics/Bitmap;)I",        (void*)nAllocationCreateBitmapRef },
-{"rsnAllocationCreateFromBitmapBoxed","(IIZLandroid/graphics/Bitmap;)I",      (void*)nAllocationCreateFromBitmapBoxed },
 {"rsnAllocationCreateFromAssetStream","(IIZI)I",                              (void*)nAllocationCreateFromAssetStream },
 {"rsnAllocationUploadToTexture",     "(IIZI)V",                               (void*)nAllocationUploadToTexture },
 {"rsnAllocationUploadToBufferObject","(II)V",                                 (void*)nAllocationUploadToBufferObject },
diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java
index c1411656b..987bebe 100644
--- a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java
+++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java
@@ -52,7 +52,8 @@
     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
         super.surfaceChanged(holder, format, w, h);
         if (mRS == null) {
-            mRS = createRenderScript(false);
+            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
+            mRS = createRenderScript(sc);
             mRS.contextSetSurface(w, h, holder.getSurface());
             mRender = new FountainRS();
             mRender.init(mRS, getResources(), w, h);
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphRS.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphRS.java
index b5592f0..81bd578 100644
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphRS.java
+++ b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphRS.java
@@ -128,7 +128,7 @@
     }
 
     private void loadImage() {
-        mGridImage = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.robot, Element.RGB_565(mRS), true);
+        mGridImage = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot, Element.RGB_565(mRS), true);
         mGridImage.uploadToTexture(0);
 
         mScript.set_gTGrid(mGridImage);
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphView.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphView.java
index 44a59b2..9457fd7 100644
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphView.java
+++ b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SceneGraphView.java
@@ -53,7 +53,9 @@
     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
         super.surfaceChanged(holder, format, w, h);
         if (mRS == null) {
-            mRS = createRenderScript(true);
+            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
+            sc.setDepth(16, 24);
+            mRS = createRenderScript(sc);
             mRS.contextSetSurface(w, h, holder.getSurface());
             mRender = new SceneGraphRS();
             mRender.init(mRS, getResources(), w, h);
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java
index afbf30b..ccbecd8 100644
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java
+++ b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java
@@ -124,7 +124,7 @@
     }
 
     private void loadImage() {
-        mGridImage = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.robot, Element.RGB_565(mRS), true);
+        mGridImage = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot, Element.RGB_565(mRS), true);
         mGridImage.uploadToTexture(0);
 
         mScript.set_gTGrid(mGridImage);
diff --git a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelView.java b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
index 2574fdd..4253085 100644
--- a/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
+++ b/libs/rs/java/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
@@ -53,7 +53,9 @@
     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
         super.surfaceChanged(holder, format, w, h);
         if (mRS == null) {
-            mRS = createRenderScript(true);
+            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
+            sc.setDepth(16, 24);
+            mRS = createRenderScript(sc);
             mRS.contextSetSurface(w, h, holder.getSurface());
             mRender = new SimpleModelRS();
             mRender.init(mRS, getResources(), w, h);
diff --git a/libs/rs/java/Samples/src/com/android/samples/RsListView.java b/libs/rs/java/Samples/src/com/android/samples/RsListView.java
index b98ea08..cd66fbb 100644
--- a/libs/rs/java/Samples/src/com/android/samples/RsListView.java
+++ b/libs/rs/java/Samples/src/com/android/samples/RsListView.java
@@ -53,7 +53,9 @@
     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
         super.surfaceChanged(holder, format, w, h);
         if (mRS == null) {
-            mRS = createRenderScript(true);
+            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
+            sc.setDepth(16, 24);
+            mRS = createRenderScript(sc);
             mRS.contextSetSurface(w, h, holder.getSurface());
             mRender = new RsListRS();
             mRender.init(mRS, getResources(), w, h);
diff --git a/libs/rs/java/Samples/src/com/android/samples/RsRenderStatesView.java b/libs/rs/java/Samples/src/com/android/samples/RsRenderStatesView.java
index 5548de3..c434c09 100644
--- a/libs/rs/java/Samples/src/com/android/samples/RsRenderStatesView.java
+++ b/libs/rs/java/Samples/src/com/android/samples/RsRenderStatesView.java
@@ -53,7 +53,9 @@
     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
         super.surfaceChanged(holder, format, w, h);
         if (mRS == null) {
-            mRS = createRenderScript(true);
+            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
+            sc.setDepth(16, 24);
+            mRS = createRenderScript(sc);
             mRS.contextSetSurface(w, h, holder.getSurface());
             mRender = new RsRenderStatesRS();
             mRender.init(mRS, getResources(), w, h);
diff --git a/libs/rs/java/tests/src/com/android/rs/test/RSTestView.java b/libs/rs/java/tests/src/com/android/rs/test/RSTestView.java
index b811d48..c65f8c6 100644
--- a/libs/rs/java/tests/src/com/android/rs/test/RSTestView.java
+++ b/libs/rs/java/tests/src/com/android/rs/test/RSTestView.java
@@ -52,7 +52,8 @@
     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
         super.surfaceChanged(holder, format, w, h);
         if (mRS == null) {
-            mRS = createRenderScript(false);
+            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
+            mRS = createRenderScript(sc);
             mRS.contextSetSurface(w, h, holder.getSurface());
             mRender = new RSTestCore();
             mRender.init(mRS, getResources(), w, h);
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index 0da637e..a1c0671 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -145,16 +145,6 @@
 	ret RsAllocation
 	}
 
-AllocationCreateFromBitmapBoxed {
-	param uint32_t width
-	param uint32_t height
-	param RsElement dstFmt
-	param RsElement srcFmt
-	param bool genMips
-	param const void * data
-	ret RsAllocation
-	}
-
 
 AllocationUploadToTexture {
 	param RsAllocation alloc
diff --git a/libs/rs/rsScript.cpp b/libs/rs/rsScript.cpp
index 0e76dae..c2f9689 100644
--- a/libs/rs/rsScript.cpp
+++ b/libs/rs/rsScript.cpp
@@ -66,7 +66,9 @@
         memcpy(destPtr, val, len);
         //LOGE("setVar f2  %f", ((const float *)destPtr)[0]);
     } else {
-        LOGE("Calling setVar on slot = %i which is null", slot);
+        //if (rsc->props.mLogScripts) {
+            LOGV("Calling setVar on slot = %i which is null", slot);
+        //}
     }
 }
 
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index d961fed..e60255a 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -81,7 +81,9 @@
         if (dest) {
             *dest = ptr;
         } else {
-            LOGE("ScriptC::setupScript, NULL var binding address.");
+            if (rsc->props.mLogScripts) {
+                LOGV("ScriptC::setupScript, NULL var binding address.");
+            }
         }
     }
 }