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

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

11

25.12.2013, 11:39

Auf jeden Fall ein guter Tipp, wenn man DirectX 11 benutzt.
Für DirectX 9 gibt es das aber nicht, oder?

12

25.12.2013, 11:41

Nein; sie sind erst ab Direct3D 10 (oder Feature Level 10.0) verfügbar.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

13

25.12.2013, 11:57

Ich glaube ich sollte mein Fontrendering auf einen Texturearray umstellen. Zu meiner Peinlichkeit hab ich das immer noch in der ganz einfachen Variante implementiert.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

25.12.2013, 17:14

Der große Vorteil von Texture Arrays ist vor allem auch, dass man damit Mip-Mapping 100% korrekt hinbekommt, was mit einem Texture Atlas problematisch ist. Der Nachteil ist, dass alle Texturen die selben Abmessungen haben müssen. Ich hab auch noch nie gemessen, ob mit dem dynamischen Auswählen über den Array Index ein Overhead verbunden ist, vermutlich aber nicht...

15

25.12.2013, 17:29

Theoretisch könnte damit jeder Pixel auf deinem Bildschirm eine andere Textur nutzen und ich denke, dass das entweder die Textur-Caches schnell zum Weinen bringt oder die Wavefronts leer laufen lässt, falls die Dreiecke nicht nach Textur-Indizes sortiert sind. Gemessen habe ich da aber noch nie was weil es bisher immer schnell genug war.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Krishty« (25.12.2013, 17:37)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

25.12.2013, 17:40

Der "jeder Pixel eine andere Texture" Fall ist natürlich extrem schlecht. Der Texture-Cache auf NVIDIA Karten hat iirc z.B. eine Cache-Line-Size von 32 Byte, d.h. 8x8 Pixel bei 8-Bit RGBA. Natürlich könnte man einen Texture Atlas zusätzlich so optimieren, dass oft benutzte Texturen nebeneinander liegen und daher die Wahrscheinlichkeit erhöht wird, auch am Rand einen Cache-Hit zu schaffen, ich würd aber fast mal vermuten, dass die Texture Array Variante performancemäßig gar nicht so übel ist...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (25.12.2013, 18:04)


17

25.12.2013, 18:01

Arbeitet denn jeder Kern mit einem eigenen Texturzeiger oder müssen alle aus derselben Textur samplen?

Der erste Fall wäre für Arrays optimal, aber ich frage nach weil es mir im Allgemeinen wie Verschwendung aussieht – normalerweise arbeiten alle Kerne einer Wavefront am selben Draw Call, und in 99 % benutzen alle Pixel eines Draw Calls die selben Texturen, nur an unterschiedlichen Stellen.

Mein Vorschlag war, die Dreiecke innerhalb des Index Buffers so zu sortieren, dass erst alle mit Textur [0] kommen, dann die mit Textur [1], usw. damit möglichst viele Kerne zugleich auf die selbe Textur zugreifen. Den Transport vom VRAM zu den Kernen sollte das durch bessere Lokalität entlasten, so mein Gedanke.

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

18

27.12.2013, 00:28

Eine andere Frage.

Lohnt es sich auf DirectX11 umzusteigen, wenn man alles beherrscht?

Cranberry

Treue Seele

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

19

27.12.2013, 01:02

Warum postest du deine Frage in diesen Thread? Warum eröffnest du keinen eigenen?
Von was auf DirectX11 umsteigen? Von DirectX9? Dann ja, da DirectX11 neue Funktionen bietet (wie z.b. Instancing) und in Zukunft (vielleicht auch in ferner Zukunft) DirectX9 nicht mehr vom neusten Windows unterstützt wird.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

20

27.12.2013, 09:48

(wie z.b. Instancing)


Ausgerechnet das ist kein wirklich neues Feature von DirectX 11. :)
@D13_Dreinig

Werbeanzeige

Ähnliche Themen