Cg語言

Cg语言(C for Graphics)是为GPU编程设计的高級著色器語言,由NVIDIA公司开发。Cg极力保留C语言的大部分语义,并让开发者从硬件细节中解脱出来,Cg同时也有一个高级语言的其他好处,如代码的易重用性,可读性得到提高,编译器代码优化。

Cg语言主要参照ANSI C建模,但也从C++和Java以及早期的绘制语言如RenderMan and the Stanford shading language中吸取了一些思想。这些使得很容易写程序然后由编译器进行优化,提高了可读性。而且Cg的设计考虑了GPU的体系结构,如可编程多处理器单元(顶点处理器,像素处理器,外加不可编程单元)。这些部分和应用都是通过数据流连接起来。Cg语言允许分别为顶点和像素写程序。Cg API引入了profiles的概念以处理顶点和像素编程所缺乏的通用性。一个Cg profile就定义了一套整个Cg语言的子集以适应不同的硬件平台和API。Cg程序可以根据运行时的需要或者事先编译成GPU汇编代码。这样可以很容易地将一个Cg像素程序和手写的顶点程序结合起来,或者甚至采用不可编程的OpenGL或者DirectX顶点流水线,反之亦然。

由于Nvidia和微软合作紧密,Cg语言和HLSL的共通之处很多。[1]在早期的官方文档里,这两者被解释成贴了两个牌的同一门语言。[2]

細節

資料型別

Cg有6種数据型別(data types),跟C語言相當類似,有一些是為GPU特別定義的,型別如下:

  • float - 32位元浮點數
  • half - 16位元浮點數
  • int - 32位元整數
  • fixed - 12位元定點數
  • bool - 布尔值
  • sampler* - 代表紋理物件(texture object)

範例

  • A sample Cg vertex shader
 // input vertex
 struct VertIn {
     float4 pos   : POSITION;
     float4 color : COLOR0;
 };
 
 // output vertex
 struct VertOut {
     float4 pos   : POSITION;
     float4 color : COLOR0;
 };
 
 // vertex shader main entry
 VertOut main(VertIn IN, uniform float4x4 modelViewProj) {
     VertOut OUT;
     OUT.pos     = mul(modelViewProj, IN.pos); // calculate output coords
     OUT.color   = IN.color; // copy input color to output
     OUT.color.z = 1.0f; // blue component of color = 1.0f
     return OUT;
 }

參照

外部連結

英伟达
 
繪圖處理器
固定功能管線
早期產品
RIVA系列
GeForce系列
統一著色器架構英语Unified shaders model
GeForce系列
光線追蹤
GeForce系列
微架構
  • 華倫海特英语Fahrenheit (microarchitecture)
  • 攝爾修斯英语Celsius (microarchitecture)
  • 克耳文英语Kelvin (microarchitecture)
  • 蘭金英语Rankine (microarchitecture)
  • 居禮英语Curie (microarchitecture)
  • 特斯拉英语Tesla (microarchitecture)
  • 費米
  • 克卜勒
  • 麥斯維爾英语Maxwell (microarchitecture)
  • 帕斯卡
  • 伏打
  • 图灵
  • 安培
  • 愛達·勒芙蕾絲
  • 霍普英语Hopper (microarchitecture)
 
其他產品
中央處理器
主機板晶片組
工作站
高性能計算
遊戲機
多媒體整合平臺
系統晶片
橋接晶片
 
技術與軟體
多媒體加速
  • PureVideo(視訊解碼)
  • NVENC英语NVIDIA NVENC(視訊編碼)
圖形處理技術相關
晶片組相關技術
其它硬體技術及標準
驅動程式軟體
  • ForceWare(GPU驅動程式)
  • Verde(行動裝置GPU驅動程式)
  • GameWorks英语Nvidia GameWorks
    • PhysX
    • OptiX英语OptiX
  • VDPAU
  • nView
  • nTune
    • System Utility英语Nvidia System Tools
  • Gelato
  • Cg
  • CUDA
 
其它相關
併購企業
  • 3dfx Interactive
  • Ageia
  • Exluna
  • Hybrid Graphics
  • Icera英语Icera
  • iReady
  • MediaQ
  • Mental Images英语mental Images (firm)
  • Pace Soft Silicon
  • PortalPlayer
  • RayScale
  • Stexar
  • ULi
關鍵人物
  • 黃仁勳
  • 克里斯·馬拉科夫斯基
  • 克蒂斯·普里姆
  • 大衛·柯克
  • 大卫·罗森塔尔英语David S. H. Rosenthal
  • Marvin Burkett(馬文·伯克特)
  • Bill Dally(比爾·戴利)英语Bill Dally
  • Ranga Jayaraman(蘭格·賈亞拉曼)
  • Joseph Greco(約瑟夫·葛雷柯)
  • Jeff Fisher(傑夫·費舍爾)
  • Jonah Alben(約拿·阿爾本)
  • Brian Kelleher(布萊恩·凱勒赫爾)
  • Philip Carmack(菲利普·卡馬克)
  • Dwight Diercks(德懷特·狄耶克斯)
  • Frank Fox(弗蘭克·富克斯)
  • Gary Tarolli(蓋瑞·塔羅利)

范型
过程式
面向对象
多范型
函数式
逻辑式
脚本语言
动态语言
Shell语言
ECMA-262
特定平台
.NET
JVM
特定领域
科学计算
GPU计算
  • Cg/HLSL
  • GLSL
  • Brook英语BrookGPU
  • OpenCL
  • CUDA/PTX英语Parallel Thread Execution
  • Futhark
  • SPIR-V英语Standard Portable Intermediate Representation
数据查询
可视化
传媒设计
 
其它
  • 分类 目录
  • 列表级条目 列表
  • 历史
  • 比较英语Comparison of programming languages
  • 时间线英语Timeline of programming languages
  1. ^ Fusion Industries :: Cg and HLSL FAQ ::. 2012-08-24 [2020-04-25]. (原始内容存档于2012-08-24). 
  2. ^ The Cg Tutorial - Chapter 1. Introduction. developer.download.nvidia.cn. [2020-04-25]. (原始内容存档于2022-04-15).