• 0 Posts
  • 7 Comments
Joined 2 years ago
cake
Cake day: June 30th, 2023

help-circle

  • If it makes you feel any better, you would have turned 30 today regardless of what you have done in the past (unless you don’t make it to 30 (unless quantum immortality is real)).

    Happy birthday! And if you aren’t happy with your efforts so far in life, better to tackle that looking forward than regret it looking back, though be kind to the yourself of today so you don’t regret spending your life preparing for the future instead of enjoying the moment.






  • It is a translation layer, but the bit you added “to native code” sounds like you’re misunderstanding what translation layer means.

    Games use a collection of APIs (DirectX is a set of APIs, but there’s others to handle offer operations like network access and such) to interact with OS functionality, and also receive communicarion back from the OS (the windows message loop). Proton and wine are implementations of those APIs that translate the API calls to their equivalent in linux, as well as setting up their own message loop that translates messages from the linux kernel and UI system into their windows equivalent before sending them to the registered windows messaging loop functions.

    A simple example would be if a function header in windows looks like int32 SomeFuncWin( int64 index, char* name ), but looks like int32 SomeFuncLinux( std::string name, int64 index ), then the translation would be something like:

    int32 SomeFuncWin( int64 index, char* name ) {
    std:string TranslatedName( name );
    return SomeFuncLinux( TranslatedName, index );
    }

    So it doesn’t change/translate any of the code of the program itself, it just provides the environment that behaves exactly like a windows environment by translating the “hey could the OS do this for me?” requests from windows to linux. Note that not all translations are that simple, there might need to be more processing on the values, missing arguments might need to be filled in, irrelevant arguments ignored, sometimes data needs to be translated to another format, etc.

    The speed ups can come from improved efficiency in the underlying implementations (which Vulkan has, as I understand even using a translation layer from DX to Vulkan in windows can result in better performance) or having fewer services running in the background.