200 likes | 308 Views
Status – Week 259. Victor Moya. Summary. OpenGL Traces. DirectX Traces. Proxy CPU. Command Processor. News. F-Buffer. Imagine. OpenGL Traces. GLTrace. We use the code (GNU)? Or do we base our own tracer on it? Works for Win32, Linux and BEOS. DLL/Shared Library wrapper
E N D
Status – Week 259 Victor Moya
Summary • OpenGL Traces. • DirectX Traces. • Proxy CPU. • Command Processor. • News. • F-Buffer. • Imagine.
OpenGL Traces • GLTrace. • We use the code (GNU)? • Or do we base our own tracer on it? • Works for Win32, Linux and BEOS. • DLL/Shared Library wrapper • Traces OpenGL function calls up to specification v. 1.1 and a few extensions. • Traces are in text format. Implement a binary format version?
OpenGL Traces • Additional work needed: • Upgrade to OpenGL specification v. 1.4 and all the extensions we could find in benchmarks and games (NVidia, ATI, ARB, …). • Check correction of traces. • Add on the fly compresion (zlib). • A list of functions can be obtained from 3D-Analyzer dat2.001 export list. • Create a trace player: GLplay. • Help to check the traces. • Visualize what we are simulating using other implementations (MESA, NVidia, ATI).
DirectX Traces • There is a different interface/library for each DX version: • DX7: ignore? • DX8: d3d8.dll. • DX9: d3d9.dll. • DX is based in classes, not in functions like OpenGL: less entry point functions.
DirectX Traces • d3d8.dll exports: • DebugSetMute(); • Direct3DCreate8(); ------------- • ValidatePixelShader(); • ValidateVertexShader(); • Direct3DCreate8() returns a IDirect3D8 object which is used to create a IDirect3DDevice8 object which is used to draw the scene.
DirectX Traces • d3d9.dll exports: • DebugSetLevel() • DebugSetMute() • Direct3DCreate9() --------- • Direct3DShaderValidatorCreate9() • PSGPError() • PSGPSampleTexture() • Same as DX8. Direct3DCreate9() creates a IDirect3D8 object which can be used to create a IDirect3DDevice9 where the scene can be drawn.
DirectX Traces • D3D8 Interfaces (classes): • IDirect3D8 • IDirect3DBaseTexture8 • IDirect3DCubeTexture8 • IDirect3DDevice8 • IDirect3DIndexBuffer8 • IDirect3DResource8 • IDirect3DSurface8 • IDirect3DSwapChain8 • IDirect3DTexture8 • IDirect3DVertexBuffer8 • IDirect3DVolume8 • IDirect3DVolumeTexture8
DirectX Traces • D3D9 Interfaces: • IDirect3D9 • IDirect3DBaseTexture9 • IDirect3DCubeTexture9 • IDirect3DDevice9 • IDirect3DIndexBuffer9 • IDirect3DPixelShader9 • IDirect3DQuery9 • IDirect3DResource9 • IDirect3DStateBlock9 • IDirect3DSurface9 • IDirect3DSwapChain9 • IDirect3DTexture9 • IDirect3DVertexBuffer9 • IDirect3DVertexDeclaration9 • IDirect3DVertexShader9 • IDirect3DVolume9 • IDirect3DVolumeTexture9
DirectX Traces • D3D8 functions: • A list can be obtained from 3D-Analyzer dat1.001 export list. • D3D9 functions: • A list can be obtained from 3D-Analyzer dat3.001 export list.
DirectX Traces • Implementation: • DLL wrapper. • Support for multiple DX versions: multiple DLLs and interfaces (d3d8.dll, d3d9.dll). • Trace format: • Text. • Binary. • Compressed. • D3DPlayer: • Reproduce the trace: verification, visualization.
DirectX Traces • Alternatives: • 3D-Analyzer: theorically can generate traces from both OpenGL, DX8 and DX9, but I couldn’t make it work. • DXSpy: tool from DX9 SDK. Uses d3d9spy.dll (must be renamed) to trace all DX9 function calls. Can be used to check on fly DX state, function calls, use the debugger, add break points, etc. It doesn’t seems to have the option to log to a file that information though.
Proxy CPU • (alternative names are accepted). • This box would read the OpenGL or DX traces and act as the GPU driver and CPU side of the graphic pipeline. • Would control the AGP port input/output. • Would control external (system) memory. • Would translate from DX/OpenGL to the commands used by our GPU. • Would control the timing of the commands issued to the GPU.
Command Processor • Receives commands and data through the AGP port (?). • Signals: AGPRead, AGPWrite? • Receives commands (the same for DX or OpenGL traces) from the Proxy CPU box. • Controls the GPU. • Sends data and commands to the different GPU units: Vertex, Primitive, Rasterization, Fragment, etc.
News and Rumors • Nvidia (rumors): • NV31: 4x1, 325/275 • NV34: 4x1 (?), no VS (?), 250/200 and 250/166. • ATI: • R350: 380 MHz 340 MHz DDR, 115 MTransistors, 0.15 process, 8x1, 4 vs, F-Buffer. • RV350: 2 vertex shader, 4 pixel shaders, 1 TMU per pipe, 0.13 process. R9600 325/200, R9600 PRO 400/600. • GDC’03 from March 5th.
F-Buffer • SIGGRAPH/EuroGraphics Graphics Hardware Workshop 2001. • The F-Buffer: A Rasterization-Order FIFO Buffer for Multi-Pass Rendering. • William R. Mark and Kekoa ProudFoot. • Stanford University.
F-Buffer • Hardware alternative to multipass. • Fragment stream buffer. • The F-Buffer is a memory pool the size of the framebuffer (pixels). • A fragment can write to the F-Buffer its output rather than to the framebuffer. • Fragments are stored and retrieved in FIFO order. • Fragments in the F-Buffer are feed to the fragment pipeline.
F-Buffer • Replaces software multipass rendering for hardware virtualization (geometry must be transformed with each pass). • Enables unlimited length pixel shaders. • Multiple intermediate values supported. • Helps with semitransparent pixels (alpha textures).
Imagine • ‘Computer Graphics on a Stream Architecture’, John Douglas Owens, PhD dissertation. • Not read yet either.