D3D11 — Как включить HDR на дисплее без Windows 10

Я пытаюсь использовать HDR-рендеринг в видеоплеере, над которым работаю, и не могу активировать HDR на своем дисплее (да, мой дисплей поддерживает HDR) во всех примерах кода, которые я видел, все указывает на установку цветового формата R10G10B10A2_UNorm (я использую SharpDX) и ссылаюсь на все статьи в этой статье https://www.asawicki.info/news_1703_programming_hdr_monitor_support_in_direct3d, но я по-прежнему не могу включить HDR на своем дисплее.

Например, если вы знаете, что madVR действительно может это сделать (это может заставить ваш дисплей включить HDR без использования Windows 10). Я думаю, это называется HDR passthrough. Как это делается?

Вот код, который у меня есть, и он действительно может рисовать белый экран.

this.d3dDevice = new D3D11.Device(DriverType.Hardware, DeviceCreationFlags.None, new[] { FeatureLevel.Level_11_1, FeatureLevel.Level_11_0, });

SharpDX.DXGI.SwapChainDescription1 swapChainDescription_ = new SharpDX.DXGI.SwapChainDescription1()
{
    AlphaMode = SharpDX.DXGI.AlphaMode.Ignore,
    Width = Proc2.Width,
    Height = Proc2.Height,
    Format = Format.R10G10B10A2_UNorm,
    Scaling = SharpDX.DXGI.Scaling.None,
    BufferCount = 3,
    SwapEffect = SharpDX.DXGI.SwapEffect.FlipDiscard,
    Flags = SharpDX.DXGI.SwapChainFlags.AllowModeSwitch,
    Usage = SharpDX.DXGI.Usage.BackBuffer | SharpDX.DXGI.Usage.RenderTargetOutput,
    SampleDescription = new SharpDX.DXGI.SampleDescription() { Count = 1, Quality = 0 },
    Stereo = false,
};

parentSwapchain = new SharpDX.DXGI.SwapChain1(factory2, d3dDevice, this.renderForm.Handle, ref swapChainDescription_, new SharpDX.DXGI.SwapChainFullScreenDescription()
{
    RefreshRate = new Rational(144, 1),
    Scaling = SharpDX.DXGI.DisplayModeScaling.Unspecified,
    Windowed = true,
    ScanlineOrdering = SharpDX.DXGI.DisplayModeScanlineOrder.Unspecified,
}
);

Может ли кто-нибудь указать мне, какую часть мне не хватает? Я просто хочу заставить свой дисплей включить HDR, используя мой код Direct3D.


person Michael Lucero    schedule 09.08.2020    source источник


Ответы (1)


Углубившись в это... Я обнаружил, что у Kodi есть HDR-версия, которая действительно может это сделать: https://forum.kodi.tv/showthread.php?tid=349861. Похоже, что есть Windows API (начиная с 1903 года, я думаю), который позволяет вам делать это через DisplayConfigGetDeviceInfo и DisplayConfigSetDeviceInfo. Однако это не так просто, поскольку вам нужно сначала запросить возможности дисплея и установить их. Для этого я смог написать тестовый код на C++. Мне просто нужно сделать несколько pInvoke, чтобы заставить его работать на C #.

person Michael Lucero    schedule 18.08.2020