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