1 // Copyright (C) 2018 The Android Open Source Project
2 // Copyright (C) 2018 Google Inc.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 #pragma once
16 
17 #include <vulkan/vulkan.h>
18 
19 namespace gfxstream {
20 namespace vk {
21 
22 #define GOLDFISH_VK_LIST_TRIVIAL_DISPATCHABLE_HANDLE_TYPES(f) f(VkPhysicalDevice)
23 
24 #define GOLDFISH_VK_LIST_DISPATCHABLE_HANDLE_TYPES(f) \
25     f(VkInstance)                                     \
26     f(VkDevice)                                       \
27     f(VkCommandBuffer)                                \
28     f(VkQueue)                                        \
29     GOLDFISH_VK_LIST_TRIVIAL_DISPATCHABLE_HANDLE_TYPES(f)
30 
31 #ifdef VK_NVX_binary_import
32 
33 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NVX_BINARY_IMPORT(f) \
34     f(VkCuModuleNVX)                                                          \
35     f(VkCuFunctionNVX)
36 
37 #else
38 
39 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NVX_BINARY_IMPORT(f)
40 
41 #endif  // VK_NVX_binary_import
42 
43 #ifdef VK_NVX_device_generated_commands
44 
45 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NVX_DEVICE_GENERATED_COMMANDS(f) \
46     f(VkObjectTableNVX)                                                                   \
47     f(VkIndirectCommandsLayoutNVX)
48 
49 #else
50 
51 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NVX_DEVICE_GENERATED_COMMANDS(f)
52 
53 #endif  // VK_NVX_device_generated_commands
54 
55 #ifdef VK_NV_device_generated_commands
56 
57 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NV_DEVICE_GENERATED_COMMANDS(f) \
58     f(VkIndirectCommandsLayoutNV)
59 
60 #else
61 
62 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NV_DEVICE_GENERATED_COMMANDS(f)
63 
64 #endif  // VK_NV_device_generated_commands
65 
66 #ifdef VK_NV_ray_tracing
67 
68 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NV_RAY_TRACING(f) \
69     f(VkAccelerationStructureNV)
70 
71 #else
72 
73 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NV_RAY_TRACING(f)
74 
75 #endif  // VK_NV_ray_tracing
76 
77 #ifdef VK_KHR_acceleration_structure
78 
79 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_KHR_ACCELERATION_STRUCTURE(f) \
80     f(VkAccelerationStructureKHR)
81 
82 #else
83 
84 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_KHR_ACCELERATION_STRUCTURE(f)
85 
86 #endif  // VK_KHR_acceleration_structure
87 
88 #ifdef VK_USE_PLATFORM_FUCHSIA
89 
90 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_FUCHSIA(f) f(VkBufferCollectionFUCHSIA)
91 
92 #else
93 
94 #define __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_FUCHSIA(f)
95 
96 #endif  // VK_USE_PLATFORM_FUCHSIA
97 
98 #define GOLDFISH_VK_LIST_TRIVIAL_NON_DISPATCHABLE_HANDLE_TYPES(f)                     \
99     f(VkBufferView)                                                                   \
100     f(VkImageView)                                                                    \
101     f(VkShaderModule)                                                                 \
102     f(VkPipeline)                                                                     \
103     f(VkPipelineCache)                                                                \
104     f(VkPipelineLayout)                                                               \
105     f(VkRenderPass)                                                                   \
106     f(VkFramebuffer)                                                                  \
107     f(VkEvent)                                                                        \
108     f(VkQueryPool)                                                                    \
109     f(VkSamplerYcbcrConversion)                                                       \
110     f(VkSurfaceKHR)                                                                   \
111     f(VkSwapchainKHR)                                                                 \
112     f(VkDisplayKHR)                                                                   \
113     f(VkDisplayModeKHR)                                                               \
114     f(VkValidationCacheEXT)                                                           \
115     f(VkDebugReportCallbackEXT)                                                       \
116     f(VkDebugUtilsMessengerEXT)                                                       \
117     f(VkMicromapEXT)                                                                  \
118     __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NVX_BINARY_IMPORT(f)             \
119     __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NVX_DEVICE_GENERATED_COMMANDS(f) \
120     __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NV_DEVICE_GENERATED_COMMANDS(f)  \
121     __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_NV_RAY_TRACING(f)                \
122     __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_KHR_ACCELERATION_STRUCTURE(f)
123 
124 #define GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES(f)       \
125     f(VkDeviceMemory)                                           \
126     f(VkBuffer)                                                 \
127     f(VkImage)                                                  \
128     f(VkSemaphore)                                              \
129     f(VkDescriptorUpdateTemplate)                               \
130     f(VkFence)                                                  \
131     f(VkDescriptorPool)                                         \
132     f(VkDescriptorSet)                                          \
133     f(VkDescriptorSetLayout)                                    \
134     f(VkCommandPool)                                            \
135     f(VkSampler)                                                \
136     __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_FUCHSIA(f) \
137     GOLDFISH_VK_LIST_TRIVIAL_NON_DISPATCHABLE_HANDLE_TYPES(f)
138 
139 #define GOLDFISH_VK_LIST_HANDLE_TYPES(f)          \
140     GOLDFISH_VK_LIST_DISPATCHABLE_HANDLE_TYPES(f) \
141     GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES(f)
142 
143 #define GOLDFISH_VK_LIST_TRIVIAL_HANDLE_TYPES(f)          \
144     GOLDFISH_VK_LIST_TRIVIAL_DISPATCHABLE_HANDLE_TYPES(f) \
145     GOLDFISH_VK_LIST_TRIVIAL_NON_DISPATCHABLE_HANDLE_TYPES(f)
146 
147 #define GOLDFISH_VK_LIST_AUTODEFINED_STRUCT_DISPATCHABLE_HANDLE_TYPES(f) \
148     f(VkInstance)                                                        \
149     f(VkDevice)                                                          \
150     f(VkQueue)                                                           \
151     GOLDFISH_VK_LIST_TRIVIAL_DISPATCHABLE_HANDLE_TYPES(f)
152 
153 #define GOLDFISH_VK_LIST_AUTODEFINED_STRUCT_NON_DISPATCHABLE_HANDLE_TYPES(f) \
154     f(VkDeviceMemory)                                                        \
155     f(VkBuffer)                                                              \
156     f(VkImage)                                                               \
157     f(VkSemaphore)                                                           \
158     f(VkFence)                                                               \
159     f(VkDescriptorUpdateTemplate)                                            \
160     f(VkCommandPool)                                                         \
161     f(VkSampler)                                                             \
162     __GOLDFISH_VK_LIST_NON_DISPATCHABLE_HANDLE_TYPES_FUCHSIA(f)              \
163     GOLDFISH_VK_LIST_TRIVIAL_NON_DISPATCHABLE_HANDLE_TYPES(f)
164 
165 #define GOLDFISH_VK_LIST_MANUAL_STRUCT_NON_DISPATCHABLE_HANDLE_TYPES(f) \
166     f(VkDescriptorPool)                                                 \
167     f(VkDescriptorSetLayout)                                            \
168     f(VkDescriptorSet)
169 
170 }  // namespace vk
171 }  // namespace gfxstream
172