1 dr. scott schaefer programmable shaders. 2/30 graphics cards performance nvidia geforce 6800 gtx 1...

30
1 Dr. Scott Schaefer Programmable Shaders

Upload: lawrence-heath

Post on 13-Jan-2016

235 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

1

Dr. Scott Schaefer

Programmable Shaders

Page 2: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

2/30

Graphics Cards Performance

Nvidia Geforce 6800 GTX1

6.4 billion pixels/sec Nvidia Geforce 7900 GTX2

15.6 billion pixels/sec Xbox 3603

16 billion pixels/sec (4X AA) Nvidia Geforce 8800 GTX4

36.8 billion pixels/sec Nvidia Geforce GTX 2955

92.2 billion pixels/sec

1: http://www.nvidia.com/page/geforce_6800.html2: http://www.nvidia.com/page/geforce_7900.html3: http://news.com.com/Xbox+specs+revealed/2100-1043_3-5705372.html 4: http://www.nvidia.com/page/geforce_8800.html5: http://www.nvidia.com/object/geforce_gtx_295.html

Page 3: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

3/30

Parallel Processing Power

Nvidia Geforce GTX 780 Ti2880 programmable processors

875 MHz each336 GB/s memory bandwidth3 GB memory

http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-780-ti/specifications

Page 4: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

Parallel Processing Power

IBM’s ASCI White, 4.9 TFLOPS Fastest Computer in the World 2000

AMD’s Radeon HD 7990 4096 processors, 8.2 TFLOPS

4/30

Page 5: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

5/30

Graphics PipelineVertices

Page 6: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

6/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Page 7: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

7/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Transformed Vertices

Page 8: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

8/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Viewport Transformation

Transformed Vertices

Page 9: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

9/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Viewport Transformation

Triangle Setup

Transformed Vertices

Vertex Index Stream

Page 10: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

10/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Backface Culling

Viewport Transformation

Triangle Setup

Transformed Vertices

Vertex Index Stream

Page 11: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

11/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Backface Culling

Clipping

Viewport Transformation

Triangle Setup

Transformed Vertices

Vertex Index Stream

Page 12: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

12/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Backface Culling

Clipping

Viewport Transformation

Triangle Setup

Interpolation/Rasterization

Transformed Vertices

Vertex Index Stream

Page 13: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

13/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Backface Culling

Clipping

Viewport Transformation

Triangle Setup

Interpolation/Rasterization

Transformed Vertices

Pixel Location/Color/Depth

Vertex Index Stream

Page 14: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

14/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Backface Culling

Clipping

Viewport Transformation

Triangle Setup

Interpolation/Rasterization

Visibility Determination

Transformed Vertices

Pixel Location/Color/Depth

Vertex Index Stream

Page 15: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

15/30

Graphics PipelineVertices

Vertex

Transformation/Lighting

Backface Culling

Clipping

Viewport Transformation

Triangle Setup

Interpolation/Rasterization

Visibility Determination

Frame Buffer

Transformed Vertices

Pixel Location/Color/Depth

Vertex Index Stream

Page 16: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

16/30

Programmable Graphics PipelineVertices

Vertex Shader

Backface Culling

Clipping

Viewport Transformation

Triangle Setup

Interpolation/Rasterization

Visibility Determination

Frame Buffer

Transformed Vertices/

Normals/Texture coords/…

Pixel Location

Vertex Index Stream

Pixel Shader

Color/Depth

Interpolated

Vertex Data

Page 17: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

17/30

Shader Programming

Many different languages Assembly OpenGL Shading Language Nvidia’s CG Microsoft’s HLSL

Different capabilities based on shader model Register count Instructions Maximum number of instructions

Page 18: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

18/30

Vertex Shaders

Input: anything associated with verticesPosition, normal, texture coordinates,

etc… Output: transformed vertices

MUST output positionCan produce color, normal, texture

coordinates, etc…

Page 19: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

19/30

Vertex Shaders

// vertex shader output structure

struct VS_OUTPUT

