Valve เบ›เปˆเบญเบ Proton 4.11, เบŠเบธเบ”เบชเปเบฒเบฅเบฑเบšเปเบฅเปˆเบ™เป€เบเบก Windows เปƒเบ™ Linux

เบšเปเบฅเบดเบชเบฑเบ”เบงเบฒเบง เบˆเบฑเบ”เบžเบตเบกเบกเบฒ เบชเบฒเบ‚เบฒเป‚เบ„เบ‡เบเบฒเบ™เปƒเปเปˆ เป‚เบ›เบฃเบ•เบญเบ™ 4.11, เบญเบตเบ‡เบ•เบฒเบกเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ Wine เปเบฅเบฐเปเบ™เปƒเบชเปˆเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบเบกเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบš Windows เปเบฅเบฐเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบ™เบฅเบฒเบเบเบฒเบ™ Steam เปƒเบ™ Linux. เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ„เบ‡เบเบฒเบ™ เปเบœเปˆโ€‹เบเบฐโ€‹เบˆเบฒเบโ€‹เป€เบŠเบทเป‰เบญ เบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” BSD. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบเบฝเบกเบžเป‰เบญเบก, เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™ Proton เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒ Wine เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเปเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เป€เบŠเบฑเปˆเบ™ DXVK เปเบฅเบฐ vkd3d.

Proton เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบเบก Windows เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เปƒเบ™เบฅเบนเบเบ„เป‰เบฒ Steam Linux. เบŠเบธเบ”เบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” DirectX 10/11 (เบญเบตเบ‡เปƒเบชเปˆ DXVK) เปเบฅเบฐ 12 (เบญเบตเบ‡เปƒเบชเปˆ vkd3d), เป€เบฎเบฑเบ”เบงเบฝเบเบœเปˆเบฒเบ™เบเบฒเบ™เปเบ›เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ— DirectX เป„เบ›เบซเบฒ Vulkan API, เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเป€เบเบกเปเบฅเบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเป€เบ•เบฑเบกเบซเบ™เป‰เบฒเบˆเปเป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบฅเบฐเบญเบฝเบ”เบซเบ™เป‰เบฒเบˆเปเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™เป€เบเบก. เป€เบกเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบเบฑเบš Wine เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เป€เบเบกเบซเบผเบฒเบเบเบฐเบ—เบนเป‰เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบเป‰เบญเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ patches ".esync"(Eventfd Synchronization) เบซเบผเบท "futex/fsync".

