doitsujin / dxvk

Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine
zlib License
13.21k stars 851 forks source link

Moonshot Feature Request: Generic AFMF #4185

Closed waffshappen closed 2 months ago

waffshappen commented 3 months ago

I know this probably is not in the current or even future goals, but i was wondering if it was possible - or even appropriate - for dxvk & vkd3d to implement a generic AMD Fluid Motion Frames Support (Source released over at https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK/tree/v1.1.0/sdk/src/backends/vk/FrameInterpolationSwapchain ) that can be generically enabled like FSR already can in proton. Since dxvk should sit roughly at the same place and can grab the same data to hand to AFMF.

Would this belong into dxvk/vkd3d, or should that be all the way down in mesa itself? Or which layer should this be targeted at?

Asking mostly because it is rather sad that lots of old games that will not get a re-release with an Engine that can handle > 60fps natively, or games that need just that little boost on the steam deck, could really use a generic option - something steam deck competitors of course get a lot of press for, especially with AFMF2 now once again.

doitsujin commented 3 months ago

We don't really have any interest in this, I don't know how this is even supposed to work since we don't have motion vectors or anything (estimate via video engine perhaps? there's no api for that though and quality would likely be poor), but I also don't really see the point in doing anything like this on the DXVK side of things since you'd need to duplicate the work in literally every project that ends up rendering anything.

Probably more of a gamescope thing, but again, frame interpolation without engine integration is incredibly cursed.

waffshappen commented 3 months ago

Probably more of a gamescope thing, but again, frame interpolation without engine integration is incredibly cursed.

Does gamescope have access to the renderlist? And thats exactly how AFMF does it at the driver level (although i dont know how they get the motion vectors there, possibly guesstimating them?)

So would this belong into mesa rather? Or roughly where down the stack? Gamescope already has the FSR scaling from the same package, but i dont know if they just run on the final render result instead.

doitsujin commented 3 months ago

although i dont know how they get the motion vectors there, possibly guesstimating them?

Well you have two options, either you make it truly generic and operate on the final render result only, which can be done in Gamescope, or you invest several man-years to write game-specific layers to figure out which render targets contain the required data, or at the very least figure out which render pass is responsible for the HUD so you can grab the actual rendered scene beforehand. DXVK does not have that information either.

koffiato commented 2 months ago

I have an AMD card and can test AFMF/2 out. What I can tell just by looking at the image is that it doesn't have motion vectors and only takes the final output as input. It works on DXVK already, however would love to have a similar option for Linux.