rs_core.rsh revision 044e2ee36ffe6520570a7f0207d75a8fce8b8e91
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"
34044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_math.rsh"
35044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_matrix.rsh"
36044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_object.rsh"
37044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_quaternion.rsh"
38044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#include "rs_time.rsh"
392a63bf6c293d89c8e3725cfb7ee2add3dd3f0246Jason Sams
407fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams
417fe6bce13c30b8d14dc833e06468666d28e56ee1Jason 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