Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Cg (programming language)

From Wikipedia, the free encyclopedia
Shading language
icon
This articlerelies excessively onreferences toprimary sources. Please improve this article by addingsecondary or tertiary sources.
Find sources: "Cg" programming language – news ·newspapers ·books ·scholar ·JSTOR
(May 2024) (Learn how and when to remove this message)
Cg/HLSL
A scene containing several different 2D HLSL shaders.Distortion of the statue is achieved purely physically, while the texture of the rectangular frame beside it is based on color intensity. The square in the background has beentransformed androtated. The partialtransparency andreflection of the water in the foreground are added by a shader applied finally to the entire scene.
Familyshading language
DevelopernVIDIA, Microsoft
Websitedeveloper.nvidia.com/cg-toolkit
Dialects
Cg, HLSL, Playstation Shading Language
Influenced by
C,RenderMan Shading Language
Influenced
GLSL

Cg (short forC for Graphics), also known asHigh-Level Shader Language (HLSL), is a high-levelshading language developed byNvidia andMicrosoft for programmingshaders. Cg/HLSL is based on theC programming language 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 programminggraphics processing units.[1][2]

Two main branches of the Cg/HLSL language exist: the Nvidia Cg compiler (cgc) which outputsDirectX orOpenGL and the Microsoft HLSL which outputs DirectX shaders in bytecode format.[3][4] Nvidia's cgc wasdeprecated in 2012, with no additional development or support available.[5]

HLSL shaders can enable manyspecial effects in both 2D and 3Dcomputer graphics. The Cg/HLSL language originally only included support forvertex shaders andpixel shaders, but other types of shaders were introduced gradually as well:

Background

[edit]

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

[edit]

Data types

[edit]

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 andarray data types, which work in a similar way to their C equivalents.

Operators

[edit]

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 commonlogical operators.

Functions and control structures

[edit]

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

Semantics

[edit]

Preprocessor

[edit]

Cg implements manyC preprocessor directives and its macro expansion system. It implements#include.[7]

HLSL features

[edit]
  • Namespace
  • Annotation

Environment

[edit]

Compilation targets

[edit]

Cg programs are built for differentshader profiles that stand for GPUs with different capabilities.[8] 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.[7]

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.[9] Cg supports some of the newer profiles up to Shader Model 5.0 as well as translation to glsl or hlsl.[8]

Comparison of HLSL pixel shaders
Pixel shader version1.0 to 1.3[10]1.4[10]2.0[10][11]2.0a[10][11][12]2.0b[10][11][13]3.0[10][14]4.0[15]
4.1[16]
5.0[17]
Dependent texture limit468Unlimited8UnlimitedUnlimited
Texture instruction limit46*232UnlimitedUnlimitedUnlimitedUnlimited
Position registerNoNoNoNoNoYesYes
Instruction slots8+48+432 + 64512512≥ 512≥ 65536
Executed instructions8+46*2+8*232 + 6451251265536Unlimited
Texture indirections444Unlimited4UnlimitedUnlimited
Interpolated registers2 + 42 + 62 + 82 + 82 + 81032
Instruction predicationNoNoNoYesNoYesNo
Index input registersNoNoNoNoNoYesYes
Temp registers2612 to 322232324096
Constant registers8832323222416×4096
ArbitraryswizzlingNoNoNoYesNoYesYes
Gradient instructionsNoNoNoYesNoYesYes
Loop count registerNoNoNoNoNoYesYes
Face register (2-sided lighting)NoNoNoNoYesYesYes
Dynamic flow controlNoNoNoNoNoYes (24)Yes (64)
Bitwise OperatorsNoNoNoNoNoNoYes
Native IntegersNoNoNoNoNoNoYes
  • PS 1.0 — Unreleased3dfx Rampage, DirectX 8.
  • PS 1.1GeForce 3, DirectX 8.
  • PS 1.23Dlabs Wildcat VP, DirectX 8.0a.
  • PS 1.3GeForce 4 Ti, DirectX 8.0a.
  • PS 1.4Radeon 8500-9250,Matrox Parhelia, DirectX 8.1.
  • Shader Model 2.0Radeon 9500-9800/X300-X600, DirectX 9.
  • Shader Model 2.0aGeForce FX/PCX-optimized model, DirectX 9.0a.
  • Shader Model 2.0bRadeon X700-X850 shader model, DirectX 9.0b.
  • Shader Model 3.0Radeon X1000 andGeForce 6, DirectX 9.0c.
  • Shader Model 4.0Radeon HD 2000 andGeForce 8, DirectX 10.
  • Shader Model 4.1Radeon HD 3000 andGeForce 200, DirectX 10.1.
  • Shader Model 5.0Radeon HD 5000 andGeForce 400, DirectX 11.
  • Shader Model 5.1GCN 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" forExecuted Instructions means "32 texture instructions and 64 arithmetic instructions."

