如何在RenderScript的内核中获取索引

时间:2016-12-19 17:39:18

标签: java android renderscript

我是RenderScript的完美菜鸟,我刚开始玩,我设法并行处理一些算法,但我真的没有正确使用它。

这是java代码:

    Allocation input = Allocation.createSized(renderScript, Element.I32(renderScript), some_input_image.length); // where renderScript is an instance of RenderScript 
    input.copyFrom(some_input_image);


    Allocation output = Allocation.createSized(renderScript, Element.I32(renderScript), image.length);
    output.copyFrom(some_image);
    scriptC_algo.bind_output(output);

scriptC_algo.invoke_process(input,output);

RenderScript代码

uint32_t *input;
uint32_t *output;

void RS_KERNEL algo(uint32_t in, uint32_t out) {
  rsAtomicInc(&counter);
  // some code

}

void process(rs_allocation input, rs_allocation output) {
  rsForEach(algo, input, output);
}

我认为我需要在algo函数中获取与读取的inputoutput值相关的索引。但是,我无法使用counter,因为我注意到阅读inputoutput的索引不是增加的顺序。有人知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

你的内核应该是这样的:

#pragma rs_fp_relaxed
uint32_t RS_KERNEL algo(uint32_t in, uint32_t x) {
     // << x will be the location of 'in' and 'out' element
     return in;  // write input to output
}

另外,糟糕的想法是拥有输入/输出变量的全局/本地版本并避免使用bind api。使用全局rs_allocation对象和rsGetElement _ * / rsSetElementAt_ * apis。