Add support for VK_KHR_shared_presentable_image

This commit is contained in:
baldurk
2018-10-11 19:18:35 +01:00
parent 2b7070eddf
commit d8dc4d95ec
6 changed files with 27 additions and 2 deletions
+1 -1
View File
@@ -831,7 +831,7 @@ VkAccessFlags MakeAccessMask(VkImageLayout layout)
void ReplacePresentableImageLayout(VkImageLayout &layout)
{
if(layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)
if(layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR || layout == VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR)
layout = VK_IMAGE_LAYOUT_GENERAL;
}
+6
View File
@@ -824,6 +824,9 @@ static const VkExtensionProperties supportedExtensions[] = {
{
VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION,
},
{
VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION,
},
{
VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME,
VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION,
@@ -1410,6 +1413,9 @@ bool WrappedVulkan::EndFrameCapture(void *dev, void *wnd)
{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1},
};
if(swapInfo.shared)
bbBarrier.oldLayout = VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR;
DoPipelineBarrier(cmd, 1, &bbBarrier);
if(swapQueueIndex != m_QueueFamilyIdx)
+3
View File
@@ -1912,4 +1912,7 @@ public:
VkResult vkGetValidationCacheDataEXT(VkDevice device, VkValidationCacheEXT validationCache,
size_t *pDataSize, void *pData);
// VK_KHR_shared_presentable_image
VkResult vkGetSwapchainStatusKHR(VkDevice device, VkSwapchainKHR swapchain);
};
+4 -1
View File
@@ -350,7 +350,8 @@
CheckExt(KHR_device_group, VK11); \
CheckExt(MVK_moltenvk, VKXX); \
CheckExt(KHR_draw_indirect_count, VKXX); \
CheckExt(EXT_validation_cache, VKXX);
CheckExt(EXT_validation_cache, VKXX); \
CheckExt(KHR_shared_presentable_image, VKXX);
#define HookInitVulkanInstanceExts() \
HookInitExtension(KHR_surface, DestroySurfaceKHR); \
@@ -466,6 +467,7 @@
HookInitExtension(EXT_validation_cache, DestroyValidationCacheEXT); \
HookInitExtension(EXT_validation_cache, MergeValidationCachesEXT); \
HookInitExtension(EXT_validation_cache, GetValidationCacheDataEXT); \
HookInitExtension(KHR_shared_presentable_image, GetSwapchainStatusKHR); \
HookInitDevice_PlatformSpecific()
#define DefineHooks() \
@@ -991,6 +993,7 @@
dstCache, uint32_t, srcCacheCount, const VkValidationCacheEXT *, pSrcCaches); \
HookDefine4(VkResult, vkGetValidationCacheDataEXT, VkDevice, device, VkValidationCacheEXT, \
validationCache, size_t *, pDataSize, void *, pData); \
HookDefine2(VkResult, vkGetSwapchainStatusKHR, VkDevice, device, VkSwapchainKHR, swapchain); \
HookDefine_PlatformSpecific()
struct VkLayerInstanceDispatchTableExtended : VkLayerInstanceDispatchTable
+2
View File
@@ -860,6 +860,8 @@ struct SwapchainInfo
VkExtent2D extent;
int arraySize;
bool shared;
VkRenderPass rp;
RENDERDOC_WindowHandle wndHandle;
@@ -322,6 +322,9 @@ bool WrappedVulkan::Serialise_vkCreateSwapchainKHR(SerialiserType &ser, VkDevice
swapinfo.extent = CreateInfo.imageExtent;
swapinfo.arraySize = CreateInfo.imageArrayLayers;
swapinfo.shared = (CreateInfo.presentMode == VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR ||
CreateInfo.presentMode == VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR);
swapinfo.images.resize(NumImages);
const VkImageCreateInfo imInfo = {
@@ -719,6 +722,9 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR
{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1},
};
if(swapInfo.shared)
bbBarrier.oldLayout = VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR;
bbBarrier.srcAccessMask = VK_ACCESS_ALL_READ_BITS;
bbBarrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
@@ -1043,6 +1049,11 @@ VkResult WrappedVulkan::vkGetDisplayPlaneCapabilities2KHR(
->GetDisplayPlaneCapabilities2KHR(Unwrap(physicalDevice), pDisplayPlaneInfo, pCapabilities);
}
VkResult WrappedVulkan::vkGetSwapchainStatusKHR(VkDevice device, VkSwapchainKHR swapchain)
{
return ObjDisp(device)->GetSwapchainStatusKHR(Unwrap(device), Unwrap(swapchain));
}
INSTANTIATE_FUNCTION_SERIALISED(VkResult, vkCreateSwapchainKHR, VkDevice device,
const VkSwapchainCreateInfoKHR *pCreateInfo,
const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain);