Merge "Test bounds on rsForEach calls."
This commit is contained in:
committed by
Android (Google) Code Review
commit
fba73030d6
@@ -84,6 +84,7 @@ public class RSTestCore {
|
||||
unitTests.add(new UT_alloc(this, mRes, mCtx));
|
||||
unitTests.add(new UT_refcount(this, mRes, mCtx));
|
||||
unitTests.add(new UT_foreach(this, mRes, mCtx));
|
||||
unitTests.add(new UT_foreach_bounds(this, mRes, mCtx));
|
||||
unitTests.add(new UT_noroot(this, mRes, mCtx));
|
||||
unitTests.add(new UT_atomic(this, mRes, mCtx));
|
||||
unitTests.add(new UT_struct(this, mRes, mCtx));
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* 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.*;
|
||||
|
||||
public class UT_foreach_bounds extends UnitTest {
|
||||
private Resources mRes;
|
||||
private Allocation A;
|
||||
|
||||
protected UT_foreach_bounds(RSTestCore rstc, Resources res, Context ctx) {
|
||||
super(rstc, "ForEach (bounds)", ctx);
|
||||
mRes = res;
|
||||
}
|
||||
|
||||
private void initializeGlobals(RenderScript RS, ScriptC_foreach_bounds s) {
|
||||
Type.Builder typeBuilder = new Type.Builder(RS, Element.I32(RS));
|
||||
int X = 5;
|
||||
int Y = 7;
|
||||
s.set_dimX(X);
|
||||
s.set_dimY(Y);
|
||||
typeBuilder.setX(X).setY(Y);
|
||||
A = Allocation.createTyped(RS, typeBuilder.create());
|
||||
s.bind_a(A);
|
||||
s.set_s(s);
|
||||
s.set_ain(A);
|
||||
s.set_aout(A);
|
||||
s.set_xStart(2);
|
||||
s.set_xEnd(5);
|
||||
s.set_yStart(3);
|
||||
s.set_yEnd(6);
|
||||
s.forEach_zero(A);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
RenderScript pRS = RenderScript.create(mCtx);
|
||||
ScriptC_foreach_bounds s = new ScriptC_foreach_bounds(pRS);
|
||||
pRS.setMessageHandler(mRsMessage);
|
||||
initializeGlobals(pRS, s);
|
||||
s.invoke_foreach_bounds_test();
|
||||
pRS.finish();
|
||||
waitForMessage();
|
||||
pRS.destroy();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
#include "shared.rsh"
|
||||
|
||||
int *a;
|
||||
int dimX;
|
||||
int dimY;
|
||||
int xStart = 0;
|
||||
int xEnd = 0;
|
||||
int yStart = 0;
|
||||
int yEnd = 0;
|
||||
|
||||
rs_script s;
|
||||
rs_allocation ain;
|
||||
rs_allocation aout;
|
||||
|
||||
void root(int *out, uint32_t x, uint32_t y) {
|
||||
*out = x + y * dimX;
|
||||
}
|
||||
|
||||
int __attribute__((kernel)) zero() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool test_root_output() {
|
||||
bool failed = false;
|
||||
int i, j;
|
||||
|
||||
for (j = 0; j < dimY; j++) {
|
||||
for (i = 0; i < dimX; i++) {
|
||||
rsDebug("i: ", i);
|
||||
rsDebug("j: ", j);
|
||||
rsDebug("a[j][i]: ", a[i + j * dimX]);
|
||||
if (i < xStart || i >= xEnd || j < yStart || j >= yEnd) {
|
||||
_RS_ASSERT(a[i + j * dimX] == 0);
|
||||
} else {
|
||||
_RS_ASSERT(a[i + j * dimX] == (i + j * dimX));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (failed) {
|
||||
rsDebug("test_root_output FAILED", 0);
|
||||
}
|
||||
else {
|
||||
rsDebug("test_root_output PASSED", 0);
|
||||
}
|
||||
|
||||
return failed;
|
||||
}
|
||||
|
||||
void foreach_bounds_test() {
|
||||
static bool failed = false;
|
||||
|
||||
rs_script_call_t rssc = {0};
|
||||
rssc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
|
||||
rssc.xStart = xStart;
|
||||
rssc.xEnd = xEnd;
|
||||
rssc.yStart = yStart;
|
||||
rssc.yEnd = yEnd;
|
||||
|
||||
rsForEach(s, ain, aout, NULL, 0, &rssc);
|
||||
|
||||
failed |= test_root_output();
|
||||
|
||||
if (failed) {
|
||||
rsSendToClientBlocking(RS_MSG_TEST_FAILED);
|
||||
}
|
||||
else {
|
||||
rsSendToClientBlocking(RS_MSG_TEST_PASSED);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user