diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2016-08-29 14:54:34 -0600 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2016-08-31 13:27:14 -0600 |
| commit | 0ec7f3d96390a6a68debec142b1bdac106b6529f (patch) | |
| tree | 7fa70a11dbbc67c903ff084f21843d41407c87a0 /loader | |
| parent | 8b690b3313d17f47c738971d2a5db5cf6f03acee (diff) | |
| download | usermoji-0ec7f3d96390a6a68debec142b1bdac106b6529f.tar.xz | |
loader: Add support for AMD device extension
Added vkCmdDrawIndirectCountAMD and vkCmdDrawIndexedIndirectCountAMD
from the VK_AMD_draw_indirect_count extension to the loader.
Change-Id: I4e1810dd6efcc54291a35d1ce9a15e59830689f3
Diffstat (limited to 'loader')
| -rw-r--r-- | loader/extensions.c | 49 | ||||
| -rw-r--r-- | loader/table_ops.h | 5 |
2 files changed, 54 insertions, 0 deletions
diff --git a/loader/extensions.c b/loader/extensions.c index 47a3c12c..3ba4b77b 100644 --- a/loader/extensions.c +++ b/loader/extensions.c @@ -75,16 +75,59 @@ terminator_GetPhysicalDeviceExternalImageFormatPropertiesNV( externalHandleType, pExternalImageFormatProperties); } +// Definitions for the VK_AMD_draw_indirect_count extension + +static const VkExtensionProperties amd_draw_indirect_count_extension_info = { + .extensionName = VK_AMD_EXTENSION_DRAW_INDIRECT_COUNT_EXTENSION_NAME, + .specVersion = VK_AMD_EXTENSION_DRAW_INDIRECT_COUNT_SPEC_VERSION, +}; + +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD( + VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, + VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp; + + disp = loader_get_dispatch(commandBuffer); + disp->CmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, + countBufferOffset, maxDrawCount, stride); +} + +VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD( + VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, + VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, + uint32_t stride) { + const VkLayerDispatchTable *disp; + + disp = loader_get_dispatch(commandBuffer); + disp->CmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, + countBuffer, countBufferOffset, + maxDrawCount, stride); +} + bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr) { *addr = NULL; // Functions for the VK_NV_external_memory_capabilities extension + if (!strcmp("vkGetPhysicalDeviceExternalImageFormatPropertiesNV", name)) { *addr = (void *)vkGetPhysicalDeviceExternalImageFormatPropertiesNV; return true; } + // Functions for the VK_AMD_draw_indirect_count extension + + if (!strcmp("vkCmdDrawIndirectCountAMD", name)) { + *addr = (void *)vkCmdDrawIndirectCountAMD; + return true; + } + + if (!strcmp("vkCmdDrawIndexedIndirectCountAMD", name)) { + *addr = (void *)vkCmdDrawIndexedIndirectCountAMD; + return true; + } + return false; } @@ -97,5 +140,11 @@ void extensions_create_instance(struct loader_instance *ptr_instance, // Nothing to do; return; } + + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], + VK_AMD_EXTENSION_DRAW_INDIRECT_COUNT_EXTENSION_NAME) == 0) { + // Nothing to do; + return; + } } } diff --git a/loader/table_ops.h b/loader/table_ops.h index f527f6a2..014607ad 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -267,6 +267,11 @@ static inline void loader_init_device_extension_dispatch_table( (PFN_vkGetSwapchainImagesKHR)gpa(dev, "vkGetSwapchainImagesKHR"); table->QueuePresentKHR = (PFN_vkQueuePresentKHR)gpa(dev, "vkQueuePresentKHR"); + table->CmdDrawIndirectCountAMD = + (PFN_vkCmdDrawIndirectCountAMD)gpa(dev, "vkCmdDrawIndirectCountAMD"); + table->CmdDrawIndexedIndirectCountAMD = + (PFN_vkCmdDrawIndexedIndirectCountAMD)gpa( + dev, "vkCmdDrawIndexedIndirectCountAMD"); } static inline void * |
