@@ -115,22 +115,22 @@ static VkBool32 debugCallback(
115
115
}
116
116
#endif
117
117
118
- const char * VKFunctionTable_InitGlobal (PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr , VKFunctionTableGlobal * table );
119
- const char * VKFunctionTable_InitInstance (PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr , VKEnv * instance );
120
-
121
118
static VKEnv * VKEnv_Create (PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr , VKPlatformData * platformData ) {
122
119
if (vkGetInstanceProcAddr == NULL ) return NULL ;
123
120
124
- VKFunctionTableGlobal table ;
125
- const char * missingAPI = VKFunctionTable_InitGlobal (vkGetInstanceProcAddr , & table );
126
- if (missingAPI != NULL ) {
127
- J2dRlsTraceLn1 (J2D_TRACE_ERROR , "Vulkan: Required API is missing: %s" , missingAPI )
121
+ // Init global function table.
122
+ VkBool32 missingAPI = JNI_FALSE ;
123
+ GLOBAL_FUNCTION_TABLE (DECL_PFN )
124
+ GLOBAL_FUNCTION_TABLE (CHECK_PROC_ADDR , missingAPI , vkGetInstanceProcAddr , NULL , )
125
+ if (missingAPI ) {
126
+ J2dRlsTraceLn (J2D_TRACE_ERROR , "Vulkan: Required API is missing:" )
127
+ GLOBAL_FUNCTION_TABLE (LOG_MISSING_PFN ,)
128
128
return NULL ;
129
129
}
130
130
131
131
uint32_t apiVersion = 0 ;
132
132
133
- VK_IF_ERROR (table . vkEnumerateInstanceVersion (& apiVersion )) return NULL ;
133
+ VK_IF_ERROR (vkEnumerateInstanceVersion (& apiVersion )) return NULL ;
134
134
135
135
J2dRlsTraceLn3 (J2D_TRACE_INFO , "Vulkan: Available (%d.%d.%d)" ,
136
136
VK_API_VERSION_MAJOR (apiVersion ),
@@ -147,14 +147,14 @@ static VKEnv* VKEnv_Create(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr, VKPl
147
147
148
148
uint32_t extensionsCount ;
149
149
// Get the number of extensions and layers
150
- VK_IF_ERROR (table . vkEnumerateInstanceExtensionProperties (NULL , & extensionsCount , NULL )) return NULL ;
150
+ VK_IF_ERROR (vkEnumerateInstanceExtensionProperties (NULL , & extensionsCount , NULL )) return NULL ;
151
151
VkExtensionProperties extensions [extensionsCount ];
152
- VK_IF_ERROR (table . vkEnumerateInstanceExtensionProperties (NULL , & extensionsCount , extensions )) return NULL ;
152
+ VK_IF_ERROR (vkEnumerateInstanceExtensionProperties (NULL , & extensionsCount , extensions )) return NULL ;
153
153
154
154
uint32_t layersCount ;
155
- VK_IF_ERROR (table . vkEnumerateInstanceLayerProperties (& layersCount , NULL )) return NULL ;
155
+ VK_IF_ERROR (vkEnumerateInstanceLayerProperties (& layersCount , NULL )) return NULL ;
156
156
VkLayerProperties layers [layersCount ];
157
- VK_IF_ERROR (table . vkEnumerateInstanceLayerProperties (& layersCount , layers )) return NULL ;
157
+ VK_IF_ERROR (vkEnumerateInstanceLayerProperties (& layersCount , layers )) return NULL ;
158
158
159
159
J2dRlsTraceLn (J2D_TRACE_VERBOSE , " Supported instance layers:" )
160
160
for (uint32_t i = 0 ; i < layersCount ; i ++ ) {
@@ -266,7 +266,7 @@ static VKEnv* VKEnv_Create(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr, VKPl
266
266
.ppEnabledExtensionNames = enabledExtensions
267
267
};
268
268
269
- VK_IF_ERROR (table . vkCreateInstance (& instanceCreateInfo , NULL , & vk -> instance )) {
269
+ VK_IF_ERROR (vkCreateInstance (& instanceCreateInfo , NULL , & vk -> instance )) {
270
270
ARRAY_FREE (enabledLayers );
271
271
ARRAY_FREE (enabledExtensions );
272
272
VKEnv_Destroy (vk );
@@ -276,12 +276,16 @@ static VKEnv* VKEnv_Create(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr, VKPl
276
276
ARRAY_FREE (enabledLayers );
277
277
ARRAY_FREE (enabledExtensions );
278
278
279
- missingAPI = VKFunctionTable_InitInstance (vkGetInstanceProcAddr , vk );
280
- if (missingAPI == NULL && vk -> platformData != NULL && vk -> platformData -> checkMissingAPI != NULL ) {
281
- missingAPI = vk -> platformData -> checkMissingAPI (vk );
279
+ INSTANCE_FUNCTION_TABLE (CHECK_PROC_ADDR , missingAPI , vkGetInstanceProcAddr , vk -> instance , vk -> )
280
+ DEBUG_INSTANCE_FUNCTION_TABLE (GET_PROC_ADDR , vkGetInstanceProcAddr , vk -> instance , vk -> )
281
+ if (missingAPI ) {
282
+ J2dRlsTraceLn (J2D_TRACE_ERROR , "Vulkan: Required API is missing:" )
283
+ INSTANCE_FUNCTION_TABLE (LOG_MISSING_PFN , vk -> )
284
+ VKEnv_Destroy (vk );
285
+ return NULL ;
282
286
}
283
- if (missingAPI != NULL ) {
284
- J2dRlsTraceLn1 ( J2D_TRACE_ERROR , "Vulkan: Required API is missing: %s" , missingAPI )
287
+ if (vk -> platformData != NULL && vk -> platformData -> initFunctions != NULL &&
288
+ ! vk -> platformData -> initFunctions ( vk , vkGetInstanceProcAddr )) {
285
289
VKEnv_Destroy (vk );
286
290
return NULL ;
287
291
}
@@ -290,7 +294,8 @@ static VKEnv* VKEnv_Create(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr, VKPl
290
294
291
295
// Create debug messenger
292
296
#if defined(DEBUG )
293
- if (foundDebugLayer && foundDebugExt && pNext ) {
297
+ if (foundDebugLayer && foundDebugExt &&
298
+ vk -> vkCreateDebugUtilsMessengerEXT != NULL && pNext ) {
294
299
VkDebugUtilsMessengerCreateInfoEXT debugUtilsMessengerCreateInfo = {
295
300
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT ,
296
301
.flags = 0 ,
0 commit comments