Windows Vista .. 08.01.10, nun läufts wie geschmiert ..

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Windows Vista .. 08.01.10, nun läufts wie geschmiert ..

Beitrag von HeinzK »

Mein Spiel auf der Basis von DirctX9 (DDraw, DInput, DSound und Co.)
läuft zwar auf Windows Vista, aber die Framerate liegt nahe bei Null.
Kompatibilitätsmodus und Start als 'Admin' haben nichts gebracht.
Weiß jemand einen Rat? (Ist aber nicht so wichtig, weil Schnee von gestern .. äähh .. Windows Vista).
EDIT 08.01.10: Problem gelöst .. Schuld war die DDRAW-8bit-Paletten-Technik. Diese wird unter Vista von den
meisten Grafikkarten sehr langsam emuliert!
Zuletzt geändert von HeinzK am 08.01.2010, 18:38, insgesamt 4-mal geändert.
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von Krishty »

Was genau läuft denn langsamer? Miss am besten mal die Zeiten für Grafikausgabe, Sound, Spiellogik etc und schau, was da so lange braucht.

Ich habe hier Vista, aber testen kann ich nichts, da die Setup-Datei von deiner Website beschädigt gemeldet wird (sowohl vom Installer selbst als auch von 7-Zip).

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von HeinzK »

Beschädigte Datei: Hab's gerade bemerkt und auch schon korrigiert.
OK, dann werde ich mal ein paar Fallen stellen ..
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von Krishty »

Also, hier auf Vista x64 SP1 läuft es. Ich habe ein paar Mal pro Minute kurzes Flackern, aber sonst ist alles flüssig, reaktionsschnell und sieht auch korrekt aus.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von HeinzK »

Die Fallen sind gestellt! Also, wer mir helfen will, muss folgendes machen:
Download und Installation der Version Nr. 0.89: http://www.zwianer.de/Download/ZwiAnerSetup.exe
(Die Datenstruktur hat sich seit dem letzten Update leider verändert.)
Die Fallen sind in folgender Datei: http://www.zwianer.de/Download/ZwiAner.exx
Aus der *.exx eine *.exe machen und die vorh. Datei überschreiben.
Nun die ZwiAner starten und ca. 10 .. 20 Sekunden laufen lassen. Dann mit 2 mal ESC das Programm verlassen.
Im Verzeichnis <../ZwiAner/Prf> ist folgende Datei entstanden: <ZwiAnerProfil.csv>
Wenn Ihr mir diese Datei zusendet, kann ich erkennen warum das s o l a n g s a m läuft.
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von HeinzK »

Auswertung der Profile:
Warum die ZwiAner unter Windows Vista so langsam sind, habe ich noch nicht herausbekommen, aber ich weiss jetzt, wo es klemmt.
Es ist der Zugriff auf die Grafikkarte. Der 'ZeichnenLoop' läuft von ->Lock() bis ->Unlock. Ich habe für das Beispiel zwei gleichartige
Rechner ausgewählt. Unter XP dauert das im Schnitt 2012 Mikrosekunden und unter Vista !!! 206624 !!! Mikrosekunden.
Das ist der Faktor 100. In den normalen Berechnungen ist Vista ca. 2 mal langsamer als XP.
Beispiel siehe:
Bild

Vielleicht helfen die letzten Service-Updates .. oder hat jemand noch eine Idee?
Zuletzt geändert von HeinzK am 12.11.2009, 18:06, insgesamt 1-mal geändert.
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von Krishty »

Wie genau läuft die Funktion ab? Zeichnest du direkt in die gelockte Textur oder zeichnest du in ein RAM-Array, das du dann in die gelockte Textur kopierst? Wird beim Locken der alte Texturinhalt verworfen? Machst du das alles streng synchron oder asynchron?

Ab Vista ist asynchrones Füttern der GPU wichtiger denn je – darum wurden (Un)Locks, wie man sie von D3D9 kennt, für D3D10 auch abgeschafft.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von HeinzK »

Das läuft ungefähr so ab:
Zeiger holen:
lpSurface->Lock(NULL, &ddsd, ...);
ucVram = (unsigned char *)ddsd.lpSurface;
Zeichnen:
ucVram[((lYk - 4) * lZeilenBreite) + (lXk + 5)] = ucFrbNr;
FillMemory
(
&ucVram[((lYk - 3) * lZeilenBreite) + (lXk + 0)],
7,
ucFrbNr
);
.. und ausflippen:
LPDIRECTDRAWSURFACE7 lpSurface ist ein Zeiger auf die 'Back'.
Am Ende dann 'Flip'.
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von Krishty »

Leg ucVram mal als Array an. Wenn du fertig bist, mach Lock(), memcpy(), Unlock(). Je kürzer das Surface gelockt ist, desto besser sollte das sein. Da du dann auch nicht mehr aus dem Surface-Speicher lesen musst, kannst du bei Lock() auch WRITEONLY angeben (oder so ähnlich, habe noch nie mit DD gearbeitet).