เบ•เบปเป‰เบ™โ€‹เบ•เป เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™ Proton 4.11:

  • Synchronization เบเบฑเบš Wine 4.11 codebase เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบฒเบเบเบงเปˆเบฒ 3300 เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™ (เบชเบฒเบ‚เบฒเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเป€เบซเบผเบปเป‰เบฒเปเบงเบ‡ 4.2). 154 patches เบˆเบฒเบ Proton 4.2 เป„เบ”เป‰เบ–เบทเบเบเป‰เบฒเบเบ‚เบถเป‰เบ™เป€เบ—เบดเบ‡เบ™เป‰เปเบฒเปเบฅเบฐเบ›เบฐเบˆเบธเบšเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบŠเบธเบ” Wine เบ•เบปเป‰เบ™เบ•เป;
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ synchronization primitives เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš futex(), เป€เบŠเบดเปˆเบ‡เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป‚เบซเบผเบ” CPU เป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบš esync. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบซเบกเปˆเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเบดเป€เบชเบ” เบชเปเบฒโ€‹เบฅเบฑเบš esync เปเบฅเบฐโ€‹เบซเบกเบปเบ”โ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบงโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบขเบนเปˆโ€‹.

    เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบงเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš futex () เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบเบฒเบ™เป‚เบ—เปƒเบ™ Linux kernel เบ”เป‰เบงเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ synchronization เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡ thread pool. Patches เบ—เบตเปˆเบฎเบญเบ‡เบฎเบฑเบšเบ—เบธเบ‡ FUTEX_WAIT_MULTIPLE เบ—เบตเปˆเบˆเบณเป€เบ›เบฑเบ™เบชเบณเบฅเบฑเบš Proton เปเบกเปˆเบ™เปเบฅเป‰เบง เป‚เบญเบ™ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบกเบขเบนเปˆเปƒเบ™ Linux kernel เบ•เบปเป‰เบ™เบ•เปเปเบฅเบฐ glibc. เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบเบฝเบกเป„เบงเป‰เปเบกเปˆเบ™เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบฅเบงเบกเบขเบนเปˆเปƒเบ™เปเบเปˆเบ™เบ•เบปเป‰เบ™เบ•เป, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™ เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡ เปเบเปˆเบ™เบžเบดเป€เบชเบ”เบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš primitives เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰;

    Valve เบ›เปˆเบญเบ Proton 4.11, เบŠเบธเบ”เบชเปเบฒเบฅเบฑเบšเปเบฅเปˆเบ™เป€เบเบก Windows เปƒเบ™ Linux

  • Interlayer DXVK (เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ” DXGI, Direct3D 10 เปเบฅเบฐ Direct3D 11 เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ Vulkan API) เบญเบฑเบšเป€เบ”เบ”เป€เบ›เบฑเบ™เป€เบงเบตเบŠเบฑเบ™ 1.3เปเบฅเบฐ D9VK (เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบฅเบญเบ‡โ€‹เบ‚เบญเบ‡ Direct3D 9 เป€เบ—เบดเบ‡โ€‹เบ‚เบญเบ‡ Vulkanโ€‹) เป€เบ–เบดเบ‡โ€‹เบชเบฐโ€‹เบšเบฑเบš 0.13fโ€‹. เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบš D9VK เปƒเบ™ Proton, เปƒเบŠเป‰เบ—เบธเบ‡ PROTON_USE_D9VK;
  • เบญเบฑเบ”เบ•เบฒเบเบฒเบ™เป‚เบซเบผเบ”เบซเบ™เป‰เบฒเบˆเปเบ„เบทเบ™เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเป€เบเบก;
  • เบเบฒเบ™เปเบเป‰เป„เบ‚เป„เบ”เป‰เบ–เบทเบเป€เบฎเบฑเบ”เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบเบฒเบ™เบชเบธเบกเปƒเบชเปˆเบซเบ™เบนเปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ›เปˆเบญเบ‡เบขเป‰เบฝเบก;
  • เปเบเป‰เป„เบ‚เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบŠเบฑเบเบŠเป‰เบฒ เปเบฅเบฐเบšเบฑเบ™เบซเบฒเบเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบชเบฑเปˆเบ™เบชเบฐเป€เบ—เบทเบญเบ™เบชเปเบฒเบฅเบฑเบš joysticks เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบšเบฒเบ‡เป€เบเบก, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เป€เบเบกเบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ Unity;
  • เป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš OpenVR SDK เป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”;
  • เบญเบปเบ‡เบ›เบฐเบเบญเบš FAudio เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเบฝเบ‡ DirectX (API XAudio2, X3DAudio, XAPO เปเบฅเบฐ XACT3) เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เป€เบžเบทเปˆเบญเบ›เปˆเบญเบ 19.07;
  • เบšเบฑเบ™เบซเบฒเบเบฑเบšเบฅเบฐเบšเบปเบšเบเปˆเบญเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™เป€เบเบกเปƒเบ™ GameMaker เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚;
  • เป‚เบกเบ”เบนเบ™ Wine เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒ Windows PE เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Linux. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™เบกเบตเบ„เบงเบฒเบกเบ„เบทเบšเบซเบ™เป‰เบฒเปƒเบ™เบ‚เบปเบ‡เป€เบ‚เบ”เบ™เบตเป‰, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ PE เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบšเบฒเบ‡ DRM เปเบฅเบฐเบฅเบฐเบšเบปเบšเบ•เป‰เบฒเบ™เบเบฒเบ™เป‚เบเบ‡. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰ Proton builds เปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡, เบชเปˆเบงเบ™เบซเบผเบฒเบเป€เบˆเบปเป‰เบฒเบˆเบฐเบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual Vagrant เบ„เบทเบ™เปƒเปเปˆเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ PE.

เบเปˆเบญเบ™เบ—เบตเปˆ patches เบ‚เบญเบ‡ Valve เบˆเบฐเบ–เบทเบเบฎเบฑเบšเบฎเบญเบ‡เป€เบญเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบ™เปเบเปˆเบ™ Linux เบ•เบปเป‰เบ™เบ•เป, เป‚เบ”เบเปƒเบŠเป‰ futex() เปเบ—เบ™ esync เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบเปˆเบ™เบžเบดเป€เบชเบ”เบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ™เบธเบเป€เบเบต synchronization thread เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบŠเบธเบ”เบ‚เบญเบ‡ patches. fsync. เบชเปเบฒเบฅเบฑเบš Arch Linux เปƒเบ™ AUR เปเบฅเป‰เบง เบˆเบฑเบ”เบžเบตเบกเบกเบฒ เบŠเบธเบ” kernel เบเบฝเบกเบžเป‰เบญเบกเบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเบ”เป‰เบงเบ fsync patches. เปƒเบ™ Ubuntu 18.04 เปเบฅเบฐ 19.04, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ linux-mfutex-valve kernel เบ—เบปเบ”เบฅเบญเบ‡ PPA (sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve);

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบต kernel เบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ fsync, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Proton 4.11, console เบˆเบฐเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบ„เบงเบฒเบก "fsync: up and running". เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบ›เบดเบ” fsync เป‚เบ”เบเปƒเบŠเป‰เบ—เบธเบ‡ PROTON_NO_FSYNC=1.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™