diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 6a07ef8..5e86080 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -28,14 +28,14 @@
         <meta-data android:name="android.app.cts.float" android:value="100.1" />
         <meta-data android:name="android.app.cts.reference" android:resource="@xml/metadata" />
     </permission>
-    
+
     <uses-permission android:name="android.permission.GET_TASKS" />
     <uses-permission android:name="android.permission.SET_WALLPAPER" />
     <uses-permission android:name="android.permission.SET_TIME_ZONE" />
     <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
-    <uses-permission android:name="android.permission.WRITE_CONTACTS" />        
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
     <uses-permission android:name="android.permission.WRITE_SOCIAL_STREAM" />
-    <uses-permission android:name="android.permission.READ_CALL_LOG" />    
+    <uses-permission android:name="android.permission.READ_CALL_LOG" />
     <uses-permission android:name="android.permission.READ_CONTACTS" />
     <uses-permission android:name="android.permission.READ_SOCIAL_STREAM" />
     <uses-permission android:name="android.permission.WRITE_CALENDAR" />
@@ -106,7 +106,7 @@
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.READ_SYNC_STATS" />
-    
+
     <!-- Used for PackageManager test, don't delete this permission-tree -->
     <permission-tree android:name="com.android.cts.stub.permission.TEST_DYNAMIC"
                     android:label="Test Tree"/>
@@ -627,7 +627,7 @@
             </intent-filter>
         </activity>
 
-        <activity android:name="android.widget.cts.ZoomButtonStubActivity" 
+        <activity android:name="android.widget.cts.ZoomButtonStubActivity"
             android:label="ZoomButtonStubActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
@@ -813,7 +813,7 @@
         <provider android:name="android.content.cts.MockRemoteContentProvider"
             android:authorities="remotectstest"
             android:process=":remoteprovider" android:multiprocess="false" />
-        
+
         <activity android:name="android.app.cts.ChildTabActivity" android:label="ChildTabActivity" />
 
         <activity android:name="android.app.cts.LauncherActivityStub"
@@ -928,7 +928,7 @@
         </service>
         <service android:name="android.app.cts.IntentServiceStub"/>
 
-        <activity android:name="android.app.cts.LaunchpadActivity" 
+        <activity android:name="android.app.cts.LaunchpadActivity"
                   android:configChanges="keyboardHidden|orientation|screenSize"
                   android:multiprocess="true">
         </activity>
@@ -969,10 +969,10 @@
         </activity>
 
         <activity android:name="android.preference.cts.PreferenceStubActivity">
-            <meta-data android:name="android.preference" 
+            <meta-data android:name="android.preference"
                     android:resource="@xml/preferences_from_intent" />
         </activity>
-                
+
         <activity android:name="android.content.cts.ClipboardManagerListenerActivity"/>
 
         <activity android:name="android.app.cts.ActivityManagerMemoryClassLaunchActivity" />
@@ -987,7 +987,7 @@
             </intent-filter>
         </service>
 
-        <activity android:name="android.renderscript.cts.RenderscriptGLStubActivity"
+        <activity android:name="android.renderscriptgraphics.cts.RenderscriptGLStubActivity"
                   android:label="RenderscriptGLStub"/>
     </application>
 
