Je voudrais appeler méthode IDXGIDevice1 :: SetMaximumFrameLatency à partir de mon dx12app, pour cela j'ai besoin d'obtenir un IDXGIDevice1 valide à partir du périphérique Direct3D 12 en cours. l'interrogation de l'interface renvoie une E_NOINTERFACE:ne peut pas acquérir IDXGIDevice ou IDXGIDevice1 de ID3D12Device dans dx12
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
Je ne sais pas si je me manque quelque chose ou il y a séquence de la logique de dxgi que je dois mettre en œuvre pour obtenir une interface IDXGIDevice1 valide.
Apprécierait des conseils & merci d'avance! Klip
Merci pour la réponse Chuck. J'utilise déjà une fabrique créée explicitement, 'CreateDXGIFactory1 (__ uuidof (IDXGIFactory4), & dxgiFactory)' puis scanne les adaptateurs DXGI pour en trouver un qui supporte Direct3D 12, puis crée un périphérique similaire aux étapes décrites dans votre blog. 'D3D12CreateDevice (myAdapter, D3D_FEATURE_LEVEL_11_0, __uuidof (ID3D12Device), et MyDevice)' Donc, à moins que je mal compris votre réponse, je ne suis toujours pas sûr pourquoi je ne peux pas acquérir IDXGIDevice1. Ma compréhension de la latence de trame, est que c'est une valeur <= que le nombre de tampons de la chaîne d'échange pour limiter la file d'attente actuelle du pilote –
Vous pouvez utiliser '' IDXGISwapChain2 :: SetMaximumFrameLatency'' à la place. –
Notez que vous pouvez utiliser '' IDXGISwapChain2 :: SetMaximumFrameLatency'' uniquement pour les swapchains. –