1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /** @file rs_core.rsh 18 * \brief todo-jsams 19 * 20 * todo-jsams 21 * 22 */ 23 24 #ifndef __RS_CORE_RSH__ 25 #define __RS_CORE_RSH__ 26 27 #define _RS_RUNTIME extern 28 29 #include "rs_types.rsh" 30 #include "rs_allocation.rsh" 31 #include "rs_atomic.rsh" 32 #include "rs_cl.rsh" 33 #include "rs_debug.rsh" 34 #include "rs_math.rsh" 35 #include "rs_matrix.rsh" 36 #include "rs_object.rsh" 37 #include "rs_quaternion.rsh" 38 #include "rs_time.rsh" 39 40 41 42 /** 43 * Send a message back to the client. Will not block and returns true 44 * if the message was sendable and false if the fifo was full. 45 * A message ID is required. Data payload is optional. 46 */ 47 extern bool __attribute__((overloadable)) 48 rsSendToClient(int cmdID); 49 /** 50 * \overload 51 */ 52 extern bool __attribute__((overloadable)) 53 rsSendToClient(int cmdID, const void *data, uint len); 54 /** 55 * Send a message back to the client, blocking until the message is queued. 56 * A message ID is required. Data payload is optional. 57 */ 58 extern void __attribute__((overloadable)) 59 rsSendToClientBlocking(int cmdID); 60 /** 61 * \overload 62 */ 63 extern void __attribute__((overloadable)) 64 rsSendToClientBlocking(int cmdID, const void *data, uint len); 65 66 67 /** 68 * Launch order hint for rsForEach calls. This provides a hint to the system to 69 * determine in which order the root function of the target is called with each 70 * cell of the allocation. 71 * 72 * This is a hint and implementations may not obey the order. 73 */ 74 enum rs_for_each_strategy { 75 RS_FOR_EACH_STRATEGY_SERIAL, 76 RS_FOR_EACH_STRATEGY_DONT_CARE, 77 RS_FOR_EACH_STRATEGY_DST_LINEAR, 78 RS_FOR_EACH_STRATEGY_TILE_SMALL, 79 RS_FOR_EACH_STRATEGY_TILE_MEDIUM, 80 RS_FOR_EACH_STRATEGY_TILE_LARGE 81 }; 82 83 84 /** 85 * Structure to provide extra information to a rsForEach call. Primarly used to 86 * restrict the call to a subset of cells in the allocation. 87 */ 88 typedef struct rs_script_call { 89 enum rs_for_each_strategy strategy; 90 uint32_t xStart; 91 uint32_t xEnd; 92 uint32_t yStart; 93 uint32_t yEnd; 94 uint32_t zStart; 95 uint32_t zEnd; 96 uint32_t arrayStart; 97 uint32_t arrayEnd; 98 } rs_script_call_t; 99 100 /** 101 * Make a script to script call to launch work. One of the input or output is 102 * required to be a valid object. The input and output must be of the same 103 * dimensions. 104 * API 10-13 105 * 106 * @param script The target script to call 107 * @param input The allocation to source data from 108 * @param output the allocation to write date into 109 * @param usrData The user definied params to pass to the root script. May be 110 * NULL. 111 * @param sc Extra control infomation used to select a sub-region of the 112 * allocation to be processed or suggest a walking strategy. May be 113 * NULL. 114 * 115 * */ 116 #if !defined(RS_VERSION) || (RS_VERSION < 14) 117 extern void __attribute__((overloadable)) 118 rsForEach(rs_script script, rs_allocation input, 119 rs_allocation output, const void * usrData, 120 const rs_script_call_t *sc); 121 /** 122 * \overload 123 */ 124 extern void __attribute__((overloadable)) 125 rsForEach(rs_script script, rs_allocation input, 126 rs_allocation output, const void * usrData); 127 #else 128 129 /** 130 * Make a script to script call to launch work. One of the input or output is 131 * required to be a valid object. The input and output must be of the same 132 * dimensions. 133 * API 14+ 134 * 135 * @param script The target script to call 136 * @param input The allocation to source data from 137 * @param output the allocation to write date into 138 * @param usrData The user definied params to pass to the root script. May be 139 * NULL. 140 * @param usrDataLen The size of the userData structure. This will be used to 141 * perform a shallow copy of the data if necessary. 142 * @param sc Extra control infomation used to select a sub-region of the 143 * allocation to be processed or suggest a walking strategy. May be 144 * NULL. 145 * 146 */ 147 extern void __attribute__((overloadable)) 148 rsForEach(rs_script script, rs_allocation input, rs_allocation output, 149 const void * usrData, size_t usrDataLen, const rs_script_call_t *); 150 /** 151 * \overload 152 */ 153 extern void __attribute__((overloadable)) 154 rsForEach(rs_script script, rs_allocation input, rs_allocation output, 155 const void * usrData, size_t usrDataLen); 156 /** 157 * \overload 158 */ 159 extern void __attribute__((overloadable)) 160 rsForEach(rs_script script, rs_allocation input, rs_allocation output); 161 #endif 162 163 164 165 #undef _RS_RUNTIME 166 167 #endif 168