Title: Cg Overview
1(No Transcript)
2Cg Overview
- Cg is the High Level language from NVIDIA for
programming GPUs, developed in close
collaboration with Microsoft - Cg is 100 compatible with the HLSL in DirectX 9
- Cg has been offered to the OpenGL ARB as a
proposal for the High Level Shading Language for
future versions of OpenGL - Cg enables a dramatic productivity increase for
graphics development for - Game developers
- DCC tool developers
- Artists Shader writers
- CAD and Visualization application developers
- This is C for Graphics
3Assembly or High-level.Which do you prefer?
PhongShader
- Assembly
-
- DP3 R0, c11.xyzx, c11.xyzx
- RSQ R0, R0.x
- MUL R0, R0.x, c11.xyzx
- MOV R1, c3
- MUL R1, R1.x, c0.xyzx
- DP3 R2, R1.xyzx, R1.xyzx
- RSQ R2, R2.x
- MUL R1, R2.x, R1.xyzx
- ADD R2, R0.xyzx, R1.xyzx
- DP3 R3, R2.xyzx, R2.xyzx
- RSQ R3, R3.x
- MUL R2, R3.x, R2.xyzx
- DP3 R2, R1.xyzx, R2.xyzx
- MAX R2, c3.z, R2.x
- MOV R2.z, c3.y
- MOV R2.w, c3.y
- Cg
- COLOR cPlastic Ca Cd dot(Nf, L)
- Cs pow(max(0, dot(Nf, H)), phongExp)
or
4NVIDIAs Cg Compiler
- Industry standard high level language from NVIDIA
and Microsoft - Developers can choose either API as a target
- DirectX 8 9 access millions of installed GPUs
- OpenGL (Windows, Mac, Linux)
- Unified Compiler Architecture
- One language
- Several optimizations
5Cg is a C-like language, modified for GPUs
- Syntax, operators, functions from C
- Conditionals and flow control
- Particularly suitable for GPUs
- Expresses data flow of the pipeline/stream
architecture of GPUs (e.g. vertex-to-pixel) - Vector and matrix operations
- Supports hardware data types for maximum
performance - Exposes GPU functions for convenience and speed
- Intrinsic (mul, dot, sqrt)
- Built-in extremely useful and GPU optimized
math, utility and geometric functions (noise,
mix, reflect, sin) - Language reserves keywords to support future
hardware implementations (e.g., pointers, switch,
case) - Compiler uses hardware profiles to subset Cg as
required for particular hardware capabilities (or
lack thereof)
6Cg and CgFX
- One Cg vertex pixel program together describe a
single rendering pass - CgFX shaders can describe multiple passes
- Although CineFX architecture supports 1024 pixel
instructions in a single pass! - CgFX also contains multiple implementations
- For different APIs
- For various HW
- For Shader LOD
7CgFX Overview
- CgFX files contain shaders and the supplementary
data required to use them - Unlimited multiple implementations
- API (D3D vs. OpenGL)
- Platform (Xbox, PC, )
- Shader Level of Detail
- NVIDIAs Compiler includes a CgFX parser for easy
integration - Full DCC Integration
8Key DCC Applications integrating Cg
9NVIDIAs Cg Toolkit Beta 2
- Available now at developer.nvidia.com/Cg
- Includes CineFX support
- Cg Compiler
- Vertex (ARB_vertex_program, DirectX 8, OpenGL,
CineFX) - Pixel (DirectX 8, CineFX)
- Robust built-in Library
- Cg Browser 4.0 Shaders
- CineFX sample shaders
- Cg Users Manual
- Publicly released in August
Leather float specRollOffEdge pow( (1.0 -
VdH), 3.0) float rollOff specRollOffEdge
(1.0 - specRollOffEdge) specularRollOff color
C LightColor Ecc Gain rollOff
10NVIDIAs Cg Toolkit Final Release
- Will be available this fall
- Cg Compiler
- Vertex (DirectX 9, CineFX support)
- Pixel (DirectX 9, CineFX support)
- CgFX Parsing
- Cg Browser 5.0 (CgFX enabled)
- More Shaders
- Max CgFX plugin
- Maya CgFX plugin
- XSI Cg support
- Cg Courseware
11And now for the details...
12Data types
- float 32-bit IEEE floating point
- half 16-bit IEEE-like floating point
- fixed 12-bit fixed -2,2) clamping (OpenGL
only) - bool Boolean
- sampler Handle to a texture sampler
13Array / vector / matrix declarations
- Declare vectors (up to length 4)and matrices (up
to size 4x4)using built-in data types
float4 mycolor float3x3 mymatrix - Not the same as arrays
- float mycolor4
- float mymatrix33
- Arrays are first-class types, not pointers
14Can define overloaded functions
- Examples
- float myfuncA(float3 x)
- float myfuncA(half3 x)
- float myfuncB(float2 a, float2 b)
- float myfuncB(float3 a, float3 b)
- float myfuncB(float4 a, float4 b)
- Very useful with so many data types.
15Extend standard arithmetic to vectors and matrices
- Component-wise - / gt lt ? for vectors
- Dot product
- dot(v1,v2) // returns a scalar
- Matrix multiplications
- assuming float4x4 M and float4 v
- matrix-vector mul(M, v) // returns a vector
- vector-matrix mul(v, M) // returns a vector
- matrix-matrix mul(M, N) // returns a matrix
16New vector operators
- Swizzle operator extracts elements from vector
- a b.xxyy
- Vector constructor builds vector a
float4(1.0, 0.0, 0.0, 1.0) - Masking operator specifies which elements are
overwritten - a.wx b.xy
17The Big Picture
VertexProgram
FragmentProgram
Application
Framebuffer
Connector
Connector
Connector
Cg or asm
Cg or asm
18What exactly is a connector?
- Describes shader inputs and outputs
- Defines an interface that allows
mixing-and-matching of programs - Its a struct, but with optional extra
information
19Connecting Application to Vertex Program
name of connector (struct tag)
struct myappdata float4 pos float4 color
float2 uv float w1 // skinning
weight 1 float w2 // skinning weight
2
Connectors define an interface thatallows
mixing-and-matching of programs.
20Defining a Vertex Program
output connector
Input connector
v2f skinning(myappdata vin, uniform float4x4
m1, uniform float4x4 m2) v2f vout
// skinning vout.pos vin.w1(mul(m1,vin.p
os)) vin.w2(mul(m2,vin.pos))
vout.color vin.color vout.uv
vin.uv return vout
Note that uniform variables dont come in via
a connector.
21Connecting Vertex Program to Fragment Program
name of connector
struct v2f float4 pos POSITION float4
color float2 uv
Must have POSITION
22Defining a Fragment Program
predefined output connector
input connector
f2fb do_texture(v2f fragin, uniform
sampler2D tex) f2fb fragout
fragout.COL fragin.color f4tex2D(tex,
fragin.uv) return fragout
23Optional Specify Connector Registers
struct v2f float4 pos POSITION float4
color TEXCOORD0 float2 uv TEXCOORD1
These semantics allow mix match with
manually-written assembly code.
24Profiles Define Specific HW Behavior
- Vertex profiles
- No half or fixed data type
- No texture-mapping functions
- Fragment/pixel profiles
- No for or while loops (unless theyre
unrollable)
25Cg Summary
- C-like language expressive and efficient
- HW data types
- Vector and matrix operations
- Write separate vertex and fragment programs
- Connectors enable mix match of programsby
defining data flows - Supports any DX8 hardware
- Will support future HW (beyond CineFX/DX9)
26Questions?