rs_core.rsh revision 14607a6bd1e909a7944e39b7ec71dc0ba65de2cd
1044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams/* 2044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Copyright (C) 2011 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" 3614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk#include "rs_mesh.rsh" 37044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_matrix.rsh" 38044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_object.rsh" 3914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk#include "rs_program.rsh" 40044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_quaternion.rsh" 4114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk#include "rs_sampler.rsh" 42044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_time.rsh" 432a63bf6c293d89c8e3725cfb7ee2add3dd3f0246Jason Sams 447fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 457fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 4609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 47044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Send a message back to the client. Will not block and returns true 48044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * if the message was sendable and false if the fifo was full. 49044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * A message ID is required. Data payload is optional. 5009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 51044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern bool __attribute__((overloadable)) 52044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsSendToClient(int cmdID); 531d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 541d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 551d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 56044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern bool __attribute__((overloadable)) 57044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsSendToClient(int cmdID, const void *data, uint len); 581d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 59044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Send a message back to the client, blocking until the message is queued. 60044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * A message ID is required. Data payload is optional. 611d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 62044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 63044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsSendToClientBlocking(int cmdID); 641d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 651d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 661d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 67044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsextern void __attribute__((overloadable)) 68044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsSendToClientBlocking(int cmdID, const void *data, uint len); 6909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 7009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 7109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 72044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Launch order hint for rsForEach calls. This provides a hint to the system to 73044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * determine in which order the root function of the target is called with each 74044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * cell of the allocation. 7509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 76044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * This is a hint and implementations may not obey the order. 771d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 78044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samsenum rs_for_each_strategy { 79044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_SERIAL, 80044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_DONT_CARE, 81044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_DST_LINEAR, 82044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_TILE_SMALL, 83044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_TILE_MEDIUM, 84044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams RS_FOR_EACH_STRATEGY_TILE_LARGE 85044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams}; 867fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 877fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 881d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 89044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Structure to provide extra information to a rsForEach call. Primarly used to 90044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * restrict the call to a subset of cells in the allocation. 911d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 92044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Samstypedef struct rs_script_call { 93044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams enum rs_for_each_strategy strategy; 94044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t xStart; 95044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t xEnd; 96044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t yStart; 97044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t yEnd; 98044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t zStart; 99044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t zEnd; 100044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t arrayStart; 101044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams uint32_t arrayEnd; 102044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams} rs_script_call_t; 1037fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 1041d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 105044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Make a script to script call to launch work. One of the input or output is 106044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * required to be a valid object. The input and output must be of the same 107044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * dimensions. 108044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * API 10-13 1091d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * 110044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param script The target script to call 111044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param input The allocation to source data from 112044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param output the allocation to write date into 113044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param usrData The user definied params to pass to the root script. May be 114044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * NULL. 115044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param sc Extra control infomation used to select a sub-region of the 116044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * allocation to be processed or suggest a walking strategy. May be 117044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * NULL. 1181d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * 119044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * */ 120044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#if !defined(RS_VERSION) || (RS_VERSION < 14) 121693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 122044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, 123044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rs_allocation output, const void * usrData, 124044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams const rs_script_call_t *sc); 1251d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 1261d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 1271d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 128693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 129044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, 130044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rs_allocation output, const void * usrData); 131044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#else 1327fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 1331d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 134044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Make a script to script call to launch work. One of the input or output is 135044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * required to be a valid object. The input and output must be of the same 136044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * dimensions. 137044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * API 14+ 138044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * 139044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param script The target script to call 140044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param input The allocation to source data from 141044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param output the allocation to write date into 142044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param usrData The user definied params to pass to the root script. May be 143044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * NULL. 144044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param usrDataLen The size of the userData structure. This will be used to 145044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * perform a shallow copy of the data if necessary. 146044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param sc Extra control infomation used to select a sub-region of the 147044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * allocation to be processed or suggest a walking strategy. May be 148044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * NULL. 1491d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * 1501d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 1511d526a448325cd9678b12b7de9263a254ec8fdc8Jason Samsextern void __attribute__((overloadable)) 152044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, rs_allocation output, 153044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams const void * usrData, size_t usrDataLen, const rs_script_call_t *); 1541d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 1551d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 1561d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 1571d526a448325cd9678b12b7de9263a254ec8fdc8Jason Samsextern void __attribute__((overloadable)) 158044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, rs_allocation output, 159044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams const void * usrData, size_t usrDataLen); 1601d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams/** 1611d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams * \overload 1621d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams */ 163693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 164044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams rsForEach(rs_script script, rs_allocation input, rs_allocation output); 165eb0dfedaf861049858a365d56d67cc85bfcad3c3Jason Sams#endif 1667fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 1671d526a448325cd9678b12b7de9263a254ec8fdc8Jason Sams 1687fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 1697a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao#undef _RS_RUNTIME 170275b1e98bb949643d35546f10f8b1af009349526Jason Sams 171275b1e98bb949643d35546f10f8b1af009349526Jason Sams#endif 172