Cg (programming language)
   HOME

TheInfoList



OR:

Cg (short for C for Graphics) and High-Level Shader Language (HLSL) are two names given to a high-level shading language developed by
Nvidia Nvidia Corporation ( ) is an American multinational corporation and technology company headquartered in Santa Clara, California, and incorporated in Delaware. Founded in 1993 by Jensen Huang (president and CEO), Chris Malachowsky, and Curti ...
and
Microsoft Microsoft Corporation is an American multinational corporation and technology company, technology conglomerate headquartered in Redmond, Washington. Founded in 1975, the company became influential in the History of personal computers#The ear ...
for programming
shader In computer graphics, a shader is a computer program that calculates the appropriate levels of light, darkness, and color during the rendering of a 3D scene—a process known as '' shading''. Shaders have evolved to perform a variety of s ...
s. Cg/HLSL is based on the
C programming language C (''pronounced'' '' – like the letter c'') is a general-purpose programming language. It was created in the 1970s by Dennis Ritchie and remains very widely used and influential. By design, C's features cleanly reflect the capabilities of ...
and although they share the same core syntax, some features of C were modified and new data types were added to make Cg/HLSL more suitable for programming
graphics processing unit A graphics processing unit (GPU) is a specialized electronic circuit designed for digital image processing and to accelerate computer graphics, being present either as a discrete video card or embedded on motherboards, mobile phones, personal ...
s. Two main branches of the Cg/HLSL language exist: the Nvidia Cg compiler (cgc) which outputs
DirectX Microsoft DirectX is a collection of application programming interfaces (APIs) for handling tasks related to multimedia, especially game programming and video, on Microsoft platforms. Originally, the names of these APIs all began with "Direct" ...
or
OpenGL OpenGL (Open Graphics Library) is a Language-independent specification, cross-language, cross-platform application programming interface (API) for rendering 2D computer graphics, 2D and 3D computer graphics, 3D vector graphics. The API is typic ...
and the Microsoft HLSL which outputs DirectX shaders in bytecode format. Nvidia's cgc was deprecated in 2012, with no additional development or support available. HLSL shaders can enable many special effects in both 2D and 3D
computer graphics Computer graphics deals with generating images and art with the aid of computers. Computer graphics is a core technology in digital photography, film, video games, digital art, cell phone and computer displays, and many specialized applications. ...
. The Cg/HLSL language originally only included support for
vertex shader In computer graphics, a shader is a computer program that calculates the appropriate levels of light, darkness, and color during the rendering of a 3D scene—a process known as '' shading''. Shaders have evolved to perform a variety of s ...
s and
pixel shader In computer graphics, a shader is a computer program that calculates the appropriate levels of light, darkness, and color during the rendering of a 3D scene—a process known as '' shading''. Shaders have evolved to perform a variety of s ...
s, but other types of shaders were introduced gradually as well: * DirectX 10 (Shader Model 4) and Cg 2.0 introduced geometry shaders. * DirectX 11 (Shader Model 5) introduced compute shaders (
GPGPU General-purpose computing on graphics processing units (GPGPU, or less often GPGP) is the use of a graphics processing unit (GPU), which typically handles computation only for computer graphics, to perform computation in applications traditiona ...
) and tessellation shaders (hull and domain). The latter is present in Cg 3.1. * DirectX 12 (Shader Model 6.3) introduced ray tracing shaders (ray generation, intersection, bit / closest hit / miss).


Background

Due to technical advances in graphics hardware, some areas of 3D graphics programming have become quite complex. To simplify the process, new features were added to graphics cards, including the ability to modify their rendering pipelines using vertex and pixel shaders. In the beginning, vertex and pixel shaders were programmed at a very low level with only the assembly language of the graphics processing unit. Although using the assembly language gave the programmer complete control over code and flexibility, it was fairly hard to use. A portable, higher level language for programming the GPU was needed, so Cg was created to overcome these problems and make shader development easier. Some of the benefits of using Cg over assembly are: * High level code is easier to learn, program, read, and maintain than assembly code. * Cg code is portable to a wide range of hardware and platforms, unlike assembly code, which usually depends on hardware and the platforms it's written for. * The Cg compiler can optimize code and do lower level tasks automatically, which are hard to do and error prone in assembly.


