Autor Wątek: Proces dwm.exe i teoretyczne przyśpieszenie gry  (Przeczytany 8979 razy)

Offline MarekKrak

  • Użytkownik

# Wrzesień 28, 2010, 21:12:50
Hej, piszę z dosyć zawiłym problemem, mianowicie, w systemie Windows Vista mamy ciekawy proces, który odpowiada za ładny wygląd oraz bajery w stylu "areo glass" w okienkach. Z mojego eksperymentu, w którym taskkilem (z wymuszeniem bo windows chroni swoje procesy żeby nie było) zabiłem proces dwm.exe wynika że dla osiągów max. 405~7 fps dla najmniej zapełnionego fragmentu sceny, mogę po wyłączeniu tego procesu uzyskać nawet 435~442 fpsy. Może nie tak wiele, szczególnie przy bardziej zapchanych scenach, ale zawsze jest to różnica wydajnościowa.

1) W jaki sposób mogę z poziomu aplikacji dezaktywować ten proces na czas działania gry?
2) Czy microsoft w którymś ze swoich api daje nam funkcję przełączająca w tzw "tryb gry"?


ad 1) Myślałem nad kilowaniem procesu instrukcją system("taskkill /F /IM dwm.exe"), i przywracaniem przy wyłączaniu gry, ale ta opcja - przynajmniej na obecną chwilę - wydaje mi się nieprzyjazna dla użytkownika, i niefajna w chwili gdy aplikacja wywali.

ad 2) Kilka gier, gdy je uruchamiam automatycznie dezaktywuje interfejs areo glass. W jaki sposób pisane są takie rozwiązania?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Redaktor

# Wrzesień 28, 2010, 21:24:19
zrób skrót - we właściwościach/zgodność zaznacz "wyłącz kompozycje" czy coś w tym stylu

Offline K'Aviash

  • Użytkownik

# Wrzesień 28, 2010, 21:50:02
Zabijać userowi aplikację ? Nie podobałoby mi się to. Ja tam swoje Aero lubie :)
Na jakim kompie testowałeś ?

Offline MarekKrak

  • Użytkownik

# Wrzesień 28, 2010, 22:04:36
Dzięki Xirdus, dobry pomysł. Jakieś pomysły żeby wyłączyć kompozycję z poziomu innego niż skrót?

K'Aviash: Też jak napisałem, to rozwiązanie mi się nie podoba.
Testy na Win Vista x64;
Cpu: Intel Core 2 Duo E8400 3.0GHz (niekręcony);
Karta: Ati Readon HD 4850;
4 GB ramu;
Konfiguracja jak widać nie byle jaka, chociaż mogło być lepiej.

Offline Xirdus

  • Redaktor

# Wrzesień 28, 2010, 22:10:31

Offline K'Aviash

  • Użytkownik

# Wrzesień 28, 2010, 22:12:33
Xirdus, jesteś pewien, że wyłączenie kompozycji wyłącza dwm'a ?

Offline Xirdus

  • Redaktor

# Wrzesień 28, 2010, 22:13:48
Nie wiem, mam XPka :P
Ale skoro autor nic nie mówi, to działa (chyba że nie sprawdzał).

Edit: info o tym wyłączeniu kompozycji znalazłem tu http://www.howtogeek.com/howto/windows-vista/easily-disable-vistas-aero-before-running-an-application-such-as-a-video-game/
« Ostatnia zmiana: Wrzesień 28, 2010, 22:15:41 wysłana przez Xirdus »

Offline Rolek

  • Użytkownik

# Wrzesień 28, 2010, 22:15:16
Kiedyś słyszałem, że ktoś słyszał, że podobno tego typu upiększacze są wyłączane gdy jakaś aplikacja włączy sobie tryb ekskluzywny DirectX.

Offline MarekKrak

  • Użytkownik

# Wrzesień 28, 2010, 22:20:50
Sprawdzę jak będę miał taką możliwość.. to bardzo ciekawe ale teraz bez resetu cóś nie mogę dwm przywrócić..

Xirdus: Posiedzę nad tym kodem w wolnym czasie, mam nadzieję że pomoże. Dam znać jak wszystko przerobie i przetestuje wyniki.

