<feed xmlns='http://www.w3.org/2005/Atom'>
<title>slang.git/source/compiler-core/slang-artifact-desc-util.cpp, 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-04-28T18:42:22+00:00</updated>
<entry>
<title>Add Slang Byte Code generation and interpreter. (#6896)</title>
<updated>2025-04-28T18:42:22+00:00</updated>
<author>
<name>Yong He</name>
<email>yonghe@outlook.com</email>
</author>
<published>2025-04-28T18:42:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=c39c29bf4c52a85d7c83cc8b66ae45e265f9e078'/>
<id>urn:sha1:c39c29bf4c52a85d7c83cc8b66ae45e265f9e078</id>
<content type='text'>
* Add Slang Byte Code generation and interpreter.

* Fix compile issues.

* format code

* More compile fix.

* Fix clang issue.

* Fix more clang issues.

* Another clang fix.

* Fix clang issues.

* Fix another clang issue.

* Fix wasm build.

* Update building.md

* Fix test-server.

* Fix compile error.

* Fix bug.

---------

Co-authored-by: slangbot &lt;186143334+slangbot@users.noreply.github.com&gt;</content>
</entry>
<entry>
<title>Move switch statement bodies to their own lines (#5493)</title>
<updated>2024-11-05T17:47:26+00:00</updated>
<author>
<name>Ellie Hermaszewska</name>
<email>ellieh@nvidia.com</email>
</author>
<published>2024-11-05T17:47:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=b118451e301d734e3e783b3acdf871f3f6ea851c'/>
<id>urn:sha1:b118451e301d734e3e783b3acdf871f3f6ea851c</id>
<content type='text'>
* Move switch statement bodies to their own lines

* format

---------

Co-authored-by: Yong He &lt;yonghe@outlook.com&gt;</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>preparation for clang format (#5422)</title>
<updated>2024-10-29T05:59:28+00:00</updated>
<author>
<name>Ellie Hermaszewska</name>
<email>ellieh@nvidia.com</email>
</author>
<published>2024-10-29T05:59:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=a729c15e9dce9f5116a38afc66329ab2ca4cea54'/>
<id>urn:sha1:a729c15e9dce9f5116a38afc66329ab2ca4cea54</id>
<content type='text'>
* Clang-format excludes

* Add .clang-format

* Don't clang-format in external

* Missing includes and forward declarations

* Replace wonky include-once macro name

* neaten include naming

* Add clang-format to formatting script

* Add xargs and diff to required binaries

* add clang-format to ci formatting check

* Add max version check to formatting script

* temporarily disable checking formatting for cpp files</content>
</entry>
<entry>
<title>Mark SPIRV artifact as non-executable. (#5356)</title>
<updated>2024-10-20T21:33:04+00:00</updated>
<author>
<name>Yong He</name>
<email>yonghe@outlook.com</email>
</author>
<published>2024-10-20T21:33:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=6f9c6087ed905bcdf6f923887017559b26eff2e8'/>
<id>urn:sha1:6f9c6087ed905bcdf6f923887017559b26eff2e8</id>
<content type='text'>
</content>
</entry>
<entry>
<title> Move C interface from slang.h to slang-deprecated.h (#5301)</title>
<updated>2024-10-15T16:38:39+00:00</updated>
<author>
<name>Ellie Hermaszewska</name>
<email>ellieh@nvidia.com</email>
</author>
<published>2024-10-15T16:38:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=66b103180e168c597f3c246c68a9886b69707493'/>
<id>urn:sha1:66b103180e168c597f3c246c68a9886b69707493</id>
<content type='text'>
* Squash redundant move warnings

* Move C interface from slang.h to slang-deprecated.h

spGetBuildTagString remains, because it's useful to have before the
global session exists.

This C API is used quite pervasively in the C++ helpers (for example
slang::UserAttribute. It's not trivial to move these to
slang-deprecated.h as they're entangled with some enums which are
themselves used elsewhere in the compiler.

The fact that these helpers use the C API can be viewed as an
implementation detail for now, and this usage moved to slang-deprecated
in due course.

Closes https://github.com/shader-slang/slang/issues/4758

* Squash warnings for our usage of our deprecated API

---------

Co-authored-by: Yong He &lt;yonghe@outlook.com&gt;</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>Delete glsl_vulkan and glsl_vulkan_one_desc targets. (#4361)</title>
<updated>2024-06-12T20:49:18+00:00</updated>
<author>
<name>Yong He</name>
<email>yonghe@outlook.com</email>
</author>
<published>2024-06-12T20:49:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=0574dca987edb83325f50b435767fa0c61bae2b8'/>
<id>urn:sha1:0574dca987edb83325f50b435767fa0c61bae2b8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add host shared library target. (#4098)</title>
<updated>2024-05-04T01:02:31+00:00</updated>
<author>
<name>Yong He</name>
<email>yonghe@outlook.com</email>
</author>
<published>2024-05-04T01:02:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=59903ef7e4ddd8885f71567bf0fc85527a88fffc'/>
<id>urn:sha1:59903ef7e4ddd8885f71567bf0fc85527a88fffc</id>
<content type='text'>
* Add host shared library target.

* Attempt fix.

* Fix warnings.

* try fix.

* Fix test.

* Fix.</content>
</entry>
</feed>
