VKD3D llevará DirectStorage a Linux con Proton 2.10 y dará compatibilidad a las gráficas NVIDIA RTX

Puede que no sepas lo que es VKD3D, pero seguro que si eres usuario de Linux o juegas en Steam Deck te interesará saberlo a partir de ahora. En realidad para lo que nos interesa ahora hay que hablar de VKD3D-Proton y no de su matriz, pero lo que sí que tienes que saber es que, aun siendo una bifurcación del original, lo que hace es implementar la API DX12 sobre Vulkan para dar soporte así de manera directa sobre Proton. Con esto claro, se acaba de lanzar la versión 2.10, la cual hará que DirectStorage acabe en Linux mediante esta capa de compatibilidad cada vez más famosa.

Pues sí, VKD3D-Proton lo ha vuelto a hacer, y los cambios son realmente impresionantes si tenemos en cuenta las novedades que ya hubo en la versión anterior. Es cierto que, aunque es relevante la celeridad con la que se ha hecho todo dado cuándo se lanzó DirectStorage por parte de Microsoft, la realidad es que juegos compatibles con la tecnología solo hay dos por ahora. Lo importante, es que el soporte está y se irá mejorando, así que esto abre la descompresión por GPU a Linux y Steam Deck de par en par.

DirectStorage para Linux gracias a VKD3D-Proton 2.10

SSD-DirectStorage

Hay varios puntos a tratar aquí que tienen que ser considerados. El primero son los metacomandos añadidos para DirectStorage con la función NV_memory_decompresion, la cual implementa el GDeflate acelerado por GPU.

Se afirma que ha sido probado en Ratchet & Clank: Rift Apart y además, han solucionado un error con el driver de NVIDIA al usar los Shaders alternativos para usar el parámetro GDeflate. Por supuesto, esto también se aplica a las GPU de AMD. A partir de ahí, una oleada de nuevas extensiones, correcciones y soluciones alternativas que vamos a ver de manera organizada:

Nuevo uso de extensión

  • VK_EXT_dynamic_rendering_unused_attachments
  • VK_KHR_maintenance5
  • VK_NV_device_generated_commands_compute

Rendimiento

  • Se implementa "Batch acceleration structure builds". Mejora enormemente el rendimiento de la compilación, al menos en RADV.
  • Mejore enormemente el rendimiento de ExecuteIndirect al usar COMPUTE + cambios de parámetros root cuando VK_NV_device_generated_commands_computeestá habilitado.

Correcciones

  • Se corrigió la creación de firmas root a partir de blobs de destino de biblioteca DXIL (DXR).
  • Se corrigieron algunos escenarios de PSO de dual source blending. Arreglos en Star Wars Battlefront II.
  • Se han implementado operaciones wave en Shaders de manera más estricta de acuerdo con las reglas D3D12
  • Correcciones de cuelgues en Ashes of Singularity al usar cercas compartidas y esperar antes de la señal.
  • Corrección del error de almacenamiento en caché de PSO en los Mesh Shaders en Unreal Engine 5.
  • Se corrigió el resto de udiv en DXBC, lo que solucionó algunos errores de Xenia.
  • Corrección el error de seguimiento expuesto por NV Streamline.
  • Varias correcciones de DXIL -> SPIR-V como de costumbre.
  • Se reescribieron los diseños de conjuntos de descriptores para que sean más sólidos contra los errores de las aplicaciones.
    • Motivado por un error de Armored Core VI (ver más abajo)
    • Los controladores nativos D3D12 también son resistentes a estos errores de aplicación.

Soluciones alternativas

  • Solución alternativa al mal rendimiento de ReBAR en Age of Wonders 4.
  • Eliminar solución alternativa para KHR_present_wait enlos controladores NV 535+.
  • Solución alternativa al problema de corrupción de la memoria de Starfield donde no consulta correctamente la alineación de 4 KiB.
  • Deshabilite el uso de ReBAR en Halo Infinite para solucionar un rendimiento de CPU muy pobre.
  • Solución alternativa al error de Street Fighter 6 que provoca cuelgues falsos de la GPU.
    • También parece haber solucionado los bloqueos de la GPU en Resident Evil 2.
  • Solución alternativa al error de Armored Core VI que provoca que la GPU se cuelgue en la pelea de Balteus en el capítulo 1.
  • Solución alternativa a los fallos de "firefly" en Resident Evil 4 causados ​​por un uso dudoso de min16float.
  • Solución alternativa a los fallos de "firefly" en Monster Hunter Rise causados ​​por un Shader dudoso que requiere matemáticas particularmente precisas.
  • Solución alternativa: Unreal Engine 5 se rompe si los Mesh Shaders están expuestos, pero no los baricéntricos.
  • Solución alternativa del error en el controlador NVIDIA con montones de consultas TIMESTAMP que podrían provocar cuelgues falsos de la GPU.
  • Solución alternativa para la generación de código CFG roto en el emisor DXBC de Xenia

Añadidos a esta versión de DirectStorage en Linux

  • Admite Signature root versión 1.2.
  • Implementa el Shader Model 6.7.
    • Incluye todas las funciones de SM 6.7 como AdvancedTextureOps, WaveOpsIncludeHelperLanes.
    • Advertencia: Técnicamente no es una implementación compatible con las especificaciones de Vulkan, pero funciona bien al menos en NVIDIA y RADV. Actualmente implementado como una opción de suscripción por ahora en caso de que algún juego dependa de él para funcionar.
  • Se implementó CreateSampler2.
  • Se implementó la función RelaxedFormatCasting desde barreras mejoradas.
  • Se da soporte para topologías de adyacencia.
  • Admite el formato A8_UNORM correctamente mediante el uso VK_KHR_maintenance5, lo que permite que los UAV A8_UNORM funcionen correctamente.
  • Maneja correctamente los búferes de índice verificados por rango conVK_KHR_maintenance5.

La descarga para este VKD3D-Proton 2.10 con DirectStorage para Linux está disponible desde Github para todo el que la necesite.