Language


Data types

Cg has six basic data types. Some of them are the same as in C, while others are especially added for GPU programming. These types are: * float - a 32bit floating point number * half - a 16bit floating point number * int - a 32bit integer * fixed - a 12bit fixed point number * bool - a Boolean variable * sampler* - represents a texture object Cg also features vector and matrix data types that are based on the basic data types, such as float3 and float4x4. Such data types are quite common when dealing with 3D graphics programming. Cg also has struct and
array data type In computer science, array is a data type that represents a collection of ''elements'' ( values or variables), each selected by one or more indices (identifying keys) that can be computed at run time during program execution. Such a collection ...
s, which work in a similar way to their C equivalents.


Operators

Cg supports a wide range of operators, including the common arithmetic operators from C, the equivalent arithmetic operators for vector and matrix data types, and the common
logical operator In logic, a logical connective (also called a logical operator, sentential connective, or sentential operator) is a logical constant. Connectives can be used to connect logical formulas. For instance in the syntax of propositional logic, the ...
s.


Functions and control structures

Cg shares the basic control structures with C, like if/else, while, and for. It also has a similar way of defining functions.


Semantics


Preprocessor

Cg implements many C preprocessor directives and its macro expansion system. It implements . Mark J. Kilgard
''Cg in Two Pages''
2003.


HLSL features

* Namespace * Annotation


Environment


Compilation targets

Cg programs are built for different ''shader profiles'' that stand for GPUs with different capabilities. These profiles decide, among others, how many instructions can be in each shader, how many registers are available, and what kind of resources a shader can use. Even if a program is correct, it might be too complex to work on a profile. As the number of profile and shader types cropped up, Microsoft has switched to use the term "Shader Model" to group a set of profiles found in a generation of GPUs. Cg supports some of the newer profiles up to Shader Model 5.0 as well as translation to glsl or hlsl. *PS 1.0 — Unreleased
3dfx 3dfx Interactive, Inc. was an American computer hardware company headquartered in San Jose, California, founded in 1994, that specialized in the manufacturing of 3D graphics processing units, and later, video cards. It was a pioneer in the f ...
Rampage, DirectX 8. *PS 1.1 —
GeForce 3 The GeForce 3 series (NV20) is the third generation of Nvidia's GeForce line of graphics processing units (GPUs). Introduced in February 2001, it advanced the GeForce architecture by adding programmable pixel and vertex shaders, multisample ant ...
, DirectX 8. *PS 1.2 — 3Dlabs Wildcat VP, DirectX 8.0a. *PS 1.3 — GeForce 4 Ti, DirectX 8.0a. *PS 1.4 — Radeon 8500-9250, Matrox Parhelia, DirectX 8.1. *Shader Model 2.0 — Radeon 9500-9800/X300-X600, DirectX 9. *Shader Model 2.0a — GeForce FX/PCX-optimized model, DirectX 9.0a. *Shader Model 2.0b — Radeon X700-X850 shader model, DirectX 9.0b. *Shader Model 3.0 — Radeon X1000 and GeForce 6, DirectX 9.0c. *Shader Model 4.0 — Radeon HD 2000 and GeForce 8, DirectX 10. *Shader Model 4.1 — Radeon HD 3000 and GeForce 200, DirectX 10.1. *Shader Model 5.0 — Radeon HD 5000 and GeForce 400, DirectX 11. *Shader Model 5.1 — GCN 1+, Fermi+, DirectX 12 (11_0+) with WDDM 2.0. *Shader Model 6.0 — GCN 1+, Kepler+, DirectX 12 (11_0+) with WDDM 2.1. *Shader Model 6.1 — GCN 1+, Kepler+, DirectX 12 (11_0+) with WDDM 2.3. *Shader Model 6.2 — GCN 1+, Kepler+, DirectX 12 (11_0+) with WDDM 2.4. *Shader Model 6.3 — GCN 1+, Kepler+, DirectX 12 (11_0+) with WDDM 2.5. *Shader Model 6.4 — GCN 1+, Kepler+, Skylake+, DirectX 12 (11_0+) with WDDM 2.6. *Shader Model 6.5 — GCN 1+, Kepler+, Skylake+, DirectX 12 (11_0+) with WDDM 2.7. "32 + 64" for ''Executed Instructions'' means "32 texture instructions and 64 arithmetic instructions."


