Rozpoczęto testowanie pierwszego kandydata do wydań Wine 9.0, otwartej implementacji WinAPI. Baza kodu została przeniesiona na etap zamrożenia przed wydaniem, które spodziewane jest w drugiej połowie stycznia. W porównaniu do wydania Wine 8.21 zamknięto 52 zgłoszenia błędów i wprowadzono 391 zmian.
Najważniejsze zmiany:
- Wbudowany pakiet vkd3d z implementacją Direct3D 12, działającą poprzez translację wywołań do API graficznego Vulkan, zaktualizowano do wersji 1.10.
- Kontynuowane są prace nad funkcjonalnością, mającą na celu umożliwienie korzystania z Wine w środowiskach opartych na protokole Wayland bez użycia XWayland i komponentów X11. W sterowniku winewayland.drv dodano wsparcie dla układów klawiatury. Rozszerzono wsparcie dla API graficznego Vulkan i dodano funkcje vkQueuePresentKHR, vkGetDeviceGroupSurfacePresentModesKHR, vkGetPhysicalDevicePresentRectanglesKHR. Dodano funkcję ClipCursor i zrealizowano możliwość pracy z względnymi współrzędnymi podczas śledzenia ruchu myszy.
- Przy użyciu najnowszych wydań GnuTLS wprowadzono wsparcie dla kluczy szyfrowania DH (Diffie-Hellman).
- Zamknięto zgłoszenia błędów związane z działaniem aplikacji: Notepad, MS Word, Roon, eFilm Workstation 2.x/3.x, Athena’s Charm Table Search 0.35b, Process Explorer, Araxis Merge 2023.5877, Framemaker 8, Internet Download Manager, Air Jura, SpeedCommander, ModOrganizer, RestoreDC, Acid-V VST plugin, MIDITrail 1.4.0.
- Zamknięto zgłoszenia błędów związane z działaniem gier: For Honor, STEEP, Far Cry 5, NFS Most Wanted, Castlevania: Lords of Shadow 2, Eurobattle, Daily Chthonicle, Crimson Skies.
Dodatkowo można zauważyć publikację przez projekt Wine pakietu vkd3d 1.10 z implementacją Direct3D 12, działającą poprzez translację wywołań do API graficznego Vulkan. W skład pakietu wchodzą biblioteki libvkd3d z implementacjami Direct3D 12, libvkd3d-shader z translatorem shaderów modelu 4 i 5 oraz libvkd3d-utils z funkcjami ułatwiającymi portowanie aplikacji Direct3D 12, a także zestaw demonstracyjnych przykładów, w tym port glxgears na Direct3D 12. Kod projektu jest udostępniany na licencji LGPLv2.1.
Biblioteka libvkd3d obsługuje większość funkcji Direct3D 12, w tym narzędzia do grafiki i obliczeń, kolejki i listy poleceń, deskryptory i deskryptory sterty, sygnatury korzeni, dostęp nieuporządkowany, Samplery, sygnatury poleceń, stałe korzeniowe, niebezpośrednie rysowanie, metody Clear*() i Copy*(). W libvkd3d-shader zaimplementowano translację kodu bajtowego modeli shaderów w wersji 4 i 5 do pośredniej reprezentacji SPIR-V. Obsługiwane są shadery wierzchołkowe, pikselowe, tesselacyjne, obliczeniowe i proste shadery geometryczne, a także serializacja i deserializacja sygnatury korzeniowej. Z instrukcji shaderowych zaimplementowano operacje arytmetyczne, atomowe i bitowe, operatory porównania oraz sterowania przepływem danych, instrukcje sample, gather i load oraz operacje dostępu nieuporządkowanego (UAV, Unordered Access View).
W nowej wersji kontynuowano prace nad ulepszeniem kompilatora shaderów w języku HLSL (High-Level Shader Language), dostarczonym od DirectX 9.0: dodano wsparcie dla dynamicznego indeksowania tablic; dodano wyrażenia "break", "continue" i "switch"; rozszerzono wyrażenia, dla których zastosowano złożenie stałych; wprowadzono funkcje wbudowane ceil(), degrees(), radians(), fwidth(), tan(), tex2Dlod(), tex2Dproj(), texCUBEproj() i tex3Dproj().
Do biblioteki libvkd3d dodano nowe interfejsy programistyczne Direct3D 12 (ID3D12Device5, ID3D12GraphicsCommandList5 oraz ID3D12Resource1) oraz zaimplementowano możliwość tworzenia obiektów stanu potoku (pipeline state object). W libvkd3d-utils dodano funkcje pomocnicze do manipulacji DXBC: D3DGetBlobPart(), D3DGetDebugInfo(), D3DGetInputAndOutputSignatureBlob(), D3DGetInputSignatureBlob(), D3DGetOutputSignatureBlob(), D3DStripShader(). W kompilatorze vkd3d-compiler dodano opcje "—fragment-coordinate-origin" i "—semantic-compat-map".
Źródło: opennet.ru