Comparison of HLSL Vertex shaders
Vertex shader versionVS 1.1[18]VS 2.0[11][18][19]VS 2.0a[11][18][19]VS 3.0[14][18]VS 4.0[15]
VS 4.1[20]
VS 5.0[17]
# of instruction slots128256256≥ 512≥ 65536
Max # of instructions executed12810246553665536Unlimited
Instruction predicationNoNoYesYesYes
Temp registers121216324096
# constant registers≥ 96≥ 256256≥ 25616×4096
Static flow controlNoYesYesYesYes
Dynamic flow controlNoNoYesYesYes
Dynamic flow control depth242464
Vertex texture fetchNoNoNoYesYes
# of texture samplers4128
Geometry instancing supportNoNoNoYesYes
Bitwise operatorsNoNoNoNoYes
Native integersNoNoNoNoYes

The standard library

[edit]

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 thetexture mapping functions tex1D and tex2D.

The Cg runtime library

[edit]

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 graphicsAPIs:OpenGL orDirectX. 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

[edit]

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-sourceLLVM-based DXC (DirectXShaderCompiler) with support for newer HLSL features.[21] Both compilers generate bytecode: while the older FXC used DXBC, DXC now uses DXIL. DXC can also emitSPIR-V bytecode.[22]

TheKhronos Group has also written a LLVM-based HLSL compiler, in the form of a frontend forglslang, 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.[23] This task was previously performed by source-level converters likeHLSL2GLSL, but the resulting code is often bloated.[24]

Derived languages

[edit]

ThePlayStation Shader Language (PSSL) is based on Cg/HLSL.[25]

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.[26]

Applications and games that use Cg or HLSL

[edit]

See also

[edit]

References

[edit]
  1. ^"Fusion Industries :: Cg and HLSL FAQ ::". 24 August 2012. Archived fromthe original on 24 August 2012.
  2. ^"The Cg Tutorial - Chapter 1. Introduction".developer.download.nvidia.cn.
  3. ^"Writing HLSL Shaders in Direct3D 9 (Windows)".msdn.microsoft.com. 24 May 2021.
  4. ^"Cg FAQ".NVIDIA DesignWorks. 8 March 2011. Retrieved25 May 2017.
  5. ^"Cg Toolkit | NVIDIA Developer". 8 March 2011.
  6. ^"Cg 2.0 Release Notes"(PDF).nvidia.com. January 2008.
  7. ^abMark J. Kilgard,Cg in Two Pages, 2003.
  8. ^ab"Cg Profile Documentation".Nvidia developer.
  9. ^"Shader Models vs Shader Profiles - Win32 apps".docs.microsoft.com. 30 June 2021.
  10. ^abcdef"Pixel Shader Differences".msdn.microsoft.com. 2011-02-08.
  11. ^abcdePeeper, Craig (2004-03-15)."Microsoft DirectX High Level Shader Language (HLSL)"(PPT).microsoft.com. pp. 5–8,24–25.
  12. ^Shimpi, Anand Lal."NVIDIA Introduces GeForce FX (NV30)". Archived fromthe original on June 10, 2013.
  13. ^Wilson, Derek."ATI Radeon X800 Pro and XT Platinum Edition: R420 Arrives". Archived fromthe original on September 28, 2012.
  14. ^abShader Model 3.0, Ashu Rege, NVIDIA Developer Technology Group, 2004.
  15. ^abThe Direct3D 10 System, David Blythe, Microsoft Corporation, 2006.
  16. ^"Registers - ps_4_1 (Windows)".msdn.microsoft.com. 23 August 2019.
  17. ^ab"Registers - ps_5_0 (Windows)".msdn.microsoft.com. 23 August 2019.
  18. ^abcd"Vertex Shader Differences".msdn.microsoft.com. 2011-02-08.
  19. ^abShimpi, Anand Lal."NVIDIA Introduces GeForce FX (NV30)". Archived fromthe original on June 10, 2013.
  20. ^"Registers - vs_4_1 (Windows)".msdn.microsoft.com. 23 August 2019.
  21. ^"Porting from FXC to DXC".GitHub.
  22. ^"microsoft/DirectXShaderCompiler: This repo hosts the source for the DirectX Shader Compiler which is based on LLVM/Clang". Microsoft. 21 October 2020.
  23. ^"glslang: Khronos-reference front end for GLSL/ESSL, partial front end for HLSL, and a SPIR-V generator". The Khronos Group. 21 October 2020.
  24. ^Matt Turner.Video onYouTube.
  25. ^Stenson, Richard; Ho, Chris."PlayStation Shading Language for PS4".GDC Europe 2013.
  26. ^"ReShade FX shading language".GitHub. 15 February 2022.
  27. ^"Maya Cg Plug-in | NVIDIA".
  28. ^"LightWave - 11.6 Features Overview".
  29. ^"Unity - Manual: Writing Shaders".

Further reading

[edit]

External links

[edit]
Fixed pixel pipeline
Pre-GeForce
Vertex andpixel shaders
Unified shaders
Unified shaders &NUMA
Ray tracing &Tensor Cores
Software and technologies
Multimedia acceleration
Software
Technologies
GPU microarchitectures
Other products
GraphicsWorkstation cards
GPGPU software
Console components
Nvidia Shield
SoCs and embedded
CPUs
Computerchipsets
Company
Key people
Acquisitions
Retrieved from "https://en.wikipedia.org/w/index.php?title=Cg_(programming_language)&oldid=1319441393"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp