yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Harsh Aggarwal (NVIDIA)Bring back hooks for auto formatting and ensure build works (#7811)2d775b54d

master
13.3 KiB302 linesraw

+# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Repository: shader-slang/slang - A shading language for GPU programming Primary Language: C++ with custom Slang language MCP Tool Available: mcp__deepwiki__ask_question with repoName: "shader-slang/slang"

Reference other instruction files as well:

  • @.github/copilot-instructions.md

Build System and Common Commands

IMPORTANT: On Windows, always use cmake.exe (not cmake) to ensure proper GPU test execution. Using cmake without the .exe extension may invoke WSL's cmake, which cannot run GPU tests.

Building the Project

# Configure with default settings (Ninja Multi-Config)
cmake --preset default

# Configure with visual studio 2022 settings (Preferred on Windows)
cmake.exe --preset vs2022

# Build Release/Debug binaries.
# It can take from 5 minutes to 20 minutes depending on the machine.
cmake --build --preset debug # Debug binary
cmake --build --preset release # Release binary

# Build specific targets
cmake --build --preset debug --target slangc
cmake --build --preset debug --target slang-test

PR Workflow

  1. Label your PR: Use "pr: non-breaking" (default) or "pr: breaking" (for ABI/language breaking changes)
  2. Include tests: Add regression tests as .slang files under tests/

Testing

slang-test must run from repository root

# Run all tests with multiple servers (takes from 10 to 30 minutes)
./build/Release/bin/slang-test -use-test-server -server-count 8

# Run specific test
# The test file must be placed under "tests/" directory
./build/Release/bin/slang-test tests/path/to/test.slang

# Run unit tests
./build/Release/bin/slang-test slang-unit-test-tool/

Writing Tests Without GPU:

  • Use CPU compute: //TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type
  • Use interpreter: //TEST:INTERPRET(filecheck=CHECK):
  • Example test structure in tests/language-feature/lambda/lambda-0.slang

SPIRV Validation:

  • Set SLANG_RUN_SPIRV_VALIDATION=1 when using slangc -target spirv
  • Don't use system's spirv-val tool (may be outdated)

Slang Command Line Usage

IMPORTANT: Slang uses single dashes for multi-character options (not double dashes like most tools):

  • Use -help (not --help)
  • Use -target spirv (not --target spirv)
  • Use -dump-ir (not --dump-ir)
  • Use -stage compute (not --stage compute)

AVOID These Debugging Options

DO NOT USE these options as they are unmaintained, unreliable or unnecessary:

  • slangc with -dump-ast, -dump-intermediate-prefix, -dump-intermediates, -dump-ir-ids, -serial-ir, -dump-repro, -load-repro and -extract-repro.
  • slang-test with -category and -api

Architecture Overview

Core Components

Compiler Pipeline:

  • Lexer (source/compiler-core/slang-lexer.cpp): Tokenizes source code
  • Preprocessor (source/slang/slang-preprocessor.cpp): Handles #include, macros, conditionals
  • Parser (source/slang/slang-parser.cpp): Recursive descent parser producing AST
  • Semantic Checker (source/slang/slang-check.cpp): Type checking, name resolution, validation
  • IR Generation (source/slang/slang-lower-to-ir.cpp): Converts AST to Slang IR
  • IR Passes (source/slang/slang-ir-*.cpp): Optimization and lowering passes
  • Code Emission (source/slang/slang-emit-*.cpp): Target-specific code generation

Key Directories:

  • source/core/: Core utilities (strings, containers, file system, platform abstractions)
  • source/compiler-core/: Compiler infrastructure (diagnostics, downstream compilers)
  • source/slang/: Main compiler implementation (frontend, IR, backend)
  • source/slangc/: Command-line compiler tool
  • tools/: Development and testing tools
  • include/: Public API headers (slang.h, slang-gfx.h)
  • external/: - Third-party dependencies and submodules
  • prelude/: - Built-in language definitions and standard library
  • examples/: - Sample programs demonstrating Slang usage
  • tests/: - Comprehensive test suite
  • docs/: - Project documentation

Compilation Model

Key Concepts:

  • CompileRequest: Bundles options, input files, and code generation requests
  • TranslationUnit: Collection of source files (HLSL: one per file, Slang: all files together)
  • EntryPoint: Function name + pipeline stage to compile
  • Target: Output format (DXIL, SPIR-V, etc.) + capability profile

Supported Targets:

  • Direct3D 11/12 (HLSL output)
  • Vulkan (SPIR-V, GLSL output)
  • Metal (MSL output) - experimental
  • WebGPU (WGSL output) - experimental
  • CUDA/OptiX (C++ output)
  • CPU (C++ output, executables, libraries)

Development Workflow

Adding New Language Features

  1. Update lexer for new tokens (source/compiler-core/slang-lexer.cpp)
  2. Extend parser for new syntax (source/slang/slang-parser.cpp)
  3. Add semantic analysis (source/slang/slang-check-*.cpp)
  4. Implement IR generation (source/slang/slang-ir-*.cpp)
  5. Add code generation for each target backend (source/slang/slang-emit-*.cpp)
  6. Write comprehensive tests under tests/

Common Development Tasks

  • Adding an IR instruction: Update the Lua definition files in source/slang/slang-ir-insts.lua, then regenerate
  • Adding a built-in function: Add to appropriate module in prelude/
  • Adding a new target: Implement new emitter in source/slang/slang-emit-*.cpp

Debugging tools

slangc with -dump-ir

slangc with -dump-ir option is most efficient way to investigate problems that can be observed at IR level.

It will often require a use of -target and the most common combination is -dump-ir -target spirv-asm. When -dump-ir is used without -target, the compilation process may stop earlier than it should be.

Since it dumps many lines, it will be good to store the result into a file for a further investigation. The dump prints multiple sections which of each is separated by ### header. Each section visualizes the IR state on multiple steps during the compilation. It is necessary to differentiate the information on one section from one section, because the issue might be observed at a specific section.

You can also modify Slang code and insert a call to dumpIRToString() at any point of interest to dump any part of the IR to string. You can then write that string to a temp file with File::writeAllText() to analyze what is going on.

When checking the IR dump, look for type consistency or logical errors in the IR to locate the potential transformation pass at fault. Focus on passes that makes significant and systematic changes to the IR, such as specialization, inlining, type legalization, and buffer lowering passes. You may iterate this process multiple times to narrow down the issue.

InstTrace

Note that any issues in the generated target code could stem from IR passes or even the front-end type checking early in the pipeline, and you need to focus on tracking the root cause that breaks the consistency/invariants/assumptions of the IR instead of putting in band-aid fixes in the later passes or in the emit logic. The philosphy of the compiler is to keep the target code emission logic as simple and direct as possible, and most of the heavy lifting code transform is done in the IR passes.

If you encounter a bug related to a problematic instruction, it is often useful to trace the location where the instruction is created. You can use the extras/insttrace.py script to do this. For example, during debugging you find that an instruction with _debugUID=1234 is wrong, you can run the following command to trace the callstack where the instruction is created:

# From workspace root:
python3 ./extras/insttrace.py 1234 ./build/Debug/bin/slangc tests/my-test.slang -target spirv

slangc with -target spirv-asm

slangc with -target spirv-asm is the most common way to see how the given slang shader is compiled into spirv code.

When an environment variable, SLANG_RUN_SPIRV_VALIDATION=1, is set, it will also run a static SPIRV valdiation.

You can skip the validation, if needed, with a command-line argument, -skip-spirv-validation. When SPIRV validation fails, the actual spirv code is not printed. You can skip the validation with the option and print the spirv code even when it fails the validation.

slangc with -target spirv-asm -emit-spirv-via-glsl

By default, slang uses -emit-spirv-directly and slang emits from slang shader to spirv directly. When -emit-spirv-via-glsl is used, slang will translate the input slang shader to glsl and let glslang to generate spirv code. This can be useful when we want to generate a reference spirv code for a comparison.

IR System

  • Slang uses a custom SSA-based IR (not LLVM)
  • IR instructions defined in slang-ir-insts.h (generated from Lua)
  • Extensive IR pass framework for optimization and lowering
  • Target-specific legalization passes before code emission

Language Server

  • Language Server Protocol implementation in source/slang/slang-language-server.cpp
  • Supports IntelliSense, completion, diagnostics, formatting
  • Used by VS Code and Visual Studio extensions

Module System

  • Slang supports separate compilation via modules
  • Modules can be compiled to IR and linked at runtime
  • Optional obfuscation for distributed modules
  • Core language features defined as modules in prelude/

Generated files

  • The enum values starting with kIROp_ are defined in a generated file, build/source/slang/fiddle/slang-ir-insts-enum.h.fiddle

Git commit message

  • Don't mention Claude on the commit message

Cross-Platform Considerations

Supported Platforms: Windows (x64/ARM64), Linux (x64/ARM64), macOS (x64/ARM64), WebAssembly

Platform Abstractions: Use utilities in source/core/ for file system, process management, platform detection

Graphics APIs: Code generation supports all major APIs but runtime testing requires appropriate drivers/SDKs

Additional documents

The most important documents are the end-user facing user-guide documents. And it can be found under docs/user-guide/.

There is a dedicated repo, https://github.com/shader-slang/spec.git If needed, you should clone the repo under external/ directory.

Formal Specification (external/spec/specification/)

  • specification/index.bs - Main specification document
  • specification/types.md - Type system specification
  • specification/generics.md - Generics and templates specification
  • specification/interfaces.md - Interface system specification
  • specification/expressions.md - Expression evaluation rules
  • specification/declarations.md - Declaration syntax and semantics
  • specification/statements.md - Statement execution semantics
  • specification/checking.md - Type checking rules
  • specification/conversion.md - Type conversion rules
  • specification/overloading.md - Overload resolution
  • specification/lookup.md - Name lookup rules
  • specification/modules.md - Module system
  • specification/capabilities.md - Capability system
  • specification/autodiff.md - Automatic differentiation
  • specification/attributes.md - Attribute system
  • specification/lexical.md - Lexical analysis
  • specification/parsing.md - Parsing rules
  • specification/preprocessor.md - Preprocessor behavior
  • specification/execution.md - Execution model
  • specification/extensions.md - Language extensions
  • specification/subtyping.md - Subtyping relationships
  • specification/visibility.md - Visibility and access control

Feature Proposals (external/spec/proposals/)

Template and Active Proposals:

  • 000-template.md - Template for new proposals
  • 001-where-clauses.md - where clauses for generic constraints (Partially implemented)
  • 002-type-equality-constraints.md - Type equality constraints in generics
  • 003-atomic-t.md - Atomic operations and types
  • 004-initialization.md - Initialization syntax improvements
  • 005-write-only-textures.md - Write-only texture support
  • 007-variadic-generics.md - Variadic generic types and functions (Implemented)
  • 008-tuples.md - Tuple types built on variadic generics (Implemented)
  • 009-ifunc.md - Function interface types for callbacks
  • 010-new-diff-type-system.md - New automatic differentiation type system
  • 011-structured-binding.md - Structured binding declarations
  • 012-language-version-directive.md - Language version directives
  • 013-aligned-load-store.md - Aligned memory load/store operations
  • 014-extended-length-vectors.md - Extended vector length support
  • 015-descriptor-handle.md - Descriptor handle types
  • 016-slangpy.md - Python binding for Slang
  • 017-shader-record.md - Shader record data structures
  • 018-packed-data-intrinsics.md - Packed data manipulation intrinsics
  • 019-cooperative-vector.md - Cooperative vector operations
  • 020-stage-switch.md - Stage-specific code switching
  • 022-C++20-migration.md - C++20 feature migration
  • 023-cooperative-matrix.md - Cooperative matrix operations
  • 024-any-dyn-types.md - Any and dynamic types
  • 025-lambda-1.md - Lambda expressions with immutable capture (In Implementation)
  • 026-error-handling.md - Error handling mechanisms
  • 027-tuple-syntax.md - Tuple syntax improvements
  • 028-cooperative-matrix-2.md - Extended cooperative matrix support
  • 029-conditional.md - Conditional compilation features
  • 030-interface-method-default-impl.md - Default interface method implementations (In Experiment)
1+# CLAUDE.md
2
3This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
5**Repository**: shader-slang/slang - A shading language for GPU programming
6**Primary Language**: C++ with custom Slang language
7**MCP Tool Available**: `mcp__deepwiki__ask_question` with repoName: "shader-slang/slang"
8
9Reference other instruction files as well:
10
11- @.github/copilot-instructions.md
12
13## Build System and Common Commands
14
15**IMPORTANT:** On Windows, always use `cmake.exe` (not `cmake`) to ensure proper GPU test execution. Using `cmake` without the `.exe` extension may invoke WSL's cmake, which cannot run GPU tests.
16
17### Building the Project
18
19```bash
20# Configure with default settings (Ninja Multi-Config)
21cmake --preset default
22
23# Configure with visual studio 2022 settings (Preferred on Windows)
24cmake.exe --preset vs2022
25
26# Build Release/Debug binaries.
27# It can take from 5 minutes to 20 minutes depending on the machine.
28cmake --build --preset debug # Debug binary
29cmake --build --preset release # Release binary
30
31# Build specific targets
32cmake --build --preset debug --target slangc
33cmake --build --preset debug --target slang-test
34```
35
36### PR Workflow
37
381. **Label your PR**: Use "pr: non-breaking" (default) or "pr: breaking" (for ABI/language breaking changes)
392. **Include tests**: Add regression tests as `.slang` files under `tests/`
40
41### Testing
42
43slang-test must run from repository root
44
45```bash
46# Run all tests with multiple servers (takes from 10 to 30 minutes)
47./build/Release/bin/slang-test -use-test-server -server-count 8
48
49# Run specific test
50# The test file must be placed under "tests/" directory
51./build/Release/bin/slang-test tests/path/to/test.slang
52
53# Run unit tests
54./build/Release/bin/slang-test slang-unit-test-tool/
55```
56
57**Writing Tests Without GPU**:
58
59- Use CPU compute: `//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type`
60- Use interpreter: `//TEST:INTERPRET(filecheck=CHECK):`
61- Example test structure in `tests/language-feature/lambda/lambda-0.slang`
62
63**SPIRV Validation**:
64
65- Set `SLANG_RUN_SPIRV_VALIDATION=1` when using `slangc -target spirv`
66- Don't use system's `spirv-val` tool (may be outdated)
67
68### Slang Command Line Usage
69
70**IMPORTANT:** Slang uses single dashes for multi-character options (not double dashes like most tools):
71
72- Use `-help` (not `--help`)
73- Use `-target spirv` (not `--target spirv`)
74- Use `-dump-ir` (not `--dump-ir`)
75- Use `-stage compute` (not `--stage compute`)
76
77### AVOID These Debugging Options
78
79**DO NOT USE** these options as they are unmaintained, unreliable or unnecessary:
80
81- slangc with `-dump-ast`, `-dump-intermediate-prefix`, `-dump-intermediates`, `-dump-ir-ids`, `-serial-ir`, `-dump-repro`, `-load-repro` and `-extract-repro`.
82- slang-test with `-category` and `-api`
83
84## Architecture Overview
85
86### Core Components
87
88**Compiler Pipeline**:
89
90- **Lexer** (`source/compiler-core/slang-lexer.cpp`): Tokenizes source code
91- **Preprocessor** (`source/slang/slang-preprocessor.cpp`): Handles #include, macros, conditionals
92- **Parser** (`source/slang/slang-parser.cpp`): Recursive descent parser producing AST
93- **Semantic Checker** (`source/slang/slang-check.cpp`): Type checking, name resolution, validation
94- **IR Generation** (`source/slang/slang-lower-to-ir.cpp`): Converts AST to Slang IR
95- **IR Passes** (`source/slang/slang-ir-*.cpp`): Optimization and lowering passes
96- **Code Emission** (`source/slang/slang-emit-*.cpp`): Target-specific code generation
97
98**Key Directories**:
99
100- `source/core/`: Core utilities (strings, containers, file system, platform abstractions)
101- `source/compiler-core/`: Compiler infrastructure (diagnostics, downstream compilers)
102- `source/slang/`: Main compiler implementation (frontend, IR, backend)
103- `source/slangc/`: Command-line compiler tool
104- `tools/`: Development and testing tools
105- `include/`: Public API headers (`slang.h`, `slang-gfx.h`)
106- `external/`: - Third-party dependencies and submodules
107- `prelude/`: - Built-in language definitions and standard library
108- `examples/`: - Sample programs demonstrating Slang usage
109- `tests/`: - Comprehensive test suite
110- `docs/`: - Project documentation
111
112### Compilation Model
113
114**Key Concepts**:
115
116- **CompileRequest**: Bundles options, input files, and code generation requests
117- **TranslationUnit**: Collection of source files (HLSL: one per file, Slang: all files together)
118- **EntryPoint**: Function name + pipeline stage to compile
119- **Target**: Output format (DXIL, SPIR-V, etc.) + capability profile
120
121**Supported Targets**:
122
123- Direct3D 11/12 (HLSL output)
124- Vulkan (SPIR-V, GLSL output)
125- Metal (MSL output) - experimental
126- WebGPU (WGSL output) - experimental
127- CUDA/OptiX (C++ output)
128- CPU (C++ output, executables, libraries)
129
130## Development Workflow
131
132### Adding New Language Features
133
1341. Update lexer for new tokens (`source/compiler-core/slang-lexer.cpp`)
1352. Extend parser for new syntax (`source/slang/slang-parser.cpp`)
1363. Add semantic analysis (`source/slang/slang-check-*.cpp`)
1374. Implement IR generation (`source/slang/slang-ir-*.cpp`)
1385. Add code generation for each target backend (`source/slang/slang-emit-*.cpp`)
1396. Write comprehensive tests under `tests/`
140
141### Common Development Tasks
142
143- **Adding an IR instruction**: Update the Lua definition files in `source/slang/slang-ir-insts.lua`, then regenerate
144- **Adding a built-in function**: Add to appropriate module in `prelude/`
145- **Adding a new target**: Implement new emitter in `source/slang/slang-emit-*.cpp`
146
147### Debugging tools
148
149#### slangc with `-dump-ir`
150
151slangc with `-dump-ir` option is most efficient way to investigate problems that can be observed at IR level.
152
153It will often require a use of `-target` and the most common combination is `-dump-ir -target spirv-asm`.
154When `-dump-ir` is used without `-target`, the compilation process may stop earlier than it should be.
155
156Since it dumps many lines, it will be good to store the result into a file for a further investigation.
157The dump prints multiple sections which of each is separated by `### ` header.
158Each section visualizes the IR state on multiple steps during the compilation.
159It is necessary to differentiate the information on one section from one section, because the issue might be observed at a specific section.
160
161You can also modify Slang code and insert a call to `dumpIRToString()` at any point of interest to dump any part of the IR
162to string. You can then write that string to a temp file with `File::writeAllText()` to analyze what is going on.
163
164When checking the IR dump, look for type consistency or logical errors in the IR to locate the potential transformation
165pass at fault. Focus on passes that makes significant and systematic changes to the IR, such as specialization, inlining,
166type legalization, and buffer lowering passes. You may iterate this process multiple times to narrow down the issue.
167
168#### InstTrace
169
170Note that any issues in the generated target code could stem from IR passes or even the front-end type checking
171early in the pipeline, and you need to focus on tracking the root cause that breaks the consistency/invariants/assumptions
172of the IR instead of putting in band-aid fixes in the later passes or in the emit logic. The philosphy of the compiler is to
173keep the target code emission logic as simple and direct as possible, and most of the heavy lifting code transform is done
174in the IR passes.
175
176If you encounter a bug related to a problematic instruction, it is often useful to trace the location where the instruction is created.
177You can use the `extras/insttrace.py` script to do this. For example, during debugging you find that an instruction with `_debugUID=1234`
178is wrong, you can run the following command to trace the callstack where the instruction is created:
179
180```bash
181# From workspace root:
182python3 ./extras/insttrace.py 1234 ./build/Debug/bin/slangc tests/my-test.slang -target spirv
183```
184
185#### slangc with `-target spirv-asm`
186
187slangc with `-target spirv-asm` is the most common way to see how the given slang shader is compiled into spirv code.
188
189When an environment variable, `SLANG_RUN_SPIRV_VALIDATION=1`, is set, it will also run a static SPIRV valdiation.
190
191You can skip the validation, if needed, with a command-line argument, `-skip-spirv-validation`.
192When SPIRV validation fails, the actual spirv code is not printed.
193You can skip the validation with the option and print the spirv code even when it fails the validation.
194
195#### slangc with `-target spirv-asm -emit-spirv-via-glsl`
196
197By default, slang uses `-emit-spirv-directly` and slang emits from slang shader to spirv directly.
198When `-emit-spirv-via-glsl` is used, slang will translate the input slang shader to glsl and let glslang to generate spirv code.
199This can be useful when we want to generate a reference spirv code for a comparison.
200
201### IR System
202
203- Slang uses a custom SSA-based IR (not LLVM)
204- IR instructions defined in `slang-ir-insts.h` (generated from Lua)
205- Extensive IR pass framework for optimization and lowering
206- Target-specific legalization passes before code emission
207
208### Language Server
209
210- Language Server Protocol implementation in `source/slang/slang-language-server.cpp`
211- Supports IntelliSense, completion, diagnostics, formatting
212- Used by VS Code and Visual Studio extensions
213
214### Module System
215
216- Slang supports separate compilation via modules
217- Modules can be compiled to IR and linked at runtime
218- Optional obfuscation for distributed modules
219- Core language features defined as modules in `prelude/`
220
221### Generated files
222
223- The enum values starting with `kIROp_` are defined in a generated file, `build/source/slang/fiddle/slang-ir-insts-enum.h.fiddle`
224
225### Git commit message
226
227- Don't mention Claude on the commit message
228
229## Cross-Platform Considerations
230
231**Supported Platforms**: Windows (x64/ARM64), Linux (x64/ARM64), macOS (x64/ARM64), WebAssembly
232
233**Platform Abstractions**: Use utilities in `source/core/` for file system, process management, platform detection
234
235**Graphics APIs**: Code generation supports all major APIs but runtime testing requires appropriate drivers/SDKs
236
237## Additional documents
238
239The most important documents are the end-user facing user-guide documents.
240And it can be found under `docs/user-guide/`.
241
242There is a dedicated repo, https://github.com/shader-slang/spec.git
243If needed, you should clone the repo under `external/` directory.
244
245### Formal Specification (`external/spec/specification/`)
246
247- `specification/index.bs` - Main specification document
248- `specification/types.md` - Type system specification
249- `specification/generics.md` - Generics and templates specification
250- `specification/interfaces.md` - Interface system specification
251- `specification/expressions.md` - Expression evaluation rules
252- `specification/declarations.md` - Declaration syntax and semantics
253- `specification/statements.md` - Statement execution semantics
254- `specification/checking.md` - Type checking rules
255- `specification/conversion.md` - Type conversion rules
256- `specification/overloading.md` - Overload resolution
257- `specification/lookup.md` - Name lookup rules
258- `specification/modules.md` - Module system
259- `specification/capabilities.md` - Capability system
260- `specification/autodiff.md` - Automatic differentiation
261- `specification/attributes.md` - Attribute system
262- `specification/lexical.md` - Lexical analysis
263- `specification/parsing.md` - Parsing rules
264- `specification/preprocessor.md` - Preprocessor behavior
265- `specification/execution.md` - Execution model
266- `specification/extensions.md` - Language extensions
267- `specification/subtyping.md` - Subtyping relationships
268- `specification/visibility.md` - Visibility and access control
269
270### Feature Proposals (`external/spec/proposals/`)
271
272**Template and Active Proposals:**
273
274- `000-template.md` - Template for new proposals
275- `001-where-clauses.md` - `where` clauses for generic constraints (Partially implemented)
276- `002-type-equality-constraints.md` - Type equality constraints in generics
277- `003-atomic-t.md` - Atomic operations and types
278- `004-initialization.md` - Initialization syntax improvements
279- `005-write-only-textures.md` - Write-only texture support
280- `007-variadic-generics.md` - Variadic generic types and functions (Implemented)
281- `008-tuples.md` - Tuple types built on variadic generics (Implemented)
282- `009-ifunc.md` - Function interface types for callbacks
283- `010-new-diff-type-system.md` - New automatic differentiation type system
284- `011-structured-binding.md` - Structured binding declarations
285- `012-language-version-directive.md` - Language version directives
286- `013-aligned-load-store.md` - Aligned memory load/store operations
287- `014-extended-length-vectors.md` - Extended vector length support
288- `015-descriptor-handle.md` - Descriptor handle types
289- `016-slangpy.md` - Python binding for Slang
290- `017-shader-record.md` - Shader record data structures
291- `018-packed-data-intrinsics.md` - Packed data manipulation intrinsics
292- `019-cooperative-vector.md` - Cooperative vector operations
293- `020-stage-switch.md` - Stage-specific code switching
294- `022-C++20-migration.md` - C++20 feature migration
295- `023-cooperative-matrix.md` - Cooperative matrix operations
296- `024-any-dyn-types.md` - Any and dynamic types
297- `025-lambda-1.md` - Lambda expressions with immutable capture (In Implementation)
298- `026-error-handling.md` - Error handling mechanisms
299- `027-tuple-syntax.md` - Tuple syntax improvements
300- `028-cooperative-matrix-2.md` - Extended cooperative matrix support
301- `029-conditional.md` - Conditional compilation features
302- `030-interface-method-default-impl.md` - Default interface method implementations (In Experiment)