diff options
author | Stephen Hines <srhines@google.com> | 2012-09-22 21:35:40 -0700 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2012-09-22 21:39:21 -0700 |
commit | c4358c796022264bef07385b9573aac1241f2ac7 (patch) | |
tree | 6dc3582f86dff592405258c8ecebb7f083a031e0 /tests | |
parent | 059aedf808c8b9b3da1457eef52f3d477878d50b (diff) | |
download | frameworks_base-c4358c796022264bef07385b9573aac1241f2ac7.zip frameworks_base-c4358c796022264bef07385b9573aac1241f2ac7.tar.gz frameworks_base-c4358c796022264bef07385b9573aac1241f2ac7.tar.bz2 |
Verify pass-by-value kernels with structs.
Bug: 7166741
Change-Id: I8b5fab1cca6bf4dcafc646fd1d6e40a718f1ffaf
Diffstat (limited to 'tests')
3 files changed, 128 insertions, 0 deletions
diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java index c585065..2a06491 100644 --- a/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java +++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/RSTestCore.java @@ -71,6 +71,7 @@ public class RSTestCore { unitTests.add(new UT_array_init(this, mRes, mCtx)); unitTests.add(new UT_array_alloc(this, mRes, mCtx)); unitTests.add(new UT_kernel(this, mRes, mCtx)); + unitTests.add(new UT_kernel_struct(this, mRes, mCtx)); unitTests.add(new UT_clamp(this, mRes, mCtx)); unitTests.add(new UT_clamp_relaxed(this, mRes, mCtx)); unitTests.add(new UT_convert(this, mRes, mCtx)); diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_kernel_struct.java b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_kernel_struct.java new file mode 100644 index 0000000..8e22810 --- /dev/null +++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/UT_kernel_struct.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 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 com.android.rs.test; + +import android.content.Context; +import android.content.res.Resources; +import android.renderscript.*; +import android.util.Log; + +public class UT_kernel_struct extends UnitTest { + private Resources mRes; + private Allocation A; + private Allocation B; + + protected UT_kernel_struct(RSTestCore rstc, Resources res, Context ctx) { + super(rstc, "Kernels (struct pass-by-value)", ctx); + mRes = res; + } + + private void initializeGlobals(RenderScript RS, ScriptC_kernel_struct s) { + int X = 5; + s.set_dimX(X); + ScriptField_simpleStruct t; + t = new ScriptField_simpleStruct(RS, X); + s.bind_ain(t); + A = t.getAllocation(); + t = new ScriptField_simpleStruct(RS, X); + s.bind_aout(t); + B = t.getAllocation(); + + return; + } + + public void run() { + RenderScript pRS = RenderScript.create(mCtx); + ScriptC_kernel_struct s = new ScriptC_kernel_struct(pRS); + pRS.setMessageHandler(mRsMessage); + initializeGlobals(pRS, s); + s.forEach_init_vars(A); + s.forEach_root(A, B); + s.invoke_verify_root(); + s.invoke_kernel_struct_test(); + pRS.finish(); + waitForMessage(); + pRS.destroy(); + } +} diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/kernel_struct.rs b/tests/RenderScriptTests/tests/src/com/android/rs/test/kernel_struct.rs new file mode 100644 index 0000000..62c30ae --- /dev/null +++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/kernel_struct.rs @@ -0,0 +1,66 @@ +#include "shared.rsh" + +struct simpleStruct { + int i1; + char ignored1; + float f1; + int i2; + char ignored2; + float f2; +}; + +struct simpleStruct *ain; +struct simpleStruct *aout; +int dimX; +static bool failed = false; + +void init_vars(struct simpleStruct *out, uint32_t x) { + out->i1 = 0; + out->f1 = 0.f; + out->i2 = 1; + out->f2 = 1.0f; +} + +struct simpleStruct __attribute__((kernel)) + root(struct simpleStruct in, uint32_t x) { + struct simpleStruct s; + s.i1 = in.i1 + x; + s.f1 = in.f1 + x; + s.i2 = in.i2 + x; + s.f2 = in.f2 + x; + return s; +} + +static bool test_root_output() { + bool failed = false; + int i; + + for (i = 0; i < dimX; i++) { + _RS_ASSERT(aout[i].i1 == (i + ain[i].i1)); + _RS_ASSERT(aout[i].f1 == (i + ain[i].f1)); + _RS_ASSERT(aout[i].i2 == (i + ain[i].i2)); + _RS_ASSERT(aout[i].f2 == (i + ain[i].f2)); + } + + if (failed) { + rsDebug("test_root_output FAILED", 0); + } + else { + rsDebug("test_root_output PASSED", 0); + } + + return failed; +} + +void verify_root() { + failed |= test_root_output(); +} + +void kernel_struct_test() { + if (failed) { + rsSendToClientBlocking(RS_MSG_TEST_FAILED); + } + else { + rsSendToClientBlocking(RS_MSG_TEST_PASSED); + } +} |