Skip to content

Commit 27c265d

Browse files
committed
Move entrypoints to tag dispatch
1 parent 4e477fe commit 27c265d

File tree

7 files changed

+90
-67
lines changed

7 files changed

+90
-67
lines changed

generator/generate_vulkan_common.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,10 @@ def generate_layer_instance_layer_decls(file, mapping, commands):
410410
if command.dispatch_type != 'instance':
411411
continue
412412

413+
tname = command.name
414+
if tname in FORWARD_WITHOUT_INTERCEPT:
415+
continue
416+
413417
lines = []
414418

415419
plat_define = mapping.get_platform_define(command.name)
@@ -470,6 +474,10 @@ def generate_layer_instance_layer_defs(file, mapping, commands, manual_commands)
470474
if command.dispatch_type != 'instance':
471475
continue
472476

477+
tname = command.name
478+
if tname in FORWARD_WITHOUT_INTERCEPT:
479+
continue
480+
473481
plat_define = mapping.get_platform_define(command.name)
474482
if plat_define:
475483
lines.append(f'#if defined({plat_define})\n')

layer_example/source/entry.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@
3030
* Note that the Android loader requires more functions to be exposed as
3131
* library symbols than other Vulkan loaders.
3232
*/
33-
#include <array>
34-
#include <cstring>
3533
#include <mutex>
36-
#include <thread>
3734

3835
#include "framework/instance_functions_manual.hpp"
3936
#include "framework/utils.hpp"
@@ -47,15 +44,15 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
4744
VkDevice device,
4845
const char* pName
4946
) {
50-
return vkGetDeviceProcAddr_default(device, pName);
47+
return layer_vkGetDeviceProcAddr<user_tag>(device, pName);
5148
}
5249

5350
/** See Vulkan API for documentation. */
5451
VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
5552
VkInstance instance,
5653
const char* pName
5754
) {
58-
return vkGetInstanceProcAddr_default(instance, pName);
55+
return layer_vkGetInstanceProcAddr<user_tag>(instance, pName);
5956
}
6057

6158
/** See Vulkan API for documentation. */
@@ -64,7 +61,7 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionPrope
6461
uint32_t* pPropertyCount,
6562
VkExtensionProperties* pProperties
6663
) {
67-
return vkEnumerateInstanceExtensionProperties_default(pLayerName, pPropertyCount, pProperties);
64+
return layer_vkEnumerateInstanceExtensionProperties<user_tag>(pLayerName, pPropertyCount, pProperties);
6865
}
6966

7067
/** See Vulkan API for documentation. */
@@ -74,15 +71,15 @@ VK_LAYER_EXPORT_ANDROID VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensio
7471
uint32_t* pPropertyCount,
7572
VkExtensionProperties* pProperties
7673
) {
77-
return vkEnumerateDeviceExtensionProperties_default(gpu, pLayerName, pPropertyCount, pProperties);
74+
return layer_vkEnumerateDeviceExtensionProperties<user_tag>(gpu, pLayerName, pPropertyCount, pProperties);
7875
}
7976

8077
/** See Vulkan API for documentation. */
8178
VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
8279
uint32_t* pPropertyCount,
8380
VkLayerProperties* pProperties
8481
) {
85-
return vkEnumerateInstanceLayerProperties_default(pPropertyCount, pProperties);
82+
return layer_vkEnumerateInstanceLayerProperties<user_tag>(pPropertyCount, pProperties);
8683
}
8784

8885
/** See Vulkan API for documentation. */
@@ -91,7 +88,7 @@ VK_LAYER_EXPORT_ANDROID VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerPro
9188
uint32_t* pPropertyCount,
9289
VkLayerProperties* pProperties
9390
) {
94-
return vkEnumerateDeviceLayerProperties_default(gpu, pPropertyCount, pProperties);
91+
return layer_vkEnumerateDeviceLayerProperties<user_tag>(gpu, pPropertyCount, pProperties);
9592
}
9693

9794
}

layer_gpu_timeline/source/entry.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@
3030
* Note that the Android loader requires more functions to be exposed as
3131
* library symbols than other Vulkan loaders.
3232
*/
33-
#include <array>
34-
#include <cstring>
3533
#include <mutex>
36-
#include <thread>
3734

