Ich habe gehört, dass das setzen von Konstanten ein relativ teurer Befehl ist...
Mich würde interessieren, was schneller ist, Konstanten setzen oder einen Buffer locken und befüllen? Bei gleicher geringer Datenmenge.
[DX9] Konstanten vs. Buffers (Tex/VB)
Re: [DX9] Konstanten vs. Buffers (Tex/VB)
Die vielen geringen Datenmengen in einen Buffer füllen und instanced drawing machenZudomon hat geschrieben:Ich habe gehört, dass das setzen von Konstanten ein relativ teurer Befehl ist...
Mich würde interessieren, was schneller ist, Konstanten setzen oder einen Buffer locken und befüllen? Bei gleicher geringer Datenmenge.
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [DX9] Konstanten vs. Buffers (Tex/VB)
Was für eine Art von Puffer? Für Vertexdaten, die sich jeden Frame ändern, wäre DrawPrimitveUP() eine Möglichkeit …
Re: [DX9] Konstanten vs. Buffers (Tex/VB)
Ich habe gelesen, dass DrawPrimitiveUP() wohl intern auch nur einen Buffer bereitstellt und locked...Krishty hat geschrieben:Was für eine Art von Puffer? Für Vertexdaten, die sich jeden Frame ändern, wäre DrawPrimitveUP() eine Möglichkeit …
Es geht mir nicht um Instancing, sondern explizit nur darum, ob es schneller ist sagen wir 50 Konstanten an nen Shader zu übergeben oder die Daten z.B. in eine Textur zu schreiben und die dann auszulesen...antisteo hat geschrieben:Die vielen geringen Datenmengen in einen Buffer füllen und instanced drawing machenZudomon hat geschrieben:Ich habe gehört, dass das setzen von Konstanten ein relativ teurer Befehl ist...
Mich würde interessieren, was schneller ist, Konstanten setzen oder einen Buffer locken und befüllen? Bei gleicher geringer Datenmenge.
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [DX9] Konstanten vs. Buffers (Tex/VB)
Ist implementierungsabhängig. Selbst, wenn, hast du noch die Chance, das in einem API-Aufruf erledigt zu haben statt in mehreren.Zudomon hat geschrieben:Ich habe gelesen, dass DrawPrimitiveUP() wohl intern auch nur einen Buffer bereitstellt und locked...Krishty hat geschrieben:Was für eine Art von Puffer? Für Vertexdaten, die sich jeden Frame ändern, wäre DrawPrimitveUP() eine Möglichkeit …
Die Datenmenge ist ja beide Male gleich; was zählt, sind die Unkosten, das zur GPU zu schieben. Auf CPU-Seite ist das mit Konstanten wahrscheinlich weniger, da es weniger API-Aufrufe sind, du deinerseits keine Daten kopieren musst und der Treiber die Texel nicht umsortieren muss. Auf Seite des Busses ist es ungewiss, ob die 50 Konstanten als monolithischer Befehl zur GPU wandern (was die Texel wahrscheinlich tun würden) oder in 50 Häppchen mit je 20 B Verschnitt.Zudomon hat geschrieben:Es geht mir nicht um Instancing, sondern explizit nur darum, ob es schneller ist sagen wir 50 Konstanten an nen Shader zu übergeben oder die Daten z.B. in eine Textur zu schreiben und die dann auszulesen...
Auf der GPU sind die Konstanten definitiv schneller, weil das Lesen aus dem Constant Memory schneller und einfacher vorhersagbar ist als das Samplen einer Textur.
- Schrompf
- Moderator
- Beiträge: 5161
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: [DX9] Konstanten vs. Buffers (Tex/VB)
Aus DX9-Perspektive ist das Hochladen eines Blocks von 50 Shaderkonstanten zigfach schneller als das Locken einer Textur, Hochladen der Texel und abschließendes Unlocken. Falls der Treiber dafür einen Sync auslöst, wäre die Texturlösung sogar xtausendfach teurer. Ich weiß aber nicht, ob es ab DX10 dafür bessere Methoden gibt.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [DX9] Konstanten vs. Buffers (Tex/VB)
Ab D3D10 sind alle Puffer vereinigt; es macht also keinen Unterschied, ob Konstanten, Vertex-Puffer, Index-Puffer oder Texturen gelockt (gemappt) werden. Es gibt allerdings zwei API-Funktionen dafür, deren Unterschied ich vergessen habe.