Microsoft releases PIX beta for Windows 10 DX12

Carfax83

Diamond Member
Nov 1, 2010
6,841
1,536
136
Microsoft introduces PIX beta on Windows 10 for DX12

For those wondering what PIX is, you can look at this YouTube video. But basically it's a performance profiling and debugging tool that was originally used on the Xbox One, primarily to help with optimizing ESRAM usage.


Something like this is definitely needed on the PC though. DX12 has not really delivered at all on its promise, but I don't think anyone should be surprised by this as it's too early in the game. Once engine developers finish deep optimization for DX12 at the engine level, then DX12's performance will increase tremendously.

Gears of War 4 is already an indication of this, being the first fully native DX12 game. Some might argue that UE4 isn't fully optimized for DX12, and they might be right for the mainstream build. But by all reports, the build used by Microsoft and The Coalition has been fully transitioned over to DX12.

Whatever the case, I don't think the PC gaming community can take anymore of these half assed DX12 ports that slower, or barely any faster than the DX11 path.
 

Bacon1

Diamond Member
Feb 14, 2016
3,430
1,018
91

ThatBuzzkiller

Golden Member
Nov 14, 2014
1,120
260
136
It's not enough, where is shader model 6 ? We haven't heard back in almost a year with the new shading language and shader compiler when it is the biggest piece of the puzzle missing in D3D12 ...

Developers have already had access to shader disassembly with CodeXL and Nsight and could already do debugging with visual studio or renderdoc ...
 

Krteq

Golden Member
May 22, 2015
1,008
724
136
Gears of War 4 is already an indication of this, being the first fully native DX12 game. Some might argue that UE4 isn't fully optimized for DX12, and they might be right for the mainstream build. But by all reports, the build used by Microsoft and The Coalition has been fully transitioned over to DX12.
Can you please finally show me a proof that GoW 4 is using DX12 bindless resource management? As I know and as I last checked, UE4 doesn't support this resource model and I doubt that GoW 4 has changed that. So, no... GoW 4 is NOT a "native DX12 title".
 

Krteq

Golden Member
May 22, 2015
1,008
724
136
Well, It's quite complex for simple forum post, but you can find a lot of articles on web and MSDN.

A basic principle is described in this MSDN blogpost - What’s the big deal?
Descriptor heaps and tables

Resource binding in Direct3D 11 is highly abstracted and convenient, but leaves many modern hardware capabilities underutilized. In Direct3D 11, games create “view” objects of resources, then bind those views to several “slots” at various shader stages in the pipeline. Shaders in turn read data from those explicit bind slots which are fixed at draw time. This model means that whenever a game wants to draw using different resources, it must re-bind different views to different slots, and call draw again. This is yet another case of overhead that can be eliminated by fully utilizing modern hardware capabilities.

Direct3D 12 changes the binding model to match modern hardware and significantly improve performance. Instead of requiring standalone resource views and explicit mapping to slots, Direct3D 12 provides a descriptor heap into which games create their various resource views. This provides a mechanism for the GPU to directly write the hardware-native resource description (descriptor) to memory up-front. To declare which resources are to be used by the pipeline for a particular draw call, games specify one or more descriptor tables which represent sub-ranges of the full descriptor heap. As the descriptor heap has already been populated with the appropriate hardware-specific descriptor data, changing descriptor tables is an extremely low-cost operation.

In addition to the improved performance offered by descriptor heaps and tables, Direct3D 12 also allows resources to be dynamically indexed in shaders, providing unprecedented flexibility and unlocking new rendering techniques. As an example, modern deferred rendering engines typically encode a material or object identifier of some kind to the intermediate g-buffer. In Direct3D 11, these engines must be careful to avoid using too many materials, as including too many in one g-buffer can significantly slow down the final render pass. With dynamically indexable resources, a scene with a thousand materials can be finalized just as quickly as one with only ten.

This principle is literally the same for all modern APIs and it started with Mantle API - Mantle binding model
bindingmodel.jpg

Mantle introduces a new way to bind resources to the graphics pipeline, as well. According to Bennett, the traditional binding technique is a "pretty big performance hog," and the currently popular alternative, which he calls "bindless," has downsides of its own, including higher shader complexity, reduced stability, and being "less GPU cache friendly."

Mantle's binding model involves simplified resource semantics compared to Direct3D, and it works like so:
In Mantle, when you create your pipeline, you define a layout for how the resources will be accessed from the pipeline, and you bind that descriptor set. The descriptor set is an array of slots that you bind resources to. Notably, you can bind another descriptor set to a slot—and this lets you set hierarchical descriptions of your resources.

If your eyes just glazed over, that's okay—mine did a little, too. In any event, Bennett said that the ability to build descriptor sets and to generate command buffers in parallel is "very good for CPU performance." During his presentation, Johan Andersson brought up a descriptor set use case that reduced both CPU overhead and memory usage.

In addition, HW (uarch) support is divided into three Resource Binding tiers
dx12_binding90r31.jpg
 
Last edited:

Headfoot

Diamond Member
Feb 28, 2008
4,444
641
126
DX12 has not really delivered at all on its promise, but I don't think anyone should be surprised by this as it's too early in the game. Once engine developers finish deep optimization for DX12 at the engine level, then DX12's performance will increase tremendously.

If the "promise" was lower CPU overhead, then yes, DX12 has already delivered. If the "promise" was a magical silver bullet, then it will never deliver.