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

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

11

28.11.2010, 21:38

Texture2D mit StructuredRWBuffer oder ByteAddressBuffer heißt als UAV binden. Und das geht nicht, hab ich schon ausprobiert.
Man kann keine Texture2D nicht BIND_UNORDERED_ACCESS erstellen. Zumindest nicht auf DX10er Hardware.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

28.11.2010, 21:47

Du brauchst doch auch kein Unordered Access!?

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

13

29.11.2010, 11:39

Wo soll der ComputeShader sonst hin schreiben?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

29.11.2010, 12:14

Sry my bad. Ich hab Unordered Access mit nem Append Buffer verwechselt (Ich hab bisher nur mit CUDA und nicht mit ComputeShadern gearbeitet deswegen bin ich mit den Begriffen da noch nicht ganz so vertraut). Auf D3D10 Hardware werden laut doku nur normale RWStructuredBuffer und ByteAddressBuffer zum Schreiben unterstützt, aber dann schreib halt einfach in einen RWStructuredBuffer?

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

15

29.11.2010, 16:09

Mitlerweile habe ich eine lauffähige Version zustande gebracht.
Allerdings geht das so übelst über die Bandbreite, dass für eine Textur der Größe 256x256 Pixel gleich mal eine Viertel Stunde vergeht.

Ich probier mal eine CPU-Only Version fertig zu bekommen und dann wäge ich ab.

Danke Dot für deine Unterstützung.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

29.11.2010, 17:29

Wie hast du es denn nun gelöst? Wie gesagt der große Vorteil von ComputeShadern ist das Shared Memory, damit kann man, wenn man das Problem an der richtigen Seite anfasst extrem viel Bandbreite sparen (bei nem einfachen Gauss Blur kommt man so z.B. mit nur 1/4 der Bandbreite einer PixelShader Implementierung aus)...

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

17

29.11.2010, 18:51

Gelöst hab ich es wie folgt:
Resourcen:
- Dynamische Textur für ConeMap (Größe TextureSize x TextureSize * * 4 * sizeof(float))
- StructuredBuffer (Größe TextureSize * 4 * sizeof(float) als UAV
- Nochmal so ein Buffer als Staging

- Programm:
- Geht alle "Pixel" der ConeMap-Textur durch, und anschließend jede Reihe der "Destination-Texel", schickt die Nummer der Reihe an den CS
- CS geht alle Destination-Pixel der gewünschten Reihe durch und berechnet für ConeRatio für jeden Ziel Pixel in der Reihe und speichert den ConeRatio im UAV
- Wenn CS fertig, wird der UAV in den Staging Buffer kopiert, dieser gemappt und alle Ergebnisse werden verglichen
- Der "beste ConeRatio" der Reihe ist der ConeRatio des endgültigen "Pixels der ConeMap"
- Wenn alle Pixel der ConeMap ein Ergebnis haben, wird die Textur gespeichert.

Getestet hab ich es bis jetzt nur mit Texturen der Größe 256x256 Pixel. Habs aber aus Zeitgründen abgebrochen.
Wenn ich anstatt jede Reihe, jedes Pixel als Destination im CS durchgehe, hängt sich wieder der Treiber auf. Ist halt doch zu viel.
Wie es mit größeren Texturen aussieht, weiß ich nicht. Warschreinlich stürzt er dann auch ab.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

29.11.2010, 21:07

Ja das ist klar dass sich das aufhängt. Das müsste man wohl über mehrere passes machen und man könnte sich sicher ein besseres Setup überlegen wo man Shared Memory verwenden könnte um Bandbreite zu sparen. Ich denke dass auch der PixelShader von der NVIDIA page dafür gedacht ist dass du 256*256 Mal renderst oder so...

Werbeanzeige