blob: 5720b05eae98c8e5736e73e6253e9e2d98c50e93 [file] [log] [blame]
#ifndef __RS_MATH_RSH__
#define __RS_MATH_RSH__
// Debugging, print to the LOG a description string and a value.
extern void __attribute__((overloadable))
rsDebug(const char *, float);
extern void __attribute__((overloadable))
rsDebug(const char *, float, float);
extern void __attribute__((overloadable))
rsDebug(const char *, float, float, float);
extern void __attribute__((overloadable))
rsDebug(const char *, float, float, float, float);
extern void __attribute__((overloadable))
rsDebug(const char *, const rs_matrix4x4 *);
extern void __attribute__((overloadable))
rsDebug(const char *, const rs_matrix3x3 *);
extern void __attribute__((overloadable))
rsDebug(const char *, const rs_matrix2x2 *);
extern void __attribute__((overloadable))
rsDebug(const char *, int);
extern void __attribute__((overloadable))
rsDebug(const char *, uint);
extern void __attribute__((overloadable))
rsDebug(const char *, const void *);
#define RS_DEBUG(a) rsDebug(#a, a)
#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__)
#include "rs_cl.rsh"
#include "rs_core.rsh"
extern void __attribute__((overloadable))
rsSetObject(rs_element *dst, rs_element src);
extern void __attribute__((overloadable))
rsSetObject(rs_type *dst, rs_type src);
extern void __attribute__((overloadable))
rsSetObject(rs_allocation *dst, rs_allocation src);
extern void __attribute__((overloadable))
rsSetObject(rs_sampler *dst, rs_sampler src);
extern void __attribute__((overloadable))
rsSetObject(rs_script *dst, rs_script src);
extern void __attribute__((overloadable))
rsSetObject(rs_mesh *dst, rs_mesh src);
extern void __attribute__((overloadable))
rsSetObject(rs_program_fragment *dst, rs_program_fragment src);
extern void __attribute__((overloadable))
rsSetObject(rs_program_vertex *dst, rs_program_vertex src);
extern void __attribute__((overloadable))
rsSetObject(rs_program_raster *dst, rs_program_raster src);
extern void __attribute__((overloadable))
rsSetObject(rs_program_store *dst, rs_program_store src);
extern void __attribute__((overloadable))
rsSetObject(rs_font *dst, rs_font src);
extern void __attribute__((overloadable))
rsClearObject(rs_element *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_type *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_allocation *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_sampler *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_script *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_mesh *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_program_fragment *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_program_vertex *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_program_raster *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_program_store *dst);
extern void __attribute__((overloadable))
rsClearObject(rs_font *dst);
extern bool __attribute__((overloadable))
rsIsObject(rs_element);
extern bool __attribute__((overloadable))
rsIsObject(rs_type);
extern bool __attribute__((overloadable))
rsIsObject(rs_allocation);
extern bool __attribute__((overloadable))
rsIsObject(rs_sampler);
extern bool __attribute__((overloadable))
rsIsObject(rs_script);
extern bool __attribute__((overloadable))
rsIsObject(rs_mesh);
extern bool __attribute__((overloadable))
rsIsObject(rs_program_fragment);
extern bool __attribute__((overloadable))
rsIsObject(rs_program_vertex);
extern bool __attribute__((overloadable))
rsIsObject(rs_program_raster);
extern bool __attribute__((overloadable))
rsIsObject(rs_program_store);
extern bool __attribute__((overloadable))
rsIsObject(rs_font);
// Allocations
// Return the rs_allocation associated with a bound data
// pointer.
extern rs_allocation __attribute__((overloadable))
rsGetAllocation(const void *);
// Mark the allocation dirty and notify those using it
extern void __attribute__((overloadable))
rsAllocationMarkDirty(rs_allocation);
// Return the dimensions associated with an allocation.
extern uint32_t __attribute__((overloadable))
rsAllocationGetDimX(rs_allocation);
extern uint32_t __attribute__((overloadable))
rsAllocationGetDimY(rs_allocation);
extern uint32_t __attribute__((overloadable))
rsAllocationGetDimZ(rs_allocation);
extern uint32_t __attribute__((overloadable))
rsAllocationGetDimLOD(rs_allocation);
extern uint32_t __attribute__((overloadable))
rsAllocationGetDimFaces(rs_allocation);
// Extract a single element from an allocation.
extern const void * __attribute__((overloadable))
rsGetElementAt(rs_allocation, uint32_t x);
extern const void * __attribute__((overloadable))
rsGetElementAt(rs_allocation, uint32_t x, uint32_t y);
extern const void * __attribute__((overloadable))
rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z);
// Return a random value between 0 (or min_value) and max_malue.
extern int __attribute__((overloadable))
rsRand(int max_value);
extern int __attribute__((overloadable))
rsRand(int min_value, int max_value);
extern float __attribute__((overloadable))
rsRand(float max_value);
extern float __attribute__((overloadable))
rsRand(float min_value, float max_value);
// return the fractional part of a float
// min(v - ((int)floor(v)), 0x1.fffffep-1f);
extern float __attribute__((overloadable))
rsFrac(float);
// time
extern int32_t __attribute__((overloadable))
rsSecond(void);
extern int32_t __attribute__((overloadable))
rsMinute(void);
extern int32_t __attribute__((overloadable))
rsHour(void);
extern int32_t __attribute__((overloadable))
rsDay(void);
extern int32_t __attribute__((overloadable))
rsMonth(void);
extern int32_t __attribute__((overloadable))
rsYear(void);
// Return the current system clock in milliseconds
extern int64_t __attribute__((overloadable))
rsUptimeMillis(void);
// Return the current system clock in nanoseconds
extern int64_t __attribute__((overloadable))
rsUptimeNanos(void);
// Return the time in seconds since function was last called in this script.
extern float __attribute__((overloadable))
rsGetDt(void);
// Send a message back to the client. Will not block and returns true
// if the message was sendable and false if the fifo was full.
// A message ID is required. Data payload is optional.
extern bool __attribute__((overloadable))
rsSendToClient(int cmdID);
extern bool __attribute__((overloadable))
rsSendToClient(int cmdID, const void *data, uint len);
// Send a message back to the client, blocking until the message is queued.
// A message ID is required. Data payload is optional.
extern void __attribute__((overloadable))
rsSendToClientBlocking(int cmdID);
extern void __attribute__((overloadable))
rsSendToClientBlocking(int cmdID, const void *data, uint len);
// Script to Script
enum rs_for_each_strategy {
RS_FOR_EACH_STRATEGY_SERIAL,
RS_FOR_EACH_STRATEGY_DONT_CARE,
RS_FOR_EACH_STRATEGY_DST_LINEAR,
RS_FOR_EACH_STRATEGY_TILE_SMALL,
RS_FOR_EACH_STRATEGY_TILE_MEDIUM,
RS_FOR_EACH_STRATEGY_TILE_LARGE
};
typedef struct rs_script_call {
enum rs_for_each_strategy strategy;
uint32_t xStart;
uint32_t xEnd;
uint32_t yStart;
uint32_t yEnd;
uint32_t zStart;
uint32_t zEnd;
uint32_t arrayStart;
uint32_t arrayEnd;
} rs_script_call_t;
extern void __attribute__((overloadable))
rsForEach(rs_script script, rs_allocation input,
rs_allocation output, const void * usrData);
extern void __attribute__((overloadable))
rsForEach(rs_script script, rs_allocation input,
rs_allocation output, const void * usrData,
const rs_script_call_t *);
#endif