xref: /aosp_15_r20/external/mesa3d/src/panfrost/vulkan/panvk_macros.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2021 Collabora Ltd.
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef PANVK_MACROS_H
7 #define PANVK_MACROS_H
8 
9 #include <assert.h>
10 
11 #ifdef HAVE_VALGRIND
12 #include <memcheck.h>
13 #include <valgrind.h>
14 #define VG(x) x
15 #else
16 #define VG(x)
17 #endif
18 
19 #define panvk_stub() assert(!"stub")
20 
21 #define panvk_arch_name(name, version) panvk_##version##_##name
22 
23 #define panvk_arch_dispatch(arch, name, ...)                                   \
24    do {                                                                        \
25       switch (arch) {                                                          \
26       case 6:                                                                  \
27          panvk_arch_name(name, v6)(__VA_ARGS__);                               \
28          break;                                                                \
29       case 7:                                                                  \
30          panvk_arch_name(name, v7)(__VA_ARGS__);                               \
31          break;                                                                \
32       case 10:                                                                 \
33          panvk_arch_name(name, v10)(__VA_ARGS__);                              \
34          break;                                                                \
35       default:                                                                 \
36          unreachable("Unsupported architecture");                              \
37       }                                                                        \
38    } while (0)
39 
40 #define panvk_arch_dispatch_ret(arch, name, ret, ...)                          \
41    do {                                                                        \
42       switch (arch) {                                                          \
43       case 6:                                                                  \
44          ret = panvk_arch_name(name, v6)(__VA_ARGS__);                         \
45          break;                                                                \
46       case 7:                                                                  \
47          ret = panvk_arch_name(name, v7)(__VA_ARGS__);                         \
48          break;                                                                \
49       case 10:                                                                 \
50          ret = panvk_arch_name(name, v10)(__VA_ARGS__);                        \
51          break;                                                                \
52       default:                                                                 \
53          unreachable("Unsupported architecture");                              \
54       }                                                                        \
55    } while (0)
56 
57 #ifdef PAN_ARCH
58 #if PAN_ARCH == 6
59 #define panvk_per_arch(name) panvk_arch_name(name, v6)
60 #elif PAN_ARCH == 7
61 #define panvk_per_arch(name) panvk_arch_name(name, v7)
62 #elif PAN_ARCH == 9
63 #define panvk_per_arch(name) panvk_arch_name(name, v9)
64 #elif PAN_ARCH == 10
65 #define panvk_per_arch(name) panvk_arch_name(name, v10)
66 #else
67 #error "Unsupported arch"
68 #endif
69 #endif
70 
71 #endif
72