Drawing Fast The Graphics Pipeline

Similar documents
Drawing Fast The Graphics Pipeline

Drawing Fast The Graphics Pipeline

3D Drawing Visibility & Rasterization. CS559 Spring 2016 Lecture 9 February 23, 2016

Rasterization and Graphics Hardware. Not just about fancy 3D! Rendering/Rasterization. The simplest case: Points. When do we care?

WebGL and GLSL Basics. CS559 Fall 2016 Lecture 14 October

WebGL and GLSL Basics. CS559 Fall 2015 Lecture 10 October 6, 2015

Drawing in 3D (viewing, projection, and the rest of the pipeline)

CS4620/5620: Lecture 14 Pipeline

CSE 167: Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

Drawing in 3D (viewing, projection, and the rest of the pipeline)

Rendering. Converting a 3D scene to a 2D image. Camera. Light. Rendering. View Plane

Drawing in 3D (viewing, projection, and the rest of the pipeline)

CS452/552; EE465/505. Clipping & Scan Conversion

Pipeline Operations. CS 4620 Lecture 10

Topic #1: Rasterization (Scan Conversion)

Triangle Rasterization

Shadows in the graphics pipeline

CSE 167: Introduction to Computer Graphics Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2015

Realtime 3D Computer Graphics Virtual Reality

Hidden surface removal. Computer Graphics

CS 498 VR. Lecture 18-4/4/18. go.illinois.edu/vrlect18

Visibility: Z Buffering

POWERVR MBX. Technology Overview

The Rasterization Pipeline

Getting fancy with texture mapping (Part 2) CS559 Spring Apr 2017

OpenGL: Open Graphics Library. Introduction to OpenGL Part II. How do I render a geometric primitive? What is OpenGL

C P S C 314 S H A D E R S, O P E N G L, & J S RENDERING PIPELINE. Mikhail Bessmeltsev

Rasterization. CS 4620 Lecture Kavita Bala w/ prior instructor Steve Marschner. Cornell CS4620 Fall 2015 Lecture 16

Real-Time Rendering (Echtzeitgraphik) Michael Wimmer

RSX Best Practices. Mark Cerny, Cerny Games David Simpson, Naughty Dog Jon Olick, Naughty Dog

Hidden Surfaces II. Week 9, Mon Mar 15

EECE 478. Learning Objectives. Learning Objectives. Rasterization & Scenes. Rasterization. Compositing

Rasterization. CS4620 Lecture 13

Pipeline Operations. CS 4620 Lecture 14

Spring 2009 Prof. Hyesoon Kim

Real-Time Graphics Architecture

The Graphics Pipeline

Hardware-driven visibility culling

Pipeline Operations. CS 4620 Lecture Steve Marschner. Cornell CS4620 Spring 2018 Lecture 11

Intro to OpenGL II. Don Fussell Computer Science Department The University of Texas at Austin

0. Introduction: What is Computer Graphics? 1. Basics of scan conversion (line drawing) 2. Representing 2D curves

- Rasterization. Geometry. Scan Conversion. Rasterization

Clipping and Scan Conversion

Rasterization Overview

CS130 : Computer Graphics Lecture 2: Graphics Pipeline. Tamar Shinar Computer Science & Engineering UC Riverside

The graphics pipeline. Pipeline and Rasterization. Primitives. Pipeline

The Traditional Graphics Pipeline

Rendering approaches. 1.image-oriented. 2.object-oriented. foreach pixel... 3D rendering pipeline. foreach object...

Game Architecture. 2/19/16: Rasterization

FROM VERTICES TO FRAGMENTS. Lecture 5 Comp3080 Computer Graphics HKBU

CS559: Computer Graphics. Lecture 12: Antialiasing & Visibility Li Zhang Spring 2008

1.2.3 The Graphics Hardware Pipeline

Spring 2011 Prof. Hyesoon Kim

Overview. Pipeline implementation I. Overview. Required Tasks. Preliminaries Clipping. Hidden Surface removal

The Traditional Graphics Pipeline

The Traditional Graphics Pipeline

Surface shading: lights and rasterization. Computer Graphics CSE 167 Lecture 6

CS 130 Final. Fall 2015

Pipeline and Rasterization. COMP770 Fall 2011

Optimizing DirectX Graphics. Richard Huddy European Developer Relations Manager

Could you make the XNA functions yourself?

CS230 : Computer Graphics Lecture 4. Tamar Shinar Computer Science & Engineering UC Riverside

CS 464 Review. Review of Computer Graphics for Final Exam

