19 typedef unsigned char u8;
22 typedef unsigned short u16;
25 typedef unsigned int u32;
28 typedef unsigned long long u64;
33 typedef signed char i8;
36 typedef signed short i16;
39 typedef signed int i32;
42 typedef signed long long i64;
76 #if defined(__clang__) || defined(__GNUC__)
78 # define STATIC_ASSERT _Static_assert
82 # define STATIC_ASSERT static_assert
127 #define INVALID_ID_U64 18446744073709551615UL
128 #define INVALID_ID 4294967295U
129 #define INVALID_ID_U32 INVALID_ID
130 #define INVALID_ID_U16 65535U
131 #define INVALID_ID_U8 255U
133 #define U64_MAX 18446744073709551615UL
134 #define U32_MAX 4294967295U
135 #define U16_MAX 65535U
143 #define I16_MAX 32767
144 #define I32_MAX 2147483647
145 #define I64_MAX 9223372036854775807L
146 #define I8_MIN (-I8_MAX - 1)
147 #define I16_MIN (-I16_MAX - 1)
148 #define I32_MIN (-I32_MAX - 1)
149 #define I64_MIN (-I64_MAX - 1)
152 #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
153 # define KPLATFORM_WINDOWS 1
155 # error "64-bit is required on Windows!"
157 #elif defined(__linux__) || defined(__gnu_linux__)
159 # define KPLATFORM_LINUX 1
160 # if defined(__ANDROID__)
161 # define KPLATFORM_ANDROID 1
163 #elif defined(__unix__)
165 # define KPLATFORM_UNIX 1
166 #elif defined(_POSIX_VERSION)
168 # define KPLATFORM_POSIX 1
171 # define KPLATFORM_APPLE 1
172 # include <TargetConditionals.h>
173 # if TARGET_IPHONE_SIMULATOR
175 # define KPLATFORM_IOS 1
176 # define KPLATFORM_IOS_SIMULATOR 1
177 # elif TARGET_OS_IPHONE
178 # define KPLATFORM_IOS 1
182 # define VK_USE_PLATFORM_MACOS_MVK
185 # error "Unknown Apple platform"
188 # error "Unknown platform!"
194 # define KAPI __declspec(dllexport)
196 # define KAPI __attribute__((visibility("default")))
202 # define KAPI __declspec(dllimport)
210 # define KOHI_DEBUG 1
211 # define KOHI_RELEASE 0
213 # define KOHI_RELEASE 1
214 # define KOHI_DEBUG 0
220 # define KOHI_HOT_RELOAD 1
222 # define KOHI_HOT_RELOAD 0
232 #define KCLAMP(value, min, max) ((value <= min) ? min : (value >= max) ? max \
236 #if defined(__clang__) || defined(__gcc__)
238 # define KINLINE __attribute__((always_inline)) inline
241 # define KNOINLINE __attribute__((noinline))
242 #elif defined(_MSC_VER)
245 # define KINLINE __forceinline
248 # define KNOINLINE __declspec(noinline)
252 # define KINLINE static inline
259 #if defined(__clang__) || defined(__gcc__)
261 # define KDEPRECATED(message) __attribute__((deprecated(message)))
262 #elif defined(_MSC_VER)
264 # define KDEPRECATED(message) __declspec(deprecated(message))
266 # error "Unsupported compiler - don't know how to define deprecations!"
270 #define GIBIBYTES(amount) ((amount) * 1024ULL * 1024ULL * 1024ULL)
272 #define MEBIBYTES(amount) ((amount) * 1024ULL * 1024ULL)
274 #define KIBIBYTES(amount) ((amount) * 1024ULL)
277 #define GIGABYTES(amount) ((amount) * 1000ULL * 1000ULL * 1000ULL)
279 #define MEGABYTES(amount) ((amount) * 1000ULL * 1000ULL)
281 #define KILOBYTES(amount) ((amount) * 1000ULL)
284 return ((operand + (granularity - 1)) & ~(granularity - 1));
291 #define KMIN(x, y) (x < y ? x : y)
292 #define KMAX(x, y) (x > y ? x : y)
297 #define FLAG_GET(flags, flag) ((flags & flag) == flag)
306 #define FLAG_SET(flags, flag, enabled) (flags = (enabled ? (flags | flag) : (flags & ~flag)))
struct krange krange
A range, typically of memory.
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:25
#define STATIC_ASSERT
Static assertion.
Definition: defines.h:82
signed char i8
Signed 8-bit integer.
Definition: defines.h:33
KINLINE krange get_aligned_range(u64 offset, u64 size, u64 granularity)
Definition: defines.h:287
_Bool b8
8-bit boolean type
Definition: defines.h:58
struct range32 range32
A range, typically of memory.
float f32
32-bit floating point number
Definition: defines.h:47
double f64
64-bit floating point number
Definition: defines.h:50
signed int i32
Signed 32-bit integer.
Definition: defines.h:39
unsigned short u16
Unsigned 16-bit integer.
Definition: defines.h:22
#define KINLINE
Inline qualifier.
Definition: defines.h:252
KINLINE u64 get_aligned(u64 operand, u64 granularity)
Definition: defines.h:283
signed short i16
Signed 16-bit integer.
Definition: defines.h:36
int b32
32-bit boolean type, used for APIs which require it
Definition: defines.h:55
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:28
signed long long i64
Signed 64-bit integer.
Definition: defines.h:42
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:19
A range, typically of memory.
Definition: defines.h:61
u64 offset
The offset in bytes.
Definition: defines.h:63
u64 size
The size in bytes.
Definition: defines.h:65
A range, typically of memory.
Definition: defines.h:69
i32 offset
The offset in bytes.
Definition: defines.h:71
i32 size
The size in bytes.
Definition: defines.h:73