2016-11-04 10 views
0

IDXGIDevice1 :: SetMaximumFrameLatencyメソッドをmy dx12appから呼び出して、現在のDirect3D 12デバイスから有効なIDXGIDevice1を取得する必要があります。インターフェイスは、E_NOINTERFACEを返す照会:はIDXGIDeviceまたはIDXGIDevice1をdx12のID3D12Deviceから取得できません

IDXGIDevice * pDXGIDevice; 
HRESULT hr = myDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice); 
assert(hr != S_OK); // returns E_NOINTERFACE 

IDXGIDevice1 * pDXGIDevice1; 
HRESULT hr1 = myDevice->QueryInterface(__uuidof(IDXGIDevice1), (void **)&pDXGIDevice1); 
assert(hr != S_OK); // returns E_NOINTERFACE 

わからない私は何かが欠けていたり、私が有効なIDXGIDevice1インターフェイスを取得するために実装する必要がDXGIロジックのシーケンスがある場合。

アドバイスありがとうございます。&ありがとうございました! KLIP

それが第一歩だと上記のコードは動作しませんので、Direct3Dの12、DXGIファクトリを取得するこの「レガシーパターン」の

答えて

1

は、サポートされていません。Direct3Dの12の​​ために

ComPtr<IDXGIDevice3> dxgiDevice; 
    DX::ThrowIfFailed(
     m_d3dDevice.As(&dxgiDevice) 
     ); 

    ComPtr<IDXGIAdapter> dxgiAdapter; 
    DX::ThrowIfFailed(
     dxgiDevice->GetAdapter(&dxgiAdapter) 
     ); 

    ComPtr<IDXGIFactory4> dxgiFactory; 
    DX::ThrowIfFailed(
     dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory)) 
     ); 

、あなたを常にDXGIファクトリを明示的に作成する必要があります。 Anatomy of Direct3D 12 Create Deviceを参照してください。

Direct3D 12スワップチェーンでは、バックバッファのスワップ動作を明示的に制御します。理想的には、DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECTを使用し、待機可能オブジェクトを使用してレンダリング速度を調整します。待ち時間カウントをIDXGISwapChain2::SetMaximumFrameLatencyで3に設定することができます(MSDNは現在デフォルトでは間違っています)。

「リフレッシュレートより高い」アップデート(nVidia G-SyncやAMD FreeSyncなど)をサポートしたい場合は、Presentに新しいDXGI_PRESENT_ALLOW_TEARINGフラグを使用します。このフラグの使用の詳細については、MSDNまたはYouTubeビデオを参照してください。

DirectX 12: Presentation Modes In Windows 10 (YouTube)も参照してください。

+0

返事ありがとうチャック。 'CreateDXGIFactory1(__ uuidof(IDXGIFactory4)&dxgiFactory)' DXGIアダプタをスキャンしてDirect3D 12をサポートしているものを探し、ブログに記載されている手順と同様のデバイスを作成します。 'D3D12CreateDevice(myAdapter、D3D_FEATURE_LEVEL_11_0、__uuidof(ID3D12Device)、&MYDEVICE') だから私はあなたの返事を誤解しない限り、私はまだ私はIDXGIDevice1を取得できない理由はわかりません。 フレームレイテンシについて私が理解しているのは、ドライバの現在のキューを制限するスワップチェーンのバッファ数よりも小さい値です。 –

+0

代わりに '' IDXGISwapChain2 :: SetMaximumFrameLatency''を使うことができます。 –

+0

待機可能なスワップチェーンにのみ '' IDXGISwapChain2 :: SetMaximumFrameLatency''を使うことができます。 –

関連する問題