490 likes | 664 Views
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
E N D
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 • Resource Views • Wegfall von Capability Bits • Layered Runtime • Common-Shader Core Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
Neuerungen in Direct3D 10 Verarbeiten ganzer Primitive in der Geometry Shader Stage Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
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
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
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
Neuerungen in Direct3D 10 Ausgabe pipeline-generierter Daten in der Stream Output Stage Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
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
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
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
Neuerungen in Direct3D 10 Objekte und Modelle zur Reduzierung von CPU-Overhead Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
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
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
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
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
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
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
Neuerungen in Direct3D 10 Neue Ressourcentypen und -formate Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
Buffer Resources • Vertex Buffer • Index Buffer • enthält 16- oder 32-bit Indizes • Shader-Constant Buffer Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
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
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
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
Texture Subresources • Subresource: Kombination aus Textur-Ressource und Mipmap-Level • wird benutzt für Resource Views Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
Neuerungen in Direct3D 10 Resource Views Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
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
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
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
Neuerungen in Direct3D 10 Wegfall von Capability Bits Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
Neuerungen in Direct3D 10 „Layered Runtime“: in Ebenen angeordnete Laufzeitstruktur Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
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
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
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
Neuerungen in Direct3D 10 Common-Shader Core Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
Common-Shader Core (1) • Gedanke: alle Shader-Arten bieten dieselbe Grundfunktionalität Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
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
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
Common-Shader Core (2) • Samplers • definieren, wie Texturen gesampled und gefiltert werden • 16 Sampler pro Shader gleichzeitig Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
Common-Shader Core (2) • Textures • können per Sampler gefiltert oder texelweise mit load() gelesen werden Oliver Rahner - Hauptseminar Computer Graphics, SS 2007
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
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