diff options
author | Stephen Hines <srhines@google.com> | 2012-11-30 17:52:05 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-11-30 17:52:05 -0800 |
commit | f558dab60d6131e22413d5c15d0f9b85bff8fb36 (patch) | |
tree | d86513eef810a97ab171c3bb3b756dd1520d62af /tests | |
parent | abff00fecbe4efcbab5da09ccaf51e31e4e11b97 (diff) | |
parent | 43514cde7e9b4869ffba6ba759d1e31f22d936f7 (diff) | |
download | rs-f558dab60d6131e22413d5c15d0f9b85bff8fb36.tar.gz |
Merge "Add more FieldPacker.add() routines."
Diffstat (limited to 'tests')
-rw-r--r-- | tests/cppbasic/compute.cpp | 55 | ||||
-rw-r--r-- | tests/cppbasic/mono.rs | 46 |
2 files changed, 101 insertions, 0 deletions
diff --git a/tests/cppbasic/compute.cpp b/tests/cppbasic/compute.cpp index 471b10aa..d1647c41 100644 --- a/tests/cppbasic/compute.cpp +++ b/tests/cppbasic/compute.cpp @@ -35,15 +35,62 @@ int main(int argc, char** argv) sp<ScriptC_mono> sc = new ScriptC_mono(rs, NULL, 0); printf("new script\n"); + // We read back the status from the script-side via a "failed" allocation. + sp<const Element> failed_e = Element::BOOLEAN(rs); + Type::Builder failed_tb(rs, failed_e); + failed_tb.setX(1); + sp<const Type> failed_t = failed_tb.create(); + sp<Allocation> failed_alloc = Allocation::createTyped(rs, failed_t); + bool failed = false; + failed_alloc->copy1DRangeFrom(0, failed_t->getCount(), &failed); + sc->bind_failed(failed_alloc); + uint32_t *buf = new uint32_t[t->getCount()]; for (uint32_t ct=0; ct < t->getCount(); ct++) { buf[ct] = ct | (ct << 16); } ain->copy1DRangeFrom(0, t->getCount(), buf); + delete [] buf; sc->forEach_root(ain, aout); + + sc->invoke_foo(99, 3.1f); + sc->set_g_f(39.9f); + sc->set_g_i(-14); + sc->invoke_foo(99, 3.1f); printf("for each done\n"); + sc->invoke_bar(47, -3, 'c', -7, 14, -8); + + // Verify a simple kernel. + { + sp<const Element> e = Element::I32(rs); + Type::Builder tb(rs, e); + tb.setX(5); + tb.setY(5); + sp<const Type> t = tb.create(); + sp<Allocation> kern1_in = Allocation::createTyped(rs, t); + sp<Allocation> kern1_out = Allocation::createTyped(rs, t); + + int *buf = new int[t->getCount()]; + for (uint32_t ct=0; ct < t->getCount(); ct++) { + buf[ct] = 0; + } + kern1_in->copy1DFrom(buf); + delete [] buf; + + sc->forEach_kern1(kern1_in, kern1_out); + sc->forEach_verify_kern1(kern1_out); + + rs->finish(); + failed_alloc->copy1DTo(&failed); + + e.clear(); + t.clear(); + kern1_in.clear(); + kern1_out.clear(); + } + printf("Deleting stuff\n"); sc.clear(); t.clear(); @@ -53,4 +100,12 @@ int main(int argc, char** argv) aout.clear(); // delete rs; printf("Delete OK\n"); + + if (failed) { + printf("TEST FAILED!\n"); + } else { + printf("TEST PASSED!\n"); + } + + return failed; } diff --git a/tests/cppbasic/mono.rs b/tests/cppbasic/mono.rs index c420cac5..d49d0f7d 100644 --- a/tests/cppbasic/mono.rs +++ b/tests/cppbasic/mono.rs @@ -18,8 +18,30 @@ #pragma rs java_package_name(com.android.rs.image) #pragma rs_fp_relaxed +int g_i = 4; + +float g_f = 5.9; + const static float3 gMonoMult = {0.299f, 0.587f, 0.114f}; +bool *failed; + +#define _RS_ASSERT(b) \ +do { \ + if (!(b)) { \ + *failed = true; \ + rsDebug(#b " FAILED", 0); \ + } \ +\ +} while (0) + +struct myStruct { + int i; + int j; + float f; + char c[3]; +}; + void root(const uchar4 *v_in, uchar4 *v_out) { float4 f4 = rsUnpackColor8888(*v_in); @@ -27,4 +49,28 @@ void root(const uchar4 *v_in, uchar4 *v_out) { *v_out = rsPackColorTo8888(mono); } +void foo(int i, float f) { + rsDebug("g_i", g_i); + rsDebug("g_f", g_f); + rsDebug("i", i); + rsDebug("f", f); +} + +void bar(int i, int j, char k, int l, int m, int n) { + _RS_ASSERT(i == 47); + _RS_ASSERT(j == -3); + _RS_ASSERT(k == 'c'); + _RS_ASSERT(l == -7); + _RS_ASSERT(m == 14); + _RS_ASSERT(n == -8); +} + +int __attribute__((kernel)) kern1(int i, uint32_t x, uint32_t y) { + return i + 10 * x + 100 *y; +} + +void __attribute__((kernel)) verify_kern1(int i, uint32_t x, uint32_t y) { + _RS_ASSERT(i == (10 * x + 100 * y)); + rsDebug("i ", i); +} |