Monado OpenXR Runtime
Loading...
Searching...
No Matches
d3d_winrt_helpers.hpp File Reference

Helpers for Windows 10+ direct mode code. More...

#include "math/m_rational.hpp"
#include "xrt/xrt_compiler.h"
#include "xrt/xrt_vulkan_includes.h"
#include <winrt/Windows.Graphics.DirectX.h>
#include <winrt/Windows.Devices.Display.Core.h>
#include <stdint.h>
#include <utility>
#include <tuple>
Include dependency graph for d3d_winrt_helpers.hpp:

Go to the source code of this file.

Data Structures

struct  xrt::auxiliary::d3d::winrt::SystemApiCapability
 Describes the supported Windows API features for direct mode. More...
 

Macros

#define D3D_WINRT_MAKE_STRINGIFY_CASE(WDDC_ENUM)    case ::winrt::Windows::Devices::Display::Core::WDDC_ENUM: return #WDDC_ENUM
 

Functions

static xrt::auxiliary::math::Rational< uint32_t > xrt::auxiliary::d3d::winrt::parseVerticalRefreshRate (const ::winrt::Windows::Devices::Display::Core::DisplayModeInfo &modeInfo)
 
bool xrt::auxiliary::d3d::winrt::isModeAcceptable (const ::winrt::Windows::Devices::Display::Core::DisplayModeInfo &modeInfo)
 
bool xrt::auxiliary::d3d::winrt::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 the "best" one.
 
static bool xrt::auxiliary::d3d::winrt::colorSpaceFromVulkan (VkColorSpaceKHR colorSpace, ::winrt::Windows::Graphics::DirectX::DirectXColorSpace &out)
 
::winrt::Windows::Devices::Display::Core::DisplayScanout xrt::auxiliary::d3d::winrt::createScanout (SystemApiCapability const &capability, int maxAttempts, ::winrt::Windows::Devices::Display::Core::DisplayDevice const &device, ::winrt::Windows::Devices::Display::Core::DisplaySource const &source, ::winrt::Windows::Devices::Display::Core::DisplaySurface const &primary, uint32_t subResourceIndex, bool allowTearing)
 Create a "scanout" object for scanning out a surface to a direct mode display.
 
XRT_CHECK_RESULT constexpr const char * xrt::auxiliary::d3d::winrt::to_string (::winrt::Windows::Devices::Display::Core::DisplayManagerResult e)
 Convert Windows.Devices.Display.Core.DisplayManagerResult enum values to string.
 
XRT_CHECK_RESULT constexpr const char * xrt::auxiliary::d3d::winrt::to_string (::winrt::Windows::Devices::Display::Core::DisplayStateOperationStatus e)
 Convert Windows.Devices.Display.Core.DisplayStateOperationStatus enum values to string.
 
XRT_CHECK_RESULT constexpr const char * xrt::auxiliary::d3d::winrt::to_string (::winrt::Windows::Devices::Display::Core::DisplayPathStatus e)
 Convert Windows.Devices.Display.Core.DisplayPathStatus enum values to string.
 
XRT_CHECK_RESULT constexpr const char * xrt::auxiliary::d3d::winrt::to_string (::winrt::Windows::Devices::Display::Core::DisplayPresentStatus e)
 Convert Windows.Devices.Display.Core.DisplayPresentStatus enum values to string.
 

Detailed Description

Helpers for Windows 10+ direct mode code.

Has to implement comp_target instead of comp_target_swapchain because we don't get a VkSurfaceKHR, etc: we manually import images instead.

Author
Rylie Pavlik rylie.nosp@m..pav.nosp@m.lik@c.nosp@m.olla.nosp@m.bora..nosp@m.com

Function Documentation

◆ createScanout()

winrt::Windows::Devices::Display::Core::DisplayScanout xrt::auxiliary::d3d::winrt::createScanout ( SystemApiCapability const &  capability,
int  maxAttempts,
::winrt::Windows::Devices::Display::Core::DisplayDevice const &  device,
::winrt::Windows::Devices::Display::Core::DisplaySource const &  source,
::winrt::Windows::Devices::Display::Core::DisplaySurface const &  primary,
uint32_t  subResourceIndex,
bool  allowTearing 
)

Create a "scanout" object for scanning out a surface to a direct mode display.

The underlying function CreateSimpleScanout is prone to spurious IllegalArgument failures, so this wrapper tries twice.

See https://github.com/MicrosoftDocs/winrt-api/issues/1942

Parameters
capabilityA populated SystemApiCapability describing the features available and allowed for use.
maxAttemptsThe maximum number of times to try creating a scanout: consider at least 2, since this is prone to spurious failure
deviceDisplay device
sourceDisplay source
primaryPrimary display surface
subResourceIndexas in CreateSimpleScanout. Usually 0 unless you are using hardware stereo (like 3D TV)
allowTearingdetermines the sync interval value in Win10 and Win11, and the flags to create the scanout in Win11.
Returns
::winrt::Windows::Devices::Display::Core::DisplayScanout

References xrt::auxiliary::d3d::winrt::createScanout(), and xrt::auxiliary::d3d::winrt::SystemApiCapability::supportsScanoutOptionsAndTryExecuteTask.

Referenced by xrt::auxiliary::d3d::winrt::createScanout().

◆ modeComparison()

bool xrt::auxiliary::d3d::winrt::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 the "best" one.

This sorts with SRGB modes first, and refresh rate in decreasing order.

References xrt::auxiliary::d3d::winrt::makeModeKey(), and xrt::auxiliary::d3d::winrt::modeComparison().

Referenced by xrt::auxiliary::d3d::winrt::modeComparison().

◆ to_string() [1/4]

XRT_CHECK_RESULT constexpr const char * xrt::auxiliary::d3d::winrt::to_string ( ::winrt::Windows::Devices::Display::Core::DisplayManagerResult  e)
constexpr

◆ to_string() [2/4]

XRT_CHECK_RESULT constexpr const char * xrt::auxiliary::d3d::winrt::to_string ( ::winrt::Windows::Devices::Display::Core::DisplayPathStatus  e)
constexpr

Convert Windows.Devices.Display.Core.DisplayPathStatus enum values to string.

References xrt::auxiliary::d3d::winrt::to_string().

◆ to_string() [3/4]

XRT_CHECK_RESULT constexpr const char * xrt::auxiliary::d3d::winrt::to_string ( ::winrt::Windows::Devices::Display::Core::DisplayPresentStatus  e)
constexpr

Convert Windows.Devices.Display.Core.DisplayPresentStatus enum values to string.

References xrt::auxiliary::d3d::winrt::to_string().

◆ to_string() [4/4]

XRT_CHECK_RESULT constexpr const char * xrt::auxiliary::d3d::winrt::to_string ( ::winrt::Windows::Devices::Display::Core::DisplayStateOperationStatus  e)
constexpr

Convert Windows.Devices.Display.Core.DisplayStateOperationStatus enum values to string.

References xrt::auxiliary::d3d::winrt::to_string().