diff --git a/tests/src/android/renderscript/cts/graphics_runner.rs b/tests/src/android/rsg/cts/graphics_runner.rs
similarity index 100%
rename from tests/src/android/renderscript/cts/graphics_runner.rs
rename to tests/src/android/rsg/cts/graphics_runner.rs
diff --git a/tests/src/android/rsg/cts/shared.rsh b/tests/src/android/rsg/cts/shared.rsh
new file mode 100644
index 0000000..f33b708
--- /dev/null
+++ b/tests/src/android/rsg/cts/shared.rsh
@@ -0,0 +1,27 @@
+#pragma version(1)
+#pragma rs java_package_name(android.renderscriptgraphics.cts)
+
+static int64_t g_time;
+
+static void start(void) {
+    g_time = rsUptimeMillis();
+}
+
+static float end(void) {
+    int64_t t = rsUptimeMillis() - g_time;
+    return ((float)t) / 1000.f;
+}
+
+#define _RS_ASSERT(b) \
+do { \
+    if (!(b)) { \
+        failed = true; \
+        rsDebug(#b " FAILED", 0); \
+    } \
+\
+} while (0)
+
+/* These constants must match those in UnitTest.java */
+static const int RS_MSG_TEST_PASSED = 100;
+static const int RS_MSG_TEST_FAILED = 101;
+
diff --git a/tests/src/android/rsg/cts/structs.rsh b/tests/src/android/rsg/cts/structs.rsh
new file mode 100755
index 0000000..e7d2efd
--- /dev/null
+++ b/tests/src/android/rsg/cts/structs.rsh
@@ -0,0 +1,56 @@
+// Copyright (C) 2011 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+typedef struct ConstMatrix {
+    rs_matrix4x4 MATRIX;
+} ConstMatrix_s;
+ConstMatrix_s *c1;
+
+typedef struct ConstComplex {
+    rs_matrix4x4 MATRIX;
+    rs_matrix4x4 EXTRA;
+    float extra1;
+    float2 extra2;
+    float3 extra3;
+    float4 extra4;
+} ConstComplex_s;
+ConstComplex_s *c2;
+
+typedef struct ConstExtra {
+    rs_matrix4x4 EXTRA;
+    float extra1;
+    float2 extra2;
+    float3 extra3;
+    float4 extra4;
+} ConstExtra_s;
+ConstExtra_s *c3;
+
+typedef struct AllVectorTypes {
+    char2 b2;
+    char3 b3;
+    char4 b4;
+
+    short2 s2;
+    short3 s3;
+    short4 s4;
+
+    int2 i2;
+    int3 i3;
+    int4 i4;
+
+    float2 f2;
+    float3 f3;
+    float4 f4;
+} AllVectorTypes_s;
+AllVectorTypes_s *avt;
diff --git a/tests/src/android/renderscript/cts/stub_activity.rs b/tests/src/android/rsg/cts/stub_activity.rs
similarity index 94%
rename from tests/src/android/renderscript/cts/stub_activity.rs
rename to tests/src/android/rsg/cts/stub_activity.rs
index 7e149f7..f5efce6 100644
--- a/tests/src/android/renderscript/cts/stub_activity.rs
+++ b/tests/src/android/rsg/cts/stub_activity.rs
@@ -15,7 +15,7 @@
 #pragma version(1)
 
 // Tell which java package name the reflected files should belong to
-#pragma rs java_package_name(android.renderscript.cts)
+#pragma rs java_package_name(android.renderscriptgraphics.cts)
 
 // Built-in header with graphics API's
 #include "rs_graphics.rsh"
diff --git a/tests/tests/media/src/android/media/cts/AudioTrackTest.java b/tests/tests/media/src/android/media/cts/AudioTrackTest.java
index f541e65..ac8379a 100644
--- a/tests/tests/media/src/android/media/cts/AudioTrackTest.java
+++ b/tests/tests/media/src/android/media/cts/AudioTrackTest.java
@@ -636,7 +636,7 @@
         final int TEST_SR = 22050;
         final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
         final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
-        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_MODE = AudioTrack.MODE_STATIC;
         final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
 
         // -------- initialization --------------
@@ -645,9 +645,10 @@
                 2 * minBuffSize, TEST_MODE);
         byte data[] = new byte[minBuffSize];
         // -------- test --------------
-        assertTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertEquals(TEST_NAME, AudioTrack.STATE_NO_STATIC_DATA, track.getState());
         track.write(data, OFFSET_DEFAULT, data.length);
         track.write(data, OFFSET_DEFAULT, data.length);
+        assertEquals(TEST_NAME, AudioTrack.STATE_INITIALIZED, track.getState());
         track.play();
         track.stop();
         assertEquals(TEST_NAME, AudioTrack.PLAYSTATE_STOPPED, track.getPlayState());
@@ -663,7 +664,7 @@
         final int TEST_SR = 22050;
         final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
         final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
-        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_MODE = AudioTrack.MODE_STATIC;
         final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
 
         // -------- initialization --------------
