Typical dumb youtuber take. DX12 gives developers more low level choice thus they also are given more responsibility to do their jobs well. That's pretty much the gist of it AFAIK.
When the PS3 launched most 3rd party games ran like shit and only the absolute best developers were able to create visually stunning games that properly utilized the power of the Cell CPU processor. Who was to blame here? Lazy developers who didn't put enough effort into learning the intricacies of the Cell processor or Sony for creating a console architecture that was too difficult to master?
I'd say it was Sony since that company did a 180% degrees by dropping the Cell processor and creating a next gen console that was much, much easier to work with for developers.
Well, DX12 has the same problems as the PS3. It puts more power in the hands of the right developers, but that additional power comes with additional complexity. Now 3D engine programmers are asked to write code that had previously been the domain of graphics driver programmers. No wonder DX12 has turned out to be a performance disappointment.
Let's find out what ChatGPT says about this subject:
In DirectX 11 (DX11) and earlier versions, a significant portion of the graphics functionality was handled by the graphics driver. The graphics driver played a crucial role in managing resources, handling memory, optimizing performance, and implementing certain high-level abstractions. With the introduction of DirectX 12 (DX12), Microsoft shifted towards a more low-level and explicit API design, giving developers greater control and responsibility over these aspects. Consequently, many tasks that were once managed by the graphics driver in DX11 games are now the responsibility of the game developer in DX12.
Here are some aspects that were traditionally handled by the graphics driver in DX11 but are now managed directly by the developer in DX12:
- Resource Management: In DX11, the graphics driver was responsible for managing GPU resources such as textures, buffers, and shaders. DX12, however, requires developers to explicitly manage these resources, including their creation, usage, and release.
- Pipeline State Management: In DX11, the graphics pipeline state, which includes shader programs, input layouts, and other settings, was managed by the driver. DX12 introduces Pipeline State Objects (PSOs), and developers must create and manage these objects themselves.
- Memory Management: DX11 allowed the graphics driver to handle memory management tasks, such as swapping textures in and out of video memory. DX12 requires developers to manage memory explicitly, including resource residency and data transfer between CPU and GPU memory.
- Thread Management: DX11 had a more automatic threading model, where the driver managed multithreading for the developer. DX12, being more explicit, requires developers to manage threading, including creating and managing command lists and managing parallel execution on multiple CPU cores.
- Command Buffer Submission: In DX11, the driver handled the creation and submission of command buffers to the GPU. DX12 shifts this responsibility to the developer, who must explicitly record commands into command lists and submit them for execution.
- Swap Chain Handling: DX11 automatically managed the swap chain for presenting rendered frames. In DX12, developers need to implement their own swap chain management, including presenting frames to the screen.
The transition from a more implicit and high-level API like DX11 to the explicit and low-level nature of DX12 allows developers greater control and optimization opportunities but also requires a deeper understanding of graphics programming concepts and a more hands-on approach to resource management and optimization. While DX12 can lead to more efficient and performance-optimized code, it comes with the trade-off of increased complexity for developers.