Seite 1 von 1

Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 13:56
von gdsWizard
Hallo,


wie der Titel verrät möchte ich gerne in ein DirectX RenderTarget schreiben aber es gleichzeitig zum Lesen in einem Sampler nutzen. Geht das ? Oder muß man dazu in ein extra RenderTarget schreiben. Ich verwende DirectX 11.
Ich möchte das für Postprocessing, es soll aber nur für einen Teil des Rendertargets verwendet werden, der Rest soll unverändert bleiben. Für eine Antwort wäre ich sehr dankbar.

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 14:04
von Schrompf
Nach meinem Wissen ist das immernoch von der Spec verboten. Ich habe aber unter DX9 und NVidia vor einigen Jahren schon genau das gemacht und es hatte funktioniert. Du bekommst allerdings viele Warnungen von der Runtime, kann sein, dass das im Debug-Modus gar nicht durchgeht.

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 14:09
von gdsWizard
Danke für die schnelle Antwort. Schade, so muß ich wahrscheinlich das zu berabeitende Rendertarget in eine andere RenderTarget kopieren und die Kopie als eigentliches RenderTarget nutzen. Das kostet natürlich Zeit. Aber die Fehlermeldungen die mir die Runtime liefert würde ich schon ernst nehmen.

Thx

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 14:14
von Schrompf
Ja. Der offizielle Weg ist seit Urzeiten: Rendertarget-PingPong. Vom einen lesen, ins andere schreiben, und zurück.

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 14:31
von dot
Du kannst in D3D11 eine Ressource gar nicht gleichzeitig als RTV und als SRV binden, die Runtime verhindert das. Vermutlich würdest du das in Wahrheit aber sowieso gar nicht wollen, oder was genau wolltest du damit erreichen?

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 14:35
von gdsWizard
Ich hatte überlegt ein teilweise transparentes Material mit Refraction zu zeichnen. Es ging mir aber in der Hauptsache um das Prinzip. Ich möchte in Kürze ein kleines Spiel schreiben und mein Framework für das Rendering erweitern.

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 15:03
von dot
Ok, nun, die Grafikkarte arbeitet hochgradig parallel; wenn du aus dem Rendertarget lesen könntest, während du in es renderst, würdest du nicht das Ergebnis erhalten, an das du gerade denkst... ;)

Manche mobile Grafikkarten bieten über OpenGL Extensions entsprechende Möglichkeiten, das ist aber eine Spezialität dieser Hardware (Tiled Renderer) und funktioniert auch nur dort und auch nur aus ganz bestimmten Gründen...

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 15:10
von gdsWizard
Ja, du hast Recht, ich würde nicht das Ergebnis erhalten das ich möchte... die Graka arbeitet ja parallel. Andere Effekte wie Blending bietet ja die Hardware direkt an, hier wäre es aber theoretisch möglich.

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 16:27
von Lynxeye
dot hat geschrieben:Manche mobile Grafikkarten bieten über OpenGL Extensions entsprechende Möglichkeiten, das ist aber eine Spezialität dieser Hardware (Tiled Renderer) und funktioniert auch nur dort und auch nur aus ganz bestimmten Gründen...
Selbst dort definieren die Extensions keinen wahlfreien Zugriff auf das gerade gebundene Rendertarget. Alles was diese Extensions anbieten ist das zurücklesen der Werte aus dem aktuellen Fragment auf welchem ein Fragmentshader gerade arbeitet. Was am Ende nichts anderes ist als die Blendingstufe abzuschaffen und das Blending vollvariabel vom Fragmentshader mit ausführen zu lassen.

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 16:28
von Schrompf
Lynxeye hat geschrieben:Selbst dort definieren die Extensions keinen wahlfreien Zugriff auf das gerade gebundene Rendertarget. Alles was diese Extensions anbieten ist das zurücklesen der Werte aus dem aktuellen Fragment auf welchem ein Fragmentshader gerade arbeitet. Was am Ende nichts anderes ist als die Blendingstufe abzuschaffen und das Blending vollvariabel vom Fragmentshader mit ausführen zu lassen.
Und darauf hoffe ich schon seit Ewigkeiten, und ich bin anscheinend auch nicht der Einzige mit dem Wunsch. Aber anscheinend stellt das ein größeres Problem dar, als sauber arbeitende Output Merger zu designen... jedenfalls ist bei den großen drei GPU-Herstellern nichts dergleichen bisher in Sicht :-(

Re: Rendertarget auch als Input Texture

Verfasst: 12.11.2012, 16:35
von Lynxeye
Schrompf hat geschrieben:Und darauf hoffe ich schon seit Ewigkeiten, und ich bin anscheinend auch nicht der Einzige mit dem Wunsch. Aber anscheinend stellt das ein größeres Problem dar, als sauber arbeitende Output Merger zu designen... jedenfalls ist bei den großen drei GPU-Herstellern nichts dergleichen bisher in Sicht :-(
Zumindest der mobile Teil der NVidia Aufstellung kann das bereits. Da dieser Chip auch auf einem normalen forward Renderer aufbaut und nicht irgendwelche exotischen tilebasieren Ansätze pflegt besteht zumindest Hoffnung, dass es GL_NV_shader_framebuffer_fetch irgendwann auch auf den Desktop schafft.