VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice dev, const char *funcName) { #define ADD_HOOK(fn) \ if (!strncmp(#fn, funcName, sizeof(#fn))) \ return (PFN_vkVoidFunction)fn ADD_HOOK(vkGetDeviceProcAddr); ADD_HOOK(vkDestroyDevice); ADD_HOOK(vkCreateSwapchainKHR); ADD_HOOK(vkGetSwapchainImagesKHR); ADD_HOOK(vkQueuePresentKHR); ADD_HOOK(vkDestroySwapchainKHR); ADD_HOOK(vkQueueSubmit); #undef ADD_HOOK if (dev == NULL) return NULL; layer_data *dev_data; dev_data = get_my_data_ptr(get_dispatch_key(dev), layer_data_map); VkLayerDispatchTable *pTable = dev_data->device_dispatch_table; if (pTable->GetDeviceProcAddr == NULL) return NULL; return pTable->GetDeviceProcAddr(dev, funcName); }
VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) { #define ADD_HOOK(fn) \ if (!strncmp(#fn, funcName, sizeof(#fn))) return (PFN_vkVoidFunction)fn ADD_HOOK(vkCreateInstance); ADD_HOOK(vkCreateDevice); ADD_HOOK(vkDestroyInstance); #undef ADD_HOOK if (instance == NULL) return NULL; layer_data *instance_data; instance_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map); VkLayerInstanceDispatchTable *pTable = instance_data->instance_dispatch_table; if (pTable->GetInstanceProcAddr == NULL) return NULL; return pTable->GetInstanceProcAddr(instance, funcName); }
void ne_hook_close_conn(ne_session *sess, ne_close_conn_fn fn, void *userdata) { ADD_HOOK(sess->close_conn_hooks, fn, userdata); }
void ne_hook_destroy_session(ne_session *sess, ne_destroy_sess_fn fn, void *userdata) { ADD_HOOK(sess->destroy_sess_hooks, fn, userdata); }
void ne_hook_post_headers(ne_session *sess, ne_post_headers_fn fn, void *userdata) { ADD_HOOK(sess->post_headers_hooks, fn, userdata); }
void ne_hook_post_send(ne_session *sess, ne_post_send_fn fn, void *userdata) { ADD_HOOK(sess->post_send_hooks, fn, userdata); }
void ne_hook_create_request(ne_session *sess, ne_create_request_fn fn, void *userdata) { ADD_HOOK(sess->create_req_hooks, fn, userdata); }