ValveSoftware / ValveSoftware/Proton

AMD AGS/NVAPI/IntelExtensions DirectX Extensions Support

Open
#6,193 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Feature Request
Dominant language
C++
Stars
32.8k
Forks
1.6k
PR merge metrics
PR metrics pending

Description

Feature Request

I confirm:

  • that I haven't found another request for this feature.
  • that I have checked whether there are updates for my system available that
    contain this feature already.

Description

Proton currently lacks support for vendor specific DirectX extensions, causing performance degradation in some scenarios.

Justification [optional]

Up until recently this has meant missing out on, likely, minor performance optimizations on specific vendors with games that use a specific vendors DirectX extensions, usually this only happens in games that are "partnered" with a specific hardware vendor. However as of the creation of this issue, the, released, Unreal Engine 5.0 and upcoming 5.1 make use of 64bit Typed Atomics exclusively from vendor specific DirectX extensions for the poster boy Nanite geometry system. As there are no, released, games making use of Nanite, it's difficult to get exact numbers on the performance degradation from not using this extension, however Epic deemed it important enough to add the use of 64bit Typed Atomics to it's very limited use of AMD AGS/NVAPI/IntelExtensions for general use in games (i.e. not including vendor specific technologies like Nvidia Reflex or their virtual production tools), which currently seems to be limited to 64bit Typed Atomics for Nanite (AMD/Nvidia/Intel), Driver/Hardware Checks (AMD/Nvidia), and AMD's ray tracing hit token. In games that make use of Nanite it's easy to imagine gains from using 64bit Typed Atomics adding up. Epic's use of 64bit Typed Atomics is present in both DX11 and DX12 RHIs. It is unclear to me if Vulkan RHI supports using 64bit Typed Atomics, as Unreal Engine uses HLSL for all of it's sharers, via the existing DirectX Extensions or if it lacks support for using 64bit Typed Atomics. Given the second class nature of Vulkan in Unreal Engine it's likely the latter.

This makes sense for Proton as opposed to Wine as this relates to the addition/creation of additional "gaming" related libraries. Prior art here includes: dxvk-ags and dxvk-nvapi.

Risks [optional]

This could add additional technical complexity and fragmentation to Proton and related projects for little benefit.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the prior art linked in the issue, dxvk-ags and dxvk-nvapi, alongside Proton's handling of vendor-specific DirectX extensions. Determine the scope needed for AMD AGS, NVAPI, and IntelExtensions support, including the cited 64-bit Typed Atomics use in Unreal Engine; done requires an agreed implementation scope and validation approach.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
computer-graphics
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.