From 327c54adbb69ac8f65277f50d054e77c2b3a080b Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 16 May 2016 07:37:41 +0800 Subject: parameter_validation: add intercept_core_device_command It returns the function pointers for all intercepted core device commands. Call intercept_core_device_command from GetDeviceProcAddr. Assert that device is valid in GetDeviceProcAddr. --- layers/parameter_validation.cpp | 364 +++++++++++++++------------------------- 1 file changed, 136 insertions(+), 228 deletions(-) (limited to 'layers/parameter_validation.cpp') diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp index 697ed7d7..c3079509 100644 --- a/layers/parameter_validation.cpp +++ b/layers/parameter_validation.cpp @@ -4278,241 +4278,21 @@ VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevi ->EnumerateDeviceExtensionProperties(physicalDevice, NULL, pCount, pProperties); } +static PFN_vkVoidFunction +intercept_core_device_command(const char *name); + VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) { + assert(device); + layer_data *data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); if (validate_string(data->report_data, "vkGetDeviceProcAddr", "funcName", funcName)) { return NULL; } - if (!strcmp(funcName, "vkGetDeviceProcAddr")) - return (PFN_vkVoidFunction)GetDeviceProcAddr; - if (!strcmp(funcName, "vkDestroyDevice")) - return (PFN_vkVoidFunction)DestroyDevice; - if (!strcmp(funcName, "vkGetDeviceQueue")) - return (PFN_vkVoidFunction)GetDeviceQueue; - if (!strcmp(funcName, "vkQueueSubmit")) - return (PFN_vkVoidFunction)QueueSubmit; - if (!strcmp(funcName, "vkQueueWaitIdle")) - return (PFN_vkVoidFunction)QueueWaitIdle; - if (!strcmp(funcName, "vkDeviceWaitIdle")) - return (PFN_vkVoidFunction)DeviceWaitIdle; - if (!strcmp(funcName, "vkAllocateMemory")) - return (PFN_vkVoidFunction)AllocateMemory; - if (!strcmp(funcName, "vkFreeMemory")) - return (PFN_vkVoidFunction)FreeMemory; - if (!strcmp(funcName, "vkMapMemory")) - return (PFN_vkVoidFunction)MapMemory; - if (!strcmp(funcName, "vkUnmapMemory")) - return (PFN_vkVoidFunction)UnmapMemory; - if (!strcmp(funcName, "vkFlushMappedMemoryRanges")) - return (PFN_vkVoidFunction)FlushMappedMemoryRanges; - if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges")) - return (PFN_vkVoidFunction)InvalidateMappedMemoryRanges; - if (!strcmp(funcName, "vkGetDeviceMemoryCommitment")) - return (PFN_vkVoidFunction)GetDeviceMemoryCommitment; - if (!strcmp(funcName, "vkBindBufferMemory")) - return (PFN_vkVoidFunction)BindBufferMemory; - if (!strcmp(funcName, "vkBindImageMemory")) - return (PFN_vkVoidFunction)BindImageMemory; - if (!strcmp(funcName, "vkCreateFence")) - return (PFN_vkVoidFunction)CreateFence; - if (!strcmp(funcName, "vkDestroyFence")) - return (PFN_vkVoidFunction)DestroyFence; - if (!strcmp(funcName, "vkResetFences")) - return (PFN_vkVoidFunction)ResetFences; - if (!strcmp(funcName, "vkGetFenceStatus")) - return (PFN_vkVoidFunction)GetFenceStatus; - if (!strcmp(funcName, "vkWaitForFences")) - return (PFN_vkVoidFunction)WaitForFences; - if (!strcmp(funcName, "vkCreateSemaphore")) - return (PFN_vkVoidFunction)CreateSemaphore; - if (!strcmp(funcName, "vkDestroySemaphore")) - return (PFN_vkVoidFunction)DestroySemaphore; - if (!strcmp(funcName, "vkCreateEvent")) - return (PFN_vkVoidFunction)CreateEvent; - if (!strcmp(funcName, "vkDestroyEvent")) - return (PFN_vkVoidFunction)DestroyEvent; - if (!strcmp(funcName, "vkGetEventStatus")) - return (PFN_vkVoidFunction)GetEventStatus; - if (!strcmp(funcName, "vkSetEvent")) - return (PFN_vkVoidFunction)SetEvent; - if (!strcmp(funcName, "vkResetEvent")) - return (PFN_vkVoidFunction)ResetEvent; - if (!strcmp(funcName, "vkCreateQueryPool")) - return (PFN_vkVoidFunction)CreateQueryPool; - if (!strcmp(funcName, "vkDestroyQueryPool")) - return (PFN_vkVoidFunction)DestroyQueryPool; - if (!strcmp(funcName, "vkGetQueryPoolResults")) - return (PFN_vkVoidFunction)GetQueryPoolResults; - if (!strcmp(funcName, "vkCreateBuffer")) - return (PFN_vkVoidFunction)CreateBuffer; - if (!strcmp(funcName, "vkDestroyBuffer")) - return (PFN_vkVoidFunction)DestroyBuffer; - if (!strcmp(funcName, "vkCreateBufferView")) - return (PFN_vkVoidFunction)CreateBufferView; - if (!strcmp(funcName, "vkDestroyBufferView")) - return (PFN_vkVoidFunction)DestroyBufferView; - if (!strcmp(funcName, "vkCreateImage")) - return (PFN_vkVoidFunction)CreateImage; - if (!strcmp(funcName, "vkDestroyImage")) - return (PFN_vkVoidFunction)DestroyImage; - if (!strcmp(funcName, "vkGetImageSubresourceLayout")) - return (PFN_vkVoidFunction)GetImageSubresourceLayout; - if (!strcmp(funcName, "vkCreateImageView")) - return (PFN_vkVoidFunction)CreateImageView; - if (!strcmp(funcName, "vkDestroyImageView")) - return (PFN_vkVoidFunction)DestroyImageView; - if (!strcmp(funcName, "vkCreateShaderModule")) - return (PFN_vkVoidFunction)CreateShaderModule; - if (!strcmp(funcName, "vkDestroyShaderModule")) - return (PFN_vkVoidFunction)DestroyShaderModule; - if (!strcmp(funcName, "vkCreatePipelineCache")) - return (PFN_vkVoidFunction)CreatePipelineCache; - if (!strcmp(funcName, "vkDestroyPipelineCache")) - return (PFN_vkVoidFunction)DestroyPipelineCache; - if (!strcmp(funcName, "vkGetPipelineCacheData")) - return (PFN_vkVoidFunction)GetPipelineCacheData; - if (!strcmp(funcName, "vkMergePipelineCaches")) - return (PFN_vkVoidFunction)MergePipelineCaches; - if (!strcmp(funcName, "vkCreateGraphicsPipelines")) - return (PFN_vkVoidFunction)CreateGraphicsPipelines; - if (!strcmp(funcName, "vkCreateComputePipelines")) - return (PFN_vkVoidFunction)CreateComputePipelines; - if (!strcmp(funcName, "vkDestroyPipeline")) - return (PFN_vkVoidFunction)DestroyPipeline; - if (!strcmp(funcName, "vkCreatePipelineLayout")) - return (PFN_vkVoidFunction)CreatePipelineLayout; - if (!strcmp(funcName, "vkDestroyPipelineLayout")) - return (PFN_vkVoidFunction)DestroyPipelineLayout; - if (!strcmp(funcName, "vkCreateSampler")) - return (PFN_vkVoidFunction)CreateSampler; - if (!strcmp(funcName, "vkDestroySampler")) - return (PFN_vkVoidFunction)DestroySampler; - if (!strcmp(funcName, "vkCreateDescriptorSetLayout")) - return (PFN_vkVoidFunction)CreateDescriptorSetLayout; - if (!strcmp(funcName, "vkDestroyDescriptorSetLayout")) - return (PFN_vkVoidFunction)DestroyDescriptorSetLayout; - if (!strcmp(funcName, "vkCreateDescriptorPool")) - return (PFN_vkVoidFunction)CreateDescriptorPool; - if (!strcmp(funcName, "vkDestroyDescriptorPool")) - return (PFN_vkVoidFunction)DestroyDescriptorPool; - if (!strcmp(funcName, "vkResetDescriptorPool")) - return (PFN_vkVoidFunction)ResetDescriptorPool; - if (!strcmp(funcName, "vkAllocateDescriptorSets")) - return (PFN_vkVoidFunction)AllocateDescriptorSets; - if (!strcmp(funcName, "vkFreeDescriptorSets")) - return (PFN_vkVoidFunction)FreeDescriptorSets; - if (!strcmp(funcName, "vkUpdateDescriptorSets")) - return (PFN_vkVoidFunction)UpdateDescriptorSets; - if (!strcmp(funcName, "vkCmdSetViewport")) - return (PFN_vkVoidFunction)CmdSetViewport; - if (!strcmp(funcName, "vkCmdSetScissor")) - return (PFN_vkVoidFunction)CmdSetScissor; - if (!strcmp(funcName, "vkCmdSetLineWidth")) - return (PFN_vkVoidFunction)CmdSetLineWidth; - if (!strcmp(funcName, "vkCmdSetDepthBias")) - return (PFN_vkVoidFunction)CmdSetDepthBias; - if (!strcmp(funcName, "vkCmdSetBlendConstants")) - return (PFN_vkVoidFunction)CmdSetBlendConstants; - if (!strcmp(funcName, "vkCmdSetDepthBounds")) - return (PFN_vkVoidFunction)CmdSetDepthBounds; - if (!strcmp(funcName, "vkCmdSetStencilCompareMask")) - return (PFN_vkVoidFunction)CmdSetStencilCompareMask; - if (!strcmp(funcName, "vkCmdSetStencilWriteMask")) - return (PFN_vkVoidFunction)CmdSetStencilWriteMask; - if (!strcmp(funcName, "vkCmdSetStencilReference")) - return (PFN_vkVoidFunction)CmdSetStencilReference; - if (!strcmp(funcName, "vkAllocateCommandBuffers")) - return (PFN_vkVoidFunction)AllocateCommandBuffers; - if (!strcmp(funcName, "vkFreeCommandBuffers")) - return (PFN_vkVoidFunction)FreeCommandBuffers; - if (!strcmp(funcName, "vkBeginCommandBuffer")) - return (PFN_vkVoidFunction)BeginCommandBuffer; - if (!strcmp(funcName, "vkEndCommandBuffer")) - return (PFN_vkVoidFunction)EndCommandBuffer; - if (!strcmp(funcName, "vkResetCommandBuffer")) - return (PFN_vkVoidFunction)ResetCommandBuffer; - if (!strcmp(funcName, "vkCmdBindPipeline")) - return (PFN_vkVoidFunction)CmdBindPipeline; - if (!strcmp(funcName, "vkCmdBindDescriptorSets")) - return (PFN_vkVoidFunction)CmdBindDescriptorSets; - if (!strcmp(funcName, "vkCmdBindVertexBuffers")) - return (PFN_vkVoidFunction)CmdBindVertexBuffers; - if (!strcmp(funcName, "vkCmdBindIndexBuffer")) - return (PFN_vkVoidFunction)CmdBindIndexBuffer; - if (!strcmp(funcName, "vkCmdDraw")) - return (PFN_vkVoidFunction)CmdDraw; - if (!strcmp(funcName, "vkCmdDrawIndexed")) - return (PFN_vkVoidFunction)CmdDrawIndexed; - if (!strcmp(funcName, "vkCmdDrawIndirect")) - return (PFN_vkVoidFunction)CmdDrawIndirect; - if (!strcmp(funcName, "vkCmdDrawIndexedIndirect")) - return (PFN_vkVoidFunction)CmdDrawIndexedIndirect; - if (!strcmp(funcName, "vkCmdDispatch")) - return (PFN_vkVoidFunction)CmdDispatch; - if (!strcmp(funcName, "vkCmdDispatchIndirect")) - return (PFN_vkVoidFunction)CmdDispatchIndirect; - if (!strcmp(funcName, "vkCmdCopyBuffer")) - return (PFN_vkVoidFunction)CmdCopyBuffer; - if (!strcmp(funcName, "vkCmdCopyImage")) - return (PFN_vkVoidFunction)CmdCopyImage; - if (!strcmp(funcName, "vkCmdBlitImage")) - return (PFN_vkVoidFunction)CmdBlitImage; - if (!strcmp(funcName, "vkCmdCopyBufferToImage")) - return (PFN_vkVoidFunction)CmdCopyBufferToImage; - if (!strcmp(funcName, "vkCmdCopyImageToBuffer")) - return (PFN_vkVoidFunction)CmdCopyImageToBuffer; - if (!strcmp(funcName, "vkCmdUpdateBuffer")) - return (PFN_vkVoidFunction)CmdUpdateBuffer; - if (!strcmp(funcName, "vkCmdFillBuffer")) - return (PFN_vkVoidFunction)CmdFillBuffer; - if (!strcmp(funcName, "vkCmdClearColorImage")) - return (PFN_vkVoidFunction)CmdClearColorImage; - if (!strcmp(funcName, "vkCmdResolveImage")) - return (PFN_vkVoidFunction)CmdResolveImage; - if (!strcmp(funcName, "vkCmdSetEvent")) - return (PFN_vkVoidFunction)CmdSetEvent; - if (!strcmp(funcName, "vkCmdResetEvent")) - return (PFN_vkVoidFunction)CmdResetEvent; - if (!strcmp(funcName, "vkCmdWaitEvents")) - return (PFN_vkVoidFunction)CmdWaitEvents; - if (!strcmp(funcName, "vkCmdPipelineBarrier")) - return (PFN_vkVoidFunction)CmdPipelineBarrier; - if (!strcmp(funcName, "vkCmdBeginQuery")) - return (PFN_vkVoidFunction)CmdBeginQuery; - if (!strcmp(funcName, "vkCmdEndQuery")) - return (PFN_vkVoidFunction)CmdEndQuery; - if (!strcmp(funcName, "vkCmdResetQueryPool")) - return (PFN_vkVoidFunction)CmdResetQueryPool; - if (!strcmp(funcName, "vkCmdWriteTimestamp")) - return (PFN_vkVoidFunction)CmdWriteTimestamp; - if (!strcmp(funcName, "vkCmdCopyQueryPoolResults")) - return (PFN_vkVoidFunction)CmdCopyQueryPoolResults; - if (!strcmp(funcName, "vkCreateFramebuffer")) - return (PFN_vkVoidFunction)CreateFramebuffer; - if (!strcmp(funcName, "vkDestroyFramebuffer")) - return (PFN_vkVoidFunction)DestroyFramebuffer; - if (!strcmp(funcName, "vkCreateRenderPass")) - return (PFN_vkVoidFunction)CreateRenderPass; - if (!strcmp(funcName, "vkDestroyRenderPass")) - return (PFN_vkVoidFunction)DestroyRenderPass; - if (!strcmp(funcName, "vkGetRenderAreaGranularity")) - return (PFN_vkVoidFunction)GetRenderAreaGranularity; - if (!strcmp(funcName, "vkCreateCommandPool")) - return (PFN_vkVoidFunction)CreateCommandPool; - if (!strcmp(funcName, "vkDestroyCommandPool")) - return (PFN_vkVoidFunction)DestroyCommandPool; - if (!strcmp(funcName, "vkResetCommandPool")) - return (PFN_vkVoidFunction)ResetCommandPool; - if (!strcmp(funcName, "vkCmdBeginRenderPass")) - return (PFN_vkVoidFunction)CmdBeginRenderPass; - if (!strcmp(funcName, "vkCmdNextSubpass")) - return (PFN_vkVoidFunction)CmdNextSubpass; - - if (device == NULL) { - return NULL; - } + PFN_vkVoidFunction proc = intercept_core_device_command(funcName); + if (proc) + return proc; if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL) return NULL; @@ -4568,6 +4348,134 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName); } +static PFN_vkVoidFunction +intercept_core_device_command(const char *name) { + static const struct { + const char *name; + PFN_vkVoidFunction proc; + } core_device_commands[] = { + { "vkGetDeviceProcAddr", reinterpret_cast(GetDeviceProcAddr) }, + { "vkDestroyDevice", reinterpret_cast(DestroyDevice) }, + { "vkGetDeviceQueue", reinterpret_cast(GetDeviceQueue) }, + { "vkQueueSubmit", reinterpret_cast(QueueSubmit) }, + { "vkQueueWaitIdle", reinterpret_cast(QueueWaitIdle) }, + { "vkDeviceWaitIdle", reinterpret_cast(DeviceWaitIdle) }, + { "vkAllocateMemory", reinterpret_cast(AllocateMemory) }, + { "vkFreeMemory", reinterpret_cast(FreeMemory) }, + { "vkMapMemory", reinterpret_cast(MapMemory) }, + { "vkUnmapMemory", reinterpret_cast(UnmapMemory) }, + { "vkFlushMappedMemoryRanges", reinterpret_cast(FlushMappedMemoryRanges) }, + { "vkInvalidateMappedMemoryRanges", reinterpret_cast(InvalidateMappedMemoryRanges) }, + { "vkGetDeviceMemoryCommitment", reinterpret_cast(GetDeviceMemoryCommitment) }, + { "vkBindBufferMemory", reinterpret_cast(BindBufferMemory) }, + { "vkBindImageMemory", reinterpret_cast(BindImageMemory) }, + { "vkCreateFence", reinterpret_cast(CreateFence) }, + { "vkDestroyFence", reinterpret_cast(DestroyFence) }, + { "vkResetFences", reinterpret_cast(ResetFences) }, + { "vkGetFenceStatus", reinterpret_cast(GetFenceStatus) }, + { "vkWaitForFences", reinterpret_cast(WaitForFences) }, + { "vkCreateSemaphore", reinterpret_cast(CreateSemaphore) }, + { "vkDestroySemaphore", reinterpret_cast(DestroySemaphore) }, + { "vkCreateEvent", reinterpret_cast(CreateEvent) }, + { "vkDestroyEvent", reinterpret_cast(DestroyEvent) }, + { "vkGetEventStatus", reinterpret_cast(GetEventStatus) }, + { "vkSetEvent", reinterpret_cast(SetEvent) }, + { "vkResetEvent", reinterpret_cast(ResetEvent) }, + { "vkCreateQueryPool", reinterpret_cast(CreateQueryPool) }, + { "vkDestroyQueryPool", reinterpret_cast(DestroyQueryPool) }, + { "vkGetQueryPoolResults", reinterpret_cast(GetQueryPoolResults) }, + { "vkCreateBuffer", reinterpret_cast(CreateBuffer) }, + { "vkDestroyBuffer", reinterpret_cast(DestroyBuffer) }, + { "vkCreateBufferView", reinterpret_cast(CreateBufferView) }, + { "vkDestroyBufferView", reinterpret_cast(DestroyBufferView) }, + { "vkCreateImage", reinterpret_cast(CreateImage) }, + { "vkDestroyImage", reinterpret_cast(DestroyImage) }, + { "vkGetImageSubresourceLayout", reinterpret_cast(GetImageSubresourceLayout) }, + { "vkCreateImageView", reinterpret_cast(CreateImageView) }, + { "vkDestroyImageView", reinterpret_cast(DestroyImageView) }, + { "vkCreateShaderModule", reinterpret_cast(CreateShaderModule) }, + { "vkDestroyShaderModule", reinterpret_cast(DestroyShaderModule) }, + { "vkCreatePipelineCache", reinterpret_cast(CreatePipelineCache) }, + { "vkDestroyPipelineCache", reinterpret_cast(DestroyPipelineCache) }, + { "vkGetPipelineCacheData", reinterpret_cast(GetPipelineCacheData) }, + { "vkMergePipelineCaches", reinterpret_cast(MergePipelineCaches) }, + { "vkCreateGraphicsPipelines", reinterpret_cast(CreateGraphicsPipelines) }, + { "vkCreateComputePipelines", reinterpret_cast(CreateComputePipelines) }, + { "vkDestroyPipeline", reinterpret_cast(DestroyPipeline) }, + { "vkCreatePipelineLayout", reinterpret_cast(CreatePipelineLayout) }, + { "vkDestroyPipelineLayout", reinterpret_cast(DestroyPipelineLayout) }, + { "vkCreateSampler", reinterpret_cast(CreateSampler) }, + { "vkDestroySampler", reinterpret_cast(DestroySampler) }, + { "vkCreateDescriptorSetLayout", reinterpret_cast(CreateDescriptorSetLayout) }, + { "vkDestroyDescriptorSetLayout", reinterpret_cast(DestroyDescriptorSetLayout) }, + { "vkCreateDescriptorPool", reinterpret_cast(CreateDescriptorPool) }, + { "vkDestroyDescriptorPool", reinterpret_cast(DestroyDescriptorPool) }, + { "vkResetDescriptorPool", reinterpret_cast(ResetDescriptorPool) }, + { "vkAllocateDescriptorSets", reinterpret_cast(AllocateDescriptorSets) }, + { "vkFreeDescriptorSets", reinterpret_cast(FreeDescriptorSets) }, + { "vkUpdateDescriptorSets", reinterpret_cast(UpdateDescriptorSets) }, + { "vkCmdSetViewport", reinterpret_cast(CmdSetViewport) }, + { "vkCmdSetScissor", reinterpret_cast(CmdSetScissor) }, + { "vkCmdSetLineWidth", reinterpret_cast(CmdSetLineWidth) }, + { "vkCmdSetDepthBias", reinterpret_cast(CmdSetDepthBias) }, + { "vkCmdSetBlendConstants", reinterpret_cast(CmdSetBlendConstants) }, + { "vkCmdSetDepthBounds", reinterpret_cast(CmdSetDepthBounds) }, + { "vkCmdSetStencilCompareMask", reinterpret_cast(CmdSetStencilCompareMask) }, + { "vkCmdSetStencilWriteMask", reinterpret_cast(CmdSetStencilWriteMask) }, + { "vkCmdSetStencilReference", reinterpret_cast(CmdSetStencilReference) }, + { "vkAllocateCommandBuffers", reinterpret_cast(AllocateCommandBuffers) }, + { "vkFreeCommandBuffers", reinterpret_cast(FreeCommandBuffers) }, + { "vkBeginCommandBuffer", reinterpret_cast(BeginCommandBuffer) }, + { "vkEndCommandBuffer", reinterpret_cast(EndCommandBuffer) }, + { "vkResetCommandBuffer", reinterpret_cast(ResetCommandBuffer) }, + { "vkCmdBindPipeline", reinterpret_cast(CmdBindPipeline) }, + { "vkCmdBindDescriptorSets", reinterpret_cast(CmdBindDescriptorSets) }, + { "vkCmdBindVertexBuffers", reinterpret_cast(CmdBindVertexBuffers) }, + { "vkCmdBindIndexBuffer", reinterpret_cast(CmdBindIndexBuffer) }, + { "vkCmdDraw", reinterpret_cast(CmdDraw) }, + { "vkCmdDrawIndexed", reinterpret_cast(CmdDrawIndexed) }, + { "vkCmdDrawIndirect", reinterpret_cast(CmdDrawIndirect) }, + { "vkCmdDrawIndexedIndirect", reinterpret_cast(CmdDrawIndexedIndirect) }, + { "vkCmdDispatch", reinterpret_cast(CmdDispatch) }, + { "vkCmdDispatchIndirect", reinterpret_cast(CmdDispatchIndirect) }, + { "vkCmdCopyBuffer", reinterpret_cast(CmdCopyBuffer) }, + { "vkCmdCopyImage", reinterpret_cast(CmdCopyImage) }, + { "vkCmdBlitImage", reinterpret_cast(CmdBlitImage) }, + { "vkCmdCopyBufferToImage", reinterpret_cast(CmdCopyBufferToImage) }, + { "vkCmdCopyImageToBuffer", reinterpret_cast(CmdCopyImageToBuffer) }, + { "vkCmdUpdateBuffer", reinterpret_cast(CmdUpdateBuffer) }, + { "vkCmdFillBuffer", reinterpret_cast(CmdFillBuffer) }, + { "vkCmdClearColorImage", reinterpret_cast(CmdClearColorImage) }, + { "vkCmdResolveImage", reinterpret_cast(CmdResolveImage) }, + { "vkCmdSetEvent", reinterpret_cast(CmdSetEvent) }, + { "vkCmdResetEvent", reinterpret_cast(CmdResetEvent) }, + { "vkCmdWaitEvents", reinterpret_cast(CmdWaitEvents) }, + { "vkCmdPipelineBarrier", reinterpret_cast(CmdPipelineBarrier) }, + { "vkCmdBeginQuery", reinterpret_cast(CmdBeginQuery) }, + { "vkCmdEndQuery", reinterpret_cast(CmdEndQuery) }, + { "vkCmdResetQueryPool", reinterpret_cast(CmdResetQueryPool) }, + { "vkCmdWriteTimestamp", reinterpret_cast(CmdWriteTimestamp) }, + { "vkCmdCopyQueryPoolResults", reinterpret_cast(CmdCopyQueryPoolResults) }, + { "vkCreateFramebuffer", reinterpret_cast(CreateFramebuffer) }, + { "vkDestroyFramebuffer", reinterpret_cast(DestroyFramebuffer) }, + { "vkCreateRenderPass", reinterpret_cast(CreateRenderPass) }, + { "vkDestroyRenderPass", reinterpret_cast(DestroyRenderPass) }, + { "vkGetRenderAreaGranularity", reinterpret_cast(GetRenderAreaGranularity) }, + { "vkCreateCommandPool", reinterpret_cast(CreateCommandPool) }, + { "vkDestroyCommandPool", reinterpret_cast(DestroyCommandPool) }, + { "vkResetCommandPool", reinterpret_cast(ResetCommandPool) }, + { "vkCmdBeginRenderPass", reinterpret_cast(CmdBeginRenderPass) }, + { "vkCmdNextSubpass", reinterpret_cast(CmdNextSubpass) }, + }; + + for (size_t i = 0; i < ARRAY_SIZE(core_device_commands); i++) { + if (!strcmp(core_device_commands[i].name, name)) + return core_device_commands[i].proc; + } + + return nullptr; +} + } // namespace parameter_validation // vk_layer_logging.h expects these to be defined -- cgit v1.2.3