{

float4 Pos : POSITION;

};

Page 20: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

20/30

Vertex Shaders

VS_OUTPUT VS( float3 InPos : POSITION // Vertex position in model space ) { VS_OUTPUT Out = (VS_OUTPUT)0; // transform the position float3 transformedPos = mul(float4(InPos, 1), (float4x3)World); Out.Pos = mul(float4(transformedPos,1), ViewProjection);

return Out;}

Page 21: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

21/30

Pixel Shaders

Input: Vertex data produced from vertex shader

Output:MUST output colorCan output depth as wellCannot change location of pixel on screen

Page 22: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

22/30

Pixel Shaders

float4 PS ( VS_OUTPUT In ) : COLOR

{

// may perform texture lookup, depth effects, fog, etc…

return float4 ( 1, 1, 1, 1 );

}

Page 23: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

23/30

Gouraud Shading Example

// vertex shader output structure

struct VS_OUTPUT

{

float4 Pos : POSITION;

float4 Color : COLOR;

};

Page 24: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

24/30

Gouraud Shading Example

VS_OUTPUT VS( float3 InPos : POSITION, // Vertex position in model space float3 InNormal : NORMAL // Vertex normal in model space ) { VS_OUTPUT Out = (VS_OUTPUT)0; // transform the position and normal float3 transformedPos = mul(float4(InPos, 1), (float4x3)World); Out.Pos = mul(float4(transformedPos,1), ViewProjection);

float3 transNormal = mul(InNormal, (float3x3)World); // normal (view space)

Out.Color = float4 ( calcColor ( normalize ( lightPos – transformedPos ), transNormal, normalize ( eyePos – transformedPos ) ), 1 );

return Out;}

Page 25: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

25/30

Gouraud Shading Example

float3 calcColor ( float3 lightVec, float3 normal, float3 eyeToVertex )

{

float3 color = 0;

color += lightColor * MaterialAmbient;

color += lightColor * MaterialDiffuse * max ( 0, dot ( normal, lightVec ) );

float3 R = normalize ( reflect ( lightVec, normal ) );

color += lightColor * MaterialSpecular * pow ( max ( 0, dot ( R,

eyeToVertex ) ), MaterialSpecularPower );

return color;

}

Page 26: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

26/30

Gouraud Shading Example

float4 PS ( VS_OUTPUT In ) : COLOR

{

return In.Color;

}

Page 27: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

27/30

Phong Shading Example

// vertex shader output structure

struct VS_OUTPUT

{

float4 Pos : POSITION;

float3 Normal : TEXCOORD0;

float3 TransformedPos : TEXCOORD1;

};

Page 28: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

28/30

Phong Shading Example

VS_OUTPUT VS( float3 InPos : POSITION, // Vertex position in model space float3 InNormal : NORMAL // Vertex normal in model space ) { VS_OUTPUT Out = (VS_OUTPUT)0; // transform the position and normal Out.TransformedPos = mul(float4(InPos, 1), (float4x3)World); Out.Pos = mul(float4(Out.TransformedPos,1), ViewProjection);

Out.Normal = mul(InNormal, (float3x3)World); // normal (view space)

return Out;}

Page 29: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

29/30

Phong Shading Example

float4 PS ( VS_OUTPUT In ) : COLOR

{

// vector from vertex towards eye

float3 EyeToVertex = normalize ( In.TransformedPos - EyePos );

float3 normal = normalize ( In.Normal );

float4 color = calcColor ( normalize ( lightPos – In.TransformedPos ), normal,

EyeToVertex );

return color;

}

Page 30: 1 Dr. Scott Schaefer Programmable Shaders. 2/30 Graphics Cards Performance Nvidia Geforce 6800 GTX 1  6.4 billion pixels/sec Nvidia Geforce 7900 GTX

30/30

General Purpose GPU Programming

Originally success was limited because problems had to be crammed into graphics pipeline

General purpose computation now availableNvidia’s CUDADirectX ComputeOpenCL