Alguém pode usar o rsForEach do RenderScript em um kernel não-root?

Alguém pode invocar um kernel RenderScript não-root usandorsForEach? Existem muitos exemplos de usorsForEach para chamar o kernel raiz de dentro de uma função RenderScript invokable:

Documentação para Androids Renderscript advanced rsForEach callComo escrever uma multiplicação de convolução no Android Renderscript?Passando Array para rsForEach no Renderscript Compute

Estes ligam o próprio script a uma variável no contexto RenderScript, depois invocam o kernel raiz a partir do RenderScript. Por exemplo, noActivity classe:

...
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();
...

E emgradient.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, ...

Mas se eu tiver outro kernelgray poderia invocá-lo depoisroot, dentrogradient?

// 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);
}

Masa documentação pararsForEach parece indicar que não suporta nada como isto. Talvez isso possa ser feito colocando algo em umrs_script_call_t, maso doc é bastante conciso sobre esse tipo: (Retirado 20 de setembro de 2013)

typedef struct rs_script_call rs_script_call_t**

Estrutura para fornecer informações extras para uma chamada rsForEach. Usado principalmente para restringir a chamada a um subconjunto de células na alocação.

Esta questão é principalmente por curiosidade, espero que o método preferido é chamá-los de 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);
...

Estes parecem estar sincronizados. Se alguém defineroot egray do seguinte modo:

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

então chamandoforEach_root entãoforEach_gray faz com que "root, {0,0}" seja registrado NxM vezes antes de iniciar o registro "gray, {1,1}" - Eu não encontrei documentação que garanta isso, no entanto. Alguém sabe onde é isso?

questionAnswers(1)

yourAnswerToTheQuestion