Culling. Computer Graphics CSE 167 Lecture 12

Scanline Rendering 2 1/42

PowerVR Hardware. Architecture Overview for Developers

Lecture 2. Shaders, GLSL and GPGPU

Real-Time Graphics Architecture

Course Recap + 3D Graphics on Mobile GPUs

Graphics Hardware and Display Devices

Wed, October 12, 2011

Grafica Computazionale: Lezione 30. Grafica Computazionale. Hiding complexity... ;) Introduction to OpenGL. lezione30 Introduction to OpenGL

Topics and things to know about them:

CS GPU and GPGPU Programming Lecture 2: Introduction; GPU Architecture 1. Markus Hadwiger, KAUST

PowerVR Performance Recommendations The Golden Rules. October 2015

Last Time. Why are Shadows Important? Today. Graphics Pipeline. Clipping. Rasterization. Why are Shadows Important?

2D rendering takes a photo of the 2D scene with a virtual camera that selects an axis aligned rectangle from the scene. The photograph is placed into

Project 1, 467. (Note: This is not a graphics class. It is ok if your rendering has some flaws, like those gaps in the teapot image above ;-)

Parallel Triangle Rendering on a Modern GPU

CS451Real-time Rendering Pipeline

E.Order of Operations

Computer Graphics. Bing-Yu Chen National Taiwan University

