1#![allow(non_camel_case_types)]
2
3use std::ffi::{c_char, c_void};
4
5pub const RETRO_API_VERSION: u32 = 1;
6pub const RETRO_ENVIRONMENT_EXPERIMENTAL: u32 = 0x10000;
7#[allow(dead_code)]
9pub const RETRO_ENVIRONMENT_PRIVATE: u32 = 0x20000;
10
11pub const RETRO_DEVICE_TYPE_SHIFT: u32 = 8;
12pub const RETRO_DEVICE_MASK: u32 = (1 << RETRO_DEVICE_TYPE_SHIFT) - 1;
13pub const RETRO_DEVICE_NONE: u32 = 0;
14pub const RETRO_DEVICE_JOYPAD: u32 = 1;
15pub const RETRO_DEVICE_MOUSE: u32 = 2;
16pub const RETRO_DEVICE_KEYBOARD: u32 = 3;
17pub const RETRO_DEVICE_LIGHTGUN: u32 = 4;
18pub const RETRO_DEVICE_ANALOG: u32 = 5;
19pub const RETRO_DEVICE_POINTER: u32 = 6;
20
21pub const RETRO_DEVICE_ID_JOYPAD_B: u32 = 0;
22pub const RETRO_DEVICE_ID_JOYPAD_Y: u32 = 1;
23pub const RETRO_DEVICE_ID_JOYPAD_SELECT: u32 = 2;
24pub const RETRO_DEVICE_ID_JOYPAD_START: u32 = 3;
25pub const RETRO_DEVICE_ID_JOYPAD_UP: u32 = 4;
26pub const RETRO_DEVICE_ID_JOYPAD_DOWN: u32 = 5;
27pub const RETRO_DEVICE_ID_JOYPAD_LEFT: u32 = 6;
28pub const RETRO_DEVICE_ID_JOYPAD_RIGHT: u32 = 7;
29pub const RETRO_DEVICE_ID_JOYPAD_A: u32 = 8;
30pub const RETRO_DEVICE_ID_JOYPAD_X: u32 = 9;
31pub const RETRO_DEVICE_ID_JOYPAD_L: u32 = 10;
32pub const RETRO_DEVICE_ID_JOYPAD_R: u32 = 11;
33pub const RETRO_DEVICE_ID_JOYPAD_L2: u32 = 12;
34pub const RETRO_DEVICE_ID_JOYPAD_R2: u32 = 13;
35pub const RETRO_DEVICE_ID_JOYPAD_L3: u32 = 14;
36pub const RETRO_DEVICE_ID_JOYPAD_R3: u32 = 15;
37pub const RETRO_DEVICE_ID_JOYPAD_MASK: u32 = 256;
38
39pub const RETRO_DEVICE_INDEX_ANALOG_LEFT: u32 = 0;
40pub const RETRO_DEVICE_INDEX_ANALOG_RIGHT: u32 = 1;
41pub const RETRO_DEVICE_INDEX_ANALOG_BUTTON: u32 = 2;
42pub const RETRO_DEVICE_ID_ANALOG_X: u32 = 0;
43pub const RETRO_DEVICE_ID_ANALOG_Y: u32 = 1;
44
45pub const RETRO_DEVICE_ID_MOUSE_X: u32 = 0;
46pub const RETRO_DEVICE_ID_MOUSE_Y: u32 = 1;
47pub const RETRO_DEVICE_ID_MOUSE_LEFT: u32 = 2;
48pub const RETRO_DEVICE_ID_MOUSE_RIGHT: u32 = 3;
49pub const RETRO_DEVICE_ID_MOUSE_WHEELUP: u32 = 4;
50pub const RETRO_DEVICE_ID_MOUSE_WHEELDOWN: u32 = 5;
51pub const RETRO_DEVICE_ID_MOUSE_MIDDLE: u32 = 6;
52pub const RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP: u32 = 7;
53pub const RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN: u32 = 8;
54pub const RETRO_DEVICE_ID_MOUSE_BUTTON_4: u32 = 9;
55pub const RETRO_DEVICE_ID_MOUSE_BUTTON_5: u32 = 10;
56
57pub const RETRO_DEVICE_ID_LIGHTGUN_SCREEN_X: u32 = 13;
58pub const RETRO_DEVICE_ID_LIGHTGUN_SCREEN_Y: u32 = 14;
59pub const RETRO_DEVICE_ID_LIGHTGUN_IS_OFFSCREEN: u32 = 15;
60pub const RETRO_DEVICE_ID_LIGHTGUN_TRIGGER: u32 = 2;
61pub const RETRO_DEVICE_ID_LIGHTGUN_CURSOR: u32 = 3;
62pub const RETRO_DEVICE_ID_LIGHTGUN_RELOAD: u32 = 16;
63pub const RETRO_DEVICE_ID_LIGHTGUN_AUX_A: u32 = 3;
64pub const RETRO_DEVICE_ID_LIGHTGUN_AUX_B: u32 = 4;
65pub const RETRO_DEVICE_ID_LIGHTGUN_START: u32 = 6;
66pub const RETRO_DEVICE_ID_LIGHTGUN_SELECT: u32 = 7;
67pub const RETRO_DEVICE_ID_LIGHTGUN_AUX_C: u32 = 8;
68pub const RETRO_DEVICE_ID_LIGHTGUN_DPAD_UP: u32 = 9;
69pub const RETRO_DEVICE_ID_LIGHTGUN_DPAD_DOWN: u32 = 10;
70pub const RETRO_DEVICE_ID_LIGHTGUN_DPAD_LEFT: u32 = 11;
71pub const RETRO_DEVICE_ID_LIGHTGUN_DPAD_RIGHT: u32 = 12;
72pub const RETRO_DEVICE_ID_LIGHTGUN_X: u32 = 0;
73pub const RETRO_DEVICE_ID_LIGHTGUN_Y: u32 = 1;
74pub const RETRO_DEVICE_ID_LIGHTGUN_TURBO: u32 = 4;
75pub const RETRO_DEVICE_ID_LIGHTGUN_PAUSE: u32 = 5;
76
77pub const RETRO_DEVICE_ID_POINTER_X: u32 = 0;
78pub const RETRO_DEVICE_ID_POINTER_Y: u32 = 1;
79pub const RETRO_DEVICE_ID_POINTER_PRESSED: u32 = 2;
80pub const RETRO_DEVICE_ID_POINTER_COUNT: u32 = 3;
81pub const RETRO_DEVICE_ID_POINTER_IS_OFFSCREEN: u32 = 15;
82
83pub const RETRO_REGION_NTSC: u32 = 0;
84pub const RETRO_REGION_PAL: u32 = 1;
85
86pub const RETRO_MEMORY_MASK: u32 = 0xff;
87pub const RETRO_MEMORY_SAVE_RAM: u32 = 0;
88pub const RETRO_MEMORY_RTC: u32 = 1;
89pub const RETRO_MEMORY_SYSTEM_RAM: u32 = 2;
90pub const RETRO_MEMORY_VIDEO_RAM: u32 = 3;
91pub const RETRO_MEMORY_ROM: u32 = 4;
92
93pub const RETRO_ENVIRONMENT_SET_ROTATION: u32 = 1;
94pub const RETRO_ENVIRONMENT_GET_OVERSCAN: u32 = 2;
95pub const RETRO_ENVIRONMENT_GET_CAN_DUPE: u32 = 3;
96pub const RETRO_ENVIRONMENT_SET_MESSAGE: u32 = 6;
97pub const RETRO_ENVIRONMENT_SHUTDOWN: u32 = 7;
98pub const RETRO_ENVIRONMENT_SET_PERFORMANCE_LEVEL: u32 = 8;
99pub const RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY: u32 = 9;
100pub const RETRO_ENVIRONMENT_SET_PIXEL_FORMAT: u32 = 10;
101pub const RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS: u32 = 11;
102pub const RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK: u32 = 12;
103pub const RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE: u32 = 13;
104pub const RETRO_ENVIRONMENT_SET_HW_RENDER: u32 = 14;
105pub const RETRO_ENVIRONMENT_GET_VARIABLE: u32 = 15;
106pub const RETRO_ENVIRONMENT_SET_VARIABLES: u32 = 16;
107pub const RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE: u32 = 17;
108pub const RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME: u32 = 18;
109pub const RETRO_ENVIRONMENT_GET_LIBRETRO_PATH: u32 = 19;
110pub const RETRO_ENVIRONMENT_SET_FRAME_TIME_CALLBACK: u32 = 21;
111pub const RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK: u32 = 22;
112pub const RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE: u32 = 23;
113pub const RETRO_ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES: u32 = 24;
114pub const RETRO_ENVIRONMENT_GET_SENSOR_INTERFACE: u32 = 25 | RETRO_ENVIRONMENT_EXPERIMENTAL;
115pub const RETRO_ENVIRONMENT_GET_CAMERA_INTERFACE: u32 = 26 | RETRO_ENVIRONMENT_EXPERIMENTAL;
116pub const RETRO_ENVIRONMENT_GET_LOG_INTERFACE: u32 = 27;
117pub const RETRO_ENVIRONMENT_GET_PERF_INTERFACE: u32 = 28;
118pub const RETRO_ENVIRONMENT_GET_LOCATION_INTERFACE: u32 = 29;
119pub const RETRO_ENVIRONMENT_GET_CORE_ASSETS_DIRECTORY: u32 = 30;
120pub const RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY: u32 = 30;
121pub const RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY: u32 = 31;
122pub const RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO: u32 = 32;
123pub const RETRO_ENVIRONMENT_SET_PROC_ADDRESS_CALLBACK: u32 = 33;
124pub const RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO: u32 = 34;
125pub const RETRO_ENVIRONMENT_SET_CONTROLLER_INFO: u32 = 35;
126pub const RETRO_ENVIRONMENT_SET_MEMORY_MAPS: u32 = 36 | RETRO_ENVIRONMENT_EXPERIMENTAL;
127pub const RETRO_ENVIRONMENT_SET_GEOMETRY: u32 = 37;
128pub const RETRO_ENVIRONMENT_GET_USERNAME: u32 = 38;
129pub const RETRO_ENVIRONMENT_GET_LANGUAGE: u32 = 39;
130pub const RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER: u32 =
131 40 | RETRO_ENVIRONMENT_EXPERIMENTAL;
132pub const RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE: u32 = 41 | RETRO_ENVIRONMENT_EXPERIMENTAL;
133pub const RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS: u32 = 42 | RETRO_ENVIRONMENT_EXPERIMENTAL;
134pub const RETRO_ENVIRONMENT_SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE: u32 =
135 43 | RETRO_ENVIRONMENT_EXPERIMENTAL;
136pub const RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE: u32 = 47 | RETRO_ENVIRONMENT_EXPERIMENTAL;
137pub const RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS: u32 = 44;
138pub const RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT: u32 = 44 | RETRO_ENVIRONMENT_EXPERIMENTAL;
139pub const RETRO_ENVIRONMENT_GET_VFS_INTERFACE: u32 = 45 | RETRO_ENVIRONMENT_EXPERIMENTAL;
140pub const RETRO_ENVIRONMENT_GET_LED_INTERFACE: u32 = 46 | RETRO_ENVIRONMENT_EXPERIMENTAL;
141pub const RETRO_ENVIRONMENT_GET_MIDI_INTERFACE: u32 = 48 | RETRO_ENVIRONMENT_EXPERIMENTAL;
142pub const RETRO_ENVIRONMENT_GET_FASTFORWARDING: u32 = 49 | RETRO_ENVIRONMENT_EXPERIMENTAL;
143pub const RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE: u32 = 50 | RETRO_ENVIRONMENT_EXPERIMENTAL;
144pub const RETRO_ENVIRONMENT_GET_INPUT_BITMASKS: u32 = 51 | RETRO_ENVIRONMENT_EXPERIMENTAL;
145pub const RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION: u32 = 52;
146pub const RETRO_ENVIRONMENT_SET_CORE_OPTIONS: u32 = 53;
147pub const RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL: u32 = 54;
148pub const RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY: u32 = 55;
149pub const RETRO_ENVIRONMENT_GET_PREFERRED_HW_RENDER: u32 = 56;
150pub const RETRO_ENVIRONMENT_GET_DISK_CONTROL_INTERFACE_VERSION: u32 = 57;
151pub const RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE: u32 = 58;
152pub const RETRO_ENVIRONMENT_GET_MESSAGE_INTERFACE_VERSION: u32 = 59;
153pub const RETRO_ENVIRONMENT_SET_MESSAGE_EXT: u32 = 60;
154pub const RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS: u32 = 61;
155pub const RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK: u32 = 62;
156pub const RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY: u32 = 63;
157pub const RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE: u32 = 64;
158pub const RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE: u32 = 65;
159pub const RETRO_ENVIRONMENT_GET_GAME_INFO_EXT: u32 = 66;
160pub const RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2: u32 = 67;
161pub const RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL: u32 = 68;
162pub const RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK: u32 = 69;
163pub const RETRO_ENVIRONMENT_SET_VARIABLE: u32 = 70;
164pub const RETRO_ENVIRONMENT_GET_THROTTLE_STATE: u32 = 71 | RETRO_ENVIRONMENT_EXPERIMENTAL;
165pub const RETRO_ENVIRONMENT_GET_SAVESTATE_CONTEXT: u32 = 72 | RETRO_ENVIRONMENT_EXPERIMENTAL;
166pub const RETRO_ENVIRONMENT_GET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_SUPPORT: u32 =
167 73 | RETRO_ENVIRONMENT_EXPERIMENTAL;
168pub const RETRO_ENVIRONMENT_GET_JIT_CAPABLE: u32 = 74;
169pub const RETRO_ENVIRONMENT_GET_MICROPHONE_INTERFACE: u32 = 75 | RETRO_ENVIRONMENT_EXPERIMENTAL;
170pub const RETRO_ENVIRONMENT_GET_DEVICE_POWER: u32 = 77 | RETRO_ENVIRONMENT_EXPERIMENTAL;
171pub const RETRO_ENVIRONMENT_SET_NETPACKET_INTERFACE: u32 = 78;
172pub const RETRO_ENVIRONMENT_GET_PLAYLIST_DIRECTORY: u32 = 79;
173pub const RETRO_ENVIRONMENT_GET_FILE_BROWSER_START_DIRECTORY: u32 = 80;
174pub const RETRO_ENVIRONMENT_GET_TARGET_SAMPLE_RATE: u32 = 81 | RETRO_ENVIRONMENT_EXPERIMENTAL;
175pub const RETRO_ENVIRONMENT_GET_NETPLAY_CLIENT_INDEX: u32 = 82 | RETRO_ENVIRONMENT_EXPERIMENTAL;
176
177pub const RETRO_AV_ENABLE_VIDEO: u32 = 1 << 0;
178pub const RETRO_AV_ENABLE_AUDIO: u32 = 1 << 1;
179pub const RETRO_AV_ENABLE_FAST_SAVESTATES: u32 = 1 << 2;
180pub const RETRO_AV_ENABLE_HARD_DISABLE_AUDIO: u32 = 1 << 3;
181pub const RETRO_THROTTLE_NONE: u32 = 0;
182pub const RETRO_THROTTLE_FRAME_STEPPING: u32 = 1;
183pub const RETRO_THROTTLE_FAST_FORWARD: u32 = 2;
184pub const RETRO_THROTTLE_SLOW_MOTION: u32 = 3;
185pub const RETRO_THROTTLE_REWINDING: u32 = 4;
186pub const RETRO_THROTTLE_VSYNC: u32 = 5;
187pub const RETRO_THROTTLE_UNBLOCKED: u32 = 6;
188pub const RETRO_POWERSTATE_NO_ESTIMATE: i32 = -1;
189pub const RETRO_NETPACKET_UNRELIABLE: i32 = 0;
190pub const RETRO_NETPACKET_RELIABLE: i32 = 1 << 0;
191pub const RETRO_NETPACKET_UNSEQUENCED: i32 = 1 << 1;
192pub const RETRO_NETPACKET_FLUSH_HINT: i32 = 1 << 2;
193pub const RETRO_NETPACKET_BROADCAST: u16 = 0xffff;
194pub const RETRO_MICROPHONE_INTERFACE_VERSION: u32 = 1;
195pub const RETRO_NUM_CORE_OPTION_VALUES_MAX: usize = 128;
196pub const RETRO_SERIALIZATION_QUIRK_INCOMPLETE: u64 = 1 << 0;
197pub const RETRO_SERIALIZATION_QUIRK_MUST_INITIALIZE: u64 = 1 << 1;
198pub const RETRO_SERIALIZATION_QUIRK_CORE_VARIABLE_SIZE: u64 = 1 << 2;
199pub const RETRO_SERIALIZATION_QUIRK_FRONT_VARIABLE_SIZE: u64 = 1 << 3;
200pub const RETRO_SERIALIZATION_QUIRK_SINGLE_SESSION: u64 = 1 << 4;
201pub const RETRO_SERIALIZATION_QUIRK_ENDIAN_DEPENDENT: u64 = 1 << 5;
202pub const RETRO_SERIALIZATION_QUIRK_PLATFORM_DEPENDENT: u64 = 1 << 6;
203pub const RETRO_MEMDESC_CONST: u64 = 1 << 0;
204pub const RETRO_MEMDESC_BIGENDIAN: u64 = 1 << 1;
205pub const RETRO_MEMDESC_SYSTEM_RAM: u64 = 1 << 2;
206pub const RETRO_MEMDESC_SAVE_RAM: u64 = 1 << 3;
207pub const RETRO_MEMDESC_VIDEO_RAM: u64 = 1 << 4;
208pub const RETRO_MEMDESC_ALIGN_2: u64 = 1 << 16;
209pub const RETRO_MEMDESC_ALIGN_4: u64 = 2 << 16;
210pub const RETRO_MEMDESC_ALIGN_8: u64 = 3 << 16;
211pub const RETRO_MEMDESC_MINSIZE_2: u64 = 1 << 24;
212pub const RETRO_MEMDESC_MINSIZE_4: u64 = 2 << 24;
213pub const RETRO_MEMDESC_MINSIZE_8: u64 = 3 << 24;
214pub const RETRO_MEMORY_ACCESS_WRITE: u32 = 1 << 0;
215pub const RETRO_MEMORY_ACCESS_READ: u32 = 1 << 1;
216pub const RETRO_MEMORY_TYPE_CACHED: u32 = 1 << 0;
217pub const RETRO_VFS_FILE_ACCESS_READ: u32 = 1 << 0;
218pub const RETRO_VFS_FILE_ACCESS_WRITE: u32 = 1 << 1;
219#[allow(dead_code)]
220pub const RETRO_VFS_FILE_ACCESS_READ_WRITE: u32 =
221 RETRO_VFS_FILE_ACCESS_READ | RETRO_VFS_FILE_ACCESS_WRITE;
222pub const RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING: u32 = 1 << 2;
223#[allow(dead_code)]
224pub const RETRO_VFS_FILE_ACCESS_HINT_NONE: u32 = 0;
225pub const RETRO_VFS_FILE_ACCESS_HINT_FREQUENT_ACCESS: u32 = 1 << 0;
226pub const RETRO_VFS_SEEK_POSITION_START: i32 = 0;
227pub const RETRO_VFS_SEEK_POSITION_CURRENT: i32 = 1;
228pub const RETRO_VFS_SEEK_POSITION_END: i32 = 2;
229pub const RETRO_VFS_STAT_IS_VALID: u32 = 1 << 0;
230pub const RETRO_VFS_STAT_IS_DIRECTORY: u32 = 1 << 1;
231pub const RETRO_VFS_STAT_IS_CHARACTER_SPECIAL: u32 = 1 << 2;
232pub const RETRO_SENSOR_ACCELEROMETER_X: u32 = 0;
233pub const RETRO_SENSOR_ACCELEROMETER_Y: u32 = 1;
234pub const RETRO_SENSOR_ACCELEROMETER_Z: u32 = 2;
235pub const RETRO_SENSOR_GYROSCOPE_X: u32 = 3;
236pub const RETRO_SENSOR_GYROSCOPE_Y: u32 = 4;
237pub const RETRO_SENSOR_GYROSCOPE_Z: u32 = 5;
238pub const RETRO_SENSOR_ILLUMINANCE: u32 = 6;
239pub const RETRO_SIMD_SSE: u64 = 1 << 0;
240pub const RETRO_SIMD_SSE2: u64 = 1 << 1;
241pub const RETRO_SIMD_VMX: u64 = 1 << 2;
242pub const RETRO_SIMD_VMX128: u64 = 1 << 3;
243pub const RETRO_SIMD_AVX: u64 = 1 << 4;
244pub const RETRO_SIMD_NEON: u64 = 1 << 5;
245pub const RETRO_SIMD_SSE3: u64 = 1 << 6;
246pub const RETRO_SIMD_SSSE3: u64 = 1 << 7;
247pub const RETRO_SIMD_MMX: u64 = 1 << 8;
248pub const RETRO_SIMD_MMXEXT: u64 = 1 << 9;
249pub const RETRO_SIMD_SSE4: u64 = 1 << 10;
250pub const RETRO_SIMD_SSE42: u64 = 1 << 11;
251pub const RETRO_SIMD_AVX2: u64 = 1 << 12;
252pub const RETRO_SIMD_VFPU: u64 = 1 << 13;
253pub const RETRO_SIMD_PS: u64 = 1 << 14;
254pub const RETRO_SIMD_AES: u64 = 1 << 15;
255pub const RETRO_SIMD_VFPV3: u64 = 1 << 16;
256pub const RETRO_SIMD_VFPV4: u64 = 1 << 17;
257pub const RETRO_SIMD_POPCNT: u64 = 1 << 18;
258pub const RETRO_SIMD_MOVBE: u64 = 1 << 19;
259pub const RETRO_SIMD_CMOV: u64 = 1 << 20;
260pub const RETRO_SIMD_ASIMD: u64 = 1 << 21;
261
262pub const RETRO_HW_FRAME_BUFFER_VALID: *const c_void = usize::MAX as *const c_void;
263
264pub type retro_proc_address_t = Option<unsafe extern "C" fn()>;
265pub type retro_get_proc_address_t =
266 Option<unsafe extern "C" fn(sym: *const c_char) -> retro_proc_address_t>;
267pub type retro_environment_t = Option<unsafe extern "C" fn(cmd: u32, data: *mut c_void) -> bool>;
268pub type retro_video_refresh_t =
269 Option<unsafe extern "C" fn(data: *const c_void, width: u32, height: u32, pitch: usize)>;
270pub type retro_audio_sample_t = Option<unsafe extern "C" fn(left: i16, right: i16)>;
271pub type retro_audio_sample_batch_t =
272 Option<unsafe extern "C" fn(data: *const i16, frames: usize) -> usize>;
273pub type retro_audio_callback_t = Option<unsafe extern "C" fn()>;
274pub type retro_audio_set_state_callback_t = Option<unsafe extern "C" fn(enabled: bool)>;
275pub type retro_audio_buffer_status_callback_t =
276 Option<unsafe extern "C" fn(active: bool, occupancy: u32, underrun_likely: bool)>;
277pub type retro_usec_t = i64;
278pub type retro_frame_time_callback_t = Option<unsafe extern "C" fn(usec: retro_usec_t)>;
279pub type retro_input_poll_t = Option<unsafe extern "C" fn()>;
280pub type retro_input_state_t =
281 Option<unsafe extern "C" fn(port: u32, device: u32, index: u32, id: u32) -> i16>;
282pub type retro_key = u32;
283pub type retro_mod = u16;
284pub type retro_keyboard_event_t = Option<
285 unsafe extern "C" fn(down: bool, keycode: retro_key, character: u32, key_modifiers: retro_mod),
286>;
287pub type retro_log_printf_t =
288 Option<unsafe extern "C" fn(level: retro_log_level, fmt: *const c_char, ...)>;
289pub type retro_set_led_state_t = Option<unsafe extern "C" fn(led: i32, state: i32)>;
290pub type retro_set_rumble_state_t =
291 Option<unsafe extern "C" fn(port: u32, effect: retro_rumble_effect, strength: u16) -> bool>;
292pub type retro_set_sensor_state_t =
293 Option<unsafe extern "C" fn(port: u32, action: retro_sensor_action, rate: u32) -> bool>;
294pub type retro_sensor_get_input_t = Option<unsafe extern "C" fn(port: u32, id: u32) -> f32>;
295pub type retro_location_set_interval_t =
296 Option<unsafe extern "C" fn(interval_ms: u32, interval_distance: u32)>;
297pub type retro_location_start_t = Option<unsafe extern "C" fn() -> bool>;
298pub type retro_location_stop_t = Option<unsafe extern "C" fn()>;
299pub type retro_location_get_position_t = Option<
300 unsafe extern "C" fn(
301 lat: *mut f64,
302 lon: *mut f64,
303 horiz_accuracy: *mut f64,
304 vert_accuracy: *mut f64,
305 ) -> bool,
306>;
307pub type retro_location_lifetime_status_t = Option<unsafe extern "C" fn()>;
308pub type retro_camera_start_t = Option<unsafe extern "C" fn() -> bool>;
309pub type retro_camera_stop_t = Option<unsafe extern "C" fn()>;
310pub type retro_camera_lifetime_status_t = Option<unsafe extern "C" fn()>;
311pub type retro_camera_frame_raw_framebuffer_t =
312 Option<unsafe extern "C" fn(buffer: *const u32, width: u32, height: u32, pitch: usize)>;
313pub type retro_camera_frame_opengl_texture_t =
314 Option<unsafe extern "C" fn(texture_id: u32, texture_target: u32, affine: *const f32)>;
315pub type retro_set_eject_state_t = Option<unsafe extern "C" fn(ejected: bool) -> bool>;
316pub type retro_get_eject_state_t = Option<unsafe extern "C" fn() -> bool>;
317pub type retro_get_image_index_t = Option<unsafe extern "C" fn() -> u32>;
318pub type retro_set_image_index_t = Option<unsafe extern "C" fn(index: u32) -> bool>;
319pub type retro_get_num_images_t = Option<unsafe extern "C" fn() -> u32>;
320pub type retro_replace_image_index_t =
321 Option<unsafe extern "C" fn(index: u32, info: *const retro_game_info) -> bool>;
322pub type retro_add_image_index_t = Option<unsafe extern "C" fn() -> bool>;
323pub type retro_set_initial_image_t =
324 Option<unsafe extern "C" fn(index: u32, path: *const c_char) -> bool>;
325pub type retro_get_image_path_t =
326 Option<unsafe extern "C" fn(index: u32, s: *mut c_char, len: usize) -> bool>;
327pub type retro_get_image_label_t =
328 Option<unsafe extern "C" fn(index: u32, s: *mut c_char, len: usize) -> bool>;
329pub type retro_netpacket_send_t =
330 Option<unsafe extern "C" fn(flags: i32, buf: *const c_void, len: usize, client_id: u16)>;
331pub type retro_netpacket_poll_receive_t = Option<unsafe extern "C" fn()>;
332pub type retro_netpacket_start_t = Option<
333 unsafe extern "C" fn(
334 client_id: u16,
335 send_fn: retro_netpacket_send_t,
336 poll_receive_fn: retro_netpacket_poll_receive_t,
337 ),
338>;
339pub type retro_netpacket_receive_t =
340 Option<unsafe extern "C" fn(buf: *const c_void, len: usize, client_id: u16)>;
341pub type retro_netpacket_stop_t = Option<unsafe extern "C" fn()>;
342pub type retro_netpacket_poll_t = Option<unsafe extern "C" fn()>;
343pub type retro_netpacket_connected_t = Option<unsafe extern "C" fn(client_id: u16) -> bool>;
344pub type retro_netpacket_disconnected_t = Option<unsafe extern "C" fn(client_id: u16)>;
345pub type retro_open_mic_t =
346 Option<unsafe extern "C" fn(params: *const retro_microphone_params) -> *mut retro_microphone>;
347pub type retro_close_mic_t = Option<unsafe extern "C" fn(microphone: *mut retro_microphone)>;
348pub type retro_get_mic_params_t = Option<
349 unsafe extern "C" fn(
350 microphone: *const retro_microphone,
351 params: *mut retro_microphone_params,
352 ) -> bool,
353>;
354pub type retro_set_mic_state_t =
355 Option<unsafe extern "C" fn(microphone: *mut retro_microphone, state: bool) -> bool>;
356pub type retro_get_mic_state_t =
357 Option<unsafe extern "C" fn(microphone: *const retro_microphone) -> bool>;
358pub type retro_read_mic_t = Option<
359 unsafe extern "C" fn(
360 microphone: *mut retro_microphone,
361 samples: *mut i16,
362 num_samples: usize,
363 ) -> i32,
364>;
365pub type retro_midi_input_enabled_t = Option<unsafe extern "C" fn() -> bool>;
366pub type retro_midi_output_enabled_t = Option<unsafe extern "C" fn() -> bool>;
367pub type retro_midi_read_t = Option<unsafe extern "C" fn(byte: *mut u8) -> bool>;
368pub type retro_midi_write_t = Option<unsafe extern "C" fn(byte: u8, delta_time: u32) -> bool>;
369pub type retro_midi_flush_t = Option<unsafe extern "C" fn() -> bool>;
370pub type retro_core_options_update_display_callback_t = Option<unsafe extern "C" fn() -> bool>;
371pub type retro_vfs_get_path_t =
372 Option<unsafe extern "C" fn(stream: *mut retro_vfs_file_handle) -> *const c_char>;
373pub type retro_vfs_open_t = Option<
374 unsafe extern "C" fn(path: *const c_char, mode: u32, hints: u32) -> *mut retro_vfs_file_handle,
375>;
376pub type retro_vfs_close_t =
377 Option<unsafe extern "C" fn(stream: *mut retro_vfs_file_handle) -> i32>;
378pub type retro_vfs_size_t = Option<unsafe extern "C" fn(stream: *mut retro_vfs_file_handle) -> i64>;
379pub type retro_vfs_truncate_t =
380 Option<unsafe extern "C" fn(stream: *mut retro_vfs_file_handle, length: i64) -> i64>;
381pub type retro_vfs_tell_t = Option<unsafe extern "C" fn(stream: *mut retro_vfs_file_handle) -> i64>;
382pub type retro_vfs_seek_t = Option<
383 unsafe extern "C" fn(
384 stream: *mut retro_vfs_file_handle,
385 offset: i64,
386 seek_position: i32,
387 ) -> i64,
388>;
389pub type retro_vfs_read_t = Option<
390 unsafe extern "C" fn(stream: *mut retro_vfs_file_handle, s: *mut c_void, len: u64) -> i64,
391>;
392pub type retro_vfs_write_t = Option<
393 unsafe extern "C" fn(stream: *mut retro_vfs_file_handle, s: *const c_void, len: u64) -> i64,
394>;
395pub type retro_vfs_flush_t =
396 Option<unsafe extern "C" fn(stream: *mut retro_vfs_file_handle) -> i32>;
397pub type retro_vfs_remove_t = Option<unsafe extern "C" fn(path: *const c_char) -> i32>;
398pub type retro_vfs_rename_t =
399 Option<unsafe extern "C" fn(old_path: *const c_char, new_path: *const c_char) -> i32>;
400pub type retro_vfs_stat_t =
401 Option<unsafe extern "C" fn(path: *const c_char, size: *mut i32) -> i32>;
402pub type retro_vfs_mkdir_t = Option<unsafe extern "C" fn(dir: *const c_char) -> i32>;
403pub type retro_vfs_opendir_t = Option<
404 unsafe extern "C" fn(dir: *const c_char, include_hidden: bool) -> *mut retro_vfs_dir_handle,
405>;
406pub type retro_vfs_readdir_t =
407 Option<unsafe extern "C" fn(dirstream: *mut retro_vfs_dir_handle) -> bool>;
408pub type retro_vfs_dirent_get_name_t =
409 Option<unsafe extern "C" fn(dirstream: *mut retro_vfs_dir_handle) -> *const c_char>;
410pub type retro_vfs_dirent_is_dir_t =
411 Option<unsafe extern "C" fn(dirstream: *mut retro_vfs_dir_handle) -> bool>;
412pub type retro_vfs_closedir_t =
413 Option<unsafe extern "C" fn(dirstream: *mut retro_vfs_dir_handle) -> i32>;
414pub type retro_perf_tick_t = u64;
415pub type retro_time_t = i64;
416pub type retro_perf_get_time_usec_t = Option<unsafe extern "C" fn() -> retro_time_t>;
417pub type retro_perf_get_counter_t = Option<unsafe extern "C" fn() -> retro_perf_tick_t>;
418pub type retro_get_cpu_features_t = Option<unsafe extern "C" fn() -> u64>;
419pub type retro_perf_log_t = Option<unsafe extern "C" fn()>;
420pub type retro_perf_register_t = Option<unsafe extern "C" fn(counter: *mut retro_perf_counter)>;
421pub type retro_perf_start_t = Option<unsafe extern "C" fn(counter: *mut retro_perf_counter)>;
422pub type retro_perf_stop_t = Option<unsafe extern "C" fn(counter: *mut retro_perf_counter)>;
423pub type retro_hw_context_reset_t = Option<unsafe extern "C" fn()>;
424pub type retro_hw_get_current_framebuffer_t = Option<unsafe extern "C" fn() -> usize>;
425pub type retro_hw_get_proc_address_t =
426 Option<unsafe extern "C" fn(sym: *const c_char) -> retro_proc_address_t>;
427
428#[repr(i32)]
429#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
430pub enum retro_hw_context_type {
431 #[default]
432 None = 0,
433 OpenGl = 1,
434 OpenGlEs2 = 2,
435 OpenGlCore = 3,
436 OpenGlEs3 = 4,
437 OpenGlEsVersion = 5,
438 Vulkan = 6,
439 D3d11 = 7,
440 D3d10 = 8,
441 D3d12 = 9,
442 D3d9 = 10,
443}
444
445#[repr(i32)]
446#[derive(Clone, Copy, Debug, PartialEq, Eq)]
447pub enum retro_hw_render_interface_type {
448 Vulkan = 0,
449 D3d9 = 1,
450 D3d10 = 2,
451 D3d11 = 3,
452 D3d12 = 4,
453 GskitPs2 = 5,
454}
455
456#[repr(i32)]
457#[derive(Clone, Copy, Debug, PartialEq, Eq)]
458pub enum retro_hw_render_context_negotiation_interface_type {
459 Vulkan = 0,
460}
461
462#[repr(i32)]
463#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
464pub enum retro_pixel_format {
465 #[default]
466 _0Rgb1555 = 0,
467 Xrgb8888 = 1,
468 Rgb565 = 2,
469}
470
471#[repr(u32)]
472#[derive(Clone, Copy, Debug, PartialEq, Eq)]
473pub enum retro_camera_buffer {
474 OpenGlTexture = 0,
475 RawFramebuffer = 1,
476}
477
478#[repr(i32)]
479#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
480pub enum retro_rumble_effect {
481 #[default]
482 Strong = 0,
483 Weak = 1,
484}
485
486#[repr(i32)]
487#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
488pub enum retro_sensor_action {
489 #[default]
490 AccelerometerEnable = 0,
491 AccelerometerDisable = 1,
492 GyroscopeEnable = 2,
493 GyroscopeDisable = 3,
494 IlluminanceEnable = 4,
495 IlluminanceDisable = 5,
496}
497
498#[repr(i32)]
499#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
500pub enum retro_log_level {
501 #[default]
502 Debug = 0,
503 Info = 1,
504 Warn = 2,
505 Error = 3,
506}
507
508#[repr(i32)]
509#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
510pub enum retro_message_target {
511 #[default]
512 All = 0,
513 Osd = 1,
514 Log = 2,
515}
516
517#[repr(i32)]
518#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
519pub enum retro_message_type {
520 #[default]
521 Notification = 0,
522 NotificationAlt = 1,
523 Status = 2,
524 Progress = 3,
525}
526
527#[repr(i32)]
528#[allow(dead_code)]
529#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
530pub enum retro_power_state {
531 #[default]
532 Unknown = 0,
533 Discharging = 1,
534 Charging = 2,
535 Charged = 3,
536 PluggedIn = 4,
537}
538
539#[repr(i32)]
540#[allow(dead_code)]
541#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
542pub enum retro_savestate_context {
543 #[default]
544 Normal = 0,
545 RunaheadSameInstance = 1,
546 RunaheadSameBinary = 2,
547 RollbackNetplay = 3,
548 Unknown = i32::MAX,
549}
550
551#[repr(i32)]
552#[allow(dead_code)]
553#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
554pub enum retro_language {
555 #[default]
556 English = 0,
557 Japanese = 1,
558 French = 2,
559 Spanish = 3,
560 German = 4,
561 Italian = 5,
562 Dutch = 6,
563 PortugueseBrazil = 7,
564 PortuguesePortugal = 8,
565 Russian = 9,
566 Korean = 10,
567 ChineseTraditional = 11,
568 ChineseSimplified = 12,
569 Esperanto = 13,
570 Polish = 14,
571 Vietnamese = 15,
572 Arabic = 16,
573 Greek = 17,
574 Turkish = 18,
575 Slovak = 19,
576 Persian = 20,
577 Hebrew = 21,
578 Asturian = 22,
579 Finnish = 23,
580 Indonesian = 24,
581 Swedish = 25,
582 Ukrainian = 26,
583 Czech = 27,
584 CatalanValencia = 28,
585 Catalan = 29,
586 BritishEnglish = 30,
587 Hungarian = 31,
588 Belarusian = 32,
589 Galician = 33,
590 Norwegian = 34,
591 Irish = 35,
592}
593
594const _: () = {
595 assert!(std::mem::size_of::<retro_language>() == 4);
596 assert!(std::mem::align_of::<retro_language>() == 4);
597 assert!(std::mem::size_of::<retro_message_target>() == 4);
598 assert!(std::mem::align_of::<retro_message_target>() == 4);
599 assert!(std::mem::size_of::<retro_message_type>() == 4);
600 assert!(std::mem::align_of::<retro_message_type>() == 4);
601 assert!(std::mem::size_of::<retro_power_state>() == 4);
602 assert!(std::mem::align_of::<retro_power_state>() == 4);
603 assert!(std::mem::size_of::<retro_savestate_context>() == 4);
604 assert!(std::mem::align_of::<retro_savestate_context>() == 4);
605 assert!(std::mem::size_of::<retro_rumble_effect>() == 4);
606 assert!(std::mem::align_of::<retro_rumble_effect>() == 4);
607};
608
609#[repr(C)]
610#[derive(Clone, Copy, Debug)]
611pub struct retro_system_info {
612 pub library_name: *const c_char,
613 pub library_version: *const c_char,
614 pub valid_extensions: *const c_char,
615 pub need_fullpath: bool,
616 pub block_extract: bool,
617}
618
619impl Default for retro_system_info {
620 fn default() -> Self {
621 Self {
622 library_name: std::ptr::null(),
623 library_version: std::ptr::null(),
624 valid_extensions: std::ptr::null(),
625 need_fullpath: false,
626 block_extract: false,
627 }
628 }
629}
630
631#[repr(C)]
632#[derive(Clone, Copy, Debug, Default)]
633pub struct retro_game_geometry {
634 pub base_width: u32,
635 pub base_height: u32,
636 pub max_width: u32,
637 pub max_height: u32,
638 pub aspect_ratio: f32,
639}
640
641#[repr(C)]
642#[derive(Clone, Copy, Debug, Default)]
643pub struct retro_system_timing {
644 pub fps: f64,
645 pub sample_rate: f64,
646}
647
648#[repr(C)]
649#[derive(Clone, Copy, Debug)]
650pub struct retro_message {
651 pub msg: *const c_char,
652 pub frames: u32,
653}
654
655impl Default for retro_message {
656 fn default() -> Self {
657 Self {
658 msg: std::ptr::null(),
659 frames: 0,
660 }
661 }
662}
663
664#[repr(C)]
665#[derive(Clone, Copy, Debug)]
666pub struct retro_message_ext {
667 pub msg: *const c_char,
668 pub duration: u32,
669 pub priority: u32,
670 pub level: retro_log_level,
671 pub target: retro_message_target,
672 pub type_: retro_message_type,
673 pub progress: i8,
674}
675
676impl Default for retro_message_ext {
677 fn default() -> Self {
678 Self {
679 msg: std::ptr::null(),
680 duration: 0,
681 priority: 0,
682 level: retro_log_level::Info,
683 target: retro_message_target::Osd,
684 type_: retro_message_type::Notification,
685 progress: -1,
686 }
687 }
688}
689
690#[repr(C)]
691#[derive(Clone, Copy, Debug)]
692pub struct retro_input_descriptor {
693 pub port: u32,
694 pub device: u32,
695 pub index: u32,
696 pub id: u32,
697 pub description: *const c_char,
698}
699
700impl Default for retro_input_descriptor {
701 fn default() -> Self {
702 Self {
703 port: 0,
704 device: 0,
705 index: 0,
706 id: 0,
707 description: std::ptr::null(),
708 }
709 }
710}
711
712#[repr(C)]
713#[derive(Clone, Copy, Debug)]
714pub struct retro_device_power {
715 pub state: retro_power_state,
716 pub seconds: i32,
717 pub percent: i8,
718}
719
720impl Default for retro_device_power {
721 fn default() -> Self {
722 Self {
723 state: retro_power_state::Unknown,
724 seconds: RETRO_POWERSTATE_NO_ESTIMATE,
725 percent: -1,
726 }
727 }
728}
729
730#[repr(C)]
731#[derive(Clone, Copy, Debug)]
732pub struct retro_memory_descriptor {
733 pub flags: u64,
734 pub ptr: *mut c_void,
735 pub offset: usize,
736 pub start: usize,
737 pub select: usize,
738 pub disconnect: usize,
739 pub len: usize,
740 pub addrspace: *const c_char,
741}
742
743impl Default for retro_memory_descriptor {
744 fn default() -> Self {
745 Self {
746 flags: 0,
747 ptr: std::ptr::null_mut(),
748 offset: 0,
749 start: 0,
750 select: 0,
751 disconnect: 0,
752 len: 0,
753 addrspace: std::ptr::null(),
754 }
755 }
756}
757
758#[repr(C)]
759#[derive(Clone, Copy, Debug)]
760pub struct retro_memory_map {
761 pub descriptors: *const retro_memory_descriptor,
762 pub num_descriptors: u32,
763}
764
765impl Default for retro_memory_map {
766 fn default() -> Self {
767 Self {
768 descriptors: std::ptr::null(),
769 num_descriptors: 0,
770 }
771 }
772}
773
774#[repr(C)]
775#[derive(Clone, Copy, Debug)]
776pub struct retro_controller_description {
777 pub desc: *const c_char,
778 pub id: u32,
779}
780
781impl Default for retro_controller_description {
782 fn default() -> Self {
783 Self {
784 desc: std::ptr::null(),
785 id: 0,
786 }
787 }
788}
789
790#[repr(C)]
791#[derive(Clone, Copy, Debug)]
792pub struct retro_controller_info {
793 pub types: *const retro_controller_description,
794 pub num_types: u32,
795}
796
797impl Default for retro_controller_info {
798 fn default() -> Self {
799 Self {
800 types: std::ptr::null(),
801 num_types: 0,
802 }
803 }
804}
805
806#[repr(C)]
807#[derive(Clone, Copy, Debug)]
808pub struct retro_framebuffer {
809 pub data: *mut c_void,
810 pub width: u32,
811 pub height: u32,
812 pub pitch: usize,
813 pub format: retro_pixel_format,
814 pub access_flags: u32,
815 pub memory_flags: u32,
816}
817
818impl Default for retro_framebuffer {
819 fn default() -> Self {
820 Self {
821 data: std::ptr::null_mut(),
822 width: 0,
823 height: 0,
824 pitch: 0,
825 format: retro_pixel_format::default(),
826 access_flags: 0,
827 memory_flags: 0,
828 }
829 }
830}
831
832#[repr(C)]
833#[derive(Clone, Copy, Debug, Default)]
834pub struct retro_led_interface {
835 pub set_led_state: retro_set_led_state_t,
836}
837
838#[repr(C)]
839#[derive(Clone, Copy, Debug, Default)]
840pub struct retro_rumble_interface {
841 pub set_rumble_state: retro_set_rumble_state_t,
842}
843
844#[repr(C)]
845#[derive(Clone, Copy, Debug)]
846pub struct retro_perf_counter {
847 pub ident: *const c_char,
848 pub start: retro_perf_tick_t,
849 pub total: retro_perf_tick_t,
850 pub call_cnt: retro_perf_tick_t,
851 pub registered: bool,
852}
853
854impl Default for retro_perf_counter {
855 fn default() -> Self {
856 Self {
857 ident: std::ptr::null(),
858 start: 0,
859 total: 0,
860 call_cnt: 0,
861 registered: false,
862 }
863 }
864}
865
866#[repr(C)]
867#[derive(Clone, Copy, Debug, Default)]
868pub struct retro_perf_callback {
869 pub get_time_usec: retro_perf_get_time_usec_t,
870 pub get_cpu_features: retro_get_cpu_features_t,
871 pub get_perf_counter: retro_perf_get_counter_t,
872 pub perf_register: retro_perf_register_t,
873 pub perf_start: retro_perf_start_t,
874 pub perf_stop: retro_perf_stop_t,
875 pub perf_log: retro_perf_log_t,
876}
877
878#[repr(C)]
879#[derive(Clone, Copy, Debug, Default)]
880pub struct retro_keyboard_callback {
881 pub callback: retro_keyboard_event_t,
882}
883
884#[repr(C)]
885#[derive(Clone, Copy, Debug, Default)]
886pub struct retro_sensor_interface {
887 pub set_sensor_state: retro_set_sensor_state_t,
888 pub get_sensor_input: retro_sensor_get_input_t,
889}
890
891#[repr(C)]
892#[derive(Clone, Copy, Debug, Default)]
893pub struct retro_camera_callback {
894 pub caps: u64,
895 pub width: u32,
896 pub height: u32,
897 pub start: retro_camera_start_t,
898 pub stop: retro_camera_stop_t,
899 pub frame_raw_framebuffer: retro_camera_frame_raw_framebuffer_t,
900 pub frame_opengl_texture: retro_camera_frame_opengl_texture_t,
901 pub initialized: retro_camera_lifetime_status_t,
902 pub deinitialized: retro_camera_lifetime_status_t,
903}
904
905#[repr(C)]
906#[derive(Clone, Copy, Debug, Default)]
907pub struct retro_location_callback {
908 pub start: retro_location_start_t,
909 pub stop: retro_location_stop_t,
910 pub get_position: retro_location_get_position_t,
911 pub set_interval: retro_location_set_interval_t,
912 pub initialized: retro_location_lifetime_status_t,
913 pub deinitialized: retro_location_lifetime_status_t,
914}
915
916#[repr(C)]
917#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
918pub struct retro_subsystem_memory_info {
919 pub extension: *const c_char,
920 pub memory_type: u32,
921}
922
923#[repr(C)]
924#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
925pub struct retro_subsystem_rom_info {
926 pub desc: *const c_char,
927 pub valid_extensions: *const c_char,
928 pub need_fullpath: bool,
929 pub block_extract: bool,
930 pub required: bool,
931 pub memory: *const retro_subsystem_memory_info,
932 pub num_memory: u32,
933}
934
935#[repr(C)]
936#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
937pub struct retro_subsystem_info {
938 pub desc: *const c_char,
939 pub ident: *const c_char,
940 pub roms: *const retro_subsystem_rom_info,
941 pub num_roms: u32,
942 pub id: u32,
943}
944
945#[repr(C)]
946#[derive(Clone, Copy, Debug, Default)]
947pub struct retro_disk_control_callback {
948 pub set_eject_state: retro_set_eject_state_t,
949 pub get_eject_state: retro_get_eject_state_t,
950 pub get_image_index: retro_get_image_index_t,
951 pub set_image_index: retro_set_image_index_t,
952 pub get_num_images: retro_get_num_images_t,
953 pub replace_image_index: retro_replace_image_index_t,
954 pub add_image_index: retro_add_image_index_t,
955}
956
957#[repr(C)]
958#[derive(Clone, Copy, Debug, Default)]
959pub struct retro_disk_control_ext_callback {
960 pub set_eject_state: retro_set_eject_state_t,
961 pub get_eject_state: retro_get_eject_state_t,
962 pub get_image_index: retro_get_image_index_t,
963 pub set_image_index: retro_set_image_index_t,
964 pub get_num_images: retro_get_num_images_t,
965 pub replace_image_index: retro_replace_image_index_t,
966 pub add_image_index: retro_add_image_index_t,
967 pub set_initial_image: retro_set_initial_image_t,
968 pub get_image_path: retro_get_image_path_t,
969 pub get_image_label: retro_get_image_label_t,
970}
971
972#[repr(C)]
973#[derive(Clone, Copy, Debug, Default)]
974pub struct retro_netpacket_callback {
975 pub start: retro_netpacket_start_t,
976 pub receive: retro_netpacket_receive_t,
977 pub stop: retro_netpacket_stop_t,
978 pub poll: retro_netpacket_poll_t,
979 pub connected: retro_netpacket_connected_t,
980 pub disconnected: retro_netpacket_disconnected_t,
981 pub protocol_version: *const c_char,
982}
983
984#[repr(C)]
985#[derive(Debug)]
986pub struct retro_microphone {
987 _private: [u8; 0],
988}
989
990#[repr(C)]
991#[derive(Debug)]
992pub struct retro_vfs_file_handle {
993 _private: [u8; 0],
994}
995
996#[repr(C)]
997#[derive(Debug)]
998pub struct retro_vfs_dir_handle {
999 _private: [u8; 0],
1000}
1001
1002#[repr(C)]
1003#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
1004pub struct retro_microphone_params {
1005 pub rate: u32,
1006}
1007
1008#[repr(C)]
1009#[derive(Clone, Copy, Debug, Default)]
1010pub struct retro_microphone_interface {
1011 pub interface_version: u32,
1012 pub open_mic: retro_open_mic_t,
1013 pub close_mic: retro_close_mic_t,
1014 pub get_params: retro_get_mic_params_t,
1015 pub set_mic_state: retro_set_mic_state_t,
1016 pub get_mic_state: retro_get_mic_state_t,
1017 pub read_mic: retro_read_mic_t,
1018}
1019
1020#[repr(C)]
1021#[derive(Clone, Copy, Debug, Default)]
1022pub struct retro_vfs_interface {
1023 pub get_path: retro_vfs_get_path_t,
1024 pub open: retro_vfs_open_t,
1025 pub close: retro_vfs_close_t,
1026 pub size: retro_vfs_size_t,
1027 pub tell: retro_vfs_tell_t,
1028 pub seek: retro_vfs_seek_t,
1029 pub read: retro_vfs_read_t,
1030 pub write: retro_vfs_write_t,
1031 pub flush: retro_vfs_flush_t,
1032 pub remove: retro_vfs_remove_t,
1033 pub rename: retro_vfs_rename_t,
1034 pub truncate: retro_vfs_truncate_t,
1035 pub stat: retro_vfs_stat_t,
1036 pub mkdir: retro_vfs_mkdir_t,
1037 pub opendir: retro_vfs_opendir_t,
1038 pub readdir: retro_vfs_readdir_t,
1039 pub dirent_get_name: retro_vfs_dirent_get_name_t,
1040 pub dirent_is_dir: retro_vfs_dirent_is_dir_t,
1041 pub closedir: retro_vfs_closedir_t,
1042}
1043
1044#[repr(C)]
1045#[derive(Clone, Copy, Debug, Default)]
1046pub struct retro_vfs_interface_info {
1047 pub required_interface_version: u32,
1048 pub iface: *mut retro_vfs_interface,
1049}
1050
1051#[repr(C)]
1052#[derive(Clone, Copy, Debug, Default)]
1053pub struct retro_midi_interface {
1054 pub input_enabled: retro_midi_input_enabled_t,
1055 pub output_enabled: retro_midi_output_enabled_t,
1056 pub read: retro_midi_read_t,
1057 pub write: retro_midi_write_t,
1058 pub flush: retro_midi_flush_t,
1059}
1060
1061#[repr(C)]
1062#[derive(Clone, Copy, Debug, Default)]
1063pub struct retro_audio_callback {
1064 pub callback: retro_audio_callback_t,
1065 pub set_state: retro_audio_set_state_callback_t,
1066}
1067
1068#[repr(C)]
1069#[derive(Clone, Copy, Debug, Default)]
1070pub struct retro_audio_buffer_status_callback {
1071 pub callback: retro_audio_buffer_status_callback_t,
1072}
1073
1074#[repr(C)]
1075#[derive(Clone, Copy, Debug, Default)]
1076pub struct retro_frame_time_callback {
1077 pub callback: retro_frame_time_callback_t,
1078 pub reference: retro_usec_t,
1079}
1080
1081#[repr(C)]
1082#[derive(Clone, Copy, Debug, Default)]
1083pub struct retro_get_proc_address_interface {
1084 pub get_proc_address: retro_get_proc_address_t,
1085}
1086
1087#[repr(C)]
1088#[derive(Clone, Copy, Debug, Default, PartialEq)]
1089pub struct retro_fastforwarding_override {
1090 pub ratio: f32,
1091 pub fastforward: bool,
1092 pub notification: bool,
1093 pub inhibit_toggle: bool,
1094}
1095
1096#[repr(C)]
1097#[derive(Clone, Copy, Debug, Default, PartialEq)]
1098pub struct retro_throttle_state {
1099 pub mode: u32,
1100 pub rate: f32,
1101}
1102
1103#[repr(C)]
1104#[derive(Clone, Copy, Debug, Default)]
1105pub struct retro_system_av_info {
1106 pub geometry: retro_game_geometry,
1107 pub timing: retro_system_timing,
1108}
1109
1110#[repr(C)]
1111#[derive(Clone, Copy, Debug)]
1112pub struct retro_variable {
1113 pub key: *const c_char,
1114 pub value: *const c_char,
1115}
1116
1117impl Default for retro_variable {
1118 fn default() -> Self {
1119 Self {
1120 key: std::ptr::null(),
1121 value: std::ptr::null(),
1122 }
1123 }
1124}
1125
1126#[repr(C)]
1127#[derive(Clone, Copy, Debug, Default)]
1128pub struct retro_core_option_display {
1129 pub key: *const c_char,
1130 pub visible: bool,
1131}
1132
1133#[repr(C)]
1134#[derive(Clone, Copy, Debug, Default)]
1135pub struct retro_core_option_value {
1136 pub value: *const c_char,
1137 pub label: *const c_char,
1138}
1139
1140#[repr(C)]
1141#[derive(Clone, Copy, Debug)]
1142pub struct retro_core_option_definition {
1143 pub key: *const c_char,
1144 pub desc: *const c_char,
1145 pub info: *const c_char,
1146 pub values: [retro_core_option_value; RETRO_NUM_CORE_OPTION_VALUES_MAX],
1147 pub default_value: *const c_char,
1148}
1149
1150impl Default for retro_core_option_definition {
1151 fn default() -> Self {
1152 Self {
1153 key: std::ptr::null(),
1154 desc: std::ptr::null(),
1155 info: std::ptr::null(),
1156 values: [retro_core_option_value::default(); RETRO_NUM_CORE_OPTION_VALUES_MAX],
1157 default_value: std::ptr::null(),
1158 }
1159 }
1160}
1161
1162#[repr(C)]
1163#[derive(Clone, Copy, Debug, Default)]
1164pub struct retro_core_options_intl {
1165 pub us: *mut retro_core_option_definition,
1166 pub local: *mut retro_core_option_definition,
1167}
1168
1169#[repr(C)]
1170#[derive(Clone, Copy, Debug, Default)]
1171pub struct retro_core_option_v2_category {
1172 pub key: *const c_char,
1173 pub desc: *const c_char,
1174 pub info: *const c_char,
1175}
1176
1177#[repr(C)]
1178#[derive(Clone, Copy, Debug)]
1179pub struct retro_core_option_v2_definition {
1180 pub key: *const c_char,
1181 pub desc: *const c_char,
1182 pub desc_categorized: *const c_char,
1183 pub info: *const c_char,
1184 pub info_categorized: *const c_char,
1185 pub category_key: *const c_char,
1186 pub values: [retro_core_option_value; RETRO_NUM_CORE_OPTION_VALUES_MAX],
1187 pub default_value: *const c_char,
1188}
1189
1190impl Default for retro_core_option_v2_definition {
1191 fn default() -> Self {
1192 Self {
1193 key: std::ptr::null(),
1194 desc: std::ptr::null(),
1195 desc_categorized: std::ptr::null(),
1196 info: std::ptr::null(),
1197 info_categorized: std::ptr::null(),
1198 category_key: std::ptr::null(),
1199 values: [retro_core_option_value::default(); RETRO_NUM_CORE_OPTION_VALUES_MAX],
1200 default_value: std::ptr::null(),
1201 }
1202 }
1203}
1204
1205#[repr(C)]
1206#[derive(Clone, Copy, Debug, Default)]
1207pub struct retro_core_options_v2 {
1208 pub categories: *mut retro_core_option_v2_category,
1209 pub definitions: *mut retro_core_option_v2_definition,
1210}
1211
1212#[repr(C)]
1213#[derive(Clone, Copy, Debug, Default)]
1214pub struct retro_core_options_v2_intl {
1215 pub us: *mut retro_core_options_v2,
1216 pub local: *mut retro_core_options_v2,
1217}
1218
1219#[repr(C)]
1220#[derive(Clone, Copy, Debug, Default)]
1221pub struct retro_core_options_update_display_callback {
1222 pub callback: retro_core_options_update_display_callback_t,
1223}
1224
1225#[repr(C)]
1226#[derive(Clone, Copy, Debug, Default)]
1227pub struct retro_log_callback {
1228 pub log: retro_log_printf_t,
1229}
1230
1231#[repr(C)]
1232#[derive(Clone, Copy, Debug)]
1233pub struct retro_system_content_info_override {
1234 pub extensions: *const c_char,
1235 pub need_fullpath: bool,
1236 pub persistent_data: bool,
1237}
1238
1239impl Default for retro_system_content_info_override {
1240 fn default() -> Self {
1241 Self {
1242 extensions: std::ptr::null(),
1243 need_fullpath: false,
1244 persistent_data: false,
1245 }
1246 }
1247}
1248
1249#[repr(C)]
1250#[derive(Clone, Copy, Debug)]
1251pub struct retro_game_info {
1252 pub path: *const c_char,
1253 pub data: *const c_void,
1254 pub size: usize,
1255 pub meta: *const c_char,
1256}
1257
1258impl Default for retro_game_info {
1259 fn default() -> Self {
1260 Self {
1261 path: std::ptr::null(),
1262 data: std::ptr::null(),
1263 size: 0,
1264 meta: std::ptr::null(),
1265 }
1266 }
1267}
1268
1269#[repr(C)]
1270#[derive(Clone, Copy, Debug)]
1271pub struct retro_game_info_ext {
1272 pub full_path: *const c_char,
1273 pub archive_path: *const c_char,
1274 pub archive_file: *const c_char,
1275 pub dir: *const c_char,
1276 pub name: *const c_char,
1277 pub ext: *const c_char,
1278 pub meta: *const c_char,
1279 pub data: *const c_void,
1280 pub size: usize,
1281 pub file_in_archive: bool,
1282 pub persistent_data: bool,
1283}
1284
1285impl Default for retro_game_info_ext {
1286 fn default() -> Self {
1287 Self {
1288 full_path: std::ptr::null(),
1289 archive_path: std::ptr::null(),
1290 archive_file: std::ptr::null(),
1291 dir: std::ptr::null(),
1292 name: std::ptr::null(),
1293 ext: std::ptr::null(),
1294 meta: std::ptr::null(),
1295 data: std::ptr::null(),
1296 size: 0,
1297 file_in_archive: false,
1298 persistent_data: false,
1299 }
1300 }
1301}
1302
1303#[repr(C)]
1304#[derive(Clone, Copy, Debug, Default)]
1305pub struct retro_hw_render_callback {
1306 pub context_type: retro_hw_context_type,
1307 pub context_reset: retro_hw_context_reset_t,
1308 pub get_current_framebuffer: retro_hw_get_current_framebuffer_t,
1309 pub get_proc_address: retro_hw_get_proc_address_t,
1310 pub depth: bool,
1311 pub stencil: bool,
1312 pub bottom_left_origin: bool,
1313 pub version_major: u32,
1314 pub version_minor: u32,
1315 pub cache_context: bool,
1316 pub context_destroy: retro_hw_context_reset_t,
1317 pub debug_context: bool,
1318}
1319
1320#[repr(C)]
1321#[derive(Clone, Copy, Debug, Default)]
1322pub struct retro_hw_render_interface {
1323 pub interface_type: i32,
1324 pub interface_version: u32,
1325}
1326
1327#[repr(C)]
1328#[derive(Clone, Copy, Debug, Default)]
1329pub struct retro_hw_render_context_negotiation_interface {
1330 pub interface_type: i32,
1331 pub interface_version: u32,
1332}
1333
1334#[cfg(all(target_pointer_width = "32", target_arch = "x86"))]
1337const fn max_usize(a: usize, b: usize) -> usize {
1338 if a > b { a } else { b }
1339}
1340
1341#[cfg(all(target_pointer_width = "32", target_arch = "x86"))]
1342const _: () = {
1343 assert!(std::mem::size_of::<retro_system_info>() == 16);
1344 assert!(std::mem::align_of::<retro_system_info>() == 4);
1345 assert!(std::mem::offset_of!(retro_system_info, need_fullpath) == 12);
1346
1347 assert!(std::mem::size_of::<retro_system_av_info>() == 40);
1348
1349 assert!(std::mem::size_of::<retro_message>() == 8);
1350 assert!(std::mem::align_of::<retro_message>() == 4);
1351 assert!(std::mem::offset_of!(retro_message, msg) == 0);
1352 assert!(std::mem::offset_of!(retro_message, frames) == 4);
1353
1354 assert!(std::mem::size_of::<retro_message_ext>() == 28);
1355 assert!(std::mem::align_of::<retro_message_ext>() == 4);
1356 assert!(std::mem::offset_of!(retro_message_ext, msg) == 0);
1357 assert!(std::mem::offset_of!(retro_message_ext, duration) == 4);
1358 assert!(std::mem::offset_of!(retro_message_ext, priority) == 8);
1359 assert!(std::mem::offset_of!(retro_message_ext, level) == 12);
1360 assert!(std::mem::offset_of!(retro_message_ext, target) == 16);
1361 assert!(std::mem::offset_of!(retro_message_ext, type_) == 20);
1362 assert!(std::mem::offset_of!(retro_message_ext, progress) == 24);
1363
1364 assert!(std::mem::size_of::<retro_input_descriptor>() == 20);
1365 assert!(std::mem::align_of::<retro_input_descriptor>() == 4);
1366 assert!(std::mem::offset_of!(retro_input_descriptor, port) == 0);
1367 assert!(std::mem::offset_of!(retro_input_descriptor, device) == 4);
1368 assert!(std::mem::offset_of!(retro_input_descriptor, index) == 8);
1369 assert!(std::mem::offset_of!(retro_input_descriptor, id) == 12);
1370 assert!(std::mem::offset_of!(retro_input_descriptor, description) == 16);
1371
1372 assert!(std::mem::size_of::<retro_device_power>() == 12);
1373 assert!(std::mem::align_of::<retro_device_power>() == 4);
1374 assert!(std::mem::offset_of!(retro_device_power, state) == 0);
1375 assert!(std::mem::offset_of!(retro_device_power, seconds) == 4);
1376 assert!(std::mem::offset_of!(retro_device_power, percent) == 8);
1377
1378 let memory_descriptor_ptr_offset =
1379 (std::mem::size_of::<u64>() + std::mem::align_of::<*mut c_void>() - 1)
1380 & !(std::mem::align_of::<*mut c_void>() - 1);
1381 let memory_descriptor_offset_offset =
1382 memory_descriptor_ptr_offset + std::mem::size_of::<*mut c_void>();
1383 let memory_descriptor_start_offset =
1384 memory_descriptor_offset_offset + std::mem::size_of::<usize>();
1385 let memory_descriptor_select_offset =
1386 memory_descriptor_start_offset + std::mem::size_of::<usize>();
1387 let memory_descriptor_disconnect_offset =
1388 memory_descriptor_select_offset + std::mem::size_of::<usize>();
1389 let memory_descriptor_len_offset =
1390 memory_descriptor_disconnect_offset + std::mem::size_of::<usize>();
1391 let memory_descriptor_addrspace_offset =
1392 memory_descriptor_len_offset + std::mem::size_of::<usize>();
1393 let memory_descriptor_size = (memory_descriptor_addrspace_offset
1394 + std::mem::size_of::<*const c_char>()
1395 + std::mem::align_of::<retro_memory_descriptor>()
1396 - 1)
1397 & !(std::mem::align_of::<retro_memory_descriptor>() - 1);
1398 assert!(std::mem::size_of::<retro_memory_descriptor>() == memory_descriptor_size);
1399 assert!(
1400 std::mem::align_of::<retro_memory_descriptor>()
1401 == max_usize(
1402 max_usize(
1403 max_usize(
1404 std::mem::align_of::<u64>(),
1405 std::mem::align_of::<*mut c_void>(),
1406 ),
1407 std::mem::align_of::<usize>(),
1408 ),
1409 std::mem::align_of::<*const c_char>(),
1410 )
1411 );
1412 assert!(std::mem::offset_of!(retro_memory_descriptor, flags) == 0);
1413 assert!(std::mem::offset_of!(retro_memory_descriptor, ptr) == memory_descriptor_ptr_offset);
1414 assert!(
1415 std::mem::offset_of!(retro_memory_descriptor, offset) == memory_descriptor_offset_offset
1416 );
1417 assert!(std::mem::offset_of!(retro_memory_descriptor, start) == memory_descriptor_start_offset);
1418 assert!(
1419 std::mem::offset_of!(retro_memory_descriptor, select) == memory_descriptor_select_offset
1420 );
1421 assert!(
1422 std::mem::offset_of!(retro_memory_descriptor, disconnect)
1423 == memory_descriptor_disconnect_offset
1424 );
1425 assert!(std::mem::offset_of!(retro_memory_descriptor, len) == memory_descriptor_len_offset);
1426 assert!(
1427 std::mem::offset_of!(retro_memory_descriptor, addrspace)
1428 == memory_descriptor_addrspace_offset
1429 );
1430
1431 let memory_map_num_descriptors_offset =
1432 (std::mem::size_of::<*const retro_memory_descriptor>() + std::mem::align_of::<u32>() - 1)
1433 & !(std::mem::align_of::<u32>() - 1);
1434 let memory_map_size = (memory_map_num_descriptors_offset
1435 + std::mem::size_of::<u32>()
1436 + std::mem::align_of::<retro_memory_map>()
1437 - 1)
1438 & !(std::mem::align_of::<retro_memory_map>() - 1);
1439 assert!(std::mem::size_of::<retro_memory_map>() == memory_map_size);
1440 assert!(
1441 std::mem::align_of::<retro_memory_map>()
1442 == max_usize(
1443 std::mem::align_of::<*const retro_memory_descriptor>(),
1444 std::mem::align_of::<u32>(),
1445 )
1446 );
1447 assert!(std::mem::offset_of!(retro_memory_map, descriptors) == 0);
1448 assert!(
1449 std::mem::offset_of!(retro_memory_map, num_descriptors)
1450 == memory_map_num_descriptors_offset
1451 );
1452
1453 assert!(std::mem::size_of::<retro_controller_description>() == 8);
1454 assert!(std::mem::align_of::<retro_controller_description>() == 4);
1455 assert!(std::mem::offset_of!(retro_controller_description, desc) == 0);
1456 assert!(std::mem::offset_of!(retro_controller_description, id) == 4);
1457
1458 assert!(std::mem::size_of::<retro_controller_info>() == 8);
1459 assert!(std::mem::align_of::<retro_controller_info>() == 4);
1460 assert!(std::mem::offset_of!(retro_controller_info, types) == 0);
1461 assert!(std::mem::offset_of!(retro_controller_info, num_types) == 4);
1462
1463 assert!(std::mem::size_of::<retro_framebuffer>() == 28);
1464 assert!(std::mem::align_of::<retro_framebuffer>() == 4);
1465 assert!(std::mem::offset_of!(retro_framebuffer, data) == 0);
1466 assert!(std::mem::offset_of!(retro_framebuffer, width) == 4);
1467 assert!(std::mem::offset_of!(retro_framebuffer, height) == 8);
1468 assert!(std::mem::offset_of!(retro_framebuffer, pitch) == 12);
1469 assert!(std::mem::offset_of!(retro_framebuffer, format) == 16);
1470 assert!(std::mem::offset_of!(retro_framebuffer, access_flags) == 20);
1471 assert!(std::mem::offset_of!(retro_framebuffer, memory_flags) == 24);
1472
1473 assert!(std::mem::size_of::<retro_led_interface>() == 4);
1474 assert!(std::mem::align_of::<retro_led_interface>() == 4);
1475 assert!(std::mem::offset_of!(retro_led_interface, set_led_state) == 0);
1476
1477 assert!(std::mem::size_of::<retro_rumble_interface>() == 4);
1478 assert!(std::mem::align_of::<retro_rumble_interface>() == 4);
1479 assert!(std::mem::offset_of!(retro_rumble_interface, set_rumble_state) == 0);
1480
1481 assert!(std::mem::size_of::<retro_sensor_interface>() == 8);
1482 assert!(std::mem::align_of::<retro_sensor_interface>() == 4);
1483 assert!(std::mem::offset_of!(retro_sensor_interface, set_sensor_state) == 0);
1484 assert!(std::mem::offset_of!(retro_sensor_interface, get_sensor_input) == 4);
1485
1486 assert!(std::mem::size_of::<retro_camera_callback>() == 40);
1487 assert!(std::mem::align_of::<retro_camera_callback>() == 4);
1488 assert!(std::mem::offset_of!(retro_camera_callback, caps) == 0);
1489 assert!(std::mem::offset_of!(retro_camera_callback, width) == 8);
1490 assert!(std::mem::offset_of!(retro_camera_callback, height) == 12);
1491 assert!(std::mem::offset_of!(retro_camera_callback, start) == 16);
1492 assert!(std::mem::offset_of!(retro_camera_callback, stop) == 20);
1493 assert!(std::mem::offset_of!(retro_camera_callback, frame_raw_framebuffer) == 24);
1494 assert!(std::mem::offset_of!(retro_camera_callback, frame_opengl_texture) == 28);
1495 assert!(std::mem::offset_of!(retro_camera_callback, initialized) == 32);
1496 assert!(std::mem::offset_of!(retro_camera_callback, deinitialized) == 36);
1497
1498 assert!(std::mem::size_of::<retro_location_callback>() == 24);
1499 assert!(std::mem::align_of::<retro_location_callback>() == 4);
1500 assert!(std::mem::offset_of!(retro_location_callback, start) == 0);
1501 assert!(std::mem::offset_of!(retro_location_callback, stop) == 4);
1502 assert!(std::mem::offset_of!(retro_location_callback, get_position) == 8);
1503 assert!(std::mem::offset_of!(retro_location_callback, set_interval) == 12);
1504 assert!(std::mem::offset_of!(retro_location_callback, initialized) == 16);
1505 assert!(std::mem::offset_of!(retro_location_callback, deinitialized) == 20);
1506
1507 assert!(std::mem::size_of::<retro_subsystem_memory_info>() == 8);
1508 assert!(std::mem::align_of::<retro_subsystem_memory_info>() == 4);
1509 assert!(std::mem::offset_of!(retro_subsystem_memory_info, extension) == 0);
1510 assert!(std::mem::offset_of!(retro_subsystem_memory_info, memory_type) == 4);
1511
1512 assert!(std::mem::size_of::<retro_subsystem_rom_info>() == 20);
1513 assert!(std::mem::align_of::<retro_subsystem_rom_info>() == 4);
1514 assert!(std::mem::offset_of!(retro_subsystem_rom_info, desc) == 0);
1515 assert!(std::mem::offset_of!(retro_subsystem_rom_info, valid_extensions) == 4);
1516 assert!(std::mem::offset_of!(retro_subsystem_rom_info, need_fullpath) == 8);
1517 assert!(std::mem::offset_of!(retro_subsystem_rom_info, block_extract) == 9);
1518 assert!(std::mem::offset_of!(retro_subsystem_rom_info, required) == 10);
1519 assert!(std::mem::offset_of!(retro_subsystem_rom_info, memory) == 12);
1520 assert!(std::mem::offset_of!(retro_subsystem_rom_info, num_memory) == 16);
1521
1522 assert!(std::mem::size_of::<retro_subsystem_info>() == 20);
1523 assert!(std::mem::align_of::<retro_subsystem_info>() == 4);
1524 assert!(std::mem::offset_of!(retro_subsystem_info, desc) == 0);
1525 assert!(std::mem::offset_of!(retro_subsystem_info, ident) == 4);
1526 assert!(std::mem::offset_of!(retro_subsystem_info, roms) == 8);
1527 assert!(std::mem::offset_of!(retro_subsystem_info, num_roms) == 12);
1528 assert!(std::mem::offset_of!(retro_subsystem_info, id) == 16);
1529
1530 assert!(std::mem::size_of::<retro_disk_control_callback>() == 28);
1531 assert!(std::mem::align_of::<retro_disk_control_callback>() == 4);
1532 assert!(std::mem::offset_of!(retro_disk_control_callback, set_eject_state) == 0);
1533 assert!(std::mem::offset_of!(retro_disk_control_callback, get_eject_state) == 4);
1534 assert!(std::mem::offset_of!(retro_disk_control_callback, get_image_index) == 8);
1535 assert!(std::mem::offset_of!(retro_disk_control_callback, set_image_index) == 12);
1536 assert!(std::mem::offset_of!(retro_disk_control_callback, get_num_images) == 16);
1537 assert!(std::mem::offset_of!(retro_disk_control_callback, replace_image_index) == 20);
1538 assert!(std::mem::offset_of!(retro_disk_control_callback, add_image_index) == 24);
1539
1540 assert!(std::mem::size_of::<retro_disk_control_ext_callback>() == 40);
1541 assert!(std::mem::align_of::<retro_disk_control_ext_callback>() == 4);
1542 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, set_eject_state) == 0);
1543 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_eject_state) == 4);
1544 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_image_index) == 8);
1545 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, set_image_index) == 12);
1546 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_num_images) == 16);
1547 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, replace_image_index) == 20);
1548 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, add_image_index) == 24);
1549 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, set_initial_image) == 28);
1550 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_image_path) == 32);
1551 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_image_label) == 36);
1552
1553 assert!(std::mem::size_of::<retro_netpacket_callback>() == 28);
1554 assert!(std::mem::align_of::<retro_netpacket_callback>() == 4);
1555 assert!(std::mem::offset_of!(retro_netpacket_callback, start) == 0);
1556 assert!(std::mem::offset_of!(retro_netpacket_callback, receive) == 4);
1557 assert!(std::mem::offset_of!(retro_netpacket_callback, stop) == 8);
1558 assert!(std::mem::offset_of!(retro_netpacket_callback, poll) == 12);
1559 assert!(std::mem::offset_of!(retro_netpacket_callback, connected) == 16);
1560 assert!(std::mem::offset_of!(retro_netpacket_callback, disconnected) == 20);
1561 assert!(std::mem::offset_of!(retro_netpacket_callback, protocol_version) == 24);
1562
1563 assert!(std::mem::size_of::<retro_microphone_params>() == 4);
1564 assert!(std::mem::align_of::<retro_microphone_params>() == 4);
1565 assert!(std::mem::offset_of!(retro_microphone_params, rate) == 0);
1566
1567 assert!(std::mem::size_of::<retro_microphone_interface>() == 28);
1568 assert!(std::mem::align_of::<retro_microphone_interface>() == 4);
1569 assert!(std::mem::offset_of!(retro_microphone_interface, interface_version) == 0);
1570 assert!(std::mem::offset_of!(retro_microphone_interface, open_mic) == 4);
1571 assert!(std::mem::offset_of!(retro_microphone_interface, close_mic) == 8);
1572 assert!(std::mem::offset_of!(retro_microphone_interface, get_params) == 12);
1573 assert!(std::mem::offset_of!(retro_microphone_interface, set_mic_state) == 16);
1574 assert!(std::mem::offset_of!(retro_microphone_interface, get_mic_state) == 20);
1575 assert!(std::mem::offset_of!(retro_microphone_interface, read_mic) == 24);
1576
1577 assert!(std::mem::size_of::<retro_vfs_interface>() == 76);
1578 assert!(std::mem::align_of::<retro_vfs_interface>() == 4);
1579 assert!(std::mem::offset_of!(retro_vfs_interface, get_path) == 0);
1580 assert!(std::mem::offset_of!(retro_vfs_interface, open) == 4);
1581 assert!(std::mem::offset_of!(retro_vfs_interface, close) == 8);
1582 assert!(std::mem::offset_of!(retro_vfs_interface, size) == 12);
1583 assert!(std::mem::offset_of!(retro_vfs_interface, tell) == 16);
1584 assert!(std::mem::offset_of!(retro_vfs_interface, seek) == 20);
1585 assert!(std::mem::offset_of!(retro_vfs_interface, read) == 24);
1586 assert!(std::mem::offset_of!(retro_vfs_interface, write) == 28);
1587 assert!(std::mem::offset_of!(retro_vfs_interface, flush) == 32);
1588 assert!(std::mem::offset_of!(retro_vfs_interface, remove) == 36);
1589 assert!(std::mem::offset_of!(retro_vfs_interface, rename) == 40);
1590 assert!(std::mem::offset_of!(retro_vfs_interface, truncate) == 44);
1591 assert!(std::mem::offset_of!(retro_vfs_interface, stat) == 48);
1592 assert!(std::mem::offset_of!(retro_vfs_interface, mkdir) == 52);
1593 assert!(std::mem::offset_of!(retro_vfs_interface, opendir) == 56);
1594 assert!(std::mem::offset_of!(retro_vfs_interface, readdir) == 60);
1595 assert!(std::mem::offset_of!(retro_vfs_interface, dirent_get_name) == 64);
1596 assert!(std::mem::offset_of!(retro_vfs_interface, dirent_is_dir) == 68);
1597 assert!(std::mem::offset_of!(retro_vfs_interface, closedir) == 72);
1598
1599 assert!(std::mem::size_of::<retro_vfs_interface_info>() == 8);
1600 assert!(std::mem::align_of::<retro_vfs_interface_info>() == 4);
1601 assert!(std::mem::offset_of!(retro_vfs_interface_info, required_interface_version) == 0);
1602 assert!(std::mem::offset_of!(retro_vfs_interface_info, iface) == 4);
1603
1604 assert!(std::mem::size_of::<retro_midi_interface>() == 20);
1605 assert!(std::mem::align_of::<retro_midi_interface>() == 4);
1606 assert!(std::mem::offset_of!(retro_midi_interface, input_enabled) == 0);
1607 assert!(std::mem::offset_of!(retro_midi_interface, output_enabled) == 4);
1608 assert!(std::mem::offset_of!(retro_midi_interface, read) == 8);
1609 assert!(std::mem::offset_of!(retro_midi_interface, write) == 12);
1610 assert!(std::mem::offset_of!(retro_midi_interface, flush) == 16);
1611
1612 let perf_counter_start_offset =
1613 (std::mem::size_of::<*const c_char>() + std::mem::align_of::<retro_perf_tick_t>() - 1)
1614 & !(std::mem::align_of::<retro_perf_tick_t>() - 1);
1615 let perf_counter_total_offset =
1616 perf_counter_start_offset + std::mem::size_of::<retro_perf_tick_t>();
1617 let perf_counter_call_count_offset =
1618 perf_counter_total_offset + std::mem::size_of::<retro_perf_tick_t>();
1619 let perf_counter_registered_offset =
1620 perf_counter_call_count_offset + std::mem::size_of::<retro_perf_tick_t>();
1621 let perf_counter_size = (perf_counter_registered_offset
1622 + std::mem::size_of::<bool>()
1623 + std::mem::align_of::<retro_perf_counter>()
1624 - 1)
1625 & !(std::mem::align_of::<retro_perf_counter>() - 1);
1626 assert!(std::mem::size_of::<retro_perf_counter>() == perf_counter_size);
1627 assert!(
1628 std::mem::align_of::<retro_perf_counter>()
1629 == max_usize(
1630 max_usize(
1631 std::mem::align_of::<*const c_char>(),
1632 std::mem::align_of::<retro_perf_tick_t>(),
1633 ),
1634 std::mem::align_of::<bool>(),
1635 )
1636 );
1637 assert!(std::mem::offset_of!(retro_perf_counter, ident) == 0);
1638 assert!(std::mem::offset_of!(retro_perf_counter, start) == perf_counter_start_offset);
1639 assert!(std::mem::offset_of!(retro_perf_counter, total) == perf_counter_total_offset);
1640 assert!(std::mem::offset_of!(retro_perf_counter, call_cnt) == perf_counter_call_count_offset);
1641 assert!(std::mem::offset_of!(retro_perf_counter, registered) == perf_counter_registered_offset);
1642
1643 assert!(std::mem::size_of::<retro_perf_callback>() == 28);
1644 assert!(std::mem::align_of::<retro_perf_callback>() == 4);
1645 assert!(std::mem::offset_of!(retro_perf_callback, get_time_usec) == 0);
1646 assert!(std::mem::offset_of!(retro_perf_callback, get_cpu_features) == 4);
1647 assert!(std::mem::offset_of!(retro_perf_callback, get_perf_counter) == 8);
1648 assert!(std::mem::offset_of!(retro_perf_callback, perf_register) == 12);
1649 assert!(std::mem::offset_of!(retro_perf_callback, perf_start) == 16);
1650 assert!(std::mem::offset_of!(retro_perf_callback, perf_stop) == 20);
1651 assert!(std::mem::offset_of!(retro_perf_callback, perf_log) == 24);
1652
1653 assert!(std::mem::size_of::<retro_keyboard_callback>() == 4);
1654 assert!(std::mem::align_of::<retro_keyboard_callback>() == 4);
1655 assert!(std::mem::offset_of!(retro_keyboard_callback, callback) == 0);
1656
1657 assert!(std::mem::size_of::<retro_audio_callback>() == 8);
1658 assert!(std::mem::align_of::<retro_audio_callback>() == 4);
1659 assert!(std::mem::offset_of!(retro_audio_callback, callback) == 0);
1660 assert!(std::mem::offset_of!(retro_audio_callback, set_state) == 4);
1661
1662 assert!(std::mem::size_of::<retro_audio_buffer_status_callback>() == 4);
1663 assert!(std::mem::align_of::<retro_audio_buffer_status_callback>() == 4);
1664 assert!(std::mem::offset_of!(retro_audio_buffer_status_callback, callback) == 0);
1665
1666 let frame_time_reference_offset = (std::mem::size_of::<retro_frame_time_callback_t>()
1667 + std::mem::align_of::<retro_usec_t>()
1668 - 1)
1669 & !(std::mem::align_of::<retro_usec_t>() - 1);
1670 assert!(
1671 std::mem::size_of::<retro_frame_time_callback>()
1672 == frame_time_reference_offset + std::mem::size_of::<retro_usec_t>()
1673 );
1674 assert!(
1675 std::mem::align_of::<retro_frame_time_callback>()
1676 == max_usize(
1677 std::mem::align_of::<retro_frame_time_callback_t>(),
1678 std::mem::align_of::<retro_usec_t>(),
1679 )
1680 );
1681 assert!(std::mem::offset_of!(retro_frame_time_callback, callback) == 0);
1682 assert!(
1683 std::mem::offset_of!(retro_frame_time_callback, reference) == frame_time_reference_offset
1684 );
1685
1686 assert!(std::mem::size_of::<retro_get_proc_address_interface>() == 4);
1687 assert!(std::mem::align_of::<retro_get_proc_address_interface>() == 4);
1688 assert!(std::mem::offset_of!(retro_get_proc_address_interface, get_proc_address) == 0);
1689
1690 assert!(std::mem::size_of::<retro_fastforwarding_override>() == 8);
1691 assert!(std::mem::align_of::<retro_fastforwarding_override>() == 4);
1692 assert!(std::mem::offset_of!(retro_fastforwarding_override, ratio) == 0);
1693 assert!(std::mem::offset_of!(retro_fastforwarding_override, fastforward) == 4);
1694 assert!(std::mem::offset_of!(retro_fastforwarding_override, notification) == 5);
1695 assert!(std::mem::offset_of!(retro_fastforwarding_override, inhibit_toggle) == 6);
1696
1697 assert!(std::mem::size_of::<retro_throttle_state>() == 8);
1698 assert!(std::mem::align_of::<retro_throttle_state>() == 4);
1699 assert!(std::mem::offset_of!(retro_throttle_state, mode) == 0);
1700 assert!(std::mem::offset_of!(retro_throttle_state, rate) == 4);
1701
1702 assert!(std::mem::size_of::<retro_variable>() == 8);
1703 assert!(std::mem::align_of::<retro_variable>() == 4);
1704 assert!(std::mem::offset_of!(retro_variable, key) == 0);
1705 assert!(std::mem::offset_of!(retro_variable, value) == 4);
1706
1707 assert!(std::mem::size_of::<retro_core_option_display>() == 8);
1708 assert!(std::mem::align_of::<retro_core_option_display>() == 4);
1709 assert!(std::mem::offset_of!(retro_core_option_display, key) == 0);
1710 assert!(std::mem::offset_of!(retro_core_option_display, visible) == 4);
1711
1712 assert!(std::mem::size_of::<retro_core_option_value>() == 8);
1713 assert!(std::mem::align_of::<retro_core_option_value>() == 4);
1714 assert!(std::mem::offset_of!(retro_core_option_value, value) == 0);
1715 assert!(std::mem::offset_of!(retro_core_option_value, label) == 4);
1716
1717 assert!(std::mem::size_of::<retro_core_option_definition>() == 1040);
1718 assert!(std::mem::align_of::<retro_core_option_definition>() == 4);
1719 assert!(std::mem::offset_of!(retro_core_option_definition, key) == 0);
1720 assert!(std::mem::offset_of!(retro_core_option_definition, desc) == 4);
1721 assert!(std::mem::offset_of!(retro_core_option_definition, info) == 8);
1722 assert!(std::mem::offset_of!(retro_core_option_definition, values) == 12);
1723 assert!(std::mem::offset_of!(retro_core_option_definition, default_value) == 1036);
1724
1725 assert!(std::mem::size_of::<retro_core_options_intl>() == 8);
1726 assert!(std::mem::align_of::<retro_core_options_intl>() == 4);
1727 assert!(std::mem::offset_of!(retro_core_options_intl, us) == 0);
1728 assert!(std::mem::offset_of!(retro_core_options_intl, local) == 4);
1729
1730 assert!(std::mem::size_of::<retro_core_option_v2_category>() == 12);
1731 assert!(std::mem::align_of::<retro_core_option_v2_category>() == 4);
1732 assert!(std::mem::offset_of!(retro_core_option_v2_category, key) == 0);
1733 assert!(std::mem::offset_of!(retro_core_option_v2_category, desc) == 4);
1734 assert!(std::mem::offset_of!(retro_core_option_v2_category, info) == 8);
1735
1736 assert!(std::mem::size_of::<retro_core_option_v2_definition>() == 1052);
1737 assert!(std::mem::align_of::<retro_core_option_v2_definition>() == 4);
1738 assert!(std::mem::offset_of!(retro_core_option_v2_definition, key) == 0);
1739 assert!(std::mem::offset_of!(retro_core_option_v2_definition, desc) == 4);
1740 assert!(std::mem::offset_of!(retro_core_option_v2_definition, desc_categorized) == 8);
1741 assert!(std::mem::offset_of!(retro_core_option_v2_definition, info) == 12);
1742 assert!(std::mem::offset_of!(retro_core_option_v2_definition, info_categorized) == 16);
1743 assert!(std::mem::offset_of!(retro_core_option_v2_definition, category_key) == 20);
1744 assert!(std::mem::offset_of!(retro_core_option_v2_definition, values) == 24);
1745 assert!(std::mem::offset_of!(retro_core_option_v2_definition, default_value) == 1048);
1746
1747 assert!(std::mem::size_of::<retro_core_options_v2>() == 8);
1748 assert!(std::mem::align_of::<retro_core_options_v2>() == 4);
1749 assert!(std::mem::offset_of!(retro_core_options_v2, categories) == 0);
1750 assert!(std::mem::offset_of!(retro_core_options_v2, definitions) == 4);
1751
1752 assert!(std::mem::size_of::<retro_core_options_v2_intl>() == 8);
1753 assert!(std::mem::align_of::<retro_core_options_v2_intl>() == 4);
1754 assert!(std::mem::offset_of!(retro_core_options_v2_intl, us) == 0);
1755 assert!(std::mem::offset_of!(retro_core_options_v2_intl, local) == 4);
1756
1757 assert!(std::mem::size_of::<retro_core_options_update_display_callback>() == 4);
1758 assert!(std::mem::align_of::<retro_core_options_update_display_callback>() == 4);
1759 assert!(std::mem::offset_of!(retro_core_options_update_display_callback, callback) == 0);
1760
1761 assert!(std::mem::size_of::<retro_system_content_info_override>() == 8);
1762 assert!(std::mem::align_of::<retro_system_content_info_override>() == 4);
1763 assert!(std::mem::offset_of!(retro_system_content_info_override, extensions) == 0);
1764 assert!(std::mem::offset_of!(retro_system_content_info_override, need_fullpath) == 4);
1765 assert!(std::mem::offset_of!(retro_system_content_info_override, persistent_data) == 5);
1766
1767 assert!(std::mem::size_of::<retro_game_info>() == 16);
1768 assert!(std::mem::align_of::<retro_game_info>() == 4);
1769
1770 assert!(std::mem::size_of::<retro_game_info_ext>() == 40);
1771 assert!(std::mem::align_of::<retro_game_info_ext>() == 4);
1772 assert!(std::mem::offset_of!(retro_game_info_ext, full_path) == 0);
1773 assert!(std::mem::offset_of!(retro_game_info_ext, archive_path) == 4);
1774 assert!(std::mem::offset_of!(retro_game_info_ext, archive_file) == 8);
1775 assert!(std::mem::offset_of!(retro_game_info_ext, dir) == 12);
1776 assert!(std::mem::offset_of!(retro_game_info_ext, name) == 16);
1777 assert!(std::mem::offset_of!(retro_game_info_ext, ext) == 20);
1778 assert!(std::mem::offset_of!(retro_game_info_ext, meta) == 24);
1779 assert!(std::mem::offset_of!(retro_game_info_ext, data) == 28);
1780 assert!(std::mem::offset_of!(retro_game_info_ext, size) == 32);
1781 assert!(std::mem::offset_of!(retro_game_info_ext, file_in_archive) == 36);
1782 assert!(std::mem::offset_of!(retro_game_info_ext, persistent_data) == 37);
1783
1784 assert!(std::mem::size_of::<retro_hw_render_callback>() == 40);
1785 assert!(std::mem::align_of::<retro_hw_render_callback>() == 4);
1786 assert!(std::mem::offset_of!(retro_hw_render_callback, context_type) == 0);
1787 assert!(std::mem::offset_of!(retro_hw_render_callback, context_reset) == 4);
1788 assert!(std::mem::offset_of!(retro_hw_render_callback, get_current_framebuffer) == 8);
1789 assert!(std::mem::offset_of!(retro_hw_render_callback, get_proc_address) == 12);
1790 assert!(std::mem::offset_of!(retro_hw_render_callback, depth) == 16);
1791 assert!(std::mem::offset_of!(retro_hw_render_callback, stencil) == 17);
1792 assert!(std::mem::offset_of!(retro_hw_render_callback, bottom_left_origin) == 18);
1793 assert!(std::mem::offset_of!(retro_hw_render_callback, version_major) == 20);
1794 assert!(std::mem::offset_of!(retro_hw_render_callback, version_minor) == 24);
1795 assert!(std::mem::offset_of!(retro_hw_render_callback, cache_context) == 28);
1796 assert!(std::mem::offset_of!(retro_hw_render_callback, context_destroy) == 32);
1797 assert!(std::mem::offset_of!(retro_hw_render_callback, debug_context) == 36);
1798
1799 assert!(std::mem::size_of::<retro_hw_render_interface>() == 8);
1800 assert!(std::mem::align_of::<retro_hw_render_interface>() == 4);
1801 assert!(std::mem::offset_of!(retro_hw_render_interface, interface_type) == 0);
1802 assert!(std::mem::offset_of!(retro_hw_render_interface, interface_version) == 4);
1803
1804 assert!(std::mem::size_of::<retro_hw_render_context_negotiation_interface>() == 8);
1805 assert!(std::mem::align_of::<retro_hw_render_context_negotiation_interface>() == 4);
1806 assert!(
1807 std::mem::offset_of!(
1808 retro_hw_render_context_negotiation_interface,
1809 interface_type
1810 ) == 0
1811 );
1812 assert!(
1813 std::mem::offset_of!(
1814 retro_hw_render_context_negotiation_interface,
1815 interface_version
1816 ) == 4
1817 );
1818};
1819
1820#[cfg(all(target_pointer_width = "32", target_arch = "arm"))]
1825const fn max_usize(a: usize, b: usize) -> usize {
1826 if a > b { a } else { b }
1827}
1828
1829#[cfg(all(target_pointer_width = "32", target_arch = "arm"))]
1830const _: () = {
1831 assert!(std::mem::size_of::<retro_system_info>() == 16);
1832 assert!(std::mem::align_of::<retro_system_info>() == 4);
1833 assert!(std::mem::offset_of!(retro_system_info, need_fullpath) == 12);
1834
1835 assert!(std::mem::size_of::<retro_system_av_info>() == 40);
1836
1837 assert!(std::mem::size_of::<retro_message>() == 8);
1838 assert!(std::mem::align_of::<retro_message>() == 4);
1839 assert!(std::mem::offset_of!(retro_message, msg) == 0);
1840 assert!(std::mem::offset_of!(retro_message, frames) == 4);
1841
1842 assert!(std::mem::size_of::<retro_message_ext>() == 28);
1843 assert!(std::mem::align_of::<retro_message_ext>() == 4);
1844 assert!(std::mem::offset_of!(retro_message_ext, msg) == 0);
1845 assert!(std::mem::offset_of!(retro_message_ext, duration) == 4);
1846 assert!(std::mem::offset_of!(retro_message_ext, priority) == 8);
1847 assert!(std::mem::offset_of!(retro_message_ext, level) == 12);
1848 assert!(std::mem::offset_of!(retro_message_ext, target) == 16);
1849 assert!(std::mem::offset_of!(retro_message_ext, type_) == 20);
1850 assert!(std::mem::offset_of!(retro_message_ext, progress) == 24);
1851
1852 assert!(std::mem::size_of::<retro_input_descriptor>() == 20);
1853 assert!(std::mem::align_of::<retro_input_descriptor>() == 4);
1854 assert!(std::mem::offset_of!(retro_input_descriptor, port) == 0);
1855 assert!(std::mem::offset_of!(retro_input_descriptor, device) == 4);
1856 assert!(std::mem::offset_of!(retro_input_descriptor, index) == 8);
1857 assert!(std::mem::offset_of!(retro_input_descriptor, id) == 12);
1858 assert!(std::mem::offset_of!(retro_input_descriptor, description) == 16);
1859
1860 assert!(std::mem::size_of::<retro_device_power>() == 12);
1861 assert!(std::mem::align_of::<retro_device_power>() == 4);
1862 assert!(std::mem::offset_of!(retro_device_power, state) == 0);
1863 assert!(std::mem::offset_of!(retro_device_power, seconds) == 4);
1864 assert!(std::mem::offset_of!(retro_device_power, percent) == 8);
1865
1866 let memory_descriptor_ptr_offset =
1867 (std::mem::size_of::<u64>() + std::mem::align_of::<*mut c_void>() - 1)
1868 & !(std::mem::align_of::<*mut c_void>() - 1);
1869 let memory_descriptor_offset_offset =
1870 memory_descriptor_ptr_offset + std::mem::size_of::<*mut c_void>();
1871 let memory_descriptor_start_offset =
1872 memory_descriptor_offset_offset + std::mem::size_of::<usize>();
1873 let memory_descriptor_select_offset =
1874 memory_descriptor_start_offset + std::mem::size_of::<usize>();
1875 let memory_descriptor_disconnect_offset =
1876 memory_descriptor_select_offset + std::mem::size_of::<usize>();
1877 let memory_descriptor_len_offset =
1878 memory_descriptor_disconnect_offset + std::mem::size_of::<usize>();
1879 let memory_descriptor_addrspace_offset =
1880 memory_descriptor_len_offset + std::mem::size_of::<usize>();
1881 let memory_descriptor_size = (memory_descriptor_addrspace_offset
1882 + std::mem::size_of::<*const c_char>()
1883 + std::mem::align_of::<retro_memory_descriptor>()
1884 - 1)
1885 & !(std::mem::align_of::<retro_memory_descriptor>() - 1);
1886 assert!(std::mem::size_of::<retro_memory_descriptor>() == memory_descriptor_size);
1887 assert!(
1888 std::mem::align_of::<retro_memory_descriptor>()
1889 == max_usize(
1890 max_usize(
1891 max_usize(
1892 std::mem::align_of::<u64>(),
1893 std::mem::align_of::<*mut c_void>(),
1894 ),
1895 std::mem::align_of::<usize>(),
1896 ),
1897 std::mem::align_of::<*const c_char>(),
1898 )
1899 );
1900 assert!(std::mem::offset_of!(retro_memory_descriptor, flags) == 0);
1901 assert!(std::mem::offset_of!(retro_memory_descriptor, ptr) == memory_descriptor_ptr_offset);
1902 assert!(
1903 std::mem::offset_of!(retro_memory_descriptor, offset) == memory_descriptor_offset_offset
1904 );
1905 assert!(std::mem::offset_of!(retro_memory_descriptor, start) == memory_descriptor_start_offset);
1906 assert!(
1907 std::mem::offset_of!(retro_memory_descriptor, select) == memory_descriptor_select_offset
1908 );
1909 assert!(
1910 std::mem::offset_of!(retro_memory_descriptor, disconnect)
1911 == memory_descriptor_disconnect_offset
1912 );
1913 assert!(std::mem::offset_of!(retro_memory_descriptor, len) == memory_descriptor_len_offset);
1914 assert!(
1915 std::mem::offset_of!(retro_memory_descriptor, addrspace)
1916 == memory_descriptor_addrspace_offset
1917 );
1918
1919 let memory_map_num_descriptors_offset =
1920 (std::mem::size_of::<*const retro_memory_descriptor>() + std::mem::align_of::<u32>() - 1)
1921 & !(std::mem::align_of::<u32>() - 1);
1922 let memory_map_size = (memory_map_num_descriptors_offset
1923 + std::mem::size_of::<u32>()
1924 + std::mem::align_of::<retro_memory_map>()
1925 - 1)
1926 & !(std::mem::align_of::<retro_memory_map>() - 1);
1927 assert!(std::mem::size_of::<retro_memory_map>() == memory_map_size);
1928 assert!(
1929 std::mem::align_of::<retro_memory_map>()
1930 == max_usize(
1931 std::mem::align_of::<*const retro_memory_descriptor>(),
1932 std::mem::align_of::<u32>(),
1933 )
1934 );
1935 assert!(std::mem::offset_of!(retro_memory_map, descriptors) == 0);
1936 assert!(
1937 std::mem::offset_of!(retro_memory_map, num_descriptors)
1938 == memory_map_num_descriptors_offset
1939 );
1940
1941 assert!(std::mem::size_of::<retro_controller_description>() == 8);
1942 assert!(std::mem::align_of::<retro_controller_description>() == 4);
1943 assert!(std::mem::offset_of!(retro_controller_description, desc) == 0);
1944 assert!(std::mem::offset_of!(retro_controller_description, id) == 4);
1945
1946 assert!(std::mem::size_of::<retro_controller_info>() == 8);
1947 assert!(std::mem::align_of::<retro_controller_info>() == 4);
1948 assert!(std::mem::offset_of!(retro_controller_info, types) == 0);
1949 assert!(std::mem::offset_of!(retro_controller_info, num_types) == 4);
1950
1951 assert!(std::mem::size_of::<retro_framebuffer>() == 28);
1952 assert!(std::mem::align_of::<retro_framebuffer>() == 4);
1953 assert!(std::mem::offset_of!(retro_framebuffer, data) == 0);
1954 assert!(std::mem::offset_of!(retro_framebuffer, width) == 4);
1955 assert!(std::mem::offset_of!(retro_framebuffer, height) == 8);
1956 assert!(std::mem::offset_of!(retro_framebuffer, pitch) == 12);
1957 assert!(std::mem::offset_of!(retro_framebuffer, format) == 16);
1958 assert!(std::mem::offset_of!(retro_framebuffer, access_flags) == 20);
1959 assert!(std::mem::offset_of!(retro_framebuffer, memory_flags) == 24);
1960
1961 assert!(std::mem::size_of::<retro_led_interface>() == 4);
1962 assert!(std::mem::align_of::<retro_led_interface>() == 4);
1963 assert!(std::mem::offset_of!(retro_led_interface, set_led_state) == 0);
1964
1965 assert!(std::mem::size_of::<retro_rumble_interface>() == 4);
1966 assert!(std::mem::align_of::<retro_rumble_interface>() == 4);
1967 assert!(std::mem::offset_of!(retro_rumble_interface, set_rumble_state) == 0);
1968
1969 assert!(std::mem::size_of::<retro_sensor_interface>() == 8);
1970 assert!(std::mem::align_of::<retro_sensor_interface>() == 4);
1971 assert!(std::mem::offset_of!(retro_sensor_interface, set_sensor_state) == 0);
1972 assert!(std::mem::offset_of!(retro_sensor_interface, get_sensor_input) == 4);
1973
1974 assert!(std::mem::size_of::<retro_camera_callback>() == 40);
1978 assert!(std::mem::align_of::<retro_camera_callback>() == 8);
1979 assert!(std::mem::offset_of!(retro_camera_callback, caps) == 0);
1980 assert!(std::mem::offset_of!(retro_camera_callback, width) == 8);
1981 assert!(std::mem::offset_of!(retro_camera_callback, height) == 12);
1982 assert!(std::mem::offset_of!(retro_camera_callback, start) == 16);
1983 assert!(std::mem::offset_of!(retro_camera_callback, stop) == 20);
1984 assert!(std::mem::offset_of!(retro_camera_callback, frame_raw_framebuffer) == 24);
1985 assert!(std::mem::offset_of!(retro_camera_callback, frame_opengl_texture) == 28);
1986 assert!(std::mem::offset_of!(retro_camera_callback, initialized) == 32);
1987 assert!(std::mem::offset_of!(retro_camera_callback, deinitialized) == 36);
1988
1989 assert!(std::mem::size_of::<retro_location_callback>() == 24);
1990 assert!(std::mem::align_of::<retro_location_callback>() == 4);
1991 assert!(std::mem::offset_of!(retro_location_callback, start) == 0);
1992 assert!(std::mem::offset_of!(retro_location_callback, stop) == 4);
1993 assert!(std::mem::offset_of!(retro_location_callback, get_position) == 8);
1994 assert!(std::mem::offset_of!(retro_location_callback, set_interval) == 12);
1995 assert!(std::mem::offset_of!(retro_location_callback, initialized) == 16);
1996 assert!(std::mem::offset_of!(retro_location_callback, deinitialized) == 20);
1997
1998 assert!(std::mem::size_of::<retro_subsystem_memory_info>() == 8);
1999 assert!(std::mem::align_of::<retro_subsystem_memory_info>() == 4);
2000 assert!(std::mem::offset_of!(retro_subsystem_memory_info, extension) == 0);
2001 assert!(std::mem::offset_of!(retro_subsystem_memory_info, memory_type) == 4);
2002
2003 assert!(std::mem::size_of::<retro_subsystem_rom_info>() == 20);
2004 assert!(std::mem::align_of::<retro_subsystem_rom_info>() == 4);
2005 assert!(std::mem::offset_of!(retro_subsystem_rom_info, desc) == 0);
2006 assert!(std::mem::offset_of!(retro_subsystem_rom_info, valid_extensions) == 4);
2007 assert!(std::mem::offset_of!(retro_subsystem_rom_info, need_fullpath) == 8);
2008 assert!(std::mem::offset_of!(retro_subsystem_rom_info, block_extract) == 9);
2009 assert!(std::mem::offset_of!(retro_subsystem_rom_info, required) == 10);
2010 assert!(std::mem::offset_of!(retro_subsystem_rom_info, memory) == 12);
2011 assert!(std::mem::offset_of!(retro_subsystem_rom_info, num_memory) == 16);
2012
2013 assert!(std::mem::size_of::<retro_subsystem_info>() == 20);
2014 assert!(std::mem::align_of::<retro_subsystem_info>() == 4);
2015 assert!(std::mem::offset_of!(retro_subsystem_info, desc) == 0);
2016 assert!(std::mem::offset_of!(retro_subsystem_info, ident) == 4);
2017 assert!(std::mem::offset_of!(retro_subsystem_info, roms) == 8);
2018 assert!(std::mem::offset_of!(retro_subsystem_info, num_roms) == 12);
2019 assert!(std::mem::offset_of!(retro_subsystem_info, id) == 16);
2020
2021 assert!(std::mem::size_of::<retro_disk_control_callback>() == 28);
2022 assert!(std::mem::align_of::<retro_disk_control_callback>() == 4);
2023 assert!(std::mem::offset_of!(retro_disk_control_callback, set_eject_state) == 0);
2024 assert!(std::mem::offset_of!(retro_disk_control_callback, get_eject_state) == 4);
2025 assert!(std::mem::offset_of!(retro_disk_control_callback, get_image_index) == 8);
2026 assert!(std::mem::offset_of!(retro_disk_control_callback, set_image_index) == 12);
2027 assert!(std::mem::offset_of!(retro_disk_control_callback, get_num_images) == 16);
2028 assert!(std::mem::offset_of!(retro_disk_control_callback, replace_image_index) == 20);
2029 assert!(std::mem::offset_of!(retro_disk_control_callback, add_image_index) == 24);
2030
2031 assert!(std::mem::size_of::<retro_disk_control_ext_callback>() == 40);
2032 assert!(std::mem::align_of::<retro_disk_control_ext_callback>() == 4);
2033 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, set_eject_state) == 0);
2034 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_eject_state) == 4);
2035 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_image_index) == 8);
2036 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, set_image_index) == 12);
2037 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_num_images) == 16);
2038 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, replace_image_index) == 20);
2039 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, add_image_index) == 24);
2040 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, set_initial_image) == 28);
2041 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_image_path) == 32);
2042 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_image_label) == 36);
2043
2044 assert!(std::mem::size_of::<retro_netpacket_callback>() == 28);
2045 assert!(std::mem::align_of::<retro_netpacket_callback>() == 4);
2046 assert!(std::mem::offset_of!(retro_netpacket_callback, start) == 0);
2047 assert!(std::mem::offset_of!(retro_netpacket_callback, receive) == 4);
2048 assert!(std::mem::offset_of!(retro_netpacket_callback, stop) == 8);
2049 assert!(std::mem::offset_of!(retro_netpacket_callback, poll) == 12);
2050 assert!(std::mem::offset_of!(retro_netpacket_callback, connected) == 16);
2051 assert!(std::mem::offset_of!(retro_netpacket_callback, disconnected) == 20);
2052 assert!(std::mem::offset_of!(retro_netpacket_callback, protocol_version) == 24);
2053
2054 assert!(std::mem::size_of::<retro_microphone_params>() == 4);
2055 assert!(std::mem::align_of::<retro_microphone_params>() == 4);
2056 assert!(std::mem::offset_of!(retro_microphone_params, rate) == 0);
2057
2058 assert!(std::mem::size_of::<retro_microphone_interface>() == 28);
2059 assert!(std::mem::align_of::<retro_microphone_interface>() == 4);
2060 assert!(std::mem::offset_of!(retro_microphone_interface, interface_version) == 0);
2061 assert!(std::mem::offset_of!(retro_microphone_interface, open_mic) == 4);
2062 assert!(std::mem::offset_of!(retro_microphone_interface, close_mic) == 8);
2063 assert!(std::mem::offset_of!(retro_microphone_interface, get_params) == 12);
2064 assert!(std::mem::offset_of!(retro_microphone_interface, set_mic_state) == 16);
2065 assert!(std::mem::offset_of!(retro_microphone_interface, get_mic_state) == 20);
2066 assert!(std::mem::offset_of!(retro_microphone_interface, read_mic) == 24);
2067
2068 assert!(std::mem::size_of::<retro_vfs_interface>() == 76);
2069 assert!(std::mem::align_of::<retro_vfs_interface>() == 4);
2070 assert!(std::mem::offset_of!(retro_vfs_interface, get_path) == 0);
2071 assert!(std::mem::offset_of!(retro_vfs_interface, open) == 4);
2072 assert!(std::mem::offset_of!(retro_vfs_interface, close) == 8);
2073 assert!(std::mem::offset_of!(retro_vfs_interface, size) == 12);
2074 assert!(std::mem::offset_of!(retro_vfs_interface, tell) == 16);
2075 assert!(std::mem::offset_of!(retro_vfs_interface, seek) == 20);
2076 assert!(std::mem::offset_of!(retro_vfs_interface, read) == 24);
2077 assert!(std::mem::offset_of!(retro_vfs_interface, write) == 28);
2078 assert!(std::mem::offset_of!(retro_vfs_interface, flush) == 32);
2079 assert!(std::mem::offset_of!(retro_vfs_interface, remove) == 36);
2080 assert!(std::mem::offset_of!(retro_vfs_interface, rename) == 40);
2081 assert!(std::mem::offset_of!(retro_vfs_interface, truncate) == 44);
2082 assert!(std::mem::offset_of!(retro_vfs_interface, stat) == 48);
2083 assert!(std::mem::offset_of!(retro_vfs_interface, mkdir) == 52);
2084 assert!(std::mem::offset_of!(retro_vfs_interface, opendir) == 56);
2085 assert!(std::mem::offset_of!(retro_vfs_interface, readdir) == 60);
2086 assert!(std::mem::offset_of!(retro_vfs_interface, dirent_get_name) == 64);
2087 assert!(std::mem::offset_of!(retro_vfs_interface, dirent_is_dir) == 68);
2088 assert!(std::mem::offset_of!(retro_vfs_interface, closedir) == 72);
2089
2090 assert!(std::mem::size_of::<retro_vfs_interface_info>() == 8);
2091 assert!(std::mem::align_of::<retro_vfs_interface_info>() == 4);
2092 assert!(std::mem::offset_of!(retro_vfs_interface_info, required_interface_version) == 0);
2093 assert!(std::mem::offset_of!(retro_vfs_interface_info, iface) == 4);
2094
2095 assert!(std::mem::size_of::<retro_midi_interface>() == 20);
2096 assert!(std::mem::align_of::<retro_midi_interface>() == 4);
2097 assert!(std::mem::offset_of!(retro_midi_interface, input_enabled) == 0);
2098 assert!(std::mem::offset_of!(retro_midi_interface, output_enabled) == 4);
2099 assert!(std::mem::offset_of!(retro_midi_interface, read) == 8);
2100 assert!(std::mem::offset_of!(retro_midi_interface, write) == 12);
2101 assert!(std::mem::offset_of!(retro_midi_interface, flush) == 16);
2102
2103 let perf_counter_start_offset =
2104 (std::mem::size_of::<*const c_char>() + std::mem::align_of::<retro_perf_tick_t>() - 1)
2105 & !(std::mem::align_of::<retro_perf_tick_t>() - 1);
2106 let perf_counter_total_offset =
2107 perf_counter_start_offset + std::mem::size_of::<retro_perf_tick_t>();
2108 let perf_counter_call_count_offset =
2109 perf_counter_total_offset + std::mem::size_of::<retro_perf_tick_t>();
2110 let perf_counter_registered_offset =
2111 perf_counter_call_count_offset + std::mem::size_of::<retro_perf_tick_t>();
2112 let perf_counter_size = (perf_counter_registered_offset
2113 + std::mem::size_of::<bool>()
2114 + std::mem::align_of::<retro_perf_counter>()
2115 - 1)
2116 & !(std::mem::align_of::<retro_perf_counter>() - 1);
2117 assert!(std::mem::size_of::<retro_perf_counter>() == perf_counter_size);
2118 assert!(
2119 std::mem::align_of::<retro_perf_counter>()
2120 == max_usize(
2121 max_usize(
2122 std::mem::align_of::<*const c_char>(),
2123 std::mem::align_of::<retro_perf_tick_t>(),
2124 ),
2125 std::mem::align_of::<bool>(),
2126 )
2127 );
2128 assert!(std::mem::offset_of!(retro_perf_counter, ident) == 0);
2129 assert!(std::mem::offset_of!(retro_perf_counter, start) == perf_counter_start_offset);
2130 assert!(std::mem::offset_of!(retro_perf_counter, total) == perf_counter_total_offset);
2131 assert!(std::mem::offset_of!(retro_perf_counter, call_cnt) == perf_counter_call_count_offset);
2132 assert!(std::mem::offset_of!(retro_perf_counter, registered) == perf_counter_registered_offset);
2133
2134 assert!(std::mem::size_of::<retro_perf_callback>() == 28);
2135 assert!(std::mem::align_of::<retro_perf_callback>() == 4);
2136 assert!(std::mem::offset_of!(retro_perf_callback, get_time_usec) == 0);
2137 assert!(std::mem::offset_of!(retro_perf_callback, get_cpu_features) == 4);
2138 assert!(std::mem::offset_of!(retro_perf_callback, get_perf_counter) == 8);
2139 assert!(std::mem::offset_of!(retro_perf_callback, perf_register) == 12);
2140 assert!(std::mem::offset_of!(retro_perf_callback, perf_start) == 16);
2141 assert!(std::mem::offset_of!(retro_perf_callback, perf_stop) == 20);
2142 assert!(std::mem::offset_of!(retro_perf_callback, perf_log) == 24);
2143
2144 assert!(std::mem::size_of::<retro_keyboard_callback>() == 4);
2145 assert!(std::mem::align_of::<retro_keyboard_callback>() == 4);
2146 assert!(std::mem::offset_of!(retro_keyboard_callback, callback) == 0);
2147
2148 assert!(std::mem::size_of::<retro_audio_callback>() == 8);
2149 assert!(std::mem::align_of::<retro_audio_callback>() == 4);
2150 assert!(std::mem::offset_of!(retro_audio_callback, callback) == 0);
2151 assert!(std::mem::offset_of!(retro_audio_callback, set_state) == 4);
2152
2153 assert!(std::mem::size_of::<retro_audio_buffer_status_callback>() == 4);
2154 assert!(std::mem::align_of::<retro_audio_buffer_status_callback>() == 4);
2155 assert!(std::mem::offset_of!(retro_audio_buffer_status_callback, callback) == 0);
2156
2157 let frame_time_reference_offset = (std::mem::size_of::<retro_frame_time_callback_t>()
2158 + std::mem::align_of::<retro_usec_t>()
2159 - 1)
2160 & !(std::mem::align_of::<retro_usec_t>() - 1);
2161 assert!(
2162 std::mem::size_of::<retro_frame_time_callback>()
2163 == frame_time_reference_offset + std::mem::size_of::<retro_usec_t>()
2164 );
2165 assert!(
2166 std::mem::align_of::<retro_frame_time_callback>()
2167 == max_usize(
2168 std::mem::align_of::<retro_frame_time_callback_t>(),
2169 std::mem::align_of::<retro_usec_t>(),
2170 )
2171 );
2172 assert!(std::mem::offset_of!(retro_frame_time_callback, callback) == 0);
2173 assert!(
2174 std::mem::offset_of!(retro_frame_time_callback, reference) == frame_time_reference_offset
2175 );
2176
2177 assert!(std::mem::size_of::<retro_get_proc_address_interface>() == 4);
2178 assert!(std::mem::align_of::<retro_get_proc_address_interface>() == 4);
2179 assert!(std::mem::offset_of!(retro_get_proc_address_interface, get_proc_address) == 0);
2180
2181 assert!(std::mem::size_of::<retro_fastforwarding_override>() == 8);
2182 assert!(std::mem::align_of::<retro_fastforwarding_override>() == 4);
2183 assert!(std::mem::offset_of!(retro_fastforwarding_override, ratio) == 0);
2184 assert!(std::mem::offset_of!(retro_fastforwarding_override, fastforward) == 4);
2185 assert!(std::mem::offset_of!(retro_fastforwarding_override, notification) == 5);
2186 assert!(std::mem::offset_of!(retro_fastforwarding_override, inhibit_toggle) == 6);
2187
2188 assert!(std::mem::size_of::<retro_throttle_state>() == 8);
2189 assert!(std::mem::align_of::<retro_throttle_state>() == 4);
2190 assert!(std::mem::offset_of!(retro_throttle_state, mode) == 0);
2191 assert!(std::mem::offset_of!(retro_throttle_state, rate) == 4);
2192
2193 assert!(std::mem::size_of::<retro_variable>() == 8);
2194 assert!(std::mem::align_of::<retro_variable>() == 4);
2195 assert!(std::mem::offset_of!(retro_variable, key) == 0);
2196 assert!(std::mem::offset_of!(retro_variable, value) == 4);
2197
2198 assert!(std::mem::size_of::<retro_core_option_display>() == 8);
2199 assert!(std::mem::align_of::<retro_core_option_display>() == 4);
2200 assert!(std::mem::offset_of!(retro_core_option_display, key) == 0);
2201 assert!(std::mem::offset_of!(retro_core_option_display, visible) == 4);
2202
2203 assert!(std::mem::size_of::<retro_core_option_value>() == 8);
2204 assert!(std::mem::align_of::<retro_core_option_value>() == 4);
2205 assert!(std::mem::offset_of!(retro_core_option_value, value) == 0);
2206 assert!(std::mem::offset_of!(retro_core_option_value, label) == 4);
2207
2208 assert!(std::mem::size_of::<retro_core_option_definition>() == 1040);
2209 assert!(std::mem::align_of::<retro_core_option_definition>() == 4);
2210 assert!(std::mem::offset_of!(retro_core_option_definition, key) == 0);
2211 assert!(std::mem::offset_of!(retro_core_option_definition, desc) == 4);
2212 assert!(std::mem::offset_of!(retro_core_option_definition, info) == 8);
2213 assert!(std::mem::offset_of!(retro_core_option_definition, values) == 12);
2214 assert!(std::mem::offset_of!(retro_core_option_definition, default_value) == 1036);
2215
2216 assert!(std::mem::size_of::<retro_core_options_intl>() == 8);
2217 assert!(std::mem::align_of::<retro_core_options_intl>() == 4);
2218 assert!(std::mem::offset_of!(retro_core_options_intl, us) == 0);
2219 assert!(std::mem::offset_of!(retro_core_options_intl, local) == 4);
2220
2221 assert!(std::mem::size_of::<retro_core_option_v2_category>() == 12);
2222 assert!(std::mem::align_of::<retro_core_option_v2_category>() == 4);
2223 assert!(std::mem::offset_of!(retro_core_option_v2_category, key) == 0);
2224 assert!(std::mem::offset_of!(retro_core_option_v2_category, desc) == 4);
2225 assert!(std::mem::offset_of!(retro_core_option_v2_category, info) == 8);
2226
2227 assert!(std::mem::size_of::<retro_core_option_v2_definition>() == 1052);
2228 assert!(std::mem::align_of::<retro_core_option_v2_definition>() == 4);
2229 assert!(std::mem::offset_of!(retro_core_option_v2_definition, key) == 0);
2230 assert!(std::mem::offset_of!(retro_core_option_v2_definition, desc) == 4);
2231 assert!(std::mem::offset_of!(retro_core_option_v2_definition, desc_categorized) == 8);
2232 assert!(std::mem::offset_of!(retro_core_option_v2_definition, info) == 12);
2233 assert!(std::mem::offset_of!(retro_core_option_v2_definition, info_categorized) == 16);
2234 assert!(std::mem::offset_of!(retro_core_option_v2_definition, category_key) == 20);
2235 assert!(std::mem::offset_of!(retro_core_option_v2_definition, values) == 24);
2236 assert!(std::mem::offset_of!(retro_core_option_v2_definition, default_value) == 1048);
2237
2238 assert!(std::mem::size_of::<retro_core_options_v2>() == 8);
2239 assert!(std::mem::align_of::<retro_core_options_v2>() == 4);
2240 assert!(std::mem::offset_of!(retro_core_options_v2, categories) == 0);
2241 assert!(std::mem::offset_of!(retro_core_options_v2, definitions) == 4);
2242
2243 assert!(std::mem::size_of::<retro_core_options_v2_intl>() == 8);
2244 assert!(std::mem::align_of::<retro_core_options_v2_intl>() == 4);
2245 assert!(std::mem::offset_of!(retro_core_options_v2_intl, us) == 0);
2246 assert!(std::mem::offset_of!(retro_core_options_v2_intl, local) == 4);
2247
2248 assert!(std::mem::size_of::<retro_core_options_update_display_callback>() == 4);
2249 assert!(std::mem::align_of::<retro_core_options_update_display_callback>() == 4);
2250 assert!(std::mem::offset_of!(retro_core_options_update_display_callback, callback) == 0);
2251
2252 assert!(std::mem::size_of::<retro_system_content_info_override>() == 8);
2253 assert!(std::mem::align_of::<retro_system_content_info_override>() == 4);
2254 assert!(std::mem::offset_of!(retro_system_content_info_override, extensions) == 0);
2255 assert!(std::mem::offset_of!(retro_system_content_info_override, need_fullpath) == 4);
2256 assert!(std::mem::offset_of!(retro_system_content_info_override, persistent_data) == 5);
2257
2258 assert!(std::mem::size_of::<retro_game_info>() == 16);
2259 assert!(std::mem::align_of::<retro_game_info>() == 4);
2260
2261 assert!(std::mem::size_of::<retro_game_info_ext>() == 40);
2262 assert!(std::mem::align_of::<retro_game_info_ext>() == 4);
2263 assert!(std::mem::offset_of!(retro_game_info_ext, full_path) == 0);
2264 assert!(std::mem::offset_of!(retro_game_info_ext, archive_path) == 4);
2265 assert!(std::mem::offset_of!(retro_game_info_ext, archive_file) == 8);
2266 assert!(std::mem::offset_of!(retro_game_info_ext, dir) == 12);
2267 assert!(std::mem::offset_of!(retro_game_info_ext, name) == 16);
2268 assert!(std::mem::offset_of!(retro_game_info_ext, ext) == 20);
2269 assert!(std::mem::offset_of!(retro_game_info_ext, meta) == 24);
2270 assert!(std::mem::offset_of!(retro_game_info_ext, data) == 28);
2271 assert!(std::mem::offset_of!(retro_game_info_ext, size) == 32);
2272 assert!(std::mem::offset_of!(retro_game_info_ext, file_in_archive) == 36);
2273 assert!(std::mem::offset_of!(retro_game_info_ext, persistent_data) == 37);
2274
2275 assert!(std::mem::size_of::<retro_hw_render_callback>() == 40);
2276 assert!(std::mem::align_of::<retro_hw_render_callback>() == 4);
2277 assert!(std::mem::offset_of!(retro_hw_render_callback, context_type) == 0);
2278 assert!(std::mem::offset_of!(retro_hw_render_callback, context_reset) == 4);
2279 assert!(std::mem::offset_of!(retro_hw_render_callback, get_current_framebuffer) == 8);
2280 assert!(std::mem::offset_of!(retro_hw_render_callback, get_proc_address) == 12);
2281 assert!(std::mem::offset_of!(retro_hw_render_callback, depth) == 16);
2282 assert!(std::mem::offset_of!(retro_hw_render_callback, stencil) == 17);
2283 assert!(std::mem::offset_of!(retro_hw_render_callback, bottom_left_origin) == 18);
2284 assert!(std::mem::offset_of!(retro_hw_render_callback, version_major) == 20);
2285 assert!(std::mem::offset_of!(retro_hw_render_callback, version_minor) == 24);
2286 assert!(std::mem::offset_of!(retro_hw_render_callback, cache_context) == 28);
2287 assert!(std::mem::offset_of!(retro_hw_render_callback, context_destroy) == 32);
2288 assert!(std::mem::offset_of!(retro_hw_render_callback, debug_context) == 36);
2289
2290 assert!(std::mem::size_of::<retro_hw_render_interface>() == 8);
2291 assert!(std::mem::align_of::<retro_hw_render_interface>() == 4);
2292 assert!(std::mem::offset_of!(retro_hw_render_interface, interface_type) == 0);
2293 assert!(std::mem::offset_of!(retro_hw_render_interface, interface_version) == 4);
2294
2295 assert!(std::mem::size_of::<retro_hw_render_context_negotiation_interface>() == 8);
2296 assert!(std::mem::align_of::<retro_hw_render_context_negotiation_interface>() == 4);
2297 assert!(
2298 std::mem::offset_of!(
2299 retro_hw_render_context_negotiation_interface,
2300 interface_type
2301 ) == 0
2302 );
2303 assert!(
2304 std::mem::offset_of!(
2305 retro_hw_render_context_negotiation_interface,
2306 interface_version
2307 ) == 4
2308 );
2309};
2310
2311#[cfg(target_pointer_width = "64")]
2312const _: () = {
2313 assert!(std::mem::size_of::<retro_system_info>() == 32);
2314 assert!(std::mem::align_of::<retro_system_info>() == 8);
2315 assert!(std::mem::offset_of!(retro_system_info, need_fullpath) == 24);
2316 assert!(std::mem::offset_of!(retro_system_info, block_extract) == 25);
2317
2318 assert!(std::mem::size_of::<retro_system_av_info>() == 40);
2319
2320 assert!(std::mem::size_of::<retro_message>() == 16);
2321 assert!(std::mem::align_of::<retro_message>() == 8);
2322 assert!(std::mem::offset_of!(retro_message, msg) == 0);
2323 assert!(std::mem::offset_of!(retro_message, frames) == 8);
2324
2325 assert!(std::mem::size_of::<retro_message_ext>() == 32);
2326 assert!(std::mem::align_of::<retro_message_ext>() == 8);
2327 assert!(std::mem::offset_of!(retro_message_ext, msg) == 0);
2328 assert!(std::mem::offset_of!(retro_message_ext, duration) == 8);
2329 assert!(std::mem::offset_of!(retro_message_ext, priority) == 12);
2330 assert!(std::mem::offset_of!(retro_message_ext, level) == 16);
2331 assert!(std::mem::offset_of!(retro_message_ext, target) == 20);
2332 assert!(std::mem::offset_of!(retro_message_ext, type_) == 24);
2333 assert!(std::mem::offset_of!(retro_message_ext, progress) == 28);
2334
2335 assert!(std::mem::size_of::<retro_input_descriptor>() == 24);
2336 assert!(std::mem::align_of::<retro_input_descriptor>() == 8);
2337 assert!(std::mem::offset_of!(retro_input_descriptor, port) == 0);
2338 assert!(std::mem::offset_of!(retro_input_descriptor, device) == 4);
2339 assert!(std::mem::offset_of!(retro_input_descriptor, index) == 8);
2340 assert!(std::mem::offset_of!(retro_input_descriptor, id) == 12);
2341 assert!(std::mem::offset_of!(retro_input_descriptor, description) == 16);
2342
2343 assert!(std::mem::size_of::<retro_device_power>() == 12);
2344 assert!(std::mem::align_of::<retro_device_power>() == 4);
2345 assert!(std::mem::offset_of!(retro_device_power, state) == 0);
2346 assert!(std::mem::offset_of!(retro_device_power, seconds) == 4);
2347 assert!(std::mem::offset_of!(retro_device_power, percent) == 8);
2348
2349 assert!(std::mem::size_of::<retro_memory_descriptor>() == 64);
2350 assert!(std::mem::align_of::<retro_memory_descriptor>() == 8);
2351 assert!(std::mem::offset_of!(retro_memory_descriptor, flags) == 0);
2352 assert!(std::mem::offset_of!(retro_memory_descriptor, ptr) == 8);
2353 assert!(std::mem::offset_of!(retro_memory_descriptor, offset) == 16);
2354 assert!(std::mem::offset_of!(retro_memory_descriptor, start) == 24);
2355 assert!(std::mem::offset_of!(retro_memory_descriptor, select) == 32);
2356 assert!(std::mem::offset_of!(retro_memory_descriptor, disconnect) == 40);
2357 assert!(std::mem::offset_of!(retro_memory_descriptor, len) == 48);
2358 assert!(std::mem::offset_of!(retro_memory_descriptor, addrspace) == 56);
2359
2360 assert!(std::mem::size_of::<retro_memory_map>() == 16);
2361 assert!(std::mem::align_of::<retro_memory_map>() == 8);
2362 assert!(std::mem::offset_of!(retro_memory_map, descriptors) == 0);
2363 assert!(std::mem::offset_of!(retro_memory_map, num_descriptors) == 8);
2364
2365 assert!(std::mem::size_of::<retro_controller_description>() == 16);
2366 assert!(std::mem::align_of::<retro_controller_description>() == 8);
2367 assert!(std::mem::offset_of!(retro_controller_description, desc) == 0);
2368 assert!(std::mem::offset_of!(retro_controller_description, id) == 8);
2369
2370 assert!(std::mem::size_of::<retro_controller_info>() == 16);
2371 assert!(std::mem::align_of::<retro_controller_info>() == 8);
2372 assert!(std::mem::offset_of!(retro_controller_info, types) == 0);
2373 assert!(std::mem::offset_of!(retro_controller_info, num_types) == 8);
2374
2375 assert!(std::mem::size_of::<retro_framebuffer>() == 40);
2376 assert!(std::mem::align_of::<retro_framebuffer>() == 8);
2377 assert!(std::mem::offset_of!(retro_framebuffer, data) == 0);
2378 assert!(std::mem::offset_of!(retro_framebuffer, width) == 8);
2379 assert!(std::mem::offset_of!(retro_framebuffer, height) == 12);
2380 assert!(std::mem::offset_of!(retro_framebuffer, pitch) == 16);
2381 assert!(std::mem::offset_of!(retro_framebuffer, format) == 24);
2382 assert!(std::mem::offset_of!(retro_framebuffer, access_flags) == 28);
2383 assert!(std::mem::offset_of!(retro_framebuffer, memory_flags) == 32);
2384
2385 assert!(std::mem::size_of::<retro_led_interface>() == 8);
2386 assert!(std::mem::align_of::<retro_led_interface>() == 8);
2387 assert!(std::mem::offset_of!(retro_led_interface, set_led_state) == 0);
2388
2389 assert!(std::mem::size_of::<retro_rumble_interface>() == 8);
2390 assert!(std::mem::align_of::<retro_rumble_interface>() == 8);
2391 assert!(std::mem::offset_of!(retro_rumble_interface, set_rumble_state) == 0);
2392
2393 assert!(std::mem::size_of::<retro_sensor_interface>() == 16);
2394 assert!(std::mem::align_of::<retro_sensor_interface>() == 8);
2395 assert!(std::mem::offset_of!(retro_sensor_interface, set_sensor_state) == 0);
2396 assert!(std::mem::offset_of!(retro_sensor_interface, get_sensor_input) == 8);
2397
2398 assert!(std::mem::size_of::<retro_camera_callback>() == 64);
2399 assert!(std::mem::align_of::<retro_camera_callback>() == 8);
2400 assert!(std::mem::offset_of!(retro_camera_callback, caps) == 0);
2401 assert!(std::mem::offset_of!(retro_camera_callback, width) == 8);
2402 assert!(std::mem::offset_of!(retro_camera_callback, height) == 12);
2403 assert!(std::mem::offset_of!(retro_camera_callback, start) == 16);
2404 assert!(std::mem::offset_of!(retro_camera_callback, stop) == 24);
2405 assert!(std::mem::offset_of!(retro_camera_callback, frame_raw_framebuffer) == 32);
2406 assert!(std::mem::offset_of!(retro_camera_callback, frame_opengl_texture) == 40);
2407 assert!(std::mem::offset_of!(retro_camera_callback, initialized) == 48);
2408 assert!(std::mem::offset_of!(retro_camera_callback, deinitialized) == 56);
2409
2410 assert!(std::mem::size_of::<retro_location_callback>() == 48);
2411 assert!(std::mem::align_of::<retro_location_callback>() == 8);
2412 assert!(std::mem::offset_of!(retro_location_callback, start) == 0);
2413 assert!(std::mem::offset_of!(retro_location_callback, stop) == 8);
2414 assert!(std::mem::offset_of!(retro_location_callback, get_position) == 16);
2415 assert!(std::mem::offset_of!(retro_location_callback, set_interval) == 24);
2416 assert!(std::mem::offset_of!(retro_location_callback, initialized) == 32);
2417 assert!(std::mem::offset_of!(retro_location_callback, deinitialized) == 40);
2418
2419 assert!(std::mem::size_of::<retro_subsystem_memory_info>() == 16);
2420 assert!(std::mem::align_of::<retro_subsystem_memory_info>() == 8);
2421 assert!(std::mem::offset_of!(retro_subsystem_memory_info, extension) == 0);
2422 assert!(std::mem::offset_of!(retro_subsystem_memory_info, memory_type) == 8);
2423
2424 assert!(std::mem::size_of::<retro_subsystem_rom_info>() == 40);
2425 assert!(std::mem::align_of::<retro_subsystem_rom_info>() == 8);
2426 assert!(std::mem::offset_of!(retro_subsystem_rom_info, desc) == 0);
2427 assert!(std::mem::offset_of!(retro_subsystem_rom_info, valid_extensions) == 8);
2428 assert!(std::mem::offset_of!(retro_subsystem_rom_info, need_fullpath) == 16);
2429 assert!(std::mem::offset_of!(retro_subsystem_rom_info, block_extract) == 17);
2430 assert!(std::mem::offset_of!(retro_subsystem_rom_info, required) == 18);
2431 assert!(std::mem::offset_of!(retro_subsystem_rom_info, memory) == 24);
2432 assert!(std::mem::offset_of!(retro_subsystem_rom_info, num_memory) == 32);
2433
2434 assert!(std::mem::size_of::<retro_subsystem_info>() == 32);
2435 assert!(std::mem::align_of::<retro_subsystem_info>() == 8);
2436 assert!(std::mem::offset_of!(retro_subsystem_info, desc) == 0);
2437 assert!(std::mem::offset_of!(retro_subsystem_info, ident) == 8);
2438 assert!(std::mem::offset_of!(retro_subsystem_info, roms) == 16);
2439 assert!(std::mem::offset_of!(retro_subsystem_info, num_roms) == 24);
2440 assert!(std::mem::offset_of!(retro_subsystem_info, id) == 28);
2441
2442 assert!(std::mem::size_of::<retro_disk_control_callback>() == 56);
2443 assert!(std::mem::align_of::<retro_disk_control_callback>() == 8);
2444 assert!(std::mem::offset_of!(retro_disk_control_callback, set_eject_state) == 0);
2445 assert!(std::mem::offset_of!(retro_disk_control_callback, get_eject_state) == 8);
2446 assert!(std::mem::offset_of!(retro_disk_control_callback, get_image_index) == 16);
2447 assert!(std::mem::offset_of!(retro_disk_control_callback, set_image_index) == 24);
2448 assert!(std::mem::offset_of!(retro_disk_control_callback, get_num_images) == 32);
2449 assert!(std::mem::offset_of!(retro_disk_control_callback, replace_image_index) == 40);
2450 assert!(std::mem::offset_of!(retro_disk_control_callback, add_image_index) == 48);
2451
2452 assert!(std::mem::size_of::<retro_disk_control_ext_callback>() == 80);
2453 assert!(std::mem::align_of::<retro_disk_control_ext_callback>() == 8);
2454 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, set_eject_state) == 0);
2455 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_eject_state) == 8);
2456 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_image_index) == 16);
2457 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, set_image_index) == 24);
2458 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_num_images) == 32);
2459 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, replace_image_index) == 40);
2460 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, add_image_index) == 48);
2461 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, set_initial_image) == 56);
2462 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_image_path) == 64);
2463 assert!(std::mem::offset_of!(retro_disk_control_ext_callback, get_image_label) == 72);
2464
2465 assert!(std::mem::size_of::<retro_netpacket_callback>() == 56);
2466 assert!(std::mem::align_of::<retro_netpacket_callback>() == 8);
2467 assert!(std::mem::offset_of!(retro_netpacket_callback, start) == 0);
2468 assert!(std::mem::offset_of!(retro_netpacket_callback, receive) == 8);
2469 assert!(std::mem::offset_of!(retro_netpacket_callback, stop) == 16);
2470 assert!(std::mem::offset_of!(retro_netpacket_callback, poll) == 24);
2471 assert!(std::mem::offset_of!(retro_netpacket_callback, connected) == 32);
2472 assert!(std::mem::offset_of!(retro_netpacket_callback, disconnected) == 40);
2473 assert!(std::mem::offset_of!(retro_netpacket_callback, protocol_version) == 48);
2474
2475 assert!(std::mem::size_of::<retro_microphone_params>() == 4);
2476 assert!(std::mem::align_of::<retro_microphone_params>() == 4);
2477 assert!(std::mem::offset_of!(retro_microphone_params, rate) == 0);
2478
2479 assert!(std::mem::size_of::<retro_microphone_interface>() == 56);
2480 assert!(std::mem::align_of::<retro_microphone_interface>() == 8);
2481 assert!(std::mem::offset_of!(retro_microphone_interface, interface_version) == 0);
2482 assert!(std::mem::offset_of!(retro_microphone_interface, open_mic) == 8);
2483 assert!(std::mem::offset_of!(retro_microphone_interface, close_mic) == 16);
2484 assert!(std::mem::offset_of!(retro_microphone_interface, get_params) == 24);
2485 assert!(std::mem::offset_of!(retro_microphone_interface, set_mic_state) == 32);
2486 assert!(std::mem::offset_of!(retro_microphone_interface, get_mic_state) == 40);
2487 assert!(std::mem::offset_of!(retro_microphone_interface, read_mic) == 48);
2488
2489 assert!(std::mem::size_of::<retro_vfs_interface>() == 152);
2490 assert!(std::mem::align_of::<retro_vfs_interface>() == 8);
2491 assert!(std::mem::offset_of!(retro_vfs_interface, get_path) == 0);
2492 assert!(std::mem::offset_of!(retro_vfs_interface, open) == 8);
2493 assert!(std::mem::offset_of!(retro_vfs_interface, close) == 16);
2494 assert!(std::mem::offset_of!(retro_vfs_interface, size) == 24);
2495 assert!(std::mem::offset_of!(retro_vfs_interface, tell) == 32);
2496 assert!(std::mem::offset_of!(retro_vfs_interface, seek) == 40);
2497 assert!(std::mem::offset_of!(retro_vfs_interface, read) == 48);
2498 assert!(std::mem::offset_of!(retro_vfs_interface, write) == 56);
2499 assert!(std::mem::offset_of!(retro_vfs_interface, flush) == 64);
2500 assert!(std::mem::offset_of!(retro_vfs_interface, remove) == 72);
2501 assert!(std::mem::offset_of!(retro_vfs_interface, rename) == 80);
2502 assert!(std::mem::offset_of!(retro_vfs_interface, truncate) == 88);
2503 assert!(std::mem::offset_of!(retro_vfs_interface, stat) == 96);
2504 assert!(std::mem::offset_of!(retro_vfs_interface, mkdir) == 104);
2505 assert!(std::mem::offset_of!(retro_vfs_interface, opendir) == 112);
2506 assert!(std::mem::offset_of!(retro_vfs_interface, readdir) == 120);
2507 assert!(std::mem::offset_of!(retro_vfs_interface, dirent_get_name) == 128);
2508 assert!(std::mem::offset_of!(retro_vfs_interface, dirent_is_dir) == 136);
2509 assert!(std::mem::offset_of!(retro_vfs_interface, closedir) == 144);
2510
2511 assert!(std::mem::size_of::<retro_vfs_interface_info>() == 16);
2512 assert!(std::mem::align_of::<retro_vfs_interface_info>() == 8);
2513 assert!(std::mem::offset_of!(retro_vfs_interface_info, required_interface_version) == 0);
2514 assert!(std::mem::offset_of!(retro_vfs_interface_info, iface) == 8);
2515
2516 assert!(std::mem::size_of::<retro_midi_interface>() == 40);
2517 assert!(std::mem::align_of::<retro_midi_interface>() == 8);
2518 assert!(std::mem::offset_of!(retro_midi_interface, input_enabled) == 0);
2519 assert!(std::mem::offset_of!(retro_midi_interface, output_enabled) == 8);
2520 assert!(std::mem::offset_of!(retro_midi_interface, read) == 16);
2521 assert!(std::mem::offset_of!(retro_midi_interface, write) == 24);
2522 assert!(std::mem::offset_of!(retro_midi_interface, flush) == 32);
2523
2524 assert!(std::mem::size_of::<retro_perf_counter>() == 40);
2525 assert!(std::mem::align_of::<retro_perf_counter>() == 8);
2526 assert!(std::mem::offset_of!(retro_perf_counter, ident) == 0);
2527 assert!(std::mem::offset_of!(retro_perf_counter, start) == 8);
2528 assert!(std::mem::offset_of!(retro_perf_counter, total) == 16);
2529 assert!(std::mem::offset_of!(retro_perf_counter, call_cnt) == 24);
2530 assert!(std::mem::offset_of!(retro_perf_counter, registered) == 32);
2531
2532 assert!(std::mem::size_of::<retro_perf_callback>() == 56);
2533 assert!(std::mem::align_of::<retro_perf_callback>() == 8);
2534 assert!(std::mem::offset_of!(retro_perf_callback, get_time_usec) == 0);
2535 assert!(std::mem::offset_of!(retro_perf_callback, get_cpu_features) == 8);
2536 assert!(std::mem::offset_of!(retro_perf_callback, get_perf_counter) == 16);
2537 assert!(std::mem::offset_of!(retro_perf_callback, perf_register) == 24);
2538 assert!(std::mem::offset_of!(retro_perf_callback, perf_start) == 32);
2539 assert!(std::mem::offset_of!(retro_perf_callback, perf_stop) == 40);
2540 assert!(std::mem::offset_of!(retro_perf_callback, perf_log) == 48);
2541
2542 assert!(std::mem::size_of::<retro_keyboard_callback>() == 8);
2543 assert!(std::mem::align_of::<retro_keyboard_callback>() == 8);
2544 assert!(std::mem::offset_of!(retro_keyboard_callback, callback) == 0);
2545
2546 assert!(std::mem::size_of::<retro_audio_callback>() == 16);
2547 assert!(std::mem::align_of::<retro_audio_callback>() == 8);
2548 assert!(std::mem::offset_of!(retro_audio_callback, callback) == 0);
2549 assert!(std::mem::offset_of!(retro_audio_callback, set_state) == 8);
2550
2551 assert!(std::mem::size_of::<retro_audio_buffer_status_callback>() == 8);
2552 assert!(std::mem::align_of::<retro_audio_buffer_status_callback>() == 8);
2553 assert!(std::mem::offset_of!(retro_audio_buffer_status_callback, callback) == 0);
2554
2555 assert!(std::mem::size_of::<retro_frame_time_callback>() == 16);
2556 assert!(std::mem::align_of::<retro_frame_time_callback>() == 8);
2557 assert!(std::mem::offset_of!(retro_frame_time_callback, callback) == 0);
2558 assert!(std::mem::offset_of!(retro_frame_time_callback, reference) == 8);
2559
2560 assert!(std::mem::size_of::<retro_get_proc_address_interface>() == 8);
2561 assert!(std::mem::align_of::<retro_get_proc_address_interface>() == 8);
2562 assert!(std::mem::offset_of!(retro_get_proc_address_interface, get_proc_address) == 0);
2563
2564 assert!(std::mem::size_of::<retro_fastforwarding_override>() == 8);
2565 assert!(std::mem::align_of::<retro_fastforwarding_override>() == 4);
2566 assert!(std::mem::offset_of!(retro_fastforwarding_override, ratio) == 0);
2567 assert!(std::mem::offset_of!(retro_fastforwarding_override, fastforward) == 4);
2568 assert!(std::mem::offset_of!(retro_fastforwarding_override, notification) == 5);
2569 assert!(std::mem::offset_of!(retro_fastforwarding_override, inhibit_toggle) == 6);
2570
2571 assert!(std::mem::size_of::<retro_throttle_state>() == 8);
2572 assert!(std::mem::align_of::<retro_throttle_state>() == 4);
2573 assert!(std::mem::offset_of!(retro_throttle_state, mode) == 0);
2574 assert!(std::mem::offset_of!(retro_throttle_state, rate) == 4);
2575
2576 assert!(std::mem::size_of::<retro_variable>() == 16);
2577 assert!(std::mem::align_of::<retro_variable>() == 8);
2578 assert!(std::mem::offset_of!(retro_variable, key) == 0);
2579 assert!(std::mem::offset_of!(retro_variable, value) == 8);
2580
2581 assert!(std::mem::size_of::<retro_core_option_display>() == 16);
2582 assert!(std::mem::align_of::<retro_core_option_display>() == 8);
2583 assert!(std::mem::offset_of!(retro_core_option_display, key) == 0);
2584 assert!(std::mem::offset_of!(retro_core_option_display, visible) == 8);
2585
2586 assert!(std::mem::size_of::<retro_core_option_value>() == 16);
2587 assert!(std::mem::align_of::<retro_core_option_value>() == 8);
2588 assert!(std::mem::offset_of!(retro_core_option_value, value) == 0);
2589 assert!(std::mem::offset_of!(retro_core_option_value, label) == 8);
2590
2591 assert!(std::mem::size_of::<retro_core_option_definition>() == 2080);
2592 assert!(std::mem::align_of::<retro_core_option_definition>() == 8);
2593 assert!(std::mem::offset_of!(retro_core_option_definition, key) == 0);
2594 assert!(std::mem::offset_of!(retro_core_option_definition, desc) == 8);
2595 assert!(std::mem::offset_of!(retro_core_option_definition, info) == 16);
2596 assert!(std::mem::offset_of!(retro_core_option_definition, values) == 24);
2597 assert!(std::mem::offset_of!(retro_core_option_definition, default_value) == 2072);
2598
2599 assert!(std::mem::size_of::<retro_core_options_intl>() == 16);
2600 assert!(std::mem::align_of::<retro_core_options_intl>() == 8);
2601 assert!(std::mem::offset_of!(retro_core_options_intl, us) == 0);
2602 assert!(std::mem::offset_of!(retro_core_options_intl, local) == 8);
2603
2604 assert!(std::mem::size_of::<retro_core_option_v2_category>() == 24);
2605 assert!(std::mem::align_of::<retro_core_option_v2_category>() == 8);
2606 assert!(std::mem::offset_of!(retro_core_option_v2_category, key) == 0);
2607 assert!(std::mem::offset_of!(retro_core_option_v2_category, desc) == 8);
2608 assert!(std::mem::offset_of!(retro_core_option_v2_category, info) == 16);
2609
2610 assert!(std::mem::size_of::<retro_core_option_v2_definition>() == 2104);
2611 assert!(std::mem::align_of::<retro_core_option_v2_definition>() == 8);
2612 assert!(std::mem::offset_of!(retro_core_option_v2_definition, key) == 0);
2613 assert!(std::mem::offset_of!(retro_core_option_v2_definition, desc) == 8);
2614 assert!(std::mem::offset_of!(retro_core_option_v2_definition, desc_categorized) == 16);
2615 assert!(std::mem::offset_of!(retro_core_option_v2_definition, info) == 24);
2616 assert!(std::mem::offset_of!(retro_core_option_v2_definition, info_categorized) == 32);
2617 assert!(std::mem::offset_of!(retro_core_option_v2_definition, category_key) == 40);
2618 assert!(std::mem::offset_of!(retro_core_option_v2_definition, values) == 48);
2619 assert!(std::mem::offset_of!(retro_core_option_v2_definition, default_value) == 2096);
2620
2621 assert!(std::mem::size_of::<retro_core_options_v2>() == 16);
2622 assert!(std::mem::align_of::<retro_core_options_v2>() == 8);
2623 assert!(std::mem::offset_of!(retro_core_options_v2, categories) == 0);
2624 assert!(std::mem::offset_of!(retro_core_options_v2, definitions) == 8);
2625
2626 assert!(std::mem::size_of::<retro_core_options_v2_intl>() == 16);
2627 assert!(std::mem::align_of::<retro_core_options_v2_intl>() == 8);
2628 assert!(std::mem::offset_of!(retro_core_options_v2_intl, us) == 0);
2629 assert!(std::mem::offset_of!(retro_core_options_v2_intl, local) == 8);
2630
2631 assert!(std::mem::size_of::<retro_core_options_update_display_callback>() == 8);
2632 assert!(std::mem::align_of::<retro_core_options_update_display_callback>() == 8);
2633 assert!(std::mem::offset_of!(retro_core_options_update_display_callback, callback) == 0);
2634
2635 assert!(std::mem::size_of::<retro_system_content_info_override>() == 16);
2636 assert!(std::mem::align_of::<retro_system_content_info_override>() == 8);
2637 assert!(std::mem::offset_of!(retro_system_content_info_override, extensions) == 0);
2638 assert!(std::mem::offset_of!(retro_system_content_info_override, need_fullpath) == 8);
2639 assert!(std::mem::offset_of!(retro_system_content_info_override, persistent_data) == 9);
2640
2641 assert!(std::mem::size_of::<retro_game_info>() == 32);
2642 assert!(std::mem::align_of::<retro_game_info>() == 8);
2643 assert!(std::mem::offset_of!(retro_game_info, path) == 0);
2644 assert!(std::mem::offset_of!(retro_game_info, data) == 8);
2645 assert!(std::mem::offset_of!(retro_game_info, size) == 16);
2646 assert!(std::mem::offset_of!(retro_game_info, meta) == 24);
2647
2648 assert!(std::mem::size_of::<retro_game_info_ext>() == 80);
2649 assert!(std::mem::align_of::<retro_game_info_ext>() == 8);
2650 assert!(std::mem::offset_of!(retro_game_info_ext, full_path) == 0);
2651 assert!(std::mem::offset_of!(retro_game_info_ext, archive_path) == 8);
2652 assert!(std::mem::offset_of!(retro_game_info_ext, archive_file) == 16);
2653 assert!(std::mem::offset_of!(retro_game_info_ext, dir) == 24);
2654 assert!(std::mem::offset_of!(retro_game_info_ext, name) == 32);
2655 assert!(std::mem::offset_of!(retro_game_info_ext, ext) == 40);
2656 assert!(std::mem::offset_of!(retro_game_info_ext, meta) == 48);
2657 assert!(std::mem::offset_of!(retro_game_info_ext, data) == 56);
2658 assert!(std::mem::offset_of!(retro_game_info_ext, size) == 64);
2659 assert!(std::mem::offset_of!(retro_game_info_ext, file_in_archive) == 72);
2660 assert!(std::mem::offset_of!(retro_game_info_ext, persistent_data) == 73);
2661
2662 assert!(std::mem::size_of::<retro_hw_render_callback>() == 64);
2663 assert!(std::mem::align_of::<retro_hw_render_callback>() == 8);
2664 assert!(std::mem::offset_of!(retro_hw_render_callback, context_type) == 0);
2665 assert!(std::mem::offset_of!(retro_hw_render_callback, context_reset) == 8);
2666 assert!(std::mem::offset_of!(retro_hw_render_callback, get_current_framebuffer) == 16);
2667 assert!(std::mem::offset_of!(retro_hw_render_callback, get_proc_address) == 24);
2668 assert!(std::mem::offset_of!(retro_hw_render_callback, depth) == 32);
2669 assert!(std::mem::offset_of!(retro_hw_render_callback, stencil) == 33);
2670 assert!(std::mem::offset_of!(retro_hw_render_callback, bottom_left_origin) == 34);
2671 assert!(std::mem::offset_of!(retro_hw_render_callback, version_major) == 36);
2672 assert!(std::mem::offset_of!(retro_hw_render_callback, version_minor) == 40);
2673 assert!(std::mem::offset_of!(retro_hw_render_callback, cache_context) == 44);
2674 assert!(std::mem::offset_of!(retro_hw_render_callback, context_destroy) == 48);
2675 assert!(std::mem::offset_of!(retro_hw_render_callback, debug_context) == 56);
2676
2677 assert!(std::mem::size_of::<retro_hw_render_interface>() == 8);
2678 assert!(std::mem::align_of::<retro_hw_render_interface>() == 4);
2679 assert!(std::mem::offset_of!(retro_hw_render_interface, interface_type) == 0);
2680 assert!(std::mem::offset_of!(retro_hw_render_interface, interface_version) == 4);
2681
2682 assert!(std::mem::size_of::<retro_hw_render_context_negotiation_interface>() == 8);
2683 assert!(std::mem::align_of::<retro_hw_render_context_negotiation_interface>() == 4);
2684 assert!(
2685 std::mem::offset_of!(
2686 retro_hw_render_context_negotiation_interface,
2687 interface_type
2688 ) == 0
2689 );
2690 assert!(
2691 std::mem::offset_of!(
2692 retro_hw_render_context_negotiation_interface,
2693 interface_version
2694 ) == 4
2695 );
2696};