Point Sprites
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index 3f75069..aeec739 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -111,7 +111,8 @@
         NX (15),
         NY (16),
         NZ (17),
-        INDEX (18);
+        INDEX (18),
+        POINT_SIZE(19);
 
         int mID;
         DataKind(int id) {
@@ -241,13 +242,18 @@
             add(DataType.FLOAT, DataKind.Z, false, 32, null);
             return this;
         }
-        
+
         public Builder addFloatST() {
             add(DataType.FLOAT, DataKind.S, false, 32, null);
             add(DataType.FLOAT, DataKind.T, false, 32, null);
             return this;
         }
 
+        public Builder addFloatPointSize() {
+            add(DataType.FLOAT, DataKind.POINT_SIZE, false, 32, null);
+            return this;
+        }
+
         public Builder addFloatRGB() {
             add(DataType.FLOAT, DataKind.RED, false, 32, null);
             add(DataType.FLOAT, DataKind.GREEN, false, 32, null);
diff --git a/graphics/java/android/renderscript/ProgramFragment.java b/graphics/java/android/renderscript/ProgramFragment.java
index aad09f6..392d93d 100644
--- a/graphics/java/android/renderscript/ProgramFragment.java
+++ b/graphics/java/android/renderscript/ProgramFragment.java
@@ -68,6 +68,7 @@
         RenderScript mRS;
         Element mIn;
         Element mOut;
+        boolean mPointSpriteEnable;
 
         private class Slot {
             Type mType;
@@ -85,6 +86,7 @@
             mIn = in;
             mOut = out;
             mSlots = new Slot[MAX_SLOT];
+            mPointSpriteEnable = false;
             for(int ct=0; ct < MAX_SLOT; ct++) {
                 mSlots[ct] = new Slot();
             }
@@ -117,6 +119,9 @@
             mSlots[slot].mEnv = env;
         }
 
+        public void setPointSpriteTexCoordinateReplacement(boolean enable) {
+            mPointSpriteEnable = enable;
+        }
 
         static synchronized ProgramFragment internalCreate(RenderScript rs, Builder b) {
             int inID = 0;
@@ -127,21 +132,18 @@
             if (b.mOut != null) {
                 outID = b.mOut.mID;
             }
-            rs.nProgramFragmentBegin(inID, outID);
+            rs.nProgramFragmentBegin(inID, outID, b.mPointSpriteEnable);
             for(int ct=0; ct < MAX_SLOT; ct++) {
                 if(b.mSlots[ct].mTexEnable) {
                     Slot s = b.mSlots[ct];
+                    int typeID = 0;
                     if(s.mType != null) {
-                        rs.nProgramFragmentSetType(ct, s.mType.mID);
+                        typeID = s.mType.mID;
                     }
-                    rs.nProgramFragmentSetTexEnable(ct, true);
-                    if(s.mEnv != null) {
-                        rs.nProgramFragmentSetEnvMode(ct, s.mEnv.mID);
-                    }
+                    rs.nProgramFragmentSetSlot(ct, true, s.mEnv.mID, typeID);
                 }
             }
 
-
             int id = rs.nProgramFragmentCreate();
             return new ProgramFragment(id, rs);
         }
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index fca1c7a..076a5d4 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -158,12 +158,10 @@
     native void nProgramFragmentStoreDither(boolean enable);
     native int  nProgramFragmentStoreCreate();
 
-    native void nProgramFragmentBegin(int in, int out);
+    native void nProgramFragmentBegin(int in, int out, boolean pointSpriteEnable);
     native void nProgramFragmentBindTexture(int vpf, int slot, int a);
     native void nProgramFragmentBindSampler(int vpf, int slot, int s);
-    native void nProgramFragmentSetType(int slot, int vt);
-    native void nProgramFragmentSetEnvMode(int slot, int env);
-    native void nProgramFragmentSetTexEnable(int slot, boolean enable);
+    native void nProgramFragmentSetSlot(int slot, boolean enable, int env, int vt);
     native int  nProgramFragmentCreate();
 
     native void nProgramVertexBindAllocation(int pv, int mID);