Real-Time Shadows. Last Time? Textures can Alias. Schedule. Questions? Quiz 1: Tuesday October 26 th, in class (1 week from today!

VISIBILITY & CULLING. Don t draw what you can t see. Thomas Larsson, Afshin Ameri DVA338, Spring 2018, MDH

For Intuition about Scene Lighting. Today. Limitations of Planar Shadows. Cast Shadows on Planar Surfaces. Shadow/View Duality.

CSE 167: Introduction to Computer Graphics Lecture #10: View Frustum Culling

Einführung in Visual Computing

Rasterization. COMP 575/770 Spring 2013

Class of Algorithms. Visible Surface Determination. Back Face Culling Test. Back Face Culling: Object Space v. Back Face Culling: Object Space.

Tutorial on GPU Programming #2. Joong-Youn Lee Supercomputing Center, KISTI

Practical Texturing (WebGL) CS559 Fall 2016 Lecture 20 November 7th 2016

Rasterization. CS4620/5620: Lecture 12. Announcements. Turn in HW 1. PPA 1 out. Friday lecture. History of graphics PPA 1 in 4621.

For example, could you make the XNA func8ons yourself?

Computer Graphics. Lecture 9 Hidden Surface Removal. Taku Komura

Clipping & Culling. Lecture 11 Spring Trivial Rejection Outcode Clipping Plane-at-a-time Clipping Backface Culling

CS770/870 Fall 2015 Advanced GLSL

Next-Generation Graphics on Larrabee. Tim Foley Intel Corp

Line Drawing. Introduction to Computer Graphics Torsten Möller / Mike Phillips. Machiraju/Zhang/Möller

Transcription:

Drawing Fast The Graphics Pipeline CS559 Spring 2016 Lecture 10 February 25, 2016

1. Put a 3D primitive in the World Modeling Get triangles 2. Figure out what color it should be Do ligh/ng 3. Position relative to the Eye Viewing / Camera View Transformation transform 4. Get rid of stuff behind you/offscreen Clipping Don t worry 5. Figure out where it goes on screen Projection (sometimes Projec/on called Transform Viewing) 6. Figure out if something else blocks it Visibility / Occlusion Z- Buffer 7. Draw the 2D primitive Rasterization (convert Let library to s) do it

Rasterization Figure out which pixels a primitive covers Turns primitives into pixels

Rasterization Let the low-level library take care of it Let the hardware take care of it Writing it in software is different than hardware Writing it today (with cheap floating point) is different than a few years ago

Rasterization Input: primitive (in screen coords) Output list of pixels covered

What primitives Points Lines Triangles Generally build other things from those Approximate curves

Rasterizing Points Easy! 1 pixel and we know where Issues: What if we want different sizes? (points smaller than a pixel?) Discretization? (pixels are an integer grid)

Welcome to the world of Aliasing The real world is (effectively) continuous Our models are continuous Our displays are discrete This is a deep problem we ll come back

Do I care about Aliasing? Jaggies Crawlies Things not moving smoothly Can t make small things Can t put things where you want Errors add up to weird patterns (or, simply, Yes)

Preview: Dealing with Aliasing Little Square Model Not preferred Simpler to start

Preview: Dealing with Aliasing Simple Drawing Pick the: Nearest pixel (center) Fill the pixel

Preview: Dealing with Aliasing Simple Drawing Pick the: Nearest pixel (center) (cover multiple pixels) Fill the pixel

Preview: Dealing with Aliasing Simple Drawing Pick the: Nearest pixel (center) (cover multiple pixels) Fill the pixel (partially fill pixel)

Dealing with Aliasing? Simple: Aliased (jaggies, ) Crisp Anti-Aliased: Less aliased Blurry

Other Anti-Aliasing Issues Z-Buffer is a binary choice Partially filling can be a problem Depends on lots of other stuff Really elegant math! Good theory!

Lines Historical: Vector graphics hardware Simulate with new pixel-based (CRT) Brezenham s Algorithm (1960s) Integer only line drawing No divisions

Today? Floating point is cheap Division isn t too expensive Make lines into degenerate triangles

Triangles (Polygons) The really important primitive Determine which pixels are covered Also do interpolation (UV, color, W, depth) Scan conversion Generically used as a term for rasterization An old algorithm that isn t used by hardware Not to be confused with Scanline rendering Related, but deals with whole scenes

Scan Conversion Algorithm Idea: Scan top to bottom walk edges (active edge list) Scan left to right Active Edges (for this scanline) Brezenham s Alg (or equiv) to get begin/end Change active list at vertex

Scan-Conversion Cool Simple operations, very simple inner loops Works for arbitrary polygons (active list management tough) No floating point (except for interpolation of values) Downsides Very serial (pixel at a time) / can t parallelize Inner loop bottle neck if lots of computation per pixel

How does the hardware do it? (or did it last I learned about it) Find a box around the triangle For each pixel in the box compute the barycentric coordinates check if they are inside the triangle Do pixels in parallel (in hardware) otherwise, really wasteful Barycentric coordinates are useful

Barycentric Coordinates Any point in the plane is a convex combination of the vertices of the triangle P=αA+βB+ɣC α+ β + ɣ = 1 A Inside triangle 0 <= α, β, ɣ <= 1 C P B

Linear Interpolation A B 0 1 1A+0B ½ A+ ½ B 0A+1B Interpolative coordinate (t) 0<= t <= 1 then in line segment

Dealing with Aliasing? Simple: Aliased (jaggies, ) Crisp Anti-Aliased: Less aliased Blurry

Lines

Triangles

Hardware Rasterization For each point: Compute barycentric coords Decide if in or out

Linear Interpolation P = (1-t) A + t B (t is the coord) A B 0 1 1.5 1A+0B ½ A+ ½ B 0A+1B - ½ A+1½B Interpolative coordinate (t) P = (1-t) A + t B 0<= t <= 1 then in line segment

Barycentric Coordinates Any point in the plane is a convex combination of the vertices of the triangle P=αA+βB+ɣC α+ β + ɣ = 1 A Inside triangle 0 <= α, β, ɣ <= 1 C P B

Barycentric Coords are Useful! Every point in plane has a coordinate (α β ɣ) such that: α+ β + ɣ = 1 Easy test inside the triangle 0 <= α, β, ɣ <= 1 Interpolate values across triangles x p = α x 1 + β x 2 + ɣ x 3 c p = α c 1 + β c 2 + ɣ c 3

Hardware Rasterization For each point: Compute barycentric coords Decide if in or out.7,.7, -.4 1.1, 0, -.1.9,.05,.05.33,.33,.33

Wasteful? Can do all points in parallel We want the coordinates (coming soon) Does the right things for touching triangles Each point in 1 triangle

Hardware Rasterization Each center point in one triangle If we choose consistently for on-the-edge cases Over simplified version: 0 <= a,b,c < 1

Note Triangles are independent Even in rasterization (they are independent throughout process)

The steps of 3D graphics Model objects (make triangles) Transform (find point positions) Shade (lighting per tri / vertex) Transform (projection) Rasterize (figure out pixels) Shade (per-pixel coloring) Write pixels (with Z-Buffer test)

A Pipeline Triangles are independent Vertices are independent s (within triangles) are independent (caveats about sharing for efficiency) Don t need to finish 1 before start 2 (might want to preserve finishing order)

Pipelining in conventional processors Start step 2 before step 1 completes Unless step 2 depends on step 1 Pipe Stall C = A * B C = A * B F = D * E J = G * H C= A*B F= D*E J= G*H F = D * C J = G * H C= A*B F= D*C J= G*H

Triangles are independent! No stalls! (no complexity of handling stalls) Start step 2 before step 1 completes Unless step 2 depends on step 1 Pipe Stall C = A * B C = A * B F = D * E J = G * H C= A*B F= D*E H= G*H F = D * C J = G * H C= A*B C= D*C J= G*H

A Pipeline 1 transf light project raster shade write

A Pipeline 1 transf light project raster shade write 2 transf light project raster shade write 3 transf light project raster shade write

Vertices are independent Parallelize! 1 transf transf proj transf transf light project raster shade write transf transf proj

Parallelization operations split triangles / re-assemble compute per-vertex not per-triangle (fragment) operations lots of potential parallelism less predictable Use queues and caches

Why do we care? This is why the hardware can be fast It requires a specific model Hardware implements this model The programming interface is designed for this model. You need to understand it.

Some History Custom Hardware (pre-1980) rare, each different Workstation Hardware (early 80s-early 90s) increasing features, common methods Consumer Graphics Hardware (mid 90s-) cheap, eventually feature complete Programmable Graphics Hardware (2002-)

Graphics Workstations 1982-199X Implemented graphics in hardware Providing a common abstraction set Fixed function it was built into the hardware

Silicon Graphics (SGI) Stanford Research Project 1980 Spun-off to SGI (company) 1982 The Geometry Engine 4x4 matrix mutiply chip approximate division Raster engine (Z-buffer)

1988: The Personal Iris

The 4D-2X0 series 4 processors (240) Different graphics 1988 GT/GTX 1990 - VGX

Why do you care? It s the first time the abstractions were right later stuff adds to it It s where the programming model is from it was IrisGL before OpenGL It s the pipeline at it s essense we ll add to it, not take away

The Abstractions Points / Lines / Triangles Vertices in 4D Color in 4D (RGBA = transparency) Per- transform (4x4 + divide by w) Per- lighting Color interpolation Fill Triangle Z-test (and other tests) Double buffer (and other buffers)

What s left to add? All of this was in software in the 80s 1990 texture 1992 multi-texture (don t really need) 1998 (2000) programmable shading 2002 programmable pipelines 2005 more programmability

Applica/on Program The pipeline (2006-current) Graphics Driver Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program The pipeline (1988) Graphics Driver Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program The full fixed-function pipeline (1992) Graphics Driver Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program Graphics Driver The parts you have to program 1988-2014 Now (in addition to above) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

A Triangle s Journey

Things to observe as we travel through the pipeline What does each stage do? What are its inputs and output? important for programmability Why would it be a bottleneck? and what could we do to avoid it

Applica/on Program The pipeline (1988) (no texturing) Graphics Driver Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program Graphics Driver Start here Setup modes (window, ) Setup transform, lights Draw a triangle Posi/on, color, normal Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Drawing a triangle Modes per triangle which window, how to fill, use z-buffer, Data per-vertex position normal color other things (texture coords)

Per? Modes per triangle which window, how to fill, use z-buffer, Data per-vertex position normal ß allow us to make non-flat color ß allows us to interpolate other things (texture coords)

Per- not Per-Triangle Allows sharing vertices between triangles Or make all the vertices the same (color, normal, ) to get truly flat

Applica/on Program Graphics Driver Triangle V1: (x1,y1,z1), (r1,g1,b1),(nx1,ny1,nz1) V2: (x2,y2,z2), (r2,g2,b2),(nx2,ny2,nz2) V3: (x3,y3,z3), (r3,g3,b3),(nx3,ny3,nz3) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program Graphics Driver Triangle V1: (x1,y1,z1), (r1,g1,b1),(nx1,ny1,nz1) V2: (x2,y2,z2), (r2,g2,b2),(nx2,ny2,nz2) V3: (x3,y3,z3), (r3,g3,b3),(nx3,ny3,nz3) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Is this a poten/al bogleneck? Applica/on Program Graphics Driver Func/on calls to the driver 3 ver/ces + triangle + Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Old style OpenGL begin(triangle); c3f(r1,g1,b1); n3f(nx1,ny1,nz1); v3f(x1,y1,z1); c3f(r2,g2,b2); n3f(nx2,ny2,nz2); v3f(x2,y2,z2); c3f(r3,g3,b3); n3f(nx3,ny3,nz3); v3f(x3,y3,z3); end(triangle); 11 func/on calls 35 arguments pushed Old days: This is a lot less than the number of pixels! Nowadays: Just the memory access swamps the process

Coming Soon Block transfers of data Data for lots of triangles moved as a block Try to draw groups of triangles

Applica/on Program Graphics Driver Triangle V1: (x1,y1,z1), (r1,g1,b1),(nx1,ny1,nz1) V2: (x2,y2,z2), (r2,g2,b2),(nx2,ny2,nz2) V3: (x3,y3,z3), (r3,g3,b3),(nx3,ny3,nz3) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program Graphics Driver Split up triangles into ver*ces V1: (x1,y1,z1), (r1,g1,b1),(nx1,ny1,nz1) V2: (x2,y2,z2), (r2,g2,b2),(nx2,ny2,nz2) V3: (x3,y3,z3), (r3,g3,b3),(nx3,ny3,nz3) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program Graphics Driver Buffer / the ver*ces V1: (x1,y1,z1), (r1,g1,b1),(nx1,ny1,nz1) V2: (x2,y2,z2), (r2,g2,b2),(nx2,ny2,nz2) V3: (x3,y3,z3), (r3,g3,b3),(nx3,ny3,nz3) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Buffering Vertices Old Days: processing expensive Try to maximize re-use Process once an use for many triangles Nowadays Getting vertex to hardware is expensive Process vertices in parallel

Applica/on Program Graphics Driver Buffer / the ver*ces V1: (x1,y1,z1), (r1,g1,b1),(nx1,ny1,nz1) V2: (x2,y2,z2), (r2,g2,b2),(nx2,ny2,nz2) V3: (x3,y3,z3), (r3,g3,b3),(nx3,ny3,nz3) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Process each vertex independently Applica/on Program Graphics Driver Transform compute x and n Clip Light compute c Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program in à out In: x, n, c Out: x, n, c, x, n, c Graphics Driver Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Just adds information to vertices Computes transformation screen space positons, normals Computes lighting new colors (in the old days, clipping done here hence TCL)

: Each vertex is independent Inputs are: vertex information for this vertex any global information current transform, lighting, Outputs are: vertex information for this vertex

Applica/on Program Looking ahead When we program this pipeline piece It will s/ll be: in à out Graphics Driver Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Store processed ver/ces in a cache Applica/on Program Graphics Driver Store several so that we can re- use if many triangles share a vertex Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Caching Old days: Big deal, important for performance Now: Not even sure that it s always done

Put triangles back together Applica/on Program Graphics Driver This is one of the few places where triangles exist Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program In the fixed- func/on pipeline, there is no triangle processing step (maybe clipping) Graphics Driver Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program Graphics Driver Rasterizer: Convert triangles to a list of pixels Input: Triangle with values (x,c, ) Output: s with values (x, c, ) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

s or Fragments I am using the terms interchangably (actually, today I am using pixel) Technically = a dot on the screen Fragment = a dot on a triangle might not become a pixel (fails z-test) might only be part of a pixel

Where do pixel values come from? Each vertex has values Each pixel comes from 3 vertices s interpolate their vertices values Barycentric interpolation All values (in a pixel) are interpolated

Each triangle is separate Careful processing of edges so no cracks 1 triangle à many pixels

Applica/on Program Graphics Driver Rasterizer: Convert triangles to a list of pixels Input: Triangle Output: s per- vertex info*3 interpolated info Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Each triangle can make lots of pixels Applica/on Program Graphics Driver We need to process pixels in parallel (all of the remaining steps) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Process each pixel to get its final values Applica/on Program Usually color, but some/mes Z Graphics Driver This step is a no- op in the 1988 pipeline Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

in à out, each independent Applica/on Program Graphics Driver All we do is change its values (poten/ally re- compute) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Coming agrac/ons Applica/on Program This step will get to be pregy exci/ng Graphics Driver Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Ground Rules s are independent in à out Changing its position (x,y) makes it a different pixel (so you can t) Can change other values Or reject

Coming agrac/ons Applica/on Program This step will get to be pregy exci/ng Graphics Driver Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Applica/on Program Graphics Driver Consider the pixel and it s des/na/on Z- buffer (is it in front?) Alpha / color / stencil - tests Color blending Then (and only then) can we write Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

Each pixel requires a read/write cycle Applica/on Program Graphics Driver Poten/al memory bandwidth bogleneck (cache writes) There are worse memory boglenecks Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

We ve made it! Applica/on Program Graphics Driver Now the frame buffer gets sent to the screen. (at the appropriate /me) Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer

What if we didn t make it Suppose the triangle s pixels are occluded Removed by the z-buffer

Normal Z- Test Applica/on Program Graphics Driver Happens at the end We wasted all that work! Command Buffer (Triangle ) (TCL) Cache Assembly Triangle Rasterize Tests shading Geometry Texture Memory Render to texture Frame Buffer