|
Monado OpenXR Runtime
|
Helpers for Windows 10+ direct mode code. More...
#include "d3d_winrt_helpers.hpp"#include <dxgiformat.h>#include <winrt/base.h>#include <winrt/Windows.Foundation.Collections.h>#include <winrt/Windows.Foundation.Metadata.h>#include <winrt/Windows.Foundation.h>#include <winrt/Windows.Devices.Display.Core.h>#include <winrt/Windows.Graphics.DirectX.h>#include <windows.devices.display.core.interop.h>#include <d3d11_1.h>#include <d3d11_4.h>#include <wil/com.h>#include <wil/resource.h>#include <wil/result_macros.h>#include <array>#include <tuple>#include <algorithm>#include <utility>#include <winrt/impl/Windows.Devices.Display.Core.0.h>#include <winrt/impl/Windows.Devices.Display.Core.2.h>
Functions | |
| static std::tuple< bool, uint16_t, DXGI_FORMAT > | xrt::auxiliary::d3d::winrt::lookupFormat (DirectXPixelFormat format) |
| static std::pair< uint16_t, float > | xrt::auxiliary::d3d::winrt::makeModeKey (const winrtWDDC::DisplayModeInfo &modeInfo) |
| Make something sortable out of a display mode. | |
| 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. | |
| void | xrt::auxiliary::d3d::winrt::sortModes (std::vector<::winrt::Windows::Devices::Display::Core::DisplayModeInfo > &acceptableModes) |
| static bool | xrt::auxiliary::d3d::winrt::checkForBasicAPI () |
| static bool | xrt::auxiliary::d3d::winrt::checkForEnhancedApi () |
| ::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. | |
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.
| 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
| capability | A populated SystemApiCapability describing the features available and allowed for use. |
| maxAttempts | The maximum number of times to try creating a scanout: consider at least 2, since this is prone to spurious failure |
| device | Display device |
| source | Display source |
| primary | Primary display surface |
| subResourceIndex | as in CreateSimpleScanout. Usually 0 unless you are using hardware stereo (like 3D TV) |
| allowTearing | determines the sync interval value in Win10 and Win11, and the flags to create the scanout in Win11. |
References xrt::auxiliary::d3d::winrt::createScanout(), and xrt::auxiliary::d3d::winrt::SystemApiCapability::supportsScanoutOptionsAndTryExecuteTask.
Referenced by xrt::auxiliary::d3d::winrt::createScanout().
|
inlinestatic |
Make something sortable out of a display mode.
References xrt::auxiliary::d3d::winrt::makeModeKey().
Referenced by xrt::auxiliary::d3d::winrt::makeModeKey(), and xrt::auxiliary::d3d::winrt::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().