21#include <winrt/Windows.Graphics.DirectX.h>
22#include <winrt/Windows.Devices.Display.Core.h>
28namespace xrt::auxiliary::d3d::winrt {
31parseVerticalRefreshRate(const ::winrt::Windows::Devices::Display::Core::DisplayModeInfo &modeInfo)
34 modeInfo.PresentationRate().VerticalSyncRate.Denominator};
38isModeAcceptable(const ::winrt::Windows::Devices::Display::Core::DisplayModeInfo &modeInfo);
47modeComparison(const ::winrt::Windows::Devices::Display::Core::DisplayModeInfo &lhs,
48 const ::winrt::Windows::Devices::Display::Core::DisplayModeInfo &rhs);
51colorSpaceFromVulkan(VkColorSpaceKHR colorSpace, ::winrt::Windows::Graphics::DirectX::DirectXColorSpace &out)
53 using ::winrt::Windows::Graphics::DirectX::DirectXColorSpace;
55 case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR: out = DirectXColorSpace::RgbFullG22NoneP709;
return true;
56 case VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT: out = DirectXColorSpace::RgbFullG10NoneP709;
return true;
96::winrt::Windows::Devices::Display::Core::DisplayScanout
97createScanout(SystemApiCapability
const &capability,
99 ::winrt::Windows::Devices::Display::Core::DisplayDevice
const &device,
100 ::winrt::Windows::Devices::Display::Core::DisplaySource
const &source,
101 ::winrt::Windows::Devices::Display::Core::DisplaySurface
const &primary,
102 uint32_t subResourceIndex,
106#define D3D_WINRT_MAKE_STRINGIFY_CASE(WDDC_ENUM) \
107 case ::winrt::Windows::Devices::Display::Core::WDDC_ENUM: return #WDDC_ENUM
110XRT_CHECK_RESULT
constexpr const char *
111to_string(::winrt::Windows::Devices::Display::Core::DisplayManagerResult e)
114 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayManagerResult::Success);
115 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayManagerResult::UnknownFailure);
116 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayManagerResult::TargetAccessDenied);
117 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayManagerResult::TargetStale);
118 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayManagerResult::RemoteSessionNotSupported);
120 return "DisplayManagerResult::UNKNOWN";
124XRT_CHECK_RESULT
constexpr const char *
125to_string(::winrt::Windows::Devices::Display::Core::DisplayStateOperationStatus e)
128 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayStateOperationStatus::Success);
129 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayStateOperationStatus::PartialFailure);
130 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayStateOperationStatus::UnknownFailure);
131 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayStateOperationStatus::TargetOwnershipLost);
132 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayStateOperationStatus::SystemStateChanged);
133 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayStateOperationStatus::TooManyPathsForAdapter);
134 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayStateOperationStatus::ModesNotSupported);
135 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayStateOperationStatus::RemoteSessionNotSupported);
137 return "DisplayStateOperationStatus::UNKNOWN";
141XRT_CHECK_RESULT
constexpr const char *
142to_string(::winrt::Windows::Devices::Display::Core::DisplayPathStatus e)
145 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPathStatus::Unknown);
146 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPathStatus::Succeeded);
147 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPathStatus::Pending);
148 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPathStatus::Failed);
149 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPathStatus::FailedAsync);
150 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPathStatus::InvalidatedAsync);
152 return "DisplayPathStatus::UNKNOWN";
156XRT_CHECK_RESULT
constexpr const char *
157to_string(::winrt::Windows::Devices::Display::Core::DisplayPresentStatus e)
160 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPresentStatus::Success);
161 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPresentStatus::SourceStatusPreventedPresent);
162 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPresentStatus::ScanoutInvalid);
163 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPresentStatus::SourceInvalid);
164 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPresentStatus::DeviceInvalid);
165 D3D_WINRT_MAKE_STRINGIFY_CASE(DisplayPresentStatus::UnknownFailure);
167 return "DisplayPresentStatus::UNKNOWN";
169#undef D3D_WINRT_MAKE_STRINGIFY_CASE
bool modeComparison(const ::winrt::Windows::Devices::Display::Core::DisplayModeInfo &lhs, const ::winrt::Windows::Devices::Display::Core::DisplayModeInfo &rhs)
A comparison function (like std::less) for comparing display modes, such as for sorting or finding th...
Definition d3d_winrt_helpers.cpp:83
XRT_CHECK_RESULT constexpr const char * to_string(::winrt::Windows::Devices::Display::Core::DisplayManagerResult e)
Convert Windows.Devices.Display.Core.DisplayManagerResult enum values to string.
Definition d3d_winrt_helpers.hpp:111
A very simple rational number type.
Describes the supported Windows API features for direct mode.
Definition d3d_winrt_helpers.hpp:65
void populate()
Populate the fields based on the system we are running on.
Definition d3d_winrt_helpers.cpp:112
bool supportsBasicDirectMode
Supports the minimum WinRT API contract (7.0) for direct mode.
Definition d3d_winrt_helpers.hpp:67
bool supportsScanoutOptionsAndTryExecuteTask
Supports the WinRT API contract (14.0) for the improved direct mode that debuted in Windows 11.
Definition d3d_winrt_helpers.hpp:70
A rational (fractional) number type.
Definition m_rational.hpp:26
Header holding common defines.
Include all of the Vulkan headers in one place, and cope with any "messy" includes implied by it.