RS compatlib is not thunking LaunchOptions correctly

bug 8680826

Change-Id: I22af3a5f5bc583beaff9c96c086a2deee0369443
diff --git a/renderscript/v8/java/src/android/support/v8/renderscript/Script.java b/renderscript/v8/java/src/android/support/v8/renderscript/Script.java
index 33dd4ed..596c387 100644
--- a/renderscript/v8/java/src/android/support/v8/renderscript/Script.java
+++ b/renderscript/v8/java/src/android/support/v8/renderscript/Script.java
@@ -249,6 +249,11 @@
     }
 
     protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v, LaunchOptions sc) {
+        if (mT != null) {
+            mT.thunkForEach(slot, ain, aout, v, sc);
+            return;
+        }
+
         if (ain == null && aout == null) {
             throw new RSIllegalArgumentException(
                 "At least one of ain or aout is required to be non-null.");
diff --git a/renderscript/v8/java/src/android/support/v8/renderscript/ScriptCThunker.java b/renderscript/v8/java/src/android/support/v8/renderscript/ScriptCThunker.java
index 50b7904..130e408 100644
--- a/renderscript/v8/java/src/android/support/v8/renderscript/ScriptCThunker.java
+++ b/renderscript/v8/java/src/android/support/v8/renderscript/ScriptCThunker.java
@@ -92,6 +92,31 @@
         forEach(slot, nin, nout, nfp);
     }
 
+    void thunkForEach(int slot, Allocation ain, Allocation aout, FieldPacker v,
+                      android.support.v8.renderscript.Script.LaunchOptions sc) {
+        android.renderscript.Script.LaunchOptions lo = null;
+        if (sc != null) {
+            lo = new android.renderscript.Script.LaunchOptions();
+            if (sc.getXEnd() > 0) lo.setX(sc.getXStart(), sc.getXEnd());
+            if (sc.getYEnd() > 0) lo.setY(sc.getYStart(), sc.getYEnd());
+            if (sc.getZEnd() > 0) lo.setZ(sc.getZStart(), sc.getZEnd());
+        }
+
+        android.renderscript.Allocation nin = null;
+        android.renderscript.Allocation nout = null;
+        android.renderscript.FieldPacker nfp = null;
+        if (ain != null) {
+            nin = ((AllocationThunker)ain).mN;
+        }
+        if (aout != null) {
+            nout = ((AllocationThunker)aout).mN;
+        }
+        if (v != null) {
+            nfp = new android.renderscript.FieldPacker(v.getData());
+        }
+        forEach(slot, nin, nout, nfp, lo);
+    }
+
     void thunkSetVar(int index, float v) {
         setVar(index, v);
     }