1 / 49

DirectX 10 API

DirectX 10 API. Neuerungen in Direct3D 10. Neuerungen in Direct3D 10. Verarbeiten ganzer Primitive in der Geometry Shader Stage Ausgabe pipeline-generierter Daten in der Stream Output Stage Objekte und Modelle zur Reduzierung von CPU-Overhead Neue Ressourcentypen und –formate

tansy
Download Presentation

DirectX 10 API

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DirectX 10 API Neuerungen in Direct3D 10

  2. Neuerungen in Direct3D 10 • Verarbeiten ganzer Primitive in der Geometry Shader Stage • Ausgabe pipeline-generierter Daten in der Stream Output Stage • Objekte und Modelle zur Reduzierung von CPU-Overhead • Neue Ressourcentypen und –formate • Resource Views • Wegfall von Capability Bits • Layered Runtime • Common-Shader Core Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  3. Neuerungen in Direct3D 10 Verarbeiten ganzer Primitive in der Geometry Shader Stage Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  4. Geometry Shader • bekommt als Eingabe nicht Punkte sondern Primitive • kann nicht nur vorhandene Vertices manipulieren, sondern auch neue Primitive erstellen Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  5. Geometry Shader in HLSL (1) • Definition des GS in der Technique: technique10 RenderTextured { pass p0 { SetVertexShader( CompileShader( vs_4_0, VSScene() ) ); SetGeometryShader( CompileShader( gs_4_0, GSScene() ) ); SetPixelShader( CompileShader( ps_4_0, PSScene() ) ); } } Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  6. Geometry Shader in HLSL (2) • der (nicht-modifizierende) GeometryShader: [maxvertexcount(3)] void GSScene( triangleadj GSSceneIn input[6], inout TriangleStream<PSSceneIn> OutputStream) { PSSceneIn output = (PSSceneIn)0; for( uint i=0; i<6; i+=2 ) { output.Pos = input[i].Pos; output.Norm = input[i].Norm; output.Tex = input[i].Tex; OutputStream.Append( output ); } OutputStream.RestartStrip(); } Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  7. Einsatzmöglichkeiten von GS • Expandierung von Point Sprites • dynamische Partikelsysteme • Generierung von Fell • Generierung von Schattenvolumen • Single-Pass Cubemap-Erzeugung • … Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  8. Neuerungen in Direct3D 10 Ausgabe pipeline-generierter Daten in der Stream Output Stage Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  9. Stream Output Stage (1) • Daten aus GS können in eine oder mehrere Buffer Resources im Speicher geschrieben werden • können in einem späteren Rendering Pass wiederbenutzt oder • zum Auslesen durch die CPU in eine Staging Resource kopiert werden Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  10. Stream Output Stage (2) • GS liefert keine vorhersehbare Datenmenge • Länge des Streams kann variieren • Lösung: ID3D10Device::DrawAuto()  CPU braucht die Größe des Buffers nicht zu kennen Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  11. SO-Stage in C++/HLSL (1) • Definition des GS mit StreamOutput: GeometryShader gsStreamOut = ConstructGSWithSO( CompileShader( gs_4_0, GSAdvanceParticlesMain() ), "POSITION.xyz; NORMAL.xyz; TIMER.x; TYPE.x" ); technique10 AdvanceParticles { pass p0 { SetVertexShader( CompileShader( vs_4_0, VSPassThroughmain() ) ); SetGeometryShader( gsStreamOut ); SetPixelShader( NULL ); SetDepthStencilState( DisableDepth, 0 ); } } Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  12. SO-Stage in C++/HLSL (2) • Binden des Buffers an den Stream Output: D3D10_BUFFER_DESC vbdesc = …; ID3D10Buffer*g_pParticleStreamTo; ID3D10Buffer* pBuffers[1]; pd3dDevice->CreateBuffer( &vbdesc, NULL, &g_pParticleStreamTo ); pBuffers[0] = g_pParticleStreamTo; pd3dDevice->SOSetTargets( 1, pBuffers, offset ); Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  13. Neuerungen in Direct3D 10 Objekte und Modelle zur Reduzierung von CPU-Overhead Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  14. State Objects (1) • 5 State-Objects • ermöglichen „billigen“ Wechsel von State Changes • jedes Objekt initialisiert einen bestimmten State in der Pipeline Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  15. State Objects (2) • Input-Layout State Format und Umfang der geometrischen Daten im Eingangspuffer • Rasterizer State • Depth-Stencil State • Blend State • Sampler State Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  16. State Objects (2) • Input-Layout State • Rasterizer State Status des Rasterisierers, u.a. Fill und Cull • Depth-Stencil State • Blend State • Sampler State Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  17. State Objects (2) • Input-Layout State • Rasterizer State • Depth-Stencil State Konfiguration Tiefenpuffer und Stencil-Test • Blend State • Sampler State Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  18. State Objects (2) • Input-Layout State • Rasterizer State • Depth-Stencil State • Blend State legt fest, wie PS-Ausgabe und Renderziel von der OM-Stage vermischt werden • Sampler State Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  19. State Objects (2) • Input-Layout State • Rasterizer State • Depth-Stencil State • Blend State • Sampler State legt Texturmuster fest Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  20. Shader Constants • Shader Konstanten werden nur in Puffern abgelegt • 2 Typen: • Constant Buffer (cbuffer) • Texture Buffer (tbuffer) • Sollten nach Häufigkeit der Aktualisierung gruppiert werden  Performancegewinn cbuffer cb0 { float4x4 g_mWorldViewProj; float4x4 g_mInvView; }; tbuffer tbAnimMatrices { matrix g_mTexBoneWorld[MAX_BONE_MATRICES]; }; Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  21. Neuerungen in Direct3D 10 Neue Ressourcentypen und -formate Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  22. Buffer Resources • Vertex Buffer • wird vom Input-Assembler zu Primitiven zusammengesetzt • alle Werte im Vertex Buffer müssen den gleichen Typ haben • Index Buffer • Shader-Constant Buffer Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  23. Buffer Resources • Vertex Buffer • Index Buffer • enthält 16- oder 32-bit Indizes • Shader-Constant Buffer Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  24. Buffer Resources • Vertex Buffer • Index Buffer • Shader-Constant Buffer • ähnlich dem Vertex Buffer • wird per Flag (D3D10_BIND_CONSTANT_BUFFER) als Shader-Constant gekennzeichnet Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  25. Texture Resources • Texels • kleinste Einheit einer Texture, die von der Pipeline gelesen/geschrieben werden kann • 1 bis 4 Komponenten, je nach ausgewählten DXGI-Format angeordnet (z.B. R8G8B8A8_UINT) • Texture1D / Texture1DArray • Texture2D / Texture2DArray • Texture3D Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  26. Texture Resources Texture2D • Texels • Texture1D / Texture1DArray • Texture2D / Texture2DArray • werden durch u(/v)-Werte/Vektoren adressiert • können MipMap-Levels enthalten • Spezialfall 2D-Array: CubeMaps • Texture3D Texture2DArray Texture2DArray als Cubemap Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  27. Texture Resources • Texels • Texture1D / Texture1DArray • Texture2D / Texture2DArray • Texture3D • adressiert durch (u,v,w)-Vektor • verhält sich als Rendertarget wie ein 2D-Array • kein Array-Konzept! Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  28. Texture Subresources • Subresource: Kombination aus Textur-Ressource und Mipmap-Level • wird benutzt für Resource Views Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  29. Neuerungen in Direct3D 10 Resource Views Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  30. Resource Views (1) • legt die Hardware-Interpretation einer Ressource im Speicher fest • erlaubt Pipeline Stages, lediglich auf die benötigten Subresourcen zuzugreifen • Beispiel: Zugriff auf alle Mipmaps Level 2 eines Texture2DArray Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  31. Resource Views (2) Verwendung als • Render-Target View • nur ein Mipmap-Level darf Render-Target sein • zugehöriger Depth Stencil View • Depth Stencil View • Shader Resource View Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  32. Resource Views (2) Verwendung als • Render-Target View • Depth Stencil View • wird zusammen mit dem zugehörigen Render-Target View an die OM-Stage gebunden • Shader Resource View Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  33. Resource Views (2) Verwendung als • Render-Target View • Depth Stencil View • Shader Resource View • bindet eine Ressource an eine Shader Stage • dieser View kann eine Ressource als etwas anderes interpretieren, als sie erzeugt wurde  Texture2DArray  CubeMap Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  34. Neuerungen in Direct3D 10 Wegfall von Capability Bits Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  35. Wegfall von Capability Bits von Microsoft gepriesen: • festgelegte Funktionalität von DirectX 10 – Hardware  keine CAP Bits mehr nötig ABER: für Ressourcen-Formate gibt es wiederum optionale Features u.a. für MSAA und FP32-Filterung Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  36. Neuerungen in Direct3D 10 „Layered Runtime“: in Ebenen angeordnete Laufzeitstruktur Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  37. Runtime Layers ermöglicht beim Erzeugen eines D3D10-Devices, die Funktionalität in „Schichten“ anzugeben • Core Layer • bietet Grundfunktionen • ist die einzige obligatorische Ebene • Debug Layer • Switch-To-Reference Layer • Thread-Safe Layer Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  38. Runtime Layers ermöglicht beim Erzeugen eines D3D10-Devices, die Funktionalität in „Schichten“ anzugeben • Core Layer • Debug Layer • ermöglicht Parameter- und Konsistenzvalidierung • erzeugt Debugausgaben • wie üblich: Device mit Debug Layer läuft merklich langsamer • Switch-To-Reference Layer • Thread-Safe Layer Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  39. Runtime Layers ermöglicht beim Erzeugen eines D3D10-Devices, die Funktionalität in „Schichten“ anzugeben • Core Layer • Debug Layer • Switch-To-Reference Layer • ermöglicht einer Anwendung den Wechsel auf die von Hardware-Device (HAL) auf Referenz-Device (REF) • Thread-Safe Layer Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  40. Runtime Layers ermöglicht beim Erzeugen eines D3D10-Devices, die Funktionalität in „Schichten“ anzugeben • Core Layer • Debug Layer • Switch-To-Reference Layer • Thread-Safe Layer • ermöglicht Zugriff auf das Grafik-Device parallel aus mehreren Threads • Achtung! Dieses Layer ist standardmäßig aktiv und muß explizit abgeschaltet werden, falls dies gewünscht ist!  D3D10_CREATE_DEVICE_SINGLETHREADED Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  41. Neuerungen in Direct3D 10 Common-Shader Core Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  42. Common-Shader Core (1) • Gedanke: alle Shader-Arten bieten dieselbe Grundfunktionalität Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  43. Common-Shader Core (2) • Input Data • Vertex Shader: vom Input Assembler • Pixel/Geometry Shader: vom vorherigen Shader • system-generierte Werte, werden von der ersten zutreffenden Pipeline-Einheit benutzt Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  44. Common-Shader Core (2) • Output Data • Shader geben Daten an die nächste Stage weiter • Menge an GS-Output kann variieren Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  45. Common-Shader Core (2) • Shader Code kann… • aus dem Speicher lesen • fp- und int-Arithmetik durchführen • Flußkontrolle • unbegrenzte Zahl von Anweisungen Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  46. Common-Shader Core (2) • Samplers • definieren, wie Texturen gesampled und gefiltert werden • 16 Sampler pro Shader gleichzeitig Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  47. Common-Shader Core (2) • Textures • können per Sampler gefiltert oder texelweise mit load() gelesen werden Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  48. Common-Shader Core (2) • Buffers • können nicht gefiltert werden • werden elementweise per load() gelesen • 128 Buffer und Textures gleichzeitig pro Shader Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

  49. Common-Shader Core (2) • Constant Buffers • optimiert für Shader-Constants, also für häufige Updates durch die CPU • 16 Constant Buffers gleichzeitig pro Shader Oliver Rahner - Hauptseminar Computer Graphics, SS 2007

More Related