Home | History | Annotate | Download | only in scriptc
      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