<feed xmlns='http://www.w3.org/2005/Atom'>
<title>slang.git/source/compiler-core/slang-artifact.h, branch master</title>
<subtitle>Making it easier to work with shaders</subtitle>
<id>https://git.yummers.dev/slang.git/atom?h=master</id>
<link rel='self' href='https://git.yummers.dev/slang.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/'/>
<updated>2025-06-06T21:30:06+00:00</updated>
<entry>
<title>Add command line option for separate debug info (#7178)</title>
<updated>2025-06-06T21:30:06+00:00</updated>
<author>
<name>jarcherNV</name>
<email>jarcher@nvidia.com</email>
</author>
<published>2025-06-06T21:30:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=0d16228ae22fa2e1a00e62dc099eea08da7717fe'/>
<id>urn:sha1:0d16228ae22fa2e1a00e62dc099eea08da7717fe</id>
<content type='text'>
* Add command line option for separate debug info

Add command line arg -separate-debug-info which, if provided, produces
both a .spv and a .dbg.spv file. The .dbg.spv file contains full debug
info and the .spv file has all debug info stripped out.

Also add a DebugBuildIdentifier instruction to store a unique hash in
both the output files, so they can be more easily matched together.

A matching API is provided to allow using the Slang API to retrieve a
base and debug SPIRV as well as the debug build identifier string.</content>
</entry>
<entry>
<title>format</title>
<updated>2024-10-29T06:49:26+00:00</updated>
<author>
<name>Ellie Hermaszewska</name>
<email>ellieh@nvidia.com</email>
</author>
<published>2024-10-29T06:49:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=f65d756bff8d4c5cbc15bd0322a2ae8e6b896a21'/>
<id>urn:sha1:f65d756bff8d4c5cbc15bd0322a2ae8e6b896a21</id>
<content type='text'>
* format

* Minor test fixes

* enable checking cpp format in ci</content>
</entry>
<entry>
<title>Add WGSL support for slang-test (#5174)</title>
<updated>2024-10-07T17:16:19+00:00</updated>
<author>
<name>Anders Leino</name>
<email>aleino@nvidia.com</email>
</author>
<published>2024-10-07T17:16:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=509409ef11e3b1abd1d7e1bfb540bc172aa1a817'/>
<id>urn:sha1:509409ef11e3b1abd1d7e1bfb540bc172aa1a817</id>
<content type='text'>
* Use the assembly description as target when disassembling

I believe this is a bugfix.
It seems to have worked before because up until the WGSL case, the disassembler has been
the same executable as the one producing the binary to be disassembled.

* Add Tint as a downstream compiler

This closes issue #5104.

* Add downstream compiler for Tint.
 * Tint is wrapped in a shared library, 'slang-tint' available from [1].
 * The header file for slang-tint.dll is added in external/slang-tint-headers.
* Add some boilerplate for WGSL targets.
* Add an entry point test for WGSL.

[1] https://github.com/shader-slang/dawn/releases/tag/slang-tint-0

* Add WGSL_SPIRV as supported target for Glslang

* Add WebGPU support to slang-test

This helps to address issue #5051.

* Disable lots of crashing compute tests for 'wgpu'

This closes issue #5051.

---------

Co-authored-by: Yong He &lt;yonghe@outlook.com&gt;</content>
</entry>
<entry>
<title>Initial WGSL support (#5006)</title>
<updated>2024-09-09T17:08:29+00:00</updated>
<author>
<name>Anders Leino</name>
<email>aleino@nvidia.com</email>
</author>
<published>2024-09-09T17:08:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=170558c9618252933286955c6d010c8e3735652a'/>
<id>urn:sha1:170558c9618252933286955c6d010c8e3735652a</id>
<content type='text'>
* Add WGSL as a target

This is required for #4807.

* C-like emitter: Allow the function header emission to be overloaded

WGSL-style function headers are pretty different from normal C-style headers:

Normal C-style headers:
 ReturnType Func(...)
 void VoidFunc(...)

WGSL-style headers:
  fn Func(...) -&gt; ReturnType
  fn VoidFunc(...)

This change allows the header style to be overloaded, in order to accomodate WGSL-style
headers as required to resolve issue #4807, but retains normal C-style headers as the
default implementation.

[1] https://www.w3.org/TR/WGSL/#function-declaration-sec

* C-like emitter: Allow emission of switch case selectors to be overloaded

The C-like emitter will emit code like this:

    switch(a.x)
    {

    case 0:
    case 1:
    {
       ...
    } break;

    ...

    }

This is not allowed in WGSL. Instead, selectors for cases that share a body must [1] be
separated by commas, like this:

    switch(a.x)
    {

    case 0, 1:
    {
       ...
    } break;

    ...

    }

To prepare for addressing issue #4807, this patch makes the emission of switch case
selectors overloadable.

[1] https://www.w3.org/TR/WGSL/#syntax-case_selectors

* C-like emitter: Support WGSL-style declarations

This patch helps to address issue 4807.

C-like languages declare variables like this:
i32 a;

WGSL declares variables like this:
var a : i32

The patch introduces overloads so that the forthcoming WGSL emitter can output WGSL-style
declarations, which helps to resolve #4807.

* C-like emitter: Support overloading of declarators

Unlike C-like languages, WGSL does not support the following types at the syntax level,
via declarators:
- arrays
- pointers
- references

For this reason, this patch introduces support for overloading the declarator emitter,
in order to help address issue #4807.

C-like languages:
int a[3]; // Array-ness of type is mixed into the "declarator"

WGSL:
var a : array&lt;int, 3&gt;; // Array-ness of type is part of the... type_specifier!

* C-like emitter: Allow struct declaration separator to be overridden

C-like languages use ';' as a separator, and languages like e.g. WGSL use ','.
This change prepares for addressing issue #4807.

* C-like emitter: Allow overriding of whether pointer-like syntax is necessary

Things like e.g. structured buffers map to "ptr-to-array" in WGSL, but ptr-typed
expressions don't always need C-style pointer-like syntax.
Therefore, make it overrideable whether or not such syntax is emitted in various cases in
order to address #4807.

* C-like emitter: Emit parenthesis to avoid warning about &amp; and + precedence

This helps with #4807 because WGSL compilers (e.g. Tint) treat absence of parenthesis as
an error.

* C-like emitter: Add hook for emitting struct field attributes

WGSL requires @align attributes to specify explicit field alignment in certain cases.
Thus, this patch prepares for addressing #4807.

* C-like emitter: Add hook for emitting global param types

Declarations of structured buffers map to global array declarations in WGSL.
However, in all other cases such as when structured buffers are used in operands, their
types map to *ptr*-to-array.
This patch makes it possible for the WGSL back-end to say that structured buffers
generally map to "ptr-to-array" types, but still have a special case of just "array" when
declaring the global shader parameter.

Thus, this patch helps with addressing #4807.

* IR lowering: Use std140 for WGSL uniform buffers

This patch just cuts out some logic that prevented std140 to be chosen for WGSL uniform
buffers.

Note that WGSL buffers in the uniform address space is not quite std140, but for now it's
close enough to avoid compile issues.

Later on, a custom layout should be created for WGSL uniform buffers.
When that's done, this change will be revisited, but for now it helps to resolve #4807.

* Don't emit line directives in WGSL by default

WGSL does not support line directives [1].
The plan currently seems to be to instead support source-map [2].
This is part of addressing issue #4807.

[1] https://github.com/gpuweb/gpuweb/issues/606
[2] https://github.com/mozilla/source-map

* WGSL IR legalization: Map SV's

The implementation closely follows the cooresponding one for Metal.

Supported:
- DispatchThreadID
- GroupID
- GroupThreadID
- GroupThreadID

Unsupported:
- GSInstanceID

This is not complete, but it helps to address #4807.

* WGSL emitter: Add support for basic language constructs

A lot of the basics are added in order to generate correct WGSL code for basic Slang language constructs.
This addresses issue #4807.

This adds support for at least the following:
- statments
 - if statements
 - ternary operator
 - while statement
 - for statements
 - variable declarations
 - switch statements
  - Note: Slang may emit non-constant case expressions, see issue 4834
- literals
 - integer literals
  - u?int[16|32|64]_t
  - float and half literals
  - bool literals
  - vector literals and splatting (e.g 1.xxx)
- function definitions
- assignments
 - +=, *=, /=
 - array assignments
 - vector assignments/updates
  - swizzles of other vectors
  - from matrix rows ('m[i]' notation)
  - from matrix cols (using swizzle notation, e.g 'm._11_12_13')
 - matrix assignments/updates
  - to rows ('m[i]' notation)
  - to cols (using swizzle notation, e.g 'm._11_12_13')
- declarations
 - arrays

[1] https://www.w3.org/TR/WGSL/#syntax-switch_body

* Add some WGSL capabilities

This patch registers some WGSL capabilities required to pass many of the initial compute
shader compile tests.
Many capabilities still remain to be added -- this is just an initial set to help resolve
issue #4807.

- asint
- min and max
- cos and sin
- all and any

* WGSL and C-like emitters: Add hack to bitcast case expression

In WGSL, the switch condition and case types must match.
https://www.w3.org/TR/WGSL/#switch-statement

Slang currently allows these types to mismatch, as pointed out in #4921.

Issue #4921 should eventually be addressed in the front-end by a patch like [1].
However, at the moment that would break Falcor tests.
Thus, this patch temporarily works around the issue in the WGSL emitter only in order to
help resolve #4807.

In the future, the Falcor tests should be fixed, this patch should be dropped and [1]
should be merged instead.

[1] a32156ef52f43b8503b2c77f2f1d51220ab9bdea</content>
</entry>
<entry>
<title>Move the file public header files to `include` dir (#4636)</title>
<updated>2024-07-17T17:53:19+00:00</updated>
<author>
<name>kaizhangNV</name>
<email>149626564+kaizhangNV@users.noreply.github.com</email>
</author>
<published>2024-07-17T17:53:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=2db15080085856ed9b5f20642dbb354aac59a888'/>
<id>urn:sha1:2db15080085856ed9b5f20642dbb354aac59a888</id>
<content type='text'>
* Move the file public header files to `include` dir

Close the issue (#4635).

Move the following headers files to a `include` dir
located at root dir of slang repo:

 slang-com-helper.h -&gt; include/slang-com-helper.h
 slang-com-ptr.h -&gt; include/slang-com-ptr.h
 slang-gfx.h -&gt; include/slang-gfx.h
 slang.h -&gt; include/slang.h

Change cmake/SlangTarget.cmake to add include path to
every target, and change the source file to use
"#include &lt;slang.h&gt;" to include the public headers.

The source code update is by the script like follow:

```
fileNames_slang=$(grep -r "\".*slang\.h\"" source/ -l)

for fileName in "${fileNames_slang[@]}"
do
    echo "$fileName"
    sed -i "s/\".*slang\.h\"/\"slang\.h\"/" $fileName
done
```

* Fix the test issues

* Fix cpu test issues by adding include seach path

* Update cmake to not add include path for every target

Also change "#include &lt;slang.h&gt;" to "include "slang.h" " to
make the coding style consistent with other slang code.

* Change public include to private include for unit-test and slang-glslang</content>
</entry>
<entry>
<title>s/depreciated/deprecated/ (#3153)</title>
<updated>2023-08-29T03:26:27+00:00</updated>
<author>
<name>Ellie Hermaszewska</name>
<email>ellieh@nvidia.com</email>
</author>
<published>2023-08-29T03:26:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=af363c02bf0fa2502c14f454965adff87170ff15'/>
<id>urn:sha1:af363c02bf0fa2502c14f454965adff87170ff15</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Implement FileCheck tests for several test commands (#2747)</title>
<updated>2023-04-11T15:28:58+00:00</updated>
<author>
<name>Ellie Hermaszewska</name>
<email>ellieh@nvidia.com</email>
</author>
<published>2023-04-11T15:28:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=d6dd38f5210fedfd96ff088ef9b8a2424c79c4f0'/>
<id>urn:sha1:d6dd38f5210fedfd96ff088ef9b8a2424c79c4f0</id>
<content type='text'>
* Add missing expected.txt for test

* Diagnostics -&gt; StdWriters in render test

* Allow specifying several test prefixes to run

`slang-test -- tests/foo tests/bar`

* Squash warnings in some tests

* Enable gfx debug layer in gfx test util

Makes this issue present consistently: https://github.com/shader-slang/slang/issues/2766

* Allow DebugDevice to return interfaces instantiated by the debugged object

* Check that we actaully have a shader cache for shader cache tests

* Implement FileCheck tests for several test commands

- SIMPLE, SIMPLE_EX
- SIMPLE_LINE
- REFLECTION, CPU_REFLECTION
- CROSS_COMPILE

It does not currently support the render tests or the COMPARE_COMPUTE commands

It is invoked by adding `(filecheck=MY_FILECHECK_PREFIX)` to the test command, for example

TEST:CROSS_COMPILE(filecheck=SPIRV): -target spirv-assembly

* Move LLVM FileCheck interface to slang-llvm

* Neaten slang-test tests

* Refine handling of expected output in slang-test

* Add example FileCheck buffer test

* Add cuda-kernel-export tests

Which were waiting on FileCheck

* Bump vs project files

* Make createLLVMFileCheck_V1 return a void* rather than specifically an IFileCheck

* Remove use of CharSlice from filecheck interface

* Bump slang-llvm version

---------

Co-authored-by: jsmall-nvidia &lt;jsmall@nvidia.com&gt;</content>
</entry>
<entry>
<title>Artifact simplification (#2781)</title>
<updated>2023-04-11T14:18:18+00:00</updated>
<author>
<name>jsmall-nvidia</name>
<email>jsmall@nvidia.com</email>
</author>
<published>2023-04-11T14:18:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=20ea33f3321738e7c1b4cad7bdcaedcdb54dd0f0'/>
<id>urn:sha1:20ea33f3321738e7c1b4cad7bdcaedcdb54dd0f0</id>
<content type='text'>
* #include an absolute path didn't work - because paths were taken to always be relative.

* WIP simplifying artifact interface.

* Use ContainedKind.

* Remove LazyCastableList.
Use ContainedKind for find.

* Remove ICastableList.

* Remove need for ICastableList.

* Remove IArtifactContainer.

* Small fixes.

* Small improvements around Artifact.

* Make explicit find is for *representations* that can cast.
Fix bug in handling casting in lookup.

* Made associated items artifacts too.

* Small fixes.

* Small improvements around writing a container.</content>
</entry>
<entry>
<title>Add PyTorch C++ binding generation. (#2734)</title>
<updated>2023-03-26T20:59:11+00:00</updated>
<author>
<name>Yong He</name>
<email>yonghe@outlook.com</email>
</author>
<published>2023-03-26T20:59:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=d64ee86a3130f8eeb75d09193c38c621d7565eba'/>
<id>urn:sha1:d64ee86a3130f8eeb75d09193c38c621d7565eba</id>
<content type='text'>
* Add PyTorch C++ binding generation.

* fix

---------

Co-authored-by: Yong He &lt;yhe@nvidia.com&gt;</content>
</entry>
<entry>
<title>Source map obfuscation  (#2717)</title>
<updated>2023-03-22T16:04:33+00:00</updated>
<author>
<name>jsmall-nvidia</name>
<email>jsmall@nvidia.com</email>
</author>
<published>2023-03-22T16:04:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=d4f99c8bac8b28f18c864a717d8833db6a1c872d'/>
<id>urn:sha1:d4f99c8bac8b28f18c864a717d8833db6a1c872d</id>
<content type='text'>
* #include an absolute path didn't work - because paths were taken to always be relative.

* WIP source map.

* Split out handling of RttiTypeFuncs to a map type.

* Make RttiTypeFuncsMap hold default impls.

* Slightly more sophisticated RttiTypeFuncsMap

* Source map decoding.

* Fix tabs.

* Fix asserts due to negative values.

* Use less obscure mechanisms in SourceMap.

* Source map decoding.
Simplifying SourceMap usage.

* First attempt at ouputting a source map as part of emit.

* Added support for -source-map option. SourceMap is added to the artifact.

* Small improvements around column calculation in SourceWriter.

* Source Loc obuscation WIP.

* Fix some issues around SourceMap obfuscation.

* Split out obfuscation into its own file.

* Keep obfuscated SourceMap even through serialization bottleneck.</content>
</entry>
</feed>
