aboutsummaryrefslogtreecommitdiff
path: root/loader/extensions.c
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2016-08-29 14:54:34 -0600
committerMark Lobodzinski <mark@lunarg.com>2016-08-31 13:27:14 -0600
commit0ec7f3d96390a6a68debec142b1bdac106b6529f (patch)
tree7fa70a11dbbc67c903ff084f21843d41407c87a0 /loader/extensions.c
parent8b690b3313d17f47c738971d2a5db5cf6f03acee (diff)
downloadusermoji-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.c49
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;
+ }
}
}