@@ -672,9 +673,10 @@
                 2 * minBuffSize, TEST_MODE);
         byte data[] = new byte[minBuffSize];
         // -------- test --------------
-        assertTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertEquals(TEST_NAME, AudioTrack.STATE_NO_STATIC_DATA, track.getState());
         track.write(data, OFFSET_DEFAULT, data.length);
         track.write(data, OFFSET_DEFAULT, data.length);
+        assertEquals(TEST_NAME, AudioTrack.STATE_INITIALIZED, track.getState());
         track.play();
         track.pause();
         assertEquals(TEST_NAME, AudioTrack.PLAYSTATE_PAUSED, track.getPlayState());
@@ -690,7 +692,7 @@
         final int TEST_SR = 22050;
         final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
         final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
-        final int TEST_MODE = AudioTrack.MODE_STREAM;
+        final int TEST_MODE = AudioTrack.MODE_STATIC;
         final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
 
         // -------- initialization --------------
@@ -703,9 +705,10 @@
         // count (given the audio track properties), and add 77.
         int frameIndexTooFar = (2 * minBuffSize / 2) + 77;
         // -------- test --------------
-        assertTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
+        assertEquals(TEST_NAME, AudioTrack.STATE_NO_STATIC_DATA, track.getState());
         track.write(data, OFFSET_DEFAULT, data.length);
         track.write(data, OFFSET_DEFAULT, data.length);
+        assertEquals(TEST_NAME, AudioTrack.STATE_INITIALIZED, track.getState());
         track.play();
         track.stop();
         assertEquals(TEST_NAME, AudioTrack.PLAYSTATE_STOPPED, track.getPlayState());
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/AllocationTest.java b/tests/tests/renderscript/src/android/renderscript/cts/AllocationTest.java
index 4a1533c..51309c8 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/AllocationTest.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/AllocationTest.java
@@ -30,7 +30,7 @@
 
 import android.util.Log;
 