Ps. ciekawa strona, fajnie wiedzieć że coś takiego istnieje.

EDIT: Rolek, chyba masz rację..
" Aero Glass rozpoznaje aplikacje, które żądają tzw. trybu ekskluzywnego DirectX. Tryb ten pozwala aplikacji uruchomić się na pełnym ekranie przy jednoczesnym wyłączeniu podsystemu okienkowego. Rysowanie jest wtedy przeprowadzanie bezpośrednio na ekranie, a uruchomiona aplikacja jest w całości samodzielnie odpowiedzialna za zawartość ekranu. Przykładem aplikacji korzystającej z tego trybu jest Windows Media Center, ale z powodzeniem wykorzystują go również gry, odtwarzacze itp..

Przejście do trybu ekskluzywnego DirectX jest niezauważalne podczas korzystania z jednego monitora. Gdy do komputera podłączonych jest więcej monitorów, drugi wciąż będzie wyświetlał system Windows. Kompozycja Aero działa jednak na zasadzie "wszystkie monitory albo żaden". Oznacza to, że z powodu czasowego wstrzymania usługi Desktop Window Manager na drugim monitorze kompozycja zostanie wyłączona do czasu zamknięcia aplikacji."

via dobreprogramy.pl

Tylko wytłumacz, mi proszę co to jest ten tryb ekskluzywny?

EDIT 2: Przetestowałem, wyłączanie kompozycji w menu skrótu daje podobne efekty, program dostaje kopa ok 20 fps na 400. Teraz będę się zabierał za próbę implementacji tego mechanizmu wywoływanego przez program.
« Ostatnia zmiana: Wrzesień 29, 2010, 17:46:38 wysłana przez MarekKrak »

Offline Mormegil

  • Użytkownik
    • Moj dev blog

# Wrzesień 29, 2010, 11:47:25
Cytuj
Tylko wytłumacz, mi proszę co to jest ten tryb ekskluzywny?
Pewnie chodziło o fullscreen.

Offline Asmodeusz

  • Użytkownik
    • Bogumił Wiatrowski: Blog

# Wrzesień 30, 2010, 02:51:11
Sam FullScreen nie daje gwarancji trybu ekskluzywnego - jeśli nie włączymy fullscreen na wszystkich monitorach, kompozycje nie są wyłączane.

Rozwiązaniem jest użycie funkcji z DXGI (wersje od D3D9Ex wzwyż) - pozwalają włączenie dla D3D device trybu ekskluzywnego niezależnie od ilości monitorów. Inna sprawa, że jest to działanie wyraźnie niezalecane - jeśli user ma za słabego kompa na aero, powinien sam je wyłączyć. Ze swojej strony powiem, że na 9800GX2 (leciwa już karta) różnica między aero a jego brakiem jest kompletnie nieodczuwalna - niezależnie od gry.

Offline yorp

  • Użytkownik
    • ProfessionGG Project

# Wrzesień 30, 2010, 20:16:58
sciagnij sobie gamebooster - klikasz optimize a po skonczeniu restore, z tego co pamietam na win7 wylaczal dwm, albo go zamrazal. Mozesz rowniez zamrazac ten proces z poziomu process explorera.

Offline Xirdus

  • Redaktor

# Wrzesień 30, 2010, 21:06:55
@yorp
Chyba chodzi o rozwiązanie od strony twórcy gry.

Offline yorp

  • Użytkownik
    • ProfessionGG Project

# Październik 01, 2010, 15:52:18
jak programowo to wystarczy sprawdzic jak zamrozic process, w msdnie powinno to gdzies byc, moze udostepnili zrodlo process explorera, to mozna przejzec jak to robia oni

Offline MarekKrak

  • Użytkownik

# Październik 01, 2010, 18:45:57
@yorp, @Xirdus,

tia, chodziło o rozwiązanie które nie wymaga niczego od użytkownika, chociaż w opcjach zaawansowanych pewnie zrobię możliwość aktywacji lub dezaktywacji tej opcji. Z gameboostera korzystam od kilku lat, nie jest to żadną nowością. Raczej interesuje mnie w jakie sposób ten program to robi.. zamrożenie procesu to też jest myśl, zastanowię się nad tym, bo wydaję się bardzo łatwe w implementacji.