This is not strictly true. ARB assembly language support languished once GLSL took off. NVIDIA kept extending this with NV specific GL extensions. For instance, on the OpenGL Extension Registry, see all extensions matching NV_gpu_program*, NV_vertex_program*, NV_fragment_program*, NV_geometry_program*, NV_tessellation_program*, NV_compute_program*, NV_parameter_buffer_object*, such as:
Here’s an old quick ref guide:
For many years, the NVIDIA GLSL compiler (in Cg, in the graphics driver, etc.) compiled GLSL shaders down into this assembly language as a first step, and it was pretty well documented. This meant you could do pretty much anything you could in GLSL in NV Assembly, because the driver was making use of this path. With Turing/RTX* GPUs however, they’ve apparently switched to using “something else” for this 1st-step assembly language (possibly SPIR-V) as some of NV’s latest extensions (e.g. NV_mesh_shader) didn’t extend NV Assembly to add this support, but there is SPIR-V support for them.
However (to your next point)…
neither of these are the low-level ISA for the GPU. They’re a cross-GPU portable high-level assembly representation that the driver uses to generate the low-level driver assembly specific to that ISA. I’ve heard that low-level assembly language called SASS by NVIDIA folks, and allegedly some NV tools will let you collect and inspect it. It’s likely what CUDA produces as well.
For NVIDIA’s high-level assembly language specifically, see:
and related NV Assembly extensions. Just keep in mind this is the high-level cross-GPU portable assembly, not the low-level ISA.
However, for the cross-vendor high-level assembly solution, take a look at SPIR-V. It’s the new shader hotness for Vulkan, and of course supports GLSL authoring. You can use open source tools like glslangValidator
and glslc
to compile GLSL compute shaders down to SPIR-V assembly and inspect to your heart’s content.
Just keep in mind that neither of these are the GPU’s low-level ISA. For those, see your GPU vendor.
A recent blog post related to all this high-level / low-level shader assembly and shader patching/ reoptimization w.r.t. OpenGL and Vulkan: