1 dr. scott schaefer programmable shaders. 2/30 graphics cards performance nvidia geforce 6800 gtx 1...
TRANSCRIPT
1
Dr. Scott Schaefer
Programmable Shaders
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
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
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
5/30
Graphics PipelineVertices
6/30
Graphics PipelineVertices
Vertex
Transformation/Lighting
7/30
Graphics PipelineVertices
Vertex
Transformation/Lighting
Transformed Vertices
8/30
Graphics PipelineVertices
Vertex
Transformation/Lighting
Viewport Transformation
Transformed Vertices
9/30
Graphics PipelineVertices
Vertex
Transformation/Lighting
Viewport Transformation
Triangle Setup
Transformed Vertices
Vertex Index Stream
10/30
Graphics PipelineVertices
Vertex
Transformation/Lighting
Backface Culling
Viewport Transformation
Triangle Setup
Transformed Vertices
Vertex Index Stream
11/30
Graphics PipelineVertices
Vertex
Transformation/Lighting
Backface Culling
Clipping
Viewport Transformation
Triangle Setup
Transformed Vertices
Vertex Index Stream
12/30
Graphics PipelineVertices
Vertex
Transformation/Lighting
Backface Culling
Clipping
Viewport Transformation
Triangle Setup
Interpolation/Rasterization
Transformed Vertices
Vertex Index Stream
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
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
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
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
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
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…
19/30
Vertex Shaders
// vertex shader output structure
struct VS_OUTPUT
{
float4 Pos : POSITION;
};
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;}
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
22/30
Pixel Shaders
float4 PS ( VS_OUTPUT In ) : COLOR
{
// may perform texture lookup, depth effects, fog, etc…
return float4 ( 1, 1, 1, 1 );
}
23/30
Gouraud Shading Example
// vertex shader output structure
struct VS_OUTPUT
{
float4 Pos : POSITION;
float4 Color : COLOR;
};
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;}
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;
}
26/30
Gouraud Shading Example
float4 PS ( VS_OUTPUT In ) : COLOR
{
return In.Color;
}
27/30
Phong Shading Example
// vertex shader output structure
struct VS_OUTPUT
{
float4 Pos : POSITION;
float3 Normal : TEXCOORD0;
float3 TransformedPos : TEXCOORD1;
};
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;}
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;
}
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