In fact, to write this article, DXGI has 1.5 version, but a lot of friends are actually still using 1.2 or even 1.1, so now talk about 1.4 is not at all, and 1.4 is a very important update, it is worth a careful talk.
In order to support Direct3D (Dxgi is still in the 1.4 version, Direct3D also named Direct3D 12, now Unified renamed DirectX), Dxgi added these new features:
- More inexpensive Adapter enumeration mechanism
- Video memory budget tracking
- Direct3D 12Swapchain Improvements
- Related Topics
More inexpensive Adapter enumeration mechanism
In Direct3D 12, it is not possible to reverse-track the creation of its Idxgiadapter adapter object from device. It is not possible to specify D3D_DRIVER_TYPE_WARP when calling D3d12createdevice. But you can use IDXFactory4 to deal with these things. Idxgifactory4::enumadapterbyluid can track the creation of device adapter (with Id3d12device::getadapterluid pairing) in a D3D 12 environment. If you want D3d12createdevice to use the warp renderer, use the adapter (Adapter) provided by the Idxgifactory4::enumwarpadapter.
Video memory budget tracking
Microsoft recommends that developers use the reserved memory system they designed to handle video memory, which tells the operating system the minimum amount of memory needed to reserve apps for developers. (This is a good mechanism, but there are some limitations.)
The amount of physical memory a system can provide for an application is called "Video memory Budget" for this application. The budget fluctuates dramatically when the background process wakes up or sleeps, and the budget changes drastically when the end user switches the process. The application is notified by the system at this time and the current consumption memory and budget are counted. If the application feels that the budget is not enough, it will hibernate and allow other apps to execute, and the created class function called at that time may return an error. IDXGIAdapter3 is concerned with this matter, especially Queryvideomemoryinfo and registervideomemorybudgetchangenotificationevent.
For more information see here: Residency.
Direct3D 12Swapchain Improvements
In order to reduce the overhead, in the d3d12, some d3d11 era of swapchain function is not recommended to use. In order to better correspond to the new concepts in d3d12 and to serve the new features, Microsoft has also made some other adjustments to the API
Constant Backbuffer Consistent
In D3d11, the app can only invoke GetBuffer (0,...) A. Each invocation of present implies a modification of the consistency of the return interface. Because of the CPU overhead requirements and the flexible resource descriptor design, D3D12 no longer supports this implicit resource consistency change. Then the application needs to call GetBuffer manually for the buffer created for each block and Swapchain. The app also has to manually render buffer in the queue after the present operation. Microsoft also encourages developers not to rebuild many objects every time they present, but rather to cache each buffer (cache).
Multi-Adapter Support
In a multi-GPU adapter environment, Backbuffer is created only from Node 1 and has only one command queue, which is a fairly important concept in DirectX, In particular, multi-line Cheng adapters in a multi-monitor environment) Resizebuffer allows applications to create backbuffer on other nodes, and also allows different command queues for each backbuffer. These features work with Swapchain to build alternate frame rendering (AFR) technology. More please see Direct3D multi-adapters.
Miscellaneous
- The command queue is no longer passed to the D3D device object and must be passed to the Createswapchain method.
- Only the following two flip mode swap effects are supported:
The dxgi_swap_effect_flip_discard identifier should be preferred if the application is fully rendered backbuffer or if you want to support multi-adapter scenarios more lightly
If you want to optimize the screen submission process or formally read from a previously committed backbuffer, you should use the dxgi_swapeffect_flip_sequential identifier
- Setfullscreenstate is no longer repulsive to the display, so user-initialized operating system elements can be displayed seamlessly in front of the application output. For example, body setting (Volume Settings).
Related Topics
Direct3D Hardware Feature Levels
Programming Guide for DXGI
New features of DXGI 1.4