Merge "changing vec4 to vec2 for perf reasons."
diff --git a/graphics/java/android/renderscript/ProgramFragment.java b/graphics/java/android/renderscript/ProgramFragment.java
index c1d6428..8858b74 100644
--- a/graphics/java/android/renderscript/ProgramFragment.java
+++ b/graphics/java/android/renderscript/ProgramFragment.java
@@ -104,7 +104,7 @@
         private void buildShaderString() {
             mShader  = "//rs_shader_internal\n";
             mShader += "varying lowp vec4 varColor;\n";
-            mShader += "varying vec4 varTex0;\n";
+            mShader += "varying vec2 varTex0;\n";
 
             mShader += "void main() {\n";
             if (mVaryingColorEnable) {
diff --git a/graphics/java/android/renderscript/ProgramVertex.java b/graphics/java/android/renderscript/ProgramVertex.java
index 63e2598..65a0af2 100644
--- a/graphics/java/android/renderscript/ProgramVertex.java
+++ b/graphics/java/android/renderscript/ProgramVertex.java
@@ -101,7 +101,7 @@
 
             mShader  = "//rs_shader_internal\n";
             mShader += "varying vec4 varColor;\n";
-            mShader += "varying vec4 varTex0;\n";
+            mShader += "varying vec2 varTex0;\n";
 
             mShader += "void main() {\n";
             mShader += "  gl_Position = UNI_MVP * ATTRIB_position;\n";
@@ -109,7 +109,7 @@
 
             mShader += "  varColor = ATTRIB_color;\n";
             if (mTextureMatrixEnable) {
-                mShader += "  varTex0 = UNI_TexMatrix * ATTRIB_texture0;\n";
+                mShader += "  varTex0 = (UNI_TexMatrix * vec4(ATTRIB_texture0, 0.0, 1.0)).xy;\n";
             } else {
                 mShader += "  varTex0 = ATTRIB_texture0;\n";
             }
@@ -126,7 +126,7 @@
             b.add(Element.F32_4(mRS), "position");
             b.add(Element.F32_4(mRS), "color");
             b.add(Element.F32_3(mRS), "normal");
-            b.add(Element.F32_4(mRS), "texture0");
+            b.add(Element.F32_2(mRS), "texture0");
             addInput(b.create());
 
             return super.create();
diff --git a/libs/rs/java/Samples/res/raw/multitexf.glsl b/libs/rs/java/Samples/res/raw/multitexf.glsl
index 91151ad..351ff9b 100644
--- a/libs/rs/java/Samples/res/raw/multitexf.glsl
+++ b/libs/rs/java/Samples/res/raw/multitexf.glsl
@@ -1,4 +1,4 @@
-varying vec4 varTex0;
+varying vec2 varTex0;
 
 void main() {
    vec2 t0 = varTex0.xy;
diff --git a/libs/rs/rsFont.cpp b/libs/rs/rsFont.cpp
index b9de7e1..a951005 100644
--- a/libs/rs/rsFont.cpp
+++ b/libs/rs/rsFont.cpp
@@ -497,7 +497,7 @@
 
 void FontState::initRenderState()
 {
-    String8 shaderString("varying vec4 varTex0;\n");
+    String8 shaderString("varying vec2 varTex0;\n");
     shaderString.append("void main() {\n");
     shaderString.append("  lowp vec4 col = UNI_Color;\n");
     shaderString.append("  col.a = texture2D(UNI_Tex0, varTex0.xy).a;\n");
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index c94f294..81b4fa4 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -190,7 +190,7 @@
 {
     String8 shaderString(RS_SHADER_INTERNAL);
     shaderString.append("varying lowp vec4 varColor;\n");
-    shaderString.append("varying vec4 varTex0;\n");
+    shaderString.append("varying vec2 varTex0;\n");
     shaderString.append("void main() {\n");
     shaderString.append("  lowp vec4 col = UNI_Color;\n");
     shaderString.append("  gl_FragColor = col;\n");
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index d3dbfb2..a785262 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -242,6 +242,7 @@
 void ProgramVertexState::init(Context *rsc)
 {
     const Element *matrixElem = Element::create(rsc, RS_TYPE_MATRIX_4X4, RS_KIND_USER, false, 1);
+    const Element *f2Elem = Element::create(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 2);
     const Element *f3Elem = Element::create(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 3);
     const Element *f4Elem = Element::create(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 4);
 
@@ -256,7 +257,7 @@
     rsc->mStateElement.elementBuilderAdd(f4Elem, "position", 1);
     rsc->mStateElement.elementBuilderAdd(f4Elem, "color", 1);
     rsc->mStateElement.elementBuilderAdd(f3Elem, "normal", 1);
-    rsc->mStateElement.elementBuilderAdd(f4Elem, "texture0", 1);
+    rsc->mStateElement.elementBuilderAdd(f2Elem, "texture0", 1);
     const Element *attrElem = rsc->mStateElement.elementBuilderCreate(rsc);
 
     Type *inputType = new Type(rsc);
@@ -266,7 +267,7 @@
 
     String8 shaderString(RS_SHADER_INTERNAL);
     shaderString.append("varying vec4 varColor;\n");
-    shaderString.append("varying vec4 varTex0;\n");
+    shaderString.append("varying vec2 varTex0;\n");
     shaderString.append("void main() {\n");
     shaderString.append("  gl_Position = UNI_MVP * ATTRIB_position;\n");
     shaderString.append("  gl_PointSize = 1.0;\n");