Поделиться через


Функция IddCxSwapChainSetDevice2 (iddcx.h)

Это важно

Некоторые сведения относятся к предварительному продукту, который может быть существенно изменен до его коммерческого выпуска. Корпорация Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых в отношении информации, предоставленной здесь.

Функция обратного вызова ОС вызывает драйвер в подпрограмме SetSwapChain для настройки цепочки буферов с определенным устройством DXGI.

Синтаксис

HRESULT IddCxSwapChainSetDevice2(
  [in] IDDCX_SWAPCHAIN                    SwapChainObject,
  [in] const IDARG_IN_SWAPCHAINSETDEVICE2 *pInArgs
);

Параметры

[in] SwapChainObject

Объект IDDCX_SWAPCHAIN , ранее переданный драйверу в вызове EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN.

[in] pInArgs

Указатель на IDARG_IN_SWAPCHAINSETDEVICE2 структуру, содержащую входные аргументы функции.

Возвращаемое значение

Метод возвращает S_OK, если операция выполнена успешно, в противном случае соответствующий код ошибки HRESULT.

Замечания

Драйвер может вызвать IddCxSwapChainSetDevice2 , чтобы связать объект устройства, используемый для обработки объектов буферной цепочки поверхностей. Драйвер должен задать поле IDARG_IN_SWAPCHAINSETDEVICE2::Type и соответствующий указатель в союзе IDARG_IN_SWAPCHAINSETDEVICE2::D evice .

Замечание

Драйвер отвечает за проверку адаптера, указанного IDARG_IN_SETSWAPCHAIN. RenderAdapterLuid в вызове обратного вызова драйвера EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN поддерживает D3D12 и, в случае, если D3D12 недоступен, D3D11 по-прежнему можно использовать. Драйверы могут проверять поддержку D3D12 несколькими способами, одним из которых является получение объекта IDXGIAdapter с помощью EnumAdapterByLuid , а затем попробуйте вызвать D3D12CreateDevice.

    ComPtr<IDXGIFactory4> pFactory;
    ComPtr<IDXGIAdapter3> pRenderAdapter;
    ComPtr<ID3D12Device> pD3d12Device;

    HRESULT Result = CreateDXGIFactory2(0, IID_PPV_ARGS(&pFactory));
    if (!FAILED(Result))
    {
        // Assume RenderAdapterLuid is obtained from IDARG_IN_SETSWAPCHAIN and passed to this routine
        LUID renderAdapterLuid = /* obtain from IDARG_IN_SETSWAPCHAIN */;
        
        Result = pFactory->EnumAdapterByLuid(renderAdapterLuid, IID_PPV_ARGS(&pRenderAdapter));
        if (!FAILED(Result))
        {
            Result = D3D12CreateDevice(pRenderAdapter.Get(), D3D_FEATURE_LEVEL_12_0, IID_PPV_ARGS(&pD3d12Device));

            if (FAILED(Result))
            {
                // No D3D12, fall back to using D3D11
            }
            else
            {
                // D3D12 can be used with this swapchain
            }
        }
    }

Замечание

Драйвер IddCx 1.11 по-прежнему может вызывать IddCxSwapChainSetDevice для связывания объекта IDXGIDevice с цепочкой буферов.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 11, 26H1 (IddCx 1.11)
целевая платформа Виндоус
Header iddcx.h

См. также

IDDCX_SWAPCHAIN_DEVICE_TYPE

IDARG_IN_SWAPCHAINSETDEVICE2

Версии IddCx