3835
#include "framework/instance_functions_manual.hpp"
3936
#include "framework/utils.hpp"
@@ -47,15 +44,15 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
4744
VkDevice device,
4845
const char* pName
4946
) {
50-
return vkGetDeviceProcAddr_default(device, pName);
47+
return layer_vkGetDeviceProcAddr<user_tag>(device, pName);
5148
}
5249

5350
/** See Vulkan API for documentation. */
5451
VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
5552
VkInstance instance,
5653
const char* pName
5754
) {
58-
return vkGetInstanceProcAddr_default(instance, pName);
55+
return layer_vkGetInstanceProcAddr<user_tag>(instance, pName);
5956
}
6057

6158
/** See Vulkan API for documentation. */
@@ -64,7 +61,7 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionPrope
6461
uint32_t* pPropertyCount,
6562
VkExtensionProperties* pProperties
6663
) {
67-
return vkEnumerateInstanceExtensionProperties_default(pLayerName, pPropertyCount, pProperties);
64+
return layer_vkEnumerateInstanceExtensionProperties<user_tag>(pLayerName, pPropertyCount, pProperties);
6865
}
6966

7067
/** See Vulkan API for documentation. */
@@ -74,15 +71,15 @@ VK_LAYER_EXPORT_ANDROID VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensio
7471
uint32_t* pPropertyCount,
7572
VkExtensionProperties* pProperties
7673
) {
77-
return vkEnumerateDeviceExtensionProperties_default(gpu, pLayerName, pPropertyCount, pProperties);
74+
return layer_vkEnumerateDeviceExtensionProperties<user_tag>(gpu, pLayerName, pPropertyCount, pProperties);
7875
}
7976

8077
/** See Vulkan API for documentation. */
8178
VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
8279
uint32_t* pPropertyCount,
8380
VkLayerProperties* pProperties
8481
) {
85-
return vkEnumerateInstanceLayerProperties_default(pPropertyCount, pProperties);
82+
return layer_vkEnumerateInstanceLayerProperties<user_tag>(pPropertyCount, pProperties);
8683
}
8784

8885
/** See Vulkan API for documentation. */
@@ -91,7 +88,7 @@ VK_LAYER_EXPORT_ANDROID VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerPro
9188
uint32_t* pPropertyCount,
9289
VkLayerProperties* pProperties
9390
) {
94-
return vkEnumerateDeviceLayerProperties_default(gpu, pPropertyCount, pProperties);
91+
return layer_vkEnumerateDeviceLayerProperties<user_tag>(gpu, pPropertyCount, pProperties);
9592
}
9693

9794
}

source_common/framework/instance_functions.cpp

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -334,24 +334,6 @@ VKAPI_ATTR void VKAPI_CALL layer_vkDestroySurfaceKHR_default(
334334
layer->driver.vkDestroySurfaceKHR(instance, surface, pAllocator);
335335
}
336336

