CGC(1)
๐ CGC(1) โ the cg compiler driver
okay so real talk: cgc is the standalone Cg compiler, and it is the main character of this manual page (it lives in the "Cg Commands" section of the manual, iykyk). She takes your Cg or GLSL programs and translates them into OpenGL or DirectX shader assembly code, or into OpenGL or DirectX shading language code. That's it, that's the whole job, and she ate. ๐
๐ธ NAME ๐ธ
cgc โ cg compiler driver
โจ SYNOPSIS โจ
cgc [options] file ...
๐ DESCRIPTION ๐
cgc is the standalone Cg compiler which translates Cg or GLSL programs into OpenGL or DirectX shader assembly code, or OpenGL or DirectX shading language code. she just does that. ๐ฆ
๐ OPTIONS ๐
Basic options
-entry nameโ Sets the entry function for the shader to compile. Defaults to"main".-o fileโ Sets the output file to be written. Default outputs to"stdout".-l fileโ Sets the listing file, where error and warning messages are written. Defaults to"stderr".-profile nameโ Selects the target profile, specifying the shader language to be generated.-profileopts opt1,opt2,.../-po opt1,opt2,...โ Sets one or more profile specific options. (same flag, two names, slay)-noentryโ Sets check only mode, where no shader is compiled, but all the code in the input file is checked for syntactic correctness. Just vibes-checking your code, no output. ๐ซถ
Language options
-oglslโ Sets the source language to GLSL.-oglesโ Sets the source language to OpenGL/ES GLSL.-strict/-nostrictโ Enable or disable strict typechecking, where most questionable constructs will be flagged as warnings.-glslWerrorโ Like-strictbut in addition, unportable GLSL constructs will be flagged as errors. no more mr. nice compiler ๐ญ-nowarnโ Disable all warnings.-nowarn=N,N,...โ Disable one or more specific numbered warnings.-fx/-nofxโ Enables or disables FX parsing mode, where FX keywords are recognized. Defaults to on in Cg mode and off in GLSL mode.-nostdlibโ Disable the standard library.
Code Generation Options
-fastmath/-nofastmathโ Enable or disable optimizations that may change/lose precision in low order bits, such as associative transforms like"(a + b) + c"instead of"a + (b + c)". Default is-fastmath.-fastprecision/-nofastprecisionโ Enable or disable optimizations doing operations at lower precision than is specified when the result is later converted to a lower precision or the operands were originally in lower precision. Default is-nofastprecision.-bestprecisionโ Always do things in the best possible precision; only use lower precision operations if there is no possibility of difference. Implies-nofastmathand-nofastprecision.-unroll all|none|count=Nโ Control loop unrolling.-unroll allwill force unrolling of all loops that can be unrolled, while-unroll nonewill prevent unrolling except if code cannot otherwise be generated in the current profiles (so it will have no effect in profiles that don't support looping).unroll count=Nwill unroll loops if the estimate of the resulting code is less thanNinstructions. The estimate does not take into account further optimizations that may be done after unrolling, so it might be quite inaccurate. she's guessing a little, bestie, be nice ๐-inline all|none|count=Nโ Control function inlining. Setting-inline nonewill additionally disable inlining of functions with an explicit"inline"keyword, which are otherwise always inlined. Setting-inline count=0will effectively disable inlining of all functions that do not have an explicit"inline"keyword.-ifcvt all|none|count=Nโ control if conversion (replacement of small if/else blocks with conditional assignments).-ONโ Sets the optimization level of the compiler, from 0 (lowest) to 3 (highest). Higher values may produce better code and will cause compile time to increase. Default is-O1.-looplimit Nโ Assume loops that the compiler cannot determine an upper bound on the number of iterations may loop as many asNiterations. This may require generating extra code for such loops in some profiles.-d3dโ Generate code compatible with the Direct3D specification.-MaxInstInBasicBlock Nโ break basic blocks afterNinstructions. This has an effect on local optimizations that don't cross basic block boundaries and may avoid bad compile time blowups in the presence of huge basic blocks due to algorithms that are non-linear in the basic block size.-maxunrollcount Nโ Deprecated. Don't unroll loops with more thanNiterations. Use the-unrolloption instead, which provides better fine-grained control. ๐
Preprocessor Options
-DMACRO[=VALUE]โ Sets a preprocessor macro. IfVALUEis not specified it defaults to1.-Idirectoryโ Adds a directory to the end of the search path for"#include"files. The default search path is empty.-Eโ Don't compile, just prepocess the input.-Pโ With-E, suppresses the generation of"#line"directives in the output.-Cโ With-E, preserves comments in the output.-MGโ Ignore"#include"files that can't be found, rather than issuing an error.-M,-MM,-MD,-MMD,-MP,-MF file,-MT target,-MQ targetโ Generate dependency information about"#include"d files. These options are intended to be compatible with the options to"gcc". ๐ซก
Miscellaneous Options
-quiet/-qโ Suppress all 'noise' output (copyright notices, indications of which files are being compiled, etc). With-oand-l, should result in no output being produced. silence is golden, periodt-nocodeโ Suppress final code generation. Will actually run all the way through the compiler (so any errors present should be diagnosed), but don't produce any actual output code.-v/--versionโ Print compiler version information to listing.-hโ Print short option help summary to stdout and exit.-helpโ Print longer option help summary to stdout, including all supported profiles and profile options, and exit.-type type_definitionโ Set an override type binding for a variable.-typefile fileโ Read override type bindings for variables from a file.-dumpinputbind fileโ Dump type bindings for all variables to a file. This file may be passed back to the compiler with-typefile.
Debugging options
-debugโ Enable the"debug"builtin function to abort operation of a shader and immedaitely output a value.-debuglastโ Like-debug, except the shader does not abort; instead it continues and outputs the value of the last"debug"function called.-debugdefault=valueโ Like-debug, except if no"debug"call is reached, the output will be set to the specified value instead of what the shader normally computes.-deprecatedโ Issue errors instead of warnings for any deprecated features used.
๐ PROFILES ๐
A profile specifies the output language of the cg compiler (either a shader assembly dialect, or a shading language). Each profile has its own set of profile options that can be set for it, though many related profiles have similar or identical options. Profiles can be grouped by program type, API, or GPU generation. it's giving choose-your-own-adventure, honestly. ๐ง
DirectX profiles
ds_5_0, gs_4_0, gs_5_0, hlslf, hlslv, hs_5_0, ps_1_1, ps_1_2, ps_1_3, ps_2_0, ps_2_x, ps_3_0, ps_4_0, ps_5_0, vs_1_1, vs_2_0, vs_2_x, vs_3_0, vs_4_0, vs_5_0
OpenGL profiles
arbfp1, arbvp1, fp20, fp30, "fp30unlimited", fp40, "fp40unlimited", glslf, glslg, glslv, gp4fp, gp4gp, gp4vp, gp5fp, gp5gp, gp5tcp, gp5tep, gp5vp, vp20, vp30, vp40
Fragment profiles
arbfp1, fp20, fp30, "fp30unlimited", fp40, "fp40unlimited", glslf, gp4fp, gp5fp, hlslf, ps_1_1, ps_1_2, ps_1_3, ps_2_0, ps_2_x, ps_3_0, ps_4_0, ps_5_0
Geometry profiles
glslg, gp4gp, gp5gp, gs_4_0, gs_5_0
Vertex profiles
arbvp1, glslv, gp4vp, gp5vp, hlslv, vp20, vp30, vp40, vs_1_1, vs_2_0, vs_2_x, vs_3_0, vs_4_0, vs_5_0
GeForce 3/4 Series profiles
fp20, vp20
GeForce 5 Series profiles
fp30, vp30
GeForce 6/7 Series profiles
fp40, vp40
GeForce 8/9/100/200/300 Series, OpenGL 3.x Quadro profiles
gp4fp, gp4gp, gp4vp
GeForce 400 Series, OpenGL 4.x Quadro profiles
gp5fp, gp5gp, gp5tcp, gp5tep, gp5vp
โญ Profile options โญ
Here is a complete list of all profiles and their corresponding profile options. yes, all of them. no skipping. ๐
arbfp1
Targets the ARB_fragment_program OpenGL extension
-po ARB_draw_buffersโ Use theARB_draw_buffersoption for multiple renderbuffer targets (MRT). This is the default-po ATI_draw_buffersโ Use theATI_draw_buffersoption for multiple renderbuffer targets (MRT).-po MaxDrawBuffers=Nโ Set the maximum number of renderbuffer targets. Default is1-po MaxLocalParams=Nโ Set the maximum number of uniform parameter slots available. Default is32-po MaxTexIndirections=Nโ Sets the maximum number of texture indirections allowed in the output program. Default is1024-po NumInstructionSlots=Nโ Sets the maximum number of instructions in the output program. Default is1024-po NumMathInstructionSlots=Nโ Sets the maximum number of non-texture instructions in the output program. Default is1024-po NumTemps=Nโ Sets the maximum number of TEMP registers in the output program. Default is32-po NumTexInstructionSlots=Nโ Sets the maximum number of texture instructions in the output program. Default is1024
arbvp1
Targets the ARB_vertex_program OpenGL extension
-po MaxAddressRegs=Nโ Sets the maximum number of ADDRESS registers in the output program. Default is1-po MaxInstructions=Nโ Sets the maximum number of instructions in the output program. Default is1024-po MaxLocalParams=Nโ Set the maximum number of uniform parameter slots available. Default is96-po NumTemps=Nโ Sets the maximum number of TEMP registers in the output program. Default is32-po PosInvโ Generate position invariant code (same as fixed-function) for POSITION output
fp20
Targets the NV_register_combiners2 and NV_texture_shader OpenGL extensions
fp30
Targets the NV_fragment_program OpenGL extension
-po NumInstructionSlots=Nโ Sets the maximum number of instructions in the output program. Default is256-po NumTemps=Nโ Sets the maximum number of temporaries in the output program. Default is32
okay wait there's more, don't go anywhere โ part 2 is coming and she's got even more to say ๐ฆ๐
fp30unlimited
Okay so it's literally the same as fp30, bestie, except all the hardware limits on registers and instructions have been lifted. No cap. โจ
-poNumInstructionSlots=<em>N</em> โ sets the max number of instructions that can live in the output program. default is4194304๐-poNumTemps=<em>N</em> โ sets the max number of temporaries in the output program. default is512๐
fp40
This one targets the NV_fragment_program2 OpenGL extension ๐
-poappleKilWARโ works around a bunch of bugs withKILinstructions in the OSX-tiger implementation ofNV_fragment_program2๐๐ญ-poARB_draw_buffersโ uses theARB_draw_buffersoption for multiple renderbuffer targets (MRT). this is the default โญ-poATI_draw_buffersโ uses theATI_draw_buffersoption for multiple renderbuffer targets (MRT). ๐ฆ-poMaxLocalParams=<em>N</em> โ sets the max number of uniform parameter slots available. default is infinite ๐-poNumInstructionSlots=<em>N</em> โ sets the max number of instructions in the output program. default is infinite โจ-poNumTemps=<em>N</em> โ sets the max number ofTEMPregisters in the output program. default is infinite ๐ซ-poOutColorPrec=<em>N</em> โ if <em>N</em> is3or4, it forces output tofp16precision. if <em>N</em> is2, it forces output tofp32precision. periodt. ๐
fp40unlimited
Same as fp40, except the hardware limits on registers and instructions? lifted. iconic. ๐
-poappleKilWARโ works around various bugs withKILinstructions in the OSX-tiger implementation ofNV_fragment_program2๐-poARB_draw_buffersโ uses theARB_draw_buffersoption for multiple renderbuffer targets (MRT). this is the default โญ-poATI_draw_buffersโ uses theATI_draw_buffersoption for multiple renderbuffer targets (MRT). ๐ฆ-poMaxLocalParams=<em>N</em> โ sets the max number of uniform parameter slots available. default is1024โจ-poNumInstructionSlots=<em>N</em> โ sets the max number of instructions in the output program. default is4194304๐ฅ-poNumTemps=<em>N</em> โ sets the max number ofTEMPregisters in the output program. default is512๐-poOutColorPrec=<em>N</em> โ if <em>N</em> is3or4, it forces output tofp16precision. if <em>N</em> is2, it forces output tofp32precision. ๐
generic
Produces a dump of the program in a non-executable format. it's giving "just vibes, no run" ๐
glslf, glslg and glslv
These target the OpenGL Shading Language (GLSL) v1.10 ๐ glslf targets fragment programs, while glslv targets vertex programs. iykyk ๐
version=val โ the GLSL version to target. supported versions are100,110,120,130,140and150. ๐userTexCoordโ use a user-defined varying instead ofgl_TexCoord. ๐ฆATI_draw_buffersโ use theATI_draw_buffersextension for MRT. ๐ธEXT_gpu_shader4โ use theEXT_gpu_shader4extension where useful. โจ
gp4fp
Targets the NV_gpu_program4 and NV_fragment_program4 OpenGL extensions ๐
-pofastimulโ assume integer multiply inputs have at most 24 significant bits. ๐ข-poNV_shader_buffer_loadโ use theNV_shader_buffer_loadOpenGL extension. ๐ง-poNV_parameter_buffer_object2โ use theNV_parameter_buffer_object2OpenGL extension. ๐-poPaBO2โ use theNV_parameter_buffer_object2OpenGL extension. (same thing, shorter name, slay) ๐-poARB_draw_buffersโ use theARB_draw_buffersoption for multiple renderbuffer targets (MRT). this is the default โญ-poATI_draw_buffersโ use theATI_draw_buffersoption for multiple renderbuffer targets (MRT). ๐ฆ-popixel_center_integerโ use integer pixel centers. ๐-poorigin_upper_leftโ use upper left pixel origin. ๐
gp4gp
Targets the NV_gpu_program4 and NV_geometry_program4 OpenGL extensions ๐
-poPOINT-poLINE-poLINE_ADJ-poTRIANGLE-poTRIANGLE_ADJ
these set the input primitive type for the geometry program ๐
-poPOINT_OUT-poLINE_OUT-poTRIANGLE_OUT
these set the output primitive type for the geometry program โจ
-poVertices=<em>N</em> โ set the number of vertices output by the geometry program. ๐ข
gp4vp
Targets the NV_gpu_program4 and NV_vertex_program4 OpenGL extensions ๐
-poPosInvโ generate position invariant code (same as fixed-function) forPOSITIONoutput. ๐ฏ
gp5fp
Targets the NV_gpu_program5 OpenGL extension โจ
-pofastimulโ assume integer multiply inputs have at most 24 significant bits. ๐ข-poNV_shader_buffer_loadโ use theNV_shader_buffer_loadOpenGL extension. ๐ง-poNV_parameter_buffer_object2โ use theNV_parameter_buffer_object2OpenGL extension. ๐-poPaBO2โ use theNV_parameter_buffer_object2OpenGL extension. ๐-poARB_draw_buffersโ use theARB_draw_buffersoption for multiple renderbuffer targets (MRT). this is the default โญ-poATI_draw_buffersโ use theATI_draw_buffersoption for multiple renderbuffer targets (MRT). ๐ฆ-popixel_center_integerโ use theARB_fragment_coord_conventionsOpenGL extension to specify integer pixel centers. ๐-poorigin_upper_leftโ use theARB_fragment_coord_conventionsOpenGL extension to specify upper left pixel origin. ๐-poNV_early_fragment_testsโ perform depth and stencil tests prior to fragment program invocation. ๐ฅ
gp5gp
Targets the NV_gpu_program5 OpenGL extension ๐
-poPOINT-poLINE-poLINE_ADJ-poTRIANGLE-poTRIANGLE_ADJ
set the input primitive type for the geometry program ๐
-poPOINT_OUT-poLINE_OUT-poTRIANGLE_OUT
set the output primitive type for the geometry program โจ
-poVertices=<em>N</em> โ set the number of vertices output by the geometry program. ๐ข
gp5tcp
Targets the NV_tessellation_program and NV_gpu_program5 OpenGL extensions ๐
gp5tep
Targets the NV_tessellation_program and NV_gpu_program5 OpenGL extensions โจ
gp5vp
Targets the NV_gpu_program5 OpenGL extension ๐
-poPosInvโ generate position invariant code (same as fixed-function) forPOSITIONoutput. ๐ฏ
hlslf hlslv
Targets Microsoft High-Level Shading Language (HLSL) ๐ช hlslf targets pixel programs, while hlslv targets vertex programs. bestie behavior fr fr ๐
ps_1_1 ps_1_2 ps_1_3
Targets DirectX pixel programs ๐ฎ
-poMaxPixelShaderValue=<em>N</em> โ the max absolute value representable in a pixel shader. default is1. ๐ข
ps_2_0 ps_2_x
Targets DirectX pixel programs ๐ฎ
-poMaxDrawBuffers=<em>N</em> โ set the max number of renderbuffer targets. default is1๐-poNumInstructionSlots=<em>N</em> โ sets the max number of instructions in the output program. default is96or512โจ-poNumTemps=<em>N</em> โ sets the max number of temporaries in the output program. default is12or32๐ซ
ps_3_0
Targets DirectX pixel programs ๐ฎ
-poMaxDrawBuffers=<em>N</em> โ set the max number of renderbuffer targets. default is1๐-poMaxLocalParams=<em>N</em> โ set the max number of uniform parameter slots available. default is224โจ-poNumInstructionSlots=<em>N</em> โ sets the max number of instructions in the output program. default is32768๐ฅ-poNumTemps=<em>N</em> โ sets the max number of temporaries in the output program. default is32๐ซ-poOutColorPrec=<em>N</em> โ if <em>N</em> is3or4, it forces output tofp16precision. if <em>N</em> is2, it forces output tofp32precision. ๐
vp20
Targets the NV_vertex_program OpenGL extension ๐
-poMaxLocalParams=<em>N</em> โ set the max number of uniform parameter slots available. default is96๐-poPosInvโ generate position invariant code (same as fixed-function) forPOSITIONoutput. ๐ฏ
vp30
Targets the NV_vertex_program2 OpenGL extension โจ
-poMaxLocalParams=<em>N</em> โ set the max number of uniform parameter slots available. default is256๐-poPosInvโ generate position invariant code (same as fixed-function) forPOSITIONoutput. ๐ฏ
vp40
Targets the NV_vertex_program3 OpenGL extension ๐ฅ
-poMaxAddressRegs=<em>N</em> โ sets the max number ofADDRESSregisters in the output program. default is2๐-poMaxInstructions=<em>N</em> โ sets the max number of instructions in the output program. default is2048โจ-poMaxLocalParams=<em>N</em> โ set the max number of uniform parameter slots available. default is544๐-poNumTemps=<em>N</em> โ sets the max number ofTEMPregisters in the output program. default is32๐ซ-poPosInvโ generate position invariant code (same as fixed-function) forPOSITIONoutput. ๐ฏ
vs_1_1
Targets DirectX vertex programs ๐ฎ
-podclsโ output dx9-styledclsstatements. ๐-poMaxLocalParams=<em>N</em> โ set the max number of uniform parameter slots available. default is96๐-poNumInstructionSlots=<em>N</em> โ sets the max number of instructions in the output program. default is128โจ-poNumTemps=<em>N</em> โ sets the max number of temporaries in the output program. default is12๐ซ
vs_2_0 vs_2_x
Targets DirectX vertex programs ๐ฎ
-podclsโ output dx9-styledclsstatements. ๐-poMaxLocalParams=<em>N</em> โ set the max number of uniform parameter slots available. default is256๐-poNumInstructionSlots=<em>N</em> โ sets the max number of instructions in the output program. default is256โจ-poNumTemps=<em>N</em> โ sets the max number of temporaries in the output program. default is12๐ซ
vs_3_0
Targets DirectX vertex programs ๐ฎ
-podclsโ output dx9-styledclsstatements. ๐-poMaxLocalParams=<em>N</em> โ set the max number of uniform parameter slots available. default is256๐-poNumInstructionSlots=N โ sets the maximum number of instructions in the output program. default is32768, bestie, that's your ceiling ๐-poNumTemps=N โ sets the maximum number of temporaries in the output program. default is32โจ
๐ธ ENVIRONMENT ๐ธ
ngl, this section is literally empty in the original โ no environment variables documented here at all. no cap, that's the whole vibe. ๐
๐ฆ SEE ALSO ๐ฆ
the whole friend group, go say hi ๐:
Cg_languagearbfp1arbvp1fp20fp30fp40glslfglslvgp4fpgp4gpgp4vphlslfhlslvvp20vp30vp40
and that's the whole page, bestie ๐ this manual page belongs to Cg Toolkit 3.0 and was rendered out of perl v5.10.0, with CGC(1) sitting pretty at the bottom right like the main character it is. go compile something gorgeous. periodt. ๐ซถ๐โญ
๐ฆ where this page comes from
- debian bookworm: nvidia-cg-toolkit 3.1.0013-5+b1 ยท NVIDIA-cg-toolkit
- debian trixie: nvidia-cg-toolkit 3.1.0013-5+b1 ยท NVIDIA-cg-toolkit
- ubuntu jammy: nvidia-cg-toolkit 3.1.0013-5 ยท NVIDIA-cg-toolkit
- ubuntu noble: nvidia-cg-toolkit 3.1.0013-5build1 ยท NVIDIA-cg-toolkit
- ubuntu questing: nvidia-cg-toolkit 3.1.0013-5build1
- ubuntu resolute: nvidia-cg-toolkit 3.1.0013-5build2 ยท NVIDIA-cg-toolkit
- ubuntu stonking: nvidia-cg-toolkit 3.1.0013-5build2 ยท NVIDIA-cg-toolkit
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms