diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2016-09-28 12:58:00 -0600 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2016-10-03 15:04:48 -0600 |
| commit | e0e7f21b55b559ae3ca2bf41df43a4b630f3edf0 (patch) | |
| tree | 30e7d17b872d6ca25531a2f1ee1c25e170d42ebc /layers/object_tracker.cpp | |
| parent | 7ddb08eba1d531f685cdaaeff147a98750fa9d75 (diff) | |
| download | usermoji-e0e7f21b55b559ae3ca2bf41df43a4b630f3edf0.tar.xz | |
layers: Add VK_AMD_draw_indirect_count ext to OT
Added CmdDrawIndirectCountAMD and CmdDrawIndexedIndirectCountAMD APIs
for this extension to object_tracker.
Change-Id: I99fcadc9660316864666f86040e256a392565569
Diffstat (limited to 'layers/object_tracker.cpp')
| -rw-r--r-- | layers/object_tracker.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp index 250eacad..13e1502b 100644 --- a/layers/object_tracker.cpp +++ b/layers/object_tracker.cpp @@ -3679,6 +3679,36 @@ VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(VkDevice device, VkDeviceM } #endif // VK_USE_PLATFORM_WIN32_KHR +// VK_AMD_draw_indirect_count Extension +VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, + VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, + uint32_t stride) { + bool skip_call = VK_FALSE; + std::unique_lock<std::mutex> lock(global_lock); + skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); + skip_call |= ValidateObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); + lock.unlock(); + if (!skip_call) { + get_dispatch_table(ot_device_table_map, commandBuffer) + ->CmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + } +} + +VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountAMD(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, + VkBuffer countBuffer, VkDeviceSize countBufferOffset, + uint32_t maxDrawCount, uint32_t stride) { + bool skip_call = VK_FALSE; + std::unique_lock<std::mutex> lock(global_lock); + skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); + skip_call |= ValidateObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); + lock.unlock(); + if (!skip_call) { + get_dispatch_table(ot_device_table_map, commandBuffer) + ->CmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); + } +} + + static inline PFN_vkVoidFunction InterceptCoreDeviceCommand(const char *name) { if (!name || name[0] != 'v' || name[1] != 'k') return NULL; @@ -3940,6 +3970,10 @@ static inline PFN_vkVoidFunction InterceptCoreDeviceCommand(const char *name) { if (!strcmp(name, "GetMemoryWin32HandleNV")) return (PFN_vkVoidFunction)GetMemoryWin32HandleNV; #endif // VK_USE_PLATFORM_WIN32_KHR + if (!strcmp(name, "CmdDrawIndirectCountAMD")) + return (PFN_vkVoidFunction)CmdDrawIndirectCountAMD; + if (!strcmp(name, "CmdDrawIndexedIndirectCountAMD")) + return (PFN_vkVoidFunction)CmdDrawIndexedIndirectCountAMD; return NULL; } |
