Frage zu den D3D10_REQ, D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION vs. D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES



  • Hallo zusammen,

    auf der Microsoft Seite zu den D3D10 Voraussetzungen (http://msdn.microsoft.com/en-us/library/windows/desktop/bb509540(v=vs.85).aspx) finden sich u.a. die folgenden Angaben:

    D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES = 128
    D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION = 8192

    Diese beiden Angaben schließen sich doch gegeneinander aus, oder nicht?

    Ich meine folgendes: wenn ich eine Textur mit den Abmessungen von 8192 x 8192 x 32 BPP gemäß dem D3D Feature Level 10 habe (8192 * 8192), dann benötigt so eine Textur auf der GPU:

    8192 Pixels X * 8192 Pixels Y * 4 BPP = 268.435.456 Bytes = 256 MB.

    Dem gegenüber steht doch aber D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES im Feature Level 10 mit den 128 MB pro Ressource.

    Wie passt das zusammen? Was verstehe ich hierbei nicht korrekt?

    Vielen Dank für alle Antworten im voraus,
    Bojana



    1. D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES gilt für Ressourcen generell; Texturen sind nur eine bestimmte Art von Ressource.
    2. Es gibt nicht nur 2D Texturen.
    3. Wo steht, dass eine Textur immer 4 Byte pro Pixel haben muss!? 😉


  • dot schrieb:

    Und wo steht, dass eine Textur immer 4 Byte pro Pixel haben muss!? 😉

    Och nöö, dass wäre ja fies, BGRA ist doch quasi Standard (wird bei D2D nämlich von Microsoft für D2D empfohlen für max. Performance!) 🙂

    Aber selbst RGB wären doch bei 8192 * 8192 schon 192 MB!





  • Die hab ich (alle) testweise durch 😃

    Davon funktionieren bei mir sagenhafter Weise:
    DXGI_FORMAT_B8G8R8A8_UNORM
    DXGI_FORMAT_R8G8B8A8_UNORM

    Bei allen anderen Formaten kriege ich einen auf die Fresse vom Debugger 😃 (Mag an meinem GFX-Treiber liegen...).



  • Was genau ist es, das du versuchst? Wo genau bekommst du "eins auf die Fresse"!? Und wieso vom Debugger!?



  • dot schrieb:

    Was genau ist es, das du versuchst? Wo genau bekommst du "eins auf die Fresse"!? Und wieso vom Debugger!?

    Also: ich versuche Objekt-Virtualisierung zu vermeiden. Ein Rect von der Größe 8192x8192x4BPP gesplittet auf 4 Layer in Direct2D wäre genial um mir einen ganzen Haufen an Virtualisierungsarbeit zu ersparen.

    Darum ging ich zunächst ganz naiv an die Sache heran und hab den D2D-Feature-Level auf DX10 gestellt, dann gibt mir ID2D1RenderTarget::GetMaximumBitmapSize nämlich den Wert 8192 aus.

    Doch was nützt mir dieser Wert, wenn ich doch in Wahrheit die Memory-Restrictions verletze? Zwar nicht auf meiner Grafikkarte (da klappt es, solange ich mich an ID2D1RenderTarget::GetMaximumBitmapSize halte, aber damit scheint ja offensichtlich nicht sichergestellt zu sein das es bei jedem Endanwender funktioniert).

    "Und wieso vom Debugger!?"

    Der sagt mir bei den anderen Formaten halt sinngemäß das meine Grafikkarte den Modus nicht unterstützt. Macht aber auch nichts weiter, denn ich brauche auf jeden Fall BRGA Premultiplied für meinen Anwendungsfall.



  • Na dann musst du eben ein kleineres "Rect" verwenden!? Was genau verstehst du unter einem Layer? Was für "Virtualisierungsarbeit"? Ich würde vorschlagen, dass du uns einfach mal dein eigentliches Problem beschreibst, anstatt einfach nur das letzte Hindernis, über welches du bei deinen Lösungsversuchen gestolpert bist. Dann können wir evtl. auch eine Lösung anbieten... 😉

    Bojana schrieb:

    "Und wieso vom Debugger!?"

    Der sagt mir bei den anderen Formaten halt sinngemäß das meine Grafikkarte den Modus nicht unterstützt. Macht aber auch nichts weiter, denn ich brauche auf jeden Fall BRGA Premultiplied für meinen Anwendungsfall.

    Cool, was für ein Debugger is das? Den muss ich mir auch zulegen... 🕶



  • dot schrieb:

    Na dann musst du eben ein kleineres "Rect" verwenden!? Was genau verstehst du unter einem Layer? Was für "Virtualisierungsarbeit"? Ich würde vorschlagen, dass du uns einfach mal dein eigentliches Problem beschreibst, anstatt einfach nur das letzte Hindernis, über welches du bei deinen Lösungsversuchen gestolpert bist. Dann können wir evtl. auch eine Lösung anbieten... 😉

    Bojana schrieb:

    "Und wieso vom Debugger!?"

    Der sagt mir bei den anderen Formaten halt sinngemäß das meine Grafikkarte den Modus nicht unterstützt. Macht aber auch nichts weiter, denn ich brauche auf jeden Fall BRGA Premultiplied für meinen Anwendungsfall.

    Cool, was für ein Debugger is das? Den muss ich mir auch zulegen... 🕶

    Okay okay, Rect und Layer waren von mir begrifflich falsch verwendet 🙂
    Ein Layer in meinem Gui-Renderer ist ganz simpel ein ID2D1BitmapRenderTarget. Davon habe ich 4 Stück die auf das I2D1HwndRenderTarget übereinander geblittet werden und in denen der Anwender scrollen kann. Um nun nicht solche Großen BitmapTargets aus kleineren zusammen zu setzen müssen (Virtualisierung) war ich erfreut darüber das D2D mir die max. Größe von 8192 zurückgab, denn das reicht für mich völlig aus. Dann bin ich aber halt über die Ressourcenbeschränkung gestolpert. Während meine Bitmaprendertargets also von der Pixelgrösse her passen scheint mir der Speicherplatz einen Strich durch mein Vorhaben zu machen. Auf meinem Laptop funktioniert es ja, aber das ist ja nunmal keine Garantie dafür das es auch bei anderen Grafikkarten funktioniert.

    Mein Debugger ist der von VS2012 Ultimate, aber die Fehlermeldung war natürlich von mir überspitzt dargestellt, aber sinngemäß ist das wirklich so 🙂



  • Wieso braucht dein GUI Renderer Rendertargets größer als die Bildschirmauflösung!?

    EDIT: Kannst du beim scrollen nicht einfach neu zeichnen? Eine allgemeine Lösung wirst du ohne "Virtualisierung" jedenfalls anders nicht hinbekommen...



  • dot schrieb:

    Wieso braucht dein GUI Renderer Rendertargets größer als die Bildschirmauflösung!?

    EDIT: Kannst du beim scrollen nicht einfach neu zeichnen? Eine allgemeine Lösung wirst du ohne "Virtualisierung" jedenfalls anders nicht hinbekommen...

    Es wäre halt einfacher gewesen und von der Performance absolut ausreichend. Aber Du hast natürlich Recht, ich werde wohl nicht drum herum kommen nur die sichtbaren Elemente zu zeichnen, schade 🙂

    Vielen Dank für Deine Antworten.


Log in to reply