psx_gpu: add a tool to generate asm offsets
[pcsx_rearmed.git] / plugins / gpu_neon / psx_gpu / psx_gpu_offsets_update.c
1 #include <stdio.h>
2 #include <stddef.h>
3
4 #include "common.h"
5
6 #define WRITE_OFFSET(f, member) \
7         fprintf(f, "#define %-50s0x%x\n", \
8                 "psx_gpu_" #member "_offset", \
9                 offsetof(psx_gpu_struct, member));
10
11 int main()
12 {
13         FILE *f;
14
15         if (sizeof(f) != 4) {
16                 fprintf(stderr, "bad pointer size\n");
17                 return 1;
18         }
19
20         f = fopen("psx_gpu_offsets.h", "w");
21         if (f == NULL) {
22                 perror("fopen");
23                 return 1;
24         }
25
26         WRITE_OFFSET(f, test_mask);
27         WRITE_OFFSET(f, uvrg);
28         WRITE_OFFSET(f, uvrg_dx);
29         WRITE_OFFSET(f, uvrg_dy);
30         WRITE_OFFSET(f, u_block_span);
31         WRITE_OFFSET(f, v_block_span);
32         WRITE_OFFSET(f, r_block_span);
33         WRITE_OFFSET(f, g_block_span);
34         WRITE_OFFSET(f, b_block_span);
35         WRITE_OFFSET(f, b);
36         WRITE_OFFSET(f, b_dy);
37         WRITE_OFFSET(f, triangle_area);
38         WRITE_OFFSET(f, texture_window_settings);
39         WRITE_OFFSET(f, current_texture_mask);
40         WRITE_OFFSET(f, viewport_mask);
41         WRITE_OFFSET(f, dirty_textures_4bpp_mask);
42         WRITE_OFFSET(f, dirty_textures_8bpp_mask);
43         WRITE_OFFSET(f, dirty_textures_8bpp_alternate_mask);
44         WRITE_OFFSET(f, triangle_color);
45         WRITE_OFFSET(f, dither_table);
46         WRITE_OFFSET(f, render_block_handler);
47         WRITE_OFFSET(f, texture_page_ptr);
48         WRITE_OFFSET(f, texture_page_base);
49         WRITE_OFFSET(f, clut_ptr);
50         WRITE_OFFSET(f, vram_ptr);
51         WRITE_OFFSET(f, render_state_base);
52         WRITE_OFFSET(f, render_state);
53         WRITE_OFFSET(f, num_spans);
54         WRITE_OFFSET(f, num_blocks);
55         WRITE_OFFSET(f, offset_x);
56         WRITE_OFFSET(f, offset_y);
57         WRITE_OFFSET(f, clut_settings);
58         WRITE_OFFSET(f, texture_settings);
59         WRITE_OFFSET(f, viewport_start_x);
60         WRITE_OFFSET(f, viewport_start_y);
61         WRITE_OFFSET(f, viewport_end_x);
62         WRITE_OFFSET(f, viewport_end_y);
63         WRITE_OFFSET(f, mask_msb);
64         WRITE_OFFSET(f, triangle_winding);
65         WRITE_OFFSET(f, display_area_draw_enable);
66         WRITE_OFFSET(f, current_texture_page);
67         WRITE_OFFSET(f, last_8bpp_texture_page);
68         WRITE_OFFSET(f, texture_mask_width);
69         WRITE_OFFSET(f, texture_mask_height);
70         WRITE_OFFSET(f, texture_window_x);
71         WRITE_OFFSET(f, texture_window_y);
72         WRITE_OFFSET(f, primitive_type);
73         WRITE_OFFSET(f, interlace_mode);
74         WRITE_OFFSET(f, blocks);
75         WRITE_OFFSET(f, span_uvrg_offset);
76         WRITE_OFFSET(f, span_edge_data);
77         WRITE_OFFSET(f, span_b_offset);
78         WRITE_OFFSET(f, texture_4bpp_cache);
79         WRITE_OFFSET(f, texture_8bpp_even_cache);
80         WRITE_OFFSET(f, texture_8bpp_odd_cache);
81         fclose(f);
82
83         return 0;
84 }