aboutsummaryrefslogtreecommitdiff
path: root/layers/param_checker.cpp
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2015-05-05 14:22:52 -0600
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-06-17 19:47:01 -0600
commit9508521d8aa9983d5127b90fbcc2fa6006a28f70 (patch)
treed902ac58dd97c0759f465f96bb5fedbd6bc5f452 /layers/param_checker.cpp
parent01e599274d785018605610727f0b2832007c89db (diff)
downloadusermoji-9508521d8aa9983d5127b90fbcc2fa6006a28f70.tar.xz
layers: Add GetInstanceProcAddr() to all layers
Loader will use this for constructing instance layer instance chains. Layer instance dispatch table is not yet added.
Diffstat (limited to 'layers/param_checker.cpp')
-rw-r--r--layers/param_checker.cpp313
1 files changed, 310 insertions, 3 deletions
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index f91518dc..a63e4a91 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -65,7 +65,7 @@ static void initParamChecker(void)
}
PFN_vkGetProcAddr fpNextGPA;
- fpNextGPA = pCurObj->pGPA;
+ fpNextGPA = (PFN_vkGetProcAddr) pCurObj->pGPA;
assert(fpNextGPA);
layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);
@@ -1953,7 +1953,296 @@ VK_LAYER_EXPORT VkResult VKAPI vkQueuePresentWSI(VkQueue queue, const VkPresentI
return result;
}
-#include "vk_generic_intercept_proc_helper.h"
+static inline void* layer_intercept_proc(const char *name)
+{
+ if (!name || name[0] != 'v' || name[1] != 'k')
+ return NULL;
+
+ name += 2;
+ if (!strcmp(name, "CreateInstance"))
+ return (void*) vkCreateInstance;
+ if (!strcmp(name, "DestroyInstance"))
+ return (void*) vkDestroyInstance;
+ if (!strcmp(name, "GetPhysicalDeviceInfo"))
+ return (void*) vkGetPhysicalDeviceInfo;
+ if (!strcmp(name, "GetProcAddr"))
+ return (void*) vkGetProcAddr;
+ if (!strcmp(name, "CreateDevice"))
+ return (void*) vkCreateDevice;
+ if (!strcmp(name, "DestroyDevice"))
+ return (void*) vkDestroyDevice;
+ if (!strcmp(name, "GetGlobalExtensionInfo"))
+ return (void*) vkGetGlobalExtensionInfo;
+ if (!strcmp(name, "GetPhysicalDeviceExtensionInfo"))
+ return (void*) vkGetPhysicalDeviceExtensionInfo;
+ if (!strcmp(name, "EnumerateLayers"))
+ return (void*) vkEnumerateLayers;
+ if (!strcmp(name, "GetDeviceQueue"))
+ return (void*) vkGetDeviceQueue;
+ if (!strcmp(name, "QueueSubmit"))
+ return (void*) vkQueueSubmit;
+ if (!strcmp(name, "QueueWaitIdle"))
+ return (void*) vkQueueWaitIdle;
+ if (!strcmp(name, "DeviceWaitIdle"))
+ return (void*) vkDeviceWaitIdle;
+ if (!strcmp(name, "AllocMemory"))
+ return (void*) vkAllocMemory;
+ if (!strcmp(name, "FreeMemory"))
+ return (void*) vkFreeMemory;
+ if (!strcmp(name, "SetMemoryPriority"))
+ return (void*) vkSetMemoryPriority;
+ if (!strcmp(name, "MapMemory"))
+ return (void*) vkMapMemory;
+ if (!strcmp(name, "UnmapMemory"))
+ return (void*) vkUnmapMemory;
+ if (!strcmp(name, "FlushMappedMemoryRanges"))
+ return (void*) vkFlushMappedMemoryRanges;
+ if (!strcmp(name, "InvalidateMappedMemoryRanges"))
+ return (void*) vkInvalidateMappedMemoryRanges;
+ if (!strcmp(name, "PinSystemMemory"))
+ return (void*) vkPinSystemMemory;
+ if (!strcmp(name, "GetMultiDeviceCompatibility"))
+ return (void*) vkGetMultiDeviceCompatibility;
+ if (!strcmp(name, "OpenSharedMemory"))
+ return (void*) vkOpenSharedMemory;
+ if (!strcmp(name, "OpenSharedSemaphore"))
+ return (void*) vkOpenSharedSemaphore;
+ if (!strcmp(name, "OpenPeerMemory"))
+ return (void*) vkOpenPeerMemory;
+ if (!strcmp(name, "OpenPeerImage"))
+ return (void*) vkOpenPeerImage;
+ if (!strcmp(name, "DestroyObject"))
+ return (void*) vkDestroyObject;
+ if (!strcmp(name, "GetObjectInfo"))
+ return (void*) vkGetObjectInfo;
+ if (!strcmp(name, "CreateFence"))
+ return (void*) vkCreateFence;
+ if (!strcmp(name, "ResetFences"))
+ return (void*) vkResetFences;
+ if (!strcmp(name, "GetFenceStatus"))
+ return (void*) vkGetFenceStatus;
+ if (!strcmp(name, "WaitForFences"))
+ return (void*) vkWaitForFences;
+ if (!strcmp(name, "CreateSemaphore"))
+ return (void*) vkCreateSemaphore;
+ if (!strcmp(name, "QueueSignalSemaphore"))
+ return (void*) vkQueueSignalSemaphore;
+ if (!strcmp(name, "QueueWaitSemaphore"))
+ return (void*) vkQueueWaitSemaphore;
+ if (!strcmp(name, "CreateEvent"))
+ return (void*) vkCreateEvent;
+ if (!strcmp(name, "GetEventStatus"))
+ return (void*) vkGetEventStatus;
+ if (!strcmp(name, "SetEvent"))
+ return (void*) vkSetEvent;
+ if (!strcmp(name, "ResetEvent"))
+ return (void*) vkResetEvent;
+ if (!strcmp(name, "CreateQueryPool"))
+ return (void*) vkCreateQueryPool;
+ if (!strcmp(name, "GetQueryPoolResults"))
+ return (void*) vkGetQueryPoolResults;
+ if (!strcmp(name, "GetFormatInfo"))
+ return (void*) vkGetFormatInfo;
+ if (!strcmp(name, "CreateBuffer"))
+ return (void*) vkCreateBuffer;
+ if (!strcmp(name, "CreateBufferView"))
+ return (void*) vkCreateBufferView;
+ if (!strcmp(name, "CreateImage"))
+ return (void*) vkCreateImage;
+ if (!strcmp(name, "GetImageSubresourceInfo"))
+ return (void*) vkGetImageSubresourceInfo;
+ if (!strcmp(name, "CreateImageView"))
+ return (void*) vkCreateImageView;
+ if (!strcmp(name, "CreateColorAttachmentView"))
+ return (void*) vkCreateColorAttachmentView;
+ if (!strcmp(name, "CreateDepthStencilView"))
+ return (void*) vkCreateDepthStencilView;
+ if (!strcmp(name, "CreateShader"))
+ return (void*) vkCreateShader;
+ if (!strcmp(name, "CreateGraphicsPipeline"))
+ return (void*) vkCreateGraphicsPipeline;
+ if (!strcmp(name, "CreateGraphicsPipelineDerivative"))
+ return (void*) vkCreateGraphicsPipelineDerivative;
+ if (!strcmp(name, "CreateComputePipeline"))
+ return (void*) vkCreateComputePipeline;
+ if (!strcmp(name, "StorePipeline"))
+ return (void*) vkStorePipeline;
+ if (!strcmp(name, "LoadPipeline"))
+ return (void*) vkLoadPipeline;
+ if (!strcmp(name, "LoadPipelineDerivative"))
+ return (void*) vkLoadPipelineDerivative;
+ if (!strcmp(name, "CreatePipelineLayout"))
+ return (void*) vkCreatePipelineLayout;
+ if (!strcmp(name, "CreateSampler"))
+ return (void*) vkCreateSampler;
+ if (!strcmp(name, "CreateDescriptorSetLayout"))
+ return (void*) vkCreateDescriptorSetLayout;
+ if (!strcmp(name, "CreateDescriptorPool"))
+ return (void*) vkCreateDescriptorPool;
+ if (!strcmp(name, "ResetDescriptorPool"))
+ return (void*) vkResetDescriptorPool;
+ if (!strcmp(name, "AllocDescriptorSets"))
+ return (void*) vkAllocDescriptorSets;
+ if (!strcmp(name, "ClearDescriptorSets"))
+ return (void*) vkClearDescriptorSets;
+ if (!strcmp(name, "CreateDynamicViewportState"))
+ return (void*) vkCreateDynamicViewportState;
+ if (!strcmp(name, "CreateDynamicRasterState"))
+ return (void*) vkCreateDynamicRasterState;
+ if (!strcmp(name, "CreateDynamicColorBlendState"))
+ return (void*) vkCreateDynamicColorBlendState;
+ if (!strcmp(name, "CreateDynamicDepthStencilState"))
+ return (void*) vkCreateDynamicDepthStencilState;
+ if (!strcmp(name, "CreateCommandBuffer"))
+ return (void*) vkCreateCommandBuffer;
+ if (!strcmp(name, "BeginCommandBuffer"))
+ return (void*) vkBeginCommandBuffer;
+ if (!strcmp(name, "EndCommandBuffer"))
+ return (void*) vkEndCommandBuffer;
+ if (!strcmp(name, "ResetCommandBuffer"))
+ return (void*) vkResetCommandBuffer;
+ if (!strcmp(name, "CmdBindPipeline"))
+ return (void*) vkCmdBindPipeline;
+ if (!strcmp(name, "CmdBindDynamicStateObject"))
+ return (void*) vkCmdBindDynamicStateObject;
+ if (!strcmp(name, "CmdBindDescriptorSets"))
+ return (void*) vkCmdBindDescriptorSets;
+ if (!strcmp(name, "CmdBindVertexBuffers"))
+ return (void*) vkCmdBindVertexBuffers;
+ if (!strcmp(name, "CmdBindIndexBuffer"))
+ return (void*) vkCmdBindIndexBuffer;
+ if (!strcmp(name, "CmdDraw"))
+ return (void*) vkCmdDraw;
+ if (!strcmp(name, "CmdDrawIndexed"))
+ return (void*) vkCmdDrawIndexed;
+ if (!strcmp(name, "CmdDrawIndirect"))
+ return (void*) vkCmdDrawIndirect;
+ if (!strcmp(name, "CmdDrawIndexedIndirect"))
+ return (void*) vkCmdDrawIndexedIndirect;
+ if (!strcmp(name, "CmdDispatch"))
+ return (void*) vkCmdDispatch;
+ if (!strcmp(name, "CmdDispatchIndirect"))
+ return (void*) vkCmdDispatchIndirect;
+ if (!strcmp(name, "CmdCopyBuffer"))
+ return (void*) vkCmdCopyBuffer;
+ if (!strcmp(name, "CmdCopyImage"))
+ return (void*) vkCmdCopyImage;
+ if (!strcmp(name, "CmdBlitImage"))
+ return (void*) vkCmdBlitImage;
+ if (!strcmp(name, "CmdCopyBufferToImage"))
+ return (void*) vkCmdCopyBufferToImage;
+ if (!strcmp(name, "CmdCopyImageToBuffer"))
+ return (void*) vkCmdCopyImageToBuffer;
+ if (!strcmp(name, "CmdUpdateBuffer"))
+ return (void*) vkCmdUpdateBuffer;
+ if (!strcmp(name, "CmdFillBuffer"))
+ return (void*) vkCmdFillBuffer;
+ if (!strcmp(name, "CmdClearColorImage"))
+ return (void*) vkCmdClearColorImage;
+ if (!strcmp(name, "CmdClearDepthStencil"))
+ return (void*) vkCmdClearDepthStencil;
+ if (!strcmp(name, "CmdResolveImage"))
+ return (void*) vkCmdResolveImage;
+ if (!strcmp(name, "CmdSetEvent"))
+ return (void*) vkCmdSetEvent;
+ if (!strcmp(name, "CmdResetEvent"))
+ return (void*) vkCmdResetEvent;
+ if (!strcmp(name, "CmdWaitEvents"))
+ return (void*) vkCmdWaitEvents;
+ if (!strcmp(name, "CmdPipelineBarrier"))
+ return (void*) vkCmdPipelineBarrier;
+ if (!strcmp(name, "CmdBeginQuery"))
+ return (void*) vkCmdBeginQuery;
+ if (!strcmp(name, "CmdEndQuery"))
+ return (void*) vkCmdEndQuery;
+ if (!strcmp(name, "CmdResetQueryPool"))
+ return (void*) vkCmdResetQueryPool;
+ if (!strcmp(name, "CmdWriteTimestamp"))
+ return (void*) vkCmdWriteTimestamp;
+ if (!strcmp(name, "CmdCopyQueryPoolResults"))
+ return (void*) vkCmdCopyQueryPoolResults;
+ if (!strcmp(name, "CmdInitAtomicCounters"))
+ return (void*) vkCmdInitAtomicCounters;
+ if (!strcmp(name, "CmdLoadAtomicCounters"))
+ return (void*) vkCmdLoadAtomicCounters;
+ if (!strcmp(name, "CmdSaveAtomicCounters"))
+ return (void*) vkCmdSaveAtomicCounters;
+ if (!strcmp(name, "CreateFramebuffer"))
+ return (void*) vkCreateFramebuffer;
+ if (!strcmp(name, "CreateRenderPass"))
+ return (void*) vkCreateRenderPass;
+ if (!strcmp(name, "CmdBeginRenderPass"))
+ return (void*) vkCmdBeginRenderPass;
+ if (!strcmp(name, "CmdEndRenderPass"))
+ return (void*) vkCmdEndRenderPass;
+ if (!strcmp(name, "DbgSetValidationLevel"))
+ return (void*) vkDbgSetValidationLevel;
+ if (!strcmp(name, "DbgRegisterMsgCallback"))
+ return (void*) vkDbgRegisterMsgCallback;
+ if (!strcmp(name, "DbgUnregisterMsgCallback"))
+ return (void*) vkDbgUnregisterMsgCallback;
+ if (!strcmp(name, "DbgSetMessageFilter"))
+ return (void*) vkDbgSetMessageFilter;
+ if (!strcmp(name, "DbgSetObjectTag"))
+ return (void*) vkDbgSetObjectTag;
+ if (!strcmp(name, "DbgSetGlobalOption"))
+ return (void*) vkDbgSetGlobalOption;
+ if (!strcmp(name, "DbgSetDeviceOption"))
+ return (void*) vkDbgSetDeviceOption;
+ if (!strcmp(name, "CmdDbgMarkerBegin"))
+ return (void*) vkCmdDbgMarkerBegin;
+ if (!strcmp(name, "CmdDbgMarkerEnd"))
+ return (void*) vkCmdDbgMarkerEnd;
+ if (!strcmp(name, "GetDisplayInfoWSI"))
+ return (void*) vkGetDisplayInfoWSI;
+ if (!strcmp(name, "CreateSwapChainWSI"))
+ return (void*) vkCreateSwapChainWSI;
+ if (!strcmp(name, "DestroySwapChainWSI"))
+ return (void*) vkDestroySwapChainWSI;
+ if (!strcmp(name, "GetSwapChainInfoWSI"))
+ return (void*) vkGetSwapChainInfoWSI;
+ if (!strcmp(name, "QueuePresentWSI"))
+ return (void*) vkQueuePresentWSI;
+
+ return NULL;
+}
+
+static inline void* layer_intercept_instance_proc(const char *name)
+{
+ if (!name || name[0] != 'v' || name[1] != 'k')
+ return NULL;
+
+ name += 2;
+ if (!strcmp(name, "GetInstanceProcAddr"))
+ return (void*) vkGetInstanceProcAddr;
+ if (!strcmp(name, "CreateInstance"))
+ return (void*) vkCreateInstance;
+ if (!strcmp(name, "DestroyInstance"))
+ return (void*) vkDestroyInstance;
+ if (!strcmp(name, "GetPhysicalDeviceInfo"))
+ return (void*) vkGetPhysicalDeviceInfo;
+ if (!strcmp(name, "GetProcAddr"))
+ return (void*) vkGetProcAddr;
+ if (!strcmp(name, "CreateDevice"))
+ return (void*) vkCreateDevice;
+ if (!strcmp(name, "GetGlobalExtensionInfo"))
+ return (void*) vkGetGlobalExtensionInfo;
+ if (!strcmp(name, "GetPhysicalDeviceExtensionInfo"))
+ return (void*) vkGetPhysicalDeviceExtensionInfo;
+ if (!strcmp(name, "EnumerateLayers"))
+ return (void*) vkEnumerateLayers;
+ if (!strcmp(name, "GetMultiDeviceCompatibility"))
+ return (void*) vkGetMultiDeviceCompatibility;
+ if (!strcmp(name, "DbgRegisterMsgCallback"))
+ return (void*) vkDbgRegisterMsgCallback;
+ if (!strcmp(name, "DbgUnregisterMsgCallback"))
+ return (void*) vkDbgUnregisterMsgCallback;
+ if (!strcmp(name, "DbgSetGlobalOption"))
+ return (void*) vkDbgSetGlobalOption;
+
+ return NULL;
+}
+
VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char* funcName)
{
VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
@@ -1969,7 +2258,25 @@ VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char* func
else {
if (gpuw->pGPA == NULL)
return NULL;
- return gpuw->pGPA((VkPhysicalDevice)gpuw->nextObject, funcName);
+ return gpuw->pGPA((VkObject)gpuw->nextObject, funcName);
}
}
+VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr(VkInstance inst, const char* funcName)
+{
+ VkBaseLayerObject* instw = (VkBaseLayerObject *) inst;
+ void* addr;
+ if (inst == NULL)
+ return NULL;
+ //TODO pCurObj = instw;
+ //TODO loader_platform_thread_once(&tabOnce, initParamChecker);
+
+ addr = layer_intercept_instance_proc(funcName);
+ if (addr)
+ return addr;
+ else {
+ if (instw->pGPA == NULL)
+ return NULL;
+ return instw->pGPA((VkObject)instw->nextObject, funcName);
+ }
+}