blob: e2719e054f866fb6f1ce5c7b2a73ec74e4ac4439 [file] [log] [blame]
Jason Samsc4cdf452010-07-07 11:55:51 -07001#ifndef __RS_MATH_RSH__
2#define __RS_MATH_RSH__
3
Jason Sams09aeb8a2011-01-28 15:49:07 -08004/**
5 * Copy reference to the specified object.
6 *
7 * @param dst
8 * @param src
9 */
Jason Samsc0936852010-08-16 12:41:48 -070010extern void __attribute__((overloadable))
11 rsSetObject(rs_element *dst, rs_element src);
12extern void __attribute__((overloadable))
13 rsSetObject(rs_type *dst, rs_type src);
14extern void __attribute__((overloadable))
15 rsSetObject(rs_allocation *dst, rs_allocation src);
16extern void __attribute__((overloadable))
17 rsSetObject(rs_sampler *dst, rs_sampler src);
18extern void __attribute__((overloadable))
19 rsSetObject(rs_script *dst, rs_script src);
20extern void __attribute__((overloadable))
21 rsSetObject(rs_mesh *dst, rs_mesh src);
22extern void __attribute__((overloadable))
23 rsSetObject(rs_program_fragment *dst, rs_program_fragment src);
24extern void __attribute__((overloadable))
25 rsSetObject(rs_program_vertex *dst, rs_program_vertex src);
26extern void __attribute__((overloadable))
27 rsSetObject(rs_program_raster *dst, rs_program_raster src);
28extern void __attribute__((overloadable))
29 rsSetObject(rs_program_store *dst, rs_program_store src);
30extern void __attribute__((overloadable))
31 rsSetObject(rs_font *dst, rs_font src);
32
Jason Sams09aeb8a2011-01-28 15:49:07 -080033/**
34 * Sets the object to NULL.
35 *
36 * @return bool
37 */
Jason Samsc0936852010-08-16 12:41:48 -070038extern void __attribute__((overloadable))
39 rsClearObject(rs_element *dst);
40extern void __attribute__((overloadable))
41 rsClearObject(rs_type *dst);
42extern void __attribute__((overloadable))
43 rsClearObject(rs_allocation *dst);
44extern void __attribute__((overloadable))
45 rsClearObject(rs_sampler *dst);
46extern void __attribute__((overloadable))
47 rsClearObject(rs_script *dst);
48extern void __attribute__((overloadable))
49 rsClearObject(rs_mesh *dst);
50extern void __attribute__((overloadable))
51 rsClearObject(rs_program_fragment *dst);
52extern void __attribute__((overloadable))
53 rsClearObject(rs_program_vertex *dst);
54extern void __attribute__((overloadable))
55 rsClearObject(rs_program_raster *dst);
56extern void __attribute__((overloadable))
57 rsClearObject(rs_program_store *dst);
58extern void __attribute__((overloadable))
59 rsClearObject(rs_font *dst);
60
Jason Sams09aeb8a2011-01-28 15:49:07 -080061/**
62 * Tests if the object is valid. Returns true if the object is valid, false if
63 * it is NULL.
64 *
65 * @return bool
66 */
Jason Samsc0936852010-08-16 12:41:48 -070067extern bool __attribute__((overloadable))
68 rsIsObject(rs_element);
69extern bool __attribute__((overloadable))
70 rsIsObject(rs_type);
71extern bool __attribute__((overloadable))
72 rsIsObject(rs_allocation);
73extern bool __attribute__((overloadable))
74 rsIsObject(rs_sampler);
75extern bool __attribute__((overloadable))
76 rsIsObject(rs_script);
77extern bool __attribute__((overloadable))
78 rsIsObject(rs_mesh);
79extern bool __attribute__((overloadable))
80 rsIsObject(rs_program_fragment);
81extern bool __attribute__((overloadable))
82 rsIsObject(rs_program_vertex);
83extern bool __attribute__((overloadable))
84 rsIsObject(rs_program_raster);
85extern bool __attribute__((overloadable))
86 rsIsObject(rs_program_store);
87extern bool __attribute__((overloadable))
88 rsIsObject(rs_font);
89
90
Jason Sams09aeb8a2011-01-28 15:49:07 -080091/**
92 * Returns the Allocation for a given pointer. The pointer should point within
93 * a valid allocation. The results are undefined if the pointer is not from a
94 * valid allocation.
95 */
Jason Samsef5867a2010-07-28 11:17:53 -070096extern rs_allocation __attribute__((overloadable))
97 rsGetAllocation(const void *);
Jason Sams73495472010-07-29 17:31:14 -070098
Jason Sams09aeb8a2011-01-28 15:49:07 -080099/**
100 * Mark the contents of an allocation as dirty. This forces any other scripts
101 * using the allocation to receive the updated
102 */
Alex Sakhartchouk1e5168d2010-09-01 16:34:48 -0700103extern void __attribute__((overloadable))
104 rsAllocationMarkDirty(rs_allocation);
105
Jason Sams09aeb8a2011-01-28 15:49:07 -0800106/**
107 * Query the dimension of an allocation.
108 *
109 * @return uint32_t The X dimension of the allocation.
110 */
Jason Samsef5867a2010-07-28 11:17:53 -0700111extern uint32_t __attribute__((overloadable))
112 rsAllocationGetDimX(rs_allocation);
Jason Sams09aeb8a2011-01-28 15:49:07 -0800113
114/**
115 * Query the dimension of an allocation.
116 *
117 * @return uint32_t The Y dimension of the allocation.
118 */
Jason Samsef5867a2010-07-28 11:17:53 -0700119extern uint32_t __attribute__((overloadable))
120 rsAllocationGetDimY(rs_allocation);
Jason Sams09aeb8a2011-01-28 15:49:07 -0800121
122/**
123 * Query the dimension of an allocation.
124 *
125 * @return uint32_t The Z dimension of the allocation.
126 */
Jason Samsef5867a2010-07-28 11:17:53 -0700127extern uint32_t __attribute__((overloadable))
128 rsAllocationGetDimZ(rs_allocation);
Jason Sams09aeb8a2011-01-28 15:49:07 -0800129
130/**
131 * Query an allocation for the presence of more than one LOD.
132 *
133 * @return uint32_t Returns 1 if more than one LOD is present, 0 otherwise.
134 */
Jason Samsef5867a2010-07-28 11:17:53 -0700135extern uint32_t __attribute__((overloadable))
136 rsAllocationGetDimLOD(rs_allocation);
Jason Sams09aeb8a2011-01-28 15:49:07 -0800137
138/**
139 * Query an allocation for the presence of more than one face.
140 *
141 * @return uint32_t Returns 1 if more than one face is present, 0 otherwise.
142 */
Jason Samsef5867a2010-07-28 11:17:53 -0700143extern uint32_t __attribute__((overloadable))
144 rsAllocationGetDimFaces(rs_allocation);
Jason Sams22fa3712010-05-19 17:22:57 -0700145
Jason Sams73495472010-07-29 17:31:14 -0700146// Extract a single element from an allocation.
Jason Sams7bf29dd2010-07-19 15:38:19 -0700147extern const void * __attribute__((overloadable))
148 rsGetElementAt(rs_allocation, uint32_t x);
149extern const void * __attribute__((overloadable))
150 rsGetElementAt(rs_allocation, uint32_t x, uint32_t y);
151extern const void * __attribute__((overloadable))
152 rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z);
Jason Sams22fa3712010-05-19 17:22:57 -0700153
Jason Sams73495472010-07-29 17:31:14 -0700154// Return a random value between 0 (or min_value) and max_malue.
155extern int __attribute__((overloadable))
156 rsRand(int max_value);
157extern int __attribute__((overloadable))
158 rsRand(int min_value, int max_value);
159extern float __attribute__((overloadable))
160 rsRand(float max_value);
161extern float __attribute__((overloadable))
162 rsRand(float min_value, float max_value);
Jason Sams22fa3712010-05-19 17:22:57 -0700163
Jason Sams73495472010-07-29 17:31:14 -0700164// return the fractional part of a float
165// min(v - ((int)floor(v)), 0x1.fffffep-1f);
166extern float __attribute__((overloadable))
167 rsFrac(float);
Jason Sams22fa3712010-05-19 17:22:57 -0700168
Jason Sams73495472010-07-29 17:31:14 -0700169// Send a message back to the client. Will not block and returns true
170// if the message was sendable and false if the fifo was full.
171// A message ID is required. Data payload is optional.
172extern bool __attribute__((overloadable))
173 rsSendToClient(int cmdID);
174extern bool __attribute__((overloadable))
175 rsSendToClient(int cmdID, const void *data, uint len);
176
177// Send a message back to the client, blocking until the message is queued.
178// A message ID is required. Data payload is optional.
179extern void __attribute__((overloadable))
180 rsSendToClientBlocking(int cmdID);
181extern void __attribute__((overloadable))
182 rsSendToClientBlocking(int cmdID, const void *data, uint len);
Jason Sams22fa3712010-05-19 17:22:57 -0700183
Jason Samsdd663fa2010-08-11 13:26:28 -0700184
Jason Samsc61346b2010-05-28 18:23:22 -0700185// Script to Script
Jason Samsdd663fa2010-08-11 13:26:28 -0700186enum rs_for_each_strategy {
187 RS_FOR_EACH_STRATEGY_SERIAL,
188 RS_FOR_EACH_STRATEGY_DONT_CARE,
189 RS_FOR_EACH_STRATEGY_DST_LINEAR,
190 RS_FOR_EACH_STRATEGY_TILE_SMALL,
191 RS_FOR_EACH_STRATEGY_TILE_MEDIUM,
192 RS_FOR_EACH_STRATEGY_TILE_LARGE
193};
194
Jason Samsace3e012010-07-15 17:11:13 -0700195typedef struct rs_script_call {
Jason Samsdd663fa2010-08-11 13:26:28 -0700196 enum rs_for_each_strategy strategy;
Jason Sams479e2922010-07-09 15:34:32 -0700197 uint32_t xStart;
198 uint32_t xEnd;
199 uint32_t yStart;
200 uint32_t yEnd;
201 uint32_t zStart;
202 uint32_t zEnd;
203 uint32_t arrayStart;
204 uint32_t arrayEnd;
Jason Samsace3e012010-07-15 17:11:13 -0700205} rs_script_call_t;
Jason Sams479e2922010-07-09 15:34:32 -0700206
Jason Sams73495472010-07-29 17:31:14 -0700207extern void __attribute__((overloadable))
208 rsForEach(rs_script script, rs_allocation input,
209 rs_allocation output, const void * usrData);
Jason Samsace3e012010-07-15 17:11:13 -0700210
Jason Sams73495472010-07-29 17:31:14 -0700211extern void __attribute__((overloadable))
212 rsForEach(rs_script script, rs_allocation input,
213 rs_allocation output, const void * usrData,
214 const rs_script_call_t *);
Jason Samsc61346b2010-05-28 18:23:22 -0700215
Jason Samsc4cdf452010-07-07 11:55:51 -0700216#endif