Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.05.2011, 16:08

DirectX & Multithreading

Hallo Com,

Schon einmal vorweg, ich bin ein absoluter Neueinsteiger ins Multithreading ^^
Das Problem ist nämlich, dass ich überhaupt nicht weiß wie ich meine Programme so mit CriticalSections schützen kann, dass sie Thread-Safe sind.
Dabei geht es mir vorwiegend um Direct3D9 und XAudio2. Was muss man schützen und vor allem wie oft und wie viel?
Oder sind Direc3D9 und XAudio2 schon intern Thread-Safe?
Laut Google muss man bei D3D9 das D3DCREATE_MULTITHREADED Flag beim Erstellen setzen, allerdings soll die Performance da deutlich darunter leiden.

Ich hoffe ihr könnt mir helfen.
Schon einmal Danke :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

27.05.2011, 16:47

Das Problem ist nämlich, dass ich überhaupt nicht weiß wie ich meine Programme so mit CriticalSections schützen kann, dass sie Thread-Safe sind.

Na dann lerns ;)

Dabei geht es mir vorwiegend um Direct3D9 und XAudio2.

Und was genau hast du damit vor?

Was muss man schützen und vor allem wie oft und wie viel?
Oder sind Direc3D9 und XAudio2 schon intern Thread-Safe?

Das ist nicht so einfach, hängt von deiner Anwendung ab. Wofür genau willst du denn Multithreading verwenden?

Laut Google muss man bei D3D9 das D3DCREATE_MULTITHREADED Flag beim Erstellen setzen, allerdings soll die Performance da deutlich darunter leiden.

Man kann eben nicht alles haben...

3

27.05.2011, 17:40


Na dann lerns ;)

Das sagst du so leicht ^^

Und was genau hast du damit vor?

Das ist nicht so einfach, hängt von deiner Anwendung ab. Wofür genau willst du denn Multithreading verwenden

Bei XAudio2 will ich für Soundstreaming mehere Threads haben, damit das Program nicht stockt.
Direct3D weiß ich noch nicht, aber es ist natürlich immer gut wenn das Framework solche Dinge unterstützt.


Man kann eben nicht alles haben...

Bei D3D10/11 ist es nicht mehr so das die Performance so sehr darunter leidet.
Aber ich weiß jetzt nicht wie viel Performance es wirklich kostet.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

27.05.2011, 17:45


Na dann lerns ;)

Das sagst du so leicht ^^

Naja, wenn du vorhast Multithreading zu verwenden wird dir nix andres übrig bleiben als es zu lernen!?

Bei XAudio2 will ich für Soundstreaming mehere Threads haben, damit das Program nicht stockt.

Klar, so macht man das normal. Ist auch absolut kein Problem mit XAudio2.


Man kann eben nicht alles haben...

Bei D3D10/11 ist es nicht mehr so das die Performance so sehr darunter leidet.
Aber ich weiß jetzt nicht wie viel Performance es wirklich kostet.

Natürlich, weil D3D11 im Gegensatz zu D3D9 auf Multithreading ausgelegt ist. Bei D3D9 empfielt es sich, alles was mit D3D zu tun hat im Hauptthread zu machen, multithreaded Rendering ist mit D3D9 ohnehin nicht sinnvoll umsetzbar. Wieviel es kosten würde hängt davon ab wie genau du vorhast mit mehren Threads auf D3D zuzugreifen. Im Prinzip werden halt mehr oder weniger alle D3D Calls zu Synchronisationspunkten...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (27.05.2011, 17:54)


5

28.05.2011, 11:27

Naja, wenn du vorhast Multithreading zu verwenden wird dir nix andres übrig bleiben als es zu lernen!?

So meine ich das nicht. Ich habe schon verstanden wie Multithreading funktioniert (mit Schützen von Daten usw.) nur weiß ich eben nicht was bei einer bestimmten API,
in diesem Fall Direct3D und XAudio2, beachtet werden muss.
XAudio2 scheint intern auf Multithreading zugeschnitten zu sein.
Ich werde einfach mal nichts schützen und dann merk ich wohl schon früher oder später wo es knallt :D

Danke dir ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

28.05.2011, 11:50

So meine ich das nicht. Ich habe schon verstanden wie Multithreading funktioniert (mit Schützen von Daten usw.) nur weiß ich eben nicht was bei einer bestimmten API,
in diesem Fall Direct3D und XAudio2, beachtet werden muss.

Naja, das hängt von der API ab, am Besten schaut man da erstmal was die entsprechende Dokumentation dazu sagt. XAudio2 ist afaik eigentlich durchgehend Threadsafe.

Werbeanzeige