The standard library

As in C, Cg/HLSL features a set of functions for common tasks in GPU programming. Some of the functions have equivalents in C, like the mathematical functions abs and sin, while others are specialized in GPU programming tasks, like the
texture mapping Texture mapping is a term used in computer graphics to describe how 2D images are projected onto 3D models. The most common variant is the UV unwrap, which can be described as an inverse paper cutout, where the surfaces of a 3D model are cut ap ...
functions tex1D and tex2D.


The Cg runtime library

Cg programs are merely vertex and pixel shaders, and they need supporting programs that handle the rest of the rendering process. Cg can be used with two graphics
API An application programming interface (API) is a connection between computers or between computer programs. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build ...
s:
OpenGL OpenGL (Open Graphics Library) is a Language-independent specification, cross-language, cross-platform application programming interface (API) for rendering 2D computer graphics, 2D and 3D computer graphics, 3D vector graphics. The API is typic ...
or
DirectX Microsoft DirectX is a collection of application programming interfaces (APIs) for handling tasks related to multimedia, especially game programming and video, on Microsoft platforms. Originally, the names of these APIs all began with "Direct" ...
. Each has its own set of Cg functions to communicate with the Cg program, like setting the current Cg shader, passing parameters, and such tasks. In addition to being able to compile Cg source to assembly code, the Cg runtime also has the ability to compile shaders during execution of the supporting program. This allows the runtime to compile the shader using the latest optimizations available for hardware that the program is currently executing on. However, this technique requires that the source code for the shader be available in plain text to the compiler, allowing the user of the program to access the source-code for the shader. Some developers view this as a major drawback of this technique. To avoid exposing the source code of the shader, and still maintain some of the hardware specific optimizations, the concept of profiles was developed. Shaders can be compiled to suit different graphics hardware platforms (according to profiles). When executing the supporting program, the best/most optimized shader is loaded according to its profile. For instance there might be a profile for a graphics card that supports complex pixel shaders, and another profile for one that supports only minimal pixel shaders. By creating a pixel shader for each of these profiles a supporting program enlarges the number of supported hardware platforms without sacrificing picture quality on powerful systems.'


Compilers and dialects

The Cg dialect has only ever had one compiler, in the form of Nvidia's Cg toolkit. Microsoft has released two compilers for HLSL. The original compiler was the closed-source FXC (Effect Compiler), supported until 2015. It was deprecated in favor of the open-source
LLVM LLVM, also called LLVM Core, is a target-independent optimizer and code generator. It can be used to develop a Compiler#Front end, frontend for any programming language and a Compiler#Back end, backend for any instruction set architecture. LLVM i ...
-based DXC (DirectXShaderCompiler) with support for newer HLSL features. Both compilers generate bytecode: while the older FXC used DXBC, DXC now uses DXIL. DXC can also emit SPIR-V bytecode. The
Khronos Group The Khronos Group, Inc. is an open, non-profit, member-driven consortium of 170 organizations developing, publishing and maintaining royalty-free interoperability standards for 3D graphics, virtual reality, augmented reality, parallel computat ...
has also written a LLVM-based HLSL compiler, in the form of a frontend for ''glslang'', their GLSL-to-SPIR_V compiler. Support for SPIR-V means that the shaders can be cross-platform, no longer limiting them to a DirectX stack. This task was previously performed by source-level converters like HLSL2GLSL, but the resulting code is often bloated.


Derived languages

The PlayStation Shader Language (PSSL) is based on Cg/HLSL. The ReshadeFX shading language is also based on Cg/HLSL. Shaders written in ReshadeFX are compiled to OpenGL, DX, or Vulkan and injected into games to act as post-processing filters.


Applications and games that use Cg or HLSL