-public class AllocationTest extends RSBaseGraphics {
+public class AllocationTest extends RSBaseCompute {
 
     // Test power of two and non power of two, equal and non-equal sizes
     void createTypedHelper(Element e) {
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/SamplerTest.java b/tests/tests/renderscript/src/android/renderscript/cts/SamplerTest.java
index fa30f9f..6f00e55 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/SamplerTest.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/SamplerTest.java
@@ -19,7 +19,7 @@
 import android.renderscript.Sampler;
 import android.renderscript.Sampler.Value;
 
-public class SamplerTest extends RSBaseGraphics {
+public class SamplerTest extends RSBaseCompute {
 
     Sampler.Value[] mMinValues;
     Sampler.Value[] mMagValues;
diff --git a/tests/tests/rsg/Android.mk b/tests/tests/rsg/Android.mk
new file mode 100644
index 0000000..9ff554c
--- /dev/null
+++ b/tests/tests/rsg/Android.mk
@@ -0,0 +1,39 @@
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+# Replace "Example" with your name.
+LOCAL_PACKAGE_NAME := CtsRenderscriptGraphicsTestCases
+
+# Don't include this package in any target.
+LOCAL_MODULE_TAGS := optional
+
+# When built, explicitly put it in the data partition.
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+# All tests should include android.test.runner.
+LOCAL_JAVA_LIBRARIES := android.test.runner
+
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
+
+LOCAL_SDK_VERSION := 17
+
+include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/rsg/AndroidManifest.xml b/tests/tests/rsg/AndroidManifest.xml
new file mode 100644
index 0000000..886a395
--- /dev/null
+++ b/tests/tests/rsg/AndroidManifest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- Replace all the "example" stuff below with your package name, and
+     remove this comment.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.cts.renderscriptgraphics">
+
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <!-- This is a self-instrumenting test package. -->
+    <instrumentation android:name="android.test.InstrumentationCtsTestRunner"
+                     android:targetPackage="com.android.cts.stub"
+                     android:label="CTS tests of Renderscript Graphics component"/>
+
+</manifest>
+
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/BaseObjTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/BaseObjTest.java
similarity index 97%
rename from tests/tests/renderscript/src/android/renderscript/cts/BaseObjTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/BaseObjTest.java
index a079951..7773dda 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/BaseObjTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/BaseObjTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import android.renderscript.BaseObj;
 import android.renderscript.Font;
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/ContextCreationTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ContextCreationTest.java
similarity index 98%
rename from tests/tests/renderscript/src/android/renderscript/cts/ContextCreationTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/ContextCreationTest.java
index 1edce0a..11b999c 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/ContextCreationTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ContextCreationTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import android.renderscript.*;
 import android.test.ActivityInstrumentationTestCase2;
@@ -48,7 +48,7 @@
         super.setUp();
         mActivity = getActivity();
     }
-    
+
     @Override
     protected void tearDown() throws Exception {
         mActivity.destroyAll();
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/FileA3DTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/FileA3DTest.java
similarity index 98%
rename from tests/tests/renderscript/src/android/renderscript/cts/FileA3DTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/FileA3DTest.java
index ca2bb388..510a3c5 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/FileA3DTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/FileA3DTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import java.io.File;
 
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/FontTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/FontTest.java
similarity index 98%
rename from tests/tests/renderscript/src/android/renderscript/cts/FontTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/FontTest.java
index a3e4da0..43b9662 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/FontTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/FontTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import java.io.File;
 import com.android.cts.stub.R;
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/MeshTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/MeshTest.java
similarity index 99%
rename from tests/tests/renderscript/src/android/renderscript/cts/MeshTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/MeshTest.java
index ffa733a..9b7eb99 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/MeshTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/MeshTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import android.renderscript.Allocation;
 import android.renderscript.Element;
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/ProgramFragmentFixedFunctionTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramFragmentFixedFunctionTest.java
similarity index 98%
rename from tests/tests/renderscript/src/android/renderscript/cts/ProgramFragmentFixedFunctionTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramFragmentFixedFunctionTest.java
index ac54b74..29824d1 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/ProgramFragmentFixedFunctionTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramFragmentFixedFunctionTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import com.android.cts.stub.R;
 import android.renderscript.Element;
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/ProgramFragmentTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramFragmentTest.java
similarity index 99%
rename from tests/tests/renderscript/src/android/renderscript/cts/ProgramFragmentTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramFragmentTest.java
index 9a71386..ef6ad18 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/ProgramFragmentTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramFragmentTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import com.android.cts.stub.R;
 
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/ProgramRasterTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramRasterTest.java
similarity index 97%
rename from tests/tests/renderscript/src/android/renderscript/cts/ProgramRasterTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramRasterTest.java
index befa926..e752d39 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/ProgramRasterTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramRasterTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import android.renderscript.ProgramRaster;
 import android.renderscript.ProgramRaster.Builder;
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/ProgramStoreTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramStoreTest.java
similarity index 98%
rename from tests/tests/renderscript/src/android/renderscript/cts/ProgramStoreTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramStoreTest.java
index b7f5eff..e42f6fe 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/ProgramStoreTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramStoreTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import android.renderscript.ProgramStore;
 import android.renderscript.ProgramStore.DepthFunc;
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/ProgramVertexFixedFunctionTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramVertexFixedFunctionTest.java
similarity index 98%
rename from tests/tests/renderscript/src/android/renderscript/cts/ProgramVertexFixedFunctionTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramVertexFixedFunctionTest.java
index 0adab9a..a50a9d5 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/ProgramVertexFixedFunctionTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramVertexFixedFunctionTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import com.android.cts.stub.R;
 
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/ProgramVertexTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramVertexTest.java
similarity index 99%
rename from tests/tests/renderscript/src/android/renderscript/cts/ProgramVertexTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramVertexTest.java
index 3c2c188..7f23bd0 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/ProgramVertexTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/ProgramVertexTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import com.android.cts.stub.R;
 
diff --git a/tests/tests/rsg/src/android/renderscriptgraphics/cts/RSBase.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/RSBase.java
new file mode 100644
index 0000000..7729e1e
--- /dev/null
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/RSBase.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2011-2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.renderscriptgraphics.cts;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.renderscript.RenderScript.RSErrorHandler;
+import android.renderscript.RenderScript.RSMessageHandler;
+import android.renderscript.RSRuntimeException;
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+/**
+ * Base RenderScript test class. This class provides a message handler and a
+ * convenient way to wait for compute scripts to complete their execution.
+ */
+class RSBase extends AndroidTestCase {
+
+    Context mCtx;
+    Resources mRes;
+
+    private int result;
+    private boolean msgHandled;
+
+    private static final int RS_MSG_TEST_PASSED = 100;
+    private static final int RS_MSG_TEST_FAILED = 101;
+
+    RSMessageHandler mRsMessage = new RSMessageHandler() {
+        public void run() {
+            if (result == 0) {
+                switch (mID) {
+                    case RS_MSG_TEST_PASSED:
+                    case RS_MSG_TEST_FAILED:
+                        result = mID;
+                        break;
+                    default:
+                        fail("Got unexpected RS message");
+                        return;
+                }
+            }
+            msgHandled = true;
+        }
+    };
+
+    protected void waitForMessage() {
+        while (!msgHandled) {
+            Thread.yield();
+        }
+    }
+
+    protected boolean FoundError = false;
+    protected RSErrorHandler mRsError = new RSErrorHandler() {
+        public void run() {
+            FoundError = true;
+            Log.e("RenderscriptCTS", mErrorMessage);
+            throw new RSRuntimeException("Received error " + mErrorNum +
+                                         " message " + mErrorMessage);
+        }
+    };
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        result = 0;
+        msgHandled = false;
+        mCtx = getContext();
+        mRes = mCtx.getResources();
+    }
+
+    /**
+     * Verify that we didn't fail on the control or script side of things.
+     */
+    protected void checkForErrors() {
+        assertFalse(FoundError);
+        assertTrue(result != RS_MSG_TEST_FAILED);
+    }
+}
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/RSBaseGraphics.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/RSBaseGraphics.java
similarity index 96%
rename from tests/tests/renderscript/src/android/renderscript/cts/RSBaseGraphics.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/RSBaseGraphics.java
index 986a50d..65ba926 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/RSBaseGraphics.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/RSBaseGraphics.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import android.renderscript.RenderScriptGL;
 import android.renderscript.RenderScriptGL.SurfaceConfig;
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/RSSurfaceViewTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/RSSurfaceViewTest.java
similarity index 97%
rename from tests/tests/renderscript/src/android/renderscript/cts/RSSurfaceViewTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/RSSurfaceViewTest.java
index 9cf8f65..4d46d8d 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/RSSurfaceViewTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/RSSurfaceViewTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import android.renderscript.RSSurfaceView;
 import android.renderscript.RenderScriptGL;
diff --git a/tests/src/android/renderscript/cts/RenderscriptGLStubActivity.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/RenderscriptGLStubActivity.java
similarity index 98%
rename from tests/src/android/renderscript/cts/RenderscriptGLStubActivity.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/RenderscriptGLStubActivity.java
index d6d05ac..bddde03 100644
--- a/tests/src/android/renderscript/cts/RenderscriptGLStubActivity.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/RenderscriptGLStubActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 
 import android.app.Activity;
 import android.os.Bundle;
@@ -112,7 +112,7 @@
         setContentView(mView);
         oldView.forceDestroy();
     }
-    
+
     public void destroyAll() {
         if (mView != null) {
             mView.forceDestroy();
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/SurfaceConfigTest.java b/tests/tests/rsg/src/android/renderscriptgraphics/cts/SurfaceConfigTest.java
similarity index 98%
rename from tests/tests/renderscript/src/android/renderscript/cts/SurfaceConfigTest.java
rename to tests/tests/rsg/src/android/renderscriptgraphics/cts/SurfaceConfigTest.java
index 94d784e..a402e8a 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/SurfaceConfigTest.java
+++ b/tests/tests/rsg/src/android/renderscriptgraphics/cts/SurfaceConfigTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.renderscript.cts;
+package android.renderscriptgraphics.cts;
 import android.test.AndroidTestCase;
 
 import android.renderscript.RSIllegalArgumentException;
