rs_core.rsh revision f8e195ee50ac7b01fc0130af6634afe475d2deae
1044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams/* 2f8e195ee50ac7b01fc0130af6634afe475d2deaeAlex Sakhartchouk * Copyright (C) 2011-2012 The Android Open Source Project 31d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * 4044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * you may not use this file except in compliance with the License. 6044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * You may obtain a copy of the License at 71d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * 8044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 10044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Unless required by applicable law or agreed to in writing, software 11044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * See the License for the specific language governing permissions and 14044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * limitations under the License. 1509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 16275b1e98bb949643d35546f10f8b1af009349526Jason Sams 17044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams/** @file rs_core.rsh 18044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * \brief todo-jsams 1909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 20044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * todo-jsams 2109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 2209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 23275b1e98bb949643d35546f10f8b1af009349526Jason Sams 24044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#ifndef __RS_CORE_RSH__ 25044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#define __RS_CORE_RSH__ 26275b1e98bb949643d35546f10f8b1af009349526Jason Sams 27044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#define _RS_RUNTIME extern 28275b1e98bb949643d35546f10f8b1af009349526Jason Sams 29044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_types.rsh" 30044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_allocation.rsh" 31044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_atomic.rsh" 32044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_cl.rsh" 33044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_debug.rsh" 3414607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk#include "rs_element.rsh" 35044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_math.rsh" 36044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_matrix.rsh" 37044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_object.rsh" 38044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_quaternion.rsh" 3914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk#include "rs_sampler.rsh" 40044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_time.rsh" 412a63bf6c293d89c8e3725cfb7ee2add3dd3f0246Jason Sams 4209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 43044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Send a message back to the client. Will not block and returns true 44044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * if the message was sendable and false if the fifo was full. 45044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * A message ID is required. Data payload is optional. 4609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 47044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern bool __attribute__((overloadable)) 48044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsSendToClient(int cmdID); 491d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 501d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 511d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 52044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern bool __attribute__((overloadable)) 53044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsSendToClient(int cmdID, const void *data, uint len); 541d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 55044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Send a message back to the client, blocking until the message is queued. 56044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * A message ID is required. Data payload is optional. 571d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 58044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 59044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsSendToClientBlocking(int cmdID); 601d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 611d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 621d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 63044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 64044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsSendToClientBlocking(int cmdID, const void *data, uint len); 6509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 6609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 6709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 68044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Launch order hint for rsForEach calls. This provides a hint to the system to 69044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * determine in which order the root function of the target is called with each 70044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * cell of the allocation. 7109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 72044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * This is a hint and implementations may not obey the order. 731d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 74044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsenum rs_for_each_strategy { 75044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_SERIAL, 76044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_DONT_CARE, 77044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_DST_LINEAR, 78044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_TILE_SMALL, 79044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_TILE_MEDIUM, 80044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_TILE_LARGE 81044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams}; 827fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 837fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 841d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 85044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Structure to provide extra information to a rsForEach call. Primarly used to 86044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * restrict the call to a subset of cells in the allocation. 871d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 88044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samstypedef struct rs_script_call { 89044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams enum rs_for_each_strategy strategy; 90044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t xStart; 91044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t xEnd; 92044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t yStart; 93044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t yEnd; 94044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t zStart; 95044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t zEnd; 96044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t arrayStart; 97044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t arrayEnd; 98044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams} rs_script_call_t; 997fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 1001d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 101044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Make a script to script call to launch work. One of the input or output is 102044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * required to be a valid object. The input and output must be of the same 103044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * dimensions. 104044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * API 10-13 1051d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * 106044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param script The target script to call 107044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param input The allocation to source data from 108044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param output the allocation to write date into 109044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param usrData The user definied params to pass to the root script. May be 110044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * NULL. 111044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param sc Extra control infomation used to select a sub-region of the 112044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * allocation to be processed or suggest a walking strategy. May be 113044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * NULL. 1141d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * 115044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * */ 116044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#if !defined(RS_VERSION) || (RS_VERSION < 14) 117693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 118044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, 119044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rs_allocation output, const void * usrData, 120044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams const rs_script_call_t *sc); 1211d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 1221d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 1231d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 124693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 125044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, 126044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rs_allocation output, const void * usrData); 127044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#else 1287fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 1291d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 130044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Make a script to script call to launch work. One of the input or output is 131044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * required to be a valid object. The input and output must be of the same 132044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * dimensions. 133044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * API 14+ 134044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 135044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param script The target script to call 136044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param input The allocation to source data from 137044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param output the allocation to write date into 138044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param usrData The user definied params to pass to the root script. May be 139044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * NULL. 140044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param usrDataLen The size of the userData structure. This will be used to 141044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * perform a shallow copy of the data if necessary. 142044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param sc Extra control infomation used to select a sub-region of the 143044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * allocation to be processed or suggest a walking strategy. May be 144044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * NULL. 1451d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * 1461d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 1471d526a448325cd9678b12b7de9263a254ec8fdc8Jason Samsextern void __attribute__((overloadable)) 148044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, rs_allocation output, 149044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams const void * usrData, size_t usrDataLen, const rs_script_call_t *); 1501d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 1511d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 1521d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 1531d526a448325cd9678b12b7de9263a254ec8fdc8Jason Samsextern void __attribute__((overloadable)) 154044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, rs_allocation output, 155044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams const void * usrData, size_t usrDataLen); 1561d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 1571d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 1581d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 159693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 160044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, rs_allocation output); 161eb0dfedaf861049858a365d56d67cc85bfcad3c3Jason Sams#endif 1627fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 1631d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams 1647fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 1657a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao#undef _RS_RUNTIME 166275b1e98bb949643d35546f10f8b1af009349526Jason Sams 167275b1e98bb949643d35546f10f8b1af009349526Jason Sams#endif 168