320 likes | 438 Views
GPGP - Background Lecture. Graphics Pipelines, OpenGL, Fragment Programs, First GPGP Programs. Purpose. Give sufficient background to non-graphics students to program a simple GPGP program Attempted to minimize any assumptions prior knowledge of Graphics. My Background in GPGP.
E N D
GPGP - Background Lecture Graphics Pipelines, OpenGL, Fragment Programs, First GPGP Programs The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Purpose • Give sufficient background to non-graphics students to program a simple GPGP program • Attempted to minimize any assumptions prior knowledge of Graphics The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
My Background in GPGP • 06/2003 - Worked with Bill Baxter on paint work using GPU to transform volume representation of paint to RGB • 01/2004 - Worked with Brandon Lloyd on shadow work • Didn’t touch GPU work, but understood what it did • 09/2005 - Taught COMP136 and we talked about GPU • 10/2006 - Wrote a simple program to remove radial distortion from images in real time • 01/2007 - Prepared for this lecture The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Overview • Raster Graphics • Where did this start? • Graphics Pipeline • What’s the hardware like? • OpenGL • How to talk to the hardware? • GPU Programming • How to make it do something non-standard? • A First GPGP Program • Hello World! The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Raster Graphics --“Utah” Rendering • 1960s-1970s The University of Utah led raster graphics research • Ivan Sutherland • How do we convert mathematical representations of objects into images on the screen? • Conversion of continuous to discrete • Solution of light-surface-eye interactions The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Object Representations • MANY continuous representations exist for objects • Planar polygons, quadrics, splines, M-Reps, general equations … • Discrete representations are sparser • Generally some interpretation of an array of numbers The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
The Winner! • In modern raster graphics, the triangle is king • It is the simplest continuous representation that can approximate all other surface-types • All other continuous representations must be triangulated before being rasterized • Unless GPGP is used! The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Rasterization Terms • Tessellate - convert some other continuous representation to planar polygons • Triangulate - converting some other continuous representation to triangles • Vertex - a point in some nD space • Rasterize - convert a triangle* to fragments • Fragment - a potential pixel** The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
“Utah” Graphics Pipeline • Obtain triangulation of model • Affine Transforms • Projective Transforms • Clip to viewable region • Rasterize The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Overview • Raster Graphics • Where did this start? • Graphics Pipeline • What’s the hardware like? • OpenGL • How to talk to the hardware? • GPU Programming • How to make it do something non-standard? • A First GPGP Program • Hello World! The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Why Specialty Hardware? • CPU can do all Turing complete operations The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Earliest Commodity Hardware Vertex Transformation • State of pipeline initialized • Vertices come down the pipe • Framebuffer and depth buffer set by the end Clipping Rasterization Fragment Operations Visibility The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Cutting-edge Commodity Hardware Vertex Transformation • Okay, not much changed • Orange denotes programmability • Power of standard set of settings increased • Output can go to any/many buffers Clipping Rasterization Fragment Operations Visibility The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Overview • Raster Graphics • Where did this start? • Graphics Pipeline • What’s the hardware like? • OpenGL • How to talk to the hardware? • GPU Programming • How to make it do something non-standard? • A First GPGP Program • Hello World! The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Talking to the GPU • Two parts: • STATE: The majority of OpenGL calls modify the state machine • INPUT: Vertices • Three vertices make a triangle • Once a triangle is complete, the GPU runs with it The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
OpenGL Overview • Most of the features in OpenGL will probably never be used in this class • For the majority of GPGP work, you render a quad (two triangles) that fills the screen on a one-input-texture-to-one-output-pixel basis The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Note on OpenGL • Although OpenGL calls are supported by nVIDIA or ATi drivers, some windowing system must be used • Native to OS - a pain • GLUT - quick, easy, small, has some issues with the “nicities of coding” • Almost all windowing toolkits support OpenGL • FLTK, Qt, WxWindows, etc. The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Let’s go to the code • All code is available at http://www.cs.unc.edu/~jwendt/classes/GPGPLecture The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
OpenGL Gnitty-Gritties • Three more important OpenGL features • Multi-pass rendering • Read-backs • Extensions The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Overview • Raster Graphics • Where did this start? • Graphics Pipeline • What’s the hardware like? • OpenGL • How to talk to the hardware? • GPU Programming • How to make it do something non-standard? • A First GPGP Program • Hello World! The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
History of Commodity GPU Programming • Pre-1999 - Basic rasterizers • Some texture combination ability • Vertex transformation occurs on CPU • 1999-2000 - Slightly configurable • Cube maps, signed math ops • Vertex transforms added to GPU • 2001 - Vertex programmability • 2002-present - Vertex/fragment programmability The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
History of GPU non-Commodity Programmability • mid-1990’s - UNC PixelFlow • later-1990’s - Stanford RTSL The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
GPU Programming Languages • Assembly language • Cg and HLSL • GLSL The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Types of GPU Programs • Vertex Programs • Required Outputs: Vertex position and Vertex color • Optional Outputs: Hardware/language dependant maximum number of output values • Fragment Programs • Required Outputs: RGBA color • Optional Outputs: Writing to multiple sources The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Communicating with GPU Programs • There are two ways of sending information to GPU Programs: • Explicitly setting parameters using specified function calls • Sending down standard values by setting OpenGL state The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
For More Info • Tutorials, sample code, etc. • Go to www.gpgpu.org/developer • Cg Tutorial • Amazon: http://www.amazon.com/Cg-Tutorial-Definitive-Programmable-Real-Time/dp/0321194969 • GLSL (Orange Book) • Amazon: http://www.amazon.com/OpenGL-Shading-Language-2nd/dp/0321334892/sr=1-1/qid=1169220867/ref=pd_bbs_1/102-4102099-2237769?ie=UTF8&s=books The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Overview • Raster Graphics • Where did this start? • Graphics Pipeline • What’s the hardware like? • OpenGL • How to talk to the hardware? • GPU Programming • How to make it do something non-standard? • A First GPGP Program • Hello World! The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Let’s go to the code • Borrowed heavily from gpgpu.org/developer • All code is available at http://www.cs.unc.edu/~jwendt/classes/GPGPLecture The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Notes • No Vertex program! … no use for one. • The framebuffer-to-texture transfers we were doing are slow • Use the framebuffer object class available from GPGPU.org/developer • GLEW is downloadable from glew.sourceforge.net/ • We only passed one parameter down in this example The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Reading the Data Back to the CPU • See function SnapShot at the bottom of the last file The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Debugging • IMDebug by Bill Baxter: • http://www.billbaxter.com/projects/imdebug/index.html The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007
Questions? The University of North Carolina - Chapel Hill COMP 790-058 Spring 2007