[DX9] Konstanten vs. Buffers (Tex/VB)

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Zudomon
Establishment
Beiträge: 2273
Registriert: 25.03.2009, 07:20
Kontaktdaten:

[DX9] Konstanten vs. Buffers (Tex/VB)

Beitrag von Zudomon »

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.
antisteo
Establishment
Beiträge: 941
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: [DX9] Konstanten vs. Buffers (Tex/VB)

Beitrag von antisteo »

Zudomon 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.
Die vielen geringen Datenmengen in einen Buffer füllen und instanced drawing machen
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [DX9] Konstanten vs. Buffers (Tex/VB)

Beitrag von Krishty »

Was für eine Art von Puffer? Für Vertexdaten, die sich jeden Frame ändern, wäre DrawPrimitveUP() eine Möglichkeit …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Zudomon
Establishment
Beiträge: 2273
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [DX9] Konstanten vs. Buffers (Tex/VB)

Beitrag von Zudomon »

Krishty hat geschrieben:Was für eine Art von Puffer? Für Vertexdaten, die sich jeden Frame ändern, wäre DrawPrimitveUP() eine Möglichkeit …
Ich habe gelesen, dass DrawPrimitiveUP() wohl intern auch nur einen Buffer bereitstellt und locked...
antisteo hat geschrieben:
Zudomon 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.
Die vielen geringen Datenmengen in einen Buffer füllen und instanced drawing machen
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...
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [DX9] Konstanten vs. Buffers (Tex/VB)

Beitrag von Krishty »

Zudomon hat geschrieben:
Krishty hat geschrieben:Was für eine Art von Puffer? Für Vertexdaten, die sich jeden Frame ändern, wäre DrawPrimitveUP() eine Möglichkeit …
Ich habe gelesen, dass DrawPrimitiveUP() wohl intern auch nur einen Buffer bereitstellt und locked...
Ist implementierungsabhängig. Selbst, wenn, hast du noch die Chance, das in einem API-Aufruf erledigt zu haben statt in mehreren.
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...
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.

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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
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)

Beitrag von Schrompf »

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.
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [DX9] Konstanten vs. Buffers (Tex/VB)

Beitrag von Krishty »

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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten