1648a1c137663ef7207684d0d7009dd5518942111Stephen Hines/* 2648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Copyright (C) 2013 The Android Open Source Project 3648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * 4648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 5648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * you may not use this file except in compliance with the License. 6648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * You may obtain a copy of the License at 7648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * 8648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 9648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * 10648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Unless required by applicable law or agreed to in writing, software 11648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 12648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * See the License for the specific language governing permissions and 14648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * limitations under the License. 15648a1c137663ef7207684d0d7009dd5518942111Stephen Hines */ 16648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 17648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespackage com.android.rs.test_compatlegacy; 18648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 19648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.content.Context; 20648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.content.res.Resources; 21648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.support.v8.renderscript.*; 22648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.util.Log; 23648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 24648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespublic class UT_copy_test extends UnitTest { 25648a1c137663ef7207684d0d7009dd5518942111Stephen Hines private Resources mRes; 26648a1c137663ef7207684d0d7009dd5518942111Stephen Hines boolean pass = true; 27648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 28648a1c137663ef7207684d0d7009dd5518942111Stephen Hines protected UT_copy_test(RSTestCore rstc, Resources res, Context ctx) { 29648a1c137663ef7207684d0d7009dd5518942111Stephen Hines super(rstc, "Copy", ctx); 30648a1c137663ef7207684d0d7009dd5518942111Stephen Hines mRes = res; 31648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 32648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 33648a1c137663ef7207684d0d7009dd5518942111Stephen Hines void testFloat2(RenderScript rs, ScriptC_copy_test s) { 34648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Allocation a1 = Allocation.createSized(rs, Element.F32_2(rs), 1024); 35648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Allocation a2 = Allocation.createSized(rs, Element.F32_2(rs), 1024); 36648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 37648a1c137663ef7207684d0d7009dd5518942111Stephen Hines float[] f1 = new float[1024 * 2]; 38648a1c137663ef7207684d0d7009dd5518942111Stephen Hines float[] f2 = new float[1024 * 2]; 39648a1c137663ef7207684d0d7009dd5518942111Stephen Hines for (int ct=0; ct < f1.length; ct++) { 40648a1c137663ef7207684d0d7009dd5518942111Stephen Hines f1[ct] = (float)ct; 41648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 42648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a1.copyFrom(f1); 43648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 44648a1c137663ef7207684d0d7009dd5518942111Stephen Hines s.forEach_copyFloat2(a1, a2); 45648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 46648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a2.copyTo(f2); 47648a1c137663ef7207684d0d7009dd5518942111Stephen Hines for (int ct=0; ct < f1.length; ct++) { 48648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (f1[ct] != f2[ct]) { 49648a1c137663ef7207684d0d7009dd5518942111Stephen Hines failTest(); 50648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]); 51648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 52648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 53648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a1.destroy(); 54648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a2.destroy(); 55648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 56648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 57648a1c137663ef7207684d0d7009dd5518942111Stephen Hines void testFloat3(RenderScript rs, ScriptC_copy_test s) { 58648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Allocation a1 = Allocation.createSized(rs, Element.F32_3(rs), 1024); 59648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Allocation a2 = Allocation.createSized(rs, Element.F32_3(rs), 1024); 60648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 61648a1c137663ef7207684d0d7009dd5518942111Stephen Hines float[] f1 = new float[1024 * 4]; 62648a1c137663ef7207684d0d7009dd5518942111Stephen Hines float[] f2 = new float[1024 * 4]; 63648a1c137663ef7207684d0d7009dd5518942111Stephen Hines for (int ct=0; ct < f1.length; ct++) { 64648a1c137663ef7207684d0d7009dd5518942111Stephen Hines f1[ct] = (float)ct; 65648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 66648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a1.copyFrom(f1); 67648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 68648a1c137663ef7207684d0d7009dd5518942111Stephen Hines s.forEach_copyFloat3(a1, a2); 69648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 70648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a2.copyTo(f2); 71648a1c137663ef7207684d0d7009dd5518942111Stephen Hines for (int ct=0; ct < f1.length; ct++) { 72648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if ((f1[ct] != f2[ct]) && ((ct&3) != 3)) { 73648a1c137663ef7207684d0d7009dd5518942111Stephen Hines failTest(); 74648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]); 75648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 76648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 77648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a1.destroy(); 78648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a2.destroy(); 79648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 80648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 81648a1c137663ef7207684d0d7009dd5518942111Stephen Hines void testFloat4(RenderScript rs, ScriptC_copy_test s) { 82648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Allocation a1 = Allocation.createSized(rs, Element.F32_4(rs), 1024); 83648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Allocation a2 = Allocation.createSized(rs, Element.F32_4(rs), 1024); 84648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 85648a1c137663ef7207684d0d7009dd5518942111Stephen Hines float[] f1 = new float[1024 * 4]; 86648a1c137663ef7207684d0d7009dd5518942111Stephen Hines float[] f2 = new float[1024 * 4]; 87648a1c137663ef7207684d0d7009dd5518942111Stephen Hines for (int ct=0; ct < f1.length; ct++) { 88648a1c137663ef7207684d0d7009dd5518942111Stephen Hines f1[ct] = (float)ct; 89648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 90648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a1.copyFrom(f1); 91648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 92648a1c137663ef7207684d0d7009dd5518942111Stephen Hines s.forEach_copyFloat4(a1, a2); 93648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 94648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a2.copyTo(f2); 95648a1c137663ef7207684d0d7009dd5518942111Stephen Hines for (int ct=0; ct < f1.length; ct++) { 96648a1c137663ef7207684d0d7009dd5518942111Stephen Hines if (f1[ct] != f2[ct]) { 97648a1c137663ef7207684d0d7009dd5518942111Stephen Hines failTest(); 98648a1c137663ef7207684d0d7009dd5518942111Stephen Hines Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]); 99648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 100648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 101648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a1.destroy(); 102648a1c137663ef7207684d0d7009dd5518942111Stephen Hines a2.destroy(); 103648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 104648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 105648a1c137663ef7207684d0d7009dd5518942111Stephen Hines public void run() { 106648a1c137663ef7207684d0d7009dd5518942111Stephen Hines RenderScript pRS = RenderScript.create(mCtx); 107648a1c137663ef7207684d0d7009dd5518942111Stephen Hines ScriptC_copy_test s = new ScriptC_copy_test(pRS); 108648a1c137663ef7207684d0d7009dd5518942111Stephen Hines pRS.setMessageHandler(mRsMessage); 109648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 110648a1c137663ef7207684d0d7009dd5518942111Stephen Hines testFloat2(pRS, s); 111648a1c137663ef7207684d0d7009dd5518942111Stephen Hines testFloat3(pRS, s); 112648a1c137663ef7207684d0d7009dd5518942111Stephen Hines testFloat4(pRS, s); 113648a1c137663ef7207684d0d7009dd5518942111Stephen Hines s.invoke_sendResult(true); 114648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 115648a1c137663ef7207684d0d7009dd5518942111Stephen Hines pRS.finish(); 116648a1c137663ef7207684d0d7009dd5518942111Stephen Hines waitForMessage(); 117648a1c137663ef7207684d0d7009dd5518942111Stephen Hines pRS.destroy(); 118648a1c137663ef7207684d0d7009dd5518942111Stephen Hines } 119648a1c137663ef7207684d0d7009dd5518942111Stephen Hines} 120648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 121