En la GDC 2016, hasta le momento aparece esta informacion sobre Direct3D12 [D3D12] en la conferencia donde participaron representantyes de AMD y Nvidia:
Basicamente, se habla de que se requiere cierta implementacion de codigo diferente para cuando se usa hardware Radeon o hardware geforcem asi que los juegos deberan contar con estas peuqeñas instrucciones para una marca o para otra, cosa logica, ya que esta API D3D12 trabaja mas directamente sobre el hardware grafico, y por ende requiere mas refinamiento y explicidad, debido a las diferencias de como trabajan.
http://www.dualshockers.com/2016/03/14/ ... ls-shared/Giuseppe Nelva, dualshockers.com escribió:
DirectX 12 Requires Different Optimization on Nvidia and AMD Cards, Lots of Details Shared
elow you can check out a summary of the most interesting points, and the slides that were showcased during the presentation. Most of the data was obviously developer-facing, and very technical, but there are definitely some points even gamers like us can take away from the presentation.
* DirectX 12 is for those who want to achieve maximum GPU and CPU performance, but there’s a significant requirement in engineering time, as it demands developers to write code at a driver level that DirectX 11 takes care of automatically,. For that reason, it’s not for everyone.
Since it’s “closer to the metal” than DirectX 11, it requires different settings on certain things for Nvidia and AMD cards.
* With DirectX 12 you’re not CPU-bound for rendering.
* The command lists written in DirectX 12 need to be running as much as possible, without any delay at any point. There should be 15-30 of them per frame, bundled into 5-10 “ExecuteCommandList” calls, each of which should include at least 200 microseconds of GPU Work. Preferably more, up to 500 microseconds.
* Scheduling latency on the operating system’s side takes 60 microseconds, so developers should put at least more than that in each call, otherwise what’s left of the 60 microseconds would be wasted idling.
* Bundles, which are the main new feature of DirectX 12, are great to send work to the GPU very early in each frame, and that’s very advantageous for applications that require very low latency like VR.
* They’re not inherently faster on the GPU. The gain is all on the CPU side, so they need to be used wisely. Optimizing bundles diverges for Nvidia and AMD cards, and require a different approach. In particular, for AMD cards bundles should be used only if the game is struggling on the CPU side.
* Compute queues still haven’t been completely researched on DirectX 12. For the moment, they can offer 10% gains if done correctly, but there might be more gains coming as more research is done on the topic.
* Since those gains don’t automatically happen unless things are setup correctly, developers should always make sure whether they do or not, as poorly scheduled compute tasks can result in the opposite outcome.
* The use of root signature tables is where optimization between AMD and Nvidia diverges the most, and developers will need brand-specific settings in order to get the best benefits on both vendors’ card.
* When developers find themselves with not enough video memory, DirectX 12 allows them to create overflow heaps in system memory, moving resources out of video memory at their own discretion.
* Using aliased memory on DirectX 12 allows to save GPU memory even further.
* DirectX 12 introduces Fences, which are basically GPU semaphores, making sure that the GPU has finished working on a resources before it moves on to the next.
* Multi-GPU functiinality is now embedded in the DirectX 12 API.
It’s important for developers to keep in mind the limitations in bandwidth of different version of PCI (the interface between motherboard and video card), as PCI 2.0 is still common, and grants half the bandwidth of PCI 3.0.
* DirectX 12 includes a “Set Stable Power State” API, and some are using it. It’s only really useful for profiling, and even then only some times. It reduces performance and should not be used in a shipped game.
* When deciding whether to use a pixel shader or a compute shader, there are “extreme” difference in pros and cons on Nvidia and AMD cards (as shown by the table in the gallery).
* Conservative rasterization lets you draw all the pixels touched by a triangle of your 3D models. It was possible before using a geometry shader trick, but it was quite slow. Now it’s possible to enable neat effects like the ray traced shadows in Tom Clancy’s The Division. In the picture in the gallery below you can see the detail of the shadow, with the bike’s spokes visible on the ground. That wasn’t possible without using a tray traced twchnique, which is enabled only with conservative rasterization.
* Tiled resources can now be used on 3D assets, and grant “extreme” performance and memory saving benefits.
* DirectX 11 is still “very much alive” and will continue to be on the side of DirectX 12 for a while.
* Developers can’t mix and match DirectX 11 and DirectX 12. Either they commit to DirectX 12 entirely, or they shouldn’t use it.
Medio traducido
* DirectX 12 es para los que quieren alcanzar el máximo rendimiento de CPU y GPU, pero hay una mayor complejidad en la programación al requerir realizar de forma manual acciones que DirectX 11 automatiza.
Al ser más cercano a la máquina que DirectX 11, requiere diferentes configuraciones en algunos aspectos para Nvidia y AMD.
* DirectX 12 no está vinculado a la CPU para enderezar.
* Las listas de comandos escritas en DirectX 12 necesitan ser ejecutadas sin demora en cualquier momento, así como sea posible. Se ejecutaran entre 15 y 30 instrucciones por segundos conjuntadas en llamadas “ExecuteCommandList” que requerirán al menos 200 microsegundos de carga de GPU, preferiblemente más.
* La latencia de planificación en el sistema operativo es de 60 microsegundos, por lo que los desarrolladores podrán al menos más que esto en cada llamada, de otra forma se desperdiciaría tiempo esperando.
* Los packs (bundle), una de las nuevas funciones de DirectX 12, son perfectos para enviar trabajo a la GPU muy pronto a cada frame, siendo muy ventajosos en aplicaciones que requieren muy baja latencia como la realidad virtual.
* No son inherentemente más rápido en la GPU, la mejora está del lado de la CPU. La optimización de “packs” difiere entre las tarjetas Nvidia y AMD y requieren diferentes aproximaciones. En particular, en las tarjetas AMD los “packs” deberían ser usados solo si el juego exprime demasiado a la CPU.
* Las colas de computación todavía no han sido desarrolladas por completo en DirectX 12. De momento, pueden ofrecer una mejora del 10% controlada correctamente, pero puede incrementarse cuando se investigue más como.
* Dado que estas mejoras no ocurren automáticamente a menos que las cosas se configuren correctamente, los desarrolladores siempre deben estar seguros de lo que hacen o no, pues puede resultar en empeorar el rendimiento.
* El uso de tablets de firmas raíz es donde la optimización entre AMD y Nvidia mas difiere y donde los desarrolladores necesitan configuraciones específicas para cada marca.
* Cuando los desarrolladores se encuentran sin suficiente memoria de video, DirectX 12 permite crear un desbordamiento sobre la memoria del sistema moviendo recursos fuera de la memoria de vídeo a su discreción.
* Usar memoria renombrada sobre DirectX 12 permite salvar aún más memoria de video.
* DirectX 12 introduce Fences, que básicamente son semáforos para GPU que permiten asegurar que la GPU ha terminado un trabajo antes de comenzar el siguiente.
* La funcionalidad multi-GPU está ahora incoporada en DirectX 12
* Es importante para los desarrolladores tener en mente la limitaciones del ancho de banda en las diferentes versiones del bus PCI ya que aun es común conectar muchas tarjetas mediante PCI 2.0, el cual ofrece la mitad de ancho de banda que PCI 3.0
* A la hora de decidir si usar un “pixel shader” o un “compute shader” existe una diferencia extrema entre los pros y contras de las tarjetas Nvidia y AMD
* La rasterización conservativa permite dibujar todos los pixeles en contacto por un triángulo en los modelos 3D. Anteriormente podía realizarse mediante un truco usando un shader geométrico, pero era muy lento.
* DirectX 11 está aún muy vivo y continuará de la mano de DirectX 12 por un tiempo.
* Los desarrolladores no pueden mezclar DirectX 11 y 12, tendrán que pasarse a DirectX 12 por completo o no podrán usarlo.
.