Можно ли использовать rsForEach в RenderScript для ядра без полномочий root?

Можно ли вызвать ядро RenderScript без полномочий root, используяrsForEach? Есть много примеров использованияrsForEach для вызова корневого ядра из вызываемой функции RenderScript:

Документация для Android Renderscript расширенный вызов rsForEachКак написать сверточное умножение в Android Renderscript?Передача массива в rsForEach в Renderscript Compute

Они связывают сам скрипт с переменной в контексте RenderScript, а затем вызывают корневое ядро из RenderScript. Например, вActivity класс:

...
mScript = new ScriptC_gradient(mRS);
// bind Allocations and mScript to variables in the RenderScript context:
mScript.set_gIn(mImageAllocation);
mScript.set_gOut(mGradientAllocation);
mScript.set_gScript(mScript);
// invoke gradient function:
mScript.invoke_gradient();
...

И вgradient.rs:

#pragma version(1)
#pragma rs java_package_name(com.example.android.rs.hellocompute)

rs_allocation gOut;
rs_allocation gIn;
rs_script gScript;

void gradient() {
  rsForEach(gScript, gIn, gOut);
}
void root(const uchar4 *v_in, uchar4 *v_out, ...

Но если у меня есть другое ядроgray Могу ли я вызвать его послеrootвнутриgradient?

// I thought it would look like this:
void gradient() {
  rsForEach(gScript, gIn, gOut);
  rsForEach(gScript, gIn, gOut, NULL, NULL, gExportForEachIdx_gray);
}
// Or:
void gradient() {
  rsForEach(gScript, gIn, gOut);
  rsSetMainKernel(&gScript, "gray");
  rsForEach(gScript, gIn, gOut);
}

Нодокументация дляrsForEach кажется, указывает на то, что он не поддерживает ничего подобного. Возможно, это можно сделать, установив что-то вrs_script_call_t, нодокумент довольно кратко об этом типе: (Получено 20 сентября 2013 г.)

typedef struct rs_script_call rs_script_call_t**

Структура для предоставления дополнительной информации для вызова rsForEach. В основном используется для ограничения вызова подмножеством ячеек в распределении.

Этот вопрос в основном из любопытства - я ожидаю, что предпочтительным методом является вызов их из Java:

...
mScript = new ScriptC_gradient(mRS);
// bind Allocations and mScript to variables in the RenderScript context:
mScript.forEach_root(mImageAllocation, mGradientAllocation);
mScript.forEach_gray(mGradientAllocation, mGrayGradientAllocation);
...

Кажется, они синхронизированы. Если кто-то определяетroot а такжеgray следующее:

void root(...) { rsDebug("root", 0,0);  }
void gray(...) { rsDebug("gray", 1,1);  }

потом звонюforEach_root тогдаforEach_gray заставляет «root, {0,0}» регистрироваться NxM раз, прежде чем он начнет регистрировать «grey, {1,1}» - хотя я не нашел документации, которая бы это гарантировала. Кто-нибудь знает, где это?

Ответы на вопрос(1)

Ваш ответ на вопрос