1 / 32

DirectX & GeForce3 Overview: Vertex & Pixel Shaders Assembly

This overview delves into DirectX, Direct3D, Graphics, and APIs while spotlighting the Vertex Shader and Pixel Shader components, their assembly language programs, and architectural insights for GeForce3. It covers key instructions, architectures, and modifier details, offering a comprehensive view on rendering pipelines and shader functionalities. The text provides in-depth guidance on hardware support, rendering techniques, and shader executions for transforming and lighting processes. The concluding section touches on future DirectX components and highlights essential optimizations for graphics performance.

ola
Download Presentation

DirectX & GeForce3 Overview: Vertex & Pixel Shaders Assembly

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 8 and GeForce3 Christian Schär & Sacha Saxer

  2. Overview • DirectX • Direct3D 8 • Vertex Shader • Pixel Shader • Hardware Support • Conclusions • Future

  3. DirectX Components • DirectDraw • Direct3D • DirectSound • DirectMusic • DirectShow • DirectInput • DirectPlay 2D Graphics API 3D Graphics API Sound API Music API Multimedia Streams API Input API Network API

  4. Direct3D • Hardware Abstraction Layer • Classic Rendering Pipeline • Vertex Shader • Pixel Shader • D3DX

  5. Hardware Abstraction Layer

  6. Classic Rendering Pipeline CreateVertexBuffer(); SetVertexShader(); SetStreamSource(); DrawPrimitive();

  7. Vertex Shader • Small assembly language program • Replaces the Transformation and Lighting Engine • Responsible for World and View transformations • Is executed once per vertex • Has no neighborhood information • Prepares data for the Pixel Shader

  8. Modified Rendering Pipeline

  9. Vertex Shader Architecture 16 Input registers (r/o) 96 Constant registers (r/o) 12 Temp registers (r/w) 1 Address register (w/o) Output registers Max. 128 instructions

  10. Vertex Shader Assembly • Output: • oPos • Position • oTn • Texture • oDn • Color • oFog/oPts Input: vn Vertex c[n] Constants an Address rn • Temp

  11. mov r, s0 add r, s0, s1 sub r, s0, s1 mul r, s0, s1 mad r, s0, s1, s2 rcp r, s0.w rsq r, s0.w ; copy ; sum ; difference ; multiply ; multiply-add ; reciprocal ; reciprocal sqrt Vertex Shader Instructions

  12. dp3 r, s0, s1 dp4 r, s0, s1 min r, s0, s1 max r, s0, s1 slt r, s0, s1 sge r, s0, s1 ; 3D dot product ; 4D dot product ; per component ; per component ; 1.0 if less than ; 1.0 if greater/equal Vertex Shader Instructions

  13. expp r, s0.w logp r, s0.w lit r, s0, s1 dst r, s0, s1 ; partial prec. ; partial prec. ; lighting fn ; distance fn Vertex Shader Instructions

  14. Component Modifier r.{x} {y} {z} {w} r.[xyzw][xyzw][xyzw][xyzw] -r Description Destination mask Source swizzle Source negation Register modifier

  15. vs.1.1 m4x4 r0, v0, c[CV_WORLD_0] m4x4 oPos, r0, c[CV_VIEWPROJ_0] m3x3 r1, v3, c[CV_WORLD_0] dp3 r1.x, r1, c[CV_LIGHT] max r1.1, r1.x, c[CV_ZERO].x mul r1, r1.x, c[CV_DIFUSE] add r1, r1, c[CV_AMBIENT] min r1, r1, c{CV_ONE].x mov oD0.x, r1.x mov oD0.y, r1.x mov oD0.z, r1.x Sample Vertex Shader

  16. Pixel Shader • Small assembly language program • Replaces the Texturing and Lighting Engine • Is executed once per pixel • Has no neighborhood information • Does further calculations on the Vertex Shader’s output • The output is the color of the pixel

  17. Modified Rendering Pipeline

  18. Pixel Shader Architecture Specular / Fog Computed Dx8 Pixel Shaders TexAddrOp 0 TexAddrOp 1 Alpha Blending Triangle Rasterizer 8 Texture Blend Ops TexAddrOp 2 TexAddrOp 3

  19. Pixel Shader Assembly • Output: • rn • Temp • r0 • Output color Input: vn Vertex color tn Texture cn Constants

  20. mov r, s0 add r, s0, s1 sub r, s0, s1 mul r, s0, s1 mad r, s0, s1, s2 ; copy ; sum ; difference ; multiply ; multiply-add Pixel Shader Instructions

  21. dp3 r, s0, s1 lrp r, s0, s1, s2 cnd r, r0.a, s1, s2 sub r0, v0, v1_biascnd r0, r0.a, c0, c1 ; 3D dot product ; lin. interp. blend ; r= r0.a>0.5 ? s1 : s2 ; r= v0 > v1 ? c0 : c1 Pixel Shader Instructions

  22. tex t texbem t texbeml t, s texcoord t texkill t texm3x2pad t, s texm3x2tex t, s texm3x3pad t, s texm3x3tex t, s texm3x3spec t, s0, s1 texm3x3vspec t, s texreg2ar t, s texreg2gb t, s ; normal sample ; bumped env. mapping ; … with Luminance ; sample tex. coords. ; black, if coords < 0 ; Matrix multiplications ; ; ; ; … +refl. +env. map. ; ; use s.ar as coords. ; use s.gb as coords. Texture Instructions

  23. tex t texm3x2pad t0, s texm3x2tex t1, s tex t0 texm3x3pad t1, t0 texm3x3pad t2, t0 texm3x3spec t3, t0, c0 mov r0, t3 ; put texture col. into t ; 3x2 matrix multiplication ; get normal vector from t0 ; eye-ray vector from c0 ; cube env. texture from t3 ; do env. mapping ; output color Sample Texture Instructions

  24. Component Modifier r.{a} {rgb} 1-r -r r_bias r_bx2 Description Source/Destination mask Invert Negate -0.5 -0.5, *2 Modifiers

  25. Instruction Modifier _x2 _x4 _d2 _sat Description multiply result by 2 multiply result by 4 divide result by 2 cramp result Modifiers

  26. ps.1.1 tex t1 mov r0, t1 ; use texture color mov r0.a, v0 ; get diffuse lighting from ; vertex interpolation Sample Pixel Shader

  27. adjacency required sort by attribute compact progressive meshes D3DX Mesh Optimizing

  28. different levels of detail (LOD) half edge collapse cloning by sharing of vertex buffers streamable save method OptimizeBaseLOD TrimByVertices/TrimByFaces D3DX Progressive Meshes

  29. vertex data, bone data with vertex indices support for .X files export filters for Maya, 3D Studio Max available up to 4 indices per vertex up to 12 indices per face up to 256 bone palettes ConvertToBlendedMesh() reduces to this constraints ConvertToIndexBlendedMesh() same, but less subsets Uses GeForce’s restricted skinning support by rendering a prefix in hardware. D3DX Skinned Meshes

  30. Conclusions • very flexible tool • hardware accelerated • low level interface (assembly) • vertex shaders theoretically applicable to point-sampled geometry • rendering of shadows needs lots of work

  31. What’s next? • subdivision surfaces in hardware (TruForm technology by ATI) • displacement maps

  32. References • MSDN (Microsoft Developer Network) • NVIDIA Whitepapers • Introduction to Vertex Shaders • Introdction to Pixel Shaders http://msdn.microsoft.com/directx http://partners.nvidia.com/Developer

More Related