Das Problem ist, dass jedes Mal, wenn du Lock()st, die GPU mit der CPU synchronisiert und der gesamte Bildinhalt rübergeschaufelt werden müssen. Wahrscheinlich wirkt sich das bei Vista besonders katastrophal aus (WDDM 2) – warum genau kann man aber nicht sagen, ich weiß ja nichtmal, welche Vista-Version du hast, dass es bei dir so langsam läuft.

Kann aber natürlich auch einfach ein Kompatibilitsproblem sein und alles, was ich hier mutmaße, ist Schmarrn ;) Wie gesagt, DDraw war vor meiner Zeit.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von HeinzK »

Ein Gruß aus der Vergangenheit .. und Danke für Deine Infos. Ich selber arbeite auf Windows XP.
Begonnen habe ich meine ZwiAner auf Windows 2000.
Das Problem haben leider einige meiner 'Kunden' .. äähh Tester.
Ich habe einen Tipp bekommen es unter Vista mit Direct3D9Ex zu versuchen. Diesen Hinweis
werde ich mal weitergeben.
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von Krishty »

HeinzK hat geschrieben:Ich habe einen Tipp bekommen es unter Vista mit Direct3D9Ex zu versuchen. Diesen Hinweis werde ich mal weitergeben.
D3D9Ex gibt es nur unter Vista/7, genau wie D3D10. Auch glaube ich nicht, dass es irgendwas ändern würde.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von HeinzK »

Ich habe einen 'alten' Schalter im Spiel wieder entdeckt. Mit <Alt+Pos1>
(nicht <AltGr+Pos1>) kann auf GDI umgeschaltet werden (und wieder zurück).
Zu Beginn meiner Programmierung habe ich noch alles mit der GDI gezeichnet.
Lange Rede kurzer Sinn ..
Ein Vista-Anwender meinte, dass nach dem Umschalten auf GDI alles füssig läuft.
Kann das jemand nachchecken?
In diesem Fall entsteht das Problem durch mein eigenes ->Lock(.)/->Unlock().
k_lpDdPrimarySurface->Lock
(
NULL,
&ddsd,
(DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT),
NULL
);
Hat da jemand noch eine Idee?
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von HeinzK »

Das mit der GDI hat auf unserem Rechner nichts geändert.
Ich habe aber nun den Auftruf von ->Lock(..) auf das volle
Programm erweitert: (DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT | DDLOCK_WRITEONLY | DDLOCK_NOSYSLOCK)
DDLOCK_NOSYSLOCK ~~ keine Ahnung ob das was bringt, bisher
habe ich es nicht gebraucht (hat was mit Win16 zu tun).
DDLOCK_WRITEONLY >> könnte Wirkung haben, ist aber normalerweise
nicht nötig, da es für den anderen Fall ein DDLOCK_READONLY gibt.
Aber die Wirkung unter Vista ist so ähnlich, wie bei meinem damligen
Versuch mit & bzw. | die gesetzte Farbe mit einer Neuen zu kombinieren. Das war vielleicht träge ..
Für alle Vistas: http://www.zwianer.de/Download/ZwiAner.exx
(Umbenennen und die Original ZwiAner.exe damit ersetzen).
ZwiAner.exx aktualisiert (20.11.09 22:02).
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von HeinzK »

Windows Vista Problem gelöst!
Das Problem war die 'DDRAW-Paletten-Technik' die unter Vista
auf dem meisten Grafikkarten emuliert wurde (und zwar sehr langsam).
Ich habe meine 'Grafik-Engine' nun so erweitet, dass ich wahlweise
8bit mit Paletten, 16bit und 32bit nutzen kann.
Ich bitte diejenigen, die Vista einsetzen, das Spiel noch einmal zu testen!
Der nachfolgende Link installiert die neue 32bit-Grafik-Version der ZwiAner:
http://www.zwianer.de/Download/ZwiAnerDemoSetup.exe
PS:
Unter Windows 7 konnte ich das Problem durch kleine Wartezeit (5 s)
nach CreatePalette lösen, aber das ist nun mit der 32bit-Grafik auch
nicht mehr nötig.
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Re: Windows Vista, es läuft, aber ..

Beitrag von HeinzK »

Windows Vista .. kein Problem mehr vorhanden!
08.01.2010 18.30 Uhr .. Version Nr. 1.004 .. alle ZwiAner Download sind neu!
Für Win 7 und Vista wird automatisch 32bit-Grafik verwendet.
Für XP und kleiner wird weiterhin die 8bit-Paletten-Grafik verwendet (ist 4 .. 5 mal schneller).
Es ist leichter, einen Sack Flöhe zu hüten.
Antworten