337-
/* See Vulkan API for documentation. */
338-
VKAPI_ATTR VkResult VKAPI_CALL layer_vkEnumerateDeviceExtensionProperties_default(
339-
VkPhysicalDevice physicalDevice,
340-
const char* pLayerName,
341-
uint32_t* pPropertyCount,
342-
VkExtensionProperties* pProperties
343-
) {
344-
LAYER_TRACE(__func__);
345-
346-
// Hold the lock to access layer-wide global store
347-
std::unique_lock<std::mutex> lock { g_vulkanLock };
348-
auto* layer = Instance::retrieve(physicalDevice);
349-
350-
// Release the lock to call into the driver
351-
lock.unlock();
352-
return layer->driver.vkEnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties);
353-
}
354-
355337
/* See Vulkan API for documentation. */
356338
VKAPI_ATTR VkResult VKAPI_CALL layer_vkEnumeratePhysicalDeviceGroups_default(
357339
VkInstance instance,

source_common/framework/instance_functions.hpp

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -257,25 +257,6 @@ VKAPI_ATTR void VKAPI_CALL layer_vkDestroySurfaceKHR(
257257
layer_vkDestroySurfaceKHR_default(instance, surface, pAllocator);
258258
}
259259

260-
/* See Vulkan API for documentation. */
261-
/* Default common code pass-through implementation. */
262-
VKAPI_ATTR VkResult VKAPI_CALL layer_vkEnumerateDeviceExtensionProperties_default(
263-
VkPhysicalDevice physicalDevice,
264-
const char* pLayerName,
265-
uint32_t* pPropertyCount,
266-
VkExtensionProperties* pProperties);
267-
268-
/* Match-all template to use default implementation. */
269-
template <typename T>
270-
VKAPI_ATTR VkResult VKAPI_CALL layer_vkEnumerateDeviceExtensionProperties(
271-
VkPhysicalDevice physicalDevice,
272-
const char* pLayerName,
273-
uint32_t* pPropertyCount,
274-
VkExtensionProperties* pProperties
275-
) {
276-
return layer_vkEnumerateDeviceExtensionProperties_default(physicalDevice, pLayerName, pPropertyCount, pProperties);
277-
}
278-
279260
/* See Vulkan API for documentation. */
280261
/* Default common code pass-through implementation. */
281262
VKAPI_ATTR VkResult VKAPI_CALL layer_vkEnumeratePhysicalDeviceGroups_default(

source_common/framework/instance_functions_manual.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ std::vector<const char*> cloneExtensionList(
247247
}
248248

249249
/** See Vulkan API for documentation. */
250-
PFN_vkVoidFunction vkGetDeviceProcAddr_default(
250+
PFN_vkVoidFunction layer_vkGetDeviceProcAddr_default(
251251
VkDevice device,
252252
const char* pName
253253
) {
@@ -272,7 +272,7 @@ PFN_vkVoidFunction vkGetDeviceProcAddr_default(
272272
}
273273

274274
/** See Vulkan API for documentation. */
275-
PFN_vkVoidFunction vkGetInstanceProcAddr_default(
275+
PFN_vkVoidFunction layer_vkGetInstanceProcAddr_default(
276276
VkInstance instance,
277277
const char* pName
278278
) {
@@ -308,7 +308,7 @@ PFN_vkVoidFunction vkGetInstanceProcAddr_default(
308308
}
309309

310310
/** See Vulkan API for documentation. */
311-
VkResult vkEnumerateInstanceExtensionProperties_default(
311+
VkResult layer_vkEnumerateInstanceExtensionProperties_default(
312312
const char* pLayerName,
313313
uint32_t* pPropertyCount,
314314
VkExtensionProperties* pProperties
@@ -327,7 +327,7 @@ VkResult vkEnumerateInstanceExtensionProperties_default(
327327
}
328328

329329
/** See Vulkan API for documentation. */
330-
VkResult vkEnumerateDeviceExtensionProperties_default(
330+
VkResult layer_vkEnumerateDeviceExtensionProperties_default(
331331
VkPhysicalDevice gpu,
332332
const char* pLayerName,
333333
uint32_t* pPropertyCount,
@@ -362,7 +362,7 @@ VkResult vkEnumerateDeviceExtensionProperties_default(
362362
}
363363

364364
/** See Vulkan API for documentation. */
365-
VkResult vkEnumerateInstanceLayerProperties_default(
365+
VkResult layer_vkEnumerateInstanceLayerProperties_default(
366366
uint32_t* pPropertyCount,
367367
VkLayerProperties* pProperties
368368
) {
@@ -386,7 +386,7 @@ VkResult vkEnumerateInstanceLayerProperties_default(
386386
}
387387

388388
/** See Vulkan API for documentation. */
389-
VkResult vkEnumerateDeviceLayerProperties_default(
389+
VkResult layer_vkEnumerateDeviceLayerProperties_default(
390390
VkPhysicalDevice gpu,
391391
uint32_t* pPropertyCount,
392392
VkLayerProperties* pProperties

source_common/framework/instance_functions_manual.hpp

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,35 +146,93 @@ std::vector<const char*> cloneExtensionList(
146146
const char* const* extensionList);
147147

148148
/** See Vulkan API for documentation. */
149-
PFN_vkVoidFunction vkGetDeviceProcAddr_default(
149+
PFN_vkVoidFunction layer_vkGetDeviceProcAddr_default(
150150
VkDevice device,
151151
const char* pName);
152152

153+
/* Match-all template to use default implementation. */
154+
template <typename T>
155+
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL layer_vkGetDeviceProcAddr(
156+
VkDevice device,
157+
const char* pName
158+
) {
159+
return layer_vkGetDeviceProcAddr_default(device, pName);
160+
}
161+
153162
/** See Vulkan API for documentation. */
154-
PFN_vkVoidFunction vkGetInstanceProcAddr_default(
163+
PFN_vkVoidFunction layer_vkGetInstanceProcAddr_default(
155164
VkInstance instance,
156165
const char* pName);
157166

167+
/* Match-all template to use default implementation. */
168+
template <typename T>
169+
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL layer_vkGetInstanceProcAddr(
170+
VkInstance instance,
171+
const char* pName
172+
) {
173+
return layer_vkGetInstanceProcAddr_default(instance, pName);
174+
}
175+
158176
/** See Vulkan API for documentation. */
159-
VkResult vkEnumerateInstanceExtensionProperties_default(
177+
VkResult layer_vkEnumerateInstanceExtensionProperties_default(
160178
const char* pLayerName,
161179
uint32_t* pPropertyCount,
162180
VkExtensionProperties* pProperties);
163181

182+
/* Match-all template to use default implementation. */
183+
template <typename T>
184+
VKAPI_ATTR VkResult VKAPI_CALL layer_vkEnumerateInstanceExtensionProperties(
185+
const char* pLayerName,
186+
uint32_t* pPropertyCount,
187+
VkExtensionProperties* pProperties
188+
) {
189+
return layer_vkEnumerateInstanceExtensionProperties_default(pLayerName, pPropertyCount, pProperties);
190+
}
191+
164192
/** See Vulkan API for documentation. */
165-
VkResult vkEnumerateDeviceExtensionProperties_default(
193+
VkResult layer_vkEnumerateDeviceExtensionProperties_default(
166194
VkPhysicalDevice gpu,
167195
const char* pLayerName,
168196
uint32_t* pPropertyCount,
169197
VkExtensionProperties* pProperties);
170198

199+
/* Match-all template to use default implementation. */
200+
template <typename T>
201+
VKAPI_ATTR VkResult VKAPI_CALL layer_vkEnumerateDeviceExtensionProperties(
202+
VkPhysicalDevice gpu,
203+
const char* pLayerName,
204+
uint32_t* pPropertyCount,
205+
VkExtensionProperties* pProperties
206+
) {
207+
return layer_vkEnumerateDeviceExtensionProperties_default(gpu, pLayerName, pPropertyCount, pProperties);
208+
}
209+
171210
/** See Vulkan API for documentation. */
172-
VkResult vkEnumerateInstanceLayerProperties_default(
211+
VkResult layer_vkEnumerateInstanceLayerProperties_default(
173212
uint32_t* pPropertyCount,
174213
VkLayerProperties* pProperties);
175214

215+
/* Match-all template to use default implementation. */
216+
template <typename T>
217+
VKAPI_ATTR VkResult VKAPI_CALL layer_vkEnumerateInstanceLayerProperties(
218+
uint32_t* pPropertyCount,
219+
VkLayerProperties* pProperties
220+
) {
221+
return layer_vkEnumerateInstanceLayerProperties_default(pPropertyCount, pProperties);
222+
}
223+
176224
/** See Vulkan API for documentation. */
177-
VkResult vkEnumerateDeviceLayerProperties_default(
225+
VkResult layer_vkEnumerateDeviceLayerProperties_default(
178226
VkPhysicalDevice gpu,
179227
uint32_t* pPropertyCount,
180228
VkLayerProperties* pProperties);
229+
230+
/* Match-all template to use default implementation. */
231+
template <typename T>
232+
VKAPI_ATTR VkResult VKAPI_CALL layer_vkEnumerateDeviceLayerProperties(
233+
VkPhysicalDevice gpu,
234+
uint32_t* pPropertyCount,
235+
VkLayerProperties* pProperties
236+
) {
237+
return layer_vkEnumerateDeviceLayerProperties_default(gpu, pPropertyCount, pProperties);
238+
}

0 commit comments

Comments
 (0)