mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-26 01:11:49 +00:00
Add support for VK_KHR_shared_presentable_image
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user