From e51a2d221f10b0d322592a6ff3d505ae692df5a1 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 30 Jan 2017 15:43:56 +0000 Subject: [PATCH] Add support for VK_KHR_maintenance1 * We can silently support 3D slice rendering and copies to 2D, this is just a driver-side change. * Ditto for supporting vkCmdFillBuffer on transfer queues. * We don't have anything to do with format queries or error returns. * We already support negative viewport height for VK_AMD_negative_viewport_height. * So it's only the new command for trimming command pools that we need to support - and that is just passthrough/non-recorded. --- renderdoc/driver/vulkan/vk_core.cpp | 3 +++ renderdoc/driver/vulkan/vk_core.h | 4 ++++ renderdoc/driver/vulkan/vk_hookset_defs.h | 6 +++++- renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp | 6 ++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 4d2312383..dce138483 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -724,6 +724,9 @@ static const VkExtensionProperties supportedExtensions[] = { VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME, VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION, }, #endif + { + VK_KHR_MAINTENANCE1_EXTENSION_NAME, VK_KHR_MAINTENANCE1_SPEC_VERSION, + }, { VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 2dcf07dc2..29699d61b 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -1403,4 +1403,8 @@ public: VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties); + + // VK_KHR_maintenance1 + void vkTrimCommandPoolKHR(VkDevice device, VkCommandPool commandPool, + VkCommandPoolTrimFlagsKHR flags); }; diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 57cb986b1..4c8ce4db1 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -265,7 +265,8 @@ CheckExt(VK_KHR_display_swapchain); \ CheckExt(VK_NV_external_memory); \ CheckExt(VK_NV_external_memory_win32); \ - CheckExt(VK_NV_win32_keyed_mutex); + CheckExt(VK_NV_win32_keyed_mutex); \ + CheckExt(VK_KHR_maintenance1); #define HookInitVulkanInstanceExts() \ HookInitExtension(VK_KHR_surface, DestroySurfaceKHR); \ @@ -299,6 +300,7 @@ HookInitExtension(VK_KHR_swapchain, AcquireNextImageKHR); \ HookInitExtension(VK_KHR_swapchain, QueuePresentKHR); \ HookInitExtension(VK_KHR_display_swapchain, CreateSharedSwapchainsKHR); \ + HookInitExtension(VK_KHR_maintenance1, TrimCommandPoolKHR); \ HookInitDevice_PlatformSpecific() #define DefineHooks() \ @@ -651,6 +653,8 @@ VkImageUsageFlags, usage, VkImageCreateFlags, flags, \ VkExternalMemoryHandleTypeFlagsNV, externalHandleType, \ VkExternalImageFormatPropertiesNV *, pExternalImageFormatProperties); \ + HookDefine3(void, vkTrimCommandPoolKHR, VkDevice, device, VkCommandPool, commandPool, \ + VkCommandPoolTrimFlagsKHR, flags); \ HookDefine_PlatformSpecific() struct VkLayerInstanceDispatchTableExtended : VkLayerInstanceDispatchTable diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index e3e766456..618fc5e59 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -377,6 +377,12 @@ VkResult WrappedVulkan::vkResetCommandPool(VkDevice device, VkCommandPool cmdPoo return ObjDisp(device)->ResetCommandPool(Unwrap(device), Unwrap(cmdPool), flags); } +void WrappedVulkan::vkTrimCommandPoolKHR(VkDevice device, VkCommandPool commandPool, + VkCommandPoolTrimFlagsKHR flags) +{ + return ObjDisp(device)->TrimCommandPoolKHR(Unwrap(device), Unwrap(commandPool), flags); +} + // Command buffer functions VkResult WrappedVulkan::vkAllocateCommandBuffers(VkDevice device,