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/extensions.c | |
| 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/extensions.c')
| -rw-r--r-- | loader/extensions.c | 49 |
1 files changed, 49 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; + } } } |
