- Slang User's Guide
  - Introduction
    - Why use Slang?
    - Who is Slang for?
    - Who is this guide for?
    - Goals and Non-Goals
  - Getting Started with Slang
    - Installation
    - Your first Slang shader
    - The full example
  - Conventional Language Features
    - Types
    - Expressions
    - Statements
    - Functions
    - Preprocessor
    - Attributes
    - Global Variables and Shader Parameters
    - Shader Entry Points
    - Mixed Shader Entry Points
    - Auto-Generated Constructors
    - Initializer Lists
  - Basic Convenience Features
    - Type Inference in Variable Definitions
    - Immutable Values
    - Namespaces
    - Member functions
    - Properties
    - Initializers
    - Operator Overloading
    - Subscript Operator
    - Tuple Types
    - `Optional<T>` type
    - `Conditional<T, bool condition>` Type
    - `if_let` syntax
    - `reinterpret<T>` operation
    - Pointers (limited)
    - `DescriptorHandle` for Bindless Descriptor Access
    - Extensions
    - Multi-level break
    - Force inlining
    - Error handling
    - Special Scoping Syntax
    - Lambda Expressions (Experimental)
    - User-Defined Attributes (Experimental)
  - Modules and Access Control
    - Defining a Module
    - Importing a Module
    - Access Control
    - Organizing File Structure of Modules
    - Legacy Modules
  - Capabilities
    - Capability Atoms and Capability Requirements
    - Conflicting Capabilities
    - Capabilities Between Parent and Members
    - Capabilities Between Subtype and Supertype
    - Capabilities of Extensions
    - Capabilities Between Requirement and Implementation
    - Capabilities of Functions
    - Capability Aliases
    - Validation of Capability Requirements
  - Interfaces and Generics
    - Interfaces
    - Generics
    - Supported Constructs in Interface Definitions
    - Associated Types
    - Generic Value Parameters
    - Type Equality Constraints
    - Interface-typed Values
    - Extending a Type with Additional Interface Conformances
    - `is` and `as` Operator
    - Generic Interfaces
    - Generic Extensions
    - Extensions to Interfaces
    - Variadic Generics
    - Builtin Interfaces
  - Automatic Differentiation
    - Auto-diff operations `fwd_diff` and `bwd_diff`
    - Differentiable Type System
    - User-Defined Derivative Functions
    - Using Auto-diff with Generics
    - Using Auto-diff with Interface Requirements and Interface Types
    - Primal Substitute Functions
    - Working with Mixed Differentiable and Non-Differentiable Code
    - Higher-Order Differentiation
    - Restrictions and Known Issues
    - Reference
  - Compiling Code with Slang
    - Concepts
    - Command-Line Compilation with `slangc`
    - Using the Compilation API
    - Multithreading
    - Compiler Options
    - Debugging
  - Using the Reflection API
    - Compiling a Program
    - Types and Variables
    - Layout for Types and Variables
    - Programs and Scopes
    - Calculating Cumulative Offsets
    - Determining Whether Parameters Are Used
    - JSON Reflection Output
    - Conclusion
  - Supported Compilation Targets
    - Background and Terminology
    - Direct3D 11
    - Direct3D 12
    - Vulkan
    - OpenGL
    - Metal
    - CUDA and OptiX
    - CPU Compute
    - WebGPU
    - Summary
  - Link-time Specialization and Module Precompilation
    - Link-time Constants
    - Link-time Types
    - Providing Default Settings
    - Using Precompiled Modules with the API
    - Additional Remarks
  - Language Version
    - The Legacy Slang Language
    - Slang 2025
    - Slang 2026
    - Slang 202c (in development)
  - Special Topics
    - Handling Matrix Layout Differences on Different Platforms
      - Two conventions of matrix transform math
      - Discussion
      - Matrix Layout
      - Overriding default matrix layout
    - Obfuscation
      - Obfuscation in Slang
      - Using An Obfuscated Module
      - Accessing Source Maps
      - Accessing Source Maps without Files
      - Emit Source Maps
      - Issues/Future Work
    - Interoperation with Target-Specific Code
      - Defining Intrinsic Functions for Textual Targets
      - Defining Intrinsic Types
      - Injecting Preludes
      - Managing Cross-Platform Code
      - Inline SPIR-V Assembly
    - Uniformity Analysis
      - Treat Values as Uniform
      - Treat Function Return Values as Non-uniform
  - Target-Specific Features
    - SPIR-V-Specific Functionalities
      - Experimental support for the older versions of SPIR-V
      - Memory model
      - Combined texture sampler
      - System-Value semantics
      - Using SV_InstanceID and SV_VertexID with SPIR-V target
      - Behavior of `discard` after SPIR-V 1.6
      - Supported HLSL features when targeting SPIR-V
      - Unsupported GLSL keywords when targeting SPIR-V
      - Supported atomic types for each target
      - ConstantBuffer, StructuredBuffer and ByteAddressBuffer
      - ParameterBlock for SPIR-V target
      - Push Constants
      - Specialization Constants
      - SPIR-V specific Attributes
      - Multiple entry points support
      - Global memory pointers
      - Matrix type translation
      - Legalization
      - Tessellation
      - SPIR-V specific Compiler options
    - Metal-Specific Functionalities
      - Entry Point Parameter Handling
      - System-Value semantics
      - Interpolation Modifiers
      - Resource Types
      - Array Types
      - Matrix Layout
      - Mesh Shader Support
      - Header Inclusions and Namespace
      - Parameter blocks and Argument Buffers
      - Struct Parameter Flattening
      - Return Value Handling
      - Value Type Conversion
      - Conservative Rasterization
      - SubpassInput
      - Address Space Assignment
      - Explicit Parameter Binding
      - Specialization Constants
    - WGSL-Specific Functionalities
      - System-Value semantics
      - Supported HLSL features when targeting WGSL
      - Supported atomic types
      - ConstantBuffer, (RW/RasterizerOrdered)StructuredBuffer, (RW/RasterizerOrdered)ByteAddressBuffer
      - Interlocked operations
      - Entry Point Parameter Handling
      - Parameter blocks
      - Write-only Textures
      - Pointers
      - Address Space Assignment
      - Matrix type translation
      - Explicit Parameter Binding
      - Specialization Constants
    - GLSL-Specific Functionalities
      - Combined Texture Sampler
      - System-Value Semantics
      - `discard` Statement
      - HLSL Features Supported in GLSL
      - Atomic Types
      - Buffer Types
      - Matrix Layout
      - Entry Points
      - Specialization Constants
      - Attributes and Layout Qualifiers
      - GLSL-Specific Compiler Options
  - Experimental Features
    - Shader Execution Coverage
      - Compiling with coverage
      - Manifest structure
      - Dispatching the precompiled kernel
      - Generating a report
      - Further reading
  - Reference
    - Capability Profiles
    - Capability Atoms
      - Targets
      - Stages
      - Versions
      - Extensions
      - Compound Capabilities
      - Other