blob: c842ef131428e8231a5eba0d38695f0f488a8ecc [file] [log] [blame]
Jason Samsc4cdf452010-07-07 11:55:51 -07001#ifndef __RS_MATH_RSH__
2#define __RS_MATH_RSH__
3
Jason Sams7dce6bc2010-08-06 16:22:50 -07004// Debugging, print to the LOG a description string and a value.
5extern void __attribute__((overloadable))
6 rsDebug(const char *, float);
7extern void __attribute__((overloadable))
8 rsDebug(const char *, float, float);
9extern void __attribute__((overloadable))
10 rsDebug(const char *, float, float, float);
11extern void __attribute__((overloadable))
12 rsDebug(const char *, float, float, float, float);
13extern void __attribute__((overloadable))
14 rsDebug(const char *, const rs_matrix4x4 *);
15extern void __attribute__((overloadable))
16 rsDebug(const char *, const rs_matrix3x3 *);
17extern void __attribute__((overloadable))
18 rsDebug(const char *, const rs_matrix2x2 *);
19extern void __attribute__((overloadable))
20 rsDebug(const char *, int);
21extern void __attribute__((overloadable))
22 rsDebug(const char *, uint);
23extern void __attribute__((overloadable))
24 rsDebug(const char *, const void *);
25#define RS_DEBUG(a) rsDebug(#a, a)
26#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__)
27
28
Jason Sams22fa3712010-05-19 17:22:57 -070029#include "rs_cl.rsh"
Jason Sams275b1e92010-05-28 18:08:16 -070030#include "rs_core.rsh"
31
Jason Samsc0936852010-08-16 12:41:48 -070032extern void __attribute__((overloadable))
33 rsSetObject(rs_element *dst, rs_element src);
34extern void __attribute__((overloadable))
35 rsSetObject(rs_type *dst, rs_type src);
36extern void __attribute__((overloadable))
37 rsSetObject(rs_allocation *dst, rs_allocation src);
38extern void __attribute__((overloadable))
39 rsSetObject(rs_sampler *dst, rs_sampler src);
40extern void __attribute__((overloadable))
41 rsSetObject(rs_script *dst, rs_script src);
42extern void __attribute__((overloadable))
43 rsSetObject(rs_mesh *dst, rs_mesh src);
44extern void __attribute__((overloadable))
45 rsSetObject(rs_program_fragment *dst, rs_program_fragment src);
46extern void __attribute__((overloadable))
47 rsSetObject(rs_program_vertex *dst, rs_program_vertex src);
48extern void __attribute__((overloadable))
49 rsSetObject(rs_program_raster *dst, rs_program_raster src);
50extern void __attribute__((overloadable))
51 rsSetObject(rs_program_store *dst, rs_program_store src);
52extern void __attribute__((overloadable))
53 rsSetObject(rs_font *dst, rs_font src);
54
55extern void __attribute__((overloadable))
56 rsClearObject(rs_element *dst);
57extern void __attribute__((overloadable))
58 rsClearObject(rs_type *dst);
59extern void __attribute__((overloadable))
60 rsClearObject(rs_allocation *dst);
61extern void __attribute__((overloadable))
62 rsClearObject(rs_sampler *dst);
63extern void __attribute__((overloadable))
64 rsClearObject(rs_script *dst);
65extern void __attribute__((overloadable))
66 rsClearObject(rs_mesh *dst);
67extern void __attribute__((overloadable))
68 rsClearObject(rs_program_fragment *dst);
69extern void __attribute__((overloadable))
70 rsClearObject(rs_program_vertex *dst);
71extern void __attribute__((overloadable))
72 rsClearObject(rs_program_raster *dst);
73extern void __attribute__((overloadable))
74 rsClearObject(rs_program_store *dst);
75extern void __attribute__((overloadable))
76 rsClearObject(rs_font *dst);
77
78extern bool __attribute__((overloadable))
79 rsIsObject(rs_element);
80extern bool __attribute__((overloadable))
81 rsIsObject(rs_type);
82extern bool __attribute__((overloadable))
83 rsIsObject(rs_allocation);
84extern bool __attribute__((overloadable))
85 rsIsObject(rs_sampler);
86extern bool __attribute__((overloadable))
87 rsIsObject(rs_script);
88extern bool __attribute__((overloadable))
89 rsIsObject(rs_mesh);
90extern bool __attribute__((overloadable))
91 rsIsObject(rs_program_fragment);
92extern bool __attribute__((overloadable))
93 rsIsObject(rs_program_vertex);
94extern bool __attribute__((overloadable))
95 rsIsObject(rs_program_raster);
96extern bool __attribute__((overloadable))
97 rsIsObject(rs_program_store);
98extern bool __attribute__((overloadable))
99 rsIsObject(rs_font);
100
101
102
Jason Sams22fa3712010-05-19 17:22:57 -0700103// Allocations
Jason Sams73495472010-07-29 17:31:14 -0700104
105// Return the rs_allocation associated with a bound data
106// pointer.
Jason Samsef5867a2010-07-28 11:17:53 -0700107extern rs_allocation __attribute__((overloadable))
108 rsGetAllocation(const void *);
Jason Sams73495472010-07-29 17:31:14 -0700109
110// Return the dimensions associated with an allocation.
Jason Samsef5867a2010-07-28 11:17:53 -0700111extern uint32_t __attribute__((overloadable))
112 rsAllocationGetDimX(rs_allocation);
113extern uint32_t __attribute__((overloadable))
114 rsAllocationGetDimY(rs_allocation);
115extern uint32_t __attribute__((overloadable))
116 rsAllocationGetDimZ(rs_allocation);
117extern uint32_t __attribute__((overloadable))
118 rsAllocationGetDimLOD(rs_allocation);
119extern uint32_t __attribute__((overloadable))
120 rsAllocationGetDimFaces(rs_allocation);
Jason Sams22fa3712010-05-19 17:22:57 -0700121
Jason Sams73495472010-07-29 17:31:14 -0700122// Extract a single element from an allocation.
Jason Sams7bf29dd2010-07-19 15:38:19 -0700123extern const void * __attribute__((overloadable))
124 rsGetElementAt(rs_allocation, uint32_t x);
125extern const void * __attribute__((overloadable))
126 rsGetElementAt(rs_allocation, uint32_t x, uint32_t y);
127extern const void * __attribute__((overloadable))
128 rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z);
Jason Sams22fa3712010-05-19 17:22:57 -0700129
Jason Sams73495472010-07-29 17:31:14 -0700130// Return a random value between 0 (or min_value) and max_malue.
131extern int __attribute__((overloadable))
132 rsRand(int max_value);
133extern int __attribute__((overloadable))
134 rsRand(int min_value, int max_value);
135extern float __attribute__((overloadable))
136 rsRand(float max_value);
137extern float __attribute__((overloadable))
138 rsRand(float min_value, float max_value);
Jason Sams22fa3712010-05-19 17:22:57 -0700139
Jason Sams73495472010-07-29 17:31:14 -0700140// return the fractional part of a float
141// min(v - ((int)floor(v)), 0x1.fffffep-1f);
142extern float __attribute__((overloadable))
143 rsFrac(float);
Jason Sams22fa3712010-05-19 17:22:57 -0700144
145// time
Jason Sams73495472010-07-29 17:31:14 -0700146extern int32_t __attribute__((overloadable))
147 rsSecond(void);
148extern int32_t __attribute__((overloadable))
149 rsMinute(void);
150extern int32_t __attribute__((overloadable))
151 rsHour(void);
152extern int32_t __attribute__((overloadable))
153 rsDay(void);
154extern int32_t __attribute__((overloadable))
155 rsMonth(void);
156extern int32_t __attribute__((overloadable))
157 rsYear(void);
Jason Sams22fa3712010-05-19 17:22:57 -0700158
Jason Sams73495472010-07-29 17:31:14 -0700159// Return the current system clock in milliseconds
160extern int64_t __attribute__((overloadable))
161 rsUptimeMillis(void);
162
163// Return the current system clock in nanoseconds
164extern int64_t __attribute__((overloadable))
165 rsUptimeNanos(void);
166
167// Return the time in seconds since function was last called in this script.
168extern float __attribute__((overloadable))
169 rsGetDt(void);
170
171// Send a message back to the client. Will not block and returns true
172// if the message was sendable and false if the fifo was full.
173// A message ID is required. Data payload is optional.
174extern bool __attribute__((overloadable))
175 rsSendToClient(int cmdID);
176extern bool __attribute__((overloadable))
177 rsSendToClient(int cmdID, const void *data, uint len);
178
179// Send a message back to the client, blocking until the message is queued.
180// A message ID is required. Data payload is optional.
181extern void __attribute__((overloadable))
182 rsSendToClientBlocking(int cmdID);
183extern void __attribute__((overloadable))
184 rsSendToClientBlocking(int cmdID, const void *data, uint len);
Jason Sams22fa3712010-05-19 17:22:57 -0700185
Jason Samsdd663fa2010-08-11 13:26:28 -0700186
Jason Samsc61346b2010-05-28 18:23:22 -0700187// Script to Script
Jason Samsdd663fa2010-08-11 13:26:28 -0700188enum rs_for_each_strategy {
189 RS_FOR_EACH_STRATEGY_SERIAL,
190 RS_FOR_EACH_STRATEGY_DONT_CARE,
191 RS_FOR_EACH_STRATEGY_DST_LINEAR,
192 RS_FOR_EACH_STRATEGY_TILE_SMALL,
193 RS_FOR_EACH_STRATEGY_TILE_MEDIUM,
194 RS_FOR_EACH_STRATEGY_TILE_LARGE
195};
196
Jason Samsace3e012010-07-15 17:11:13 -0700197typedef struct rs_script_call {
Jason Samsdd663fa2010-08-11 13:26:28 -0700198 enum rs_for_each_strategy strategy;
Jason Sams479e2922010-07-09 15:34:32 -0700199 uint32_t xStart;
200 uint32_t xEnd;
201 uint32_t yStart;
202 uint32_t yEnd;
203 uint32_t zStart;
204 uint32_t zEnd;
205 uint32_t arrayStart;
206 uint32_t arrayEnd;
Jason Samsace3e012010-07-15 17:11:13 -0700207} rs_script_call_t;
Jason Sams479e2922010-07-09 15:34:32 -0700208
Jason Sams73495472010-07-29 17:31:14 -0700209extern void __attribute__((overloadable))
210 rsForEach(rs_script script, rs_allocation input,
211 rs_allocation output, const void * usrData);
Jason Samsace3e012010-07-15 17:11:13 -0700212
Jason Sams73495472010-07-29 17:31:14 -0700213extern void __attribute__((overloadable))
214 rsForEach(rs_script script, rs_allocation input,
215 rs_allocation output, const void * usrData,
216 const rs_script_call_t *);
Jason Samsc61346b2010-05-28 18:23:22 -0700217
Jason Samsc4cdf452010-07-07 11:55:51 -0700218#endif