mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-07 07:11:06 +00:00
Add support for direct mode display extensions
* Minor change made to vulkan.h to avoid including Xrandr.h directly and adding a new dependency, when all we need is the RROutput typedef
This commit is contained in:
@@ -55,7 +55,7 @@ elseif(UNIX)
|
||||
list(APPEND sources vk_posix.cpp vk_linux.cpp)
|
||||
|
||||
if(ENABLE_XLIB)
|
||||
add_definitions(-DVK_USE_PLATFORM_XLIB_KHR)
|
||||
add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_XRANDR_EXT)
|
||||
endif()
|
||||
|
||||
if(ENABLE_XCB)
|
||||
|
||||
@@ -4605,7 +4605,12 @@ VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT(
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
#define VK_EXT_acquire_xlib_display 1
|
||||
#include <X11/extensions/Xrandr.h>
|
||||
|
||||
// RenderDoc modification
|
||||
// Don't want to depend on Xrandr for this
|
||||
//#include <X11/extensions/Xrandr.h>
|
||||
|
||||
typedef unsigned int RROutput;
|
||||
|
||||
#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1
|
||||
#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display"
|
||||
|
||||
@@ -710,9 +710,17 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME, VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION,
|
||||
},
|
||||
#ifdef VK_EXT_acquire_xlib_display
|
||||
{
|
||||
VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME, VK_EXT_DISPLAY_CONTROL_SPEC_VERSION,
|
||||
},
|
||||
|
||||
@@ -1324,6 +1324,7 @@ public:
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
|
||||
#if defined(VK_USE_PLATFORM_WIN32_KHR)
|
||||
// VK_KHR_win32_surface
|
||||
VkResult vkCreateWin32SurfaceKHR(VkInstance instance,
|
||||
const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
@@ -1337,12 +1338,14 @@ public:
|
||||
#endif
|
||||
|
||||
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
// VK_KHR_android_surface
|
||||
VkResult vkCreateAndroidSurfaceKHR(VkInstance instance,
|
||||
const VkAndroidSurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
#endif
|
||||
|
||||
#if defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
// VK_KHR_xcb_surface
|
||||
VkResult vkCreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
|
||||
@@ -1353,12 +1356,20 @@ public:
|
||||
#endif
|
||||
|
||||
#if defined(VK_USE_PLATFORM_XLIB_KHR)
|
||||
// VK_KHR_xlib_surface
|
||||
VkResult vkCreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
|
||||
VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex, Display *dpy,
|
||||
VisualID visualID);
|
||||
|
||||
// VK_EXT_acquire_xlib_display
|
||||
VkResult vkAcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy,
|
||||
VkDisplayKHR display);
|
||||
VkResult vkGetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy,
|
||||
RROutput rrOutput, VkDisplayKHR *pDisplay);
|
||||
|
||||
#endif
|
||||
|
||||
// VK_KHR_display and VK_KHR_display_swapchain. These have no library or include dependencies so
|
||||
@@ -1441,4 +1452,7 @@ public:
|
||||
const VkAllocationCallbacks *pAllocator, VkFence *pFence);
|
||||
VkResult vkGetSwapchainCounterEXT(VkDevice device, VkSwapchainKHR swapchain,
|
||||
VkSurfaceCounterFlagBitsEXT counter, uint64_t *pCounterValue);
|
||||
|
||||
// VK_EXT_direct_mode_display
|
||||
VkResult vkReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
|
||||
};
|
||||
|
||||
@@ -81,16 +81,22 @@
|
||||
|
||||
#if defined(VK_USE_PLATFORM_XLIB_KHR)
|
||||
|
||||
#define HookInitInstance_PlatformSpecific_Xlib() \
|
||||
HookInitExtension(VK_KHR_xlib_surface, CreateXlibSurfaceKHR); \
|
||||
HookInitExtension(VK_KHR_xlib_surface, GetPhysicalDeviceXlibPresentationSupportKHR);
|
||||
#define HookInitInstance_PlatformSpecific_Xlib() \
|
||||
HookInitExtension(VK_KHR_xlib_surface, CreateXlibSurfaceKHR); \
|
||||
HookInitExtension(VK_KHR_xlib_surface, GetPhysicalDeviceXlibPresentationSupportKHR); \
|
||||
HookInitExtension(VK_EXT_acquire_xlib_display, AcquireXlibDisplayEXT); \
|
||||
HookInitExtension(VK_EXT_acquire_xlib_display, GetRandROutputDisplayEXT);
|
||||
|
||||
#define HookDefine_PlatformSpecific_Xlib() \
|
||||
HookDefine4(VkResult, vkCreateXlibSurfaceKHR, VkInstance, instance, \
|
||||
const VkXlibSurfaceCreateInfoKHR *, pCreateInfo, const VkAllocationCallbacks *, \
|
||||
pAllocator, VkSurfaceKHR *, pSurface); \
|
||||
HookDefine4(VkBool32, vkGetPhysicalDeviceXlibPresentationSupportKHR, VkPhysicalDevice, \
|
||||
physicalDevice, uint32_t, queueFamilyIndex, Display *, dpy, VisualID, visualID);
|
||||
#define HookDefine_PlatformSpecific_Xlib() \
|
||||
HookDefine4(VkResult, vkCreateXlibSurfaceKHR, VkInstance, instance, \
|
||||
const VkXlibSurfaceCreateInfoKHR *, pCreateInfo, const VkAllocationCallbacks *, \
|
||||
pAllocator, VkSurfaceKHR *, pSurface); \
|
||||
HookDefine4(VkBool32, vkGetPhysicalDeviceXlibPresentationSupportKHR, VkPhysicalDevice, \
|
||||
physicalDevice, uint32_t, queueFamilyIndex, Display *, dpy, VisualID, visualID); \
|
||||
HookDefine3(VkResult, vkAcquireXlibDisplayEXT, VkPhysicalDevice, physicalDevice, Display *, dpy, \
|
||||
VkDisplayKHR, display); \
|
||||
HookDefine4(VkResult, vkGetRandROutputDisplayEXT, VkPhysicalDevice, physicalDevice, Display *, \
|
||||
dpy, RROutput, rrOutput, VkDisplayKHR *, pDisplay);
|
||||
|
||||
#else
|
||||
|
||||
@@ -259,7 +265,9 @@
|
||||
CheckExt(VK_KHR_display); \
|
||||
CheckExt(VK_NV_external_memory_capabilities); \
|
||||
CheckExt(VK_KHR_get_physical_device_properties2); \
|
||||
CheckExt(VK_EXT_display_surface_counter);
|
||||
CheckExt(VK_EXT_display_surface_counter); \
|
||||
CheckExt(VK_EXT_direct_mode_display); \
|
||||
CheckExt(VK_EXT_acquire_xlib_display);
|
||||
|
||||
#define CheckDeviceExts() \
|
||||
CheckExt(VK_EXT_debug_marker); \
|
||||
@@ -700,6 +708,8 @@
|
||||
pAllocator, VkFence *, pFence); \
|
||||
HookDefine4(VkResult, vkGetSwapchainCounterEXT, VkDevice, device, VkSwapchainKHR, swapchain, \
|
||||
VkSurfaceCounterFlagBitsEXT, counter, uint64_t *, pCounterValue); \
|
||||
HookDefine2(VkResult, vkReleaseDisplayEXT, VkPhysicalDevice, physicalDevice, VkDisplayKHR, \
|
||||
display); \
|
||||
HookDefine_PlatformSpecific()
|
||||
|
||||
struct VkLayerInstanceDispatchTableExtended : VkLayerInstanceDispatchTable
|
||||
|
||||
@@ -226,6 +226,21 @@ VkResult WrappedVulkan::vkCreateXlibSurfaceKHR(VkInstance instance,
|
||||
return ret;
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkAcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy,
|
||||
VkDisplayKHR display)
|
||||
{
|
||||
// display is not wrapped so we can pass straight through
|
||||
return ObjDisp(physicalDevice)->AcquireXlibDisplayEXT(Unwrap(physicalDevice), dpy, display);
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkGetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy,
|
||||
RROutput rrOutput, VkDisplayKHR *pDisplay)
|
||||
{
|
||||
// display is not wrapped so we can pass straight through
|
||||
return ObjDisp(physicalDevice)
|
||||
->GetRandROutputDisplayEXT(Unwrap(physicalDevice), dpy, rrOutput, pDisplay);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
|
||||
@@ -868,4 +868,10 @@ VkResult WrappedVulkan::vkCreateSharedSwapchainsKHR(VkDevice device, uint32_t sw
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display)
|
||||
{
|
||||
// displays are not wrapped
|
||||
return ObjDisp(physicalDevice)->ReleaseDisplayEXT(Unwrap(physicalDevice), display);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user