yum-mirror/slang

Making it easier to work with shaders

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

Xiang HongMinor Documentation Update to Remove Outdated Section (#8606)e23b5fa99

master
21.5 KiB297 linesraw
1<ul class="toc_root_list"><li data-link="index"><span>Slang User's Guide</span>
2<ul class="toc_list">
3<li data-link="introduction"><span>Introduction</span>
4<ul class="toc_list">
5<li data-link="introduction#why-use-slang"><span>Why use Slang?</span></li>
6<li data-link="introduction#who-is-slang-for"><span>Who is Slang for?</span></li>
7<li data-link="introduction#who-is-this-guide-for"><span>Who is this guide for?</span></li>
8<li data-link="introduction#goals-and-non-goals"><span>Goals and Non-Goals</span></li>
9</ul>
10</li>
11<li data-link="get-started"><span>Getting Started with Slang</span>
12<ul class="toc_list">
13<li data-link="get-started#installation"><span>Installation</span></li>
14<li data-link="get-started#your-first-slang-shader"><span>Your first Slang shader</span></li>
15<li data-link="get-started#the-full-example"><span>The full example</span></li>
16</ul>
17</li>
18<li data-link="conventional-features"><span>Conventional Language Features</span>
19<ul class="toc_list">
20<li data-link="conventional-features#types"><span>Types</span></li>
21<li data-link="conventional-features#expressions"><span>Expressions</span></li>
22<li data-link="conventional-features#statements"><span>Statements</span></li>
23<li data-link="conventional-features#functions"><span>Functions</span></li>
24<li data-link="conventional-features#preprocessor"><span>Preprocessor</span></li>
25<li data-link="conventional-features#attributes"><span>Attributes</span></li>
26<li data-link="conventional-features#global-variables-and-shader-parameters"><span>Global Variables and Shader Parameters</span></li>
27<li data-link="conventional-features#shader-entry-points"><span>Shader Entry Points</span></li>
28<li data-link="conventional-features#mixed-shader-entry-points"><span>Mixed Shader Entry Points</span></li>
29<li data-link="conventional-features#auto-generated-constructors"><span>Auto-Generated Constructors</span></li>
30<li data-link="conventional-features#initializer-lists"><span>Initializer Lists</span></li>
31</ul>
32</li>
33<li data-link="convenience-features"><span>Basic Convenience Features</span>
34<ul class="toc_list">
35<li data-link="convenience-features#type-inference-in-variable-definitions"><span>Type Inference in Variable Definitions</span></li>
36<li data-link="convenience-features#immutable-values"><span>Immutable Values</span></li>
37<li data-link="convenience-features#namespaces"><span>Namespaces</span></li>
38<li data-link="convenience-features#member-functions"><span>Member functions</span></li>
39<li data-link="convenience-features#properties"><span>Properties</span></li>
40<li data-link="convenience-features#initializers"><span>Initializers</span></li>
41<li data-link="convenience-features#operator-overloading"><span>Operator Overloading</span></li>
42<li data-link="convenience-features#subscript-operator"><span>Subscript Operator</span></li>
43<li data-link="convenience-features#tuple-types"><span>Tuple Types</span></li>
44<li data-link="convenience-features#optionalt-type"><span>`Optional&lt;T&gt;` type</span></li>
45<li data-link="convenience-features#conditionalt-bool-condition-type"><span>`Conditional&lt;T, bool condition&gt;` Type</span></li>
46<li data-link="convenience-features#if_let-syntax"><span>`if_let` syntax</span></li>
47<li data-link="convenience-features#reinterprett-operation"><span>`reinterpret&lt;T&gt;` operation</span></li>
48<li data-link="convenience-features#pointers-limited"><span>Pointers (limited)</span></li>
49<li data-link="convenience-features#descriptorhandle-for-bindless-descriptor-access"><span>`DescriptorHandle` for Bindless Descriptor Access</span></li>
50<li data-link="convenience-features#extensions"><span>Extensions</span></li>
51<li data-link="convenience-features#multi-level-break"><span>Multi-level break</span></li>
52<li data-link="convenience-features#force-inlining"><span>Force inlining</span></li>
53<li data-link="convenience-features#error-handling"><span>Error handling</span></li>
54<li data-link="convenience-features#special-scoping-syntax"><span>Special Scoping Syntax</span></li>
55<li data-link="convenience-features#user-defined-attributes-experimental"><span>User Defined Attributes (Experimental)</span></li>
56</ul>
57</li>
58<li data-link="modules"><span>Modules and Access Control</span>
59<ul class="toc_list">
60<li data-link="modules#defining-a-module"><span>Defining a Module</span></li>
61<li data-link="modules#importing-a-module"><span>Importing a Module</span></li>
62<li data-link="modules#access-control"><span>Access Control</span></li>
63<li data-link="modules#organizing-file-structure-of-modules"><span>Organizing File Structure of Modules</span></li>
64<li data-link="modules#legacy-modules"><span>Legacy Modules</span></li>
65</ul>
66</li>
67<li data-link="capabilities"><span>Capabilities</span>
68<ul class="toc_list">
69<li data-link="capabilities#capability-atoms-and-capability-requirements"><span>Capability Atoms and Capability Requirements</span></li>
70<li data-link="capabilities#conflicting-capabilities"><span>Conflicting Capabilities</span></li>
71<li data-link="capabilities#capabilities-between-parent-and-members"><span>Capabilities Between Parent and Members</span></li>
72<li data-link="capabilities#capabilities-between-subtype-and-supertype"><span>Capabilities Between Subtype and Supertype</span></li>
73<li data-link="capabilities#capabilities-between-requirement-and-implementation"><span>Capabilities Between Requirement and Implementation</span></li>
74<li data-link="capabilities#capabilities-of-functions"><span>Capabilities of Functions</span></li>
75<li data-link="capabilities#capability-aliases"><span>Capability Aliases</span></li>
76<li data-link="capabilities#validation-of-capability-requirements"><span>Validation of Capability Requirements</span></li>
77</ul>
78</li>
79<li data-link="interfaces-generics"><span>Interfaces and Generics</span>
80<ul class="toc_list">
81<li data-link="interfaces-generics#interfaces"><span>Interfaces</span></li>
82<li data-link="interfaces-generics#generics"><span>Generics</span></li>
83<li data-link="interfaces-generics#supported-constructs-in-interface-definitions"><span>Supported Constructs in Interface Definitions</span></li>
84<li data-link="interfaces-generics#associated-types"><span>Associated Types</span></li>
85<li data-link="interfaces-generics#generic-value-parameters"><span>Generic Value Parameters</span></li>
86<li data-link="interfaces-generics#type-equality-constraints"><span>Type Equality Constraints</span></li>
87<li data-link="interfaces-generics#interface-typed-values"><span>Interface-typed Values</span></li>
88<li data-link="interfaces-generics#extending-a-type-with-additional-interface-conformances"><span>Extending a Type with Additional Interface Conformances</span></li>
89<li data-link="interfaces-generics#is-and-as-operator"><span>`is` and `as` Operator</span></li>
90<li data-link="interfaces-generics#generic-interfaces"><span>Generic Interfaces</span></li>
91<li data-link="interfaces-generics#generic-extensions"><span>Generic Extensions</span></li>
92<li data-link="interfaces-generics#extensions-to-interfaces"><span>Extensions to Interfaces</span></li>
93<li data-link="interfaces-generics#variadic-generics"><span>Variadic Generics</span></li>
94<li data-link="interfaces-generics#builtin-interfaces"><span>Builtin Interfaces</span></li>
95</ul>
96</li>
97<li data-link="autodiff"><span>Automatic Differentiation</span>
98<ul class="toc_list">
99<li data-link="autodiff#auto-diff-operations-fwd_diff-and-bwd_diff"><span>Auto-diff operations `fwd_diff` and `bwd_diff`</span></li>
100<li data-link="autodiff#differentiable-type-system"><span>Differentiable Type System</span></li>
101<li data-link="autodiff#user-defined-derivative-functions"><span>User-Defined Derivative Functions</span></li>
102<li data-link="autodiff#using-auto-diff-with-generics"><span>Using Auto-diff with Generics</span></li>
103<li data-link="autodiff#using-auto-diff-with-interface-requirements-and-interface-types"><span>Using Auto-diff with Interface Requirements and Interface Types</span></li>
104<li data-link="autodiff#primal-substitute-functions"><span>Primal Substitute Functions</span></li>
105<li data-link="autodiff#working-with-mixed-differentiable-and-non-differentiable-code"><span>Working with Mixed Differentiable and Non-Differentiable Code</span></li>
106<li data-link="autodiff#higher-order-differentiation"><span>Higher-Order Differentiation</span></li>
107<li data-link="autodiff#restrictions-and-known-issues"><span>Restrictions and Known Issues</span></li>
108<li data-link="autodiff#reference"><span>Reference</span></li>
109</ul>
110</li>
111<li data-link="compiling"><span>Compiling Code with Slang</span>
112<ul class="toc_list">
113<li data-link="compiling#concepts"><span>Concepts</span></li>
114<li data-link="compiling#command-line-compilation-with-slangc"><span>Command-Line Compilation with `slangc`</span></li>
115<li data-link="compiling#using-the-compilation-api"><span>Using the Compilation API</span></li>
116<li data-link="compiling#multithreading"><span>Multithreading</span></li>
117<li data-link="compiling#compiler-options"><span>Compiler Options</span></li>
118<li data-link="compiling#debugging"><span>Debugging</span></li>
119</ul>
120</li>
121<li data-link="reflection"><span>Using the Reflection API</span>
122<ul class="toc_list">
123<li data-link="reflection#compiling-a-program"><span>Compiling a Program</span></li>
124<li data-link="reflection#types-and-variables"><span>Types and Variables</span></li>
125<li data-link="reflection#layout-for-types-and-variables"><span>Layout for Types and Variables</span></li>
126<li data-link="reflection#programs-and-scopes"><span>Programs and Scopes</span></li>
127<li data-link="reflection#calculating-cumulative-offsets"><span>Calculating Cumulative Offsets</span></li>
128<li data-link="reflection#determining-whether-parameters-are-used"><span>Determining Whether Parameters Are Used</span></li>
129<li data-link="reflection#conclusion"><span>Conclusion</span></li>
130</ul>
131</li>
132<li data-link="targets"><span>Supported Compilation Targets</span>
133<ul class="toc_list">
134<li data-link="targets#background-and-terminology"><span>Background and Terminology</span></li>
135<li data-link="targets#direct3d-11"><span>Direct3D 11</span></li>
136<li data-link="targets#direct3d-12"><span>Direct3D 12</span></li>
137<li data-link="targets#vulkan"><span>Vulkan</span></li>
138<li data-link="targets#opengl"><span>OpenGL</span></li>
139<li data-link="targets#metal"><span>Metal</span></li>
140<li data-link="targets#cuda-and-optix"><span>CUDA and OptiX</span></li>
141<li data-link="targets#cpu-compute"><span>CPU Compute</span></li>
142<li data-link="targets#webgpu"><span>WebGPU</span></li>
143<li data-link="targets#summary"><span>Summary</span></li>
144</ul>
145</li>
146<li data-link="link-time-specialization"><span>Link-time Specialization and Module Precompilation</span>
147<ul class="toc_list">
148<li data-link="link-time-specialization#link-time-constants"><span>Link-time Constants</span></li>
149<li data-link="link-time-specialization#link-time-types"><span>Link-time Types</span></li>
150<li data-link="link-time-specialization#providing-default-settings"><span>Providing Default Settings</span></li>
151<li data-link="link-time-specialization#using-precompiling-modules-with-the-api"><span>Using Precompiling Modules with the API</span></li>
152<li data-link="link-time-specialization#additional-remarks"><span>Additional Remarks</span></li>
153</ul>
154</li>
155<li data-link="11-language-version"><span>language slang 2026</span>
156<ul class="toc_list">
157<li data-link="11-language-version#the-legacy-slang-language"><span>The Legacy Slang Language</span></li>
158<li data-link="11-language-version#slang-2025"><span>Slang 2025</span></li>
159<li data-link="11-language-version#slang-2026"><span>Slang 2026</span></li>
160</ul>
161</li>
162<li data-link="a1-special-topics"><span>Special Topics</span>
163<ul class="toc_list">
164<li data-link="a1-01-matrix-layout"><span>Handling Matrix Layout Differences on Different Platforms</span>
165<ul class="toc_list">
166<li data-link="a1-01-matrix-layout#two-conventions-of-matrix-transform-math"><span>Two conventions of matrix transform math</span></li>
167<li data-link="a1-01-matrix-layout#discussion"><span>Discussion</span></li>
168<li data-link="a1-01-matrix-layout#matrix-layout"><span>Matrix Layout</span></li>
169<li data-link="a1-01-matrix-layout#overriding-default-matrix-layout"><span>Overriding default matrix layout</span></li>
170</ul>
171</li>
172<li data-link="a1-03-obfuscation"><span>Obfuscation</span>
173<ul class="toc_list">
174<li data-link="a1-03-obfuscation#obfuscation-in-slang"><span>Obfuscation in Slang</span></li>
175<li data-link="a1-03-obfuscation#using-an-obfuscated-module"><span>Using An Obfuscated Module</span></li>
176<li data-link="a1-03-obfuscation#accessing-source-maps"><span>Accessing Source Maps</span></li>
177<li data-link="a1-03-obfuscation#accessing-source-maps-without-files"><span>Accessing Source Maps without Files</span></li>
178<li data-link="a1-03-obfuscation#emit-source-maps"><span>Emit Source Maps</span></li>
179<li data-link="a1-03-obfuscation#issuesfuture-work"><span>Issues/Future Work</span></li>
180</ul>
181</li>
182<li data-link="a1-04-interop"><span>Interoperation with Target-Specific Code</span>
183<ul class="toc_list">
184<li data-link="a1-04-interop#defining-intrinsic-functions-for-textual-targets"><span>Defining Intrinsic Functions for Textual Targets</span></li>
185<li data-link="a1-04-interop#defining-intrinsic-types"><span>Defining Intrinsic Types</span></li>
186<li data-link="a1-04-interop#injecting-preludes"><span>Injecting Preludes</span></li>
187<li data-link="a1-04-interop#managing-cross-platform-code"><span>Managing Cross-Platform Code</span></li>
188<li data-link="a1-04-interop#inline-spirv-assembly"><span>Inline SPIRV Assembly</span></li>
189</ul>
190</li>
191<li data-link="a1-05-uniformity"><span>Uniformity Analysis</span>
192<ul class="toc_list">
193<li data-link="a1-05-uniformity#treat-values-as-uniform"><span>Treat Values as Uniform</span></li>
194<li data-link="a1-05-uniformity#treat-function-return-values-as-non-uniform"><span>Treat Function Return Values as Non-uniform</span></li>
195</ul>
196</li>
197</ul>
198</li>
199<li data-link="a2-target-specific-features"><span>Target-Specific Features</span>
200<ul class="toc_list">
201<li data-link="spirv-target-specific"><span>SPIR-V-Specific Functionalities</span>
202<ul class="toc_list">
203<li data-link="spirv-target-specific#experimental-support-for-the-older-versions-of-spir-v"><span>Experimental support for the older versions of SPIR-V</span></li>
204<li data-link="spirv-target-specific#memory-model"><span>Memory model</span></li>
205<li data-link="spirv-target-specific#combined-texture-sampler"><span>Combined texture sampler</span></li>
206<li data-link="spirv-target-specific#system-value-semantics"><span>System-Value semantics</span></li>
207<li data-link="spirv-target-specific#using-sv_instanceid-and-sv_vertexid-with-spir-v-target"><span>Using SV_InstanceID and SV_VertexID with SPIR-V target</span></li>
208<li data-link="spirv-target-specific#behavior-of-discard-after-spir-v-16"><span>Behavior of `discard` after SPIR-V 1.6</span></li>
209<li data-link="spirv-target-specific#supported-hlsl-features-when-targeting-spir-v"><span>Supported HLSL features when targeting SPIR-V</span></li>
210<li data-link="spirv-target-specific#unsupported-glsl-keywords-when-targeting-spir-v"><span>Unsupported GLSL keywords when targeting SPIR-V</span></li>
211<li data-link="spirv-target-specific#supported-atomic-types-for-each-target"><span>Supported atomic types for each target</span></li>
212<li data-link="spirv-target-specific#constantbuffer-structuredbuffer-and-byteaddressbuffer"><span>ConstantBuffer, StructuredBuffer and ByteAddressBuffer</span></li>
213<li data-link="spirv-target-specific#parameterblock-for-spir-v-target"><span>ParameterBlock for SPIR-V target</span></li>
214<li data-link="spirv-target-specific#push-constants"><span>Push Constants</span></li>
215<li data-link="spirv-target-specific#specialization-constants"><span>Specialization Constants</span></li>
216<li data-link="spirv-target-specific#spir-v-specific-attributes"><span>SPIR-V specific Attributes </span></li>
217<li data-link="spirv-target-specific#multiple-entry-points-support"><span>Multiple entry points support</span></li>
218<li data-link="spirv-target-specific#global-memory-pointers"><span>Global memory pointers</span></li>
219<li data-link="spirv-target-specific#matrix-type-translation"><span>Matrix type translation</span></li>
220<li data-link="spirv-target-specific#legalization"><span>Legalization</span></li>
221<li data-link="spirv-target-specific#tessellation"><span>Tessellation</span></li>
222<li data-link="spirv-target-specific#spir-v-specific-compiler-options"><span>SPIR-V specific Compiler options</span></li>
223</ul>
224</li>
225<li data-link="metal-target-specific"><span>Metal-Specific Functionalities</span>
226<ul class="toc_list">
227<li data-link="metal-target-specific#entry-point-parameter-handling"><span>Entry Point Parameter Handling</span></li>
228<li data-link="metal-target-specific#system-value-semantics"><span>System-Value semantics</span></li>
229<li data-link="metal-target-specific#interpolation-modifiers"><span>Interpolation Modifiers</span></li>
230<li data-link="metal-target-specific#resource-types"><span>Resource Types</span></li>
231<li data-link="metal-target-specific#array-types"><span>Array Types</span></li>
232<li data-link="metal-target-specific#matrix-layout"><span>Matrix Layout</span></li>
233<li data-link="metal-target-specific#mesh-shader-support"><span>Mesh Shader Support</span></li>
234<li data-link="metal-target-specific#header-inclusions-and-namespace"><span>Header Inclusions and Namespace</span></li>
235<li data-link="metal-target-specific#parameter-blocks-and-argument-buffers"><span>Parameter blocks and Argument Buffers</span></li>
236<li data-link="metal-target-specific#struct-parameter-flattening"><span>Struct Parameter Flattening</span></li>
237<li data-link="metal-target-specific#return-value-handling"><span>Return Value Handling</span></li>
238<li data-link="metal-target-specific#value-type-conversion"><span>Value Type Conversion</span></li>
239<li data-link="metal-target-specific#conservative-rasterization"><span>Conservative Rasterization</span></li>
240<li data-link="metal-target-specific#address-space-assignment"><span>Address Space Assignment</span></li>
241<li data-link="metal-target-specific#explicit-parameter-binding"><span>Explicit Parameter Binding</span></li>
242<li data-link="metal-target-specific#specialization-constants"><span>Specialization Constants</span></li>
243</ul>
244</li>
245<li data-link="wgsl-target-specific"><span>WGSL-Specific Functionalities</span>
246<ul class="toc_list">
247<li data-link="wgsl-target-specific#system-value-semantics"><span>System-Value semantics</span></li>
248<li data-link="wgsl-target-specific#supported-hlsl-features-when-targeting-wgsl"><span>Supported HLSL features when targeting WGSL</span></li>
249<li data-link="wgsl-target-specific#supported-atomic-types"><span>Supported atomic types</span></li>
250<li data-link="wgsl-target-specific#constantbuffer-rwrasterizerorderedstructuredbuffer-rwrasterizerorderedbyteaddressbuffer"><span>ConstantBuffer, (RW/RasterizerOrdered)StructuredBuffer, (RW/RasterizerOrdered)ByteAddressBuffer</span></li>
251<li data-link="wgsl-target-specific#interlocked-operations"><span>Interlocked operations</span></li>
252<li data-link="wgsl-target-specific#entry-point-parameter-handling"><span>Entry Point Parameter Handling</span></li>
253<li data-link="wgsl-target-specific#parameter-blocks"><span>Parameter blocks</span></li>
254<li data-link="wgsl-target-specific#write-only-textures"><span>Write-only Textures</span></li>
255<li data-link="wgsl-target-specific#pointers"><span>Pointers</span></li>
256<li data-link="wgsl-target-specific#address-space-assignment"><span>Address Space Assignment</span></li>
257<li data-link="wgsl-target-specific#matrix-type-translation"><span>Matrix type translation</span></li>
258<li data-link="wgsl-target-specific#explicit-parameter-binding"><span>Explicit Parameter Binding</span></li>
259<li data-link="wgsl-target-specific#specialization-constants"><span>Specialization Constants</span></li>
260</ul>
261</li>
262<li data-link="glsl-target-specific"><span>GLSL-Specific Functionalities</span>
263<ul class="toc_list">
264<li data-link="glsl-target-specific#combined-texture-sampler"><span>Combined Texture Sampler</span></li>
265<li data-link="glsl-target-specific#system-value-semantics"><span>System-Value Semantics</span></li>
266<li data-link="glsl-target-specific#discard-statement"><span>`discard` Statement</span></li>
267<li data-link="glsl-target-specific#hlsl-features-supported-in-glsl"><span>HLSL Features Supported in GLSL</span></li>
268<li data-link="glsl-target-specific#atomic-types"><span>Atomic Types</span></li>
269<li data-link="glsl-target-specific#buffer-types"><span>Buffer Types</span></li>
270<li data-link="glsl-target-specific#matrix-layout"><span>Matrix Layout</span></li>
271<li data-link="glsl-target-specific#entry-points"><span>Entry Points</span></li>
272<li data-link="glsl-target-specific#specialization-constants"><span>Specialization Constants</span></li>
273<li data-link="glsl-target-specific#attributes-and-layout-qualifiers"><span>Attributes and Layout Qualifiers</span></li>
274<li data-link="glsl-target-specific#glsl-specific-compiler-options"><span>GLSL-Specific Compiler Options</span></li>
275</ul>
276</li>
277</ul>
278</li>
279<li data-link="reference"><span>Reference</span>
280<ul class="toc_list">
281<li data-link="a3-01-reference-capability-profiles"><span>Capability Profiles</span>
282</li>
283<li data-link="a3-02-reference-capability-atoms"><span>Capability Atoms</span>
284<ul class="toc_list">
285<li data-link="a3-02-reference-capability-atoms#targets"><span>Targets</span></li>
286<li data-link="a3-02-reference-capability-atoms#stages"><span>Stages</span></li>
287<li data-link="a3-02-reference-capability-atoms#versions"><span>Versions</span></li>
288<li data-link="a3-02-reference-capability-atoms#extensions"><span>Extensions</span></li>
289<li data-link="a3-02-reference-capability-atoms#compound-capabilities"><span>Compound Capabilities</span></li>
290<li data-link="a3-02-reference-capability-atoms#other"><span>Other</span></li>
291</ul>
292</li>
293</ul>
294</li>
295</ul>
296</li>
297</ul>