* '' 3DVIA Virtools'' *
Adobe Photoshop Adobe Photoshop is a raster graphics editor developed and published by Adobe Inc., Adobe for Microsoft Windows, Windows and macOS. It was created in 1987 by Thomas Knoll, Thomas and John Knoll. It is the most used tool for professional digital ...
*
Maya Maya may refer to: Ethnic groups * Maya peoples, of southern Mexico and northern Central America ** Maya civilization, the historical civilization of the Maya peoples ** Mayan languages, the languages of the Maya peoples * Maya (East Africa), a p ...
* '' Battlefield 2'' * '' Crystal Space'' * '' Dolphinity Racer'' * '' Earth's Special Forces'' - A Half-Life Mod * '' Enemy Territory: Quake Wars'' * '' Doom 3 BFG Edition'' * ''EON Professional™/Ultra™'' of EON Reality * '' eyeon Fusion'' * '' Far Cry'' * '' Garshasp: The Monster Slayer'' * '' GLScene'' * '' Gun Metal'' * '' Hitman: Blood Money'' * '' Irrlicht Engine'' * ''
League of Legends ''League of Legends'' (''LoL'', commonly referred to as ''League'', is a multiplayer online battle arena video game developed and published by Riot Games. Inspired by ''Defense of the Ancients'', a Mod (video games), custom map for ''Warcraf ...
'' * '' Lightfeather 3D Engine'' *
LightWave LightWave 3D is a 3D computer graphics program developed by LightWave Digital. It has been used in films, television, motion graphics, digital matte painting, visual effects, video game development, product design, architectural visualizatio ...
11.6 * '' muvee Reveal'' * '' OGRE'' * '' OpenEmu'' * '' Panda3D'' * PCSX2 *
PlayStation 3 The PlayStation 3 (PS3) is a home video game console developed and marketed by Sony Computer Entertainment (SCE). It is the successor to the PlayStation 2, and both are part of the PlayStation brand of consoles. The PS3 was first released on ...
* '' RetroArch'' * '' R.U.S.E.'' * '' Snes9x'' * '' Unity game engine'' * ''
Unreal Engine Unreal Engine (UE) is a 3D computer graphics game engine developed by Epic Games, first showcased in the 1998 first-person shooter video game '' Unreal''. Initially developed for PC first-person shooters, it has since been used in a variety of ...
''


See also

*
Computer programming Computer programming or coding is the composition of sequences of instructions, called computer program, programs, that computers can follow to perform tasks. It involves designing and implementing algorithms, step-by-step specifications of proc ...
*
Computer graphics Computer graphics deals with generating images and art with the aid of computers. Computer graphics is a core technology in digital photography, film, video games, digital art, cell phone and computer displays, and many specialized applications. ...
* Vertex and pixel shaders * High level shader language * OpenGL shading language * Shader Model *
OpenGL OpenGL (Open Graphics Library) is a Language-independent specification, cross-language, cross-platform application programming interface (API) for rendering 2D computer graphics, 2D and 3D computer graphics, 3D vector graphics. The API is typic ...
*
DirectX Microsoft DirectX is a collection of application programming interfaces (APIs) for handling tasks related to multimedia, especially game programming and video, on Microsoft platforms. Originally, the names of these APIs all began with "Direct" ...


References


Further reading


Randima Fernando
Mark J. Kilgard,
The Cg Tutorial
The Definitive Guide to Programmable Real-Time Graphics'', Addison-Wesley Professional,
Randima Fernando
''GPU Gems: Programming Techniques, Tips, and Tricks for Real-Time Graphics'', Addison-Wesley Professional, * William R. Mark, R. Steven Glanville, Kurt Akeley, Mark J. Kilgard, ''Cg: A System for Programming Graphics Hardware in a C-like Language'', Proceedings of
SIGGRAPH SIGGRAPH (Special Interest Group on Computer Graphics and Interactive Techniques) is an annual conference centered around computer graphics organized by ACM, starting in 1974 in Boulder, CO. The main conference has always been held in North ...
2003,


External links


cgc-opensrc
- Mirror for nvidia's open source compiler, 2002 * Some essential materials (e.g. the design paper) are gathered i
these course notes from Siggraph 2005
* Nvidia-hosted materials: *
Cg FAQ
*
Cg Toolkit
** C
Language Reference and Documentation

NeHe Cg vertex shader tutorial

Documentation for the Cg Shader standard used by emulators
* Aras Pranckevičius,