Cg Overview - PowerPoint PPT Presentation

About This Presentation
Title:

Cg Overview

Description:

NVIDIA's Compiler includes a CgFX parser for easy integration. Full DCC Integration ... NVIDIA's Cg Toolkit Final Release. Will be available this fall. Cg Compiler ... – PowerPoint PPT presentation

Number of Views:51
Avg rating:3.0/5.0
Slides: 27
Provided by: cse64
Learn more at: http://www.cs.cmu.edu
Category:
Tags: nvidia | overview

less

Transcript and Presenter's Notes

Title: Cg Overview


1
(No Transcript)
2
Cg 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

3
Assembly 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
4
NVIDIAs 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

5
Cg 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)

6
Cg 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

7
CgFX 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

8
Key DCC Applications integrating Cg
9
NVIDIAs 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
10
NVIDIAs 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

11
And now for the details...
12
Data 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

13
Array / 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

14
Can 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.

15
Extend 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

16
New 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

17
The Big Picture
VertexProgram
FragmentProgram
Application
Framebuffer
Connector
Connector
Connector
Cg or asm
Cg or asm
18
What 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

19
Connecting 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.
20
Defining 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.
21
Connecting Vertex Program to Fragment Program
name of connector
struct v2f float4 pos POSITION float4
color float2 uv
Must have POSITION
22
Defining 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
23
Optional Specify Connector Registers
struct v2f float4 pos POSITION float4
color TEXCOORD0 float2 uv TEXCOORD1
These semantics allow mix match with
manually-written assembly code.
24
Profiles 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)

25
Cg 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)

26
Questions?
Write a Comment
User Comments (0)
About PowerShow.com