diff options
author | Bas Nieuwenhuizen <[email protected]> | 2018-02-11 14:38:42 +0100 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2018-02-23 00:39:02 +0100 |
commit | e72ad05c1d6bdedf3b15cfe7ba42c801254d6112 (patch) | |
tree | f38b69296fb1f70aa666092c44e4a6ed1d636eeb /src/amd/vulkan/radv_device.c | |
parent | 414f5e0e14e5f2e90b688344660751803935c6f2 (diff) |
radv: Return NULL for entrypoints when not supported.
This implements strict checking for the entrypoint ProcAddr
functions.
- InstanceProcAddr with instance = NULL, only returns the 3 allowed
entrypoints.
- DeviceProcAddr does not return any instance entrypoints.
- InstanceProcAddr does not return non-supported or disabled
instance entrypoints.
- DeviceProcAddr does not return non-supported or disabled device
entrypoints.
- InstanceProcAddr still returns non-supported device entrypoints.
Reviewed-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/amd/vulkan/radv_device.c')
-rw-r--r-- | src/amd/vulkan/radv_device.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 79534fbd5fc..f197b7f484c 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -2311,10 +2311,15 @@ VkResult radv_EnumerateDeviceExtensionProperties( } PFN_vkVoidFunction radv_GetInstanceProcAddr( - VkInstance instance, + VkInstance _instance, const char* pName) { - return radv_lookup_entrypoint(pName); + RADV_FROM_HANDLE(radv_instance, instance, _instance); + + return radv_lookup_entrypoint_checked(pName, + instance ? instance->apiVersion : 0, + instance ? &instance->enabled_extensions : NULL, + NULL); } /* The loader wants us to expose a second GetInstanceProcAddr function @@ -2334,10 +2339,15 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr( } PFN_vkVoidFunction radv_GetDeviceProcAddr( - VkDevice device, + VkDevice _device, const char* pName) { - return radv_lookup_entrypoint(pName); + RADV_FROM_HANDLE(radv_device, device, _device); + + return radv_lookup_entrypoint_checked(pName, + device->instance->apiVersion, + &device->instance->enabled_extensions, + &device->enabled_extensions); } bool radv_get_memory_fd(struct radv_device *device, |