21 typedef unsigned char u8;
24 typedef unsigned short u16;
27 typedef unsigned int u32;
30 typedef unsigned long long u64;
35 typedef signed char i8;
38 typedef signed short i16;
41 typedef signed int i32;
44 typedef signed long long i64;
78 #if defined(__clang__) || defined(__GNUC__)
80 # define STATIC_ASSERT _Static_assert
84 # define STATIC_ASSERT static_assert
125 #define U64_MAX 18446744073709551615UL
126 #define U32_MAX 4294967295U
127 #define U16_MAX 65535U
135 #define I16_MAX 32767
136 #define I32_MAX 2147483647
137 #define I64_MAX 9223372036854775807L
138 #define I8_MIN (-I8_MAX - 1)
139 #define I16_MIN (-I16_MAX - 1)
140 #define I32_MIN (-I32_MAX - 1)
141 #define I64_MIN (-I64_MAX - 1)
143 #define KWHOLE_SIZE U64_MAX
149 #define INVALID_ID_U64 U64_MAX
150 #define INVALID_ID_U32 U32_MAX
151 #define INVALID_ID_U16 U16_MAX
152 #define INVALID_ID_U8 U8_MAX
153 #define INVALID_ID INVALID_ID_U32
156 #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
157 # define KPLATFORM_WINDOWS 1
159 # error "64-bit is required on Windows!"
161 #elif defined(__linux__) || defined(__gnu_linux__)
163 # define KPLATFORM_LINUX 1
164 # if defined(__ANDROID__)
165 # define KPLATFORM_ANDROID 1
167 #elif defined(__unix__)
169 # define KPLATFORM_UNIX 1
170 #elif defined(_POSIX_VERSION)
172 # define KPLATFORM_POSIX 1
175 # define KPLATFORM_APPLE 1
176 # include <TargetConditionals.h>
177 # if TARGET_IPHONE_SIMULATOR
179 # define KPLATFORM_IOS 1
180 # define KPLATFORM_IOS_SIMULATOR 1
181 # elif TARGET_OS_IPHONE
182 # define KPLATFORM_IOS 1
186 # define VK_USE_PLATFORM_MACOS_MVK
189 # error "Unknown Apple platform"
192 # error "Unknown platform!"
198 # define KAPI __declspec(dllexport)
200 # define KAPI __attribute__((visibility("default")))
206 # define KAPI __declspec(dllimport)
214 # define KOHI_DEBUG 1
215 # define KOHI_RELEASE 0
217 # define KOHI_RELEASE 1
218 # define KOHI_DEBUG 0
224 # define KOHI_HOT_RELOAD 1
226 # define KOHI_HOT_RELOAD 0
236 #define KCLAMP(value, min, max) ((value <= min) ? min : (value >= max) ? max \
240 #if defined(__clang__) || defined(__gcc__)
242 # define KINLINE __attribute__((always_inline)) inline
245 # define KNOINLINE __attribute__((noinline))
246 #elif defined(_MSC_VER)
249 # define KINLINE __forceinline
252 # define KNOINLINE __declspec(noinline)
256 # define KINLINE static inline
263 #if defined(__clang__) || defined(__gcc__)
265 # define KDEPRECATED(message) __attribute__((deprecated(message)))
266 #elif defined(_MSC_VER)
268 # define KDEPRECATED(message) __declspec(deprecated(message))
270 # error "Unsupported compiler - don't know how to define deprecations!"
274 #define GIBIBYTES(amount) ((amount) * 1024ULL * 1024ULL * 1024ULL)
276 #define MEBIBYTES(amount) ((amount) * 1024ULL * 1024ULL)
278 #define KIBIBYTES(amount) ((amount) * 1024ULL)
281 #define GIGABYTES(amount) ((amount) * 1000ULL * 1000ULL * 1000ULL)
283 #define MEGABYTES(amount) ((amount) * 1000ULL * 1000ULL)
285 #define KILOBYTES(amount) ((amount) * 1000ULL)
288 return ((operand + (granularity - 1)) & ~(granularity - 1));
295 #define KSWAP(type, a, b) \
302 #define KMIN(x, y) (x < y ? x : y)
303 #define KMAX(x, y) (x > y ? x : y)
308 #define FLAG_GET(flags, flag) ((flags & flag) == flag)
317 #define FLAG_SET(flags, flag, enabled) (flags = (enabled ? (flags | flag) : (flags & ~flag)))
327 #define UNPACK_U64_U16S(packed, a, b, c, d) \
329 a = (u16)(packed >> 48); \
330 b = (u16)(packed >> 32); \
331 c = (u16)(packed >> 16); \
332 d = (u16)(packed >> 0); \
338 #define UNPACK_U64_U16_AT(packed, index) ((u16)(packed >> ((3 - index) * 16)))
343 #define PACK_U64_U16S(a, b, c, d) (((u64)a << 48) | ((u64)b << 32) | ((u64)c << 16) | ((u64)d))
351 #define PACK_U64_U16_AT(target, n, index) (target = (target | ((u64)n << ((3 - index) * 16))))
359 #define UNPACK_U64_U32S(packed, a, b) \
361 a = (u32)(packed >> 32); \
362 b = (u32)(packed >> 0); \
368 #define UNPACK_U64_U32_AT(packed, index) ((u32)(packed >> ((1 - index) * 32)))
373 #define PACK_U64_U32S(a, b) (((u64)a << 32) | ((u64)b))
381 #define PACK_U64_U32_AT(target, n, index) (target = (target | ((u64)n << ((1 - index) * 32))))
389 #define UNPACK_U32_U16S(packed, a, b) \
391 a = (u16)(packed >> 16); \
392 b = (u16)(packed >> 0); \
398 #define UNPACK_U32_U16_AT(packed, index) ((u16)(packed >> ((1 - index) * 16)))
403 #define PACK_U32_U16S(a, b) (((u32)a << 16) | ((u32)b))
411 #define PACK_U32_U16_AT(target, n, index) (target = (target | ((u32)n << ((1 - index) * 16))))
413 #define IS_IN_RANGE(val, from, to) ((from < to) ? (val >= from && val <= to) : (val <= from && val >= to))
struct krange krange
A range, typically of memory.
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:27
#define STATIC_ASSERT
Static assertion.
Definition: defines.h:84
signed char i8
Signed 8-bit integer.
Definition: defines.h:35
KINLINE krange get_aligned_range(u64 offset, u64 size, u64 granularity)
Definition: defines.h:291
_Bool b8
8-bit boolean type
Definition: defines.h:60
struct range32 range32
A range, typically of memory.
float f32
32-bit floating point number
Definition: defines.h:49
double f64
64-bit floating point number
Definition: defines.h:52
signed int i32
Signed 32-bit integer.
Definition: defines.h:41
unsigned short u16
Unsigned 16-bit integer.
Definition: defines.h:24
#define KINLINE
Inline qualifier.
Definition: defines.h:256
KINLINE u64 get_aligned(u64 operand, u64 granularity)
Definition: defines.h:287
signed short i16
Signed 16-bit integer.
Definition: defines.h:38
int b32
32-bit boolean type, used for APIs which require it
Definition: defines.h:57
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:30
signed long long i64
Signed 64-bit integer.
Definition: defines.h:44
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:21
A range, typically of memory.
Definition: defines.h:63
u64 offset
The offset in bytes.
Definition: defines.h:65
u64 size
The size in bytes.
Definition: defines.h:67
A range, typically of memory.
Definition: defines.h:71
i32 offset
The offset in bytes.
Definition: defines.h:73
i32 size
The size in bytes.
Definition: defines.h:75