Выпуск D9VK 0.40, рэалізацыі Direct3D 9 па-над Vulkan

Адбыўся выпуск праекта Д9ВК 0.40, які прадстаўляе рэалізацыю Direct3D 9, якая працуе праз трансляцыю выклікаў у графічны API Vulkan. Праект заснаваны на кодавай базе праекта DXVK, якая была пашырана падтрымкай Direct3D 9. У параўнанні з рэалізацыяй Direct3D 9 на базе WineD3D, D9VK дазваляе дамагчыся больш высокай прадукцыйнасці, бо трансляцыя Direct3D 9 праз OpenGL працуе павольней трансляцыі праз Vulkan.

D9VK можа прымяняцца для запуску 3D-прыкладанняў і гульняў у Linux пры дапамозе Wine. Падтрымліваецца запуск большай часткі гульняў на базе Direct3D 9, якія выкарыстоўваюць 2 ці 3 версію Shader Model. Код праекту распаўсюджваецца пад свабоднай ліцэнзіяй Zlib. Для выкарыстання D9VK патрабуецца наяўнасць драйвераў з падтрымкай API Vulkan, такіх як AMD RADV 18.3/415.22 +, NVIDIA 19.0 +, Intel ANV XNUMX + і AMDVLK.

Асноўныя паляпшэнні:

  • Рэалізаваная магчымасць выкарыстання больш за 4 ГБ відэапамяці ў 32-разрадных дадатках, што вырашыла праблемы пры запуску модаў гульняў Skyrim і Oblivion;
  • Уключана асінхронная апрацоўка вываду выніку рэндэрынгу на экран (стадыя presentation). Для памяншэння затрымак у асноўным струмені рэндэрынгу, апрацоўка высновы выконваецца ў струмені перадачы каманд (command submission thread);
  • Прыбраныя залішнія кропкі сінхранізацыі струменя каманд пры выманні запытаных дадзеных;
  • Код для вызначэння ўнутранага часу пераведзены на выкарыстанне спецыфічнага для платформаў таймера, што дапамагло вырашыць праблемы з некарэктнымі паводзінамі high_resolution_clock з MinGW;
  • Забяспечана выгрузка адкладзеных буфераў MANAGED і SYSTEMMEM на стадыі да выканання PrepareDraw, што вырашыла праблемы з прадукцыйнасцю ў гульнях Risen і Legend of the Heroes: Trails of the Sky;
  • Дададзена падтрымка D3DTA_CONSTANT, якая дазволіла рэалізаваць карэктны рэндэрынг эфекту свячэння у гульнях SpinTyres і Mudrunner;
  • Палепшана сумяшчальнасць з DirectX 9Ex (D3D9Ex). Улічана спецыфіка апрацоўкі ResetEx і Reset;
  • Праведзены чыстка і рэфактарынг кода;
  • Забяспечаны прамы мапінг буфераў WRITEONLY, што можа станоўча паўплываць на прадукцыйнасць і абысці памылку ў гульні
    Counter-Strike: Global Offensive, якая прыводзіць да працягу запісу ў буфер пасля яго разблакіроўкі;

  • Рэалізаваны метад SetDialogBoxMode, які дазваляе выкарыстоўваць дыялогавыя вокны ў поўнаэкранных прыкладаннях;
  • Рэалізавана падтрымка змешвання вяршыняў, У тым ліку індэксуемага змешвання вяршыняў, Неабходнага для SWVP (SoftWare Vertex Processing);
  • Перароблены лічыльнік сэмплера, які выводзіцца па-над бягучым выявай (heads-up display, HUD);
  • Дададзена опцыя d3d9.dialogBoxMode, якую можна выкарыстоўваць для адключэння працы толькі ў поўнаэкранным рэжыме;
  • Унесены аптымізацыі прадукцыйнасці і вырашаны праблемы, якія праяўляюцца пры запуску гульняў GTA: San Andreas, The Masquerade Bloodlines, Max Payne 2, The Sims 2, Silent Hunter 3, Senran Kagura Shinovi, Dungeons and Dragons, Crysis, Metal Slug X, ANGLE, Need Speed: Carbon і Risen 1.

Дадаткова можна адзначыць намер распрацоўшчыка праекта DXVK (рэалізацыя DXGI, Direct3D 10 і Direct3D 11 па-над API Vulkan) на час засяродзіць намаганні толькі на выпраўленні памылак, прытармазіўшы пашырэнне функцыянальнасці. Падобнае жаданне выклікана асцярогамі аб зніжэнні якасці кодавай базы і ўскладненні суправаджэння ў будучыні. Кожнае абнаўленне галінкі 1.4.x выклікае з'яўленне скаргаў аб рэгрэсіўных зменах, якія не атрымоўваецца прайграць, лакалізаваць і ўхіліць.

Дадзеныя праблемы патрабуюць разбору прычын іх з'яўлення, інакш пакіданне іх нявыпраўленымі пры працягу нарошчвання функцыянальнасці можа толькі пагоршыць сітуацыю і ператварыць працэс суправаджэння ў кашмар. З планаў, якія распрацоўшчык DXVK мае намер рэалізаваць да пераходу ў рэжым толькі выпраўленні памылак, называецца даданне падтрымкі некаторых карысных пашырэнняў Vulkan і зліццё c напрацоўкамі праекта D9VK.

Дадатак: па гарачых слядах сфарміраваны які карэктуе выпуск D9VK 0.40.1, у якім выпраўлена на vec4(1) значэнне па змаўчанні для COLOR0 у вяршынных шэйдарах і ўхіленая памылка, з-за якой біты слотаў для вынахадаў шэйдара па змаўчанні няправільна ўжываліся і, такім чынам, некарэктна выпраўляліся бэкэндам, выклікаючы іх замену на vec4(0).

Крыніца: opennet.ru

Дадаць каментар