Microsoft bierze przykład z AMD
Podczas konferencji Build 2014 Microsoft zdecydował się zaprezentować kilka nowości dla graczy. Najważniejsza z nich to dwunasta wersja pakietu DirectX, która jest bezpośrednią odpowiedzią na interfejs AMD Mantle i pod wieloma względami bardzo go przypomina.
DirectX jest najważniejszym interfejsem programowania aplikacji, jest wykorzystywany w większości gier. Nie ma w tym nic dziwnego, bo API Microsoftu pracuje na swoją pozycję od niemal dwóch dekad.
Odrobina historii
Pierwsza wersja DirectX została zaprezentowana w sierpniu 1995 roku, wraz z premierą systemu Windows 95. Porządkowała ona sposób rysowania grafiki w aplikacjach graficznych. Dzięki temu programista odwoływał się do odpowiednich poleceń interfejsu DirectX, a nie bezpośrednio do sprzętu, przez co miał pewność, że jego program będzie działał poprawnie na różnych konfiguracjach.
Kolejnymi ważnymi wersjami DirectX były 6.1 oraz 7.0 (1999 r.). Wprowadziły obsługę potoków renderujących oraz sprzętowe wspomaganie tzw. operacji Transform and Lighting.
DirectX 8.0 (2000 r.) wprowadził model przetwarzania grafiki oparty na shaderach, czyli bardzo krótkich, prostych programach umożliwiających stworzenie własnych efektów graficznych. Karty zgodne z tą wersją interfejsu były wyposażone w programowalne jednostki Pixel i Vertex Shader.
Wraz z Windows Vista pojawił się DX10 i wprowadził możliwość używania zunifikowanych jednostek Pixel i Vertex Shader, które są używane do dziś. Natomiast razem z Windows 7 zadebiutował DX11 i wprowadził obsługę teselacji, czyli dzielenia obrazu 3D na mniejsze wielokąty, przez co wyświetlany obiekt może być narysowany o wiele dokładniej. Każda z tych wersji dodawała nie tylko nowe funkcje, ale wymagała kolejnych generacji kart graficznych, z nowymi jednostkami obliczeniowymi.
Inne podejście AMD
Kilka miesięcy temu firma AMD zaproponowała zupełnie coś nowego – interfejs programistyczny Mantle. Jest to rozwiązanie niskopoziomowe, czyli – w uproszczeniu mówiąc – odwołujące się bezpośrednio do sprzętu. Jego zastosowanie umożliwia uzyskanie znacznie większej niż za pomocą pośrednika (DirectX) kontroli nad kartą graficzną, lepsze wykorzystanie mocy podzespołów, a co za tym idzie, osiągnięcie wyższej wydajności. Wadą takiego rozwiązania jest pełna zgodność tylko z jednym rodzajem sprzętu, w tym wypadku z kartami AMD opartymi na architekturze Graphic Core Next.
Microsoft uważa, że DirectX 12 będzie miał wszystkie zalety Mantle, przy zachowaniu jednocześnie uniwersalności i zgodności ze wszystkimi najważniejszymi kartami graficznymi.
Gdzie tkwią rezerwy?
Mimo że niskopoziomowe API musi być kompatybilne z kartą graficzną, to nie zwiększa bezpośrednio jej wydajności. Powoduje tylko, że mniejsza część mocy procesora jest potrzebna do komunikacji z nią, przez co więcej zasobów może zostać wykorzystanych w samej grze. Nazywa się to zmniejszeniem narzutu sterownika karty graficznej na procesor.
Korzyści z zastosowania niskopoziomowego interfejsu są najbardziej widoczne na konfiguracjach wyposażonych w niezbyt wydajny, ograniczający kartę graficzną procesor. Dzięki niskopoziomowemu API udaje się odzyskać odrobinę jego mocy, dzięki czemu karta graficzna rozwija skrzydła, a wydajność całego komputera wzrasta.
Nowości w DirectX 12
Głównym celem DirectX 12 jest właśnie zmniejszenie narzutu sterownika karty graficznej na procesor. Do tej pory największym jego źródłem był strumień komend wysyłanych do układu graficznego.
- W nowej wersji DirectX programista będzie mógł zdefiniować własne listy komend i zarządzać nimi. Daje to między innymi możliwość lepszego dostosowania gier do procesorów wielordzeniowych. Tak jak w wypadku Mantle, najwięcej powinny zyskać procesory AMD.
- Kolejna nowość ograniczająca narzut sterownika na procesor to wprowadzenie paczek komend wielokrotnego użytku. Dzięki temu do grafiki podobne zadania będą przesyłane tylko raz, a później będą po prostu automatycznie wykonywane. Znacznie przyspieszy to wiele powtarzalnych zadań, na przykład generowanie postaci w grach. Zamiast rysować je wiele razy zupełnie od podstaw, będzie można tylko wczytywać odpowiedni model i pokrywać go różnymi teksturami.
- Podobnym uproszczeniem są także tzw. obiekty stanu potoku. W obecnych wersjach DirectX poszczególne części układu graficznego mogą wykonywać równolegle różne obliczenia, ale jeśli niektóre z nich są wykonane szybciej, układ graficzny „czeka” na dokończenie obliczeń zajmujących więcej czasu – moc obliczeniowa się marnuje. Obiekty stanów potoku w DirectX 12 to wykonane obliczenia, które procesor graficzny będzie wczytywał, zamiast je przeliczać od nowa.
- Inna zmiana to wprowadzenie tzw. stosów deskryptora (ang. description heaps). Do tej pory przed narysowaniem elementu graficznego konieczne było przypisanie źródeł do kolejnych etapów cieniowania. Jeśli jednak pojawiało się choć jedno nowe źródło, cały obiekt musiał być ponownie obliczony, co zabierało cenny czas. Przy wykorzystaniu DirectX 12 tworzony jest stos, a każdemu znajdującemu się w nim elementowi jest przypisywany odpowiedni etap cieniowania. Podczas kolejnego rysowania elementu układ graficzny może się po prostu odwołać do istniejącego stosu i wyszukać w nim wszystkie potrzebne źródła, zamiast liczyć wszystko od nowa.
Zadziała na każdym pececie...
Stworzenie niskopoziomowego API działającego na większości kart graficznych dostępnych na rynku jeszcze kilka lat temu byłoby uważane za niemożliwe. Microsoft i producenci sprzętu potwierdzają jednak zgodnie, że udało się to zrobić, bo architektury układów graficznych stosowane przez Intela, Nvidię oraz AMD w ciągu ostatnich lat stały się do siebie bardzo podobne.
Najważniejsze jednak jest to, że do skorzystania z pełni możliwości DirectX 12 nie będzie potrzebna wymiana karty graficznej na nową. Interfejs ten zadziała na niemal wszystkich kartach, które pojawiły się na rynku w ciągu ostatnich kilku lat (spis znajduje się w tabelce obok).
Warto pamiętać, że lista ta nie jest jeszcze kompletna, bo do premiery DirectX 12 pozostało kilkanaście miesięcy – w tym czasie pojawią się nowe układy graficzne autorstwa wszystkich trzech produkujących je firm. Pojawiły się też informacje na temat obsługi DirectX 12 przez układy Qualcomm dla urządzeń mobilnych, ale nie wiadomo, czy informacja ta dotyczy tylko przyszłych nadchodzących układów czy również tych znajdujących się już na rynku.
... a także na konsolach, smartfonach i tabletach
Dodatkowo DirectX 12 będzie obsługiwany nie tylko przez komputery z odpowiednimi kartami graficznymi, ale również przez inne urządzenia z „ekosystemu” Microsoftu, czyli konsolę Xbox One, tablety z systemem Windows RT oraz smartfony z systemem Windows Phone.
W praktyce jednak mobilne odpowiedniki bardzo różnią się od kart graficznych do pecetów, a DirectX 12 (jak każdy inny niskopoziomowy interfejs) nie będzie mógł działać na dwóch zupełnie różnych architekturach. Zatem Microsoft raczej nie wprowadzi go do urządzeń mobilnych od razu, a raczej poczeka, aż producenci mobilnych układów graficznych zaczną wzorować się na układach „pecetowych”. Przykładem jest choćby architektura Nvidia Maxwell, która jest stosowana nie tylko w kartach GeForce, ale też w mobilnym układzie Tegra K1.
Nie tylko wydajność
DirectX 12 nie tylko poprawi sposób wykorzystania sprzętu. Dzięki temu, że będzie dostosowany do dużej liczby urządzeń, znacznie ułatwi tworzenie gier. Podczas konferencji Game Developer Conference 2014 zaprezentowano grę Forza Motorsport 5, sztandarowy tytuł stworzony z myślą o konsoli Xbox One, działającą na komputerze. Konwersja tej gry zajęła cztery miesiące, ponieważ zadaniem tym zajmowały się jedynie cztery osoby z całego studia. Gdyby nad zadaniem pracowała większa część studia, proces ten zająłby jeszcze mniej czasu.
Niestety, chociaż na temat DirectX 12 wiemy już naprawdę wiele, to na zobaczenie go w akcji przyjdzie nam jeszcze trochę poczekać. Microsoft zapowiedział, że końcowa wersja tego środowiska i pierwsze korzystające z niego gry pojawią się na rynku dopiero pod koniec 2015 roku. Ponad półtora roku to dużo czasu. Do tego momentu dużą popularność może zdobyć konkurencyjne AMD Mantle. Interfejs ten jest obsługiwany tylko przez najnowsze karty graficzne AMD Radeon (w tym także nowe konsole), ale nie jest zapowiedzią, lecz produktem, którego już można używać. Możliwe jednak, że producenci gier, mając na horyzoncie DirectX 12, nie będą chcieli korzystać z rozwiązania AMD, a środowisko Microsoftu pozostanie standardem jeszcze przez długie lata.