Which clearly did the trick...
forEach_root - calls the script "for each" float in the array. So I
shouldn't try to loop around the input array copying data - that's handled
by RenderScript calling root multiple times itself (per CPU/core) - duh!
>From memory - changed to:
void root(const float *v_in, float *v_out) {
const float *data = v_in;
float *outData = v_out;
*outData = *data;
}
and set the outputFloatPointer to be of Allocation.USAGE_SCRIPT so I could
read the data afterwards (though not sure why I had to do this at the
moment - my own memory is suffering from sig-11 ;) ).
On Saturday, 18 August 2012 13:29:01 UTC+1, barclakj wrote:
>
> I'm clearly missing something here but have been going round in circles
> all day so can someone please can you point out where my blind spot is...
>
> I have a very simple RenderScript (.rs) file which tries to copy data from
> one float pointer to another (please note that this is a contrived case for
> test purposes):
>
> void root(const float *v_in, float *v_out) {
> const float *data = v_in;
> float *outData = v_out;
>
> for(int i=0;i<size;i++) {
> *outData = *data; // [X] DOES NOT WORK!
> data ++;
> outData ++;
> }
> }
>
>
> In the Java code I create the script and allocations then call the script
> as:
>
> RenderScript rs = RenderScript.create(ctx);
> ScriptC_protomask protomaskScript = new ScriptC_protomask(rs,
> getResources(), R.raw.protomask);
>
> Allocation inFloatPointer = Allocation.createSized(rs, Element.F32(rs),
> data.length, Allocation.USAGE_IO_INPUT);
> Allocation outFloatPointer = Allocation.createSized(rs, Element.F32(rs),
> data.length, Allocation.USAGE_IO_OUTPUT);
>
> inFloatPointer.copyFrom(data); // copies from an array of floats (random
> numbers in this test case).
> protomaskScript.set_size(data.length);
>
> protomaskScript.forEach_root(inFloatPointer, outFloatPointer);
>
>
> Now my expectation is that this will just copy the data from one
> allocation to another (pointless, but again, this is just a test case).
> When I comment out the line in the .rs file ([x] above) the script runs but
> clearly does nothing. When I leave it in, the code crashes with sig 11
> suggesting I'm attempting to write to some memory I'm not allowed to. But
> why not? I've created and sized both allocations - why can I not just write
> to the output float pointer? :(
>
> Off to get some fresh air and kick a football round the garden.. Thanks.
>
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en